*One rev skipped:  Fixed exploit with several spells being casted on pet with no de-buff applied. Author: Elron.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-04-12 16:51:46 -05:00
12 changed files with 390 additions and 175 deletions
@@ -43,7 +43,6 @@ struct TRINITY_DLL_DECL boss_anetheronAI : public hyjal_trashAI
pInstance = ((ScriptedInstance*)c->GetInstanceData()); pInstance = ((ScriptedInstance*)c->GetInstanceData());
go = false; go = false;
pos = 0; pos = 0;
Reset();
SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_SLEEP); SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_SLEEP);
if(TempSpell && TempSpell->EffectImplicitTargetA[0] != 1) if(TempSpell && TempSpell->EffectImplicitTargetA[0] != 1)
{ {
@@ -34,7 +34,6 @@ struct TRINITY_DLL_DECL boss_azgalorAI : public hyjal_trashAI
pInstance = ((ScriptedInstance*)c->GetInstanceData()); pInstance = ((ScriptedInstance*)c->GetInstanceData());
go = false; go = false;
pos = 0; pos = 0;
Reset();
SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_HOWL_OF_AZGALOR); SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_HOWL_OF_AZGALOR);
if(TempSpell) if(TempSpell)
TempSpell->EffectRadiusIndex[0] = 12;//100yards instead of 50000?! TempSpell->EffectRadiusIndex[0] = 12;//100yards instead of 50000?!
@@ -31,7 +31,6 @@ struct TRINITY_DLL_DECL boss_kazrogalAI : public hyjal_trashAI
pInstance = ((ScriptedInstance*)c->GetInstanceData()); pInstance = ((ScriptedInstance*)c->GetInstanceData());
go = false; go = false;
pos = 0; pos = 0;
Reset();
SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_MARK); SpellEntry *TempSpell = (SpellEntry*)GetSpellStore()->LookupEntry(SPELL_MARK);
if(TempSpell && TempSpell->EffectImplicitTargetA[0] != 1) if(TempSpell && TempSpell->EffectImplicitTargetA[0] != 1)
{ {
@@ -37,7 +37,6 @@ struct TRINITY_DLL_DECL boss_rage_winterchillAI : public hyjal_trashAI
pInstance = ((ScriptedInstance*)c->GetInstanceData()); pInstance = ((ScriptedInstance*)c->GetInstanceData());
go = false; go = false;
pos = 0; pos = 0;
Reset();
} }
uint32 FrostArmorTimer; uint32 FrostArmorTimer;
@@ -84,18 +84,34 @@ float InfernalPos[8][3]=//spawn points for the infernals in the horde base
{5482.39, -2689.19, 1481.09} {5482.39, -2689.19, 1481.09}
}; };
float InfernalSPWP[10][3]=//spawn points for the infernals in the horde base used in the cleaning wave float InfernalSPWP[26][4]=//spawn points for the infernals in the horde base used in the cleaning wave
{ {
{5528.5, -2771.23, 1494.08}, {5490.96, -2718.72, 1482.96, 0.49773},
{5471.41, -2711.17, 1483.97}, {5449.51, -2723.32, 1485.69, 2.69685},
{5464.08, -2653.9, 1482.67}, {5520.83, -2624.68, 1483.82, 1.20459},
{5550.84, -2633.8, 1484.08}, {5558.28, -2629.26, 1485.76, 0.37992},
{5579.86, -2704.86, 1489.33}, {5567.97, -2758.69, 1494.10, 5.04125},
{5589.67, -2655.5, 1490.15}, {5384.90, -2793.47, 1503.90, 5.55412},
{5432.36, -2744.81, 1486.25}, {5495.33, -2814.06, 1501.56, 1.12055},
{5463.14, -2857.41, 1512.45}, {5472.63, -2929.39, 1538.31, 1.95777},
{5534.31, -2774.58, 1494.89}, {5334.72, -2952.29, 1534.34, 0.50869},
{5524.36, -2735.52, 1484.16} {5398.36, -2872.46, 1512.38, 0.76787},
{5514.39, -2768.63, 1492.30, 1.55721},
{5598.91, -2703.75, 1495.64, 2.56644},
{5467.80, -2655.93, 1482.27, 0.85819},
{5399.83, -2985.24, 1545.04, 5.92559},
{5232.13, -2967.05, 1553.09, 5.41351},
{5272.02, -3082.52, 1567.09, 3.40681},
{5343.26, -3120.71, 1582.92, 3.16727},
{5371.26, -3175.24, 1587.41, 6.10466},
{5434.67, -3177.91, 1579.25, 2.77850},
{5237.39, -3149.25, 1593.59, 0.83855},
{5202.15, -3016.64, 1566.28, 3.31256},
{5302.54, -2914.37, 1528.53, 3.37146},
{5439.04, -2834.81, 1508.80, 2.14231},
{5421.33, -2771.04, 1494.28, 6.06223},
{5549.76, -2692.93, 1482.68, 2.19414},
{5459.78, -2755.71, 1490.68, 1.05139}
}; };
float VeinPos[14][8]=//spawn points of the ancient gem veins float VeinPos[14][8]=//spawn points of the ancient gem veins
@@ -116,6 +132,15 @@ float VeinPos[14][8]=//spawn points of the ancient gem veins
{5441.54, -3321.59, 1651.55, 0.258306, 0, 0, 0.128794, 0.991671} //horde {5441.54, -3321.59, 1651.55, 0.258306, 0, 0, 0.128794, 0.991671} //horde
}; };
float AllianceOverrunGargPos[5][4]=//gargoyle spawn points in the alliance overrun
{
{5279.94, -2049.68, 1311.38, 0},//garg1
{5289.15, -2219.06, 1291.12, 0},//garg2
{5202.07, -2136.10, 1305.07, 2.8},//garg3
{5071.52, -2425.63, 1454.48, 5.54},//garg4
{5120.65, -2467.92, 1463.93, 2.54}//garg5
};
float AllianceFirePos[92][8]=//spawn points for the fire visuals (GO) in the alliance base float AllianceFirePos[92][8]=//spawn points for the fire visuals (GO) in the alliance base
{ {
{5039.9, -1796.84, 1323.88, 2.59222, 0, 0, 0.962511, 0.271243}, {5039.9, -1796.84, 1323.88, 2.59222, 0, 0, 0.962511, 0.271243},
@@ -1142,7 +1167,7 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
pUnit->setActive(true); pUnit->setActive(true);
} }
} }
for(uint8 i = 0; i < 5; i++)//summon 5 abominations for(uint8 i = 0; i < 3; i++)//summon 3 abominations
{ {
uint8 r = rand()%4; uint8 r = rand()%4;
Creature* pUnit = m_creature->SummonCreature(ABOMINATION, AllianceBase[r][0]+irand(-15,15), AllianceBase[r][1]+irand(-15,15), AllianceBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000); Creature* pUnit = m_creature->SummonCreature(ABOMINATION, AllianceBase[r][0]+irand(-15,15), AllianceBase[r][1]+irand(-15,15), AllianceBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
@@ -1156,10 +1181,10 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
} }
for(uint8 i = 0; i < 5; i++)//summon 5 gargoyles for(uint8 i = 0; i < 5; i++)//summon 5 gargoyles
{ {
uint8 r = rand()%4; Creature* pUnit = m_creature->SummonCreature(GARGOYLE, AllianceOverrunGargPos[i][0], AllianceOverrunGargPos[i][1], AllianceOverrunGargPos[i][2], AllianceOverrunGargPos[i][3], TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
Creature* pUnit = m_creature->SummonCreature(GARGOYLE, AllianceBase[r][0]+irand(-15,15), AllianceBase[r][1]+irand(-15,15), AllianceBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if(pUnit) if(pUnit)
{ {
pUnit->SetHomePosition(AllianceOverrunGargPos[i][0], AllianceOverrunGargPos[i][1], AllianceOverrunGargPos[i][2], AllianceOverrunGargPos[i][3]);
((hyjal_trashAI*)pUnit->AI())->faction = Faction; ((hyjal_trashAI*)pUnit->AI())->faction = Faction;
((hyjal_trashAI*)pUnit->AI())->IsOverrun = true; ((hyjal_trashAI*)pUnit->AI())->IsOverrun = true;
((hyjal_trashAI*)pUnit->AI())->OverrunType = i; ((hyjal_trashAI*)pUnit->AI())->OverrunType = i;
@@ -1171,6 +1196,42 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
for(uint8 i = 0; i < 65; i++)//summon fires for(uint8 i = 0; i < 65; i++)//summon fires
m_creature->SummonGameObject(FLAMEOBJECT,HordeFirePos[i][0],HordeFirePos[i][1],HordeFirePos[i][2],HordeFirePos[i][3],HordeFirePos[i][4],HordeFirePos[i][5],HordeFirePos[i][6],HordeFirePos[i][7],0); m_creature->SummonGameObject(FLAMEOBJECT,HordeFirePos[i][0],HordeFirePos[i][1],HordeFirePos[i][2],HordeFirePos[i][3],HordeFirePos[i][4],HordeFirePos[i][5],HordeFirePos[i][6],HordeFirePos[i][7],0);
for(uint8 i = 0; i < 26; i++)//summon infernals
{
Creature* pUnit = m_creature->SummonCreature(GIANT_INFERNAL, InfernalSPWP[i][0], InfernalSPWP[i][1], InfernalSPWP[i][2], InfernalSPWP[i][3], TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if(pUnit)
{
pUnit->SetHomePosition(InfernalSPWP[i][0], InfernalSPWP[i][1], InfernalSPWP[i][2], InfernalSPWP[i][3]);
((hyjal_trashAI*)pUnit->AI())->faction = Faction;
((hyjal_trashAI*)pUnit->AI())->IsOverrun = true;
((hyjal_trashAI*)pUnit->AI())->OverrunType = i;
pUnit->setActive(true);
}
}
for(uint8 i = 0; i < 25; i++)//summon 25 ghouls
{
uint8 r = rand()%4;
Creature* pUnit = m_creature->SummonCreature(GHOUL, HordeBase[r][0]+irand(-15,15), HordeBase[r][1]+irand(-15,15), HordeBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if(pUnit)
{
((hyjal_trashAI*)pUnit->AI())->faction = Faction;
((hyjal_trashAI*)pUnit->AI())->IsOverrun = true;
((hyjal_trashAI*)pUnit->AI())->OverrunType = i;
pUnit->setActive(true);
}
}
for(uint8 i = 0; i < 5; i++)//summon 5 abominations
{
uint8 r = rand()%4;
Creature* pUnit = m_creature->SummonCreature(ABOMINATION, HordeBase[r][0]+irand(-15,15), HordeBase[r][1]+irand(-15,15), HordeBase[r][2], 0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if(pUnit)
{
((hyjal_trashAI*)pUnit->AI())->faction = Faction;
((hyjal_trashAI*)pUnit->AI())->IsOverrun = true;
((hyjal_trashAI*)pUnit->AI())->OverrunType = i;
pUnit->setActive(true);
}
}
break; break;
} }
} }
@@ -17,7 +17,7 @@ float HordeWPs[8][3]=//basic waypoints from spawn to leader
{5554.58, -2514.66, 1476.12}, {5554.58, -2514.66, 1476.12},
{5554.16, -2567.23, 1479.90}, {5554.16, -2567.23, 1479.90},
{5540.67, -2625.99, 1480.89}, {5540.67, -2625.99, 1480.89},
{5508.16, -2659.2, 1480.15}, {5508.16, -2659.20, 1480.15},//random rush starts from here
{5489.62, -2704.05, 1482.18}, {5489.62, -2704.05, 1482.18},
{5457.04, -2726.26, 1485.10} {5457.04, -2726.26, 1485.10}
}; };
@@ -36,7 +36,7 @@ float AllianceWPs[8][3]=//basic waypoints from spawn to leader
float FrostWyrmWPs[3][3]=//waypoints for the frost wyrms in horde base float FrostWyrmWPs[3][3]=//waypoints for the frost wyrms in horde base
{ {
{5580.82, -2628.83, 1528.28}, {5580.82, -2628.83, 1528.28},
{5550.9, -2667.16, 1505.45}, {5550.90, -2667.16, 1505.45},
{5459.64, -2725.91, 1484.83} {5459.64, -2725.91, 1484.83}
}; };
@@ -54,7 +54,7 @@ float FlyPathWPs[3][3]=//waypoints for the gargoyls and frost wyrms in horde bas
{5456.67, -2725.48, 1493.08} {5456.67, -2725.48, 1493.08}
}; };
float AllianceOverrunWP[36][3]=//waypoints in the alliance base used in the end in the cleaning wave float AllianceOverrunWP[55][3]=//waypoints in the alliance base used in the end in the cleaning wave
{ {
{4976.37,-1708.02,1339.43},//0spawn {4976.37,-1708.02,1339.43},//0spawn
{4994.83,-1725.52,1333.25},//1 start {4994.83,-1725.52,1333.25},//1 start
@@ -91,45 +91,52 @@ float AllianceOverrunWP[36][3]=//waypoints in the alliance base used in the end
{4983.25, -1857.4, 1320.48},//32 {4983.25, -1857.4, 1320.48},//32
{5015.94, -1821.24, 1321.86},//33 {5015.94, -1821.24, 1321.86},//33
{5027.97, -1775.25, 1321.87},//34 {5027.97, -1775.25, 1321.87},//34
{5015.27, -1738.77, 1324.83}//35 {5015.27, -1738.77, 1324.83},//35
{5081.07, -1902.10, 1346.36},//36 abo start
{5107.65, -1912.03, 1356.49},//37
{5132.83, -1927.07, 1362.42},//38
{5147.78, -1954.41, 1365.98},//39
{5164.96, -1966.48, 1367.04},//40
{5189.04, -1961.06, 1367.90},//41
{5212.27, -1975.30, 1365.58},//42
{5221.82, -1994.18, 1364.97},//43 end1
{5202.23, -1994.94, 1367.59},//44 end2
{5279.94, -2049.68, 1311.38},//45 garg1
{5289.15, -2219.06, 1291.12},//46 garg2
{5202.07, -2136.10, 1305.07},//47 garg3
{5071.52, -2425.63, 1454.48},//48 garg4
{5120.65, -2467.92, 1463.93},//49 garg5
{5283.04, -2043.26, 1300.11},//50 garg target1
{5313.22, -2207.60, 1290.06},//51 garg target2
{5180.41, -2121.87, 1292.62},//52 garg target3
{5088.68, -2432.04, 1441.73},//53 garg target4
{5111.26, -2454.73, 1449.63}//54 garg target5
}; };
float HordeOverrunWP[33][3]=//waypoints in the horde base used in the end in the cleaning wave float HordeOverrunWP[21][3]=//waypoints in the horde base used in the end in the cleaning wave
{ {
{5510.4815, -2676.7112, 1480.4314},// 0 spawn {5490.72,-2702.94,1482.14},//0 start
{5528.5, -2771.23, 1494.08},// 1 infernal 1 {5469.77,-2741.34,1486.95},
{5471.41, -2711.17, 1483.97},// 2 infernal 2 {5439.47,-2771.02,1494.59},
{5464.08, -2653.9, 1482.67},// 3 infernal 3 {5408.85,-2811.92,1505.68},
{5550.84, -2633.8, 1484.08},// 4 infernal 4 {5423.87,-2857.80,1515.55},
{5579.86, -2704.86, 1489.33},// 5 infernal 5 {5428.19,-2898.15,1524.61},
{5531.17, -2634.41, 1481.11},// 6 start {5394.59,-2930.05,1528.23},
{5484.56, -2662.32, 1481.11},// 7 end {5351.11,-2935.80,1532.24},
{5528.79, -2636.19, 1481.33},// 8 start {5312.37,-2959.06,1536.21},
{5511.87, -2626.16, 1484.76},// 9 end {5264.93,-2989.80,1545.70},
{5537.93, -2637.54, 1480.69},// 10 start {5256.63,-3056.16,1559.24},
{5504.26, -2710.44, 1482.14},// 11 {5267.32,-3119.55,1575.36},
{5449.92, -2724.51, 1485.69},// 12 {5305.61,-3139.88,1586.38},
{5431.08, -2713.96, 1493.37},// 13 end {5330.56,-3135.37,1588.58},
{5546.89, -2620.74, 1481.06},// 14 start {5365.87,-3139.78,1583.96},
{5579.75, -2658.66, 1488.61},// 15 {5389.39,-3163.57,1582.57},//15 end
{5598.45, -2692.56, 1493.59},// 16 end {5500.86,-2669.89,1481.04},//16 start
{5550.96, -2624.63, 1482.94},// 17 start {5472.08,-2715.14,1483.55},
{5578.7, -2656.13, 1488.69},// 18 {5450.11,-2721.47,1485.61},
{5574.56, -2722.74, 1488.5},// 19 {5433.25,-2712.93,1493.02},//19 end 1
{5590.46, -2746.81, 1495},// 20 {5429.91,-2718.44,1493.42}//20 end 2
{5571.33, -2761.14, 1494.93},// 21
{5546.45, -2770.83, 1495.33},// 22
{5532.51, -2804.72, 1498.49},// 23
{5492.97, -2760.9, 1489.16},// 24
{5451.35, -2724.44, 1485.58},// 25
{5430.23, -2714.38, 1493.51},// 26 end
{5535.67, -2627.69, 1480.87},// 27 start
{5485.75, -2667.97, 1480.64},// 28
{5510.78, -2740.5, 1486.27},// 29
{5559.93, -2710.97, 1483.59},// 30
{5561.09, -2688.13, 1484.65},// 31
{5556.73, -2676.17, 1482.58}// 32 end
}; };
void hyjal_trashAI::Reset(){} void hyjal_trashAI::Reset(){}
@@ -167,12 +174,124 @@ void hyjal_trashAI::UpdateAI(const uint32 diff)
{ {
SetupOverrun = true; SetupOverrun = true;
if(faction == 0) if(faction == 0)
{ {
for(uint8 i = 0; i < 4; i++) if(m_creature->GetEntry() == GARGOYLE)
AddWaypoint(i, AllianceWPs[i][0]+irand(-3,3), AllianceWPs[i][1]+irand(-3,3), AllianceWPs[i][2]); {
switch(OverrunType)
{
case 0:
{
DummyTarget[0] = AllianceOverrunWP[50][0];
DummyTarget[1] = AllianceOverrunWP[50][1];
DummyTarget[2] = AllianceOverrunWP[50][2];
}
break;
case 1:
{
DummyTarget[0] = AllianceOverrunWP[51][0];
DummyTarget[1] = AllianceOverrunWP[51][1];
DummyTarget[2] = AllianceOverrunWP[51][2];
}
break;
case 2:
{
DummyTarget[0] = AllianceOverrunWP[52][0];
DummyTarget[1] = AllianceOverrunWP[52][1];
DummyTarget[2] = AllianceOverrunWP[52][2];
}
break;
case 3:
{
DummyTarget[0] = AllianceOverrunWP[53][0];
DummyTarget[1] = AllianceOverrunWP[53][1];
DummyTarget[2] = AllianceOverrunWP[53][2];
}
break;
case 4:
{
DummyTarget[0] = AllianceOverrunWP[54][0];
DummyTarget[1] = AllianceOverrunWP[54][1];
DummyTarget[2] = AllianceOverrunWP[54][2];
}
break;
}
}
if(m_creature->GetEntry() == ABOMINATION)
{
for(uint8 i = 0; i < 4; i++)
AddWaypoint(i, AllianceWPs[i][0]+irand(-3,3), AllianceWPs[i][1]+irand(-3,3), AllianceWPs[i][2]);
switch(OverrunType)
{
case 0:
AddWaypoint( 4, AllianceOverrunWP[35][0]+irand(-3,3), AllianceOverrunWP[35][1]+irand(-3,3), AllianceOverrunWP[35][2]);
AddWaypoint( 5, AllianceOverrunWP[34][0]+irand(-3,3), AllianceOverrunWP[34][1]+irand(-3,3), AllianceOverrunWP[34][2]);
AddWaypoint( 6, AllianceOverrunWP[33][0]+irand(-3,3), AllianceOverrunWP[33][1]+irand(-3,3), AllianceOverrunWP[33][2]);
AddWaypoint( 7, AllianceOverrunWP[32][0]+irand(-3,3), AllianceOverrunWP[32][1]+irand(-3,3), AllianceOverrunWP[32][2]);
AddWaypoint( 8, AllianceOverrunWP[31][0]+irand(-3,3), AllianceOverrunWP[31][1]+irand(-3,3), AllianceOverrunWP[31][2]);
AddWaypoint( 9, AllianceOverrunWP[30][0]+irand(-3,3), AllianceOverrunWP[30][1]+irand(-3,3), AllianceOverrunWP[30][2]);
AddWaypoint(10, AllianceOverrunWP[29][0]+irand(-3,3), AllianceOverrunWP[29][1]+irand(-3,3), AllianceOverrunWP[29][2]);
AddWaypoint(11, AllianceOverrunWP[36][0]+irand(-3,3), AllianceOverrunWP[36][1]+irand(-3,3), AllianceOverrunWP[36][2]);
AddWaypoint(12, AllianceOverrunWP[37][0]+irand(-3,3), AllianceOverrunWP[37][1]+irand(-3,3), AllianceOverrunWP[37][2]);
AddWaypoint(13, AllianceOverrunWP[38][0]+irand(-3,3), AllianceOverrunWP[38][1]+irand(-3,3), AllianceOverrunWP[38][2]);
AddWaypoint(14, AllianceOverrunWP[39][0]+irand(-3,3), AllianceOverrunWP[39][1]+irand(-3,3), AllianceOverrunWP[39][2]);
AddWaypoint(15, AllianceOverrunWP[40][0]+irand(-3,3), AllianceOverrunWP[40][1]+irand(-3,3), AllianceOverrunWP[40][2]);
AddWaypoint(16, AllianceOverrunWP[41][0]+irand(-3,3), AllianceOverrunWP[41][1]+irand(-3,3), AllianceOverrunWP[41][2]);
AddWaypoint(17, AllianceOverrunWP[42][0]+irand(-3,3), AllianceOverrunWP[42][1]+irand(-3,3), AllianceOverrunWP[42][2]);
AddWaypoint(18, AllianceOverrunWP[43][0]+irand(-3,3), AllianceOverrunWP[43][1]+irand(-3,3), AllianceOverrunWP[43][2]);
m_creature->SetHomePosition(AllianceOverrunWP[43][0]+irand(-3,3), AllianceOverrunWP[43][1]+irand(-3,3), AllianceOverrunWP[43][2],0);
SetDespawnAtEnd(false);
LastOverronPos = 18;
Start(true, true, true);
break;
case 1:
AddWaypoint( 4, AllianceOverrunWP[35][0]+irand(-3,3), AllianceOverrunWP[35][1]+irand(-3,3), AllianceOverrunWP[35][2]);
AddWaypoint( 5, AllianceOverrunWP[34][0]+irand(-3,3), AllianceOverrunWP[34][1]+irand(-3,3), AllianceOverrunWP[34][2]);
AddWaypoint( 6, AllianceOverrunWP[33][0]+irand(-3,3), AllianceOverrunWP[33][1]+irand(-3,3), AllianceOverrunWP[33][2]);
AddWaypoint( 7, AllianceOverrunWP[32][0]+irand(-3,3), AllianceOverrunWP[32][1]+irand(-3,3), AllianceOverrunWP[32][2]);
AddWaypoint( 8, AllianceOverrunWP[31][0]+irand(-3,3), AllianceOverrunWP[31][1]+irand(-3,3), AllianceOverrunWP[31][2]);
AddWaypoint( 9, AllianceOverrunWP[30][0]+irand(-3,3), AllianceOverrunWP[30][1]+irand(-3,3), AllianceOverrunWP[30][2]);
AddWaypoint(10, AllianceOverrunWP[29][0]+irand(-3,3), AllianceOverrunWP[29][1]+irand(-3,3), AllianceOverrunWP[29][2]);
AddWaypoint(11, AllianceOverrunWP[36][0]+irand(-3,3), AllianceOverrunWP[36][1]+irand(-3,3), AllianceOverrunWP[36][2]);
AddWaypoint(12, AllianceOverrunWP[37][0]+irand(-3,3), AllianceOverrunWP[37][1]+irand(-3,3), AllianceOverrunWP[37][2]);
AddWaypoint(13, AllianceOverrunWP[38][0]+irand(-3,3), AllianceOverrunWP[38][1]+irand(-3,3), AllianceOverrunWP[38][2]);
AddWaypoint(14, AllianceOverrunWP[39][0]+irand(-3,3), AllianceOverrunWP[39][1]+irand(-3,3), AllianceOverrunWP[39][2]);
AddWaypoint(15, AllianceOverrunWP[40][0]+irand(-3,3), AllianceOverrunWP[40][1]+irand(-3,3), AllianceOverrunWP[40][2]);
AddWaypoint(16, AllianceOverrunWP[41][0]+irand(-3,3), AllianceOverrunWP[41][1]+irand(-3,3), AllianceOverrunWP[41][2]);
AddWaypoint(17, AllianceOverrunWP[42][0]+irand(-3,3), AllianceOverrunWP[42][1]+irand(-3,3), AllianceOverrunWP[42][2]);
AddWaypoint(18, AllianceOverrunWP[44][0]+irand(-3,3), AllianceOverrunWP[44][1]+irand(-3,3), AllianceOverrunWP[44][2]);
m_creature->SetHomePosition(AllianceOverrunWP[44][0]+irand(-3,3), AllianceOverrunWP[44][1]+irand(-3,3), AllianceOverrunWP[44][2],0);
SetDespawnAtEnd(false);
LastOverronPos = 18;
Start(true, true, true);
break;
default:
AddWaypoint( 4, AllianceOverrunWP[35][0]+irand(-3,3), AllianceOverrunWP[35][1]+irand(-3,3), AllianceOverrunWP[35][2]);
AddWaypoint( 5, AllianceOverrunWP[34][0]+irand(-3,3), AllianceOverrunWP[34][1]+irand(-3,3), AllianceOverrunWP[34][2]);
AddWaypoint( 6, AllianceOverrunWP[33][0]+irand(-3,3), AllianceOverrunWP[33][1]+irand(-3,3), AllianceOverrunWP[33][2]);
AddWaypoint( 7, AllianceOverrunWP[32][0]+irand(-3,3), AllianceOverrunWP[32][1]+irand(-3,3), AllianceOverrunWP[32][2]);
AddWaypoint( 8, AllianceOverrunWP[31][0]+irand(-3,3), AllianceOverrunWP[31][1]+irand(-3,3), AllianceOverrunWP[31][2]);
AddWaypoint( 9, AllianceOverrunWP[30][0]+irand(-3,3), AllianceOverrunWP[30][1]+irand(-3,3), AllianceOverrunWP[30][2]);
AddWaypoint(10, AllianceOverrunWP[29][0]+irand(-3,3), AllianceOverrunWP[29][1]+irand(-3,3), AllianceOverrunWP[29][2]);
AddWaypoint(11, AllianceOverrunWP[28][0]+irand(-3,3), AllianceOverrunWP[28][1]+irand(-3,3), AllianceOverrunWP[28][2]);
AddWaypoint(12, AllianceOverrunWP[27][0]+irand(-3,3), AllianceOverrunWP[27][1]+irand(-3,3), AllianceOverrunWP[27][2]);
AddWaypoint(13, AllianceOverrunWP[26][0]+irand(-3,3), AllianceOverrunWP[26][1]+irand(-3,3), AllianceOverrunWP[26][2]);
AddWaypoint(14, AllianceOverrunWP[25][0]+irand(-3,3), AllianceOverrunWP[25][1]+irand(-3,3), AllianceOverrunWP[25][2]);
AddWaypoint(15, AllianceOverrunWP[24][0]+irand(-3,3), AllianceOverrunWP[24][1]+irand(-3,3), AllianceOverrunWP[24][2]);
AddWaypoint(16, AllianceOverrunWP[23][0]+irand(-3,3), AllianceOverrunWP[23][1]+irand(-3,3), AllianceOverrunWP[23][2]);
AddWaypoint(17, AllianceOverrunWP[22][0]+irand(-3,3), AllianceOverrunWP[22][1]+irand(-3,3), AllianceOverrunWP[22][2]);
//m_creature->SetHomePosition(AllianceOverrunWP[0][0]+irand(-3,3), AllianceOverrunWP[0][1]+irand(-3,3), AllianceOverrunWP[0][2],0);
SetDespawnAtEnd(true);
LastOverronPos = 17;
Start(true, true, true);
break;
}
}
if(m_creature->GetEntry() == GHOUL) if(m_creature->GetEntry() == GHOUL)
{ {
switch(OverrunType)//0-19 ghouls, 20-24 abominations, 25-29 gargoyles for(uint8 i = 0; i < 4; i++)
AddWaypoint(i, AllianceWPs[i][0]+irand(-3,3), AllianceWPs[i][1]+irand(-3,3), AllianceWPs[i][2]);
switch(OverrunType)
{ {
case 0: case 0:
AddWaypoint(4, AllianceOverrunWP[1][0]+irand(-3,3), AllianceOverrunWP[1][1]+irand(-3,3), AllianceOverrunWP[1][2]); AddWaypoint(4, AllianceOverrunWP[1][0]+irand(-3,3), AllianceOverrunWP[1][1]+irand(-3,3), AllianceOverrunWP[1][2]);
@@ -252,81 +371,90 @@ void hyjal_trashAI::UpdateAI(const uint32 diff)
Start(true, true, true); Start(true, true, true);
break; break;
} }
}
}
if(faction == 1)
{
if(m_creature->GetEntry() == GHOUL)
{
for(uint8 i = 0; i < 6; i++)
AddWaypoint(i, HordeWPs[i][0]+irand(-3,3), HordeWPs[i][1]+irand(-3,3), HordeWPs[i][2]);
switch(OverrunType)
{
case 0:
AddWaypoint( 5, HordeOverrunWP[16][0]+irand(-10,10), HordeOverrunWP[16][1]+irand(-10,10), HordeOverrunWP[16][2]);
AddWaypoint( 6, HordeOverrunWP[17][0]+irand(-10,10), HordeOverrunWP[17][1]+irand(-10,10), HordeOverrunWP[17][2]);
AddWaypoint( 7, HordeOverrunWP[18][0], HordeOverrunWP[18][1], HordeOverrunWP[18][2]);
AddWaypoint( 8, HordeOverrunWP[19][0], HordeOverrunWP[19][1], HordeOverrunWP[19][2]);
m_creature->SetHomePosition(HordeOverrunWP[19][0], HordeOverrunWP[19][1], HordeOverrunWP[19][2],0);
SetDespawnAtEnd(false);
LastOverronPos = 8;
Start(true, true, true);
break;
case 1:
AddWaypoint( 5, HordeOverrunWP[16][0]+irand(-10,10), HordeOverrunWP[16][1]+irand(-10,10), HordeOverrunWP[16][2]);
AddWaypoint( 6, HordeOverrunWP[17][0]+irand(-10,10), HordeOverrunWP[17][1]+irand(-10,10), HordeOverrunWP[17][2]);
AddWaypoint( 7, HordeOverrunWP[18][0], HordeOverrunWP[18][1], HordeOverrunWP[18][2]);
AddWaypoint( 8, HordeOverrunWP[20][0], HordeOverrunWP[20][1], HordeOverrunWP[20][2]);
m_creature->SetHomePosition(HordeOverrunWP[20][0], HordeOverrunWP[20][1], HordeOverrunWP[20][2],0);
SetDespawnAtEnd(false);
LastOverronPos = 8;
Start(true, true, true);
break;
default:
AddWaypoint( 5, HordeOverrunWP[0][0]+irand(-10,10), HordeOverrunWP[0][1]+irand(-10,10), HordeOverrunWP[0][2]);
AddWaypoint( 6, HordeOverrunWP[1][0]+irand(-10,10), HordeOverrunWP[1][1]+irand(-10,10), HordeOverrunWP[1][2]);
AddWaypoint( 7, HordeOverrunWP[2][0]+irand(-10,10), HordeOverrunWP[2][1]+irand(-10,10), HordeOverrunWP[2][2]);
AddWaypoint( 8, HordeOverrunWP[3][0]+irand(-10,10), HordeOverrunWP[3][1]+irand(-10,10), HordeOverrunWP[3][2]);
AddWaypoint( 9, HordeOverrunWP[4][0]+irand(-10,10), HordeOverrunWP[4][1]+irand(-10,10), HordeOverrunWP[4][2]);
AddWaypoint(10, HordeOverrunWP[5][0]+irand(-10,10), HordeOverrunWP[5][1]+irand(-10,10), HordeOverrunWP[5][2]);
AddWaypoint(11, HordeOverrunWP[6][0]+irand(-10,10), HordeOverrunWP[6][1]+irand(-10,10), HordeOverrunWP[6][2]);
AddWaypoint(12, HordeOverrunWP[7][0]+irand(-10,10), HordeOverrunWP[7][1]+irand(-10,10), HordeOverrunWP[7][2]);
AddWaypoint(13, HordeOverrunWP[8][0]+irand(-10,10), HordeOverrunWP[8][1]+irand(-10,10), HordeOverrunWP[8][2]);
AddWaypoint(14, HordeOverrunWP[9][0]+irand(-10,10), HordeOverrunWP[9][1]+irand(-10,10), HordeOverrunWP[9][2]);
AddWaypoint(15, HordeOverrunWP[10][0]+irand(-10,10), HordeOverrunWP[10][1]+irand(-10,10), HordeOverrunWP[10][2]);
AddWaypoint(16, HordeOverrunWP[11][0]+irand(-10,10), HordeOverrunWP[11][1]+irand(-10,10), HordeOverrunWP[11][2]);
AddWaypoint(17, HordeOverrunWP[12][0]+irand(-10,10), HordeOverrunWP[12][1]+irand(-10,10), HordeOverrunWP[12][2]);
AddWaypoint(18, HordeOverrunWP[13][0]+irand(-10,10), HordeOverrunWP[13][1]+irand(-10,10), HordeOverrunWP[13][2]);
AddWaypoint(19, HordeOverrunWP[14][0]+irand(-10,10), HordeOverrunWP[14][1]+irand(-10,10), HordeOverrunWP[14][2]);
AddWaypoint(20, HordeOverrunWP[15][0]+irand(-10,10), HordeOverrunWP[15][1]+irand(-10,10), HordeOverrunWP[15][2]);
//m_creature->SetHomePosition(AllianceOverrunWP[2][0]+irand(-10,10), AllianceOverrunWP[2][1]+irand(-10,10), AllianceOverrunWP[2][2],0);
SetDespawnAtEnd(true);
LastOverronPos = 20;
Start(true, true, true);
break;
}
}
if(m_creature->GetEntry() == ABOMINATION)
{
for(uint8 i = 0; i < 6; i++)
AddWaypoint(i, HordeWPs[i][0]+irand(-10,10), HordeWPs[i][1]+irand(-10,10), HordeWPs[i][2]);
switch(OverrunType)
{
default:
AddWaypoint( 5, HordeOverrunWP[0][0]+irand(-10,10), HordeOverrunWP[0][1]+irand(-10,10), HordeOverrunWP[0][2]);
AddWaypoint( 6, HordeOverrunWP[1][0]+irand(-10,10), HordeOverrunWP[1][1]+irand(-10,10), HordeOverrunWP[1][2]);
AddWaypoint( 7, HordeOverrunWP[2][0]+irand(-10,10), HordeOverrunWP[2][1]+irand(-10,10), HordeOverrunWP[2][2]);
AddWaypoint( 8, HordeOverrunWP[3][0]+irand(-10,10), HordeOverrunWP[3][1]+irand(-10,10), HordeOverrunWP[3][2]);
AddWaypoint( 9, HordeOverrunWP[4][0]+irand(-10,10), HordeOverrunWP[4][1]+irand(-10,10), HordeOverrunWP[4][2]);
AddWaypoint(10, HordeOverrunWP[5][0]+irand(-10,10), HordeOverrunWP[5][1]+irand(-10,10), HordeOverrunWP[5][2]);
AddWaypoint(11, HordeOverrunWP[6][0]+irand(-10,10), HordeOverrunWP[6][1]+irand(-10,10), HordeOverrunWP[6][2]);
AddWaypoint(12, HordeOverrunWP[7][0]+irand(-10,10), HordeOverrunWP[7][1]+irand(-10,10), HordeOverrunWP[7][2]);
AddWaypoint(13, HordeOverrunWP[8][0]+irand(-10,10), HordeOverrunWP[8][1]+irand(-10,10), HordeOverrunWP[8][2]);
AddWaypoint(14, HordeOverrunWP[9][0]+irand(-10,10), HordeOverrunWP[9][1]+irand(-10,10), HordeOverrunWP[9][2]);
AddWaypoint(15, HordeOverrunWP[10][0]+irand(-10,10), HordeOverrunWP[10][1]+irand(-10,10), HordeOverrunWP[10][2]);
AddWaypoint(16, HordeOverrunWP[11][0]+irand(-10,10), HordeOverrunWP[11][1]+irand(-10,10), HordeOverrunWP[11][2]);
AddWaypoint(17, HordeOverrunWP[12][0]+irand(-10,10), HordeOverrunWP[12][1]+irand(-10,10), HordeOverrunWP[12][2]);
AddWaypoint(18, HordeOverrunWP[13][0]+irand(-10,10), HordeOverrunWP[13][1]+irand(-10,10), HordeOverrunWP[13][2]);
AddWaypoint(19, HordeOverrunWP[14][0]+irand(-10,10), HordeOverrunWP[14][1]+irand(-10,10), HordeOverrunWP[14][2]);
AddWaypoint(20, HordeOverrunWP[15][0]+irand(-10,10), HordeOverrunWP[15][1]+irand(-10,10), HordeOverrunWP[15][2]);
//m_creature->SetHomePosition(AllianceOverrunWP[2][0]+irand(-10,10), AllianceOverrunWP[2][1]+irand(-10,10), AllianceOverrunWP[2][2],0);
SetDespawnAtEnd(true);
LastOverronPos = 20;
Start(true, true, true);
break;
}
} }
//}else if(faction == 1 && m_creature->GetEntry() != GARGOYLE){
// switch(OverrunType)
// {
// case 0:break;//infernal
// case 1:
// AddWaypoint(0, HordeOverrunWP[6][0], HordeOverrunWP[6][1], HordeOverrunWP[6][2]);
// AddWaypoint(1, HordeOverrunWP[7][0]+irand(-3,3), HordeOverrunWP[7][1]+irand(-3,3), HordeOverrunWP[7][2]);
// SetDespawnAtEnd(false);
// LastOverronPos = 1;
// Start(true, true, true);
// break;
// case 2:
// AddWaypoint(0, HordeOverrunWP[6][0], HordeOverrunWP[6][1], HordeOverrunWP[6][2]);
// AddWaypoint(1, HordeOverrunWP[7][0]+irand(-3,3), HordeOverrunWP[7][1]+irand(-3,3), HordeOverrunWP[7][2]);
// SetDespawnAtEnd(false);
// LastOverronPos = 1;
// Start(true, true, true);
// break;
// case 3:
// AddWaypoint(0, HordeOverrunWP[8][0], HordeOverrunWP[8][1], HordeOverrunWP[8][2]);
// AddWaypoint(1, HordeOverrunWP[9][0]+irand(-3,3), HordeOverrunWP[9][1]+irand(-3,3), HordeOverrunWP[9][2]);
// SetDespawnAtEnd(false);
// LastOverronPos = 1;
// Start(true, true, true);
// break;
// case 4:
// AddWaypoint(0, HordeOverrunWP[10][0], HordeOverrunWP[10][1], HordeOverrunWP[10][2]);
// AddWaypoint(1, HordeOverrunWP[11][0], HordeOverrunWP[11][1], HordeOverrunWP[11][2]);
// AddWaypoint(2, HordeOverrunWP[12][0], HordeOverrunWP[12][1], HordeOverrunWP[12][2]);
// AddWaypoint(3, HordeOverrunWP[13][0]+irand(-3,3), HordeOverrunWP[13][1]+irand(-3,3), HordeOverrunWP[13][2]);
// SetDespawnAtEnd(false);
// LastOverronPos = 3;
// Start(true, true, true);
// break;
// case 5:
// AddWaypoint(0, HordeOverrunWP[14][0], HordeOverrunWP[14][1], HordeOverrunWP[14][2]);
// AddWaypoint(1, HordeOverrunWP[15][0], HordeOverrunWP[15][1], HordeOverrunWP[15][2]);
// AddWaypoint(2, HordeOverrunWP[16][0]+irand(-3,3), HordeOverrunWP[16][1]+irand(-3,3), HordeOverrunWP[16][2]);
// SetDespawnAtEnd(false);
// LastOverronPos = 2;
// Start(true, true, true);
// break;
// case 6:
// AddWaypoint(0, HordeOverrunWP[17][0], HordeOverrunWP[17][1], HordeOverrunWP[17][2]);
// AddWaypoint(1, HordeOverrunWP[18][0], HordeOverrunWP[18][1], HordeOverrunWP[18][2]);
// AddWaypoint(2, HordeOverrunWP[19][0], HordeOverrunWP[19][1], HordeOverrunWP[19][2]);
// AddWaypoint(3, HordeOverrunWP[20][0], HordeOverrunWP[20][1], HordeOverrunWP[20][2]);
// AddWaypoint(4, HordeOverrunWP[21][0], HordeOverrunWP[21][1], HordeOverrunWP[21][2]);
// AddWaypoint(5, HordeOverrunWP[22][0], HordeOverrunWP[22][1], HordeOverrunWP[22][2]);
// AddWaypoint(6, HordeOverrunWP[23][0], HordeOverrunWP[23][1], HordeOverrunWP[23][2]);
// AddWaypoint(7, HordeOverrunWP[24][0], HordeOverrunWP[24][1], HordeOverrunWP[24][2]);
// AddWaypoint(8, HordeOverrunWP[25][0], HordeOverrunWP[25][1], HordeOverrunWP[25][2]);
// AddWaypoint(9, HordeOverrunWP[26][0]+irand(-3,3), HordeOverrunWP[26][1]+irand(-3,3), HordeOverrunWP[26][2]);
// SetDespawnAtEnd(true);
// LastOverronPos = 9;
// Start(true, true, true);
// break;
// case 7:
// AddWaypoint(0, HordeOverrunWP[27][0], HordeOverrunWP[27][1], HordeOverrunWP[27][2]);
// AddWaypoint(1, HordeOverrunWP[28][0], HordeOverrunWP[28][1], HordeOverrunWP[28][2]);
// AddWaypoint(2, HordeOverrunWP[29][0], HordeOverrunWP[29][1], HordeOverrunWP[29][2]);
// AddWaypoint(3, HordeOverrunWP[30][0], HordeOverrunWP[30][1], HordeOverrunWP[30][2]);
// AddWaypoint(4, HordeOverrunWP[31][0], HordeOverrunWP[31][1], HordeOverrunWP[31][2]);
// AddWaypoint(5, HordeOverrunWP[32][0]+irand(-3,3), HordeOverrunWP[32][1]+irand(-3,3), HordeOverrunWP[32][2]);
// SetDespawnAtEnd(true);
// LastOverronPos = 5;
// Start(true, true, true);
// break;
// }
//}else if(faction == 1 && m_creature->GetEntry() == GARGOYLE){
// AddWaypoint(0, 5536.65+irand(-80,+80), -2710.66+irand(-80,+80), 1504.45+irand(-5,+5));
// SetDespawnAtEnd(false);
// LastOverronPos = 0;
// Start(false, true, true);
} }
} }
} }
@@ -351,6 +479,9 @@ void hyjal_trashAI::JustDied(Unit *victim)
((hyjal_trashAI*)pUnit->AI())->IsOverrun = true; ((hyjal_trashAI*)pUnit->AI())->IsOverrun = true;
((hyjal_trashAI*)pUnit->AI())->OverrunType = OverrunType; ((hyjal_trashAI*)pUnit->AI())->OverrunType = OverrunType;
((hyjal_trashAI*)pUnit->AI())->SetupOverrun = true; ((hyjal_trashAI*)pUnit->AI())->SetupOverrun = true;
((hyjal_trashAI*)pUnit->AI())->DummyTarget[0] = DummyTarget[0];
((hyjal_trashAI*)pUnit->AI())->DummyTarget[1] = DummyTarget[1];
((hyjal_trashAI*)pUnit->AI())->DummyTarget[2] = DummyTarget[2];
pUnit->setActive(true); pUnit->setActive(true);
pUnit->AI()->EnterEvadeMode(); pUnit->AI()->EnterEvadeMode();
} }
@@ -364,7 +495,7 @@ struct mob_giant_infernalAI : public hyjal_trashAI
pInstance = ((ScriptedInstance*)c->GetInstanceData()); pInstance = ((ScriptedInstance*)c->GetInstanceData());
meteor = false;//call once! meteor = false;//call once!
CanMove = false; CanMove = false;
Delay = rand()%10000; Delay = rand()%30000;
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_INVIS); m_creature->SetUInt32Value(UNIT_FIELD_DISPLAYID, MODEL_INVIS);
@@ -402,19 +533,6 @@ struct mob_giant_infernalAI : public hyjal_trashAI
if (target && target->isAlive()) if (target && target->isAlive())
m_creature->AddThreat(target,0.0); m_creature->AddThreat(target,0.0);
} }
}
if (i == LastOverronPos && IsOverrun)
{
Creature* pUnit = m_creature->SummonCreature(17931, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 2*60*1000);
if(pUnit)
{
pUnit->SetVisibility(VISIBILITY_OFF);
pUnit->SetMaxHealth(10000000);
pUnit->SetHealth(10000000);
pUnit->setFaction(17772);
pUnit->Attack(m_creature, true);
m_creature->AddThreat(pUnit,0);
}
} }
} }
@@ -542,15 +660,29 @@ struct mob_abominationAI : public hyjal_trashAI
} }
if (i == LastOverronPos && IsOverrun) if (i == LastOverronPos && IsOverrun)
{ {
Creature* pUnit = m_creature->SummonCreature(17931, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 2*60*1000); if(faction == 0 && LastOverronPos == 17)//alliance round
if(pUnit)
{ {
pUnit->SetVisibility(VISIBILITY_OFF); Creature* pUnit = m_creature->SummonCreature(m_creature->GetEntry(),4928.48+irand(-10,10), -1526.38+irand(-10,10), 1326.83,0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
pUnit->SetMaxHealth(10000000); if(pUnit)
pUnit->SetHealth(10000000); {
pUnit->setFaction(17772); ((hyjal_trashAI*)pUnit->AI())->faction = faction;
pUnit->Attack(m_creature, true); ((hyjal_trashAI*)pUnit->AI())->IsOverrun = true;
m_creature->AddThreat(pUnit,0); ((hyjal_trashAI*)pUnit->AI())->OverrunType = 2;//default
((hyjal_trashAI*)pUnit->AI())->SetupOverrun = false;
pUnit->setActive(true);
}
}
if(faction == 1 && LastOverronPos == 20)//horde round
{
Creature* pUnit = m_creature->SummonCreature(m_creature->GetEntry(),5458.01+irand(-10,10),-2340.27+irand(-10,10),1459.60,0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if(pUnit)
{
((hyjal_trashAI*)pUnit->AI())->faction = faction;
((hyjal_trashAI*)pUnit->AI())->IsOverrun = true;
((hyjal_trashAI*)pUnit->AI())->OverrunType = 10;//default
((hyjal_trashAI*)pUnit->AI())->SetupOverrun = false;
pUnit->setActive(true);
}
} }
} }
} }
@@ -619,9 +751,13 @@ struct mob_ghoulAI : public hyjal_trashAI
bool go; bool go;
uint32 FrenzyTimer; uint32 FrenzyTimer;
uint32 pos; uint32 pos;
uint32 MoveTimer;
bool RandomMove;
void Reset() void Reset()
{ {
FrenzyTimer = 5000+rand()%5000; FrenzyTimer = 5000+rand()%5000;
MoveTimer = 2000;
RandomMove = false;
} }
void WaypointReached(uint32 i) void WaypointReached(uint32 i)
@@ -639,18 +775,13 @@ struct mob_ghoulAI : public hyjal_trashAI
if (target && target->isAlive()) if (target && target->isAlive())
m_creature->AddThreat(target,0.0); m_creature->AddThreat(target,0.0);
} }
}
if(faction == 0)//alliance round
{
} }
if (i == LastOverronPos && IsOverrun) if (i == LastOverronPos && IsOverrun)
{ {
m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACKUNARMED); m_creature->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACKUNARMED);
//m_creature->SetHomePosition(m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation());
if(faction == 0 && LastOverronPos == 17)//alliance round if(faction == 0 && LastOverronPos == 17)//alliance round
{ {
Creature* pUnit = m_creature->SummonCreature(m_creature->GetEntry(),4928.48+irand(-10,10), -1526.38+irand(-10,10), 1326.83+irand(-10,10),0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000); Creature* pUnit = m_creature->SummonCreature(m_creature->GetEntry(),4928.48+irand(-10,10), -1526.38+irand(-10,10), 1326.83,0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if(pUnit) if(pUnit)
{ {
((hyjal_trashAI*)pUnit->AI())->faction = faction; ((hyjal_trashAI*)pUnit->AI())->faction = faction;
@@ -660,6 +791,18 @@ struct mob_ghoulAI : public hyjal_trashAI
pUnit->setActive(true); pUnit->setActive(true);
} }
} }
if(faction == 1 && LastOverronPos == 20)//horde round
{
Creature* pUnit = m_creature->SummonCreature(m_creature->GetEntry(),5458.01+irand(-10,10), -2340.27+irand(-10,10), 1459.60,0, TEMPSUMMON_MANUAL_DESPAWN, 2*60*1000);
if(pUnit)
{
((hyjal_trashAI*)pUnit->AI())->faction = faction;
((hyjal_trashAI*)pUnit->AI())->IsOverrun = true;
((hyjal_trashAI*)pUnit->AI())->OverrunType = 10;//default
((hyjal_trashAI*)pUnit->AI())->SetupOverrun = false;
pUnit->setActive(true);
}
}
} }
} }
@@ -697,7 +840,7 @@ struct mob_ghoulAI : public hyjal_trashAI
{ {
DoCast(m_creature,SPELL_FRENZY); DoCast(m_creature,SPELL_FRENZY);
FrenzyTimer = 15000+rand()%15000; FrenzyTimer = 15000+rand()%15000;
}else FrenzyTimer -= diff; }else FrenzyTimer -= diff;
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
@@ -1275,6 +1418,7 @@ struct mob_gargoyleAI : public hyjal_trashAI
pInstance = ((ScriptedInstance*)c->GetInstanceData()); pInstance = ((ScriptedInstance*)c->GetInstanceData());
go = false; go = false;
pos = 0; pos = 0;
DummyTarget[0] = 0;DummyTarget[1] = 0;DummyTarget[2] = 0;
Reset(); Reset();
} }
@@ -1283,7 +1427,7 @@ struct mob_gargoyleAI : public hyjal_trashAI
uint32 pos; uint32 pos;
uint32 MoveTimer; uint32 MoveTimer;
float Zpos; float Zpos;
bool forcemove; bool forcemove;
void Reset() void Reset()
{ {
@@ -1291,7 +1435,7 @@ struct mob_gargoyleAI : public hyjal_trashAI
Zpos = 10.0; Zpos = 10.0;
StrikeTimer = 2000+rand()%5000; StrikeTimer = 2000+rand()%5000;
MoveTimer = 0; MoveTimer = 0;
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING); m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT + MOVEMENTFLAG_LEVITATING);
} }
void WaypointReached(uint32 i) void WaypointReached(uint32 i)
@@ -1318,14 +1462,12 @@ struct mob_gargoyleAI : public hyjal_trashAI
void JustDied(Unit *victim) void JustDied(Unit *victim)
{ {
if(pInstance && IsEvent)
pInstance->SetData(DATA_TRASH, 0);//signal trash is dead
float x,y,z; float x,y,z;
m_creature->GetPosition(x,y,z); m_creature->GetPosition(x,y,z);
z = m_creature->GetMap()->GetVmapHeight(x, y, z, true); z = m_creature->GetMap()->GetVmapHeight(x, y, z, true);
m_creature->GetMotionMaster()->MovePoint(0,x,y,z); m_creature->GetMotionMaster()->MovePoint(0,x,y,z);
m_creature->Relocate(x,y,z,0); m_creature->Relocate(x,y,z,0);
hyjal_trashAI::JustDied(victim);
} }
void UpdateAI(const uint32 diff) void UpdateAI(const uint32 diff)
@@ -1358,6 +1500,17 @@ struct mob_gargoyleAI : public hyjal_trashAI
} }
} }
} }
if(IsOverrun && !UpdateVictim())
{
if(faction == 0)//alliance
{
if(StrikeTimer<diff)
{
m_creature->CastSpell(DummyTarget[0],DummyTarget[1],DummyTarget[2],SPELL_GARGOYLE_STRIKE,false);
StrikeTimer = 2000+rand()%1000;
}else StrikeTimer -= diff;
}
}
if (!UpdateVictim()) if (!UpdateVictim())
return; return;
if(m_creature->GetDistance(m_creature->getVictim()) >= 20 || forcemove) if(m_creature->GetDistance(m_creature->getVictim()) >= 20 || forcemove)
@@ -5,7 +5,7 @@
#include "def_hyjal.h" #include "def_hyjal.h"
#include "../../../npc/npc_escortAI.h" #include "../../../npc/npc_escortAI.h"
#define MINRAIDDAMAGE 1000000//minimal damage before trash can drop loot and reputation #define MINRAIDDAMAGE 700000//minimal damage before trash can drop loot and reputation, resets if faction leader dies
struct TRINITY_DLL_DECL hyjal_trashAI : public npc_escortAI struct TRINITY_DLL_DECL hyjal_trashAI : public npc_escortAI
{ {
@@ -34,6 +34,7 @@ struct TRINITY_DLL_DECL hyjal_trashAI : public npc_escortAI
uint8 faction; uint8 faction;
bool useFlyPath; bool useFlyPath;
uint32 damageTaken; uint32 damageTaken;
float DummyTarget[3];
//private: //private:
}; };
+2 -1
View File
@@ -40,6 +40,7 @@ ActiveState::Update(Map &m, NGridType &grid, GridInfo & info, const uint32 &x, c
ObjectGridStoper stoper(grid); ObjectGridStoper stoper(grid);
stoper.StopN(); stoper.StopN();
grid.SetGridState(GRID_STATE_IDLE); grid.SetGridState(GRID_STATE_IDLE);
sLog.outDebug("Grid[%u,%u] on map %u moved to IDLE state", x, y, m.GetId());
} }
else else
{ {
@@ -53,7 +54,7 @@ IdleState::Update(Map &m, NGridType &grid, GridInfo &, const uint32 &x, const ui
{ {
m.ResetGridExpiry(grid); m.ResetGridExpiry(grid);
grid.SetGridState(GRID_STATE_REMOVAL); grid.SetGridState(GRID_STATE_REMOVAL);
sLog.outDebug("Grid[%u,%u] on map %u moved to IDLE state", x, y, m.GetId()); sLog.outDebug("Grid[%u,%u] on map %u moved to REMOVAL state", x, y, m.GetId());
} }
void void
+3 -1
View File
@@ -386,6 +386,8 @@ Map::EnsureGridCreated(const GridPair &p)
Guard guard(*this); Guard guard(*this);
if(!getNGrid(p.x_coord, p.y_coord)) if(!getNGrid(p.x_coord, p.y_coord))
{ {
sLog.outDebug("Loading grid[%u,%u] for map %u", p.x_coord, p.y_coord, i_id);
setNGrid(new NGridType(p.x_coord*MAX_NUMBER_OF_GRIDS + p.y_coord, p.x_coord, p.y_coord, i_gridExpiry, sWorld.getConfig(CONFIG_GRID_UNLOAD)), setNGrid(new NGridType(p.x_coord*MAX_NUMBER_OF_GRIDS + p.y_coord, p.x_coord, p.y_coord, i_gridExpiry, sWorld.getConfig(CONFIG_GRID_UNLOAD)),
p.x_coord, p.y_coord); p.x_coord, p.y_coord);
@@ -1113,7 +1115,7 @@ bool Map::UnloadGrid(const uint32 &x, const uint32 &y, bool unloadAll)
if(!unloadAll && ActiveObjectsNearGrid(x, y) ) if(!unloadAll && ActiveObjectsNearGrid(x, y) )
return false; return false;
DEBUG_LOG("Unloading grid[%u,%u] for map %u", x,y, i_id); sLog.outDebug("Unloading grid[%u,%u] for map %u", x,y, i_id);
ObjectGridUnloader unloader(*grid); ObjectGridUnloader unloader(*grid);
+2 -2
View File
@@ -242,7 +242,7 @@ void
MotionMaster::MoveChase(Unit* target, float dist, float angle) MotionMaster::MoveChase(Unit* target, float dist, float angle)
{ {
// ignore movement request if target not exist // ignore movement request if target not exist
if(!target) if(!target || target == i_owner)
return; return;
i_owner->clearUnitState(UNIT_STAT_FOLLOW); i_owner->clearUnitState(UNIT_STAT_FOLLOW);
@@ -268,7 +268,7 @@ void
MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlot slot) MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlot slot)
{ {
// ignore movement request if target not exist // ignore movement request if target not exist
if(!target) if(!target || target == i_owner)
return; return;
i_owner->addUnitState(UNIT_STAT_FOLLOW); i_owner->addUnitState(UNIT_STAT_FOLLOW);
+1
View File
@@ -161,6 +161,7 @@ ObjectMgr::~ObjectMgr()
for (GuildMap::iterator itr = mGuildMap.begin(); itr != mGuildMap.end(); ++itr) for (GuildMap::iterator itr = mGuildMap.begin(); itr != mGuildMap.end(); ++itr)
delete itr->second; delete itr->second;
mGuildMap.clear();
for (CachePlayerInfoMap::iterator itr = m_mPlayerInfoMap.begin(); itr != m_mPlayerInfoMap.end(); ++itr) for (CachePlayerInfoMap::iterator itr = m_mPlayerInfoMap.begin(); itr != m_mPlayerInfoMap.end(); ++itr)
delete itr->second; delete itr->second;
+1 -1
View File
@@ -17987,7 +17987,7 @@ bool Player::canSeeOrDetect(Unit const* u, bool detect, bool inVisibleList, bool
return false; return false;
} }
if(u->GetVisibility() == VISIBILITY_OFF) if(u->GetVisibility() == VISIBILITY_OFF || u->m_invisibilityMask )
{ {
// GMs see any players, not higher GMs and all units // GMs see any players, not higher GMs and all units
if(isGameMaster()) if(isGameMaster())