Sprache Deutsch Language English

Script Dokumentation LS 2015 - FillTrigger (Patch 1.3)

Script Dokumentation Übersicht

scripts/triggers/FillTrigger.lua

Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1-- FillTrigger class
2--
3-- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved.
4
5FillTrigger = {}
6
7local FillTrigger_mt = Class(FillTrigger);
8
9function FillTrigger:onCreate(id)
10 local trigger = FillTrigger:new();
11 if trigger:load(id) then
12 g_currentMission:addNonUpdateable(trigger);
13 else
14 trigger:delete();
15 end
16end;
17
18function FillTrigger:new(mt)
19 local self = {};
20 if mt == nil then
21 mt = FillTrigger_mt;
22 end
23 setmetatable(self, mt);
24
25 self.triggerId = 0;
26 self.nodeId = 0;
27
28 self.moneyChangeId = getMoneyTypeId();
29
30 return self;
31end;
32
33function FillTrigger:load(nodeId, fillType, parent)
34 self.nodeId = nodeId;
35
36 self.triggerId = Utils.indexToObject(nodeId, getUserAttribute(nodeId, "triggerIndex"));
37 if self.triggerId == nil then
38 self.triggerId = nodeId;
39 end
40 addTrigger(self.triggerId, "triggerCallback", self);
41
42 if fillType ~= nil then
43 self.fillType = fillType;
44 else
45 self.fillType = Fillable.FILLTYPE_UNKNOWN;
46 local fillTypeStr = getUserAttribute(nodeId, "fillType");
47 if fillTypeStr ~= nil then
48 local desc = Fillable.fillTypeNameToDesc[fillTypeStr];
49 if desc ~= nil then
50 self.fillType = desc.index;
51 end;
52 end
53 end;
54
55 self.parent = parent;
56
57 self.isSiloTrigger = Utils.getNoNil(getUserAttribute(nodeId, "isSiloTrigger"), false);
58
59 self.isEnabled = true;
60
61 return true;
62end;
63
64function FillTrigger:delete()
65 removeTrigger(self.triggerId);
66end;
67
68function FillTrigger:triggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
69 if self.isEnabled and (onEnter or onLeave) then
70 local fillable = g_currentMission.objectToTrailer[otherShapeId];
71 if fillable ~= nil and fillable.addFillTrigger ~= nil and fillable.removeFillTrigger ~= nil and fillable ~= self.parent then
72 if onEnter then
73 fillable:addFillTrigger(self);
74 else -- onLeave
75 fillable:removeFillTrigger(self);
76 g_currentMission:showMoneyChange(self.moneyChangeId);
77 end;
78 end;
79 end;
80end;
81
82function FillTrigger:fill(tool, delta)
83
84 if not tool:allowFillType(self.fillType, false) then
85 return 0.0;
86 end
87 local oldFillLevel = tool:getFillLevel(self.fillType);
88 if self.isSiloTrigger then
89 local silo = g_currentMission:getSiloAmount(self.fillType);
90 delta = math.min(delta, silo);
91 if delta > 0 then
92 tool:setFillLevel(oldFillLevel + delta, self.fillType, true);
93 delta = tool:getFillLevel(self.fillType) - oldFillLevel;
94
95 g_currentMission:setSiloAmount(self.fillType, silo - delta);
96 end
97 elseif self.parent ~= nil then
98 if self.parent.fillLevel > 0 then
99 delta = math.min(delta, self.parent.fillLevel);
100 if delta > 0 then
101 tool:setFillLevel(oldFillLevel + delta, self.fillType, true);
102 delta = tool:getFillLevel(self.fillType) - oldFillLevel;
103
104 self.parent:setFillLevel(self.parent.fillLevel - delta, self.fillType, true);
105 end
106 end;
107 else
108 tool:setFillLevel(oldFillLevel + delta, self.fillType, true);
109 delta = tool:getFillLevel(self.fillType) - oldFillLevel;
110
111 local fillTypeDesc = Fillable.fillTypeIndexToDesc[self.fillType]
112 if fillTypeDesc ~= nil then
113
114 local price = delta*fillTypeDesc.pricePerLiter;
115 g_currentMission.missionStats:updateStats("expenses", price);
116 g_currentMission:addSharedMoney(-price, "other");
117 g_currentMission:addMoneyChange(-price, self.moneyChangeId);
118 end
119 end
120
121 return delta;
122end
123
124function FillTrigger:getIsActivatable(fillable)
125 if not fillable:allowFillType(self.fillType, false) or (self.isSiloTrigger and g_currentMission:getSiloAmount(self.fillType) <= 0) or (self.parent ~= nil and self.parent.fillLevel <= 0) then
126 return false;
127 end;
128 return true;
129end;
Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
Script Dokumentation Übersicht