Updated to latest PTR client build 9868.

This commit is contained in:
tomrus88 2009-05-05 10:41:22 +04:00
parent 966e12a9cd
commit 7e938af972
29 changed files with 172 additions and 121 deletions

View file

@ -1352,3 +1352,14 @@ void WorldSession::HandleEquipmentSetDelete(WorldPacket &recv_data)
_player->DeleteEquipmentSet(setGuid); _player->DeleteEquipmentSet(setGuid);
} }
void WorldSession::HandleEquipmentSetUse(WorldPacket &recv_data)
{
sLog.outDebug("CMSG_EQUIPMENT_SET_USE");
recv_data.hexlike();
// for(x) { pguid, uint8, uint8 }
WorldPacket data(SMSG_EQUIPMENT_SET_USE_RESULT, 1);
data << uint8(0);
SendPacket(&data);
}

View file

@ -65,7 +65,7 @@ ConfusedMovementGenerator<T>::Initialize(T &unit)
} }
unit.StopMoving(); unit.StopMoving();
unit.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); unit.RemoveUnitMovementFlag(MONSTER_MOVE_WALK);
unit.addUnitState(UNIT_STAT_CONFUSED); unit.addUnitState(UNIT_STAT_CONFUSED);
} }

View file

@ -123,7 +123,7 @@ m_creatureInfo(NULL), m_isActiveObject(false)
m_CreatureSpellCooldowns.clear(); m_CreatureSpellCooldowns.clear();
m_CreatureCategoryCooldowns.clear(); m_CreatureCategoryCooldowns.clear();
m_GlobalCooldown = 0; m_GlobalCooldown = 0;
m_unit_movement_flags = MOVEMENTFLAG_WALK_MODE; m_unit_movement_flags = MONSTER_MOVE_WALK;
} }
Creature::~Creature() Creature::~Creature()
@ -1484,7 +1484,7 @@ void Creature::setDeathState(DeathState s)
CreatureInfo const *cinfo = GetCreatureInfo(); CreatureInfo const *cinfo = GetCreatureInfo();
SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0); SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0);
RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
AddUnitMovementFlag(MONSTER_MOVE_FLAG_WALK); AddUnitMovementFlag(MONSTER_MOVE_WALK);
SetUInt32Value(UNIT_NPC_FLAGS, cinfo->npcflag); SetUInt32Value(UNIT_NPC_FLAGS, cinfo->npcflag);
clearUnitState(UNIT_STAT_ALL_STATE); clearUnitState(UNIT_STAT_ALL_STATE);
i_motionMaster.Clear(); i_motionMaster.Clear();

View file

@ -284,7 +284,7 @@ FleeingMovementGenerator<T>::Initialize(T &owner)
return; return;
_Init(owner); _Init(owner);
owner.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); owner.RemoveUnitMovementFlag(MONSTER_MOVE_WALK);
if(Unit * fright = ObjectAccessor::GetUnit(owner, i_frightGUID)) if(Unit * fright = ObjectAccessor::GetUnit(owner, i_frightGUID))
{ {

View file

@ -637,8 +637,6 @@ uint32 GameObject::GetLootId(GameObjectInfo const* ginfo)
return ginfo->chest.lootId; return ginfo->chest.lootId;
case GAMEOBJECT_TYPE_FISHINGHOLE: case GAMEOBJECT_TYPE_FISHINGHOLE:
return ginfo->fishinghole.lootId; return ginfo->fishinghole.lootId;
case GAMEOBJECT_TYPE_FISHINGNODE:
return ginfo->fishnode.lootId;
default: default:
return 0; return 0;
} }

View file

