mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-18 14:10:18 -04:00
*Fix some bugs about vehicle.
--HG-- branch : trunk
This commit is contained in:
@@ -153,7 +153,7 @@ struct TRINITY_DLL_DECL npc_dancing_flamesAI : public ScriptedAI
|
||||
float x, y, z;
|
||||
m_creature->GetPosition(x,y,z);
|
||||
m_creature->Relocate(x,y,z + 0.94f);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_DANCE);
|
||||
WorldPacket data; //send update position to client
|
||||
m_creature->BuildHeartBeatMsg(&data);
|
||||
|
||||
@@ -548,7 +548,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
{
|
||||
case 1://lift off
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->StopMoving();
|
||||
DoYell(SAY_TAKEOFF, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TAKEOFF);
|
||||
@@ -618,7 +618,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 2000;
|
||||
break;
|
||||
case 9://land
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->StopMoving();
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
for(uint8 i = 0; i < 2; i++)
|
||||
@@ -1843,7 +1843,7 @@ void boss_illidan_stormrageAI::Reset()
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID, 0);
|
||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID+1, 0);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->setActive(false);
|
||||
Summons.DespawnAll();
|
||||
}
|
||||
|
||||
@@ -555,7 +555,7 @@ struct mob_giant_infernalAI : public hyjal_trashAI
|
||||
{
|
||||
trigger->SetVisibility(VISIBILITY_OFF);
|
||||
trigger->setFaction(m_creature->getFaction());
|
||||
trigger->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
trigger->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
trigger->CastSpell(m_creature,SPELL_METEOR,true);
|
||||
}
|
||||
m_creature->GetMotionMaster()->Clear();
|
||||
@@ -1320,7 +1320,7 @@ struct mob_frost_wyrmAI : public hyjal_trashAI
|
||||
{
|
||||
FrostBreathTimer = 5000;
|
||||
MoveTimer = 0;
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
@@ -1436,7 +1436,7 @@ struct mob_gargoyleAI : public hyjal_trashAI
|
||||
Zpos = 10.0;
|
||||
StrikeTimer = 2000+rand()%5000;
|
||||
MoveTimer = 0;
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
|
||||
+1
-1
@@ -764,7 +764,7 @@ struct TRINITY_DLL_DECL mob_toxic_sporebatAI : public ScriptedAI
|
||||
|
||||
void Reset()
|
||||
{
|
||||
m_creature->AddUnitMovementFlag(/*MOVEMENTFLAG_ONTRANSPORT + */MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->setFaction(14);
|
||||
movement_timer = 0;
|
||||
ToxicSpore_Timer = 5000;
|
||||
|
||||
+2
-2
@@ -133,7 +133,7 @@ struct TRINITY_DLL_DECL boss_nazanAI : public ScriptedAI
|
||||
flight = false;
|
||||
BellowingRoar_Timer = 6000;
|
||||
ConeOfFire_Timer = 12000;
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
m_creature->GetMotionMaster()->Clear();
|
||||
if(Unit *victim = SelectUnit(SELECT_TARGET_NEAREST,0))
|
||||
@@ -334,7 +334,7 @@ struct TRINITY_DLL_DECL boss_vazruden_the_heraldAI : public ScriptedAI
|
||||
if(summoned->GetEntry() == ENTRY_NAZAN)
|
||||
{
|
||||
((boss_nazanAI *)summoned->AI())->VazrudenGUID = VazrudenGUID;
|
||||
summoned->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
summoned->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
summoned->SetSpeed(MOVE_FLIGHT, 2.5);
|
||||
if(victim)
|
||||
((ScriptedAI*)summoned->AI())->AttackStart(victim,false);
|
||||
|
||||
@@ -109,7 +109,7 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
|
||||
MovePhase = 0;
|
||||
|
||||
m_creature->SetSpeed(MOVE_RUN, 2.0f);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
|
||||
m_creature->setActive(true);
|
||||
|
||||
@@ -228,7 +228,7 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
|
||||
|
||||
m_creature->InterruptSpell(CURRENT_GENERIC_SPELL);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
(*m_creature).GetMotionMaster()->Clear(false);
|
||||
(*m_creature).GetMotionMaster()->MovePoint(0,IntroWay[2][0],IntroWay[2][1],IntroWay[2][2]);
|
||||
|
||||
@@ -251,7 +251,7 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
|
||||
{
|
||||
if(MovePhase >= 7)
|
||||
{
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
m_creature->GetMotionMaster()->MovePoint(8,IntroWay[7][0],IntroWay[7][1],IntroWay[7][2]);
|
||||
}
|
||||
@@ -266,7 +266,7 @@ struct TRINITY_DLL_DECL boss_nightbaneAI : public ScriptedAI
|
||||
{
|
||||
if(MovePhase >= 7)
|
||||
{
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
m_creature->GetMotionMaster()->MovePoint(8,IntroWay[7][0],IntroWay[7][1],IntroWay[7][2]);
|
||||
}
|
||||
|
||||
@@ -534,7 +534,7 @@ struct TRINITY_DLL_DECL npc_image_of_medivhAI : public ScriptedAI
|
||||
EventStarted = true;
|
||||
Creature* Arcanagos = m_creature->SummonCreature(MOB_ARCANAGOS,ArcanagosPos[0],ArcanagosPos[1],ArcanagosPos[2],0,TEMPSUMMON_CORPSE_TIMED_DESPAWN,20000);
|
||||
ArcanagosGUID = Arcanagos->GetGUID();
|
||||
Arcanagos->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
Arcanagos->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
(*Arcanagos).GetMotionMaster()->MovePoint(0,ArcanagosPos[0],ArcanagosPos[1],ArcanagosPos[2]);
|
||||
Arcanagos->SetOrientation(ArcanagosPos[3]);
|
||||
m_creature->SetOrientation(MedivPos[3]);
|
||||
|
||||
@@ -462,7 +462,7 @@ struct TRINITY_DLL_DECL mob_felkael_phoenixAI : public ScriptedAI
|
||||
void Reset()
|
||||
{
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->CastSpell(m_creature,SPELL_PHOENIX_BURN,true);
|
||||
BurnTimer = 2000;
|
||||
Death_Timer = 2700;
|
||||
@@ -596,7 +596,7 @@ struct TRINITY_DLL_DECL mob_arcane_sphereAI : public ScriptedAI
|
||||
ChangeTargetTimer = 6000 + rand()%6000;
|
||||
|
||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->setFaction(14);
|
||||
DoCast(m_creature, SPELL_ARCANE_SPHERE_PASSIVE, true);
|
||||
}
|
||||
|
||||
@@ -63,7 +63,7 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
|
||||
Icebolt_Count = 0;
|
||||
IsInFly = false;
|
||||
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who)
|
||||
@@ -103,7 +103,7 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
|
||||
{
|
||||
phase = 2;
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
m_creature->SetHover(true);
|
||||
@@ -141,7 +141,7 @@ struct TRINITY_DLL_DECL boss_sapphironAI : public ScriptedAI
|
||||
{
|
||||
phase = 1;
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->GetMotionMaster()->MoveChase(m_creature->getVictim());
|
||||
m_creature->SetHover(true);
|
||||
|
||||
@@ -125,7 +125,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
|
||||
if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 60) && (Phase == 1))
|
||||
{
|
||||
Phase = 2;
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->SetHover(true);
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
@@ -135,7 +135,7 @@ struct TRINITY_DLL_DECL boss_onyxiaAI : public ScriptedAI
|
||||
if(((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) < 40) && (Phase == 2))
|
||||
{
|
||||
Phase = 3;
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->SetHover(false);
|
||||
m_creature->GetMotionMaster()->MovePoint(0, -10.6155, -219.357, -87.7344);
|
||||
DoStartMovement(m_creature->getVictim());
|
||||
|
||||
@@ -98,7 +98,7 @@ struct TRINITY_DLL_DECL mob_mature_netherwing_drakeAI : public ScriptedAI
|
||||
{
|
||||
float PlayerX, PlayerY, PlayerZ;
|
||||
caster->GetClosePoint(PlayerX, PlayerY, PlayerZ, m_creature->GetObjectSize());
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->GetMotionMaster()->MovePoint(1, PlayerX, PlayerY, PlayerZ);
|
||||
PlayerGUID = caster->GetGUID();
|
||||
}
|
||||
@@ -114,7 +114,7 @@ struct TRINITY_DLL_DECL mob_mature_netherwing_drakeAI : public ScriptedAI
|
||||
IsEating = true;
|
||||
EatTimer = 5000;
|
||||
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACKUNARMED);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,7 +194,7 @@ struct TRINITY_DLL_DECL mob_enslaved_netherwing_drakeAI : public ScriptedAI
|
||||
m_creature->setFaction(FACTION_DEFAULT);
|
||||
|
||||
FlyTimer = 10000;
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->SetVisibility(VISIBILITY_ON);
|
||||
}
|
||||
|
||||
@@ -243,7 +243,7 @@ struct TRINITY_DLL_DECL mob_enslaved_netherwing_drakeAI : public ScriptedAI
|
||||
PlayerGUID = 0;
|
||||
}
|
||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
m_creature->RemoveCorpse();
|
||||
}
|
||||
@@ -282,7 +282,7 @@ struct TRINITY_DLL_DECL mob_enslaved_netherwing_drakeAI : public ScriptedAI
|
||||
dz += 25;
|
||||
}
|
||||
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->GetMotionMaster()->MovePoint(1, dx, dy, dz);
|
||||
}
|
||||
}
|
||||
@@ -759,7 +759,7 @@ struct TRINITY_DLL_DECL npc_overlord_morghorAI : public ScriptedAI
|
||||
case 19: DoScriptText(LORD_ILLIDAN_SAY_7, Illi); return 5000; break;
|
||||
case 20:
|
||||
Illi->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||
Illi->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
Illi->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
return 500; break;
|
||||
case 21: DoScriptText(OVERLORD_SAY_5, m_creature); return 500; break;
|
||||
case 22:
|
||||
|
||||
@@ -155,7 +155,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
|
||||
Timer[EVENT_BERSERK] = 600000;
|
||||
FlightCount = 0;
|
||||
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10);
|
||||
m_creature->SetFloatValue(UNIT_FIELD_COMBATREACH, 10);
|
||||
|
||||
@@ -282,7 +282,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
|
||||
m_creature->AttackStop();
|
||||
m_creature->GetMotionMaster()->Clear(false);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->StopMoving();
|
||||
DoYell(YELL_TAKEOFF, LANG_UNIVERSAL, NULL);
|
||||
DoPlaySoundToSet(m_creature, SOUND_TAKEOFF);
|
||||
@@ -373,7 +373,7 @@ struct TRINITY_DLL_DECL boss_felmystAI : public ScriptedAI
|
||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||
break;
|
||||
case 10:
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->StopMoving();
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||
EnterPhase(PHASE_GROUND);
|
||||
|
||||
@@ -131,7 +131,7 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI
|
||||
|
||||
m_creature->setFaction(14);
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->SetVisibility(VISIBILITY_ON);
|
||||
m_creature->SetStandState(UNIT_STAND_STATE_SLEEP);
|
||||
|
||||
@@ -198,7 +198,7 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI
|
||||
TalkTimer = 10000;
|
||||
break;
|
||||
case 3:
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->GetMotionMaster()->Clear();
|
||||
m_creature->GetMotionMaster()->MovePoint(0,FLY_X,FLY_Y,FLY_Z);
|
||||
TalkTimer = 600000;
|
||||
@@ -217,7 +217,7 @@ struct TRINITY_DLL_DECL boss_kalecgosAI : public ScriptedAI
|
||||
TalkTimer = 3000;
|
||||
break;
|
||||
case 2:
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->GetMotionMaster()->Clear();
|
||||
m_creature->GetMotionMaster()->MovePoint(0,FLY_X,FLY_Y,FLY_Z);
|
||||
TalkTimer = 600000;
|
||||
|
||||
@@ -1421,7 +1421,7 @@ struct TRINITY_DLL_DECL mob_phoenix_tkAI : public ScriptedAI
|
||||
|
||||
void Reset()
|
||||
{
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);//birds can fly! :)
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);//birds can fly! :)
|
||||
egg = true;
|
||||
Cycle_Timer = 2000;
|
||||
m_creature->CastSpell(m_creature,SPELL_BURN,true);
|
||||
|
||||
@@ -91,7 +91,7 @@ struct TRINITY_DLL_DECL npc_lady_sylvanas_windrunnerAI : public ScriptedAI
|
||||
summoned->CastSpell(target, SPELL_RIBBON_OF_SOULS, false);
|
||||
}
|
||||
|
||||
summoned->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||
summoned->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
targetGUID = summoned->GetGUID();
|
||||
}
|
||||
}
|
||||
@@ -174,7 +174,7 @@ struct TRINITY_DLL_DECL npc_highborne_lamenterAI : public ScriptedAI
|
||||
{
|
||||
if( EventMove_Timer < diff )
|
||||
{
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->SendMonsterMoveWithSpeed(m_creature->GetPositionX(),m_creature->GetPositionY(),HIGHBORNE_LOC_Y_NEW,5000);
|
||||
m_creature->GetMap()->CreatureRelocation(m_creature,m_creature->GetPositionX(),m_creature->GetPositionY(),HIGHBORNE_LOC_Y_NEW,m_creature->GetOrientation());
|
||||
EventMove = false;
|
||||
|
||||
@@ -431,9 +431,7 @@ struct TRINITY_DLL_DECL mob_soaring_eagleAI : public ScriptedAI
|
||||
m_creature->SetSpeed(MOVE_RUN, 5.0f);
|
||||
TargetGUID = target->GetGUID();
|
||||
}
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||
m_creature->GetMotionMaster()->MovePoint(0, x, y, z);
|
||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||
arrived = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -482,32 +482,33 @@ void WorldSession::HandleChangeSeatsOnControlledVehicle(WorldPacket &recv_data)
|
||||
{
|
||||
sLog.outDebug("WORLD: Recvd CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE");
|
||||
recv_data.hexlike();
|
||||
uint32 a;
|
||||
uint16 b;
|
||||
uint16 c;
|
||||
uint32 d,e,f,g,h,i,j,k;
|
||||
int8 seat;
|
||||
recv_data >> a >> b >> c;
|
||||
recv_data >> d >> e >> f >> g >> h >> i >> j >> k;
|
||||
recv_data >> seat;
|
||||
//sLog.outError("change seat %u %u %u %u %u %u %u %u %u %u %u %u", a, b,c,d,e,f,g,h,i,j,k,seat);
|
||||
|
||||
if(seat == GetPlayer()->GetTransSeat())
|
||||
if(!GetPlayer()->m_Vehicle)
|
||||
return;
|
||||
|
||||
if(GetPlayer()->m_Vehicle)
|
||||
{
|
||||
if(Vehicle *vehicle = GetPlayer()->m_Vehicle->HasEmptySeat(seat))
|
||||
{
|
||||
GetPlayer()->m_Vehicle->RemovePassenger(GetPlayer());
|
||||
//If the player is going to a turret, the vehicle should be changed
|
||||
GetPlayer()->m_Vehicle = vehicle;
|
||||
if(!vehicle->AddPassenger(GetPlayer(), seat))
|
||||
{
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(recv_data.GetOpcode() == CMSG_CHANGE_SEATS_ON_CONTROLLED_VEHICLE)
|
||||
ReadMovementInfo(recv_data, &GetPlayer()->m_Vehicle->m_movementInfo);
|
||||
|
||||
uint64 guid;
|
||||
if(!recv_data.readPackGUID(guid))
|
||||
return;
|
||||
|
||||
Vehicle *vehicle = ObjectAccessor::GetVehicle(guid);
|
||||
if(!vehicle)
|
||||
return;
|
||||
|
||||
int8 seatNum;
|
||||
recv_data >> seatNum;
|
||||
if(vehicle == GetPlayer()->m_Vehicle && seatNum == GetPlayer()->GetTransSeat())
|
||||
return;
|
||||
|
||||
if(!vehicle->HasEmptySeat(seatNum))
|
||||
return;
|
||||
|
||||
GetPlayer()->m_Vehicle->RemovePassenger(GetPlayer());
|
||||
GetPlayer()->m_Vehicle = vehicle;
|
||||
if(!vehicle->AddPassenger(GetPlayer(), seatNum))
|
||||
assert(false);
|
||||
}
|
||||
|
||||
void WorldSession::HandleRequestVehicleExit(WorldPacket &recv_data)
|
||||
|
||||
+7
-21
@@ -133,7 +133,7 @@ void Object::BuildMovementUpdateBlock(UpdateData * data, uint32 flags ) const
|
||||
buf << uint8( UPDATETYPE_MOVEMENT );
|
||||
buf << GetGUID();
|
||||
|
||||
_BuildMovementUpdate(&buf, flags, 0x00000000);
|
||||
_BuildMovementUpdate(&buf, flags);
|
||||
|
||||
data->AddUpdateBlock(buf);
|
||||
}
|
||||
@@ -147,7 +147,6 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) c
|
||||
|
||||
uint8 updatetype = UPDATETYPE_CREATE_OBJECT;
|
||||
uint8 flags = m_updateFlag;
|
||||
uint32 flags2 = 0;
|
||||
|
||||
/** lower flag1 **/
|
||||
if(target == this) // building packet for oneself
|
||||
@@ -195,7 +194,7 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) c
|
||||
buf << (uint8)0xFF << GetGUID();
|
||||
buf << (uint8)m_objectTypeId;
|
||||
|
||||
_BuildMovementUpdate(&buf, flags, flags2);
|
||||
_BuildMovementUpdate(&buf, flags);
|
||||
|
||||
UpdateMask updateMask;
|
||||
updateMask.SetCount( m_valuesCount );
|
||||
@@ -259,18 +258,18 @@ void Object::DestroyForPlayer(Player *target) const
|
||||
target->GetSession()->SendPacket( &data );
|
||||
}
|
||||
|
||||
void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2) const
|
||||
void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags) const
|
||||
{
|
||||
*data << (uint8)flags; // update flags
|
||||
|
||||
// 0x20
|
||||
if (flags & UPDATEFLAG_LIVING)
|
||||
{
|
||||
uint32 flags2 = ((Unit*)this)->GetUnitMovementFlags();
|
||||
switch(GetTypeId())
|
||||
{
|
||||
case TYPEID_UNIT:
|
||||
{
|
||||
flags2 = ((Unit*)this)->GetUnitMovementFlags();
|
||||
if(((Unit*)this)->m_Vehicle)
|
||||
flags2 |= MOVEMENTFLAG_ONTRANSPORT;
|
||||
else
|
||||
@@ -282,8 +281,6 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2)
|
||||
break;
|
||||
case TYPEID_PLAYER:
|
||||
{
|
||||
flags2 = ((Player*)this)->GetUnitMovementFlags();
|
||||
|
||||
if(((Player*)this)->GetTransport() || ((Player*)this)->m_Vehicle)
|
||||
flags2 |= MOVEMENTFLAG_ONTRANSPORT;
|
||||
else
|
||||
@@ -342,20 +339,8 @@ void Object::_BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2)
|
||||
*data << ((Unit*)this)->GetSpeed( MOVE_PITCH_RATE );
|
||||
|
||||
// 0x08000000
|
||||
if(flags2 & MOVEMENTFLAG_SPLINE2)
|
||||
if(GetTypeId() == TYPEID_PLAYER && ((Player*)this)->isInFlight())
|
||||
{
|
||||
if(GetTypeId() != TYPEID_PLAYER)
|
||||
{
|
||||
sLog.outDebug("_BuildMovementUpdate: MOVEMENTFLAG_SPLINE2 for non-player");
|
||||
return;
|
||||
}
|
||||
|
||||
if(!((Player*)this)->isInFlight())
|
||||
{
|
||||
sLog.outDebug("_BuildMovementUpdate: MOVEMENTFLAG_SPLINE2 but not in flight");
|
||||
return;
|
||||
}
|
||||
|
||||
WPAssert(((Player*)this)->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE);
|
||||
|
||||
FlightPathMovementGenerator *fmg = (FlightPathMovementGenerator*)(((Player*)this)->GetMotionMaster()->top());
|
||||
@@ -1635,7 +1620,8 @@ TempSummon *Map::SummonCreature(uint32 entry, float x, float y, float z, float a
|
||||
else if(properties->Type == SUMMON_TYPE_TOTEM)
|
||||
mask = SUMMON_MASK_TOTEM;
|
||||
else if(properties->Category == SUMMON_CATEGORY_VEHICLE
|
||||
|| properties->Type == SUMMON_TYPE_VEHICLE)
|
||||
|| properties->Type == SUMMON_TYPE_VEHICLE
|
||||
|| properties->Type == SUMMON_TYPE_VEHICLE2)
|
||||
mask = SUMMON_MASK_VEHICLE;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -331,7 +331,7 @@ class TRINITY_DLL_SPEC Object
|
||||
virtual void _SetUpdateBits(UpdateMask *updateMask, Player *target) const;
|
||||
|
||||
virtual void _SetCreateBits(UpdateMask *updateMask, Player *target) const;
|
||||
void _BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2 ) const;
|
||||
void _BuildMovementUpdate(ByteBuffer * data, uint8 flags) const;
|
||||
void _BuildValuesUpdate(uint8 updatetype, ByteBuffer *data, UpdateMask *updateMask, Player *target ) const;
|
||||
|
||||
uint16 m_objectType;
|
||||
|
||||
@@ -1173,7 +1173,7 @@ OpcodeHandler opcodeTable[NUM_MSG_TYPES] =
|
||||
/*0x476*/ { "CMSG_REQUEST_VEHICLE_EXIT", STATUS_LOGGEDIN, &WorldSession::HandleRequestVehicleExit },
|
||||
/*0x477*/ { "CMSG_REQUEST_VEHICLE_PREV_SEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x478*/ { "CMSG_REQUEST_VEHICLE_NEXT_SEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x479*/ { "CMSG_REQUEST_VEHICLE_SWITCH_SEAT", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x479*/ { "CMSG_REQUEST_VEHICLE_SWITCH_SEAT", STATUS_LOGGEDIN, &WorldSession::HandleChangeSeatsOnControlledVehicle},
|
||||
/*0x47A*/ { "CMSG_PET_LEARN_TALENT", STATUS_LOGGEDIN, &WorldSession::HandlePetLearnTalent },
|
||||
/*0x47B*/ { "CMSG_PET_UNLEARN_TALENTS", STATUS_NEVER, &WorldSession::Handle_NULL },
|
||||
/*0x47C*/ { "SMSG_SET_PHASE_SHIFT", STATUS_NEVER, &WorldSession::Handle_ServerSide },
|
||||
|
||||
@@ -2443,8 +2443,8 @@ enum SummonType
|
||||
SUMMON_TYPE_GUARDIAN2 = 6,
|
||||
SUMMON_TYPE_WILD2 = 7,
|
||||
SUMMON_TYPE_WILD3 = 8,
|
||||
SUMMON_TYPE_WILD4 = 9,
|
||||
SUMMON_TYPE_VEHICLE = 10,
|
||||
SUMMON_TYPE_VEHICLE = 9,
|
||||
SUMMON_TYPE_VEHICLE2 = 10,
|
||||
SUMMON_TYPE_OBJECT = 11,
|
||||
|
||||
SUMMON_TYPE_CRITTER = 41,
|
||||
|
||||
@@ -3269,6 +3269,7 @@ void Spell::EffectSummonType(uint32 i)
|
||||
SummonGuardian(entry, properties);
|
||||
break;
|
||||
case SUMMON_TYPE_VEHICLE:
|
||||
case SUMMON_TYPE_VEHICLE2:
|
||||
SummonVehicle(entry, properties);
|
||||
break;
|
||||
case SUMMON_TYPE_TOTEM:
|
||||
|
||||
+2
-2
@@ -13528,7 +13528,7 @@ void Unit::ExitVehicle()
|
||||
}
|
||||
|
||||
BuildHeartBeatMsg(&data);
|
||||
SendMessageToSet(&data, GetTypeId() == TYPEID_PLAYER ? false : true);
|
||||
SendMessageToSet(&data, false);
|
||||
|
||||
if(m_Vehicle->GetOwnerGUID() == GetGUID())
|
||||
m_Vehicle->Dismiss();
|
||||
@@ -13565,7 +13565,7 @@ void Unit::BuildMovementPacket(ByteBuffer *data) const
|
||||
// 0x00001000
|
||||
if(GetUnitMovementFlags() & MOVEMENTFLAG_JUMPING)
|
||||
{
|
||||
*data << (float)m_movementInfo.j_unk;
|
||||
*data << (float)m_movementInfo.j_zspeed;
|
||||
*data << (float)m_movementInfo.j_sinAngle;
|
||||
*data << (float)m_movementInfo.j_cosAngle;
|
||||
*data << (float)m_movementInfo.j_xyspeed;
|
||||
|
||||
+2
-2
@@ -668,7 +668,7 @@ struct MovementInfo
|
||||
// last fall time
|
||||
uint32 fallTime;
|
||||
// jumping
|
||||
float j_unk, j_sinAngle, j_cosAngle, j_xyspeed;
|
||||
float j_zspeed, j_sinAngle, j_cosAngle, j_xyspeed;
|
||||
// spline
|
||||
float u_unk1;
|
||||
|
||||
@@ -677,7 +677,7 @@ struct MovementInfo
|
||||
flags = 0;
|
||||
time = t_time = fallTime = 0;
|
||||
unk1 = 0;
|
||||
x = y = z = o = t_x = t_y = t_z = t_o = s_pitch = j_unk = j_sinAngle = j_cosAngle = j_xyspeed = u_unk1 = 0.0f;
|
||||
x = y = z = o = t_x = t_y = t_z = t_o = s_pitch = j_zspeed = j_sinAngle = j_cosAngle = j_xyspeed = u_unk1 = 0.0f;
|
||||
t_guid = 0;
|
||||
}
|
||||
};
|
||||
|
||||
+20
-22
@@ -43,6 +43,11 @@ void Vehicle::AddToWorld()
|
||||
ObjectAccessor::Instance().AddObject(this);
|
||||
Unit::AddToWorld();
|
||||
AIM_Initialize();
|
||||
switch(GetEntry())
|
||||
{
|
||||
case 28312:InstallAccessory(28319,7);break;
|
||||
case 32627:InstallAccessory(32629,7);break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,24 +147,17 @@ void Vehicle::SetVehicleId(uint32 id)
|
||||
assert(!m_Seats.empty());
|
||||
}
|
||||
|
||||
Vehicle* Vehicle::HasEmptySeat(int8 seatNum) const
|
||||
bool Vehicle::HasEmptySeat(int8 seatNum) const
|
||||
{
|
||||
SeatMap::const_iterator seat = m_Seats.find(seatNum);
|
||||
//No such seat
|
||||
if(seat == m_Seats.end()) return NULL;
|
||||
//Not occupied
|
||||
if(!seat->second.passenger) return (Vehicle*)this;
|
||||
//Check if turret is empty
|
||||
if(seat->second.passenger->GetTypeId() == TYPEID_UNIT
|
||||
&& ((Creature*)seat->second.passenger)->isVehicle())
|
||||
return ((Vehicle*)seat->second.passenger)->HasEmptySeat(seatNum);
|
||||
//Occupied
|
||||
return NULL;
|
||||
if(seat == m_Seats.end()) return false;
|
||||
return !seat->second.passenger;
|
||||
}
|
||||
|
||||
void Vehicle::InstallAccessory(uint32 entry, int8 seatNum)
|
||||
{
|
||||
Creature *accessory = SummonCreature(entry, GetPositionX(), GetPositionY(), GetPositionZ());
|
||||
//Creature *accessory = SummonCreature(entry, GetPositionX(), GetPositionY(), GetPositionZ());
|
||||
Creature *accessory = SummonVehicle(entry, GetPositionX(), GetPositionY(), GetPositionZ());
|
||||
if(!accessory)
|
||||
return;
|
||||
|
||||
@@ -202,16 +200,16 @@ bool Vehicle::AddPassenger(Unit *unit, int8 seatNum)
|
||||
|
||||
unit->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||
VehicleSeatEntry const *veSeat = seat->second.seatInfo;
|
||||
unit->m_movementInfo.t_x = veSeat->m_attachmentOffsetX;
|
||||
unit->m_movementInfo.t_y = veSeat->m_attachmentOffsetY;
|
||||
unit->m_movementInfo.t_z = veSeat->m_attachmentOffsetZ;
|
||||
unit->m_movementInfo.t_x = 0;//veSeat->m_attachmentOffsetX;
|
||||
unit->m_movementInfo.t_y = 0;//veSeat->m_attachmentOffsetY;
|
||||
unit->m_movementInfo.t_z = 0;//veSeat->m_attachmentOffsetZ;
|
||||
unit->m_movementInfo.t_o = 0;
|
||||
unit->m_movementInfo.t_time = 4;
|
||||
unit->m_movementInfo.t_seat = seat->first;
|
||||
|
||||
unit->Relocate(GetPositionX() + veSeat->m_attachmentOffsetX,
|
||||
GetPositionY() + veSeat->m_attachmentOffsetY,
|
||||
GetPositionZ() + veSeat->m_attachmentOffsetZ,
|
||||
unit->Relocate(GetPositionX() + unit->m_movementInfo.t_x,
|
||||
GetPositionY() + unit->m_movementInfo.t_y,
|
||||
GetPositionZ() + unit->m_movementInfo.t_z,
|
||||
GetOrientation());
|
||||
|
||||
WorldPacket data;
|
||||
@@ -219,7 +217,7 @@ bool Vehicle::AddPassenger(Unit *unit, int8 seatNum)
|
||||
{
|
||||
//ChatHandler(player).PSendSysMessage("Enter seat %u %u", veSeat->m_ID, seat->first);
|
||||
|
||||
if(seat == m_Seats.begin())
|
||||
if(seat->first == 0)
|
||||
{
|
||||
((Player*)unit)->SetCharm(this, true);
|
||||
((Player*)unit)->SetViewpoint(this, true);
|
||||
@@ -231,8 +229,8 @@ bool Vehicle::AddPassenger(Unit *unit, int8 seatNum)
|
||||
((Player*)unit)->GetSession()->SendPacket(&data);
|
||||
}
|
||||
|
||||
BuildHeartBeatMsg(&data);
|
||||
SendMessageToSet(&data, unit->GetTypeId() == TYPEID_PLAYER ? false : true);
|
||||
unit->BuildHeartBeatMsg(&data);
|
||||
unit->SendMessageToSet(&data, false);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -258,7 +256,7 @@ void Vehicle::RemovePassenger(Unit *unit)
|
||||
|
||||
//SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
|
||||
|
||||
if(unit->GetTypeId() == TYPEID_PLAYER && seat == m_Seats.begin())
|
||||
if(unit->GetTypeId() == TYPEID_PLAYER && seat->first == 0)
|
||||
{
|
||||
((Player*)unit)->SetCharm(this, false);
|
||||
((Player*)unit)->SetViewpoint(this, false);
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ class Vehicle : public Creature
|
||||
VehicleEntry const *GetVehicleInfo() { return m_vehicleInfo; }
|
||||
void SetVehicleId(uint32 vehicleid);
|
||||
|
||||
Vehicle* HasEmptySeat(int8 seatNum) const;
|
||||
bool HasEmptySeat(int8 seatNum) const;
|
||||
bool AddPassenger(Unit *passenger, int8 seatNum = -1);
|
||||
void RemovePassenger(Unit *passenger);
|
||||
void InstallAccessory(uint32 entry, int8 seatNum);
|
||||
|
||||
@@ -604,7 +604,7 @@ void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo *mi)
|
||||
if(mi->flags & MOVEMENTFLAG_JUMPING)
|
||||
{
|
||||
CHECK_PACKET_SIZE(data, data.rpos()+4+4+4+4);
|
||||
data >> mi->j_unk;
|
||||
data >> mi->j_zspeed;
|
||||
data >> mi->j_sinAngle;
|
||||
data >> mi->j_cosAngle;
|
||||
data >> mi->j_xyspeed;
|
||||
|
||||
Reference in New Issue
Block a user