Topic: Win Condition Waldschrat / Wood Gnome ändern
game_student Topic Opener |
Posted at: 2018-01-12, 21:26
Hi Leute, für studienzwecke modde ich widelands sodass man bäume pflanzen (ranger) muss und tiere (tierhüter) aufzieht. Dazu möchte ich gerne die win condition "wood_gnome" abändern sodass neben der anzahl der bäume auch die anzahl der tiere in den punktestand fließen. Könnt ihr mir bitte dabei helfen das programmiertechnisch umzusetzen? folgender code ist vorhanden und zählt die bäume: \Widelands\data\scripting\win_conditions\wood_gnome.lua
LG danke im Voraus Top Quote |
kaputtnik |
Posted at: 2018-01-13, 00:13
Hi und willkommen im Forum Tiere mit in den Punktestand einzubeziehen ist schwierig, weil Tiere ja durch die Gegend laufen. Sie können zwar von einem Tierhüter ausgesetzt werden, aber unter Umständen laufen sie dann direkt in das Gegnerische Gebiet... Oder habe ich Deine Frage nicht verstanden? Edited: 2018-01-13, 00:13
Fight simulator for Widelands: |
game_student Topic Opener |
Posted at: 2018-01-13, 06:52
Hi Ja da hast du Recht. Das wäre dann Glückssache wieviele Tiere sich auf seinem eigenem Gebiet sich befinden. Dann möchte ich gerne die „erzeugten“ Tiere vom Tierhüter in den punktestand einfließen lassen. Wie stelle ich dass an. LG EDIT: oder eher die Anzahl der Tierhüter und Ranger zählen weil das Script nicht während der Laufzeit mitzählt. Edited: 2018-01-13, 07:20
Top Quote |
kaputtnik |
Posted at: 2018-01-13, 09:33
Die Anzahl der ausgesetzten Tiere zu zählen geht IMHO nicht. Aber ich bin da kein Profi. Die Anzahl der Wildhüter Hütten zu zählen geht im Prinzip genauso wie in dem Codeschnipsel den Du bereits gefunden hast. Es gibt hier die Lua Documentation und nachfolgend die Widelands Scripting reference. Die Dokumentation ist etwas unübersichtlich und leider funktioniert die Suchfunktion nicht, aber es ist ein Anfang Hast Du denn zumindest eine Idee wie Du das scripten könntest, oder fehlt Dir ein Ansatzpunkt? (Ich will Dir jetzt nicht eine fertige Lösung anbieten ) Fight simulator for Widelands: |
game_student Topic Opener |
Posted at: 2018-01-13, 11:28
Danke, da habe ich mich schon schlau gemacht und herausgefunden dass die Tiere das Attribute „eatable“ haben. Demnach habe ich versucht die Tiere so zu zählen aber das Script funktioniert leider nicht. Ich übersehe was aber komme nicht drauf:
Edited: 2018-01-13, 11:30
Top Quote |
kaputtnik |
Posted at: 2018-01-13, 13:36
Welche Art von immovable ein 'field' hat weiß ein field nicht. Ein 'field' kann nur die Eigenschaft 'immovable' haben wenn ein immovable drauf steht., oder nicht die Eigenschaft immovable haben wenn nichts drauf steht. Das 'if' im folgenden kann also nicht greifen, weil 'imm' immer 'nil' sein wird.
Ein Tier ist auch eine Art Immovable ... obwohl es mobil ist Die Funktion 'has_attribute()' kommt von https://wl.widelands.org/docs/wl/autogen_wl_map/#wl.map.ImmovableDescription Sieh dir dort mal die Angaben unter der Eigenschaft 'type_name' an. Ich hoffe nicht zu sehr verwirrt zu haben. Fight simulator for Widelands: |
game_student Topic Opener |
Posted at: 2018-01-13, 21:43
"Verwirrt" ist relativ. Ich kann nicht programmieren deshalb scheitere ich ;) Aber ich habs geschnallt dass ein field nur die eigenschaft immovable haben kann. danke für den tipp mit type_name! warum kann ich ein flag so abfragen:
aber nicht ein building:
Edit: es funktioniert:
jetzt muss ich nur mehr die tierhüter zählen aber wie? Edited: 2018-01-13, 21:54
Top Quote |
kaputtnik |
Posted at: 2018-01-14, 09:58
Man kann ja auch andere Werte als type_name abfragen... Such Dir in https://wl.widelands.org/docs/wl/autogen_wl_map/#wl.map.MapObjectDescription das Attribut aus, mit welchem du z.B. den Namen des immovables abfragen kannst. Man muss allerdings wissen wie das Gebäude intern benannt wird. Das steht in der entsprechenden Fight simulator for Widelands: |
Nordfriese |
Posted at: 2018-01-14, 10:38
Hier liegt ein Missverständnis vor. Tiere und andere mobile Wesen (z.B. Arbeiter) sind keine Immovables, sondern Bobs. Jedes Feld hat ein Array von Bobs, die sich gerade auf diesem Feld befinden. Um die Tiere auf einem Feld f zu zählen, muss f.bobs abgefragt werden:
Es gibt einen viel einfacheren Weg, um die Tierhüter-Hütten von Spieler x zu zählen:
Top Quote |
kaputtnik |
Posted at: 2018-01-14, 12:05
Upps, sorry. Fight simulator for Widelands: |