Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0002310EresseaGeneralöffentlich2017-12-05 19:49
ReporterEnno Bearbeitung durchEnno  
PrioritätnormalSchweregradkleinerer FehlerReproduzierbarnicht getestet
Status geschlossenLösungerledigt 
Produktversion3.11.1 
Zielversion3.12Behoben in Version3.12 
Zusammenfassung0002310: Falsche (?) Personenzahl im NR
Beschreibung

Im NR-Code steht folgendes:

no_people = count_all(f);
if (f->flags & FFL_NPC) {
    no_people = f->num_total;
}
else {
    no_people = f->num_people;
}

Das ist beknackt. Es wird erst eine teure Volkszählung gemacht (count_all leiert alle Einheiten ab), und dann wird der berechnete Wert mit einer Partei-Variablen überschrieben, die während des Zuges laufend aktuell gehalten wird, wann immer sich eine Einheiten-Zahl ändert, oder eine Einheit die Partei wechselt.

Zusätzliche Informationen

Dazu kommt noch, dass die Berechnung keine Untoten, Vertraute, oder Migranten enthält. Ich nehme an, dass das verhindern sollte, dass eine Partei mit vielen Untoten zusätzliche Migranten oder Helden bekommen kann?

TagsKeine Tags zugeordnet.
ParteiN/A
SpielE2
Report1015

Eintrags-Beziehungen

verwandt mit 0002311 geschlossenEnno Einheitenlimit kann gesprengt werden. 

Notizen / Dateien

Enno

Enno

2017-03-11 18:36

Administrator   ~0007122

Haha. Der Code ist so schlecht, dass die Anzahl der Personen ohne Untote, etc. GRÖSSER ist, als mit. Report 397, E3, Partei (goLd). num_total = 2079, num_people = 2081.

Enno

Enno

2017-03-11 18:53

Administrator   ~0007123

read_unit sollte das nicht so machen: if (f != u->faction) { u_setfaction(u, f); } if (u->faction) { ++u->faction->num_units; }

u_setfaction sollte eigentlich die num_units und num_people variablen korrekt setzen. Klappt aber nicht.

Enno

Enno

2017-03-11 19:06

Administrator   ~0007124

Noch ein Fehler: Es gibt ein Einheitenlimit pro Allianz. Das verhindert zwar mit checkunitnumber(), dass man in new_units mehr Einheiten machen kann, aber man kann es umgehen, indem man eine Partei aufnimmt, mit deren Einheiten die Allianz das Limit sprengt (oder eben kurzfristig austritt, um neue Einheiten zu machen).

Enno

Enno

2017-03-11 20:32

Administrator   ~0007127

fixed in PR https://github.com/eressea/server/pull/675

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2017-03-11 18:20 Enno Neuer Eintrag
2017-03-11 18:20 Enno Status neu => zugewiesen
2017-03-11 18:20 Enno Bearbeitung durch => Enno
2017-03-11 18:36 Enno Notiz hinzugefügt: 0007122
2017-03-11 18:53 Enno Notiz hinzugefügt: 0007123
2017-03-11 19:06 Enno Notiz hinzugefügt: 0007124
2017-03-11 19:35 Enno Beziehung hinzugefügt verwandt mit 0002311
2017-03-11 20:32 Enno Notiz hinzugefügt: 0007127
2017-03-11 20:32 Enno Status zugewiesen => erledigt
2017-03-11 20:32 Enno Behoben in Version => 3.12
2017-03-11 20:32 Enno Lösung offen => erledigt
2017-03-11 20:34 Enno Zielversion => 3.12
2017-12-05 19:49 Enno Status erledigt => geschlossen