@ -55,6 +55,7 @@ struct GameObjectInfo
uint32 noDamageImmune; //3 break opening whenever you recieve damage? uint32 noDamageImmune; //3 break opening whenever you recieve damage?
uint32 openTextID; //4 can be used to replace castBarCaption? uint32 openTextID; //4 can be used to replace castBarCaption?
uint32 closeTextID; //5 uint32 closeTextID; //5
uint32 ignoredByPathing; //6
} door; } door;
//1 GAMEOBJECT_TYPE_BUTTON //1 GAMEOBJECT_TYPE_BUTTON
struct struct
@ -102,7 +103,9 @@ struct GameObjectInfo
uint32 logLoot; //13 uint32 logLoot; //13
uint32 openTextID; //14 can be used to replace castBarCaption? uint32 openTextID; //14 can be used to replace castBarCaption?
uint32 groupLootRules; //15 uint32 groupLootRules; //15
uint32 floatingTooltip; //16
} chest; } chest;
//4 GAMEOBJECT_TYPE_BINDER - empty
//5 GAMEOBJECT_TYPE_GENERIC //5 GAMEOBJECT_TYPE_GENERIC
struct struct
{ {
@ -130,6 +133,7 @@ struct GameObjectInfo
uint32 stealthAffected; //11 uint32 stealthAffected; //11
uint32 openTextID; //12 can be used to replace castBarCaption? uint32 openTextID; //12 can be used to replace castBarCaption?
uint32 closeTextID; //13 uint32 closeTextID; //13
uint32 ignoreTotems; //14
} trap; } trap;
//7 GAMEOBJECT_TYPE_CHAIR //7 GAMEOBJECT_TYPE_CHAIR
struct struct
@ -137,6 +141,7 @@ struct GameObjectInfo
uint32 slots; //0 uint32 slots; //0
uint32 height; //1 uint32 height; //1
uint32 onlyCreatorUse; //2 uint32 onlyCreatorUse; //2
uint32 triggeredEvent; //3
} chair; } chair;
//8 GAMEOBJECT_TYPE_SPELL_FOCUS //8 GAMEOBJECT_TYPE_SPELL_FOCUS
struct struct
@ -147,6 +152,7 @@ struct GameObjectInfo
uint32 serverOnly; //3 uint32 serverOnly; //3
uint32 questID; //4 uint32 questID; //4
uint32 large; //5 uint32 large; //5
uint32 floatingTooltip; //6
} spellFocus; } spellFocus;
//9 GAMEOBJECT_TYPE_TEXT //9 GAMEOBJECT_TYPE_TEXT
struct struct
@ -177,6 +183,9 @@ struct GameObjectInfo
uint32 closeTextID; //15 uint32 closeTextID; //15
uint32 losOK; //16 isBattlegroundObject uint32 losOK; //16 isBattlegroundObject
uint32 allowMounted; //17 uint32 allowMounted; //17
uint32 floatingTooltip; //18
uint32 gossipID; //19
uint32 WorldStateSetsState; //20
} goober; } goober;
//11 GAMEOBJECT_TYPE_TRANSPORT //11 GAMEOBJECT_TYPE_TRANSPORT
struct struct
@ -184,6 +193,8 @@ struct GameObjectInfo
uint32 pause; //0 uint32 pause; //0
uint32 startOpen; //1 uint32 startOpen; //1
uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000 uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000
uint32 pause1EventID; //3
uint32 pause2EventID; //4
} transport; } transport;
//12 GAMEOBJECT_TYPE_AREADAMAGE //12 GAMEOBJECT_TYPE_AREADAMAGE
struct struct
@ -205,6 +216,7 @@ struct GameObjectInfo
uint32 eventID; //2 uint32 eventID; //2
uint32 openTextID; //3 can be used to replace castBarCaption? uint32 openTextID; //3 can be used to replace castBarCaption?
} camera; } camera;
//14 GAMEOBJECT_TYPE_MAPOBJECT - empty
//15 GAMEOBJECT_TYPE_MO_TRANSPORT //15 GAMEOBJECT_TYPE_MO_TRANSPORT
struct struct
{ {
@ -215,13 +227,10 @@ struct GameObjectInfo
uint32 stopEventID; //4 uint32 stopEventID; //4
uint32 transportPhysics; //5 uint32 transportPhysics; //5
uint32 mapID; //6 uint32 mapID; //6
uint32 worldState1; //7
} moTransport; } moTransport;
//17 GAMEOBJECT_TYPE_FISHINGNODE //16 GAMEOBJECT_TYPE_DUELFLAG - empty
struct //17 GAMEOBJECT_TYPE_FISHINGNODE - empty
{
uint32 _data0; //0
uint32 lootId; //1
} fishnode;
//18 GAMEOBJECT_TYPE_SUMMONING_RITUAL //18 GAMEOBJECT_TYPE_SUMMONING_RITUAL
struct struct
{ {
@ -234,11 +243,8 @@ struct GameObjectInfo
uint32 castersGrouped; //6 uint32 castersGrouped; //6
uint32 ritualNoTargetCheck; //7 uint32 ritualNoTargetCheck; //7
} summoningRitual; } summoningRitual;
//20 GAMEOBJECT_TYPE_AUCTIONHOUSE //19 GAMEOBJECT_TYPE_MAILBOX - empty
struct //20 GAMEOBJECT_TYPE_DONOTUSE - empty
{
uint32 actionHouseID; //0
} auctionhouse;
//21 GAMEOBJECT_TYPE_GUARDPOST //21 GAMEOBJECT_TYPE_GUARDPOST
struct struct
{ {
@ -251,6 +257,8 @@ struct GameObjectInfo
uint32 spellId; //0 uint32 spellId; //0
uint32 charges; //1 uint32 charges; //1
uint32 partyOnly; //2 uint32 partyOnly; //2
uint32 allowMounted; //3
uint32 large; //4
} spellcaster; } spellcaster;
//23 GAMEOBJECT_TYPE_MEETINGSTONE //23 GAMEOBJECT_TYPE_MEETINGSTONE
struct struct
@ -317,6 +325,8 @@ struct GameObjectInfo
uint32 maxTime; //17 uint32 maxTime; //17
uint32 large; //18 uint32 large; //18
uint32 highlight; //19 uint32 highlight; //19
uint32 startingValue; //20
uint32 unidirectional; //21
} capturePoint; } capturePoint;
//30 GAMEOBJECT_TYPE_AURA_GENERATOR //30 GAMEOBJECT_TYPE_AURA_GENERATOR
struct struct
@ -344,12 +354,33 @@ struct GameObjectInfo
//33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING //33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
struct struct
{ {
uint32 dmgPctState1; //0 uint32 intactNumHits; //0
uint32 dmgPctState2; //1 uint32 creditProxyCreature; //1
uint32 state1Name; //2 uint32 empty1; //2
uint32 state2Name; //3 uint32 intactEvent; //3
uint32 empty2; //4
uint32 damagedNumHits; //5
uint32 empty3; //6
uint32 empty4; //7
uint32 empty5; //8
uint32 damagedEvent; //9
uint32 empty6; //10
uint32 empty7; //11
uint32 empty8; //12
uint32 empty9; //13
uint32 destroyedEvent; //14
uint32 empty10; //15
uint32 debuildingTimeSecs; //16
uint32 empty11; //17
uint32 destructibleData; //18
uint32 rebuildingEvent; //19
uint32 empty12; //20
uint32 empty13; //21
uint32 damageEvent; //22
uint32 empty14; //23
} destructibleBuilding; } destructibleBuilding;
//34 GAMEOBJECT_TYPE_TRAPDOOR //34 GAMEOBJECT_TYPE_GUILDBANK - empty
//35 GAMEOBJECT_TYPE_TRAPDOOR
struct struct
{ {
uint32 whenToPause; // 0 uint32 whenToPause; // 0
@ -358,7 +389,7 @@ struct GameObjectInfo
} trapDoor; } trapDoor;
// not use for specific field access (only for output with loop by all filed), also this determinate max union size // not use for specific field access (only for output with loop by all filed), also this determinate max union size
struct // GAMEOBJECT_TYPE_SPELLCASTER struct
{ {
uint32 data[24]; uint32 data[24];
} raw; } raw;

View file

