Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0003048EresseaMagieöffentlich2024-10-16 09:13
ReporterSolthar Bearbeitung durchEnno  
PrioritätniedrigSchweregradkleinerer FehlerReproduzierbarnicht getestet
Status zugewiesenLösungoffen 
Produktversion29.3.1 
Zusammenfassung0003048: Gesang der Versklavung doppelt gezaubert führt zu Problemen
Beschreibung

Im Test gibt es Probleme, wenn eine versklavte Einheit erneut verzaubert wird:

Runde 0

Einheit a; Partei A
ZAUBERE "Gesang der Versklavung" b

Runde 1: --> Einheit b gehört nun zu Partei A.

Einheit c; Partei B
ZAUBERE "Gesang der Versklavung" b

Runde 2: Einheit b gehört wieder zu b. Es gibt zwei Meldungen (die bei beiden Parteien erscheinen):

  * Einheit b6gv (b), anonym, 10 Menschen, aggressiv.
   Einheit b (b) wird noch 1 Woche unter unserem Bann stehen. (yvLd)
   Einheit b (b) wird noch 2 Wochen unter unserem Bann stehen. (3pLn)

Runde 3: Einheit b gehört immer noch zu b.

 * Einheit ddhk (b), anonym, 2 Menschen, aggressiv.
    Einheit ddhk (b) wird noch 1 Woche unter unserem Bann stehen. (3pLn)

Runde 4: Einheit b gehört nun dauerhaft zu a! Ein mindestens überraschendes Ergebnis. Ich denke, die zweite Versklavung sollte entweder automatisch fehlschlagen oder den ersten Zauber aufheben (oder die Einheit sollte dauerhaft zum Schlumpf werden).

Es gibt noch einen weiteren Bug im Code

/* Auf eigene Einheiten versucht zu zaubern? Garantiert Tippfehler */
    if (target->faction == mage->faction) {
        /* Die Einheit ist eine der unsrigen */
        cmistake(mage, co->order, 45, MSG_MAGIC);
    }

Hier fehlt ein return 0; Das führt sonst zu noch seltsamerem Verhalten!

Schritte zur Reproduktion

Aufgrund von Patzern wird der Test leider nicht immer dasselbe Ergebnis bringen...

function test_charming()
    local r1 = region.create(0, 0, 'plain')
    local f = faction.create('human', "charmer@eressea.de", "de")
    local f2 = faction.create('human', "charmee@eressea.de", "de")
    local u1 = unit.create(f, r1, 1)
    local u2 = unit.create(f2, r1, 2)
    local u3 = unit.create(f2, r1, 1)
    u1.id = 10
    u2.id = 11
    u3.id = 12
    f.id = 10
    f2.id = 11

    u1.magic = 'cerddor'
    u1:set_skill('magic', 24)
    u1.aura = 1000
    u1:add_spell('song_of_slavery')

    u1:add_order("ZAUBERE 'Gesang der Versklavung' b")
    u3.magic = 'cerddor'
    u3:set_skill('magic', 24)
    u3.aura = 1000
    u3:add_spell('song_of_slavery')

    set_debug(1)
    process_orders()
    set_debug(0)
    -- write_reports()

    u1:clear_orders()
    u3:add_order("ZAUBERE 'Gesang der Versklavung' b")
    process_orders()
    -- write_reports()

    for i = 1,10 do
        u1:clear_orders()
        u3:clear_orders()
        process_orders()
        -- write_reports()
    end

    assert_equal(f2, u2.faction)
end
TagsKeine Tags zugeordnet.
Partei1wpy
SpielE2
Report1372

Notizen / Dateien

Enno

Enno

2024-10-04 19:50

Administrator   ~0010245

Kleiner Tipp: Mit eressea.settings.set("magic.fumble.enable", "0") kann man in Lua-Tests die Patzer abstellen (und in C Tests entsprechend mit config_set("magic.fumble.enable", "0");

Ähnliche Variablen gibt es für Magieresistenz: (magic.resist.enable), Bauernwachstum (rules.peasants.growth.factor), Auraregeneration (magic.regeneration.enable) und vieles mehr.

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2024-10-03 18:37 Solthar Neuer Eintrag
2024-10-03 21:48 Solthar Produktversion 29.4 => 29.3.1
2024-10-03 21:54 Solthar Beschreibung aktualisiert
2024-10-04 19:47 Enno Bearbeitung durch => Enno
2024-10-04 19:47 Enno Status neu => zugewiesen
2024-10-04 19:50 Enno Notiz hinzugefügt: 0010245
2024-10-04 20:51 Solthar Schritte zur Reproduzierung aktualisiert
2024-10-16 09:13 Enno Priorität normal => niedrig