diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index c53d2be26..37ba758c9 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -1352,3 +1352,14 @@ void WorldSession::HandleEquipmentSetDelete(WorldPacket &recv_data) _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); +} diff --git a/src/game/ConfusedMovementGenerator.cpp b/src/game/ConfusedMovementGenerator.cpp index d591d151f..5928a20d9 100644 --- a/src/game/ConfusedMovementGenerator.cpp +++ b/src/game/ConfusedMovementGenerator.cpp @@ -65,7 +65,7 @@ ConfusedMovementGenerator::Initialize(T &unit) } unit.StopMoving(); - unit.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + unit.RemoveUnitMovementFlag(MONSTER_MOVE_WALK); unit.addUnitState(UNIT_STAT_CONFUSED); } diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 676f29268..6cdbae73a 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -123,7 +123,7 @@ m_creatureInfo(NULL), m_isActiveObject(false) m_CreatureSpellCooldowns.clear(); m_CreatureCategoryCooldowns.clear(); m_GlobalCooldown = 0; - m_unit_movement_flags = MOVEMENTFLAG_WALK_MODE; + m_unit_movement_flags = MONSTER_MOVE_WALK; } Creature::~Creature() @@ -1484,7 +1484,7 @@ void Creature::setDeathState(DeathState s) CreatureInfo const *cinfo = GetCreatureInfo(); SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0); RemoveFlag (UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); - AddUnitMovementFlag(MONSTER_MOVE_FLAG_WALK); + AddUnitMovementFlag(MONSTER_MOVE_WALK); SetUInt32Value(UNIT_NPC_FLAGS, cinfo->npcflag); clearUnitState(UNIT_STAT_ALL_STATE); i_motionMaster.Clear(); diff --git a/src/game/FleeingMovementGenerator.cpp b/src/game/FleeingMovementGenerator.cpp index 639b374b7..542c75c98 100644 --- a/src/game/FleeingMovementGenerator.cpp +++ b/src/game/FleeingMovementGenerator.cpp @@ -284,7 +284,7 @@ FleeingMovementGenerator::Initialize(T &owner) return; _Init(owner); - owner.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + owner.RemoveUnitMovementFlag(MONSTER_MOVE_WALK); if(Unit * fright = ObjectAccessor::GetUnit(owner, i_frightGUID)) { diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index c847329dc..16ea07d22 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -637,8 +637,6 @@ uint32 GameObject::GetLootId(GameObjectInfo const* ginfo) return ginfo->chest.lootId; case GAMEOBJECT_TYPE_FISHINGHOLE: return ginfo->fishinghole.lootId; - case GAMEOBJECT_TYPE_FISHINGNODE: - return ginfo->fishnode.lootId; default: return 0; } diff --git a/src/game/GameObject.h b/src/game/GameObject.h index 8acc68eaa..807b09af7 100644 --- a/src/game/GameObject.h +++ b/src/game/GameObject.h @@ -55,6 +55,7 @@ struct GameObjectInfo uint32 noDamageImmune; //3 break opening whenever you recieve damage? uint32 openTextID; //4 can be used to replace castBarCaption? uint32 closeTextID; //5 + uint32 ignoredByPathing; //6 } door; //1 GAMEOBJECT_TYPE_BUTTON struct @@ -102,7 +103,9 @@ struct GameObjectInfo uint32 logLoot; //13 uint32 openTextID; //14 can be used to replace castBarCaption? uint32 groupLootRules; //15 + uint32 floatingTooltip; //16 } chest; + //4 GAMEOBJECT_TYPE_BINDER - empty //5 GAMEOBJECT_TYPE_GENERIC struct { @@ -130,6 +133,7 @@ struct GameObjectInfo uint32 stealthAffected; //11 uint32 openTextID; //12 can be used to replace castBarCaption? uint32 closeTextID; //13 + uint32 ignoreTotems; //14 } trap; //7 GAMEOBJECT_TYPE_CHAIR struct @@ -137,6 +141,7 @@ struct GameObjectInfo uint32 slots; //0 uint32 height; //1 uint32 onlyCreatorUse; //2 + uint32 triggeredEvent; //3 } chair; //8 GAMEOBJECT_TYPE_SPELL_FOCUS struct @@ -147,6 +152,7 @@ struct GameObjectInfo uint32 serverOnly; //3 uint32 questID; //4 uint32 large; //5 + uint32 floatingTooltip; //6 } spellFocus; //9 GAMEOBJECT_TYPE_TEXT struct @@ -177,6 +183,9 @@ struct GameObjectInfo uint32 closeTextID; //15 uint32 losOK; //16 isBattlegroundObject uint32 allowMounted; //17 + uint32 floatingTooltip; //18 + uint32 gossipID; //19 + uint32 WorldStateSetsState; //20 } goober; //11 GAMEOBJECT_TYPE_TRANSPORT struct @@ -184,6 +193,8 @@ struct GameObjectInfo uint32 pause; //0 uint32 startOpen; //1 uint32 autoCloseTime; //2 secs till autoclose = autoCloseTime / 0x10000 + uint32 pause1EventID; //3 + uint32 pause2EventID; //4 } transport; //12 GAMEOBJECT_TYPE_AREADAMAGE struct @@ -205,6 +216,7 @@ struct GameObjectInfo uint32 eventID; //2 uint32 openTextID; //3 can be used to replace castBarCaption? } camera; + //14 GAMEOBJECT_TYPE_MAPOBJECT - empty //15 GAMEOBJECT_TYPE_MO_TRANSPORT struct { @@ -215,13 +227,10 @@ struct GameObjectInfo uint32 stopEventID; //4 uint32 transportPhysics; //5 uint32 mapID; //6 + uint32 worldState1; //7 } moTransport; - //17 GAMEOBJECT_TYPE_FISHINGNODE - struct - { - uint32 _data0; //0 - uint32 lootId; //1 - } fishnode; + //16 GAMEOBJECT_TYPE_DUELFLAG - empty + //17 GAMEOBJECT_TYPE_FISHINGNODE - empty //18 GAMEOBJECT_TYPE_SUMMONING_RITUAL struct { @@ -234,11 +243,8 @@ struct GameObjectInfo uint32 castersGrouped; //6 uint32 ritualNoTargetCheck; //7 } summoningRitual; - //20 GAMEOBJECT_TYPE_AUCTIONHOUSE - struct - { - uint32 actionHouseID; //0 - } auctionhouse; + //19 GAMEOBJECT_TYPE_MAILBOX - empty + //20 GAMEOBJECT_TYPE_DONOTUSE - empty //21 GAMEOBJECT_TYPE_GUARDPOST struct { @@ -251,6 +257,8 @@ struct GameObjectInfo uint32 spellId; //0 uint32 charges; //1 uint32 partyOnly; //2 + uint32 allowMounted; //3 + uint32 large; //4 } spellcaster; //23 GAMEOBJECT_TYPE_MEETINGSTONE struct @@ -317,6 +325,8 @@ struct GameObjectInfo uint32 maxTime; //17 uint32 large; //18 uint32 highlight; //19 + uint32 startingValue; //20 + uint32 unidirectional; //21 } capturePoint; //30 GAMEOBJECT_TYPE_AURA_GENERATOR struct @@ -344,12 +354,33 @@ struct GameObjectInfo //33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING struct { - uint32 dmgPctState1; //0 - uint32 dmgPctState2; //1 - uint32 state1Name; //2 - uint32 state2Name; //3 + uint32 intactNumHits; //0 + uint32 creditProxyCreature; //1 + uint32 empty1; //2 + 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; - //34 GAMEOBJECT_TYPE_TRAPDOOR + //34 GAMEOBJECT_TYPE_GUILDBANK - empty + //35 GAMEOBJECT_TYPE_TRAPDOOR struct { uint32 whenToPause; // 0 @@ -358,7 +389,7 @@ struct GameObjectInfo } trapDoor; // 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]; } raw; diff --git a/src/game/HomeMovementGenerator.cpp b/src/game/HomeMovementGenerator.cpp index 0cd748059..5dfbc8345 100644 --- a/src/game/HomeMovementGenerator.cpp +++ b/src/game/HomeMovementGenerator.cpp @@ -27,7 +27,7 @@ void HomeMovementGenerator::Initialize(Creature & owner) { - owner.RemoveUnitMovementFlag(MONSTER_MOVE_FLAG_WALK); + owner.RemoveUnitMovementFlag(MONSTER_MOVE_WALK); _setTargetLocation(owner); } @@ -63,7 +63,7 @@ HomeMovementGenerator::Update(Creature &owner, const uint32& time_diff 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 if(owner.GetDefaultMovementType()==IDLE_MOTION_TYPE) diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 27b9a21f4..05991882a 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -1878,12 +1878,9 @@ void Map::SendInitSelf( Player * player ) UpdateData data; - bool hasTransport = false; - // attach to player data current transport data if(Transport* transport = player->GetTransport()) { - hasTransport = true; transport->BuildCreateUpdateBlockForPlayer(&data, player); } @@ -1897,14 +1894,13 @@ void Map::SendInitSelf( Player * player ) { if(player!=(*itr) && player->HaveAtClient(*itr)) { - hasTransport = true; (*itr)->BuildCreateUpdateBlockForPlayer(&data, player); } } } WorldPacket packet; - data.BuildPacket(&packet, hasTransport); + data.BuildPacket(&packet); player->GetSession()->SendPacket(&packet); } @@ -1921,20 +1917,17 @@ void Map::SendInitTransports( Player * player ) MapManager::TransportSet& tset = tmap[player->GetMapId()]; - bool hasTransport = false; - for (MapManager::TransportSet::const_iterator i = tset.begin(); i != tset.end(); ++i) { // send data for current transport in other place if((*i) != player->GetTransport() && (*i)->GetMapId()==i_id) { - hasTransport = true; (*i)->BuildCreateUpdateBlockForPlayer(&transData, player); } } WorldPacket packet; - transData.BuildPacket(&packet, hasTransport); + transData.BuildPacket(&packet); player->GetSession()->SendPacket(&packet); } diff --git a/src/game/Object.cpp b/src/game/Object.cpp index d28aee01c..684cb5739 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -60,7 +60,7 @@ uint32 GuidHigh2TypeId(uint32 guid_hi) case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT; case HIGHGUID_VEHICLE: return TYPEID_UNIT; } - return MAX_TYPEID; // unknown + return NUM_CLIENT_OBJECT_TYPES; // unknown } Object::Object( ) @@ -124,10 +124,10 @@ void Object::_Create( uint32 guidlow, uint32 entry, HighGuid guidhigh ) void Object::BuildMovementUpdateBlock(UpdateData * data, uint32 flags ) const { - ByteBuffer buf(500); + ByteBuffer buf(50); buf << uint8( UPDATETYPE_MOVEMENT ); - buf << GetGUID(); + buf.append(GetPackGUID()); _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); - ByteBuffer buf(500); + ByteBuffer buf(50); buf << (uint8)updatetype; - //buf.append(GetPackGUID()); //client crashes when using this - buf << (uint8)0xFF << GetGUID(); + buf.append(GetPackGUID()); //client crashes when using this buf << (uint8)m_objectTypeId; _BuildMovementUpdate(&buf, flags, flags2); @@ -225,12 +224,10 @@ void Object::SendUpdateToPlayer(Player* player) void Object::BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target) const { - ByteBuffer buf(500); + ByteBuffer buf(50); buf << (uint8) UPDATETYPE_VALUES; - //buf.append(GetPackGUID()); //client crashes when using this. but not have crash in debug mode - buf << (uint8)0xFF; - buf << GetGUID(); + buf.append(GetPackGUID()); //client crashes when using this. but not have crash in debug mode UpdateMask updateMask; updateMask.SetCount( m_valuesCount ); @@ -251,7 +248,7 @@ void Object::DestroyForPlayer(Player *target) const ASSERT(target); WorldPacket data(SMSG_DESTROY_OBJECT, 8); - data << GetGUID(); + data << uint64(GetGUID()); data << uint8(0); // WotLK (bool) target->GetSession()->SendPacket( &data ); } @@ -394,7 +391,7 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2 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? @@ -464,7 +461,11 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint16 flags, uint32 flags2 *data << ((WorldObject*)this)->GetPositionY(); *data << ((WorldObject*)this)->GetPositionZ(); *data << ((WorldObject*)this)->GetOrientation(); - *data << float(0); + + if(GetTypeId() == TYPEID_CORPSE) + *data << float(((WorldObject*)this)->GetOrientation()); + else + *data << float(0); } else { @@ -1404,7 +1405,7 @@ void WorldObject::BuildHeartBeatMsg(WorldPacket *data) const data->append(GetPackGUID()); *data << uint32(((Unit*)this)->GetUnitMovementFlags()); // movement flags *data << uint16(0); // 2.3.0 - *data << getMSTime(); // time + *data << uint32(getMSTime()); // time *data << m_positionX; *data << m_positionY; *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(((Unit*)this)->GetUnitMovementFlags()); // movement flags *data << uint16(0); // 2.3.0 - *data << getMSTime(); // time + *data << uint32(getMSTime()); // time *data << x; *data << y; *data << z; @@ -1728,7 +1729,7 @@ void WorldObject::PlayDistanceSound( uint32 sound_id, Player* target /*= NULL*/ { WorldPacket data(SMSG_PLAY_OBJECT_SOUND,4+8); data << uint32(sound_id); - data << GetGUID(); + data << uint64(GetGUID()); if (target) target->SendDirectMessage( &data ); else diff --git a/src/game/Object.h b/src/game/Object.h index 185701d72..7aff8360a 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -46,9 +46,7 @@ enum TypeMask TYPEMASK_PLAYER = 0x0010, TYPEMASK_GAMEOBJECT = 0x0020, TYPEMASK_DYNAMICOBJECT = 0x0040, - TYPEMASK_CORPSE = 0x0080, - TYPEMASK_AIGROUP = 0x0100, - TYPEMASK_AREATRIGGER = 0x0200 + TYPEMASK_CORPSE = 0x0080 }; enum TypeID @@ -60,11 +58,10 @@ enum TypeID TYPEID_PLAYER = 4, TYPEID_GAMEOBJECT = 5, TYPEID_DYNAMICOBJECT = 6, - TYPEID_CORPSE = 7, - TYPEID_AIGROUP = 8, - TYPEID_AREATRIGGER = 9 + TYPEID_CORPSE = 7 }; -#define MAX_TYPEID 10 + +#define NUM_CLIENT_OBJECT_TYPES 8 uint32 GuidHigh2TypeId(uint32 guid_hi); diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 242057a90..fd16ff1f3 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -1253,6 +1253,6 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] = /*0x4C8*/ { "SMSG_UNKNOWN_1224", STATUS_NEVER, &WorldSession::Handle_ServerSide }, /*0x4C9*/ { "UMSG_UNKNOWN_1225", STATUS_NEVER, &WorldSession::Handle_NULL }, /*0x4CA*/ { "UMSG_UNKNOWN_1226", STATUS_NEVER, &WorldSession::Handle_NULL }, - /*0x4CB*/ { "UMSG_UNKNOWN_1227", STATUS_NEVER, &WorldSession::Handle_NULL }, - /*0x4CC*/ { "UMSG_UNKNOWN_1228", STATUS_NEVER, &WorldSession::Handle_NULL }, + /*0x4CB*/ { "CMSG_EQUIPMENT_SET_USE", STATUS_LOGGEDIN, &WorldSession::HandleEquipmentSetUse }, + /*0x4CC*/ { "SMSG_EQUIPMENT_SET_USE_RESULT", STATUS_NEVER, &WorldSession::Handle_ServerSide }, }; diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index eb5d3b5ff..6c34eb3dd 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -1261,8 +1261,8 @@ enum Opcodes SMSG_UNKNOWN_1224 = 0x4C8, // uint32 "Can't change arena team..." UMSG_UNKNOWN_1225 = 0x4C9, // not found UMSG_UNKNOWN_1226 = 0x4CA, // not found - UMSG_UNKNOWN_1227 = 0x4CB, // CMSG, lua: UseEquipmentSet - UMSG_UNKNOWN_1228 = 0x4CC, // SMSG, UseEquipmentSetResult? + CMSG_EQUIPMENT_SET_USE = 0x4CB, // CMSG, lua: UseEquipmentSet + SMSG_EQUIPMENT_SET_USE_RESULT = 0x4CC, // SMSG, UseEquipmentSetResult? NUM_MSG_TYPES = 0x4CD }; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 717963ee8..40b0596a7 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -17787,6 +17787,7 @@ void Player::SendInitialPacketsBeforeAddToMap() data.Initialize(SMSG_LOGIN_SETTIMESPEED, 8); data << uint32(secsToTimeBitFields(sWorld.GetGameTime())); data << (float)0.01666667f; // game speed + data << uint32(0); // added in 3.1.2 GetSession()->SendPacket( &data ); // set fly flag if in fly form or taxi flight to prevent visually drop at ground in showup moment diff --git a/src/game/PointMovementGenerator.cpp b/src/game/PointMovementGenerator.cpp index fda73463c..5e08c90f2 100644 --- a/src/game/PointMovementGenerator.cpp +++ b/src/game/PointMovementGenerator.cpp @@ -31,7 +31,7 @@ void PointMovementGenerator::Initialize(T &unit) i_destinationHolder.SetDestination(traveller,i_x,i_y,i_z); if (unit.GetTypeId() == TYPEID_UNIT && ((Creature*)&unit)->canFly()) - unit.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2); + unit.AddUnitMovementFlag(MONSTER_MOVE_FLY); } template diff --git a/src/game/RandomMovementGenerator.cpp b/src/game/RandomMovementGenerator.cpp index 8d53317a5..beb13cd68 100644 --- a/src/game/RandomMovementGenerator.cpp +++ b/src/game/RandomMovementGenerator.cpp @@ -91,13 +91,13 @@ RandomMovementGenerator::_setRandomLocation(Creature &creature) if (is_air_ok) { 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 { 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::Initialize(Creature &creature) return; if (creature.canFly()) - creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); + creature.AddUnitMovementFlag(MONSTER_MOVE_FLY); 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); } @@ -148,14 +148,14 @@ RandomMovementGenerator::Update(Creature &creature, const uint32 &diff if(i_nextMoveTime.Passed()) { if (creature.canFly()) - creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); + creature.AddUnitMovementFlag(MONSTER_MOVE_FLY); 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); } 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); } } diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 808873862..296fe6a4a 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -1100,7 +1100,7 @@ enum GameobjectTypes GAMEOBJECT_TYPE_FISHINGNODE = 17, GAMEOBJECT_TYPE_SUMMONING_RITUAL = 18, GAMEOBJECT_TYPE_MAILBOX = 19, - GAMEOBJECT_TYPE_AUCTIONHOUSE = 20, + GAMEOBJECT_TYPE_DO_NOT_USE = 20, GAMEOBJECT_TYPE_GUARDPOST = 21, GAMEOBJECT_TYPE_SPELLCASTER = 22, GAMEOBJECT_TYPE_MEETINGSTONE = 23, @@ -1108,7 +1108,7 @@ enum GameobjectTypes GAMEOBJECT_TYPE_FISHINGHOLE = 25, GAMEOBJECT_TYPE_FLAGDROP = 26, GAMEOBJECT_TYPE_MINI_GAME = 27, - GAMEOBJECT_TYPE_LOTTERY_KIOSK = 28, + GAMEOBJECT_TYPE_DO_NOT_USE_2 = 28, GAMEOBJECT_TYPE_CAPTURE_POINT = 29, GAMEOBJECT_TYPE_AURA_GENERATOR = 30, GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31, diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 6e819757f..bac90f2d1 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3189,7 +3189,7 @@ void Aura::HandleModPossessPet(bool apply, bool Real) { pet->AttackStop(); pet->GetMotionMaster()->MoveFollow(caster, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); - pet->SetUnitMovementFlags(MONSTER_MOVE_FLAG_WALK); + pet->SetUnitMovementFlags(MONSTER_MOVE_WALK); } } diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 92c4b02e6..dac092d2e 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -5899,7 +5899,7 @@ void Spell::EffectCharge(uint32 /*i*/) ((Creature *)unitTarget)->StopMoving(); // 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) m_caster->GetMap()->CreatureRelocation((Creature*)m_caster,x,y,z,m_caster->GetOrientation()); diff --git a/src/game/TargetedMovementGenerator.cpp b/src/game/TargetedMovementGenerator.cpp index b2f5ad827..c19108ece 100644 --- a/src/game/TargetedMovementGenerator.cpp +++ b/src/game/TargetedMovementGenerator.cpp @@ -85,17 +85,17 @@ TargetedMovementGenerator::_setTargetLocation(T &owner) i_destinationHolder.SetDestination(traveller, x, y, z); owner.addUnitState(UNIT_STAT_CHASE); if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly()) - owner.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2); + owner.AddUnitMovementFlag(MONSTER_MOVE_FLY); } template void TargetedMovementGenerator::Initialize(T &owner) { - owner.RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + owner.RemoveUnitMovementFlag(MONSTER_MOVE_WALK); if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly()) - owner.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2); + owner.AddUnitMovementFlag(MONSTER_MOVE_FLY); _setTargetLocation(owner); } @@ -147,7 +147,7 @@ TargetedMovementGenerator::Update(T &owner, const uint32 & time_diff) { owner.addUnitState(UNIT_STAT_CHASE); if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly()) - owner.AddUnitMovementFlag(MOVEMENTFLAG_FLYING2); + owner.AddUnitMovementFlag(MONSTER_MOVE_FLY); i_destinationHolder.StartTravel(traveller); return true; diff --git a/src/game/Transports.cpp b/src/game/Transports.cpp index 0473c3a8b..9814bb4a6 100644 --- a/src/game/Transports.cpp +++ b/src/game/Transports.cpp @@ -540,7 +540,7 @@ void Transport::UpdateForMap(Map const* targetMap) UpdateData transData; BuildCreateUpdateBlockForPlayer(&transData, itr->getSource()); WorldPacket packet; - transData.BuildPacket(&packet, true); + transData.BuildPacket(&packet); itr->getSource()->SendDirectMessage(&packet); } } @@ -550,7 +550,7 @@ void Transport::UpdateForMap(Map const* targetMap) UpdateData transData; BuildOutOfRangeUpdateBlock(&transData); WorldPacket out_packet; - transData.BuildPacket(&out_packet, true); + transData.BuildPacket(&out_packet); for(Map::PlayerList::const_iterator itr = pl.begin(); itr != pl.end(); ++itr) if(this != itr->getSource()->GetTransport()) diff --git a/src/game/Traveller.h b/src/game/Traveller.h index 11fe6a09a..0e98d8c0d 100644 --- a/src/game/Traveller.h +++ b/src/game/Traveller.h @@ -71,9 +71,9 @@ inline uint32 Traveller::GetTotalTrevelTimeTo(float x, float y, float z) template<> inline float Traveller::Speed() { - if(i_traveller.HasUnitMovementFlag(MONSTER_MOVE_FLAG_WALK)) + if(i_traveller.HasUnitMovementFlag(MONSTER_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); else return i_traveller.GetSpeed(MOVE_RUN); @@ -138,7 +138,7 @@ template<> inline void Traveller::MoveTo(float x, float y, float z, uint32 t) { //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 CreatureTraveller; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index e26539987..dd8973a2a 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -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) { + float moveTime = Time; + WorldPacket data( SMSG_MONSTER_MOVE, (41 + GetPackGUID().size()) ); data.append(GetPackGUID()); data << uint8(0); // new in 3.1 @@ -284,11 +286,12 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 ty break; } - if(MovementFlags & MONSTER_MOVE_FLAG_SPLINE) // we shouldn't get here with this flag - sLog.outError("SHIT HAPPENED!"); - 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 << NewPosX << NewPosY << NewPosZ; // the single waypoint Point B diff --git a/src/game/Unit.h b/src/game/Unit.h index 858684a40..9282cbfa6 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -597,18 +597,38 @@ enum MovementFlags enum MonsterMovementFlags { - MONSTER_MOVE_FLAG_WALK = 0x00000000, - MONSTER_MOVE_FLAG_UNK1 = 0x00000800, // float+uint32 - MONSTER_MOVE_FLAG_RUN = 0x00001000, - MONSTER_MOVE_FLAG_SPLINE = 0x00002000, // spline n*(float x,y,z) - MONSTER_MOVE_FLAG_SPLINE2 = 0x00040000, // spline n*(float x,y,z) - MONSTER_MOVE_FLAG_UNK2 = 0x00080000, - MONSTER_MOVE_FLAG_UNK3 = 0x00100000, - MONSTER_MOVE_FLAG_UNK4 = 0x00200000, // uint8+uint32 + MONSTER_MOVE_NONE = 0x00000000, + MONSTER_MOVE_FORWARD = 0x00000001, + MONSTER_MOVE_BACKWARD = 0x00000002, + MONSTER_MOVE_STRAFE_LEFT = 0x00000004, + MONSTER_MOVE_STRAFE_RIGHT = 0x00000008, + MONSTER_MOVE_LEFT = 0x00000010, // turn + MONSTER_MOVE_RIGHT = 0x00000020, // turn + 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 - MONSTER_MOVE_FLAG_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 + MONSTER_MOVE_SPLINE_FLY = 0x00003000, // fly by points }; enum DiminishingLevels diff --git a/src/game/UpdateData.cpp b/src/game/UpdateData.cpp index 240ac7ff7..546d84002 100644 --- a/src/game/UpdateData.cpp +++ b/src/game/UpdateData.cpp @@ -101,24 +101,20 @@ void UpdateData::Compress(void* dst, uint32 *dst_size, void* src, int src_size) *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 << (uint8) (hasTransport ? 1 : 0); if(!m_outOfRangeGUIDs.empty()) { buf << (uint8) UPDATETYPE_OUT_OF_RANGE_OBJECTS; buf << (uint32) m_outOfRangeGUIDs.size(); - for(std::set::const_iterator i = m_outOfRangeGUIDs.begin(); - i != m_outOfRangeGUIDs.end(); ++i) + for(std::set::const_iterator i = m_outOfRangeGUIDs.begin(); i != m_outOfRangeGUIDs.end(); ++i) { - //buf.appendPackGUID(*i); - buf << (uint8)0xFF; - buf << (uint64) *i; + buf.appendPackGUID(*i); } } @@ -126,24 +122,23 @@ bool UpdateData::BuildPacket(WorldPacket *packet, bool hasTransport) 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( destsize ); + packet->resize(pSize); - packet->put(0, (uint32)buf.size()); + packet->put(0, pSize); - Compress(const_cast(packet->contents()) + sizeof(uint32), - &destsize, - (void*)buf.contents(), - buf.size()); + uint32 destsize = pSize; + Compress(const_cast(packet->contents()) + sizeof(uint32), &destsize, (void*)buf.contents(), pSize); if (destsize == 0) return false; packet->resize( destsize + sizeof(uint32) ); packet->SetOpcode( SMSG_COMPRESSED_UPDATE_OBJECT ); } - else + else // send small packets without compression { packet->append( buf ); packet->SetOpcode( SMSG_UPDATE_OBJECT ); diff --git a/src/game/UpdateData.h b/src/game/UpdateData.h index 7180155e6..718ae96f4 100644 --- a/src/game/UpdateData.h +++ b/src/game/UpdateData.h @@ -54,7 +54,7 @@ class UpdateData void AddOutOfRangeGUID(std::set& guids); void AddOutOfRangeGUID(const uint64 &guid); 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(); } void Clear(); diff --git a/src/game/UpdateFields.h b/src/game/UpdateFields.h index 813b2d5ad..ab5bfe881 100644 --- a/src/game/UpdateFields.h +++ b/src/game/UpdateFields.h @@ -19,7 +19,7 @@ #ifndef _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 { diff --git a/src/game/WaypointMovementGenerator.cpp b/src/game/WaypointMovementGenerator.cpp index 5368c833e..0aad5e4fb 100644 --- a/src/game/WaypointMovementGenerator.cpp +++ b/src/game/WaypointMovementGenerator.cpp @@ -109,7 +109,7 @@ bool WaypointMovementGenerator::Update(Creature &creature, const uint3 // Now we re-set destination to same node and start travel creature.addUnitState(UNIT_STAT_ROAMING); if (creature.canFly()) - creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); + creature.AddUnitMovementFlag(MONSTER_MOVE_FLY); const WaypointNode &node = i_path->at(i_currentNode); i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z); i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime()); @@ -172,7 +172,7 @@ bool WaypointMovementGenerator::Update(Creature &creature, const uint3 { creature.addUnitState(UNIT_STAT_ROAMING); if (creature.canFly()) - creature.AddUnitMovementFlag(MONSTER_MOVE_FLAG_TEST_FLY); + creature.AddUnitMovementFlag(MONSTER_MOVE_FLY); const WaypointNode &node = i_path->at(i_currentNode); i_destinationHolder.SetDestination(traveller, node.x, node.y, node.z); i_nextMoveTime.Reset(i_destinationHolder.GetTotalTravelTime()); @@ -240,7 +240,7 @@ void FlightPathMovementGenerator::Initialize(Player &player) // 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); - player.SendMonsterMoveByPath(GetPath(),GetCurrentNode(),GetPathAtMapEnd(),MONSTER_MOVE_FLAG_SPLINE_FLY); + player.SendMonsterMoveByPath(GetPath(),GetCurrentNode(),GetPathAtMapEnd(),MONSTER_MOVE_SPLINE_FLY); } void FlightPathMovementGenerator::Finalize(Player & player) @@ -261,7 +261,7 @@ void FlightPathMovementGenerator::Finalize(Player & player) if(player.pvpInfo.inHostileArea) player.CastSpell(&player, 2479, true); - player.SetUnitMovementFlags(MONSTER_MOVE_FLAG_WALK); + player.SetUnitMovementFlags(MONSTER_MOVE_WALK); player.StopMoving(); } } diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index 9e949a41a..1ec57b5d4 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -709,6 +709,7 @@ class MANGOS_DLL_SPEC WorldSession void HandleInspectAchievements(WorldPacket& recv_data); void HandleEquipmentSetSave(WorldPacket& recv_data); void HandleEquipmentSetDelete(WorldPacket& recv_data); + void HandleEquipmentSetUse(WorldPacket& recv_data); private: // private trade methods void moveItems(Item* myItems[], Item* hisItems[]); diff --git a/src/realmd/AuthCodes.h b/src/realmd/AuthCodes.h index 32af46e8a..7342d8eac 100644 --- a/src/realmd/AuthCodes.h +++ b/src/realmd/AuthCodes.h @@ -66,8 +66,8 @@ enum LoginResult // we need to stick to 1 version or half of the stuff will work for someone // 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