Skip to content

Commit 26b7a78

Browse files
committed
Merge remote branch 'infernasd2/inferna' into inferna
2 parents 070be74 + f0378f3 commit 26b7a78

File tree

3 files changed

+281
-0
lines changed

3 files changed

+281
-0
lines changed

scripts/eastern_kingdoms/scarlet_enclave/ebon_hold.cpp

Lines changed: 252 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3225,6 +3225,234 @@ struct MANGOS_DLL_DECL mob_warrior_of_the_frozen_wastesAI : public ScriptedAI
32253225
}
32263226
};
32273227

3228+
/*######
3229+
## npc_mine_car
3230+
######*/
3231+
3232+
struct MANGOS_DLL_DECL npc_mine_carAI : public ScriptedAI
3233+
{
3234+
npc_mine_carAI(Creature* pCreature) : ScriptedAI(pCreature)
3235+
{
3236+
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
3237+
Reset();
3238+
}
3239+
3240+
uint64 m_uiScarletMinerGuid;
3241+
3242+
void Reset()
3243+
{
3244+
}
3245+
3246+
void MoveInLineOfSight(Unit* /*pUnit*/)
3247+
{
3248+
return;
3249+
}
3250+
3251+
void EnterCombat(Unit* /*pUnit*/)
3252+
{
3253+
return;
3254+
}
3255+
3256+
void AttackStart(Unit* /*pUnit*/)
3257+
{
3258+
return;
3259+
}
3260+
3261+
void SetScarletMinerGuid(const uint64 &guid)
3262+
{
3263+
m_uiScarletMinerGuid = guid;
3264+
}
3265+
3266+
void FollowMiner()
3267+
{
3268+
if(Creature* pMiner = m_creature->GetCreature(*m_creature, m_uiScarletMinerGuid))
3269+
{
3270+
// buggy sometimes...
3271+
m_creature->SetSpeedRate(MOVE_WALK, 1.5f, true);
3272+
m_creature->SetSpeedRate(MOVE_RUN, 1.5f, true);
3273+
m_creature->RemoveSplineFlag(SPLINEFLAG_WALKMODE);
3274+
3275+
m_creature->GetMotionMaster()->MoveFollow(pMiner, 1.0f, 0);
3276+
}
3277+
}
3278+
3279+
void ExitMineCar()
3280+
{
3281+
if (Creature* pMiner = m_creature->GetCreature(*m_creature, m_uiScarletMinerGuid))
3282+
pMiner->ForcedDespawn();
3283+
}
3284+
3285+
void UpdateAI(const uint32 /*uiDiff*/)
3286+
{
3287+
}
3288+
};
3289+
3290+
enum
3291+
{
3292+
SPELL_CAR_DRAG = 52465,
3293+
SPELL_CAR_CHECK = 54173
3294+
};
3295+
3296+
/*######
3297+
## npc_scarlet_miner
3298+
######*/
3299+
3300+
struct MANGOS_DLL_DECL npc_scarlet_minerAI : public npc_escortAI
3301+
{
3302+
npc_scarlet_minerAI(Creature* pCreature) : npc_escortAI(pCreature)
3303+
{
3304+
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
3305+
Reset();
3306+
}
3307+
3308+
uint32 m_uiMonoTimer;
3309+
uint32 m_uiMonoPhase;
3310+
3311+
uint64 m_uiMineCarGuid;
3312+
uint64 m_uiPlayerGuid;
3313+
3314+
bool m_bReachedShip;
3315+
uint32 m_uiShipDelay;
3316+
3317+
void Reset()
3318+
{
3319+
m_uiMonoTimer = 0;
3320+
m_uiMonoPhase = 0;
3321+
3322+
m_uiMineCarGuid = 0;
3323+
m_uiPlayerGuid = 0;
3324+
3325+
m_bReachedShip = false;
3326+
m_uiShipDelay = 3000;
3327+
}
3328+
3329+
void StartCarEvent(Player *pPlayer)
3330+
{
3331+
pPlayer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
3332+
3333+
m_uiMineCarGuid = pPlayer->GetVehicle()->GetBase()->GetGUID();
3334+
m_uiPlayerGuid = pPlayer->GetGUID();
3335+
Start(false, pPlayer->GetGUID());
3336+
}
3337+
3338+
void WaypointReached(uint32 uiWp)
3339+
{
3340+
switch(uiWp)
3341+
{
3342+
case 0:
3343+
if (Unit *pMineCar = m_creature->GetCreature(*m_creature, m_uiMineCarGuid))
3344+
m_creature->SetInFront(pMineCar);
3345+
3346+
// say something
3347+
SetRun(true);
3348+
m_uiMonoTimer = 4000;
3349+
m_uiMonoPhase = 1;
3350+
break;
3351+
case 16:
3352+
m_bReachedShip = true;
3353+
break;
3354+
default:
3355+
break;
3356+
}
3357+
}
3358+
3359+
void UpdateAI(const uint32 uiDiff)
3360+
{
3361+
if (m_uiMonoPhase)
3362+
{
3363+
if (m_uiMonoTimer <= uiDiff)
3364+
{
3365+
if (m_uiMonoPhase == 1)
3366+
{
3367+
if (Creature *pMineCar = m_creature->GetCreature(*m_creature, m_uiMineCarGuid))
3368+
DoCast(pMineCar, SPELL_CAR_DRAG);
3369+
3370+
m_uiMonoTimer = 800;
3371+
m_uiMonoPhase = 2;
3372+
}
3373+
else
3374+
{
3375+
if (Creature *pMineCar = m_creature->GetCreature(*m_creature, m_uiMineCarGuid))
3376+
{
3377+
if(npc_mine_carAI* pMineCarAI = dynamic_cast<npc_mine_carAI*>(pMineCar->AI()))
3378+
{
3379+
pMineCarAI->FollowMiner();
3380+
}
3381+
m_uiMonoPhase = 0;
3382+
}
3383+
}
3384+
}
3385+
else
3386+
m_uiMonoTimer -= uiDiff;
3387+
}
3388+
3389+
if (m_bReachedShip)
3390+
{
3391+
if (m_uiShipDelay <= uiDiff)
3392+
{
3393+
if (Creature *pMineCar = m_creature->GetCreature(*m_creature, m_uiMineCarGuid))
3394+
{
3395+
m_creature->SetInFront(pMineCar);
3396+
3397+
pMineCar->Relocate(pMineCar->GetPositionX(), pMineCar->GetPositionY(), pMineCar->GetPositionZ() + 1);
3398+
pMineCar->GetMotionMaster()->MovementExpired();
3399+
pMineCar->StopMoving();
3400+
pMineCar->RemoveAurasDueToSpell(SPELL_CAR_DRAG);
3401+
3402+
if (Player *pPlayer = m_creature->GetMap()->GetPlayer(ObjectGuid(m_uiPlayerGuid)))
3403+
{
3404+
pPlayer->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
3405+
}
3406+
// Say something
3407+
3408+
if(npc_mine_carAI* pMineCarAI = dynamic_cast<npc_mine_carAI*>(pMineCar->AI()))
3409+
{
3410+
pMineCarAI->ExitMineCar();
3411+
}
3412+
3413+
m_bReachedShip = false;
3414+
}
3415+
}
3416+
else
3417+
m_uiShipDelay -= uiDiff;
3418+
}
3419+
npc_escortAI::UpdateAI(uiDiff);
3420+
}
3421+
};
3422+
3423+
enum
3424+
{
3425+
QUEST_MASSACRE_AT_LIGHTS_POINT = 12701,
3426+
3427+
ENTRY_SCARLET_MINER = 28841,
3428+
ENTRY_MINE_CAR = 28817,
3429+
3430+
SPELL_MINE_CAR_SUMM = 52463
3431+
};
3432+
3433+
bool GOUse_inconspicous_mine_car(Player *pPlayer, GameObject* /*pGo*/)
3434+
{
3435+
if (pPlayer->GetQuestStatus(QUEST_MASSACRE_AT_LIGHTS_POINT) == QUEST_STATUS_INCOMPLETE)
3436+
{
3437+
if (Creature *pMiner = pPlayer->SummonCreature(ENTRY_SCARLET_MINER, 2383.869629f, -5900.312500f, 107.996086f, pPlayer->GetOrientation(),TEMPSUMMON_DEAD_DESPAWN, 1))
3438+
{
3439+
pPlayer->CastSpell(pPlayer, SPELL_MINE_CAR_SUMM, true);
3440+
if (Creature *pMineCar = (Creature*)pPlayer->GetVehicle()->GetBase())
3441+
{
3442+
if (npc_mine_carAI* pMineCarAI = dynamic_cast<npc_mine_carAI*>(pMineCar->AI()))
3443+
{
3444+
pMineCarAI->SetScarletMinerGuid(pMiner->GetGUID());
3445+
if(npc_scarlet_minerAI* pMinerAI = dynamic_cast<npc_scarlet_minerAI*>(pMiner->AI()))
3446+
{
3447+
pMinerAI->StartCarEvent(pPlayer);
3448+
}
3449+
}
3450+
}
3451+
}
3452+
}
3453+
return true;
3454+
}
3455+
32283456
CreatureAI* GetAI_npc_highlord_darion_mograine(Creature* pCreature)
32293457
{
32303458
return new npc_highlord_darion_mograineAI(pCreature);
@@ -3250,6 +3478,16 @@ CreatureAI* GetAI_mob_acherus_ghoul(Creature* pCreature)
32503478
return new mob_acherus_ghoulAI(pCreature);
32513479
};
32523480

