Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.03.2011, 19:45   #1
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию Остановка боя и действия при спадании ауры

Есть нпц, на которого накладывается аура на 10 секунд.
НПЦ при этом вводится в бой:
Код:
((Creature*)m_target)->AI()->AttackStart(caster);
Когда аура спадает, то не отрабатывает void SpellAuraHolder::HandleSpellSpecificBoosts(bool apply), вне боя все нормально.
Не получается вывести нпц из боя и сменить ему фракцию:
Код:
target->AttackStop();
target->CombatStop(true);
target->setFaction(35);
1. Где сейчас обрабатывается момент спадания ауры во время боя?
2. Каким образом вывести нпц из боя и сменить ему фракцию?
3. Есть ли в ядре способ заставить нпц следовать за игроком, или нужен скрипт СД2?
virusav вне форума   Ответить с цитированием
Старый 01.03.2011, 20:18   #2
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

там же и в бою отрабатывается, и скорее всего отрабатывает нормально. но attackstop/combatstop оттуда не сделать (точнее сделать можно но тут же перебьется), надо кидать эвент и по нему выводить.
rsa вне форума   Ответить с цитированием
Старый 01.03.2011, 20:23   #3
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В void SpellAuraHolder::HandleSpellSpecificBoosts(bool apply):
Код:
                case 46620:                                 // Red Dragonblood
                {
                    if (apply)
                        if(Unit* caster = GetCaster())
                            if (caster->GetTypeId() == TYPEID_PLAYER && caster->isAlive() && m_target->GetTypeId() == TYPEID_UNIT && m_target->isAlive())
                                ((Creature*)m_target)->AI()->AttackStart(caster);
                    else
                    {
                        cast_at_remove = true;
                        spellId1 = 46673;                    // Capture Trigger
                    }

                    break;
                }
Не отрабатывает при отмене, может, не так написал.

В обработке думми-аур:
Код:
                    case 46675:
                        if (target->GetTypeId() != TYPEID_UNIT)
                            return;

                        if (Unit* caster = GetCaster())
                            if (caster->GetTypeId() == TYPEID_PLAYER)
                            {
                                target->AttackStop();
                                target->CombatStop(true);
                                target->setFaction(35);
                                // Drake Hatchling Subdued
                                target->CastSpell(caster, 46691, true, NULL, this);
                                // Rope Beam
                                target->CastSpell(caster, 46674, true, NULL, this);
                                //target->GetMotionMaster()->MoveFollow(caster, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
                            }

                        // allow script for the process of returning the NPC
                        return;
Это начальный код, хочу реализовать квест Охота на драконов, а по сниффу там 13 спеллов с думми.
virusav вне форума   Ответить с цитированием
Старый 01.03.2011, 21:06   #4
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

и не отработает. надо
Код:
case 46620:                                 // Red Dragonblood
                {
                    if (apply)
                    {
                        if(Unit* caster = GetCaster())
                            if (caster->GetTypeId() == TYPEID_PLAYER && caster->isAlive() && m_target->GetTypeId() == TYPEID_UNIT && m_target->isAlive())
                                ((Creature*)m_target)->AI()->AttackStart(caster);
                    }
                    else
                    {
                        cast_at_remove = true;
                        spellId1 = 46673;                    // Capture Trigger
                    }

                    break;
                }
иначе else совсем в другом месте отработает
rsa вне форума   Ответить с цитированием
Старый 01.03.2011, 21:49   #5
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Была мысль, но не успел проверить.
Я думал, что ифы ступенчатые, а else уйдет к верхнему.
virusav вне форума   Ответить с цитированием
Старый 01.03.2011, 22:59   #6
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Код:
                        target->AttackStop();
                        target->CombatStop(true);
                        target->getHostileRefManager().deleteReferences();
                        target->setFaction(35);
Все равно нпц не выходит из боя.
Фракция меняется, но нпц продолжает атаковать игрока.

Как вывести нпц из боя?
virusav вне форума   Ответить с цитированием
Старый 02.03.2011, 07:15   #7
rsa
Почетный флудер
Старожил
 
