diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Creature.cpp | 8 | ||||
-rw-r--r-- | src/game/GuildHandler.cpp | 4 | ||||
-rw-r--r-- | src/game/Object.h | 5 | ||||
-rw-r--r-- | src/game/Player.h | 2 | ||||
-rw-r--r-- | src/game/Unit.cpp | 1 |
5 files changed, 15 insertions, 5 deletions
diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 6b85cdfd887..dbfe024f371 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -1537,7 +1537,13 @@ bool Creature::LoadFromDB(uint32 guid, Map *map) } 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; if(!Create(guid,map,data->phaseMask,data->id,0,team,data->posX,data->posY,data->posZ,data->orientation,data)) diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index 3f5e7fb7cb7..b46d3a43831 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -1074,7 +1074,7 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) recv_data >> unk2; // always 0 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 return; @@ -1100,7 +1100,7 @@ void WorldSession::HandleGuildBankSwapItems( WorldPacket & recv_data ) 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 return; diff --git a/src/game/Object.h b/src/game/Object.h index 9845ba10dce..efc5e8c18d2 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -518,7 +518,10 @@ class TRINITY_DLL_SPEC WorldObject : public Object, public WorldLocation 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 { return IsInDist(x, y, z, dist + GetObjectSize()); } diff --git a/src/game/Player.h b/src/game/Player.h index 68e564862be..ef9d8d30d35 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -169,7 +169,7 @@ struct ActionButton void SetActionAndType(uint32 action, ActionButtonType type) { uint32 newData = action | (uint32(type) << 24); - if (newData != packedData) + if (newData != packedData || uState == ACTIONBUTTON_DELETED) { packedData = newData; if (uState != ACTIONBUTTON_NEW) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 8e0c1fcfe03..5d59b15ebe6 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -11176,6 +11176,7 @@ void Unit::setDeathState(DeathState s) GetMotionMaster()->Clear(false); GetMotionMaster()->MoveIdle(); if(m_vehicleKit) m_vehicleKit->Die(); + StopMoving(); //without this when removing IncreaseMaxHealth aura player may stuck with 1 hp //do not why since in IncreaseMaxHealth currenthealth is checked SetHealth(0); |