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
|