3481+
CreatureAI* GetAI_npc_mine_car(Creature* pCreature)
3482+
{
3483+
return new npc_mine_carAI(pCreature);
3484+
};
3485+
3486+
CreatureAI* GetAI_npc_scarlet_miner(Creature* pCreature)
3487+
{
3488+
return new npc_scarlet_minerAI(pCreature);
3489+
};
3490+
32533491
void AddSC_ebon_hold()
32543492
{
32553493
Script* pNewScript;
@@ -3324,4 +3562,18 @@ void AddSC_ebon_hold()
33243562
pNewScript->GetAI = &GetAI_mob_warrior_of_the_frozen_wastes;
33253563
pNewScript->RegisterSelf();
33263564

3565+
pNewScript = new Script;
3566+
pNewScript->Name = "npc_mine_car";
3567+
pNewScript->GetAI = &GetAI_npc_mine_car;
3568+
pNewScript->RegisterSelf();
3569+
3570+
pNewScript = new Script;
3571+
pNewScript->Name = "npc_scarlet_miner";
3572+
pNewScript->GetAI = &GetAI_npc_scarlet_miner;
3573+
pNewScript->RegisterSelf();
3574+
3575+
pNewScript = new Script;
3576+
pNewScript->Name = "go_inconspicous_mine_car";
3577+
pNewScript->pGOUse = &GOUse_inconspicous_mine_car;
3578+
pNewScript->RegisterSelf();
33273579
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
-- Waypoints for Massacre at Light's Point
2+
3+
DELETE FROM `script_waypoint` WHERE `entry` = 28841;
4+
5+
INSERT INTO `script_waypoint`
6+
(`entry`, `pointid`, `location_x`, `location_y`, `location_z`, `waittime`)
7+
VALUES
8+
('28841', '0', '2389.030000', '-5902.740000', '109.014000', '5000'),
9+
('28841', '1', '2341.812012', '-5900.484863', '102.619743', '0'),
10+
('28841', '2', '2306.561279', '-5901.738210', '91.7924190', '0'),
11+
('28841', '3', '2300.098389', '-5912.618652', '86.0148850', '0'),
12+
('28841', '4', '2294.142090', '-5927.274414', '75.3168490', '0'),
13+
('28841', '5', '2286.984375', '-5944.955566', '63.7149660', '0'),
14+
('28841', '6', '2280.001709', '-5961.186035', '54.2282830', '0'),
15+
('28841', '7', '2259.389648', '-5974.197754', '42.3593480', '0'),
16+
('28841', '8', '2242.882812', '-5984.642578', '32.8278500', '0'),
17+
('28841', '9', '2217.265625', '-6028.959473', '7.6757050', '0'),
18+
('28841', '10', '2202.595947', '-6061.325684', '5.8820180', '0'),
19+
('28841', '11', '2188.974609', '-6080.866699', '3.3700270', '0'),
20+
('28841', '12', '2176.483887', '-6110.407227', '1.8551810', '0'),
21+
('28841', '13', '2172.516602', '-6146.752441', '1.0742350', '0'),
22+
('28841', '14', '2138.918457', '-6158.920898', '1.3429260', '0'),
23+
('28841', '15', '2129.866699', '-6174.107910', '4.3807790', '0'),
24+
('28841', '16', '2117.739014', '-6193.830079', '13.354200', '10000');
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- ScriptName's for Quest Massacre at Light's Point
2+
3+
UPDATE `gameobject_template` SET `ScriptName` = 'go_inconspicous_mine_car' WHERE `entry` = 190767;
4+
UPDATE `creature_template` SET `ScriptName` = 'npc_mine_car' WHERE `entry` = 28817;
5+
UPDATE `creature_template` SET `ScriptName` = 'npc_scarlet_miner' WHERE `entry` = 28841;

0 commit comments

Comments
 (0)