Fehler #21998
offenInstantzauber werden schon vor Kampfbeginn gewirkt
Instantzauber werden nun erst mit Beginn des Kampfes gewirkt.
Beschreibung
Aufgefallen ist mir das Verhalten bei den Incendosauriern in der Sengenden Schlucht (https://db.rising-gods.de/?npc=9318)
Wenn ich mit meinem Schurken Den Kampf mit "Fieser Trick" eröffne, sollte der Gegner für 4 Sekunden gestunnt sein.
Die Saurier sind auch gestunnt, jedoch habe ich den DoT (https://db.rising-gods.de/?spell=9275) (Den sie seit BC gar nicht mehr haben sollten) direkt den gesamten Kampf über auf mir drauf.
Ich konnte nicht Testen ob auch andere NPCs, die einen Sofortzauber haben, diesen direkt wirken, aber es sollte nicht passieren, wenn sie von Beginn an gestunnt sind.
Von Rushor vor mehr als 8 Jahren aktualisiert
checkcast in smart_scripts fehlt wohl
case SMART_ACTION_CAST: { ObjectList* targets = GetTargets(e, unit); if (!targets) break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { if (!IsUnit(*itr)) continue; if (!(e.action.cast.flags & SMARTCAST_AURA_NOT_PRESENT) || !(*itr)->ToUnit()->HasAura(e.action.cast.spell)) { if (me) { if (e.action.cast.flags & SMARTCAST_INTERRUPT_PREVIOUS) me->InterruptNonMeleeSpells(false); if (e.action.cast.flags & SMARTCAST_COMBAT_MOVE) { // If cast flag SMARTCAST_COMBAT_MOVE is set combat movement will not be allowed // unless target is outside spell range, out of mana, or LOS. bool _allowMove = false; SpellInfo const* spellInfo = sSpellMgr->EnsureSpellInfo(e.action.cast.spell); int32 mana = me->GetPower(POWER_MANA); if (me->GetDistance(*itr) > spellInfo->GetMaxRange(true) || me->GetDistance(*itr) < spellInfo->GetMinRange(true) || !me->IsWithinLOSInMap(*itr) || mana < spellInfo->CalcPowerCost(me, spellInfo->GetSchoolMask())) _allowMove = true; ENSURE_AI(SmartAI, me->AI())->SetCombatMove(_allowMove); } if (!me->HasUnitState(UNIT_STATE_CONFUSED) && !me->HasUnitState(UNIT_STATE_FLEEING) && !me->HasUnitState(UNIT_STATE_STUNNED)) me->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0); } else if (go) go->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_CAST:: %s: %u casts spell %u on target %u with castflags %u", (me ? me->GetGUID() : go->GetGUID()).GetTypeName(), me ? me->GetGUID().GetCounter() : go->GetGUID().GetCounter(), e.action.cast.spell, (*itr)->GetGUID().GetCounter(), e.action.cast.flags); } else TC_LOG_DEBUG("scripts.ai", "Spell %u not cast because it has flag SMARTCAST_AURA_NOT_PRESENT and the target (%s) already has the aura", e.action.cast.spell, (*itr)->GetGUID().ToString().c_str()); } delete targets; break; }
besonders
if (!me->HasUnitState(UNIT_STATE_CONFUSED) && !me->HasUnitState(UNIT_STATE_FLEEING) && !me->HasUnitState(UNIT_STATE_STUNNED)) me->CastSpell((*itr)->ToUnit(), e.action.cast.spell, (e.action.cast.flags & SMARTCAST_TRIGGERED) != 0);
sollte dann hinzugefügt werden
Von mathew vor etwa 8 Jahren aktualisiert
- Status wurde von Bestätigt zu Testbereit geändert
- Zugewiesen an wurde von mathew zu Shienor geändert
Denkt bitte daran, den server neu zu starten!