Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0002727EresseaKampföffentlich2022-03-06 15:01
ReporterSolthar Bearbeitung durchEnno  
PrioritätnormalSchweregradkleinerer FehlerReproduzierbarimmer
Status erledigtLösungerledigt 
Produktversion3.26 
Zielversion27.2Behoben in Version27.1 
Zusammenfassung0002727: Katzen können verbotene Plattenpanzer benutzen
Beschreibung

"Katzen benutzen keine Plattenpanzer."

Tun sie aber doch. Nicht getestet im Spiel, aber mit Test.

Schritte zur Reproduktion
function test_catmail()
  eressea.settings.set("rules.food.flags", "4") -- 4: food is free

  local f1 = faction.create("cat", "cat@example.com", "de")
  local f2 = faction.create("human", "a@example.com", "de")
  local diff = {}
  for i, mode in ipairs({ 'control', 'chainmail', 'plate' }) do
    local r = region.create(i, 0, "plain")

    local def = unit.create(f1, r, 10000)
    local foe = unit.create(f2, r, 1000)

    def:set_skill("stamina", 20)
    def:add_item(mode, def.number)

    foe:set_skill("bow", 99)
    foe:add_item("greatbow", foe.number) -- 2d6+4
    foe:add_item("plate", foe.number)
    foe:add_item("shield", foe.number)

    for u in r.units do
      u.hp = u.hp_max * u.number
      u:add_order("KÄMPFE")
      foe:add_order("ATTACKIERE " .. itoa36(u.id))
    end

    local base = def.hp

    process_orders()

    local regen = def.hp_max * def.number * .05
    diff[mode] = base - def.hp + regen
  end
  assert_true(diff.control > diff.chainmail, "chain should work for cats")
  assert_true(diff.plate > diff.chainmail, "plate should not work for cats")
end
TagsKeine Tags zugeordnet.
Partei1wpy
SpielE2
Report1207

Notizen / Dateien

Enno

Enno

2022-03-02 22:14

Administrator   ~0009515

Solche statistischen Tests implementiere ich nicht, die machen nur alles langsam. Das sollte sich als unittest implementieren lassen, wenn es wirklich kaputt ist. Eventuell mit ein wenig Umbau in battle.c verbunden.

Enno

Enno

2022-03-02 22:20

Administrator   ~0009516

In E3 steht in armor.xml: <item weight="400" score="150" deny="goblin">

Das "deny" Attribut scheint das zu kontrollieren, das sagt mir auch der Code. In E2 hat der Plattenpanzer seine eigene Datei, plate.xml, und dort steht nichts von Katzen.

Enno

Enno

2022-03-02 22:22

Administrator   ~0009517

Ein unit-test scheitert leider daran, dass der Fehler in einer Konfigurationsdatei ist, und man von Lua keinen guten Test-Harness für rc_can_use oder make_fighter konstruieren kann.

Ich repariere den Bug also erstmal ohne einen Test.

Enno

Enno

2022-03-02 22:37

Administrator   ~0009518

Gefixt, Test liefere ich irgendwann nach, wenn mir dazu etwas einfällt.

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2021-02-21 19:59 Solthar Neuer Eintrag
2022-03-02 09:56 Enno Bearbeitung durch => Enno
2022-03-02 09:56 Enno Status neu => zugewiesen
2022-03-02 09:57 Enno Zielversion => 27.2
2022-03-02 22:14 Enno Notiz hinzugefügt: 0009515
2022-03-02 22:20 Enno Notiz hinzugefügt: 0009516
2022-03-02 22:22 Enno Notiz hinzugefügt: 0009517
2022-03-02 22:37 Enno Status zugewiesen => erledigt
2022-03-02 22:37 Enno Lösung offen => erledigt
2022-03-02 22:37 Enno Behoben in Version => 27.2
2022-03-02 22:37 Enno Notiz hinzugefügt: 0009518
2022-03-06 15:01 Enno Behoben in Version 27.2 => 27.1
2023-05-28 14:25 Enno Kategorie ATTACKIERE => Kampf