• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Форум » ArcEmu » ArcEmu » С++ скрипт Мандокир Повелитель Крови
С++ скрипт Мандокир Повелитель Крови
GiNeX
╚►Gm WoWFuN.ru◄╗
Скрипт на босса: 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.
Сообщение # 1 отредактировано Infernoss - Вторник, 14.09.2010, 11:46
Spy[0]cor
Скаут
И что с ним делать? куда тебе его вставить?

с Subversion не встречался? а хоть знаешь, что такое С++,&
как на счёт патча в стиле SVN?

или источник, откуда скопирован пост

Сообщение # 2 отредактировано Spy[0]cor - Суббота, 02.10.2010, 05:48
kampeador
Центурион
Мой старый скрипт...
И этот еще...
http://wowjp.net/forum/111-92004-1

Ни автора, ни источника... Вот из-за таких копипастов больше скрипты свои не выкладываю.

Сообщение # 3 написано 05.11.2010 в 22:50
Форум » ArcEmu » ArcEmu » С++ скрипт Мандокир Повелитель Крови
  • Страница 1 из 1
  • 1
Поиск: