Цитата:
Поинты до кучи надо удалять у них тогда, а то смысла от твоей правки нет, финал_ап вернет на место двойку при наличии поинтов у моба.
|
Поинты у них должны быть, просто они должны активироваться ловушкой, а иначе должны стоять на месте. На Мангосе я делал обработку через db_script_on_event, правда по гуидам стражей, по другому никак.
Chaosua скажите разрабам, чтобы поправили скрипт, а то у вас на Трине после активации ловушки Стражи не то что по вайпоинтам не ходят, а тупо вступают в бой, что является ошибкой.
Код:
class spell_icc_sprit_alarm : public SpellScriptLoader
{
public:
spell_icc_sprit_alarm() : SpellScriptLoader("spell_icc_sprit_alarm") { }
class spell_icc_sprit_alarm_SpellScript : public SpellScript
{
PrepareSpellScript(spell_icc_sprit_alarm_SpellScript);
void HandleEvent(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
uint32 trapId = 0;
switch (GetSpellInfo()->Effects[effIndex].MiscValue)
{
case EVENT_AWAKEN_WARD_1:
trapId = GO_SPIRIT_ALARM_1;
break;
case EVENT_AWAKEN_WARD_2:
trapId = GO_SPIRIT_ALARM_2;
break;
case EVENT_AWAKEN_WARD_3:
trapId = GO_SPIRIT_ALARM_3;
break;
case EVENT_AWAKEN_WARD_4:
trapId = GO_SPIRIT_ALARM_4;
break;
default:
return;
}
if (GameObject* trap = GetCaster()->FindNearestGameObject(trapId, 5.0f))
trap->SetRespawnTime(trap->GetGOInfo()->GetAutoCloseTime());
std::list<Creature*> wards;
GetCaster()->GetCreatureListWithEntryInGrid(wards, NPC_DEATHBOUND_WARD, 150.0f);
wards.sort(Trinity::ObjectDistanceOrderPred(GetCaster()));
for (std::list<Creature*>::iterator itr = wards.begin(); itr != wards.end(); ++itr)
{
if ((*itr)->IsAlive() && (*itr)->HasAura(SPELL_STONEFORM))
{
(*itr)->AI()->Talk(SAY_TRAP_ACTIVATE);
(*itr)->RemoveAurasDueToSpell(SPELL_STONEFORM);
if (Unit* target = (*itr)->SelectNearestTarget(150.0f))
(*itr)->AI()->AttackStart(target);
break;
}
}
}
Emote вы правильно занулили, в spell_script есть обработка.
Код:
void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Creature* target = GetTarget()->ToCreature())
{
target->SetReactState(REACT_PASSIVE);
target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
target->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_02);
}
}
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Creature* target = GetTarget()->ToCreature())
{
target->SetReactState(REACT_AGGRESSIVE);
target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC);
target->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
}
}