@ -27,7 +27,7 @@
void void
HomeMovementGenerator<Creature>::Initialize(Creature & owner) HomeMovementGenerator<Creature>::Initialize(Creature & owner)
{ {
owner.RemoveUnitMovementFlag(MONSTER_MOVE_FLAG_WALK); owner.RemoveUnitMovementFlag(MONSTER_MOVE_WALK);
_setTargetLocation(owner); _setTargetLocation(owner);
} }
@ -63,7 +63,7 @@ HomeMovementGenerator<Creature>::Update(Creature &owner, const uint32& time_diff
if (time_diff > i_travel_timer) if (time_diff > i_travel_timer)
{ {
owner.AddUnitMovementFlag(MONSTER_MOVE_FLAG_WALK); owner.AddUnitMovementFlag(MONSTER_MOVE_WALK);
// restore orientation of not moving creature at returning to home // restore orientation of not moving creature at returning to home
if(owner.GetDefaultMovementType()==IDLE_MOTION_TYPE) if(owner.GetDefaultMovementType()==IDLE_MOTION_TYPE)

View file

@ -1878,12 +1878,9 @@ void Map::SendInitSelf( Player * player )
UpdateData data; UpdateData data;
bool hasTransport = false;
// attach to player data current transport data // attach to player data current transport data
if(Transport* transport = player->GetTransport()) if(Transport* transport = player->GetTransport())
{ {
hasTransport = true;
transport->BuildCreateUpdateBlockForPlayer(&data, player); transport->BuildCreateUpdateBlockForPlayer(&data, player);
} }
@ -1897,14 +1894,13 @@ void Map::SendInitSelf( Player * player )
{ {
if(player!=(*itr) && player->HaveAtClient(*itr)) if(player!=(*itr) && player->HaveAtClient(*itr))
{ {
hasTransport = true;
(*itr)->BuildCreateUpdateBlockForPlayer(&data, player); (*itr)->BuildCreateUpdateBlockForPlayer(&data, player);
} }
} }
} }
WorldPacket packet; WorldPacket packet;
data.BuildPacket(&packet, hasTransport); data.BuildPacket(&packet);
player->GetSession()->SendPacket(&packet); player->GetSession()->SendPacket(&packet);
} }
@ -1921,20 +1917,17 @@ void Map::SendInitTransports( Player * player )
MapManager::TransportSet& tset = tmap[player->GetMapId()]; MapManager::TransportSet& tset = tmap[player->GetMapId()];
bool hasTransport = false;
for (MapManager::TransportSet::const_iterator i = tset.begin(); i != tset.end(); ++i) for (MapManager::TransportSet::const_iterator i = tset.begin(); i != tset.end(); ++i)
{ {
// send data for current transport in other place // send data for current transport in other place
if((*i) != player->GetTransport() && (*i)->GetMapId()==i_id) if((*i) != player->GetTransport() && (*i)->GetMapId()==i_id)
{ {
hasTransport = true;
(*i)->BuildCreateUpdateBlockForPlayer(&transData, player); (*i)->BuildCreateUpdateBlockForPlayer(&transData, player);
} }
} }
WorldPacket packet; WorldPacket packet;
transData.BuildPacket(&packet, hasTransport); transData.BuildPacket(&packet);
player->GetSession()->SendPacket(&packet); player->GetSession()->SendPacket(&packet);
} }

View file

