|
|
Модератор форума: Dimitro |
Форум ArcEmu ArcEmu С++ скрипт Мандокир Повелитель Крови |
С++ скрипт Мандокир Повелитель Крови |
Скрипт на босса: http://ru.wowhead.com/npc=11382
В данный момент скрипт не является 100% рабочим по сравнению с официальным сервером,будет обновляться Code enum MandokirNPC { // ID босса Bloodlord Mandokir ZG_MANDOKIR = 11382, //ID раптора ZG_OHGAN = 14988, //ID духа CHAINED_SPIRIT = 15117 }; enum MandokirSpells { //все заклинания босса Bloodlord Mandokir MANDOKIR_CHARGE = 24315, MANDOKIR_CLEAVE = 20691, MANDOKIR_FEAR = 29321, //заклинание страха, в версиях игры до 3.0.1 босс использовал спелл, если в ближнем бою его били три и более игроков MANDOKIR_WHIRLWIND = 24236, MANDOKIR_MORTAL_STRIKE = 24573, MANDOKIR_ENRAGE = 23537, MANDOKIR_WATCH = 24314, MANDOKIR_SUMMON_PLAYER = 25104, MANDOKIR_LEVEL_UP = 24312, //спелл маунта у босса MANDOKIR_MOUNT = 23243, //этот спелл брался из предмета, который визульно призывает такого же раптора //Способность резать броню у раптора OHGAN_SUNDERARMOR = 24317, //Заклинание воскрешения у духов SPIRIT_REVIVE = 24341, }; //Координаты спавна духов 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); }
Помогаю ставить сервера Trinity, Mangos,ArcEmu.
|
| |||
| |||