Darkensand | Дата: Понеділок, 21.02.2011, 04:31 | Сообщение # 1 |
Главный Админ
Лучший из лучших
Группа: Администратор
|
Скрипт на босса: http://ru.wowhead.com/npc=11382 В данный момент скрипт не является 100% рабочим Code //Координаты спавна духов static Coords SpiritSpawns[] = { {}, {-12150.9f, -1956.24f, 133.407f, 2.57835f}, {-12157.1f, -1972.78f, 133.947f, 2.64903f}, {-12172.3f, -1982.63f, 134.061f, 1.48664f}, {-12194.0f, -1979.54f, 132.194f, 1.45916f}, {-12211.3f, -1978.49f, 133.580f, 1.35705f}, {-12228.4f, -1977.10f, 132.728f, 1.25495f}, {-12250.0f, -1964.78f, 135.066f, 0.92901f}, {-12264.0f, -1953.08f, 134.072f, 0.62663f}, {-12289.0f, -1924.00f, 132.620f, 5.37829f}, {-12267.3f, -1902.26f, 131.328f, 5.32724f}, {-12255.3f, -1893.53f, 134.026f, 5.06413f}, {-12229.9f, -1891.39f, 134.704f, 4.40047f}, {-12215.9f, -1889.09f, 137.273f, 4.70285f}, {-12200.5f, -1890.69f, 135.777f, 4.84422f}, {-12186.0f, -1890.12f, 134.261f, 4.36513f}, {-12246.3f, -1890.09f, 135.475f, 4.73427f}, {-12170.7f, -1894.85f, 133.852f, 3.51690f}, {-12279.0f, -1931.92f, 136.130f, 0.04151f}, {-12266.1f, -1940.72f, 132.606f, 0.70910f} };
//основной скрипт на босса
class BloodlordMandokirAI : public MoonScriptBossAI { UnitArray duh;
MOONSCRIPT_FACTORY_FUNCTION(BloodlordMandokirAI, MoonScriptBossAI); BloodlordMandokirAI(Creature* pCreature) : MoonScriptBossAI(pCreature) { AddSpell(MANDOKIR_CLEAVE, Target_Current, 75, 0, 7); AddSpell(MANDOKIR_WHIRLWIND, Target_Current, 90, 0, 18);
//эмоции и озвучка AddEmote(Event_OnCombatStart, "I'll feed your souls to Hakkar himself!", Text_Yell, 8413);
mount = AddSpell(MANDOKIR_MOUNT, Target_Self, 0, 0, 0);
mortalstrike = AddSpell(MANDOKIR_MORTAL_STRIKE, Target_Current, 0, 0, 0);
enrage = AddSpell(MANDOKIR_ENRAGE, Target_Self, 0, 0, 0);
}
void OnCombatStart(Unit* pTarget) { RemoveAura(23243); for (uint i=1;i<20;i++) { MoonScriptCreatureAI *spirit; spirit = SpawnCreature(CHAINED_SPIRIT, SpiritSpawns[i].mX, SpiritSpawns[i].mY, SpiritSpawns[i].mZ, SpiritSpawns[i].mO); if(spirit) duh.push_back(TO_UNIT(spirit)); } MoonScriptCreatureAI *Ohgan = NULL;
Ohgan = SpawnCreature(ZG_OHGAN, (_unit->GetPositionX()+RandomFloat(2)-2), (_unit->GetPositionY()+RandomFloat(2)-2), _unit->GetPositionZ(), _unit->GetOrientation(), true);
MortalStrikeTimer = AddTimer(15000);
ParentClass::OnCombatStart( pTarget ); }
void OnCombatStop(Unit* pTarget) { for(UnitArray::iterator itr = duh.begin(); itr!=duh.end(); ++itr) if ((*itr)!=NULL && (*itr)->isAlive() && (*itr)->GetEntry() == CHAINED_SPIRIT) (*itr)->Delete(); duh.clear(); Ohgan = (MoonScriptBossAI*)GetNearestCreature(ZG_OHGAN);
if(Ohgan != NULL) Ohgan->Despawn(2000, 0);
CastSpell(mount);
ParentClass::OnCombatStop(pTarget); }
void OnDied(Unit* pKiller) { ParentClass::OnDied(pKiller); }
void OnTargetDied(Unit *pTarget) { float range; Unit *Spirit; for(UnitArray::iterator itr=duh.begin(); itr!=duh.end(); ++itr) { if((*itr)!=NULL && (*itr)->GetEntry() == CHAINED_SPIRIT && (*itr)->isAlive()) if(range > (*itr)->CalcDistance(TO_OBJECT(pTarget))) { range = (*itr)->CalcDistance(TO_OBJECT(pTarget)); Spirit = TO_UNIT(*itr); } }
if(RandomUInt(100) < 10) if(pTarget!=NULL && pTarget->IsPlayer() && !pTarget->isAlive()) Spirit->CastSpell(pTarget, SPIRIT_REVIVE, false); }
void AIUpdate() { if(_unit->IsPlayer() && _unit->GetHealthPct() <= 50) { if(IsTimerFinished(MortalStrikeTimer)) { CastSpell(mortalstrike); ResetTimer(MortalStrikeTimer, 15000); } }
ParentClass::AIUpdate(); }
SpellDesc* mount; SpellDesc* mortalstrike; SpellDesc* enrage; int32 MortalStrikeTimer; MoonScriptBossAI* Ohgan; };
// Скрипт на Раптора class OhganAI : public MoonScriptCreatureAI { MOONSCRIPT_FACTORY_FUNCTION(OhganAI, MoonScriptCreatureAI); OhganAI(Creature *pCreature) : MoonScriptCreatureAI(pCreature) { AddSpell(OHGAN_SUNDERARMOR, Target_Current, 100, 0, 12);
}
void OnDied(Unit* pKiller) {
//Mandokir = NULL; Mandokir = (MoonScriptBossAI*)GetNearestCreature(ZG_MANDOKIR);
if(Mandokir && Mandokir->IsAlive() ) { for (unordered_set<Player *>::iterator itr = Mandokir->GetUnit()->GetInRangePlayerSetBegin(); itr != Mandokir->GetUnit()->GetInRangePlayerSetEnd(); ++itr) { Player *pPlayer = TO_PLAYER(*itr); pPlayer->GetSession()->SystemMessage("Bloodlord Mandokir goes into a rage after seeing his raptor fall in battle!"); } Mandokir->CastSpell(enrage); } ParentClass::OnDied(pKiller); } MoonScriptBossAI* Mandokir; SpellDesc* enrage; };
void SetupZulGurub(ScriptMgr * mgr) {
mgr->register_creature_script(ZG_MANDOKIR, &BloodlordMandokirAI::Create); mgr->register_creature_script(ZG_OHGAN, &OhganAI::Create); }
|
|
|
|