Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0002878EresseaBEWACHEöffentlich2022-12-04 01:04
ReporterSolthar Bearbeitung durchEnno  
PrioritätnormalSchweregradschwerer FehlerReproduzierbarnicht getestet
Status erledigtLösungerledigt 
Produktversion27.3 
Zielversion27.4Behoben in Version27.4 
Zusammenfassung0002878: Newbie Parteien können bewachen, aber nicht angegriffen werden.
Beschreibung

Wenn eine Newbiepartei in Runde x, bevor die Immunität abläuft, anfängt zu bewachen, kann sie in der Folgewoche zwar beklaut, aber nicht angegriffen werden. Das ist natürlich ein Problem, denn sei verhindert da schon den Abbau.

Testreport Runde 1:

  • "Deine Partei ist nur noch in der kommenden Woche immun gegen Angriffe."
  • bewacht nicht

Runde 2:

  • "Deine Partei ist nun nicht mehr immun gegen Angriffe."
  • "Eine Partei muß mindestens 3 Wochen alt sein, bevor sie angegriffen oder bestohlen werden kann."
  • "bewacht"
  • "Einheit 6jeq (6jeq) in Difedlud (0,0) produziert 1 Holz."

Runde 3:

  • "Deine Partei ist nun nicht mehr immun gegen Angriffe."
  • "Eine Partei muß mindestens 3 Wochen alt sein, bevor sie angegriffen oder bestohlen werden kann."
  • "Einheit 6jeq (6jeq) in Difedlud (0,0) produziert 1 Holz."

Runde 4:

  • Attacke: "Eine Partei muß mindestens 3 Wochen alt sein, bevor sie angegriffen oder bestohlen werden kann."
  • "Einheit 438v (438v) verdient in Difedlud (0,0) 50 Silber durch Diebstahl."
  • "'MACHE Holz' - Die Region wird von Nichtalliierten bewacht."
Schritte zur Reproduktion
function test_newbie()
    local newbi = 3
    local newbiOld = eressea.settings.get("NewbieImmunity")
    eressea.settings.set("NewbieImmunity", newbi)

    local debug = true

    local r = region.create(0, 0, 'plain')
    local f = faction.create('human', "newb@eressea.de", "de")
    local f2 = faction.create('human', "aggro@eressea.de", "de")
    f.age = 0
    f2.age = 10
    local u1 = unit.create(f, r, 1)
    local u2 = unit.create(f2, r, 1)
    local u3 = unit.create(f2, r, 1)
    local u4 = unit.create(f2, r, 1)
    u1:add_item("sword", 1)
    u1:set_skill("melee", 1)
    u1:add_order("BEWACHE")
    u2:add_item("sword", 1)
    u1:add_item("money", 1000)
    u2:add_item("sword", u2.number)
    u2:set_skill("melee", 50)
    u3:set_skill("forestry", 1)
    u4:set_skill("stealth", 1)

    r:set_resource("tree", 100)
    for i = 1, newbi+1 do
        u1:add_order("BEWACHE")
        u1:set_skill("stamina", 50)
        u2:add_order("ATTACKIERE " .. itoa36(u1.id))
        u3:clear_orders()
        u3:add_order("MACHE Holz")
        u3:set_skill("forestry", 1)
        u3:add_item("log", -u3:get_item("log"))
        u4:clear_orders()
        u4:add_order("BEKLAUE " .. itoa36(u1.id))
        u1.hp = u1.number * u1.hp_max
        process_orders()
        if debug then
            print(i, newbi, "f.age ", f.age, "guard ", u1.guard, "hp", u1.hp, "log", u3:get_item("log"), "money", u1:get_item("money"))
            init_reports()
            write_reports()
        end
        if i < newbi-1 then
            assert_false(u1.guard, "newbie should not guard")
            assert_equal(520, u1.hp, "newbie should be immune")
            assert_equal(1, u3:get_item("log"), "region should not be guarded")
            assert_equal(1000, u1:get_item("money"), "newbie should be immune")
        elseif i == newbi - 1 then
            assert_true(u1.guard, "newbie should guard")
            assert_equal(520, u1.hp, "newbie should be immune")
            assert_equal(1000, u1:get_item("money"), "newbie should be immune")
            assert_equal(1, u3:get_item("log"), "region should not be guarded")
        else
            assert_true(u1.guard, "newbie should guard")
            assert_true(1000 > u1:get_item("money"), "newbie should *not* be immune")
            assert_true(520 > u1.hp, "guarding newbie should *not* be immune")
            assert_equal(0, u3:get_item("log"), "region should be guarded")
        end
    end

    eressea.settings.set("NewbieImmunity", newbiOld)
end
Zusätzliche Informationen

Nach kurzem Blick in den Code, verstehe ich nicht, warum das bei Attackiere und Beklaue verschieden reagiert. Ist der Lua-Test wirklich gültig?

Jedenfalls wäre es schön, wenn die Fehlermeldung auch mit ausgibt, wie lange die Partei noch immun ist.

TagsKeine Tags zugeordnet.
Partei1wpy
SpielE2
Report0

Eintrags-Beziehungen

verwandt mit 0002847 erledigtEnno Newbie-Parteien werden angreifbar, können aber die eigene Region nicht bewachen 
verwandt mit 0002916 erledigtEnno NMR Anzeige kaputt 

Notizen / Dateien

Enno

Enno

2022-11-27 13:53

Administrator   ~0009855

Das hat eine Menge Änderungen nach sich gezogen, aber ich glaube, der Code ist dadurch klarer geworden.

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2022-08-15 22:13 Solthar Neuer Eintrag
2022-08-15 22:14 Solthar Beschreibung aktualisiert
2022-08-15 22:14 Solthar Schritte zur Reproduzierung aktualisiert
2022-08-15 22:14 Solthar Beziehung hinzugefügt verwandt mit 0002847
2022-11-27 10:11 Enno Bearbeitung durch => Enno
2022-11-27 10:11 Enno Status neu => zugewiesen
2022-11-27 10:11 Enno Zielversion => 27.4
2022-11-27 13:53 Enno Status zugewiesen => erledigt
2022-11-27 13:53 Enno Lösung offen => erledigt
2022-11-27 13:53 Enno Behoben in Version => 27.4
2022-11-27 13:53 Enno Notiz hinzugefügt: 0009855
2022-12-04 01:04 Enno Beziehung hinzugefügt verwandt mit 0002916