Здравствуйте.Так как к сожалению эвент Шахматы в рейде Каражан неработают,решил маленькую альтернативу предложить.Признаюсь сразу честно,взял скрипт
https://github.com/scriptdev2/script...the_pallid.cpp
и решил переделать его.В Ядре и в СкриптДев2 я документацию прочел,стало уже понятнее.Копирайты сохранены,я уважаю чужое творение.
Мне непонятен только один метод это DoUseOrButton,в скрипте инстанса это есть,а для чтобы существо открывало эту дверь после своего уничтожения,примеров ненашел к сожалению.Прошу подсказать,где ошибка.
Код:
/* Copyright (C) 2006 - 2013 ScriptDev2 <http://www.scriptdev2.com/>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* ScriptData
SDName: Boss_Karazhan_Warden
SD%Complete:
SDComment:
SDCategory: Karazhan
EndScriptData */
#include "precompiled.h"
#include "karazhan.h"
enum
{
SPELL_SHADOW_BOLT = 30055,
SPELL_DRAIN_LIFE = 17238,
SPELL_DRAIN_MANA = 17243,
SPELL_ICE_TOMB = 16869,
SPELL_FRENZY = 32965,
GO_GAMESMANS_HALL_EXIT_DOOR = 184277,
};
struct MANGOS_DLL_DECL boss_karazhan_wardenAI : public ScriptedAI
{
boss_karazhan_wardenAI(Creature* pCreature) : ScriptedAI(pCreature) { Reset(); }
uint32 m_uiDrainManaTimer;
uint32 m_uiShadowboltTimer;
uint32 m_uiIceTombTimer;
uint32 m_uiDrainLifeTimer;
uint32 m_uiBerserkTimer;
void Reset() override
{
m_uiDrainManaTimer = 30000;
m_uiShadowboltTimer = 0;
m_uiIceTombTimer = 15000;
m_uiDrainLifeTimer = 20000;
m_uiFrenzyTimer = 60000;
}
void JustDied(Unit* /*pKiller*/) override
{
if (m_pInstance)
m_pInstance->SetData(TYPE_CHESS, DONE);
}
void UpdateAI(const uint32 uiDiff) override
{
if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
return;
// Shadowbolt
if (m_uiShadowboltTimer < uiDiff)
{
if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0))
{
if (DoCastSpellIfCan(pTarget, SPELL_SHADOW_BOLT) == CAST_OK)
m_uiShadowTimer = urand(1000, 2000);
}
}
else
m_uiShadowTimer -= uiDiff;
// IceTomb
if (m_uiIceTombTimer < uiDiff)
{
if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0))
{
if (DoCastSpellIfCan(pTarget, SPELL_ICE_TOMB) == CAST_OK)
m_uiIceTombTimer = urand(15000, 20000);
}
}
else
m_uiIceTombTimer -= uiDiff;
// Drain Life
if (m_uiDrainLifeTimer < uiDiff)
{
if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0))
{
if (DoCastSpellIfCan(pTarget, SPELL_DRAIN_LIFE) == CAST_OK)
m_uiDrainLifeTimer = urand(15000, 20000);
}
}
else
m_uiDrainLifeTimer -= uiDiff;
// Drain mana
if (m_uiDrainManaTimer < uiDiff)
{
if (Unit* pTarget = m_creature->SelectAttackingTarget(ATTACKING_TARGET_RANDOM, 0, SPELL_DRAIN_MANA, SELECT_FLAG_POWER_MANA))
{
if (DoCastSpellIfCan(pTarget, SPELL_DRAIN_MANA) == CAST_OK)
m_uiDrainManaTimer = urand(20000, 30000);
}
}
else
m_uiDrainManaTimer -= uiDiff;
if (m_uiFrenzyTimer < uiDiff)
{
if (DoCastSpellIfCan(m_creature, SPELL_FRENZY) == CAST_OK)
m_uiFrenzyTimer = urand(55000, 60000);
}
else
m_uiFrenzyTimer -= uiDiff;
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI_boss_karazhan_warden(Creature* pCreature)
{
return new boss_karazhan_wardenAI(pCreature);
}
void AddSC_boss_karazhan_warden()
{
Script* pNewScript;
pNewScript = new Script;
pNewScript->Name = "boss_karazhan_warden";
pNewScript->GetAI = &GetAI_boss_karazhan_warden;
pNewScript->RegisterSelf();
}
Заранее спасибо.