Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0002350EresseaLERNE/LEHREöffentlich2017-08-05 10:49
ReporterSoltharBearbeitung durchEnno 
PrioritätnormalAuswirkungkleinerer FehlerReproduzierbarnicht getestet
Status erledigtLösungerledigt 
Produktversion3.12.4 
Zielversion3.13Behoben in Version3.13 
Zusammenfassung0002350: Orks lernen so gut wie andere Rassen?
Beschreibung

Aus der Anleitung: "Orks sind langsame Denker und lernen generell alle Nichtkampftalente etwas langsamer als andere Rassen."

Ich habe auf eine aktuelle Frage hin mal in den Code geschaut und konnten nicht sehen, wo das implementiert ist. Daraufhin einen Test geschrieben mit dem Ergebnis, dass Orks genau so gut wie andere Menschen lernen.

Ist mein Test falsch oder wurde das irgendwann mal heimlich abgeschafft?

Schritte zur Reproduktion
function test_orklearn()
eressea.settings.set('study.random_progress', '1')
local r1 = region.create(0, 0, "plain")
local f1 = faction.create("human", "noorc@eressea.de", "de")
local f2 = faction.create("orc", "orc@eressea.de", "de")

for i = 1, 10000 do
    local u1 = unit.create(f1, r1, 10)
    local u2 = unit.create(f2, r1, 10)
    u1:add_order("LERNE Wahrnehmung")
    u2:add_order("LERNE Wahrnehmung")
end
for i = 1, 10 do
    process_orders()
end
write_reports()
end

$ skill=Wahrnehmung; for race in Mensch Ork; do echo $race; vals=$(grep $skill reports/*nr | grep $race | sed -e "s/.*$skill \([0-9]*\).*/\1\n/"); echo $vals | awk '{for(i=1;i<=NF;i++) x+=$i;print x/NF}' ; echo $vals | wc -w; done
Mensch
3.6307
10000
Ork
3.6305
10000
ParteiN/A
SpielE2
Report1035

Notizen / Dateien

Solthar

Solthar

2017-07-26 11:29

Entwickler   ~0007354

Wieso gibt es eigentlich keine Dokumentation zu dem dämlichen Markup von Mantis?!?

Enno

Enno

2017-07-26 12:07

Administrator   ~0007355

Du meinst https://en.wikipedia.org/wiki/Markdown ?

Enno

Enno

2017-07-26 21:46

Administrator   ~0007356

Verantwortlich dafür sollte die Funktion study_days() sein, wie sie in study.c benutzt wird.

Orks haben durch e3a/races.xml generell -5 "Lerntage" auf Talente: <race name="orc" studyspeed="-5" ...>
Aber bei den Waffentalenten kriegen sie +5, z.B.: <skill name="bow" speed="+5"/>

Allerdings haben sie diese Modifikationen scheinbar nicht in eressea/races.xml? Und dann gibt es auch noch res/races/orc.xml, wo die Modifikation ebenfalls fehlt - allerdigns scheint diese Datei nirgends verwendet zu werden.

Das gibt mir in der Tat Grund anzunehmen, dass das in E2 nicht mehr funktioniert, und hier ein Bug vorliegt.

Enno

Enno

2017-07-26 21:47

Administrator   ~0007357

Ich sollte erst einmal einen richtigen Test schreiben.

Enno

Enno

2017-07-27 10:04

Administrator   ~0007358

@Solthar: Probier doch mal dein Skript mit der o.g. Änderung an den Orks in der XML Datei, oder einfach mit E3 Regeln.

Solthar

Solthar

2017-07-27 13:20

Entwickler   ~0007359

Nein, es gab noch einen zweiten Fehler in xmlreader, siehe Patch. Ich hätte gerne einen richtigen Test dazu geschrieben, aber

  • bei xmlreader tue ich mich da sehr schwer
  • bei einem Lua-Test macht der Zufall Probleme. Gibt es eigentlich schon eine Möglichkeit, den auch für Lua-Tests abzuschalten?

Tut mir leid, dass ich mich so dumm anstelle, es ist einfach schon wieder zu lange her, dass ich am Code gearbeitet habe.

Es bleibe dann noch zu entscheiden ob die -5 der gewünschte Malus sind. Meine Tests zeigen, dass das bei Stufe 10 ungefähr -1 ausmacht, bei Stufe 20 etwa -2, wenn man nur lernt.



studypatch.diff (3,957 Bytes)
diff --git a/res/eressea/races.xml b/res/eressea/races.xml
index 69eda95..804b7e8 100644
--- a/res/eressea/races.xml
+++ b/res/eressea/races.xml
@@ -1172,7 +1172,7 @@
     <familiar race="wolf"/>
     <familiar race="rat"/>
   </race>
-  <race name="orc" magres="-5" maxaura="1.000000" regaura="1.000000" recruitcost="70" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
+  <race name="orc" studyspeed="-5" magres="-5" maxaura="1.000000" regaura="1.000000" recruitcost="70" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
     <ai splitsize="10000" moverandom="yes" learn="yes"/>
     <param name="recruit_multi" value="0.5"/>
     <skill name="alchemy" modifier="1"/>
diff --git a/res/races/orc.xml b/res/races/orc.xml
index 4f4d96e..a003375 100644
--- a/res/races/orc.xml
+++ b/res/races/orc.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" ?>
-<race name="orc" magres="-5" maxaura="1.000000" regaura="1.000000" recruitcost="70" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
+<race name="orc" studyspeed="-5" magres="-5" maxaura="1.000000" regaura="1.000000" recruitcost="70" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
     <ai splitsize="10000" moverandom="yes" learn="yes"/>
     <param name="recruit_multi" value="0.5"/>
     <skill name="alchemy" modifier="1"/>
diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c
index a9d3879..423f166 100644
--- a/src/kernel/xmlreader.c
+++ b/src/kernel/xmlreader.c
@@ -1320,6 +1320,12 @@ static void parse_ai(race * rc, xmlNodePtr node)
         rc->flags |= RCF_ATTACK_MOVED;
 }
 
+static void set_study_speed(race *rc, skill_t sk, int modifier){
+    if (!rc->study_speed)
+        rc->study_speed = calloc(1, MAXSKILLS);
+    rc->study_speed[sk] = (char)modifier;
+}
+
 static int parse_races(xmlDocPtr doc)
 {
     xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
@@ -1338,6 +1344,7 @@ static int parse_races(xmlDocPtr doc)
         xmlXPathObjectPtr result;
         int k, study_speed_base, attacks;
         struct att *attack;
+        skill_t sk;
 
         propValue = xmlGetProp(node, BAD_CAST "name");
         assert(propValue != NULL);
@@ -1467,11 +1474,15 @@ static int parse_races(xmlDocPtr doc)
         xpath->node = node;
         result = xmlXPathEvalExpression(BAD_CAST "skill", xpath);
         memset(rc->bonus, 0, sizeof(rc->bonus));
+        if (study_speed_base != 0) {
+          for (sk = 0; sk < MAXSKILLS; ++sk) {
+            set_study_speed(rc, sk, study_speed_base);
+          }
+        }
         for (k = 0; k != result->nodesetval->nodeNr; ++k) {
             xmlNodePtr node = result->nodesetval->nodeTab[k];
             int mod = xml_ivalue(node, "modifier", 0);
             int speed = xml_ivalue(node, "speed", study_speed_base);
-            skill_t sk;
 
             propValue = xmlGetProp(node, BAD_CAST "name");
             assert(propValue != NULL);
@@ -1479,9 +1490,7 @@ static int parse_races(xmlDocPtr doc)
             if (sk != NOSKILL) {
                 rc->bonus[sk] = (char)mod;
                 if (speed) {
-                    if (!rc->study_speed)
-                        rc->study_speed = calloc(1, MAXSKILLS);
-                    rc->study_speed[sk] = (char)speed;
+                    set_study_speed(rc, sk, speed);
                 }
             }
             else {
studypatch.diff (3,957 Bytes)
Enno

Enno

2017-07-27 13:47

Administrator   ~0007360

Ich finde die Regel eigentlich eher besch***en, weil sie noch ein Sondefall ist, der nur von einer einzigen Rasse benutzt wird. Viel Code, der entsprechend schlecht getestet ist, und kaum gebraucht wird. Mir wäre es lieber, wenn wir das ganze als "normale" Talentmodifikation ausdrücken könnten.

Die Auswirkung der Lernschwäche auf das Spiel bringt ja auch kein echt neues Element: Man kann halt Pech haben, dann muss man eine Woche länger lernen. Zusätzliches Mikromanagement ist kein Feature, und vor allem kein guter Rassennachteil.

Enno

Enno

2017-07-27 13:49

Administrator   ~0007361

Ich sehe das Problem, dass der xmlreader Patch loest, aber das tritt nur dann auf, wenn die Rasse zwar <skill> Elemente mit einem unterschiedlichen Speed hat, aber keinen "globalen" Speed-Modifier am <race> Element. Sehe ich das richtig?

Enno

Enno

2017-07-27 13:53

Administrator   ~0007362

Zur Frage, wie man Tests fuer xmlreader schreibt: Gar nicht. Ich will die XML-Dateien eh abschaffen. In einem Unit-Test einfach die Rasse mit test_create_race() erstellen, und die Werte, die der xmlreader setzen wuerde, von Hand selber setzen. Damit findet man keine Fehler im xmlreader Code, aber wir wollten ja vor allem wissen, ob Funktionen wie study_days das tun, was wir erwarten. Dort kann man dann auch random injizieren.

Solthar

Solthar

2017-07-27 14:34

Entwickler   ~0007363

Ich sehe das Problem, dass der xmlreader Patch loest, aber das tritt nur dann auf, wenn die Rasse zwar <skill> Elemente mit einem unterschiedlichen Speed hat, aber keinen "globalen" Speed-Modifier am <race> Element. Sehe ich das richtig?

Eher umgekehrt: wenn es einen globalen Modifier gab, wurde der nicht für Talente übernommen, für die es kein <skill>-Element gab. Also zum Beispiel nicht für stamina bei Orks. Reines Glück, dass ich das gefunden habe.

Solthar

Solthar

2017-07-27 14:36

Entwickler   ~0007364

Habe gesehen, dass STUDYDAYS nicht konsequent benutzt wird. Deswegen ein neuer Patch. Ich mache auch einen PR, wenn ich dazu komme.



studypatch-2.diff (9,333 Bytes)
diff --git a/res/eressea/races.xml b/res/eressea/races.xml
index 69eda95..804b7e8 100644
--- a/res/eressea/races.xml
+++ b/res/eressea/races.xml
@@ -1172,7 +1172,7 @@
     <familiar race="wolf"/>
     <familiar race="rat"/>
   </race>
-  <race name="orc" magres="-5" maxaura="1.000000" regaura="1.000000" recruitcost="70" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
+  <race name="orc" studyspeed="-5" magres="-5" maxaura="1.000000" regaura="1.000000" recruitcost="70" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
     <ai splitsize="10000" moverandom="yes" learn="yes"/>
     <param name="recruit_multi" value="0.5"/>
     <skill name="alchemy" modifier="1"/>
diff --git a/res/races/orc.xml b/res/races/orc.xml
index 4f4d96e..a003375 100644
--- a/res/races/orc.xml
+++ b/res/races/orc.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" ?>
-<race name="orc" magres="-5" maxaura="1.000000" regaura="1.000000" recruitcost="70" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
+<race name="orc" studyspeed="-5" magres="-5" maxaura="1.000000" regaura="1.000000" recruitcost="70" maintenance="10" weight="1000" capacity="540" speed="1.000000" hp="24" damage="1d5" unarmedattack="-2" unarmeddefense="-2" playerrace="yes" walk="yes" giveperson="yes" giveunit="yes" getitem="yes" equipment="yes">
     <ai splitsize="10000" moverandom="yes" learn="yes"/>
     <param name="recruit_multi" value="0.5"/>
     <skill name="alchemy" modifier="1"/>
diff --git a/src/battle.c b/src/battle.c
index 343bd75..568e810 100644
--- a/src/battle.c
+++ b/src/battle.c
@@ -958,12 +958,12 @@ void drain_exp(struct unit *u, int n)
         skill *sv = unit_skill(u, sk);
         if (sv) {
             while (n > 0) {
-                if (n >= 30 * u->number) {
+                if (n >= STUDYDAYS * u->number) {
                     reduce_skill(u, sv, 1);
-                    n -= 30;
+                    n -= STUDYDAYS;
                 }
                 else {
-                    if (rng_int() % (30 * u->number) < n)
+                    if (rng_int() % (STUDYDAYS * u->number) < n)
                         reduce_skill(u, sv, 1);
                     n = 0;
                 }
diff --git a/src/kernel/skills.c b/src/kernel/skills.c
index b951b77..e6d3723 100644
--- a/src/kernel/skills.c
+++ b/src/kernel/skills.c
@@ -153,7 +153,7 @@ int rc_skillmod(const struct race *rc, const region * r, skill_t sk)
 
 int level_days(int level)
 {
-    return 30 * ((level + 1) * level / 2);
+    return STUDYDAYS * ((level + 1) * level / 2);
 }
 
 int level(int days)
diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c
index a9d3879..423f166 100644
--- a/src/kernel/xmlreader.c
+++ b/src/kernel/xmlreader.c
@@ -1320,6 +1320,12 @@ static void parse_ai(race * rc, xmlNodePtr node)
         rc->flags |= RCF_ATTACK_MOVED;
 }
 
+static void set_study_speed(race *rc, skill_t sk, int modifier){
+    if (!rc->study_speed)
+        rc->study_speed = calloc(1, MAXSKILLS);
+    rc->study_speed[sk] = (char)modifier;
+}
+
 static int parse_races(xmlDocPtr doc)
 {
     xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
@@ -1338,6 +1344,7 @@ static int parse_races(xmlDocPtr doc)
         xmlXPathObjectPtr result;
         int k, study_speed_base, attacks;
         struct att *attack;
+        skill_t sk;
 
         propValue = xmlGetProp(node, BAD_CAST "name");
         assert(propValue != NULL);
@@ -1467,11 +1474,15 @@ static int parse_races(xmlDocPtr doc)
         xpath->node = node;
         result = xmlXPathEvalExpression(BAD_CAST "skill", xpath);
         memset(rc->bonus, 0, sizeof(rc->bonus));
+        if (study_speed_base != 0) {
+          for (sk = 0; sk < MAXSKILLS; ++sk) {
+            set_study_speed(rc, sk, study_speed_base);
+          }
+        }
         for (k = 0; k != result->nodesetval->nodeNr; ++k) {
             xmlNodePtr node = result->nodesetval->nodeTab[k];
             int mod = xml_ivalue(node, "modifier", 0);
             int speed = xml_ivalue(node, "speed", study_speed_base);
-            skill_t sk;
 
             propValue = xmlGetProp(node, BAD_CAST "name");
             assert(propValue != NULL);
@@ -1479,9 +1490,7 @@ static int parse_races(xmlDocPtr doc)
             if (sk != NOSKILL) {
                 rc->bonus[sk] = (char)mod;
                 if (speed) {
-                    if (!rc->study_speed)
-                        rc->study_speed = calloc(1, MAXSKILLS);
-                    rc->study_speed[sk] = (char)speed;
+                    set_study_speed(rc, sk, speed);
                 }
             }
             else {
diff --git a/src/study.c b/src/study.c
index 9ea0a86..f05e1a9 100644
--- a/src/study.c
+++ b/src/study.c
@@ -176,13 +176,13 @@ const attrib_type at_learning = {
 
 static int study_days(unit * student, skill_t sk)
 {
-    int speed = 30;
+    int speed = STUDYDAYS;
     if (u_race(student)->study_speed) {
         speed += u_race(student)->study_speed[sk];
-        if (speed < 30) {
+        if (speed < STUDYDAYS) {
             skill *sv = unit_skill(student, sk);
             if (sv == 0) {
-                speed = 30;
+                speed = STUDYDAYS;
             }
         }
     }
@@ -209,7 +209,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk,
         return 0;
     }
 
-    n = 30 * student->number;
+    n = STUDYDAYS * student->number;
     a = a_find(student->attribs, &at_learning);
     if (a != NULL) {
         teach = (teaching_info *)a->data.v;
@@ -231,7 +231,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk,
              * Student auch in unterschiedlichen Gebaeuden stehen duerfen */
             if (academy_can_teach(teacher, student, sk)) {
                 /* Jeder Schueler zusaetzlich +10 Tage wenn in Uni. */
-                teach->value += (n / 30) * 10;  /* learning erhoehen */
+                teach->value += (n / STUDYDAYS) * EXPERIENCEDAYS;  /* learning erhoehen */
                                                 /* Lehrer zusaetzlich +1 Tag pro Schueler. */
                 if (academy) {
                     *academy += n;
@@ -268,7 +268,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk,
          * die Talentaenderung (enno).
          */
 
-        nteaching = MAX(0, nteaching - student->number * 30);
+        nteaching = MAX(0, nteaching - student->number * STUDYDAYS);
 
     }
     return n;
@@ -301,14 +301,14 @@ int teach_cmd(unit * u, struct order *ord)
         return 0;
     }
 
-    teaching = u->number * 30 * TEACHNUMBER;
+    teaching = u->number * STUDYDAYS * TEACHNUMBER;
 
     if ((i = get_effect(u, oldpotiontype[P_FOOL])) > 0) { /* Trank "Dumpfbackenbrot" */
         i = MIN(i, u->number * TEACHNUMBER);
         /* Trank wirkt pro Schueler, nicht pro Lehrer */
-        teaching -= i * 30;
+        teaching -= i * STUDYDAYS;
         change_effect(u, oldpotiontype[P_FOOL], -i);
-        j = teaching / 30;
+        j = teaching / STUDYDAYS;
         ADDMSG(&u->faction->msgs, msg_message("teachdumb", "teacher amount", u, j));
     }
     if (teaching == 0)
@@ -747,12 +747,12 @@ int study_cmd(unit * u, order * ord)
 
     if (get_effect(u, oldpotiontype[P_WISE])) {
         l = MIN(u->number, get_effect(u, oldpotiontype[P_WISE]));
-        teach->value += l * 10;
+        teach->value += l * EXPERIENCEDAYS;
         change_effect(u, oldpotiontype[P_WISE], -l);
     }
     if (get_effect(u, oldpotiontype[P_FOOL])) {
         l = MIN(u->number, get_effect(u, oldpotiontype[P_FOOL]));
-        teach->value -= l * 30;
+        teach->value -= l * STUDYDAYS;
         change_effect(u, oldpotiontype[P_FOOL], -l);
     }
 
@@ -761,11 +761,11 @@ int study_cmd(unit * u, order * ord)
         /* p ist Kosten ohne Uni, studycost mit; wenn
          * p!=studycost, ist die Einheit zwangsweise
          * in einer Uni */
-        teach->value += u->number * 10;
+        teach->value += u->number * EXPERIENCEDAYS;
     }
 
     if (is_cursed(r->attribs, C_BADLEARN, 0)) {
-        teach->value -= u->number * 10;
+        teach->value -= u->number * EXPERIENCEDAYS;
     }
 
     multi *= study_speedup(u, sk, speed_rule);
@@ -828,7 +828,7 @@ int study_cmd(unit * u, order * ord)
 static int produceexp_days(void) {
     static int config, rule;
     if (config_changed(&config)) {
-        rule = config_get_int("study.produceexp", 10);
+        rule = config_get_int("study.produceexp", EXPERIENCEDAYS);
     }
     return rule;
 }
diff --git a/src/study.h b/src/study.h
index 0f8ae70..8362f7c 100644
--- a/src/study.h
+++ b/src/study.h
@@ -39,6 +39,7 @@ extern "C" {
     typedef void(*learn_fun)(struct unit *u, skill_t sk, int days);
 
 #define STUDYDAYS 30
+#define EXPERIENCEDAYS 10
     void learn_skill(struct unit *u, skill_t sk, int days);
 
     void produceexp(struct unit *u, skill_t sk, int n);
studypatch-2.diff (9,333 Bytes)
Solthar

Solthar

2017-07-27 14:44

Entwickler   ~0007365

Ich gebe dir recht, dass das für eine Rasse alleine wahrscheinlich nicht lohnt, weil es kein "tolles" Feature ist. Dem Rest deines Argumentes allerdings nicht: Der Zufall spielt bei allen Rassen die gleiche Rolle beim Lernen.

Man müsste sich genau anschauen, ob ohne das Feature zu gut sind und ggbf. irgend einen Modifier verändern. Oder sich was Besseres überlegen. Es gibt meiner Meinung nach zu wenig interessante Rasseneigenschaften. Beispiele für gelungene Features sind für mich Meermenschen, Dämonen, E3-Goblins und evtl. noch E2-Elfen.

Solthar

Solthar

2017-07-27 14:48

Entwickler   ~0007366

Fest steht, dass der Fehler im xmlreader nie aufgefallen wäre, wenn nicht zufällig die Frage im Forum in Kombination mit dem fehlenden Konfigurationsparameter gekommen wäre. Ich bin überzeugt, es gibt noch eine Menge solcher "schlummernder" Fehler. Einige davon sind durch Unittests allein kaum zu finden.

Enno

Enno

2017-07-27 15:02

Administrator   ~0007367

Ja, und dass der xmlreader Code so schlecht zu testen ist, ist ein Grund, warum der irgendwann weg soll. Das ist nur leider ein ziemlich großes Projekt.

Solthar

Solthar

2017-08-01 22:19

Entwickler   ~0007372

Zuletzt bearbeitet: 2017-08-01 22:21

2 Überarbeitungen anzeigen

PR 714

Xolgrim

Xolgrim

2017-08-02 18:16

Entwickler   ~0007373

"Orks haben durch e3a/races.xml generell -5 "Lerntage" auf Talente: <race name="orc" studyspeed="-5" ...>
Aber bei den Waffentalenten kriegen sie +5, z.B.: <skill name="bow" speed="+5"/>"

Es gibt, um das ganze noch komplizierter zu machen, unterschiedliche Regelungen für E2 und E3. Das oben beschriebene sollte nur für E3 gelten, dort lernen Orks Waffetalente schneller und alles andere langsamer.
In E2 gibt es für Waffentalente keine Modifikation, sie lernen nur nicht Waffentalente langsamer.

(Im übrigen bin ich noch immer der Meinung, dass der Taktikbonus von +1 bei Orks weg gehört, der war um das Verwässern abzuschwächen, das gibt es aber seit ewigkeiten nicht mehr. Aber das ist erstens eine andere Baustelle und zweitens ist der Zug schon lange abgefahren.)

Enno

Enno

2017-08-05 09:28

Administrator   ~0007374

PR akzeptiert.

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2017-07-25 18:25 Solthar Neuer Eintrag
2017-07-26 09:57 Solthar Schritte zur Reproduzierung aktualisiert Überarbeitungen anzeigen
2017-07-26 10:02 Solthar Schritte zur Reproduzierung aktualisiert Überarbeitungen anzeigen
2017-07-26 11:28 Solthar Schritte zur Reproduzierung aktualisiert Überarbeitungen anzeigen
2017-07-26 11:28 Solthar Schritte zur Reproduzierung aktualisiert Überarbeitungen anzeigen
2017-07-26 11:29 Solthar Notiz hinzugefügt: 0007354
2017-07-26 12:07 Enno Notiz hinzugefügt: 0007355
2017-07-26 16:08 Solthar Schritte zur Reproduzierung aktualisiert Überarbeitungen anzeigen
2017-07-26 16:09 Solthar Schritte zur Reproduzierung aktualisiert Überarbeitungen anzeigen
2017-07-26 16:09 Solthar Schritte zur Reproduzierung aktualisiert Überarbeitungen anzeigen
2017-07-26 21:46 Enno Notiz hinzugefügt: 0007356
2017-07-26 21:47 Enno Bearbeitung durch => Enno
2017-07-26 21:47 Enno Status neu => anerkannt
2017-07-26 21:47 Enno Notiz hinzugefügt: 0007357
2017-07-27 10:04 Enno Notiz hinzugefügt: 0007358
2017-07-27 13:20 Solthar Datei hinzugefügt: studypatch.diff
2017-07-27 13:20 Solthar Notiz hinzugefügt: 0007359
2017-07-27 13:47 Enno Notiz hinzugefügt: 0007360
2017-07-27 13:49 Enno Notiz hinzugefügt: 0007361
2017-07-27 13:53 Enno Notiz hinzugefügt: 0007362
2017-07-27 14:34 Solthar Notiz hinzugefügt: 0007363
2017-07-27 14:36 Solthar Datei hinzugefügt: studypatch-2.diff
2017-07-27 14:36 Solthar Notiz hinzugefügt: 0007364
2017-07-27 14:44 Solthar Notiz hinzugefügt: 0007365
2017-07-27 14:48 Solthar Notiz hinzugefügt: 0007366
2017-07-27 15:02 Enno Notiz hinzugefügt: 0007367
2017-08-01 22:19 Solthar Notiz hinzugefügt: 0007372
2017-08-01 22:21 Solthar Notiz bearbeitet: 0007372 Überarbeitungen anzeigen
2017-08-02 18:16 Xolgrim Notiz hinzugefügt: 0007373
2017-08-05 09:28 Enno Status anerkannt => erledigt
2017-08-05 09:28 Enno Lösung offen => erledigt
2017-08-05 09:28 Enno Behoben in Version => 3.13
2017-08-05 09:28 Enno Notiz hinzugefügt: 0007374
2017-08-05 10:49 Enno Produktversion => 3.12.4
2017-08-05 10:49 Enno Zielversion => 3.13