Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:standardscriptteile

Das Standardscript

Mit der Erstellung einer Map wird ein Script generiert, welcher alle grundlegend benötigten Script-Bestandteile enthält. Belasst die Einteilung, wie sie ist. Die Abarbeitung ist auf den vorhandenen Aufbau ausgelegt.

Die Script-Bestandteile

-- Include main function

Über die beiden vorhandenen Zeilen ist die grundlegende Funktionalität für jede Map und für jeden User-Script eingebunden.
Darunter könnt Ihr ausgelagerte Scripten einbinden.
Nutzt Ihr globale Variablen, die von mehreren Funktionen benötigt werden, tragt Ihr sie am besten hier an gemeinsamer Stelle im Kopf ein. So ist sichergestellt, dass sie bei jedem Bedarf auch tatsächlich bekannt gemacht (deklariert) sind. Außerdem ergibt sich Übersichtlichkeit. Auch die Initialisierung (eine erste Wertzuweisung) könnt Ihr sofort vornehmen.

Hauptfunktionen

Die nachfolgend kurz beschriebenen Funktionen werden werden genau einmal, uzw. zum Mapstart aufgerufen. In ihnen könnt Ihr anweisen, mit welchen Grundeinstellungen Eure Map starten soll. Lasst Funktionen, die Ihr nicht benötigt, unverändert stehen.

function InitDiplomacy()

Grundsätzlich sind alle Player dem player1 (Spieler) gegenüber feindlich gesinnt, untereinander verhalten sie sich neutral. Ihr könnt andere Regelungen veranlassen.

SetNeutral( 1, 3 ) -- player3 wird sich dem Spieler gegenüber neutral verhalten.
SetHostile( 5, 8 ) -- zwischen player5 und player8 herrscht Krieg
SetFriendly( 1, 4 ) -- Der Spieler und player4 sind befreundet

Mit den 3 Funktionen lässt sich die Diplomatie im Spiel beliebig ändern.

Sicher wollt Ihr die Diplomatiestasi der Aktionsparteien im Diplomatiemenü anzeigen lassen.

SetPlayerName( 2, "Schwarzenherz" ) -- player2 wird mit dem Name Schwarzenherz angezeigt

function InitResources()

Die eingetragenen Ressourcen-Werte erhält der Spieler beim Spielstart. In der Grundeinstellung werden die AI-Player durch das Spiel versorgt. Deren Grundversorgung kann allerdings für die Ballance und die Spannung im Spiel sinnvoll sein. Mit einer Schleifen-Anweisung (for-Schleife) lassen sich alle player mit gleichen Ressourcen-Werten versorgen.

for i = 1, 4 do -- die ersten 4 player werden versorgt
	AddGold  ( i,2500 ) -- das i wird in 4 Schleifendurchgängen ersetzt
	AddSulfur( i,1150 )
	AddIron  ( i,1500 )
	AddWood  ( i,2500 )
	AddStone ( i,2500 )
	AddClay  ( i,2500 )
end

(Zu weiteren Erläuterungen der oben verwendeten Befehle siehe unter anderem AddGold)

function InitTechnologies()

Grundsätzlich können alle player alle Technologien erforschen und nutzen. Ihr könnt allerdings für alle oder für einzelne player Verbote oder gestattungen aussprechen bzw. ihnen sofort bestimmte Technologien freischalten.

-- der Spieler kann den gezogenen Lauf nicht erforschen
ForbidTechnology( GT_PulledBarrel, 1)
-- Spieler 3 kämpft von Anfang an mit verbesserten Eisenrüstungen
ResearchTechnology( Technologies.T_LeatherMailArmor, 3 )

Keine Anweisung muss für den gesamten Spielverlauf gelten. Haltet bereits bei der Erstellung der Story Ausschau nach spannenden Quests. Die nüchterne Technik lässt sich elegant in das Briefing-Geschehen und in die Aktionswege integrieren.

function InitWeatherGfxSets()

Passt das Wetter über die Wetter-Sets auf die Stimmung in Eurer Map an.

function InitWeather()

Der Scripter hat Macht über den Wetterverlauf. Die eingetragene Reihenfolge und die Zeiten laufen starr durch, sofern Ihr keine random-Werte befehlt bzw. keine wechselnden Regelungen trefft.

