*[8480] Provided real-time update for guidl ranks rights.

Specially for guild bank tab access rights (including currently open tab case!)
Send roster broadcast for all online guild memebers at any rank edit and guild
bank tab buy. Author: VladimirMangos
*Fix a pretty stupid mistake of mine with that Stoneclaw Totem fix, put the code block in the wrong function!
*Use comparison instead of std::min (for some reason std::min seems to expect 3 arguments on Windows!?)

--HG--
branch : trunk
This commit is contained in:
maximius
2009-09-14 13:34:23 -07:00
parent 10d3d6817d
commit 32798803f8
7 changed files with 46 additions and 45 deletions
+5 -3
View File
@@ -728,7 +728,7 @@ void Guild::Disband()
objmgr.RemoveGuild(m_Id);
}
void Guild::Roster(WorldSession *session)
void Guild::Roster(WorldSession *session /*= NULL*/)
{
// we can only guess size
WorldPacket data(SMSG_GUILD_ROSTER, (4+MOTD.length()+1+GINFO.length()+1+4+m_Ranks.size()*(4+4+GUILD_BANK_MAX_TABS*(4+4))+members.size()*50));
@@ -777,7 +777,10 @@ void Guild::Roster(WorldSession *session)
data << itr->second.OFFnote;
}
}
session->SendPacket(&data);;
if (session)
session->SendPacket(&data);
else
BroadcastPacket(&data);
sLog.outDebug( "WORLD: Sent (SMSG_GUILD_ROSTER)" );
}
@@ -1975,7 +1978,6 @@ void Guild::SendGuildBankTabText(WorldSession *session, uint8 TabId)
session->SendPacket(&data);
else
BroadcastPacket(&data);
}
void Guild::SwapItems(Player * pl, uint8 BankTab, uint8 BankTabSlot, uint8 BankTabDst, uint8 BankTabSlotDst, uint32 SplitedAmount )
+1 -1
View File
@@ -376,7 +376,7 @@ class Guild
return NULL;
}
void Roster(WorldSession *session);
void Roster(WorldSession *session = NULL); // NULL = broadcast
void Query(WorldSession *session);
void UpdateLogoutTime(uint64 guid);
+4 -4
View File
@@ -678,7 +678,7 @@ void WorldSession::HandleGuildRankOpcode(WorldPacket& recvPacket)
guild->SetRankRights(rankId, rights);
guild->Query(this);
guild->Roster(this);
guild->Roster(); // broadcast for tab rights update
}
void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
@@ -709,7 +709,7 @@ void WorldSession::HandleGuildAddRankOpcode(WorldPacket& recvPacket)
guild->CreateRank(rankname, GR_RIGHT_GCHATLISTEN | GR_RIGHT_GCHATSPEAK);
guild->Query(this);
guild->Roster(this);
guild->Roster(); // broadcast for tab rights update
}
void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
@@ -735,7 +735,7 @@ void WorldSession::HandleGuildDelRankOpcode(WorldPacket& /*recvPacket*/)
guild->DelRank();
guild->Query(this);
guild->Roster(this);
guild->Roster(); // broadcast for tab rights update
}
void WorldSession::SendGuildCommandResult(uint32 typecmd, const std::string& str,uint32 cmdresult)
@@ -1185,7 +1185,7 @@ void WorldSession::HandleGuildBankBuyTab( WorldPacket & recv_data )
GetPlayer()->ModifyMoney(-int(TabCost));
pGuild->SetBankMoneyPerDay(GetPlayer()->GetRank(), WITHDRAW_MONEY_UNLIMITED);
pGuild->SetBankRightsAndSlots(GetPlayer()->GetRank(), TabId, GUILD_BANK_RIGHT_FULL, WITHDRAW_SLOT_UNLIMITED, true);
pGuild->Roster(this);
pGuild->Roster(); // broadcast for tab rights update
pGuild->DisplayGuildBankTabsInfo(this);
}
+1 -1
View File
@@ -3436,7 +3436,7 @@ void AuraEffect::HandleAuraModShapeshift(bool apply, bool Real, bool changeAmoun
if (GetMiscValue() == FORM_CAT)
{
int32 basePoints = std::min(FurorChance, oldVal);
int32 basePoints = (FurorChance < oldVal ? FurorChance : oldVal);
m_target->CastCustomSpell(m_target,17099,&basePoints,NULL,NULL,true,NULL,this);
}
else
+33
View File
@@ -5345,6 +5345,39 @@ void Spell::EffectScriptEffect(uint32 effIndex)
((TempSummon*)m_caster)->UnSummon();
return;
}
// Stoneclaw Totem
case 55328: // Rank 1
case 55329: // Rank 2
case 55330: // Rank 3
case 55332: // Rank 4
case 55333: // Rank 5
case 55335: // Rank 6
case 55278: // Rank 7
case 58589: // Rank 8
case 58590: // Rank 9
case 58591: // Rank 10
{
int32 basepoints0 = damage;
// Cast Absorb on totems
for(uint8 slot = SUMMON_SLOT_TOTEM; slot < MAX_TOTEM_SLOT; ++slot)
{
if(!unitTarget->m_SummonSlot[slot])
continue;
Creature* totem = unitTarget->GetMap()->GetCreature(unitTarget->m_SummonSlot[slot]);
if(totem && totem->isTotem())
{
m_caster->CastCustomSpell(totem, 55277, &basepoints0, NULL, NULL, true);
}
}
// Glyph of Stoneclaw Totem
if (AuraEffect *aur=unitTarget->GetAuraEffect(63298, 0))
{
basepoints0 *= aur->GetAmount();
m_caster->CastCustomSpell(unitTarget, 55277, &basepoints0, NULL, NULL, true);
}
break;
}
}
break;
}
-32
View File
@@ -92,38 +92,6 @@ void Totem::InitSummon()
if(m_type == TOTEM_PASSIVE)
CastSpell(this, GetSpell(), true);
// Stoneclaw Totem
case 55328: // Rank 1
case 55329: // Rank 2
case 55330: // Rank 3
case 55332: // Rank 4
case 55333: // Rank 5
case 55335: // Rank 6
case 55278: // Rank 7
case 58589: // Rank 8
case 58590: // Rank 9
case 58591: // Rank 10
{
int32 basepoints0 = damage;
// Cast Absorb on totems
for(uint8 slot = SUMMON_SLOT_TOTEM; slot < MAX_TOTEM_SLOT; ++slot)
{
if(!unitTarget->m_SummonSlot[slot])
continue;
Creature* totem = unitTarget->GetMap()->GetCreature(unitTarget->m_SummonSlot[slot]);
if(totem && totem->isTotem())
m_caster->CastCustomSpell(totem, 55277, &basepoints0, NULL, NULL, true);
}
// Glyph of Stoneclaw Totem
if (AuraEffect *aur=unitTarget->GetAuraEffect(63298, 0))
{
basepoints0 *= aur->GetAmount();
m_caster->CastCustomSpell(unitTarget, 55277, &basepoints0, NULL, NULL, true);
}
break;
}
// Some totems can have both instant effect and passive spell
if (GetSpell(1))
CastSpell(this, GetSpell(1), true);
-2
View File
@@ -31,8 +31,6 @@
INSTANTIATE_SINGLETON_2(WorldLog, CLASS_LOCK);
INSTANTIATE_CLASS_MUTEX(WorldLog, ACE_Thread_Mutex);
#define WORLD_LOG_FILE_STRING "world.log"
WorldLog::WorldLog() : i_file(NULL)
{
Initialize();