@ -60,7 +60,7 @@ uint32 GuidHigh2TypeId(uint32 guid_hi)
case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT; case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT;
case HIGHGUID_VEHICLE: return TYPEID_UNIT; case HIGHGUID_VEHICLE: return TYPEID_UNIT;
} }
return MAX_TYPEID; // unknown return NUM_CLIENT_OBJECT_TYPES; // unknown
} }
Object::Object( ) Object::Object( )
@ -124,10 +124,10 @@ void Object::_Create( uint32 guidlow, uint32 entry, HighGuid guidhigh )
void Object::BuildMovementUpdateBlock(UpdateData * data, uint32 flags ) const void Object::BuildMovementUpdateBlock(UpdateData * data, uint32 flags ) const
{ {
ByteBuffer buf(500); ByteBuffer buf(50);
buf << uint8( UPDATETYPE_MOVEMENT ); buf << uint8( UPDATETYPE_MOVEMENT );
buf << GetGUID(); buf.append(GetPackGUID());
_BuildMovementUpdate(&buf, flags, 0x00000000); _BuildMovementUpdate(&buf, flags, 0x00000000);
@ -185,10 +185,9 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) c
//sLog.outDebug("BuildCreateUpdate: update-type: %u, object-type: %u got flags: %X, flags2: %X", updatetype, m_objectTypeId, flags, flags2); //sLog.outDebug("BuildCreateUpdate: update-type: %u, object-type: %u got flags: %X, flags2: %X", updatetype, m_objectTypeId, flags, flags2);
ByteBuffer buf(500); ByteBuffer buf(50);
buf << (uint8)updatetype; buf << (uint8)updatetype;
//buf.append(GetPackGUID()); //client crashes when using this buf.append(GetPackGUID()); //client crashes when using this
buf << (uint8)0xFF << GetGUID();
buf << (uint8)m_objectTypeId; buf << (uint8)m_objectTypeId;
_BuildMovementUpdate(&buf, flags, flags2); _BuildMovementUpdate(&buf, flags, flags2);
@ -225,12 +224,10 @@ void Object::SendUpdateToPlayer(Player* player)
void Object::BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target) const void Object::BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target) const
{ {
ByteBuffer buf(500); ByteBuffer buf(50);
buf << (uint8) UPDATETYPE_VALUES; buf << (uint8) UPDATETYPE_VALUES;
//buf.append(GetPackGUID()); //client crashes when using this. but not have crash in debug mode buf.append(GetPackGUID()); //client crashes when using this. but not have crash in debug mode
buf << (uint8)0xFF;
buf << GetGUID();
UpdateMask updateMask; UpdateMask updateMask;
updateMask.SetCount( m_valuesCount ); updateMask.SetCount( m_valuesCount );
@ -251,7 +248,7 @@ void Object::DestroyForPlayer(Player *target) const
ASSERT(target); ASSERT(target);
WorldPacket data(SMSG_DESTROY_OBJECT, 8); WorldPacket data(SMSG_DESTROY_OBJECT, 8);
data << GetGUID(); data << uint64(GetGUID());
data << uint8(0); // WotLK (bool) data << uint8(0); // WotLK (bool)
target->GetSession()->SendPacket( &data ); target->GetSession()->SendPacket( &data );
} }
@ -394,7 +391,7 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2
FlightPathMovementGenerator *fmg = (FlightPathMovementGenerator*)(((Player*)this)->GetMotionMaster()->top()); FlightPathMovementGenerator *fmg = (FlightPathMovementGenerator*)(((Player*)this)->GetMotionMaster()->top());
uint32 flags3 = MONSTER_MOVE_FLAG_SPLINE_FLY; uint32 flags3 = MONSTER_MOVE_SPLINE_FLY;
*data << uint32(flags3); // splines flag? *data << uint32(flags3); // splines flag?
@ -464,6 +461,10 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2
*data << ((WorldObject*)this)->GetPositionY(); *data << ((WorldObject*)this)->GetPositionY();
*data << ((WorldObject*)this)->GetPositionZ(); *data << ((WorldObject*)this)->GetPositionZ();
*data << ((WorldObject*)this)->GetOrientation(); *data << ((WorldObject*)this)->GetOrientation();
if(GetTypeId() == TYPEID_CORPSE)
*data << float(((WorldObject*)this)->GetOrientation());
else
*data << float(0); *data << float(0);
} }
else else
@ -1404,7 +1405,7 @@ void WorldObject::BuildHeartBeatMsg(WorldPacket *data) const
data->append(GetPackGUID()); data->append(GetPackGUID());
*data << uint32(((Unit*)this)->GetUnitMovementFlags()); // movement flags *data << uint32(((Unit*)this)->GetUnitMovementFlags()); // movement flags
*data << uint16(0); // 2.3.0 *data << uint16(0); // 2.3.0
*data << getMSTime(); // time *data << uint32(getMSTime()); // time
*data << m_positionX; *data << m_positionX;
*data << m_positionY; *data << m_positionY;
*data << m_positionZ; *data << m_positionZ;
@ -1423,7 +1424,7 @@ void WorldObject::BuildTeleportAckMsg(WorldPacket *data, float x, float y, float
*data << uint32(0); // this value increments every time *data << uint32(0); // this value increments every time
*data << uint32(((Unit*)this)->GetUnitMovementFlags()); // movement flags *data << uint32(((Unit*)this)->GetUnitMovementFlags()); // movement flags
*data << uint16(0); // 2.3.0 *data << uint16(0); // 2.3.0
*data << getMSTime(); // time *data << uint32(getMSTime()); // time
*data << x; *data << x;
*data << y; *data << y;
*data << z; *data << z;
@ -1728,7 +1729,7 @@ void WorldObject::PlayDistanceSound( uint32 sound_id, Player* target /*= NULL*/
{ {
WorldPacket data(SMSG_PLAY_OBJECT_SOUND,4+8); WorldPacket data(SMSG_PLAY_OBJECT_SOUND,4+8);
data << uint32(sound_id); data << uint32(sound_id);
data << GetGUID(); data << uint64(GetGUID());
if (target) if (target)
target->SendDirectMessage( &data ); target->SendDirectMessage( &data );
else else

View file

@ -46,9 +46,7 @@ enum TypeMask
TYPEMASK_PLAYER = 0x0010, TYPEMASK_PLAYER = 0x0010,
TYPEMASK_GAMEOBJECT = 0x0020, TYPEMASK_GAMEOBJECT = 0x0020,
TYPEMASK_DYNAMICOBJECT = 0x0040, TYPEMASK_DYNAMICOBJECT = 0x0040,
TYPEMASK_CORPSE = 0x0080, TYPEMASK_CORPSE = 0x0080
TYPEMASK_AIGROUP = 0x0100,
TYPEMASK_AREATRIGGER = 0x0200
}; };
enum TypeID enum TypeID
@ -60,11 +58,10 @@ enum TypeID
TYPEID_PLAYER = 4, TYPEID_PLAYER = 4,
TYPEID_GAMEOBJECT = 5, TYPEID_GAMEOBJECT = 5,
TYPEID_DYNAMICOBJECT = 6, TYPEID_DYNAMICOBJECT = 6,
TYPEID_CORPSE = 7, TYPEID_CORPSE = 7
TYPEID_AIGROUP = 8,
TYPEID_AREATRIGGER = 9
}; };
#define MAX_TYPEID 10
#define NUM_CLIENT_OBJECT_TYPES 8
uint32 GuidHigh2TypeId(uint32 guid_hi); uint32 GuidHigh2TypeId(uint32 guid_hi);

View file

@ -1253,6 +1253,6 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
/*0x4C8*/ { "SMSG_UNKNOWN_1224", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x4C8*/ { "SMSG_UNKNOWN_1224", STATUS_NEVER, &WorldSession::Handle_ServerSide },
/*0x4C9*/ { "UMSG_UNKNOWN_1225", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x4C9*/ { "UMSG_UNKNOWN_1225", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4CA*/ { "UMSG_UNKNOWN_1226", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x4CA*/ { "UMSG_UNKNOWN_1226", STATUS_NEVER, &WorldSession::Handle_NULL },
/*0x4CB*/ { "UMSG_UNKNOWN_1227", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x4CB*/ { "CMSG_EQUIPMENT_SET_USE", STATUS_LOGGEDIN, &WorldSession::HandleEquipmentSetUse },
/*0x4CC*/ { "UMSG_UNKNOWN_1228", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x4CC*/ { "SMSG_EQUIPMENT_SET_USE_RESULT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
}; };

View file

@ -1261,8 +1261,8 @@ enum Opcodes
SMSG_UNKNOWN_1224 = 0x4C8, // uint32 "Can't change arena team..." SMSG_UNKNOWN_1224 = 0x4C8, // uint32 "Can't change arena team..."
UMSG_UNKNOWN_1225 = 0x4C9, // not found UMSG_UNKNOWN_1225 = 0x4C9, // not found
UMSG_UNKNOWN_1226 = 0x4CA, // not found UMSG_UNKNOWN_1226 = 0x4CA, // not found
UMSG_UNKNOWN_1227 = 0x4CB, // CMSG, lua: UseEquipmentSet CMSG_EQUIPMENT_SET_USE = 0x4CB, // CMSG, lua: UseEquipmentSet
UMSG_UNKNOWN_1228 = 0x4CC, // SMSG, UseEquipmentSetResult? SMSG_EQUIPMENT_SET_USE_RESULT = 0x4CC, // SMSG, UseEquipmentSetResult?
NUM_MSG_TYPES = 0x4CD NUM_MSG_TYPES = 0x4CD
}; };

View file

@ -17787,6 +17787,7 @@ void Player::SendInitialPacketsBeforeAddToMap()
data.Initialize(SMSG_LOGIN_SETTIMESPEED, 8); data.Initialize(SMSG_LOGIN_SETTIMESPEED, 8);
data << uint32(secsToTimeBitFields(sWorld.GetGameTime())); data << uint32(secsToTimeBitFields(sWorld.GetGameTime()));
data << (float)0.01666667f; // game speed data << (float)0.01666667f; // game speed
data << uint32(0); // added in 3.1.2
GetSession()->SendPacket( &data ); GetSession()->SendPacket( &data );
// set fly flag if in fly form or taxi flight to prevent visually drop at ground in showup moment // set fly flag if in fly form or taxi flight to prevent visually drop at ground in showup moment

View file

@ -31,7 +31,7 @@ void PointMovementGenerator<T>::Initialize(T &unit)
i_destinationHolder.SetDestination(traveller,i_x,i_y,i_z); i_destinationHolder.SetDestination(traveller,i_x,i_y,i_z);
if (unit.GetTypeId() == TYPEID_UNIT && ((Creature*)&unit)->canFly()) if (unit.GetTypeId() == TYPEID_UNIT && ((Creature*)&unit)->canFly())
unit.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2); unit.AddUnitMovementFlag(MONSTER_MOVE_FLY);
} }
template<class T> template<class T>