-- Erst 140 Sekunden Sonnenschein, dann 1-minütiger Regen, auf den ein längerer Sommer und eine weitere Regenperiode folgen,
-- die wiederum den Winter einleiten? So geht's:
AddPeriodicSummer( 140 ) --Dauer der Wetterperiode in Sekunden
AddPeriodicRain( 60 )
AddPeriodicSummer( 480 )
AddPeriodicRain( 120 )
AddPeriodicWinter( 360 )
--Ab hier geht das Wetter wieder von vorne los

Nach dem nassen Herbst wird mit Feindbesuch gerechnet? Nichts ist unmöglich. Die Zeiten davor garantieren den Burgfrieden, sofern umschließendes Wasser (incl. blockierende Gebirge), aber keine Brücken bestehen. Bei Verwendung des Beispielwetters würden die Belagerer nach 800 Sekunden (= 13:20 Minuten) anmarschieren.

function InitPlayerColorMapping()

Ist man es leid, blaue Truppen durch die Gegend zu kommandieren? Und soll der feindliche Kerberos standesgemäß in Grau regieren? In dieser Funktion können den Spielern andere Farben zugewiesen werden.

function InitPlayerColorMapping()
    Display.SetPlayerColorMapping( 1, NEPHILIM_COLOR ) --Spieler 1 spielt unter dem roten Banner
    Display.SetPlayerColorMapping( 2, KERBEROS_COLOR ) --Kerberos (Spieler 2) erhält sein Grau
end

Eine Liste aller verfügbaren Farben findet ihr hier.

function FirstMapAction()

Aus der FirstMapAction (unter den Scriptern mit FMA abgekürzt) werden alle weiteren Funktionen im Spiel direkt (Aufruf in der FMA) bzw. indirekt (aus aktiven Funktionen heraus) gestartet. Vom ursprünglich vorhandenen Code benötigt Ihr nichts. Erstellt eigene Sieg- und Niederlage-Bedingungen.
Setzt die erste Kamera-Position.
Lasst Umlaute in Briefings automatisch umwandeln.
Üblich ist es, das Spiel mit einem Prelude-Briefing starten zu lassen. Alternativ kann ein bereitstehender oder herbeieilender NPC die ersten Einweisungen ins Spiel übernehmen.
Startet Ihr ohne Prelude-Briefing, empfielt es sich, zum Spielstart einen Mainquest zu kreieren.
Ruft alle Funktionen auf, die sofort ablaufen oder Ereignisse überwachen sollen.
Der Start der ersten oder aller Briefings wird in der FMA veranlasst.
Komplexere Scripten wie der Heiler-/Schamanen-Script, Foersterscript, aiscript usw. benötigen die Startaufrufe in der FMA. Bindet umfangreiche Scripten am besten extern ein, bei einigen geht es wegen des Umfanges gar nicht anders.

AutoUmlaut() -- Umlaute in Briefings umwandeln
Camera.ScrollSetLookAt( 6234.32, 13861.63 ) -- Startposition der Kamera mit Beispielkoordinaten
SetupPlayerAI_2( aiID,range,peacetime )	-- starten der KI 2
-- beispielhafte Funktionsaufrufe
Mainquest() -- Bei Bedarf Mainquest über eine Funktion
BriefingCassandra() -- Briefing-Aufruf
CallGrenzerWarnung() -- Briefing über callback-Funktion (Call als Kennzeichnung)
StartSimpleJob( "HaendlerEingetroffen" ) -- Ereignisüberwachung jede Sekunde

Beispielfunktion, der Mainquest

function Mainquest()
	Logic.AddQuest( 1, GetQuestId(), MAINQUEST_OPEN, "Questtext", 1 )
end

Für die Nutzung benötigt Ihr noch eine Comfort-Funktion. Wenn Ihr die Funktion für alle Quests nutzt und GetQuestId() in alles Quests einbindet, braucht Ihr Euch über die Vergabe einmaliger ID's keine Gedanken mehr machen, der Komfort-Script regelt es.
Ihr könnt alle Comfort-Funktionen z.B. im unteren Teil des Scripts platzieren. Eine aussagekräftige Kommentarüberschrift sorgt für Übersicht.

-- GetQuestID
--------------------------------------------------------------------------------------------------
function GetQuestId() -- Für id in jeden Quest einbinden.
    gvMission.QuestId = (gvMission.QuestId or 0) + 1
    return gvMission.QuestId
end

Zur S5-DEdK Übersicht

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