Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorials:jobs

Funktionen (Jobs)

Ritter Lanzelot

Funktionen und Jobs sind im weitesten Sinne eigentlich das Gleiche.

Eine Funktion beginnt mit der Zeile

function Name()

und endet mit dem

end

Also:

function Name()
end
 
--oder auch:
 
Name = function()
       end

Theoretisch ist das schon eine fertige Funktion, allerdings macht das so keinen Sinn…

Eine sinnvolle Funktion ist zum Beispiel:

function CreateRaeuber()
	RaeuberOne()
	RaeuberTwo()
	RaeuberThree()
	StartSimpleJob("PruefungObRaeuberBandenTot")
end
 
--oder:
 
function CreateArmyZero()
	local armyZero = {
        player      = 2,
        id          = 0,
        strength    = 4,
        position    = GetPosition("armyZero"),
        rodeLength  = 500,
    };
 
	SetupArmy(armyZero)
 
 
	local troopDescription = {
        maxNumberOfSoldiers = 4,
        minNumberOfSoldiers = 0,
        experiencePoints    = LOW_EXPERIENCE,
        leaderType          = Entities.CU_Barbarian_LeaderClub2,
    };
 
	for i = 1, 4 do
		EnlargeArmy(armyZero,troopDescription)
	end
 
	Defend(armyZero)
end

Eine Funktion wird allerdings erst dann ausgeführt, wenn sie im Spiel auch aufgerufen wird. Dies wird in den meisten Fällen innerhalb einer weiteren Funktion passieren.

Ein typisches Beispiel dafür ist die Funktion FirstMapAction(), welche vom Spiel (im Singleplayermodus) automatisch ausgeführt wird. In diese Funktion schreibt man nun Aufrufe für andere Funktionen wie zb. CreatePlayer() CreateArmyZero() …..

Eine Funktion wird also mit Ihrem Namen und den Klammern aufgerufen. Sie wird dann genau einmal ausgeführt.

Will man, dass die Funktion regelmäßig (und zwar jede Sekunde) ausgeführt wird, ruft man sie als SimpleJob auf: StartSimpleJob(„CreateArmyZero“). Wie Ihr sehen könnt, wird der Name der Funktion hier als String übergeben, es werden auch die Klammern weg gelassen.

Übrigens: Funktionen, die jede 1/10-Sekunde ausgeführt werden, startet man mit einem sog. HiRes-Job, mit StartSimpleHiResJob. Aber Vorsicht: SimpleHiResJobs können mitunter die Performance eines Rechners belasten und sollten deshalb ggf. nur kurze Zeit laufen.

Als Test für einen SimpleJob könnt Ihr ja mal folgendes machen:

Baut Euch eine kleine 64er Karte mit nix weiter drauf als einer XD_ScriptEntity mit dem Namen armyZero, kopiert die Funktion CreateArmyZero in das Script und ruft die Funktion in FirstMapAction auf. Wenn Ihr das Spiel startet, bekommt Ihr genau eine Armee.

Wenn Ihr jetzt aus dem Funktionsaufruf einen SimpleJob-Aufruf macht, bekommt Ihr jede Sekunde eine Armee.

Und das Ganze mit ein und der selben Funktion….

Nun sollte man allerdings aufpassen, dass man nicht zu viele Jobs gleichzeitig am Laufen hat, und Jobs, die keinen Sinn mehr machen, sollte man auch beenden. Wenn man zBsp. mehrere Gegner im Spiel hat und fragt nun ständig für jeden Gegner gewisse Sachen ab :

Code:

 
function OpenPrison()
    if IsDead("player2") then
        DestroyEntity( "PrisonGate" ) 
        ResolveBriefing(BriefingMonkMarker)
        return true
    end
end

dann sollte man den Job mit return true auch beenden, sobald die Bedingung erfüllt ist. In diesem Fall hier - wenn der Player2 tot ist und das „Gefängnis“ geöffnet, brauche ich auch nicht mehr fragen.


Siehe auch



zurück zur Übersicht: Zur Tutorial-Übersicht

tutorials/jobs.txt · Zuletzt geändert: 2021/09/18 19:16 (Externe Bearbeitung)