|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
Корзина Глупые, устаревшие, неактуальные темы будут тут. Сюда сливается весь треш форума. Если ваш пост оказался здесь, подумайте - стоит ли еще раз писать? |
|
Опции темы | Поиск в этой теме | Опции просмотра |
21.02.2013, 15:39 | #1 |
Пользователь
Регистрация: 26.09.2012
Сообщений: 93
Сказал(а) спасибо: 4
Поблагодарили 4 раз(а) в 3 сообщениях
|
Хранитель Каражана.
Здравствуйте.Так как к сожалению эвент Шахматы в рейде Каражан неработают,решил маленькую альтернативу предложить.Признаюсь сразу честно,взял скрипт 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(); }
__________________
So foolish. Последний раз редактировалось Karazhan; 11.04.2013 в 18:28. Причина: теги кода |
21.02.2013, 16:49 | #2 |
MaNGOS Dev
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
|
GO_GAMESMANS_HALL_EXIT_DOOR должа быть зарегистрирована в скрите на OnObjectCreate, только тогда, насколько я помню, получится таким образом к ней обратиться
|
21.02.2013, 17:05 | #3 |
Пользователь
Регистрация: 26.09.2012
Сообщений: 93
Сказал(а) спасибо: 4
Поблагодарили 4 раз(а) в 3 сообщениях
|
Хм я вот посмотрел скрипт,https://github.com/scriptdev2/script...n/karazhan.cpp
там есть строчки,конкретно npc_barnes- m_pInstance->DoUseDoorOrButton(GO_STAGE_DOOR_LEFT); break; значит мне надо сделать также?Break-оператор,который выключает действие,значит Барнс больше не возвращается к этому действию насколько я понимаю.Наверное стоит сделать так: Код:
void JustDied(Unit* /*pKiller*/) override { m_pInstance->DoUseDoorOrButton(GO_GAMESMANS_HALL_EXIT_DOOR); } Данная дверь зарегистрирована.Но добавлять этот хедер без регистрации в скрипте инстанса,смысла нет наверное.Но спасибо за комментарий. void OnObjectCreate(GameObject* pGo) override;в хедере Karazhan.h тоже присуствует.
__________________
So foolish. Последний раз редактировалось Karazhan; 21.02.2013 в 17:07. |
07.04.2013, 22:37 | #4 |
Пользователь
Регистрация: 26.09.2012
Сообщений: 93
Сказал(а) спасибо: 4
Поблагодарили 4 раз(а) в 3 сообщениях
|
Вообщем внимательно посмотрел еще разок.Нашел интересную запись.
Код:
case TYPE_CHESS: if (uiData == DONE) { DoUseDoorOrButton(GO_GAMESMANS_HALL_EXIT_DOOR); DoRespawnGameObject(GO_DUST_COVERED_CHEST, DAY); } m_auiEncounter[uiType] = uiData; break; Можно сделать так: void JustDied(Unit* /*pKiller*/) override { if (m_pInstance) m_pInstance->SetData(TYPE_CHESS, DONE); }
__________________
So foolish. Последний раз редактировалось Karazhan; 11.04.2013 в 18:28. |
21.01.2014, 06:19 | #5 | |
Пользователь
Регистрация: 26.09.2012
Сообщений: 93
Сказал(а) спасибо: 4
Поблагодарили 4 раз(а) в 3 сообщениях
|
Цитата:
P.S: Тема неактуальна, так-как эвент Шахматы реализовали. Просьба снести.
__________________
So foolish. |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|