Аватар для rsa
 
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
rsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранитаrsa Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
[CODE]
Фракция меняется, но нпц продолжает атаковать игрока.

Как вывести нпц из боя?
см. пост 2. 1) регистрируем эвент (пофиг какой и как, лучше взять безобидный думми-спелл и обработать его в SD2) 2) по эвенту снимаем враждебные спеллы, чистим третлист и после этого выводим из боя.
rsa вне форума   Ответить с цитированием
Старый 02.03.2011, 08:05   #8
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

AttackStop() лишний, и так будет в CombatStop().

Возвращается в бой нпц потому, что ты не почистил _его_ список аггро
Код:
target->DeleteThreatList()

Последний раз редактировалось Vinolentus; 02.03.2011 в 08:19.
Vinolentus вне форума   Ответить с цитированием
Старый 02.03.2011, 08:34   #9
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Примеры брал из ядра и СД2, но они не отработали.

Т.е. в конечном итоге будет:
Код:
target->CombatStop(true);
target->DeleteThreatList()
target->setFaction(35);
?
virusav вне форума   Ответить с цитированием
Старый 02.03.2011, 11:17   #10
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Цитата:
Примеры брал из ядра и СД2, но они не отработали.
Смотря какие. Если там, например, выводился из боя игрок, то ему не нужно удалять threat list - у игрока его нет вообще. Всякие трупы-тотемы-чармы тоже не могут иметь...

Цитата:
Т.е. в конечном итоге будет...
Ага, если мы уверены, что target в свою очередь не будет ни у кого в threat list. Если не уверены, то
Код:
target->CombatStop(true);
target->DeleteThreatList();
target->getHostileRefManager().deleteReferences();
target->setFaction(35);

Последний раз редактировалось Vinolentus; 02.03.2011 в 11:27.
Vinolentus вне форума   Ответить с цитированием
Старый 02.03.2011, 11:51   #11
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Вот инфа, которую я достал из сниффа:
Код:
#q11940
npc=26127
+ 01.02.2011 2:19:58 46607 [SPELL_EFFECT_APPLY_AURA] [TARGET_DUELVSPLAYER] [SPELL_AURA_DUMMY] P->U - 25 c. - Драконий гарпун
+ 01.02.2011 2:20:00 46620 [SPELL_EFFECT_APPLY_AURA] [TARGET_DUELVSPLAYER] [SPELL_AURA_DUMMY] P->U - 10 c. - Красная драконья кровь
+ 01.02.2011 2:20:11 46673 [SPELL_EFFECT_DUMMY] [TARGET_DUELVSPLAYER] P->U - Инициатор захвата
+ 01.02.2011 2:20:11 46675 [SPELL_EFFECT_APPLY_AURA] [TARGET_SELF] [SPELL_AURA_DUMMY] 3 m. - Подчинение + SCRIPT
+ 01.02.2011 2:20:11 46678 [SPELL_EFFECT_APPLY_AURA] [TARGET_SELF] [SPELL_AURA_PERIODIC_TRIGGER_SPELL] = 43391 - Рвота дракона, периодический эффект

+ 01.02.2011 2:20:11 46691 [SPELL_EFFECT_APPLY_AURA] [TARGET_DUELVSPLAYER] [SPELL_AURA_DUMMY] U->P - 3m. - Детеныш дракона покорен
+ 01.02.2011 2:20:11 46674 [SPELL_EFFECT_APPLY_AURA] [TARGET_DUELVSPLAYER] [SPELL_AURA_DUMMY] U->P - Луч-веревка

01.02.2011 2:20:31 43391 [SPELL_EFFECT_DUMMY] [TARGET_SELF]

01.02.2011 2:20:44 46696 [SPELL_EFFECT_DUMMY] [TARGET_DUELVSPLAYER] P->U - Возвращение дракона
01.02.2011 2:20:47 46702 [SPELL_EFFECT_DUMMY] [TARGET_DUELVSPLAYER] U->npc=26117 - Сигнал завершения дракона

