[[http://www.siedler-games.de|{{:sg-link.jpg|}}]] ======Schatzkisten====== Schatzkisten sind im Game sehr beliebt. Es ist auch sinnvoll, wenn der Spieler praktisch bei Null anfangen muss, sein Dorf aufzubauen. Es ist dann eine nette Geste, wenn man dem Spieler ein paar zusätzliche Dinge zukommen lässt. ===== Hier zunächst die normalen Schatzkisten: ===== CreateRandomGoldChest(GetPosition("chestOne")) Dieser Code muss in die **FirstMapAction** eingefügt werden. Und eine "ScriptEntity" mit Namen "chestOne" muss erstellt werden. Wenn es erwünscht ist, das die Kisten nicht sofort erstellt werden sollen, sondern z.B. als Belohnung, dann kann der Code auch in eine Function oder in das jeweilige BriefingFinished eingefügt werden. Wenn man **nur** Schatzkisten mit Gold hinstellen will, kann man beliebig viele ScriptEntities hinsetzen. Diese dann vernünftig durchnummerieren mit "GoldChest1, GoldChest2, GoldChest3 ... etc". Der Vorteil ist das der Code: CreateRandomGoldChests() nur einmal in die **FirstMapAction** gesetzt wird und fertig. Aber es entsteht nun das Problem, das man in die Schatzkisten einiges anderes hineintun möchte, z.B. Holz, Eisen oder Schlüssel oder Papiere. Eigentlich kann man dann alles hineintun, auch Hasen! Sollen Rohstoffe darin sein, folgenden Code verwenden: -- in die FirstMapAction CreateChest(GetPosition("chest1"), chestCallbackWood) CreateChest(GetPosition("chest2"), chestCallbackClay) CreateChest(GetPosition("chest3"), chestCallbackIron) CreateChest(GetPosition("chest4"), chestCallbackSulfur) CreateChest(GetPosition("chest5"), chestCallbackStone) CreateChest(GetPosition("chest6"), chestCallbackGold) CreateChestOpener("dario") StartChestQuest() --diesen Code als normale Functionen einfach ins Script function chestCallbackWood() Message("Ihr habt einen Schatz mit 500 Holz gefunden") AddWood(500) end function chestCallbackClay() Message("Ihr habt einen Schatz mit 500 Lehm gefunden") AddClay(500) end function chestCallbackIron() Message("Ihr habt einen Schatz mit 500 Eisen gefunden") AddIron(500) end function chestCallbackSulfur() Message("Ihr habt einen Schatz mit 500 Schwefel gefunden") AddSulfur(500) end function chestCallbackStone() Message("Ihr habt einen Schatz mit 500 Steinen gefunden") AddStone(500) end function chestCallbackGold() Message("Ihr habt einen Schatz mit 500 Talern gefunden") AddGold(500) end ===== ... und mit farbigem Text ===== So, jetzt gibt es auch noch die Möglichkeit, den Text farbig zu machen, zumindest den Inhalt der Kisten extra darzustellen. Ich habe die Farbe: Gelb genommen. function chestCallbackWood() Message("Ihr habt einen Schatz mit @color:255,232,0 500 Holz @color:255,255,255 gefunden") AddWood(500) end function chestCallbackClay() Message("Ihr habt einen Schatz mit @color:255,232,0 500 Lehm @color:255,255,255 gefunden") AddClay(500) end function chestCallbackIron() Message("Ihr habt einen Schatz mit @color:255,232,0 500 Eisen @color:255,255,255 gefunden") AddIron(500) end function chestCallbackSulfur() Message("Ihr habt einen Schatz mit @color:255,232,0 500 Schwefel @color:255,255,255 gefunden") AddSulfur(500) end function chestCallbackStone() Message("Ihr habt einen Schatz mit @color:255,232,0 500 Steinen @color:255,255,255 gefunden") AddStone(500) end function chestCallbackGold() Message("Ihr habt einen Schatz mit @color:255,232,0 500 @color:255,255,255 Talern gefunden") AddGold(500) end Hier gibt es mehr zu den Textfarben: [[tutorials:textfarben]] ===== ... und mit anderem Inhalt ===== Möchte man nun etwas anderes, z.B. Schlüssel oder Papiere hineintun, dann ändert man einfach den Inhalt. -- in die FirstMapAction CreateChest(GetPosition("chest1"), chestCallbackSchluessel) oder --diesen Code als normale Functionen einfach ins Script function chestCallbackSchluessel() Message("Ihr habt einen Schatz mit dem Schluessel gefunden") end oder halt farbig --diesen Code als normale Functionen einfach ins Script function chestCallbackSchluessel() Message("Ihr habt einen Schatz mit dem @color:255,232,0 Schluessel @color:255,255,255 gefunden") end Also bleibt dann das "Add.." einfach weg. Dann setzt man voraus, das der Spieler die Kiste gefunden hat, wenn man dies z.B. als Quest in einem Briefing festgesetzt hat. Soll der Spieler die Kiste nicht direkt finden, sondern z.B. "nebenher" und dann einen Schlüssel finden, um zum Beispiel ein Tor zu öffnen, muss man eine Variable setzen. Zwischen **-- Include ...** und **function InitDiplomacy()** als Global deklarieren -- Include main function Script.Load( Folders.MapTools.."Main.lua" ) IncludeGlobals("MapEditorTools") Schluessel=0 function InitDiplomacy() SetNeutral( 1, 2 ) end Danach kann diese Variable im Code für die Schatzkiste wie folgt gesetzt werden: function chestCallbackSchluessel() Message("Ihr habt einen Schatz mit dem Schluessel gefunden") Schluessel=1 end Über einen Aufruf mit [[reference:startsimplejob|StartSimpleJob]]( "Tor1" ) wird dann mit Hilfe der nachfolgenden Funktion z.B. ein Tor geöffnet: function Tor1() if IsNear("dario","tor1",500) and Schluessel == 1 then ReplaceEntity("tor1",Entities.XD_DarkWallStraightGate) return true else Message("Ihr braucht einen Schluessel fuer das Tor!") end end ===== ... Kisten verschwinden lassen ===== Jetzt tauchte irgendwann mal die Frage auf, wie man die offenen Schatzkisten "verschwinden" lassen kann, damit die nicht so dumm in der Landschaft rumstehen. Das geht so einfach nicht. Dazu müssen eigene Schatzkisten erstellt werden und nicht die aus der "Comfort-Function". Das heisst, man muss eine geschlossene Kiste **(XD_ChestClose)** hinsetzen, und diese dann in einer Function in eine offene verwandeln und danach zerstören. Hier ein Beispiel: function Kiste1() if IsNear("dario","kiste1",500) then ReplaceEntity("kiste1",Entities.XD_ChestOpen) Sound.PlayGUISound(Sounds.fanfare, 0) Sound.PlayGUISound(Sounds.VoicesMentor_CHEST_FoundTreasureChest_rnd_02, 0) Message("Congrat! Ihr habt einen Schluessel gefunden!") DestroyEntity("kiste1") return true end end Und als **Schmankerl** noch dies : [[utilfunctions:schatzkiste|erweiterte Möglichkeiten für Schatzkisten]] [[:tutorials:index|Zur Tutorial-Übersicht]]