View file

@ -91,13 +91,13 @@ RandomMovementGenerator<Creature>::_setRandomLocation(Creature &creature)
if (is_air_ok) if (is_air_ok)
{ {
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime()); i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); creature.AddUnitMovementFlag(MONSTER_MOVE_FLY);
} }
//else if (is_water_ok) // Swimming mode to be done with more than this check //else if (is_water_ok) // Swimming mode to be done with more than this check
else else
{ {
i_nextMoveTime.Reset(urand(500+i_destinationHolder.GetTotalTravelTime(),5000+i_destinationHolder.GetTotalTravelTime())); i_nextMoveTime.Reset(urand(500+i_destinationHolder.GetTotalTravelTime(),5000+i_destinationHolder.GetTotalTravelTime()));
creature.SetUnitMovementFlags(MONSTER_MOVE_FLAG_WALK); creature.SetUnitMovementFlags(MONSTER_MOVE_WALK);
} }
} }
@ -109,9 +109,9 @@ RandomMovementGenerator<Creature>::Initialize(Creature &creature)
return; return;
if (creature.canFly()) if (creature.canFly())
creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); creature.AddUnitMovementFlag(MONSTER_MOVE_FLY);
else else
creature.SetUnitMovementFlags(irand(0,RUNNING_CHANCE_RANDOMMV) > 0 ? MONSTER_MOVE_FLAG_WALK : MONSTER_MOVE_FLAG_RUN); creature.SetUnitMovementFlags(irand(0,RUNNING_CHANCE_RANDOMMV) > 0 ? MONSTER_MOVE_WALK : MONSTER_MOVE_NONE);
_setRandomLocation(creature); _setRandomLocation(creature);
} }
@ -148,14 +148,14 @@ RandomMovementGenerator<Creature>::Update(Creature &creature, const uint32 &diff
if(i_nextMoveTime.Passed()) if(i_nextMoveTime.Passed())
{ {
if (creature.canFly()) if (creature.canFly())
creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); creature.AddUnitMovementFlag(MONSTER_MOVE_FLY);
else else
creature.SetUnitMovementFlags(irand(0,RUNNING_CHANCE_RANDOMMV) > 0 ? MONSTER_MOVE_FLAG_WALK : MONSTER_MOVE_FLAG_RUN); creature.SetUnitMovementFlags(irand(0,RUNNING_CHANCE_RANDOMMV) > 0 ? MONSTER_MOVE_WALK : MONSTER_MOVE_NONE);
_setRandomLocation(creature); _setRandomLocation(creature);
} }
else if(creature.isPet() && creature.GetOwner() && creature.GetDistance(creature.GetOwner()) > PET_FOLLOW_DIST+2.5f) else if(creature.isPet() && creature.GetOwner() && creature.GetDistance(creature.GetOwner()) > PET_FOLLOW_DIST+2.5f)
{ {
creature.SetUnitMovementFlags(MONSTER_MOVE_FLAG_WALK); creature.SetUnitMovementFlags(MONSTER_MOVE_WALK);
_setRandomLocation(creature); _setRandomLocation(creature);
} }
} }

View file

@ -1100,7 +1100,7 @@ enum GameobjectTypes
GAMEOBJECT_TYPE_FISHINGNODE = 17, GAMEOBJECT_TYPE_FISHINGNODE = 17,
GAMEOBJECT_TYPE_SUMMONING_RITUAL = 18, GAMEOBJECT_TYPE_SUMMONING_RITUAL = 18,
GAMEOBJECT_TYPE_MAILBOX = 19, GAMEOBJECT_TYPE_MAILBOX = 19,
GAMEOBJECT_TYPE_AUCTIONHOUSE = 20, GAMEOBJECT_TYPE_DO_NOT_USE = 20,
GAMEOBJECT_TYPE_GUARDPOST = 21, GAMEOBJECT_TYPE_GUARDPOST = 21,
GAMEOBJECT_TYPE_SPELLCASTER = 22, GAMEOBJECT_TYPE_SPELLCASTER = 22,
GAMEOBJECT_TYPE_MEETINGSTONE = 23, GAMEOBJECT_TYPE_MEETINGSTONE = 23,
@ -1108,7 +1108,7 @@ enum GameobjectTypes
GAMEOBJECT_TYPE_FISHINGHOLE = 25, GAMEOBJECT_TYPE_FISHINGHOLE = 25,
GAMEOBJECT_TYPE_FLAGDROP = 26, GAMEOBJECT_TYPE_FLAGDROP = 26,
GAMEOBJECT_TYPE_MINI_GAME = 27, GAMEOBJECT_TYPE_MINI_GAME = 27,
GAMEOBJECT_TYPE_LOTTERY_KIOSK = 28, GAMEOBJECT_TYPE_DO_NOT_USE_2 = 28,
GAMEOBJECT_TYPE_CAPTURE_POINT = 29, GAMEOBJECT_TYPE_CAPTURE_POINT = 29,
GAMEOBJECT_TYPE_AURA_GENERATOR = 30, GAMEOBJECT_TYPE_AURA_GENERATOR = 30,
GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31, GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31,

