Sprache Deutsch Language English

Script Dokumentation LS 2015 - WaterTrailerFillTrigger (Patch 1.3)

Script Dokumentation Übersicht

scripts/triggers/WaterTrailerFillTrigger.lua

Copyright (c) 2008-2015 GIANTS Software GmbH, Confidential, All Rights Reserved.
This document is to be published solely by ls-mods.de
1-- WaterTrailerFillTrigger class
2--
3-- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved.
4
5WaterTrailerFillTrigger = {}
6
7local WaterTrailerFillTrigger_mt = Class(WaterTrailerFillTrigger);
8
9function WaterTrailerFillTrigger:onCreate(id)
10 g_currentMission:addNonUpdateable(WaterTrailerFillTrigger:new(id));
11end;
12
13function WaterTrailerFillTrigger:new(nodeId, trailer)
14 local self = {};
15 setmetatable(self, WaterTrailerFillTrigger_mt);
16
17 self.triggerId = nodeId;
18 addTrigger(nodeId, "triggerCallback", self);
19
20 self.priceScale = Utils.getNoNil(getUserAttribute(nodeId, "priceScale"), 1);
21
22 self.trailer = trailer;
23
24 self.triggeredTrailers = {};
25
26 self.isEnabled = true;
27
28 return self;
29end;
30
31function WaterTrailerFillTrigger:delete()
32 for trailer, _ in pairs(self.triggeredTrailers) do
33 if trailer.removeWaterTrailerFillTrigger ~= nil then
34 trailer:removeWaterTrailerFillTrigger(self);
35 end
36 end
37 removeTrigger(self.triggerId);
38end;
39
40function WaterTrailerFillTrigger:onVehicleDeleted(vehicle)
41 self.triggeredTrailers[vehicle] = nil;
42end
43
44function WaterTrailerFillTrigger:fillWater(vehicle, delta)
45
46 if not vehicle:allowFillType(Fillable.FILLTYPE_WATER, false) then
47 return 0;
48 end
49
50 if self.trailer ~= nil then
51 local trailerWaterFillLevel = self.trailer:getFillLevel(Fillable.FILLTYPE_WATER);
52 if trailerWaterFillLevel > 0 then
53 delta = math.min(delta, trailerWaterFillLevel);
54 if delta <= 0 then
55 return 0;
56 end
57 else
58 return 0;
59 end
60 end
61
62 local oldFillLevel = vehicle:getFillLevel(Fillable.FILLTYPE_WATER);
63 vehicle:setFillLevel(oldFillLevel + delta, Fillable.FILLTYPE_WATER);
64 delta = vehicle:getFillLevel(Fillable.FILLTYPE_WATER) - oldFillLevel;
65
66 if delta > 0 then
67 if self.trailer ~= nil then
68 self.trailer:setFillLevel(self.trailer:getFillLevel(Fillable.FILLTYPE_WATER) - delta, Fillable.FILLTYPE_WATER);
69 elseif self.priceScale > 0 then
70 local price = delta * g_waterPricePerLiter * self.priceScale;
71 g_currentMission.missionStats:updateStats("expenses", price);
72 g_currentMission:addSharedMoney(-price, "other");
73 end
74 end
75 return delta;
76end
77
78function WaterTrailerFillTrigger:getIsActivatable(vehicle)
79 if self.trailer ~= nil then
80 if self.trailer:getFillLevel(Fillable.FILLTYPE_WATER) <= 0 then
81 return false;
82 end
83 end
84 if not vehicle:allowFillType(Fillable.FILLTYPE_WATER, false) then
85 return false;
86 end
87 return true;
88end
89
90function WaterTrailerFillTrigger:triggerCallback(triggerId, otherActorId, onEnter, onLeave, onStay, otherShapeId)
91 if self.isEnabled and (onEnter or onLeave) then
92
93 local waterTrailer = g_currentMission.objectToTrailer[otherShapeId];
94
95 if waterTrailer ~= nil and waterTrailer ~= self.trailer and waterTrailer.addWaterTrailerFillTrigger ~= nil and waterTrailer.removeWaterTrailerFillTrigger ~= nil then
96 if onEnter then
97 self.triggeredTrailers[waterTrailer] = waterTrailer;
98 waterTrailer:addWaterTrailerFillTrigger(self);
99 else -- onLeave
100 self.triggeredTrailers[waterTrailer] = nil;
101 waterTrailer:removeWaterTrailerFillTrigger(self);
102 end;
103 end;
104 end;
105end;
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