PDA

Просмотр полной версии : Planning for the Future: Create Snowfall Glade Pup Cover


xmolex
28.03.2010, 13:18
Не знал в каком разделе лучше написать, поэтому пишу здесь.
Заметил, что на сервере не совсем корректно работает спелл Planning for the Future: Create Snowfall Glade Pup Cover (http://www.wowhead.com/?spell=46167), предмет не создается, хотя моб умирает. Он имеет dummy эффект. Отлично идем в SpellEffects.cpp и видим код:

case 46167: // Planning for the Future: Create Snowfall Glade Pup Cover
case 50926: // Gluttonous Lurkers: Create Zul'Drak Rat Cover
case 51026: // Create Drakkari Medallion Cover
case 51592: // Pickup Primordial Hatchling
case 51961: // Captured Chicken Cover
{
if (!unitTarget || unitTarget->GetTypeId() != TYPEID_UNIT || m_caster->GetTypeId() != TYPEID_PLAYER)
return;

uint32 spellId = 0;

switch(m_spellInfo->Id)
{
case 46167: spellId = 46773; break;
case 50926: spellId = 50927; break;
case 51026: spellId = 50737; break;
case 51592: spellId = 51593; break;
case 51961: spellId = 51037; break;
}

if (const SpellEntry *pSpell = sSpellStore.LookupEntry(spellId))
{
unitTarget->CastSpell(m_caster, spellId, true);

Creature* creatureTarget = (Creature*)unitTarget;

if (const SpellCastTimesEntry *pCastTime = sSpellCastTimesStore.LookupEntry(pSpell->CastingTimeIndex))
creatureTarget->ForcedDespawn(pCastTime->CastTime + 1);
}
return;
}


Все вроде бы цивильно. Запускаю отладку и вижу, что условия все выполняются нормально. spellId становится равным 46773. потом выполняется unitTarget->CastSpell(m_caster, spellId, true), тоесть передается в castspell все чинно.
46773 имеет эффект Create Item. Ставлю в EffectCreateItem флаг и начинаю отладку. До него не доходит. Тоесть мы на перса кастуем спелл 46773, но его эффект не проходит. Однако, если я кастую с помощью команды .cast 46773 на себя, то предмет создается.
Если мы работаем с 50926 (аналогичный спелл), то до EffectCreateItem доходит и предмет создается. Куда копать? Почему не доходит до EffectCreateItem?

timmit
28.03.2010, 15:09
Проверьте Эвент_АИ на мобе+

if (const SpellCastTimesEntry *pCastTime = sSpellCastTimesStore.LookupEntry(pSpell->CastingTimeIndex))
creatureTarget->ForcedDespawn(pCastTime->CastTime + 1);
Это срабатывает раньше

После небольшой правки скриптов нормально работает. Время для деспавна увеличте

xmolex
28.03.2010, 18:58
Я уже пытался сделать как в теме http://ytdb.ru/showthread.php?t=3806&highlight=50926
Эффекта ноль.
Делал так:
INSERT IGNORE INTO `creature_ai_scripts` VALUES
(2620050, 26200, 8, 0, 100, 0, 46167, -1, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'тест');
UPDATE `creature_template` SET `AIName` = 'EventAI' WHERE `entry` = '26200';

Объясните пожалуйста, почему именно у нас не происходит каст. Как я понимаю creatureTarget->ForcedDespawn(pCastTime->CastTime + 1) - это функция убийства моба. Ну убили мы моба, а спелл кастуем же не на него, а на себя. А мы живы, не вижу связи. Объясните пожалуйста.