View file

@ -3189,7 +3189,7 @@ void Aura::HandleModPossessPet(bool apply, bool Real)
{ {
pet->AttackStop(); pet->AttackStop();
pet->GetMotionMaster()->MoveFollow(caster, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); pet->GetMotionMaster()->MoveFollow(caster, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
pet->SetUnitMovementFlags(MONSTER_MOVE_FLAG_WALK); pet->SetUnitMovementFlags(MONSTER_MOVE_WALK);
} }
} }

View file

@ -5899,7 +5899,7 @@ void Spell::EffectCharge(uint32 /*i*/)
((Creature *)unitTarget)->StopMoving(); ((Creature *)unitTarget)->StopMoving();
// Only send MOVEMENTFLAG_WALK_MODE, client has strange issues with other move flags // Only send MOVEMENTFLAG_WALK_MODE, client has strange issues with other move flags
m_caster->SendMonsterMove(x, y, z, 0, MONSTER_MOVE_FLAG_WALK, 1); m_caster->SendMonsterMove(x, y, z, 0, MONSTER_MOVE_WALK, 1);
if(m_caster->GetTypeId() != TYPEID_PLAYER) if(m_caster->GetTypeId() != TYPEID_PLAYER)
m_caster->GetMap()->CreatureRelocation((Creature*)m_caster,x,y,z,m_caster->GetOrientation()); m_caster->GetMap()->CreatureRelocation((Creature*)m_caster,x,y,z,m_caster->GetOrientation());

View file

@ -85,17 +85,17 @@ TargetedMovementGenerator<T>::_setTargetLocation(T &owner)
i_destinationHolder.SetDestination(traveller, x, y, z); i_destinationHolder.SetDestination(traveller, x, y, z);
owner.addUnitState(UNIT_STAT_CHASE); owner.addUnitState(UNIT_STAT_CHASE);
if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly()) if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly())
owner.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2); owner.AddUnitMovementFlag(MONSTER_MOVE_FLY);
} }
template<class T> template<class T>
void void
TargetedMovementGenerator<T>::Initialize(T &owner) TargetedMovementGenerator<T>::Initialize(T &owner)
{ {
owner.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); owner.RemoveUnitMovementFlag(MONSTER_MOVE_WALK);
if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly()) if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly())
owner.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2); owner.AddUnitMovementFlag(MONSTER_MOVE_FLY);
_setTargetLocation(owner); _setTargetLocation(owner);
} }
@ -147,7 +147,7 @@ TargetedMovementGenerator<T>::Update(T &owner, const uint32 & time_diff)
{ {
owner.addUnitState(UNIT_STAT_CHASE); owner.addUnitState(UNIT_STAT_CHASE);
if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly()) if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly())
owner.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2); owner.AddUnitMovementFlag(MONSTER_MOVE_FLY);
i_destinationHolder.StartTravel(traveller); i_destinationHolder.StartTravel(traveller);
return true; return true;

View file

@ -540,7 +540,7 @@ void Transport::UpdateForMap(Map const* targetMap)
UpdateData transData; UpdateData transData;
BuildCreateUpdateBlockForPlayer(&transData, itr->getSource()); BuildCreateUpdateBlockForPlayer(&transData, itr->getSource());
WorldPacket packet; WorldPacket packet;
transData.BuildPacket(&packet, true); transData.BuildPacket(&packet);
itr->getSource()->SendDirectMessage(&packet); itr->getSource()->SendDirectMessage(&packet);
} }
} }
@ -550,7 +550,7 @@ void Transport::UpdateForMap(Map const* targetMap)
UpdateData transData; UpdateData transData;
BuildOutOfRangeUpdateBlock(&transData); BuildOutOfRangeUpdateBlock(&transData);
WorldPacket out_packet; WorldPacket out_packet;
transData.BuildPacket(&out_packet, true); transData.BuildPacket(&out_packet);
for(Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) for(Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr)
if(this != itr->getSource()->GetTransport()) if(this != itr->getSource()->GetTransport())

View file

@ -71,9 +71,9 @@ inline uint32 Traveller<T>::GetTotalTrevelTimeTo(float x, float y, float z)
template<> template<>
inline float Traveller<Creature>::Speed() inline float Traveller<Creature>::Speed()
{ {
if(i_traveller.HasUnitMovementFlag(MONSTER_MOVE_FLAG_WALK)) if(i_traveller.HasUnitMovementFlag(MONSTER_MOVE_WALK))
return i_traveller.GetSpeed(MOVE_WALK); return i_traveller.GetSpeed(MOVE_WALK);
else if(i_traveller.HasUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY)) else if(i_traveller.HasUnitMovementFlag(MONSTER_MOVE_FLY))
return i_traveller.GetSpeed(MOVE_FLIGHT); return i_traveller.GetSpeed(MOVE_FLIGHT);
else else
return i_traveller.GetSpeed(MOVE_RUN); return i_traveller.GetSpeed(MOVE_RUN);
@ -138,7 +138,7 @@ template<>
inline void Traveller<Player>::MoveTo(float x, float y, float z, uint32 t) inline void Traveller<Player>::MoveTo(float x, float y, float z, uint32 t)
{ {
//Only send MOVEMENTFLAG_WALK_MODE, client has strange issues with other move flags //Only send MOVEMENTFLAG_WALK_MODE, client has strange issues with other move flags
i_traveller.SendMonsterMove(x, y, z, 0, MONSTER_MOVE_FLAG_WALK, t); i_traveller.SendMonsterMove(x, y, z, 0, MONSTER_MOVE_WALK, t);
} }
typedef Traveller<Creature> CreatureTraveller; typedef Traveller<Creature> CreatureTraveller;

View file

@ -257,6 +257,8 @@ void Unit::SendMonsterMoveWithSpeed(float x, float y, float z, uint32 transitTim
void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 type, uint32 MovementFlags, uint32 Time, Player* player) void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 type, uint32 MovementFlags, uint32 Time, Player* player)
{ {
float moveTime = Time;
WorldPacket data( SMSG_MONSTER_MOVE, (41 + GetPackGUID().size()) ); WorldPacket data( SMSG_MONSTER_MOVE, (41 + GetPackGUID().size()) );
data.append(GetPackGUID()); data.append(GetPackGUID());
data << uint8(0); // new in 3.1 data << uint8(0); // new in 3.1
@ -284,11 +286,12 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 ty
break; break;
} }
if(MovementFlags & MONSTER_MOVE_FLAG_SPLINE) // we shouldn't get here with this flag
sLog.outError("SHIT HAPPENED!");
data << uint32(MovementFlags); data << uint32(MovementFlags);
data << uint32(Time); // Time in between points
if(MovementFlags & MONSTER_MOVE_WALK)
moveTime *= 1.5f;
data << uint32(moveTime); // Time in between points
data << uint32(1); // 1 single waypoint data << uint32(1); // 1 single waypoint
data << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B data << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B

