Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:schatztruhen_selbstgebaut

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: 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 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 : erweiterte Möglichkeiten für Schatzkisten

Zur Tutorial-Übersicht

tutorials/schatztruhen_selbstgebaut.txt · Zuletzt geändert: 2021/09/18 19:16 von 127.0.0.1