-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUPK_DumpTrigger.lua
170 lines (136 loc) · 5.44 KB
/
UPK_DumpTrigger.lua
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
-- by mor2000
-- DumpTrigger (for dumping stuff out of shovels and combines)
local UPK_DumpTrigger_mt = ClassUPK(UPK_DumpTrigger,UniversalProcessKit)
InitObjectClass(UPK_DumpTrigger, "UPK_DumpTrigger")
UniversalProcessKit.addModule("dumptrigger",UPK_DumpTrigger)
function UPK_DumpTrigger:new(nodeId, parent)
local self = UniversalProcessKit:new(nodeId, parent, UPK_DumpTrigger_mt)
registerObjectClassName(self, "UPK_DumpTrigger")
-- acceptedFillTypes
self.acceptedFillTypes = {}
local acceptedFillTypesArr = getArrayFromUserAttribute(nodeId, "acceptedFillTypes")
for _,fillType in pairs(UniversalProcessKit.fillTypeNameToInt(acceptedFillTypesArr)) do
self:print('accepting '..tostring(UniversalProcessKit.fillTypeIntToName[fillType])..' ('..tostring(fillType)..')')
self.acceptedFillTypes[fillType] = true
--self.fillTypesConversionMatrix = self.fillTypesConversionMatrix + FillTypesConversionMatrix:new(fillType)
end
-- add/ remove if dumping
self.addIfDumping = {}
self.useAddIfDumping = false
local addIfDumpingArr = getArrayFromUserAttribute(nodeId, "addIfDumping")
for _,fillType in pairs(UniversalProcessKit.fillTypeNameToInt(addIfDumpingArr)) do
self:print('add if dumping '..tostring(UniversalProcessKit.fillTypeIntToName[fillType])..' ('..tostring(fillType)..')')
self.addIfDumping[fillType] = true
self.useAddIfDumping = true
end
self.removeIfDumping = {}
self.useRemoveIfDumping = false
local removeIfDumpingArr = getArrayFromUserAttribute(nodeId, "removeIfDumping")
for _,fillType in pairs(UniversalProcessKit.fillTypeNameToInt(removeIfDumpingArr)) do
self:print('remove if dumping '..tostring(UniversalProcessKit.fillTypeIntToName[fillType])..' ('..tostring(fillType)..')')
self.removeIfDumping[fillType] = true
self.useRemoveIfDumping = true
end
-- revenues
self.revenuePerLiter = getNumberFromUserAttribute(nodeId, "revenuePerLiter", 0)
self.revenuesPerLiter = {}
local revenuesPerLiterArr = getArrayFromUserAttribute(nodeId, "revenuesPerLiter")
for i=1,#revenuesPerLiterArr,2 do
local revenue=tonumber(revenuesPerLiterArr[i])
local fillType=unpack(UniversalProcessKit.fillTypeNameToInt(revenuesPerLiterArr[i+1]))
if revenue~=nil and fillType~=nil then
self.revenuesPerLiter[fillType] = revenue
end
end
local revenues_mt = {
__index=function(t,k)
return self.revenuePerLiter
end
}
setmetatable(self.revenuesPerLiter,revenues_mt)
self.preferMapDefaultRevenue = getBoolFromUserAttribute(nodeId, "preferMapDefaultRevenue", false)
self.revenuePerLiterMultiplier = getVectorFromUserAttribute(nodeId, "revenuePerLiterMultiplier", "1 0.5 0.25")
self.revenuesPerLiterAdjusted = {}
self.statName=getStringFromUserAttribute(nodeId, "statName")
local validStatName=false
if self.statName~=nil then
for _,v in pairs(FinanceStats.statNames) do
if self.statName==v then
validStatName=true
break
end
end
end
if not validStatName then
self.statName="other"
end
-- dummies for combines
self.fillRootNode = nodeId
self.exactFillRootNode = nodeId
self.fillAutoAimTargetNode = nodeId
self.exactFillRootNode = nodeId
self.allowFillFromAir=true
g_currentMission.nodeToVehicle[nodeId]=self -- combines
g_currentMission.objectToTrailer[nodeId]=self -- trailers
-- check collision mask
local collisionMask_old = getCollisionMask(nodeId)
local collisionMask_new = collisionMask_old
local trigger_fillable = 8388608
if bitAND(collisionMask_new,trigger_fillable)==0 then
self:print('Warning: the dumptrigger shape has to be have the collision mask of a fillable object (fixed)')
collisionMask_new = collisionMask_new + trigger_fillable
end
if collisionMask_new ~= collisionMask_old then
self:print('Warning: set collisionMask to '..tostring(collisionMask_new)..' (you may want to fix that)')
setCollisionMask(nodeId,collisionMask_new)
end
self:print('loaded DumpTrigger successfully')
return self
end
function UPK_DumpTrigger:delete()
g_currentMission.nodeToVehicle[self.nodeId]=nil
g_currentMission.objectToTrailer[self.nodeId]=nil
UPK_DumpTrigger:superClass().delete(self)
end
function UPK_DumpTrigger:getAllowFillFromAir()
--self:print('UPK_DumpTrigger:getAllowFillFromAir')
return self.isEnabled
end
function UPK_DumpTrigger:getIsAttachedTo(combine)
return false
end
function UPK_DumpTrigger:getAllowShovelFillType(fillType)
return self.isEnabled and self:allowFillType(fillType)
end
function UPK_DumpTrigger:resetFillLevelIfNeeded(fillType)
self.interestedInFillType = fillType
end
UPK_DumpTrigger.getRevenuePerLiter = UPK_TipTrigger.getRevenuePerLiter
function UPK_DumpTrigger:setFillLevel(newFillLevel, fillType)
--self:print('UPK_DumpTrigger:setFillLevel('..tostring(newFillLevel)..', '..tostring(fillType)..')')
local oldFillLevel = self:getFillLevel(fillType)
local deltaFillLevel = self:addFillLevel(newFillLevel - oldFillLevel, fillType)
self.interestedInFillType = nil
local revenuePerLiter = self:getRevenuePerLiter(fillType)
if deltaFillLevel~=0 then
if revenuePerLiter~=0 then
local revenue = deltaFillLevel * revenuePerLiter
g_currentMission:addSharedMoney(revenue, self.statName)
end
if self.useAddIfDumping then
for fillTypeToAdd,v in pairs(self.addIfDumping) do
if v then
self:addFillLevel(deltaFillLevel,fillTypeToAdd)
end
end
end
if self.useRemoveIfDumping then
for fillTypeToRemove,v in pairs(self.removeIfDumping) do
if v then
self:addFillLevel(-deltaFillLevel,fillTypeToRemove)
end
end
end
end
return deltaFillLevel
end