View file

@ -597,18 +597,38 @@ enum MovementFlags
enum MonsterMovementFlags enum MonsterMovementFlags
{ {
MONSTER_MOVE_FLAG_WALK = 0x00000000, MONSTER_MOVE_NONE = 0x00000000,
MONSTER_MOVE_FLAG_UNK1 = 0x00000800, // float+uint32 MONSTER_MOVE_FORWARD = 0x00000001,
MONSTER_MOVE_FLAG_RUN = 0x00001000, MONSTER_MOVE_BACKWARD = 0x00000002,
MONSTER_MOVE_FLAG_SPLINE = 0x00002000, // spline n*(float x,y,z) MONSTER_MOVE_STRAFE_LEFT = 0x00000004,
MONSTER_MOVE_FLAG_SPLINE2 = 0x00040000, // spline n*(float x,y,z) MONSTER_MOVE_STRAFE_RIGHT = 0x00000008,
MONSTER_MOVE_FLAG_UNK2 = 0x00080000, MONSTER_MOVE_LEFT = 0x00000010, // turn
MONSTER_MOVE_FLAG_UNK3 = 0x00100000, MONSTER_MOVE_RIGHT = 0x00000020, // turn
MONSTER_MOVE_FLAG_UNK4 = 0x00200000, // uint8+uint32 MONSTER_MOVE_PITCH_UP = 0x00000040,
MONSTER_MOVE_PITCH_DOWN = 0x00000080,
MONSTER_MOVE_TELEPORT = 0x00000100,
MONSTER_MOVE_TELEPORT2 = 0x00000200,
MONSTER_MOVE_LEVITATING = 0x00000400,
MONSTER_MOVE_UNK1 = 0x00000800, // float+uint32
MONSTER_MOVE_WALK = 0x00001000, // run2?
MONSTER_MOVE_SPLINE = 0x00002000, // spline n*(float x,y,z)
// 0x4000, 0x8000, 0x10000, 0x20000 run
MONSTER_MOVE_SPLINE2 = 0x00040000, // spline n*(float x,y,z)
MONSTER_MOVE_UNK2 = 0x00080000, // used for flying mobs
MONSTER_MOVE_UNK3 = 0x00100000, // used for flying mobs
MONSTER_MOVE_UNK4 = 0x00200000, // uint8+uint32
MONSTER_MOVE_UNK5 = 0x00400000, // run in place, then teleport to final point
MONSTER_MOVE_UNK6 = 0x00800000, // teleport
MONSTER_MOVE_UNK7 = 0x01000000, // run
MONSTER_MOVE_FLY = 0x02000000, // swimming/flying (depends on mob?)
MONSTER_MOVE_UNK9 = 0x04000000, // run
MONSTER_MOVE_UNK10 = 0x08000000, // run
MONSTER_MOVE_UNK11 = 0x10000000, // run
MONSTER_MOVE_UNK12 = 0x20000000, // run
MONSTER_MOVE_UNK13 = 0x40000000, // levitating
// masks // masks
MONSTER_MOVE_FLAG_SPLINE_FLY= 0x00003000, // fly by points MONSTER_MOVE_SPLINE_FLY = 0x00003000, // fly by points
MONSTER_MOVE_FLAG_TEST_FLY = 0x00180000 // found these flags on flying mob with MONSTER_MOVE_FLAG_SPLINE in same time
}; };
enum DiminishingLevels enum DiminishingLevels

View file

