aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-31 02:14:25 -0700
committermaximius <none@none>2009-10-31 02:14:25 -0700
commit52bab5854fe8571f2c397af8ecafaadfea50a99e (patch)
tree5a56a6baeba67fdfa31b0fe013416505432a1658 /src
parentca1e026c4f47487ed30f4b67fc1f152d84d9ee14 (diff)
*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
Diffstat (limited to 'src')
-rw-r--r--src/game/Creature.cpp8
-rw-r--r--src/game/GuildHandler.cpp4
-rw-r--r--src/game/Object.h5
-rw-r--r--src/game/Player.h2
-rw-r--r--src/game/Unit.cpp1
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);