Missionsskript

Zur Missionsgenerierung wird von dir eine spezielle Funktion beim Mission Manager registriert. Dabei kannst du die Funktion selbst oder diese Funktion zurückgebenden Skript angeben. Detailiert ist dies im Abschnitt Registrieren beschrieben.

Funktionskopf

Der Funktionskopf deines Missionsskripts muss folgende Syntax besitzen:

function(mission, taskManager, medalManager)

Das Argument mission ist das Missionsobjekt wie in Mission beschrieben. Eine Instanz des Task Manager wird als zweites Argument übergeben. Der medalManager wird zur Generierung individueller Medaillen verwenden, siehe dazu auch Abschnitt Medaillen. Alle Mods sind über Namespacing von einander isoliert, sodass keine persönlichen Prefixe nötig sind.

Beispiel

Als Beispiel sei hier das Skript der Template Mission gezeigt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
local missionutil = require("missionutil")

return function(mission, taskManager, medalManager)
	local countForReward	= 10
	local countMedalA		= 5
	local countMedalB		= 20
	local reward			= 1000000
	
	local medalA = medalManager:createMedal( _("Meh"), string.format(_("Only %d times? You can do better!"), countMedalA))
	local medalB = medalManager:createMedal( _("+1"),  _("Gotta pump those numbers up. Those are rookie numbers!"))

	local function makeIdleClickerTask()
		local function inc(taskManager, task)
			taskManager:getUserState().count		= taskManager:getUserState().count			+ 1
			taskManager:getUserState().totalClicks	= taskManager:getUserState().totalClicks	+ 1
			
			return true 
		end
		
		local function dec(taskManager, task)
			taskManager:getUserState().count		= taskManager:getUserState().count			- 1
			taskManager:getUserState().totalClicks	= taskManager:getUserState().totalClicks	+ 1
			
			return true 
		end
		
		local info = {
			name = _("Idle Clicker"),
			paragraphs = {
				{ text = _("Click the correct button and change your score!") }, 
				{ type = "HINT", text = _("There is a reward for doing that :)") },			
			},
			options = {
				{ _("i++"), inc },
				{ _("i--"), dec }
			}
		}

		local task = missionutil.makeTask(info)
		
		task.init = function (taskManager, data)
			taskManager:getUserState().count = 0
			taskManager:getUserState().totalClicks = 0
		end	
		
		task.update = function (taskManager)
			local count			= taskManager:getUserState().count or 0
			local totalClicks	= taskManager:getUserState().totalClicks or 0
		
			if not task.hasMedal(medalA) and totalClicks >= countMedalA then
				task.addMedal(medalA)
			end
			
			if not task.hasMedal(medalB) and totalClicks >= countMedalB then
				task.addMedal(medalB)
			end
		
			if count == countForReward then
				count = 0
				game.interface.book( reward )
			end
			if count == -countForReward then
				count = 0
				game.interface.book( -reward )
			end
			
			task.setProgressText( tostring( count ) .. " / " .. tostring(totalClicks) )
			taskManager:getUserState().count = count
		end

		return task
	end

	taskManager:register("idleClicker", makeIdleClickerTask)
	
	mission.onInit(function()
		taskManager:add("idleClicker")		
	end)
end