@ -101,24 +101,20 @@ void UpdateData::Compress(void* dst, uint32 *dst_size, void* src, int src_size)
*dst_size = c_stream.total_out; *dst_size = c_stream.total_out;
} }
bool UpdateData::BuildPacket(WorldPacket *packet, bool hasTransport) bool UpdateData::BuildPacket(WorldPacket *packet)
{ {
ByteBuffer buf(m_data.size() + 10 + m_outOfRangeGUIDs.size()*8); ByteBuffer buf(m_data.size());
buf << (uint32) (!m_outOfRangeGUIDs.empty() ? m_blockCount + 1 : m_blockCount); buf << (uint32) (!m_outOfRangeGUIDs.empty() ? m_blockCount + 1 : m_blockCount);
//buf << (uint8) (hasTransport ? 1 : 0);
if(!m_outOfRangeGUIDs.empty()) if(!m_outOfRangeGUIDs.empty())
{ {
buf << (uint8) UPDATETYPE_OUT_OF_RANGE_OBJECTS; buf << (uint8) UPDATETYPE_OUT_OF_RANGE_OBJECTS;
buf << (uint32) m_outOfRangeGUIDs.size(); buf << (uint32) m_outOfRangeGUIDs.size();
for(std::set<uint64>::const_iterator i = m_outOfRangeGUIDs.begin(); for(std::set<uint64>::const_iterator i = m_outOfRangeGUIDs.begin(); i != m_outOfRangeGUIDs.end(); ++i)
i != m_outOfRangeGUIDs.end(); ++i)
{ {
//buf.appendPackGUID(*i); buf.appendPackGUID(*i);
buf << (uint8)0xFF;
buf << (uint64) *i;
} }
} }
@ -126,24 +122,23 @@ bool UpdateData::BuildPacket(WorldPacket *packet, bool hasTransport)
packet->clear(); packet->clear();
if (m_data.size() > 50 ) size_t pSize = buf.size();
if (pSize > 100 ) // compress large packets
{ {
uint32 destsize = buf.size() + buf.size()/10 + 16; packet->resize(pSize);
packet->resize( destsize );
packet->put(0, (uint32)buf.size()); packet->put<uint32>(0, pSize);
Compress(const_cast<uint8*>(packet->contents()) + sizeof(uint32), uint32 destsize = pSize;
&destsize, Compress(const_cast<uint8*>(packet->contents()) + sizeof(uint32), &destsize, (void*)buf.contents(), pSize);
(void*)buf.contents(),
buf.size());
if (destsize == 0) if (destsize == 0)
return false; return false;
packet->resize( destsize + sizeof(uint32) ); packet->resize( destsize + sizeof(uint32) );
packet->SetOpcode( SMSG_COMPRESSED_UPDATE_OBJECT ); packet->SetOpcode( SMSG_COMPRESSED_UPDATE_OBJECT );
} }
else else // send small packets without compression
{ {
packet->append( buf ); packet->append( buf );
packet->SetOpcode( SMSG_UPDATE_OBJECT ); packet->SetOpcode( SMSG_UPDATE_OBJECT );

View file

@ -54,7 +54,7 @@ class UpdateData
void AddOutOfRangeGUID(std::set<uint64>& guids); void AddOutOfRangeGUID(std::set<uint64>& guids);
void AddOutOfRangeGUID(const uint64 &guid); void AddOutOfRangeGUID(const uint64 &guid);
void AddUpdateBlock(const ByteBuffer &block); void AddUpdateBlock(const ByteBuffer &block);
bool BuildPacket(WorldPacket *packet, bool hasTransport = false); bool BuildPacket(WorldPacket *packet);
bool HasData() { return m_blockCount > 0 || !m_outOfRangeGUIDs.empty(); } bool HasData() { return m_blockCount > 0 || !m_outOfRangeGUIDs.empty(); }
void Clear(); void Clear();

View file

@ -19,7 +19,7 @@
#ifndef _UPDATEFIELDS_AUTO_H #ifndef _UPDATEFIELDS_AUTO_H
#define _UPDATEFIELDS_AUTO_H #define _UPDATEFIELDS_AUTO_H
// Auto generated for version 3, 1, 1, 9835 // Auto generated for version 3, 1, 2, 9868
enum EObjectFields enum EObjectFields
{ {

View file

@ -109,7 +109,7 @@ bool WaypointMovementGenerator<Creature>::Update(Creature &creature, const uint3
// Now we re-set destination to same node and start travel // Now we re-set destination to same node and start travel
creature.addUnitState(UNIT_STAT_ROAMING); creature.addUnitState(UNIT_STAT_ROAMING);
if (creature.canFly()) if (creature.canFly())
creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); creature.AddUnitMovementFlag(MONSTER_MOVE_FLY);
const WaypointNode &node = i_path->at(i_currentNode); const WaypointNode &node = i_path->at(i_currentNode);
i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z); i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z);
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime()); i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
@ -172,7 +172,7 @@ bool WaypointMovementGenerator<Creature>::Update(Creature &creature, const uint3
{ {
creature.addUnitState(UNIT_STAT_ROAMING); creature.addUnitState(UNIT_STAT_ROAMING);
if (creature.canFly()) if (creature.canFly())
creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); creature.AddUnitMovementFlag(MONSTER_MOVE_FLY);
const WaypointNode &node = i_path->at(i_currentNode); const WaypointNode &node = i_path->at(i_currentNode);
i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z); i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z);
i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime()); i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime());
@ -240,7 +240,7 @@ void FlightPathMovementGenerator::Initialize(Player &player)
// do not send movement, it was sent already // do not send movement, it was sent already
i_destinationHolder.SetDestination(traveller, i_path[i_currentNode].x, i_path[i_currentNode].y, i_path[i_currentNode].z, false); i_destinationHolder.SetDestination(traveller, i_path[i_currentNode].x, i_path[i_currentNode].y, i_path[i_currentNode].z, false);
player.SendMonsterMoveByPath(GetPath(),GetCurrentNode(),GetPathAtMapEnd(),MONSTER_MOVE_FLAG_SPLINE_FLY); player.SendMonsterMoveByPath(GetPath(),GetCurrentNode(),GetPathAtMapEnd(),MONSTER_MOVE_SPLINE_FLY);
} }
void FlightPathMovementGenerator::Finalize(Player & player) void FlightPathMovementGenerator::Finalize(Player & player)
@ -261,7 +261,7 @@ void FlightPathMovementGenerator::Finalize(Player & player)
if(player.pvpInfo.inHostileArea) if(player.pvpInfo.inHostileArea)
player.CastSpell(&player, 2479, true); player.CastSpell(&player, 2479, true);
player.SetUnitMovementFlags(MONSTER_MOVE_FLAG_WALK); player.SetUnitMovementFlags(MONSTER_MOVE_WALK);
player.StopMoving(); player.StopMoving();
} }
} }

View file

@ -709,6 +709,7 @@ class MANGOS_DLL_SPEC WorldSession
void HandleInspectAchievements(WorldPacket& recv_data); void HandleInspectAchievements(WorldPacket& recv_data);
void HandleEquipmentSetSave(WorldPacket& recv_data); void HandleEquipmentSetSave(WorldPacket& recv_data);
void HandleEquipmentSetDelete(WorldPacket& recv_data); void HandleEquipmentSetDelete(WorldPacket& recv_data);
void HandleEquipmentSetUse(WorldPacket& recv_data);
private: private:
// private trade methods // private trade methods
void moveItems(Item* myItems[], Item* hisItems[]); void moveItems(Item* myItems[], Item* hisItems[]);

View file

@ -66,8 +66,8 @@ enum LoginResult
// we need to stick to 1 version or half of the stuff will work for someone // we need to stick to 1 version or half of the stuff will work for someone
// others will not and opposite // others will not and opposite
// will only support WoW, WoW:TBC and WoW:WotLK 3.1.1a client build 9835... // will only support WoW, WoW:TBC and WoW:WotLK 3.1.2 client build 9868...
#define EXPECTED_MANGOS_CLIENT_BUILD {9835, 9855, 0} #define EXPECTED_MANGOS_CLIENT_BUILD {9835, 9868, 0}
#endif #endif