mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
Misc fixes
This commit is contained in:
parent
13c5aea028
commit
5fae2418ab
16 changed files with 176 additions and 120 deletions
|
|
@ -39,10 +39,10 @@ bool Model::open()
|
|||
else
|
||||
{
|
||||
//printf("not included %s\n", filename.c_str());
|
||||
f.close();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -106,3 +106,13 @@ void WorldSession::HandleCalendarComplain(WorldPacket &recv_data)
|
|||
sLog.outDebug("WORLD: CMSG_CALENDAR_COMPLAIN");
|
||||
recv_data.hexlike();
|
||||
}
|
||||
|
||||
void WorldSession::HandleCalendarPendingInvites(WorldPacket &recv_data)
|
||||
{
|
||||
sLog.outDebug("WORLD: CMSG_CALENDAR_PENDING_INVITES");
|
||||
recv_data.hexlike();
|
||||
|
||||
WorldPacket data(SMSG_CALENDAR_PENDING_INVITES, 4);
|
||||
data << uint32(0); // 0 - no pending invites, 1 - some pending invites
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1028,7 +1028,7 @@ bool ChatHandler::HandleModifyASpeedCommand(const char* args)
|
|||
chr->SetSpeed(MOVE_RUN, ASpeed,true);
|
||||
chr->SetSpeed(MOVE_SWIM, ASpeed,true);
|
||||
//chr->SetSpeed(MOVE_TURN, ASpeed,true);
|
||||
chr->SetSpeed(MOVE_FLY, ASpeed,true);
|
||||
chr->SetSpeed(MOVE_FLIGHT, ASpeed,true);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1144,7 +1144,7 @@ bool ChatHandler::HandleModifyBWalkCommand(const char* args)
|
|||
if (needReportToTarget(chr))
|
||||
ChatHandler(chr).PSendSysMessage(LANG_YOURS_BACK_SPEED_CHANGED, GetName(), BSpeed);
|
||||
|
||||
chr->SetSpeed(MOVE_WALKBACK,BSpeed,true);
|
||||
chr->SetSpeed(MOVE_RUN_BACK,BSpeed,true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1176,7 +1176,7 @@ bool ChatHandler::HandleModifyFlyCommand(const char* args)
|
|||
if (needReportToTarget(chr))
|
||||
ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetName(), FSpeed);
|
||||
|
||||
chr->SetSpeed(MOVE_FLY,FSpeed,true);
|
||||
chr->SetSpeed(MOVE_FLIGHT,FSpeed,true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1493,11 +1493,11 @@ void WorldSession::HandleChooseTitleOpcode( WorldPacket & recv_data )
|
|||
GetPlayer()->SetUInt32Value(PLAYER_CHOSEN_TITLE, title);
|
||||
}
|
||||
|
||||
void WorldSession::HandleAllowMoveAckOpcode( WorldPacket & recv_data )
|
||||
void WorldSession::HandleTimeSyncResp( WorldPacket & recv_data )
|
||||
{
|
||||
CHECK_PACKET_SIZE(recv_data, 4+4);
|
||||
|
||||
sLog.outDebug("CMSG_ALLOW_MOVE_ACK");
|
||||
sLog.outDebug("CMSG_TIME_SYNC_RESP");
|
||||
|
||||
uint32 counter, time_;
|
||||
recv_data >> counter >> time_;
|
||||
|
|
|
|||
|
|
@ -177,13 +177,6 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
return;
|
||||
|
||||
/* extract packet */
|
||||
if(opcode == CMSG_MOVE_NOT_ACTIVE_MOVER)
|
||||
{
|
||||
CHECK_PACKET_SIZE(recv_data, recv_data.rpos()+8);
|
||||
uint64 old_mover_guid;
|
||||
recv_data >> old_mover_guid;
|
||||
}
|
||||
|
||||
MovementInfo movementInfo;
|
||||
ReadMovementInfo(recv_data, &movementInfo);
|
||||
/*----------------*/
|
||||
|
|
@ -218,9 +211,6 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
{
|
||||
if ((*iter)->GetGUID() == movementInfo.t_guid)
|
||||
{
|
||||
// unmount before boarding
|
||||
_player->RemoveSpellsCausingAura(SPELL_AURA_MOUNTED);
|
||||
|
||||
GetPlayer()->m_transport = (*iter);
|
||||
(*iter)->AddPassenger(GetPlayer());
|
||||
break;
|
||||
|
|
@ -237,6 +227,7 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
movementInfo.t_z = 0.0f;
|
||||
movementInfo.t_o = 0.0f;
|
||||
movementInfo.t_time = 0;
|
||||
movementInfo.t_seat = -1;
|
||||
}
|
||||
|
||||
// fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map).
|
||||
|
|
@ -245,11 +236,11 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
// calculate total z distance of the fall
|
||||
// it is currently only used for the achievement system. It might be used in a more correct falldamage formula later
|
||||
float z_diff = GetPlayer()->m_fallMovementInfo.z - movementInfo.z;
|
||||
sLog.outDebug("zDiff = %f", z_diff);
|
||||
sLog.outDebug("zDiff = %f, falltime = %u", z_diff, movementInfo.fallTime);
|
||||
Player *target = GetPlayer();
|
||||
|
||||
//Players with Feather Fall or low fall time, or physical immunity (charges used) are ignored
|
||||
if (movementInfo.fallTime > 1500 && !target->isDead() && !target->isGameMaster() &&
|
||||
if (movementInfo.fallTime > 1300 && !target->isDead() && !target->isGameMaster() &&
|
||||
!target->HasAuraType(SPELL_AURA_HOVER) && !target->HasAuraType(SPELL_AURA_FEATHER_FALL) &&
|
||||
!target->HasAuraType(SPELL_AURA_FLY) && !target->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL,true) )
|
||||
{
|
||||
|
|
@ -257,10 +248,10 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
int32 safe_fall = target->GetTotalAuraModifier(SPELL_AURA_SAFE_FALL);
|
||||
uint32 fall_time = (movementInfo.fallTime > (safe_fall*10)) ? movementInfo.fallTime - (safe_fall*10) : 0;
|
||||
|
||||
if(fall_time > 1500) //Prevent damage if fall time < 1500
|
||||
if(fall_time > 1300) //Prevent damage if fall time < 1300
|
||||
{
|
||||
//Fall Damage calculation
|
||||
float fallperc = float(fall_time)/1500;
|
||||
float fallperc = float(fall_time)/1300;
|
||||
uint32 damage = (uint32)(((fallperc*fallperc -1) / 9 * target->GetMaxHealth())*sWorld.getRate(RATE_DAMAGE_FALL));
|
||||
|
||||
float height = movementInfo.z;
|
||||
|
|
@ -289,24 +280,19 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
}
|
||||
}
|
||||
|
||||
if(opcode == CMSG_DISMISS_CONTROLLED_VEHICLE)
|
||||
{
|
||||
// using charm guid, because we don't have vehicle guid...
|
||||
if(Vehicle *vehicle = ObjectAccessor::GetVehicle(_player->GetCharmGUID()))
|
||||
_player->ExitVehicle(vehicle);
|
||||
}
|
||||
|
||||
if(((movementInfo.flags & MOVEMENTFLAG_SWIMMING) != 0) != GetPlayer()->IsInWater())
|
||||
{
|
||||
// now client not include swimming flag in case jumping under water
|
||||
GetPlayer()->SetInWater( !GetPlayer()->IsInWater() || GetPlayer()->GetBaseMap()->IsUnderWater(movementInfo.x, movementInfo.y, movementInfo.z) );
|
||||
}
|
||||
|
||||
if(opcode != MSG_MOVE_FALL_LAND && !(movementInfo.flags & MOVEMENTFLAG_FALLING))
|
||||
_player->m_fallMovementInfo = movementInfo; // save data before any fall
|
||||
/*----------------------*/
|
||||
|
||||
/* process position-change */
|
||||
Unit *mover = _player->m_mover;
|
||||
recv_data.put<uint32>(6, getMSTime()); // offset flags(4) + unk(2)
|
||||
recv_data.put<uint32>(6, getMSTime()); // fix time, offset flags(4) + unk(2)
|
||||
WorldPacket data(recv_data.GetOpcode(), (mover->GetPackGUID().size()+recv_data.size()));
|
||||
data.append(_player->m_mover->GetPackGUID()); // use mover guid
|
||||
data.append(recv_data.contents(), recv_data.size());
|
||||
|
|
@ -334,8 +320,8 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
|
|||
}
|
||||
}
|
||||
|
||||
if (GetPlayer()->m_fallMovementInfo.fallTime >= movementInfo.fallTime || GetPlayer()->m_fallMovementInfo.z <=movementInfo.z)
|
||||
GetPlayer()->m_fallMovementInfo = movementInfo;
|
||||
//if (GetPlayer()->m_fallMovementInfo.fallTime >= movementInfo.fallTime || GetPlayer()->m_fallMovementInfo.z <=movementInfo.z)
|
||||
// GetPlayer()->m_fallMovementInfo = movementInfo;
|
||||
|
||||
if(GetPlayer()->isMovingOrTurning())
|
||||
GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
|
||||
|
|
@ -378,7 +364,7 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recv_data)
|
|||
|
||||
// continue parse packet
|
||||
|
||||
recv_data >> unk1; // counter
|
||||
recv_data >> unk1; // counter or moveEvent
|
||||
|
||||
MovementInfo movementInfo;
|
||||
ReadMovementInfo(recv_data, &movementInfo);
|
||||
|
|
@ -394,19 +380,20 @@ void WorldSession::HandleForceSpeedChangeAck(WorldPacket &recv_data)
|
|||
UnitMoveType move_type;
|
||||
UnitMoveType force_move_type;
|
||||
|
||||
static char const* move_type_name[MAX_MOVE_TYPE] = { "Walk", "Run", "Walkback", "Swim", "Swimback", "Turn", "Fly", "Flyback", "Pitch" };
|
||||
static char const* move_type_name[MAX_MOVE_TYPE] = { "Walk", "Run", "RunBack", "Swim", "SwimBack", "TurnRate", "Flight", "FlightBack", "PitchRate" };
|
||||
|
||||
uint16 opcode = recv_data.GetOpcode();
|
||||
switch(opcode)
|
||||
{
|
||||
case CMSG_FORCE_WALK_SPEED_CHANGE_ACK: move_type = MOVE_WALK; force_move_type = MOVE_WALK; break;
|
||||
case CMSG_FORCE_RUN_SPEED_CHANGE_ACK: move_type = MOVE_RUN; force_move_type = MOVE_RUN; break;
|
||||
case CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK: move_type = MOVE_WALKBACK; force_move_type = MOVE_WALKBACK; break;
|
||||
case CMSG_FORCE_RUN_BACK_SPEED_CHANGE_ACK: move_type = MOVE_RUN_BACK; force_move_type = MOVE_RUN_BACK; break;
|
||||
case CMSG_FORCE_SWIM_SPEED_CHANGE_ACK: move_type = MOVE_SWIM; force_move_type = MOVE_SWIM; break;
|
||||
case CMSG_FORCE_SWIM_BACK_SPEED_CHANGE_ACK: move_type = MOVE_SWIMBACK; force_move_type = MOVE_SWIMBACK; break;
|
||||
case CMSG_FORCE_TURN_RATE_CHANGE_ACK: move_type = MOVE_TURN; force_move_type = MOVE_TURN; break;
|
||||
case CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK: move_type = MOVE_FLY; force_move_type = MOVE_FLY; break;
|
||||
case CMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK: move_type = MOVE_FLYBACK; force_move_type = MOVE_FLYBACK; break;
|
||||
case CMSG_FORCE_SWIM_BACK_SPEED_CHANGE_ACK: move_type = MOVE_SWIM_BACK; force_move_type = MOVE_SWIM_BACK; break;
|
||||
case CMSG_FORCE_TURN_RATE_CHANGE_ACK: move_type = MOVE_TURN_RATE; force_move_type = MOVE_TURN_RATE; break;
|
||||
case CMSG_FORCE_FLIGHT_SPEED_CHANGE_ACK: move_type = MOVE_FLIGHT; force_move_type = MOVE_FLIGHT; break;
|
||||
case CMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK: move_type = MOVE_FLIGHT_BACK; force_move_type = MOVE_FLIGHT_BACK; break;
|
||||
case CMSG_FORCE_PITCH_RATE_CHANGE_ACK: move_type = MOVE_PITCH_RATE; force_move_type = MOVE_PITCH_RATE; break;
|
||||
default:
|
||||
sLog.outError("WorldSession::HandleForceSpeedChangeAck: Unknown move type opcode: %u", opcode);
|
||||
return;
|
||||
|
|
@ -451,6 +438,50 @@ void WorldSession::HandleSetActiveMoverOpcode(WorldPacket &recv_data)
|
|||
if(_player->m_mover->GetGUID() != guid)
|
||||
{
|
||||
sLog.outError("HandleSetActiveMoverOpcode: incorrect mover guid: mover is " I64FMT " and should be " I64FMT, _player->m_mover->GetGUID(), guid);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::HandleMoveNotActiveMover(WorldPacket &recv_data)
|
||||
{
|
||||
sLog.outDebug("WORLD: Recvd CMSG_MOVE_NOT_ACTIVE_MOVER");
|
||||
recv_data.hexlike();
|
||||
|
||||
CHECK_PACKET_SIZE(recv_data, recv_data.rpos()+8);
|
||||
|
||||
uint64 old_mover_guid;
|
||||
recv_data >> old_mover_guid;
|
||||
|
||||
if(_player->m_mover->GetGUID() == old_mover_guid)
|
||||
{
|
||||
sLog.outError("HandleMoveNotActiveMover: incorrect mover guid: mover is " I64FMT " and should be " I64FMT " instead of " I64FMT, _player->m_mover->GetGUID(), _player->GetGUID(), old_mover_guid);
|
||||
return;
|
||||
}
|
||||
|
||||
MovementInfo mi;
|
||||
ReadMovementInfo(recv_data, &mi);
|
||||
_player->m_movementInfo = mi;
|
||||
}
|
||||
|
||||
void WorldSession::HandleDismissControlledVehicle(WorldPacket &recv_data)
|
||||
{
|
||||
sLog.outDebug("WORLD: Recvd CMSG_DISMISS_CONTROLLED_VEHICLE");
|
||||
recv_data.hexlike();
|
||||
|
||||
uint64 vehicleGUID = _player->GetCharmGUID();
|
||||
|
||||
if(!vehicleGUID) // something wrong here...
|
||||
return;
|
||||
|
||||
MovementInfo mi;
|
||||
ReadMovementInfo(recv_data, &mi);
|
||||
_player->m_movementInfo = mi;
|
||||
|
||||
// using charm guid, because we don't have vehicle guid...
|
||||
if(Vehicle *vehicle = ObjectAccessor::GetVehicle(vehicleGUID))
|
||||
{
|
||||
_player->ExitVehicle(vehicle);
|
||||
vehicle->Dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -384,13 +384,13 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2)
|
|||
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_WALK );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_RUN );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_SWIMBACK );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_SWIM_BACK );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_SWIM );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_WALKBACK );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_FLY );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_FLYBACK );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_TURN );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_PITCH );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_RUN_BACK );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_FLIGHT );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_FLIGHT_BACK );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_TURN_RATE );
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_PITCH_RATE );
|
||||
|
||||
// 0x08000000
|
||||
if(flags2 & MOVEMENTFLAG_SPLINE2)
|
||||
|
|
|
|||
|
|
@ -747,7 +747,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x2CE*/ { "CMSG_MOVE_TIME_SKIPPED", STATUS_LOGGEDIN, &WorldSession::HandleMoveTimeSkippedOpcode },
|
||||
/*0x2CF*/ { "CMSG_MOVE_FEATHER_FALL_ACK", STATUS_LOGGEDIN, &WorldSession::HandleFeatherFallAck },
|
||||
/*0x2D0*/ { "CMSG_MOVE_WATER_WALK_ACK", STATUS_LOGGEDIN, &WorldSession::HandleMoveWaterWalkAck },
|
||||
/*0x2D1*/ { "CMSG_MOVE_NOT_ACTIVE_MOVER", STATUS_LOGGEDIN, &WorldSession::HandleMovementOpcodes },
|
||||
/*0x2D1*/ { "CMSG_MOVE_NOT_ACTIVE_MOVER", STATUS_LOGGEDIN, &WorldSession::HandleMoveNotActiveMover },
|
||||
/*0x2D2*/ { "SMSG_PLAY_SOUND", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x2D3*/ { "CMSG_BATTLEFIELD_STATUS", STATUS_LOGGEDIN, &WorldSession::HandleBattlefieldStatusOpcode },
|
||||
/*0x2D4*/ { "SMSG_BATTLEFIELD_STATUS", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
|
|
@ -939,7 +939,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x38E*/ { "MSG_PARTY_ASSIGNMENT", STATUS_LOGGEDIN, &WorldSession::HandleGroupPromoteOpcode },
|
||||
/*0x38F*/ { "SMSG_OFFER_PETITION_ERROR", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x390*/ { "SMSG_TIME_SYNC_REQ", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x391*/ { "CMSG_TIME_SYNC_RESP", STATUS_LOGGEDIN, &WorldSession::HandleAllowMoveAckOpcode },
|
||||
/*0x391*/ { "CMSG_TIME_SYNC_RESP", STATUS_LOGGEDIN, &WorldSession::HandleTimeSyncResp },
|
||||
/*0x392*/ { "CMSG_SEND_LOCAL_EVENT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x393*/ { "CMSG_SEND_GENERAL_TRIGGER", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x394*/ { "CMSG_SEND_COMBAT_TRIGGER", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
|
|
@ -1121,8 +1121,8 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x444*/ { "SMSG_CALENDAR_EVENT_UPDATED_ALERT",STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x445*/ { "SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT",STATUS_NEVER,&WorldSession::Handle_ServerSide },
|
||||
/*0x446*/ { "CMSG_CALENDAR_COMPLAIN", STATUS_LOGGEDIN, &WorldSession::HandleCalendarComplain },
|
||||
/*0x447*/ { "CMSG_CALENDAR_GET_CALENDAR_ON_LOGIN",STATUS_LOGGEDIN,&WorldSession::HandleCalendarGetCalendar },
|
||||
/*0x448*/ { "SMSG_CALENDAR_EVENT_RESERVED_3", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x447*/ { "CMSG_CALENDAR_PENDING_INVITES", STATUS_LOGGEDIN, &WorldSession::HandleCalendarPendingInvites },
|
||||
/*0x448*/ { "SMSG_CALENDAR_PENDING_INVITES", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x449*/ { "CMSG_SAVE_DANCE", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x44A*/ { "SMSG_NOTIFY_DANCE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x44B*/ { "CMSG_PLAY_DANCE", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
|
|
@ -1159,7 +1159,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x46A*/ { "SMSG_CRITERIA_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x46B*/ { "CMSG_QUERY_INSPECT_ACHIEVEMENTS", STATUS_LOGGEDIN, &WorldSession::HandleInspectAchievements },
|
||||
/*0x46C*/ { "SMSG_RESPOND_INSPECT_ACHIEVEMENTS",STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x46D*/ { "CMSG_DISMISS_CONTROLLED_VEHICLE", STATUS_LOGGEDIN, &WorldSession::HandleMovementOpcodes },
|
||||
/*0x46D*/ { "CMSG_DISMISS_CONTROLLED_VEHICLE", STATUS_LOGGEDIN, &WorldSession::HandleDismissControlledVehicle },
|
||||
/*0x46E*/ { "CMSG_COMPLETE_ACHIEVEMENT_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x46F*/ { "SMSG_QUESTUPDATE_ADD_PVP_KILL", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x470*/ { "CMSG_SET_CRITERIA_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
|
|
@ -1205,11 +1205,11 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
|||
/*0x498*/ { "SMSG_SERVER_FIRST_ACHIEVEMENT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x499*/ { "SMSG_PET_LEARNED_SPELL", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x49A*/ { "SMSG_PET_UNLEARNED_SPELL", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x49B*/ { "UMSG_UNKNOWN_1179", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x49B*/ { "CMSG_MOVE_UNKNOWN_1179", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x49C*/ { "CMSG_UNKNOWN_1180", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x49D*/ { "SMSG_UNKNOWN_1181", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x49E*/ { "SMSG_UNKNOWN_1182", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x49F*/ { "SMSG_UNKNOWN_1183", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x49D*/ { "SMSG_SHOW_VEHICLE_UI", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x49E*/ { "SMSG_CRITERIA_REMOVE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x49F*/ { "SMSG_ACHIEVEMENT_REMOVE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
/*0x4A0*/ { "UMSG_UNKNOWN_1184", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x4A1*/ { "UMSG_UNKNOWN_1185", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x4A2*/ { "UMSG_UNKNOWN_1186", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
|
|
|
|||
|
|
@ -1123,8 +1123,8 @@ enum Opcodes
|
|||
SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x444,
|
||||
SMSG_CALENDAR_EVENT_MODERATOR_STATUS_ALERT = 0x445,
|
||||
CMSG_CALENDAR_COMPLAIN = 0x446,
|
||||
CMSG_CALENDAR_GET_CALENDAR_ON_LOGIN = 0x447,
|
||||
SMSG_CALENDAR_EVENT_RESERVED_3 = 0x448,
|
||||
CMSG_CALENDAR_PENDING_INVITES = 0x447,
|
||||
SMSG_CALENDAR_PENDING_INVITES = 0x448,
|
||||
CMSG_SAVE_DANCE = 0x449,
|
||||
SMSG_NOTIFY_DANCE = 0x44A,
|
||||
CMSG_PLAY_DANCE = 0x44B,
|
||||
|
|
@ -1207,9 +1207,9 @@ enum Opcodes
|
|||
SMSG_SERVER_FIRST_ACHIEVEMENT = 0x498,
|
||||
SMSG_PET_LEARNED_SPELL = 0x499, // uint16 spellid, Your pet learned spell: %s
|
||||
SMSG_PET_UNLEARNED_SPELL = 0x49A, // uint16 spellid, Your pet unlearned %s
|
||||
CMSG_UNKNOWN_1179 = 0x49B, // movement opcode
|
||||
CMSG_MOVE_UNKNOWN_1179 = 0x49B, // movement opcode
|
||||
CMSG_UNKNOWN_1180 = 0x49C, // LUA: HearthAndResurrectFromArea
|
||||
SMSG_UNKNOWN_1181 = 0x49D, // empty
|
||||
SMSG_SHOW_VEHICLE_UI = 0x49D, // empty
|
||||
SMSG_CRITERIA_REMOVE = 0x49E, // uint32, broadcasts EVENT_CRITERIA_UPDATE
|
||||
SMSG_ACHIEVEMENT_REMOVE = 0x49F, // uint32, broadcasts EVENT_ACHIEVEMENT_EARNED
|
||||
UMSG_UNKNOWN_1184 = 0x4A0, // not found in client
|
||||
|
|
|
|||
|
|
@ -18651,20 +18651,15 @@ void Player::EnterVehicle(Vehicle *vehicle)
|
|||
{
|
||||
vehicle->SetCharmerGUID(GetGUID());
|
||||
vehicle->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
|
||||
//vehicle->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
||||
vehicle->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
|
||||
vehicle->setFaction(getFaction());
|
||||
//vehicle->SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0);
|
||||
//vehicle->SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, 2147483647);
|
||||
//vehicle->SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0);
|
||||
//vehicle->SetUInt32Value(UNIT_FIELD_BYTES_1, 0x02000000);
|
||||
|
||||
SetCharm(vehicle); // charm
|
||||
SetFarSight(vehicle->GetGUID()); // set view
|
||||
|
||||
SetClientControl(vehicle, 1); // redirect controls to vehicle
|
||||
|
||||
WorldPacket data(SMSG_UNKNOWN_1181, 0); // shows vehicle UI?
|
||||
WorldPacket data(SMSG_SHOW_VEHICLE_UI, 0); // shows vehicle UI?
|
||||
GetSession()->SendPacket(&data);
|
||||
|
||||
data.Initialize(MSG_MOVE_TELEPORT_ACK, 30);
|
||||
|
|
@ -18677,11 +18672,11 @@ void Player::EnterVehicle(Vehicle *vehicle)
|
|||
data << vehicle->GetPositionY(); // y
|
||||
data << vehicle->GetPositionZ(); // z
|
||||
data << vehicle->GetOrientation(); // o
|
||||
// transport part
|
||||
// transport part, TODO: load/calculate seat offsets
|
||||
data << uint64(vehicle->GetGUID()); // transport guid
|
||||
data << float(0); // transport offsetX
|
||||
data << float(0); // transport offsetY
|
||||
data << float(2); // transport offsetZ
|
||||
data << float(3); // transport offsetZ
|
||||
data << float(0); // transport orientation
|
||||
data << uint32(getMSTime()); // transport time
|
||||
data << uint8(0); // seat
|
||||
|
|
@ -18689,6 +18684,9 @@ void Player::EnterVehicle(Vehicle *vehicle)
|
|||
data << uint32(0); // fall time
|
||||
GetSession()->SendPacket(&data);
|
||||
|
||||
vehicle->SetSpeed(MOVE_RUN, vehicle->GetCreatureInfo()->speed, true);
|
||||
vehicle->SetSpeed(MOVE_FLIGHT, vehicle->GetCreatureInfo()->speed, true);
|
||||
|
||||
data.Initialize(SMSG_PET_SPELLS, 8+4+4+4+4*10+1+1);
|
||||
data << uint64(vehicle->GetGUID());
|
||||
data << uint32(0x00000000);
|
||||
|
|
@ -18707,10 +18705,8 @@ void Player::ExitVehicle(Vehicle *vehicle)
|
|||
{
|
||||
vehicle->SetCharmerGUID(0);
|
||||
vehicle->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
|
||||
//vehicle->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE);
|
||||
vehicle->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
|
||||
vehicle->setFaction((GetTeam() == ALLIANCE) ? vehicle->GetCreatureInfo()->faction_A : vehicle->GetCreatureInfo()->faction_H);
|
||||
//vehicle->SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0);
|
||||
|
||||
SetCharm(NULL);
|
||||
SetFarSight(NULL);
|
||||
|
|
|
|||
|
|
@ -3698,7 +3698,7 @@ void Aura::HandleAuraModIncreaseFlightSpeed(bool apply, bool Real)
|
|||
m_target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID,16314);
|
||||
}
|
||||
|
||||
m_target->UpdateSpeed(MOVE_FLY, true);
|
||||
m_target->UpdateSpeed(MOVE_FLIGHT, true);
|
||||
}
|
||||
|
||||
void Aura::HandleAuraModIncreaseSwimSpeed(bool /*apply*/, bool Real)
|
||||
|
|
@ -3718,7 +3718,7 @@ void Aura::HandleAuraModDecreaseSpeed(bool /*apply*/, bool Real)
|
|||
|
||||
m_target->UpdateSpeed(MOVE_RUN, true);
|
||||
m_target->UpdateSpeed(MOVE_SWIM, true);
|
||||
m_target->UpdateSpeed(MOVE_FLY, true);
|
||||
m_target->UpdateSpeed(MOVE_FLIGHT, true);
|
||||
}
|
||||
|
||||
void Aura::HandleAuraModUseNormalSpeed(bool /*apply*/, bool Real)
|
||||
|
|
@ -3729,7 +3729,7 @@ void Aura::HandleAuraModUseNormalSpeed(bool /*apply*/, bool Real)
|
|||
|
||||
m_target->UpdateSpeed(MOVE_RUN, true);
|
||||
m_target->UpdateSpeed(MOVE_SWIM, true);
|
||||
m_target->UpdateSpeed(MOVE_FLY, true);
|
||||
m_target->UpdateSpeed(MOVE_FLIGHT, true);
|
||||
}
|
||||
|
||||
/*********************************************************/
|
||||
|
|
@ -6362,6 +6362,6 @@ void Aura::HandleAuraControlVehicle(bool apply, bool Real)
|
|||
if(Pet *pet = m_target->GetPet())
|
||||
pet->Remove(PET_SAVE_AS_CURRENT);
|
||||
|
||||
WorldPacket data(SMSG_UNKNOWN_1181, 0);
|
||||
WorldPacket data(SMSG_SHOW_VEHICLE_UI, 0);
|
||||
((Player*)m_target)->GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -892,7 +892,7 @@ void Spell::EffectDummy(uint32 i)
|
|||
if (!m_caster->HasAuraType(SPELL_AURA_MOUNTED))
|
||||
return;
|
||||
|
||||
float flyspeed = m_caster->GetSpeedRate(MOVE_FLY);
|
||||
float flyspeed = m_caster->GetSpeedRate(MOVE_FLIGHT);
|
||||
float speed = m_caster->GetSpeedRate(MOVE_RUN);
|
||||
|
||||
m_caster->RemoveSpellsCausingAura(SPELL_AURA_MOUNTED);
|
||||
|
|
|
|||
|
|
@ -50,13 +50,13 @@ float baseMoveSpeed[MAX_MOVE_TYPE] =
|
|||
{
|
||||
2.5f, // MOVE_WALK
|
||||
7.0f, // MOVE_RUN
|
||||
1.25f, // MOVE_WALKBACK
|
||||
1.25f, // MOVE_RUN_BACK
|
||||
4.722222f, // MOVE_SWIM
|
||||
4.5f, // MOVE_SWIMBACK
|
||||
3.141594f, // MOVE_TURN
|
||||
7.0f, // MOVE_FLY
|
||||
4.5f, // MOVE_FLYBACK
|
||||
3.14f // MOVE_PITCH
|
||||
4.5f, // MOVE_SWIM_BACK
|
||||
3.141594f, // MOVE_TURN_RATE
|
||||
7.0f, // MOVE_FLIGHT
|
||||
4.5f, // MOVE_FLIGHT_BACK
|
||||
3.14f // MOVE_PITCH_RATE
|
||||
};
|
||||
|
||||
// auraTypes contains attacker auras capable of proc'ing cast auras
|
||||
|
|
@ -8857,16 +8857,16 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case MOVE_WALKBACK:
|
||||
case MOVE_RUN_BACK:
|
||||
return;
|
||||
case MOVE_SWIM:
|
||||
{
|
||||
main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_SWIM_SPEED);
|
||||
break;
|
||||
}
|
||||
case MOVE_SWIMBACK:
|
||||
case MOVE_SWIM_BACK:
|
||||
return;
|
||||
case MOVE_FLY:
|
||||
case MOVE_FLIGHT:
|
||||
{
|
||||
if (IsMounted()) // Use on mount auras
|
||||
main_speed_mod = GetMaxPositiveAuraModifier(SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED);
|
||||
|
|
@ -8876,7 +8876,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
|
|||
non_stack_bonus = (100.0 + GetMaxPositiveAuraModifier(SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK))/100.0f;
|
||||
break;
|
||||
}
|
||||
case MOVE_FLYBACK:
|
||||
case MOVE_FLIGHT_BACK:
|
||||
return;
|
||||
default:
|
||||
sLog.outError("Unit::UpdateSpeed: Unsupported move type (%d)", mtype);
|
||||
|
|
@ -8891,7 +8891,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
|
|||
{
|
||||
case MOVE_RUN:
|
||||
case MOVE_SWIM:
|
||||
case MOVE_FLY:
|
||||
case MOVE_FLIGHT:
|
||||
{
|
||||
// Normalize speed by 191 aura SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED if need
|
||||
// TODO: possible affect only on MOVE_RUN
|
||||
|
|
@ -8943,28 +8943,31 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
|||
switch(mtype)
|
||||
{
|
||||
case MOVE_WALK:
|
||||
data.Initialize(MSG_MOVE_SET_WALK_SPEED, 8+4+1+4+4+4+4+4+4+4);
|
||||
data.Initialize(MSG_MOVE_SET_WALK_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
case MOVE_RUN:
|
||||
data.Initialize(MSG_MOVE_SET_RUN_SPEED, 8+4+1+4+4+4+4+4+4+4);
|
||||
data.Initialize(MSG_MOVE_SET_RUN_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
case MOVE_WALKBACK:
|
||||
data.Initialize(MSG_MOVE_SET_RUN_BACK_SPEED, 8+4+1+4+4+4+4+4+4+4);
|
||||
case MOVE_RUN_BACK:
|
||||
data.Initialize(MSG_MOVE_SET_RUN_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
case MOVE_SWIM:
|
||||
data.Initialize(MSG_MOVE_SET_SWIM_SPEED, 8+4+1+4+4+4+4+4+4+4);
|
||||
data.Initialize(MSG_MOVE_SET_SWIM_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
case MOVE_SWIMBACK:
|
||||
data.Initialize(MSG_MOVE_SET_SWIM_BACK_SPEED, 8+4+1+4+4+4+4+4+4+4);
|
||||
case MOVE_SWIM_BACK:
|
||||
data.Initialize(MSG_MOVE_SET_SWIM_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
case MOVE_TURN:
|
||||
data.Initialize(MSG_MOVE_SET_TURN_RATE, 8+4+1+4+4+4+4+4+4+4);
|
||||
case MOVE_TURN_RATE:
|
||||
data.Initialize(MSG_MOVE_SET_TURN_RATE, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
case MOVE_FLY:
|
||||
data.Initialize(MSG_MOVE_SET_FLIGHT_SPEED, 8+4+1+4+4+4+4+4+4+4);
|
||||
case MOVE_FLIGHT:
|
||||
data.Initialize(MSG_MOVE_SET_FLIGHT_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
case MOVE_FLYBACK:
|
||||
data.Initialize(MSG_MOVE_SET_FLIGHT_BACK_SPEED, 8+4+1+4+4+4+4+4+4+4);
|
||||
case MOVE_FLIGHT_BACK:
|
||||
data.Initialize(MSG_MOVE_SET_FLIGHT_BACK_SPEED, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
case MOVE_PITCH_RATE:
|
||||
data.Initialize(MSG_MOVE_SET_PITCH_RATE, 8+4+2+4+4+4+4+4+4+4);
|
||||
break;
|
||||
default:
|
||||
sLog.outError("Unit::SetSpeed: Unsupported move type (%d), data not sent to client.",mtype);
|
||||
|
|
@ -8973,13 +8976,13 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
|||
|
||||
data.append(GetPackGUID());
|
||||
data << uint32(0); // movement flags
|
||||
data << uint16(0); //unk
|
||||
data << uint16(0); // unk flags
|
||||
data << uint32(getMSTime());
|
||||
data << float(GetPositionX());
|
||||
data << float(GetPositionY());
|
||||
data << float(GetPositionZ());
|
||||
data << float(GetOrientation());
|
||||
data << uint32(0); //flag unk
|
||||
data << uint32(0); // fall time
|
||||
data << float(GetSpeed(mtype));
|
||||
SendMessageToSet( &data, true );
|
||||
}
|
||||
|
|
@ -8996,30 +8999,33 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced)
|
|||
case MOVE_RUN:
|
||||
data.Initialize(SMSG_FORCE_RUN_SPEED_CHANGE, 17);
|
||||
break;
|
||||
case MOVE_WALKBACK:
|
||||
case MOVE_RUN_BACK:
|
||||
data.Initialize(SMSG_FORCE_RUN_BACK_SPEED_CHANGE, 16);
|
||||
break;
|
||||
case MOVE_SWIM:
|
||||
data.Initialize(SMSG_FORCE_SWIM_SPEED_CHANGE, 16);
|
||||
break;
|
||||
case MOVE_SWIMBACK:
|
||||
case MOVE_SWIM_BACK:
|
||||
data.Initialize(SMSG_FORCE_SWIM_BACK_SPEED_CHANGE, 16);
|
||||
break;
|
||||
case MOVE_TURN:
|
||||
case MOVE_TURN_RATE:
|
||||
data.Initialize(SMSG_FORCE_TURN_RATE_CHANGE, 16);
|
||||
break;
|
||||
case MOVE_FLY:
|
||||
case MOVE_FLIGHT:
|
||||
data.Initialize(SMSG_FORCE_FLIGHT_SPEED_CHANGE, 16);
|
||||
break;
|
||||
case MOVE_FLYBACK:
|
||||
case MOVE_FLIGHT_BACK:
|
||||
data.Initialize(SMSG_FORCE_FLIGHT_BACK_SPEED_CHANGE, 16);
|
||||
break;
|
||||
case MOVE_PITCH_RATE:
|
||||
data.Initialize(SMSG_FORCE_PITCH_RATE_CHANGE, 16);
|
||||
break;
|
||||
default:
|
||||
sLog.outError("Unit::SetSpeed: Unsupported move type (%d), data not sent to client.",mtype);
|
||||
return;
|
||||
}
|
||||
data.append(GetPackGUID());
|
||||
data << (uint32)0;
|
||||
data << (uint32)0; // moveEvent, NUM_PMOVE_EVTS = 0x39
|
||||
if (mtype == MOVE_RUN)
|
||||
data << uint8(0); // new 2.1.0
|
||||
data << float(GetSpeed(mtype));
|
||||
|
|
|
|||
|
|
@ -378,13 +378,13 @@ enum UnitMoveType
|
|||
{
|
||||
MOVE_WALK = 0,
|
||||
MOVE_RUN = 1,
|
||||
MOVE_WALKBACK = 2,
|
||||
MOVE_RUN_BACK = 2,
|
||||
MOVE_SWIM = 3,
|
||||
MOVE_SWIMBACK = 4,
|
||||
MOVE_TURN = 5,
|
||||
MOVE_FLY = 6,
|
||||
MOVE_FLYBACK = 7,
|
||||
MOVE_PITCH = 8
|
||||
MOVE_SWIM_BACK = 4,
|
||||
MOVE_TURN_RATE = 5,
|
||||
MOVE_FLIGHT = 6,
|
||||
MOVE_FLIGHT_BACK = 7,
|
||||
MOVE_PITCH_RATE = 8
|
||||
};
|
||||
|
||||
#define MAX_MOVE_TYPE 9
|
||||
|
|
|
|||
|
|
@ -94,3 +94,11 @@ bool Vehicle::Create(uint32 guidlow, Map *map, uint32 Entry, uint32 vehicleId, u
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Vehicle::Dismiss()
|
||||
{
|
||||
SendObjectDeSpawnAnim(GetGUID());
|
||||
CombatStop();
|
||||
CleanupsBeforeDelete();
|
||||
AddObjectToRemoveList();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,6 +40,8 @@ class Vehicle : public Creature
|
|||
uint32 GetVehicleId() { return m_vehicleId; }
|
||||
void SetVehicleId(uint32 vehicleid) { m_vehicleId = vehicleid; }
|
||||
|
||||
void Dismiss();
|
||||
|
||||
protected:
|
||||
uint32 m_vehicleId;
|
||||
|
||||
|
|
|
|||
|
|
@ -334,6 +334,8 @@ class MANGOS_DLL_SPEC WorldSession
|
|||
|
||||
void HandleMovementOpcodes(WorldPacket& recvPacket);
|
||||
void HandleSetActiveMoverOpcode(WorldPacket &recv_data);
|
||||
void HandleMoveNotActiveMover(WorldPacket &recv_data);
|
||||
void HandleDismissControlledVehicle(WorldPacket &recv_data);
|
||||
void HandleMoveTimeSkippedOpcode(WorldPacket &recv_data);
|
||||
|
||||
void HandleRequestRaidInfoOpcode( WorldPacket & recv_data );
|
||||
|
|
@ -592,7 +594,7 @@ class MANGOS_DLL_SPEC WorldSession
|
|||
void HandleLfgSetCommentOpcode(WorldPacket& recv_data);
|
||||
void HandleChooseTitleOpcode(WorldPacket& recv_data);
|
||||
void HandleRealmStateRequestOpcode(WorldPacket& recv_data);
|
||||
void HandleAllowMoveAckOpcode(WorldPacket& recv_data);
|
||||
void HandleTimeSyncResp(WorldPacket& recv_data);
|
||||
void HandleWhoisOpcode(WorldPacket& recv_data);
|
||||
void HandleResetInstancesOpcode(WorldPacket& recv_data);
|
||||
|
||||
|
|
@ -654,6 +656,7 @@ class MANGOS_DLL_SPEC WorldSession
|
|||
void HandleCalendarEventStatus(WorldPacket& recv_data);
|
||||
void HandleCalendarEventModeratorStatus(WorldPacket& recv_data);
|
||||
void HandleCalendarComplain(WorldPacket& recv_data);
|
||||
void HandleCalendarPendingInvites(WorldPacket& recv_data);
|
||||
|
||||
void HandleSpellClick(WorldPacket& recv_data);
|
||||
void HandleAlterAppearance(WorldPacket& recv_data);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue