Eintragsdetails ansehen

IDProjektKategorieSichtbarkeitZuletzt aktualisiert
0002083EresseaKAUFE/VERKAUFEöffentlich2017-12-05 19:50
ReporterPyanfar Bearbeitung durchSolthar  
PrioritätnormalSchweregradkleinerer FehlerReproduzierbarnicht getestet
Status geschlossenLösungerledigt 
Zielversion3.8.1Behoben in Version3.8.1 
Zusammenfassung0002083: [Deveron] unfertiger Marktplatz liefert bereits Luxus und Kräuter
Beschreibung

(ich kann im dropdownmenü kein build 3.4.6 finden...)

Wir bauen grad einen Marktplatz, und erhalten bereits Ressourcen, auch wenn der nicht fertig ist.

Das verlockt dazu, ihn so zu lassen und Baumaterial zu sparen :)

Ritiris (0, 0) (5p2Lji) Marktplatz (smye)

In Runde 42 wurden die ersten 2 Punkte erbaut, und die Baumeistereinheit hat gleich Waren in der Hand, wenn auch ohne Kaufmeldung:

Partei ZACK, AW 42 Pioniere, Abteilung Feste Behausung (v8po) baut für 2 an Marktplatz (smye) weiter. Marktplatz (smye), Größe 2, Marktplatz (im Bau).

* Pioniere, Abteilung Feste Behausung (v8po), Gebäude (zack), 1 Halbling,
  [...] hat: 5 Balsam, 6 Flachwurz,
  Windbeutel, 4 Blaue Baumringel, Weihrauch, 8 Holz, 15 Steine, "MACHE
  Marktplatz smye".

In Runde 4q1 hatten die Pioniere weder Luxus noch Kräuter - woher auch.

Später kamen da noch weitere Waren hinzu, finde aber grad die Reports nicht. Wir haben auf jeden Fall den Wert von 2-3 Wochen Einkauf, auch wenn der Markt noch gar nicht fertig ist.

Schritte zur Reproduktion

Involvierte Parteien: zack, gobo

TagsKeine Tags zugeordnet.
Parteizack
SpielDeveron
Report44

Notizen / Dateien

CTD

CTD

2015-04-10 13:37

Entwickler   ~0005754

Der Markt wird als einziges Gebäude unter scripts\eressea\markets.lua extern in einem Lua Script gehandhabt, und da wird einfach nicht die Größe abgefragt, sondern einfach nur geschaut ob das gebäude ein Markt ist. Da muss noch ein Einzeiler rein der einfach nur schaut ob auch die Gebäudegröße > 9 (oder >= 10) ist. Größer bauen als 10 geht eigentlich nicht, aber so wäre es sauber. Freiwillige die auch mal eine Zeile Code im server schreiben wollen?

Solthar

Solthar

2015-11-13 14:54

Entwickler   ~0006252

Ich kann den Bug weder in der aktuellen Version, noch in 3.4.5 (d637571a52e3a0625de61133bb816eb97dd0a87b) noch in 3.5 (820974869b20a0c0b1b9c126b2f024bd9ef4e545) reproduzieren.

Außerdem bin ich verwirrt, weil es sowohl market.c als auch markets.lua gibt. Ersteres ist aktiv, letzteres scheinbar nicht.

CTD

CTD

2015-11-13 16:55

Entwickler   ~0006253

Hm, müsste ich mir noch mal anschauen. Kann es sein das dieses Problem nur in der Runde besteht wo der Markt gerade neu errichtet wird? Läst du in deinem Test eine Einheit einen Markt kleiner 10 bauen?

Solthar

Solthar

2015-11-13 17:20

Entwickler   ~0006254

function test_bug2083() local herb_multi = 500 -- from rc_herb_trade() local r = region.create(0,0,"plain") r:set_resource("peasant", 2000) r.luxury = "balm"

local f = faction.create("2083@eressea.de", "human", "de")
local u = unit.create(f, r, 1)
u:set_skill("building", 8)
u.number = 1
u:add_item("stone", 100)
u:add_item("log", 100)
u:add_item("iron", 100)
u:add_item("money", 10000)
u:clear_orders()
u:add_order("MACHE Markt")
process_orders()
assert_equal(0, u:get_item("balm"))

end

CTD

CTD

2015-11-14 20:34

Entwickler   ~0006256

Schau dir mal die run-turn.lua an. Dort findest du nach process_orders() callbacks(rules, 'update') was wohl auch function markets.update() in der markets.lua ausführen dürfte. Der lua Teil ist also nicht inaktiv, du führst ihn in deinem Test nur gar nicht aus.

Solthar

Solthar

2015-11-14 23:00

Entwickler   ~0006257

Okay, bei der lua-Magie bin ich raus, das muss mir mal einer bei Gelegenheit erklären. Aber ich kann mir trotzdem nicht vorstellen, dass der Code dort ausgeführt wird, denn das wird alles schon in market.c gemacht. Ich bin sicher, Enno weiß das ganz genau.

Enno

Enno

2015-11-15 09:34

Administrator   ~0006258

CTD hat Recht, was die Arbeitsweise von Lua Modulen angeht, glaube ich. Wie genau das mit dem C Code zusammenarbeitet, kann ich aus dem Kopf aber gerade auch nicht sagen, das muss ich genauso am Code nachlesen wie jeder von Euch auch.

Solthar

Solthar

2015-11-15 21:10

Entwickler   ~0006263

Nach laaangem Rumprobieren kann ich jetzt bestätigen, dass der Server tatsächlich beides ausführt, market.c und markets.lua (Ich habe mal einen E3-Server installiert, was gar nicht so einfach war, weil die Anleitung natürlich schon veraltet ist). Dadurch bekommen alle doppelte Kräuter und Luxusgüter. Das ist anscheinend noch niemandem aufgefallen, mir auch nicht.

Der Code in market.c hat die bessere Testcoverage, deswegen würde ich das andere deaktivieren.

Enno

Enno

2015-11-15 21:38

Administrator   ~0006264

Mich interessiert hier, warum es zu dem doppelten Code gekommen ist. Sicher ein Fehler von mir, aber ich will das gerne nachvollziehen. Git history mal durchsuchen, gelegentlich.

CTD

CTD

2015-11-16 00:31

Entwickler   ~0006265

Also sowohl in der Testauswertung als auch in der Normalen bekomme ich genau das an Kräutern was es schon immer gab. Aus vielen Regionen mit entsprechend wenigen Bauern (z.B Gletschern) nur ein Kraut und eine Handelsware. Aus Regionen mit weniger als 50 Bauern entsprechend nix.

Irgendwas stimmt da bei dir nicht, der Server arbeitet zur Zeit richtig.

Solthar

Solthar

2015-11-16 02:18

Entwickler   ~0006266

Vergleiche mal die Meldungen "xyz kauf 5 Pfeifenkraut" mit der Differenz an Pfeifenkraut zur Vorrunde bei der Einheit und sag mir, ob es immer noch stimmt!

CTD

CTD

2015-11-16 13:18

Entwickler   ~0006269

Oh ha, jetzt wird es richtig verrückt.

Der Markt Deckt nur 3 Regionen ab. Mit einemal knapp 200 Bauern und 2 mal gut 1200. Meldung: Ruhmsucher (wg0) kauft 3 Windbeutel. Ruhmsucher (wg0) kauft 1 Höhlenglimm. Ruhmsucher (wg0) kauft 3 Blaue Baumringel. Ruhmsucher (wg0) kauft 1 Juwel. Ruhmsucher (wg0) kauft 6 Myrrhe.

Dabei fällt auf das es nur 4 Myrre sein sollten, nicht 6 (Handelsgüter pro 1000 + 1, Kräuter pro 500 +1). Scheinbar wird hier falsch gerechnet und auch bei Handelswaren die 500er Schrittweite benutzt.

Bekommen hat die Einheit aber: 1 Höhlenglimm 5 Blaue Baumringel 5 Windbeutel 1 Juwel 10 Myrrhe

Die 2te Routine scheint nicht die angepassten Schwellwerte für das erste Kraut von 50 Bauern und 100 Bauern für das Erst Handelsgut (so war es glaube ich mal gedacht) zu benutze, so das es erst ab 500 Bauern überhaupt etwas gibt. Daher die recht eigenartigen Ergebnisse.

Unterm Strich arbeiten beide Funktionen nicht so wie sie sollen.

Zum Thema Märkte hatte ich auch schon mal eine Unterhaltung mit einem anderen Spieler, und der hat verständlich eingeworfen das die Kräuter falsch herum berechnet werden. In einer Überfüllten Ebene mit 2000 Bauern sollte es einfach kaum noch Kräuter geben, wärend in einem Sumpf mit 100 Bauern sicher recht viele zu Finden sind. Ich würde bei 0 Bauern immer nichts ausgeben (Sammelt ja keiner) bei weniger als 50 Bauern 3 bei weniger als 550 Bauern 2 und bei weniger als 1100 Bauern 1. Bei mehr als 1100 Bauern in der Region gibt es kaum noch Kräuter, und ich würde keine mehr ausgeben. Das würde Hochland und Ebenen Kräuter selten machen, und es würde auch fast keine Regionen mehr geben wo man mehr als 2 Kräuter bekommt. Auch ist einer Region nicht mehr in beidem gut, entweder viele Handelswaren (2 ab 1100 Bauern) oder Kräuter.

CTD

CTD

2015-11-16 13:47

Entwickler   ~0006272

Das ganze ist übrigens in Runde 270 (E3) das erste mal aus dem Ruder gelaufen, davor war bis auf die Berechnung der Luxusgüter (in 500er statt 1000er Schritten) alles OK.

Solthar

Solthar

2015-11-16 14:58

Entwickler   ~0006278

Bist du Halbling? Da spukt noch ein

in der E3-Konfiguration herum. Ich weiß gar nicht, ob das beabsichtigt ist.

Die Kräuterdiskussion gehört nicht hier her.

CTD

CTD

2015-11-16 15:32

Entwickler   ~0006279

Warum ist es wichtig ob ich Halblinge spiele? Mit 600 und startschwelle 50 Wären die Werte zu erklären.

Ich kann für die Kräuter gerade ein extra Bugreport machen, aber ich denke wenn man schon anfängt die Märkte zu Ändern, sollte man auch gleich über so etwas nachdenken.

Solthar

Solthar

2015-11-16 16:03

Entwickler   ~0006280

Weil das luxury_trade ein Rassenparameter ist, der nur für Halblinge anders ist. Kannst gerne nachdenken, aber für Diskussionen sind die Mailinglisten besser geeignet.

CTD

CTD

2015-11-16 20:34

Entwickler   ~0006284

Ah, ich wusste gar nicht das es in E3 da noch einen Unterschied macht ob man Halbling ist oder nicht. Da müsste ich ja eigentlich sicherstellen das alle Märkte von Halblingen betrieben werden, wenn die Handelwaren in E3 nicht eh vollkommen sinnlos, weil im absoluten Überfluss vorhanden, wären.

Jedenfalls teile ich deine Einschätzung, das lua script sollte raus und damit ist vermutlich auch gleich der Fehler gelöst, da es wohl das lua script war das an die unfertigen Märkte verteilt hat (zumindest hatte ich gesehen das im lua script nicht überprüft wird ob der Markt schon fertig ist).

Solthar

Solthar

2015-12-03 11:40

Entwickler   ~0006347

https://github.com/eressea/server/pull/400

Eintrags-Historie

Änderungsdatum Benutzername Feld Änderung
2015-03-14 17:45 Pyanfar Neuer Eintrag
2015-04-10 13:37 CTD Notiz hinzugefügt: 0005754
2015-11-13 14:54 Solthar Notiz hinzugefügt: 0006252
2015-11-13 14:54 Solthar Bearbeitung durch => Solthar
2015-11-13 14:54 Solthar Status neu => zugewiesen
2015-11-13 16:55 CTD Notiz hinzugefügt: 0006253
2015-11-13 17:20 Solthar Notiz hinzugefügt: 0006254
2015-11-14 20:34 CTD Notiz hinzugefügt: 0006256
2015-11-14 23:00 Solthar Notiz hinzugefügt: 0006257
2015-11-15 09:34 Enno Notiz hinzugefügt: 0006258
2015-11-15 21:10 Solthar Notiz hinzugefügt: 0006263
2015-11-15 21:38 Enno Notiz hinzugefügt: 0006264
2015-11-16 00:31 CTD Notiz hinzugefügt: 0006265
2015-11-16 02:18 Solthar Notiz hinzugefügt: 0006266
2015-11-16 13:18 CTD Notiz hinzugefügt: 0006269
2015-11-16 13:47 CTD Notiz hinzugefügt: 0006272
2015-11-16 14:58 Solthar Notiz hinzugefügt: 0006278
2015-11-16 15:32 CTD Notiz hinzugefügt: 0006279
2015-11-16 16:03 Solthar Notiz hinzugefügt: 0006280
2015-11-16 20:34 CTD Notiz hinzugefügt: 0006284
2015-12-03 11:40 Solthar Notiz hinzugefügt: 0006347
2015-12-03 11:40 Solthar Status zugewiesen => geschlossen
2015-12-03 11:40 Solthar Lösung offen => erledigt
2015-12-03 11:40 Solthar Behoben in Version => 3.8.1
2015-12-03 11:43 Solthar Status geschlossen => Rückmeldung
2015-12-03 11:43 Solthar Lösung erledigt => wiedereröffnet
2015-12-03 11:43 Solthar Zielversion => 3.8.1
2015-12-03 11:44 Solthar Status Rückmeldung => erledigt
2015-12-03 11:44 Solthar Lösung wiedereröffnet => erledigt
2017-12-05 19:50 Enno Status erledigt => geschlossen