*Fix a crash in Object.h

*Fix action button saving
*Fix a crash on item swap in guild bank
*Fix exploit moving after death in Unit.cpp
*Fix assert fail at grid load in Creature.cpp
Thanks Sisif for these! :)

--HG--
branch : trunk
This commit is contained in:
maximius
2009-10-31 02:14:25 -07:00
parent ca1e026c4f
commit 52bab5854f
5 changed files with 15 additions and 5 deletions
+7 -1
View File
@@ -1537,7 +1537,13 @@ bool Creature::LoadFromDB(uint32 guid, Map *map)
} }
m_DBTableGuid = guid; m_DBTableGuid = guid;
if (map->GetInstanceId() != 0) guid = objmgr.GenerateLowGuid(HIGHGUID_UNIT); if (map->GetInstanceId() == 0)
{
if (map->GetCreature(MAKE_NEW_GUID(guid,data->id,HIGHGUID_UNIT)))
return false;
}
else
guid = objmgr.GenerateLowGuid(HIGHGUID_UNIT);
uint16 team = 0; uint16 team = 0;
if(!Create(guid,map,data->phaseMask,data->id,0,team,data->posX,data->posY,data->posZ,data->orientation,data)) if(!Create(guid,map,data->phaseMask,data->id,0,team,data->posX,data->posY,data->posZ,data->orientation,data))
+2 -2
View File
@@ -1074,7 +1074,7 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
recv_data >> unk2; // always 0 recv_data >> unk2; // always 0
recv_data >> SplitedAmount; recv_data >> SplitedAmount;
if (BankTabSlotDst >= GUILD_BANK_MAX_SLOTS || (BankTabDst == BankTab && BankTabSlotDst == BankTabSlot)) if (BankTabSlotDst >= GUILD_BANK_MAX_SLOTS || (BankTabDst == BankTab && BankTabSlotDst == BankTabSlot) || BankTab >= GUILD_BANK_MAX_TABS)
{ {
recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet
return; return;
@@ -1100,7 +1100,7 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data )
recv_data >> SplitedAmount; recv_data >> SplitedAmount;
} }
if (BankTabSlot >= GUILD_BANK_MAX_SLOTS && BankTabSlot != 0xFF) if ((BankTabSlot >= GUILD_BANK_MAX_SLOTS && BankTabSlot != 0xFF) || BankTab >= GUILD_BANK_MAX_TABS)
{ {
recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet recv_data.rpos(recv_data.wpos()); // prevent additional spam at rejected packet
return; return;
+4 -1
View File
@@ -518,7 +518,10 @@ class TRINITY_DLL_SPEC WorldObject : public Object, public WorldLocation
bool IsInMap(const WorldObject* obj) const bool IsInMap(const WorldObject* obj) const
{ {
return IsInWorld() && obj->IsInWorld() && (GetMap() == obj->GetMap()) && InSamePhase(obj); if (obj)
return IsInWorld() && obj->IsInWorld() && (GetMap() == obj->GetMap()) && InSamePhase(obj);
else
return false;
} }
bool IsWithinDist3d(float x, float y, float z, float dist) const bool IsWithinDist3d(float x, float y, float z, float dist) const
{ return IsInDist(x, y, z, dist + GetObjectSize()); } { return IsInDist(x, y, z, dist + GetObjectSize()); }
+1 -1
View File
@@ -169,7 +169,7 @@ struct ActionButton
void SetActionAndType(uint32 action, ActionButtonType type) void SetActionAndType(uint32 action, ActionButtonType type)
{ {
uint32 newData = action | (uint32(type) << 24); uint32 newData = action | (uint32(type) << 24);
if (newData != packedData) if (newData != packedData || uState == ACTIONBUTTON_DELETED)
{ {
packedData = newData; packedData = newData;
if (uState != ACTIONBUTTON_NEW) if (uState != ACTIONBUTTON_NEW)
+1
View File
@@ -11176,6 +11176,7 @@ void Unit::setDeathState(DeathState s)
GetMotionMaster()->Clear(false); GetMotionMaster()->Clear(false);
GetMotionMaster()->MoveIdle(); GetMotionMaster()->MoveIdle();
if(m_vehicleKit) m_vehicleKit->Die(); if(m_vehicleKit) m_vehicleKit->Die();
StopMoving();
//without this when removing IncreaseMaxHealth aura player may stuck with 1 hp //without this when removing IncreaseMaxHealth aura player may stuck with 1 hp
//do not why since in IncreaseMaxHealth currenthealth is checked //do not why since in IncreaseMaxHealth currenthealth is checked
SetHealth(0); SetHealth(0);