npc=26117
01.02.2011 2:20:47 46704 [SPELL_EFFECT_DUMMY] [TARGET_SCRIPT] self - 2.5 c. - Огненный шар Релораза
01.02.2011 2:20:47 26117->26127 Language: Universal, MonsterSay=Детеныш дракона Нексуса
01.02.2011 2:20:50 46703 [SPELL_EFFECT_APPLY_AURA] [TARGET_SELF] [SPELL_AURA_DUMMY] - Завершение испепеления
01.02.2011 2:20:50 Emote: EMOTE_ONESHOT_WOUNDCRITICAL (34)

npc=26175
01.02.2011 2:20:43 46693 [SPELL_EFFECT_SCRIPT_EFFECT] [TARGET_DUELVSPLAYER] U->P - Снятие аур
01.02.2011 2:20:43 killcredit=26175
Тестовый патч на первые спеллы:
Код:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 9d00d56..4b2078c 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -2018,6 +2018,25 @@ void Aura::HandleAuraDummy(bool apply, bool Real)
                     case 43873:                             // Headless Horseman Laugh
                         target->PlayDistanceSound(11965);
                         return;
+                    case 46607:                             // Drake Harpoon
+                        if (target->GetTypeId() != TYPEID_UNIT)
+                            return;
+
+                        if (Unit* caster = GetCaster())
+                            // Red Dragonblood
+                            caster->CastSpell(target, 46620, true, NULL, this);
+
+                        return;
+                    case 46675:
+                        if (target->GetTypeId() != TYPEID_UNIT)
+                            return;
+
+                        target->AttackStop();
+                        target->CombatStop(true);
+                        target->getHostileRefManager().deleteReferences();
+                        target->setFaction(35);
+                        // allow script for the process of returning the NPC
+                        return;
                     case 46699:                             // Requires No Ammo
                         if (target->GetTypeId() == TYPEID_PLAYER)
                             // not use ammo and not allow use
