mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 10:37:03 +00:00
More work on vehicles
This commit is contained in:
parent
ca33f8a1ab
commit
14d312ad22
7 changed files with 51 additions and 13 deletions
|
|
@ -1696,7 +1696,7 @@ void Creature::CallAssistence()
|
||||||
|
|
||||||
void Creature::SaveRespawnTime()
|
void Creature::SaveRespawnTime()
|
||||||
{
|
{
|
||||||
if(isPet() || isVehicle() || !m_DBTableGuid)
|
if(isPet() || !m_DBTableGuid)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(m_respawnTime > time(NULL)) // dead (no corpse)
|
if(m_respawnTime > time(NULL)) // dead (no corpse)
|
||||||
|
|
|
||||||
|
|
@ -1666,13 +1666,23 @@ void WorldSession::HandleSpellClick( WorldPacket & recv_data )
|
||||||
if(!vehicle)
|
if(!vehicle)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//_player->SetClientControl(vehicle, 1);
|
|
||||||
//_player->CastSpell(_player, 43768, true);
|
|
||||||
//_player->SetUInt64Value(UNIT_FIELD_CHARM, guid);
|
|
||||||
//_player->SetUInt64Value(PLAYER_FARSIGHT, guid);
|
|
||||||
_player->EnterVehicle(vehicle);
|
_player->EnterVehicle(vehicle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WorldSession::HandleDismissControlledVehicle( WorldPacket & recv_data )
|
||||||
|
{
|
||||||
|
//CHECK_PACKET_SIZE(recv_data, 8);
|
||||||
|
recv_data.hexlike(); // standard movement packet
|
||||||
|
|
||||||
|
// using charm guid, because we don't have vehicle guid...
|
||||||
|
Vehicle *vehicle = ObjectAccessor::GetVehicle(_player->GetCharmGUID());
|
||||||
|
|
||||||
|
if(!vehicle)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_player->ExitVehicle(vehicle);
|
||||||
|
}
|
||||||
|
|
||||||
void WorldSession::HandleInspectAchievements( WorldPacket & recv_data )
|
void WorldSession::HandleInspectAchievements( WorldPacket & recv_data )
|
||||||
{
|
{
|
||||||
CHECK_PACKET_SIZE(recv_data, 1);
|
CHECK_PACKET_SIZE(recv_data, 1);
|
||||||
|
|
@ -1686,4 +1696,3 @@ void WorldSession::HandleInspectAchievements( WorldPacket & recv_data )
|
||||||
|
|
||||||
player->GetAchievementMgr().SendRespondInspectAchievements(_player);
|
player->GetAchievementMgr().SendRespondInspectAchievements(_player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1159,7 +1159,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
||||||
/*0x46A*/ { "SMSG_CRITERIA_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
/*0x46A*/ { "SMSG_CRITERIA_UPDATE", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||||
/*0x46B*/ { "CMSG_QUERY_INSPECT_ACHIEVEMENTS", STATUS_LOGGEDIN, &WorldSession::HandleInspectAchievements },
|
/*0x46B*/ { "CMSG_QUERY_INSPECT_ACHIEVEMENTS", STATUS_LOGGEDIN, &WorldSession::HandleInspectAchievements },
|
||||||
/*0x46C*/ { "SMSG_RESPOND_INSPECT_ACHIEVEMENTS",STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
/*0x46C*/ { "SMSG_RESPOND_INSPECT_ACHIEVEMENTS",STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||||
/*0x46D*/ { "CMSG_DISMISS_CONTROLLED_VEHICLE", STATUS_NEVER, &WorldSession::Handle_NULL },
|
/*0x46D*/ { "CMSG_DISMISS_CONTROLLED_VEHICLE", STATUS_LOGGEDIN, &WorldSession::HandleDismissControlledVehicle },
|
||||||
/*0x46E*/ { "CMSG_COMPLETE_ACHIEVEMENT_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
/*0x46E*/ { "CMSG_COMPLETE_ACHIEVEMENT_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||||
/*0x46F*/ { "SMSG_QUESTUPDATE_ADD_PVP_KILL", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
/*0x46F*/ { "SMSG_QUESTUPDATE_ADD_PVP_KILL", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||||
/*0x470*/ { "CMSG_SET_CRITERIA_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
/*0x470*/ { "CMSG_SET_CRITERIA_CHEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||||
|
|
|
||||||
|
|
@ -18601,9 +18601,13 @@ void Player::EnterVehicle(Vehicle *vehicle)
|
||||||
{
|
{
|
||||||
vehicle->SetCharmerGUID(GetGUID());
|
vehicle->SetCharmerGUID(GetGUID());
|
||||||
vehicle->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
|
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_PVP_ATTACKABLE);
|
||||||
vehicle->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
|
vehicle->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
|
||||||
vehicle->setFaction(getFaction());
|
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);
|
SetCharm(vehicle);
|
||||||
SetUInt64Value(PLAYER_FARSIGHT, vehicle->GetGUID());
|
SetUInt64Value(PLAYER_FARSIGHT, vehicle->GetGUID());
|
||||||
|
|
@ -18634,15 +18638,29 @@ void Player::EnterVehicle(Vehicle *vehicle)
|
||||||
// end of transport part
|
// end of transport part
|
||||||
data << uint32(0); // fall time
|
data << uint32(0); // fall time
|
||||||
GetSession()->SendPacket(&data);
|
GetSession()->SendPacket(&data);
|
||||||
|
|
||||||
|
data.Initialize(SMSG_PET_SPELLS, 8+4+4+4+4*10+1+1);
|
||||||
|
data << uint64(vehicle->GetGUID());
|
||||||
|
data << uint32(0x00000000);
|
||||||
|
data << uint32(0x00000000);
|
||||||
|
data << uint32(0x00000101);
|
||||||
|
|
||||||
|
for(uint32 i = 0; i < 10; ++i)
|
||||||
|
data << uint16(0) << uint8(0) << uint8(i+8);
|
||||||
|
|
||||||
|
data << uint8(0);
|
||||||
|
data << uint8(0);
|
||||||
|
GetSession()->SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::ExitVehicle(Vehicle *vehicle)
|
void Player::ExitVehicle(Vehicle *vehicle)
|
||||||
{
|
{
|
||||||
vehicle->SetCharmerGUID(0);
|
vehicle->SetCharmerGUID(0);
|
||||||
vehicle->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
|
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_PVP_ATTACKABLE);
|
||||||
vehicle->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
|
vehicle->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNKNOWN5);
|
||||||
vehicle->setFaction((GetTeam() == ALLIANCE) ? vehicle->GetCreatureInfo()->faction_A : vehicle->GetCreatureInfo()->faction_H);
|
vehicle->setFaction((GetTeam() == ALLIANCE) ? vehicle->GetCreatureInfo()->faction_A : vehicle->GetCreatureInfo()->faction_H);
|
||||||
|
//vehicle->SetUInt32Value(UNIT_DYNAMIC_FLAGS, 0);
|
||||||
|
|
||||||
SetCharm(NULL);
|
SetCharm(NULL);
|
||||||
SetUInt64Value(PLAYER_FARSIGHT, 0);
|
SetUInt64Value(PLAYER_FARSIGHT, 0);
|
||||||
|
|
@ -18662,6 +18680,11 @@ void Player::ExitVehicle(Vehicle *vehicle)
|
||||||
data << uint32(0); // fall time
|
data << uint32(0); // fall time
|
||||||
GetSession()->SendPacket(&data);
|
GetSession()->SendPacket(&data);
|
||||||
|
|
||||||
|
data.Initialize(SMSG_PET_SPELLS, 8+4);
|
||||||
|
data << uint64(0);
|
||||||
|
data << uint32(0);
|
||||||
|
GetSession()->SendPacket(&data);
|
||||||
|
|
||||||
// only for flyable vehicles?
|
// only for flyable vehicles?
|
||||||
CastSpell(this, 45472, true); // Parachute
|
CastSpell(this, 45472, true); // Parachute
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -490,9 +490,10 @@ enum UnitFlags
|
||||||
// Value masks for UNIT_FIELD_FLAGS_2
|
// Value masks for UNIT_FIELD_FLAGS_2
|
||||||
enum UnitFlags2
|
enum UnitFlags2
|
||||||
{
|
{
|
||||||
UNIT_FLAG2_FEIGN_DEATH = 0x00000001,
|
UNIT_FLAG2_FEIGN_DEATH = 0x00000001,
|
||||||
UNIT_FLAG2_COMPREHEND_LANG= 0x00000008,
|
UNIT_FLAG2_COMPREHEND_LANG = 0x00000008,
|
||||||
UNIT_FLAG2_FORCE_MOVE = 0x00000040
|
UNIT_FLAG2_FORCE_MOVE = 0x00000040,
|
||||||
|
UNIT_FLAG2_UNKNOWN1 = 0x00000800
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Non Player Character flags
|
/// Non Player Character flags
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,10 @@ bool Vehicle::Create(uint32 guidlow, Map *map, uint32 Entry, uint32 vehicleId, u
|
||||||
SetVehicleId(vehicleId);
|
SetVehicleId(vehicleId);
|
||||||
|
|
||||||
SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
|
SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
|
||||||
|
SetUInt32Value(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_UNKNOWN1);
|
||||||
|
SetUInt32Value(UNIT_FIELD_BYTES_1, 0x02000001);
|
||||||
|
SetUInt32Value(UNIT_FIELD_BYTES_2, 0x00000001);
|
||||||
|
SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 3.0f);
|
||||||
|
|
||||||
CreatureInfo const *ci = GetCreatureInfo();
|
CreatureInfo const *ci = GetCreatureInfo();
|
||||||
setFaction(team == ALLIANCE ? ci->faction_A : ci->faction_H);
|
setFaction(team == ALLIANCE ? ci->faction_A : ci->faction_H);
|
||||||
|
|
|
||||||
|
|
@ -551,7 +551,8 @@ class MANGOS_DLL_SPEC WorldSession
|
||||||
void HandlePetUnlearnOpcode( WorldPacket& recvPacket );
|
void HandlePetUnlearnOpcode( WorldPacket& recvPacket );
|
||||||
void HandlePetSpellAutocastOpcode( WorldPacket& recvPacket );
|
void HandlePetSpellAutocastOpcode( WorldPacket& recvPacket );
|
||||||
void HandlePetCastSpellOpcode( WorldPacket& recvPacket );
|
void HandlePetCastSpellOpcode( WorldPacket& recvPacket );
|
||||||
void HandlePetLearnTalent( WorldPacket& recvPacket );;
|
void HandlePetLearnTalent( WorldPacket& recvPacket );
|
||||||
|
void HandleDismissControlledVehicle( WorldPacket& recvPacket );
|
||||||
|
|
||||||
void HandleSetActionBar(WorldPacket& recv_data);
|
void HandleSetActionBar(WorldPacket& recv_data);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue