Projekt

Allgemein

Profil

Aktionen

Fehler #21998

offen

Instantzauber werden schon vor Kampfbeginn gewirkt

Von B2B-DTS vor mehr als 7 Jahren hinzugefügt. Vor fast 4 Jahren aktualisiert.

Status:
Bestätigt
Priorität:
Normal
Zugewiesen an:
-
Kategorie:
Mechanik
Zielversion:
Beginn:
23.12.2016
Update Text Deutsch:

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.

Aktionen #1

Von Rushor vor mehr als 7 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

Aktionen #2

Von Sockentester vor mehr als 7 Jahren aktualisiert

  • Status wurde von Neu zu Bestätigt geändert
Aktionen #4

Von Shienor vor mehr als 7 Jahren aktualisiert

  • Zugewiesen an wurde auf mathew gesetzt
Aktionen #5

Von mathew vor etwa 7 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!

Aktionen #6

Von Shienor vor etwa 7 Jahren aktualisiert

  • Status wurde von Testbereit zu Ready geändert
  • Zugewiesen an Shienor wurde gelöscht
  • Update Text Deutsch aktualisiert (Vergleich)
Aktionen #7

Von Daschluz vor etwa 7 Jahren aktualisiert

  • Zielversion wurde auf Welt gesetzt
  • Update Text Deutsch aktualisiert (Vergleich)
Aktionen #8

Von Daejiv vor etwa 7 Jahren aktualisiert

  • Status wurde von Ready zu Live geändert
Aktionen #9

Von Kuschkusch vor etwa 7 Jahren aktualisiert

  • Status wurde von Live zu Bestätigt geändert
Aktionen #11

Von Yrito vor etwa 7 Jahren aktualisiert

1. Der Fix funktioniert nicht (eben aufm master-test und live-test getestet). Die checks sollten durch das normale Unit::CastSpell auch sowieso schon drinnen sein.
2. Der Fix verursacht (vermutlich) andere Probleme, z.B. #23117

Alter fix reverted für #23117

Aktionen #12

Von Jeora vor fast 4 Jahren aktualisiert

  • Tags wurde auf Creature, Spell, Mechanic gesetzt
Aktionen

Auch abrufbar als: Atom PDF