@@ -8727,6 +8746,20 @@ void SpellAuraHolder::HandleSpellSpecificBoosts(bool apply)
         {
             switch(GetId())
             {
+                case 46620:                                 // Red Dragonblood
+                {
+                    if(Unit* caster = GetCaster())
+                        if (caster->GetTypeId() == TYPEID_PLAYER && caster->isAlive() && m_target->GetTypeId() == TYPEID_UNIT && m_target->isAlive())
+                            if (apply)
+                                ((Creature*)m_target)->AI()->AttackStart(caster);
+                            else
+                            {
+                                int32 bp = 1;
+                                // Capture Trigger
+                                caster->CastCustomSpell(m_target, 46673, &bp, NULL, NULL, true, NULL, NULL, GetCasterGuid());
+                            }
+                    return;
+                }
                 case 50720:                                 // Vigilance (warrior spell but not have warrior family)
                 {
                     spellId1 = 68066;                       // Damage Reduction
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 2e52e48..3dbc6cd 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -1499,6 +1499,24 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx)
                     unitTarget->SetHealth(0);
                     return;
                 }
+                case 46673:                                 // Capture Trigger
+                {
+                    if (!m_caster || !unitTarget || m_caster->GetTypeId() != TYPEID_PLAYER || unitTarget->GetTypeId() != TYPEID_UNIT)
+                        return;
+
+                    // Subdued
+                    unitTarget->CastSpell(unitTarget, 46675, true);
+                    // Drake Vomit, Periodic
+                    unitTarget->CastSpell(unitTarget, 46678, true);
+                    // Drake Hatchling Subdued
+                    unitTarget->CastSpell(m_caster, 46691, true);
+                }
+                case 46691:                                 // Drake Hatchling Subdued
+                {
+                    // Rope Beam
+                    unitTarget->CastSpell(m_caster, 46674, true);
+                    unitTarget->GetMotionMaster()->MoveFollow(m_caster, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
+                }
                 case 46797:                                 // Quest - Borean Tundra - Set Explosives Cart
                 {
                     if (!unitTarget)
virusav вне форума   Ответить с цитированием
Старый 02.03.2011, 11:55   #12
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Суть квеста: используем итем на нпц, после чего приводим его к квестгиверу.
Часть будет в ядре, часть в СД2.

Если с выходом из боя проблема решена, то остается сделать часть "приводим его к квестгиверу".

Как я понимаю, это лучше делать в СД2.
Возможно, вывод нпц из боя и смена фракции также надо делать в СД2.

Видел примеры на сопровождение в СД2, попробую сделать также.
virusav вне форума   Ответить с цитированием
Старый 06.03.2011, 00:01   #13
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Получилось вывести нпц из боя, теперь возник вопрос сопровождения, пример СД2 не дал нужного эффекта:
Код:
        if (pCreatureTarget->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE)
            pCreatureTarget->GetMotionMaster()->MoveIdle();

        pCreatureTarget->GetMotionMaster()->MoveFollow(pCaster, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
НПЦ в бою с игроком, потом кастует спелл, который выводит его из боя и меняет фракцию.
В этот момент нпц просто возвращается на свое предыдущее место, но не следует за игроком.

Что упущено в реализации сопровождения нпц за игроком?
virusav вне форума   Ответить с цитированием
Старый 06.03.2011, 10:01   #14
PSZ
Ученый
 
Регистрация: 07.03.2010
Сообщений: 138
Сказал(а) спасибо: 200
Поблагодарили 143 раз(а) в 49 сообщениях
PSZ Обладатель прекрасной аурыPSZ Обладатель прекрасной ауры
По умолчанию

А
Код:
        if (!m_creature->SelectHostileTarget() || !m_creature->getVictim())
            return;
в начале UpdateAI есть?
PSZ вне форума   Ответить с цитированием
Старый 06.03.2011, 10:36   #15
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

UpdateAI пока нет вообще.
В примере на сопровождение не нашел там ничего, что было бы связано с движением нпц, поэтому пока не добавлял.
virusav вне форума   Ответить с цитированием
Старый 06.03.2011, 10:39   #16
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

На текущий момент код СД2 выглядит так:
Код:
/*######
## npc_nexus_drake_hatchling
######*/

enum
{
    SPELL_CAPTURE_TRIGGER               = 46673,
    SPELL_SUBDUED                       = 46675,
    SPELL_DRAKE_VOMIT_PERIODIC          = 46678,
    SPELL_DRAKE_HATCHLING_SUBDUED       = 46691
};

struct MANGOS_DLL_DECL npc_nexus_drake_hatchlingAI : public ScriptedAI
{
    npc_nexus_drake_hatchlingAI(Creature* pCreature) : ScriptedAI(pCreature) { Reset(); }

    uint32 m_uiDespawnTimer;

    void Reset()
    {
        m_uiDespawnTimer = 0;
    }
};

bool EffectDummyCreature_npc_nexus_drake_hatchling(Unit* pCaster, uint32 spellId, SpellEffectIndex effIndex, Creature* pCreatureTarget)
{
    //always check spellid and effectindex
    if (spellId == SPELL_CAPTURE_TRIGGER && effIndex == EFFECT_INDEX_0)
    {
        if (!pCaster || pCaster->GetTypeId() != TYPEID_PLAYER || !pCaster->isAlive())
            return true;

        //no effect if player/creature already have aura from spells
        if (pCaster->HasAura(SPELL_DRAKE_HATCHLING_SUBDUED) || pCreatureTarget->HasAura(SPELL_SUBDUED))
            return true;

        pCreatureTarget->CastSpell(pCreatureTarget, SPELL_SUBDUED, true);
        pCreatureTarget->CastSpell(pCreatureTarget, SPELL_DRAKE_VOMIT_PERIODIC, true);
        pCreatureTarget->CastSpell(pCaster, SPELL_DRAKE_HATCHLING_SUBDUED, true);

        if (pCreatureTarget->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE)
            pCreatureTarget->GetMotionMaster()->MoveIdle();

        pCreatureTarget->GetMotionMaster()->MoveFollow(pCaster, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);

        //always return true when we are handling this spell and effect
    }
    return true;
}

CreatureAI* GetAI_npc_nexus_drake_hatchling(Creature* pCreature)
{
    return new npc_nexus_drake_hatchlingAI(pCreature);
}
Только нпц не следует за игроком
virusav вне форума   Ответить с цитированием
Старый 06.03.2011, 11:38   #17
Den
Ученый
 
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от virusav Посмотреть сообщение
Только нпц не следует за игроком
Может быть вот так ?
Код:
if (pCreatureTarget->IsWithinDistInMap(pCaster, pCreatureTarget->GetMap()->GetVisibilityDistance()))
{
    pCreatureTarget->GetMotionMaster()->MoveFollow(pCaster, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
    pCreatureTarget->AddSplineFlag(SPLINEFLAG_WALKMODE);
}
Den вне форума   Ответить с цитированием
Старый 06.03.2011, 13:04   #18
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Все равно нпц возвращается на место и не следует за игроком.
virusav вне форума   Ответить с цитированием
Старый 06.03.2011, 13:20   #19
Den
Ученый
 
Регистрация: 10.03.2010
Адрес: Бобруйск
Сообщений: 284
Сказал(а) спасибо: 213
Поблагодарили 98 раз(а) в 84 сообщениях
Den Скоро придёт к известностиDen Скоро придёт к известности
По умолчанию

Случаем, перед:
Код:
        pCreatureTarget->CastSpell(pCreatureTarget, SPELL_SUBDUED, true);
        pCreatureTarget->CastSpell(pCreatureTarget, SPELL_DRAKE_VOMIT_PERIODIC, true);
        pCreatureTarget->CastSpell(pCaster, SPELL_DRAKE_HATCHLING_SUBDUED, true);
Не надо добавлять проверку ?
Код:
if (pCreatureTarget->GetEntry() == ?)
Получается, что нпц не указан ?
Den вне форума   Ответить с цитированием
Старый 06.03.2011, 13:25   #20
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

В ядре каст идет на конкретного нпц.

Если выделить нпц и .cast target 46675, то на нпц появляется баф, после чего нпц начинает следовать за игроком.

Получается, что проблема в том, что баф не вешается, хотя каст происходит.
virusav вне форума   Ответить с цитированием
Старый 06.03.2011, 15:17   #21
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Все портит каст спелла 46691.
Код:
                    // Subdued
                    unitTarget->CastSpell(unitTarget, 46675, true);
                    // Drake Vomit, Periodic
                    unitTarget->CastSpell(unitTarget, 46678, true);
                    // Drake Hatchling Subdued
                    unitTarget->CastSpell(m_caster, 46691, true);
У 46675 и 46691 одинаковые SpellIconID = 1700, activeIconID = 1700.
При касте нпц спелла 46675 на себя вешается баф, затем нпц кастует на игрока 46691.

В итоге на игроке появляется баф спелла 46691, а с нпц слетает баф 46675, хотя цели разные, только кастер один.
virusav вне форума   Ответить с цитированием
Старый 07.03.2011, 19:41   #22
virusav
Администратор
 
Аватар для virusav
 
Регистрация: 19.02.2010
Сообщений: 492
Сказал(а) спасибо: 55
Поблагодарили 341 раз(а) в 154 сообщениях
virusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человекvirusav Реально хороший человек
Отправить сообщение для virusav с помощью ICQ
По умолчанию

Удаление ауры 46675 идет в:
Код:
    // If holder in use (removed from code that plan access to it data after return)
    // store it in holder list with delayed deletion
    if (holder->IsInUse())
    {
        holder->SetDeleted();
        m_deletedHolders.push_back(holder);
    }
    else
        delete holder;
Есть идеи, почему это происходит?

Если каст спеллов поменять местами, т.е. 46675 после 46691, то оба бафа накладываются нормально.

Может ли это быть связано с тем, что у 46675 есть обработка эффекта, которая отработала/не отработала?
virusav вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Area-ауры и иммунитет zergtmn Баг-репорты 1 05.05.2010 07:42


Текущее время: 12:11. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot