Eintragsdetails ansehen
ID | Projekt | Kategorie | Sichtbarkeit | Meldungsdatum | Zuletzt aktualisiert |
---|---|---|---|---|---|
0002194 | Eressea | LERNE/LEHRE | öffentlich | 2016-02-29 13:27 | 2017-12-05 19:50 |
Reporter | Enno | Bearbeitung durch | Enno | ||
Priorität | normal | Schweregrad | kleinerer Fehler | Reproduzierbar | nicht getestet |
Status | geschlossen | Lösung | erledigt | ||
Produktversion | 3.8.4 | ||||
Zielversion | 3.9.1 | Behoben in Version | 3.9.1 | ||
Zusammenfassung | 0002194: LEHRE in Akademien gibt Lehrern den falschen Bonus | ||||
Beschreibung | In teach_cmd wird die Liste der gelehrten Einheiten abgeackert, und für jede der Skill betrachtet, den sie lernt. Dabei wird eine Variable sk gesetzt. Wenn der Skill nicht gelehrt werden kann, wird hier eine Fehlermeldung an den Lehrer ausgegeben. Wenn allerdings der Lehrer in einer Akademie steht, dann wird hier auch der Akademie-Bonus an den Lehrer vergeben. Dies geschieht jedoch außerhalb der Schleife, und der Lehrer bekommt diesen Bonus für den zuletzt betrachteten Skill (sk). Das kann durchaus ein Skill sein, den er nicht lehren durfte! | ||||
Schritte zur Reproduktion | Einheit 72hw in Datenfile 967 lehrt eine lange Liste von Einheiten, und soll dann einen Bonus auf Magie kriegen. Das bombt, weil eine 3-Personen Einheit nicht Magie lernen darf. | ||||
Zusätzliche Informationen | Wenn da nicht das assert in add_skill wäre, hätte man sich damit zusätzliche Magier machen können, über das Limit hinaus. Generell kann man damit allerdings teure Talente lernen, ohne zu bezahlen (das ist wohl ein Effekt der Akademie), selbst wenn man sie bisher nicht hatte (das ist allerdings wiederum so nicht gedacht). | ||||
Tags | Keine Tags zugeordnet. | ||||
Partei | voda | ||||
Spiel | E2 | ||||
Report | 968 | ||||
Habe ein paar Hinweise gesammelt: Einheit 329828, "Alchemist", in Gebäude 1153103, AaCademy LEHREN npwd 72hw jvhz o9en xa69 mix3 jtoo oaL1 abgr bvuh gm6h sk==SK_MAGIC und academy == 510 nach der while Schleife Die letzte Einheit, gm6h, ist eine 3-Personen Einheit, die LERNE MAGIE 600 als Befehl hat, aber natürlich keine Magie kann. Sie gehört der Partei Iarn-doriath (1483035). Beide Parteien haben FFL_CURSED gesetzt. |
|
Habe jetzt einen Test, der das reproduziert. |
|
Test zu schreiben, die die korrekte Funktion der Akademie prüfen, ist nicht so einfach. Ich will schon länger gerne learn_skill inijzieren können, weil man schwer inspizieren kann, ob das aufgerufen wurde, und das oft braucht. Warum ist das in unit.c? Ein Refactoring machen, und nach study.c verschieben? A propos refactoring: Der gesamte Akademie-Code könnte gut in ein eigenes Modul, der verkompliziert das Lesen von teach_cmd (und wahrscheinlich learn_cmd auch). |
|
Jetzt habe ich gerade LERNE/LEHRE kaputt gemacht, glaube ich. test_study_with_bad_teacher geht in meinem lokalen Code nicht mehr :-( |
|
Auch nach dem Refactoring ist das noch kaputt. Es triggert aber nur, wenn der Lehrer einen erfolgreichen Lernversuch hat, deshalb ist das Testen mit dem 967er Datenfile unzuverlässig. Hier muss ein richtiger Unit-Test geschrieben werden, der learn_skill inijziert und schaut, dass in der Situation nicht Magie gelernt wird. |
|
Es gabe einen (deaktivierten) Test, der hat aber die neue Injektion nicht benutzt, sondern das assert getriggert :-( Habe ich repariert, und einen Hack gemacht, der verhindert dass Akademie-Lehrer einen Skill lernen, den sie nicht gelehrt haben. |
|
Wird in Version 3.9 gefixt sein. Ich hoffe mal, dass der Bug nicht vorher schon zuschlägt. |
|
Änderungsdatum | Benutzername | Feld | Änderung |
---|---|---|---|
2016-02-29 13:27 | Enno | Neuer Eintrag | |
2016-02-29 13:27 | Enno | Status | neu => zugewiesen |
2016-02-29 13:27 | Enno | Bearbeitung durch | => Enno |
2016-03-04 20:07 | Enno | Notiz hinzugefügt: 0006496 | |
2016-03-04 20:54 | Enno | Notiz hinzugefügt: 0006497 | |
2016-03-06 22:20 | Enno | Notiz hinzugefügt: 0006499 | |
2016-03-07 13:17 | Enno | Notiz hinzugefügt: 0006500 | |
2016-03-25 09:38 | Enno | Notiz hinzugefügt: 0006511 | |
2016-03-25 17:06 | Enno | Notiz hinzugefügt: 0006512 | |
2016-03-25 17:09 | Enno | Notiz hinzugefügt: 0006513 | |
2016-03-25 17:09 | Enno | Status | zugewiesen => erledigt |
2016-03-25 17:09 | Enno | Behoben in Version | => 3.9.1 |
2016-03-25 17:09 | Enno | Lösung | offen => erledigt |
2016-08-08 12:39 | Enno | Zielversion | => 3.9.1 |
2017-12-05 19:50 | Enno | Status | erledigt => geschlossen |