ich versuche mich grad an einer platzierbaren Version einer Waage. Ich dachte, es könnte so einfach sein. Ich habe alles fertig gemacht, Trigger platziert, mittels Scriptcallback das Waage-Skript geladen, aber leider keine (fehlerfreie) Funktion. Das Skript wird sofort beim Platzieren geladen, und nicht erst beim Befahren des Triggers. Daraufhin habe ich es mal direkt in meiner Modmap platziert und siehe da, grundsätzlich funktioniert es.
Es gibt nun leider keinen entsprechenden Typ den ich als "placeable" eintragen kann. Daraufhin habe ich mich mal im GDN schlau gemacht und dort gibt es im LUADOC für den 19er etwas zum Skript für die Waage. Doch leider übersteigt das jetzt (noch) meine Fähigkeiten. Wie bekomme ich das denn jetzt in die platzierbare Version der Waage?
Der Code sieht wie folgt aus und wird auch über die modDesc.xml geladen. Fehlermeldungen gibt es keine. Allerdings frage ich mich halt, woher das Skript auch wissen soll, welche TriggerID und weightDisplayIndex gemeint sind?
Code: Select all
-- by Giants/TopAce (from GDN)
-- https://gdn.giants-software.com/documentation_scripting_fs19.php?version=engine&category=67&class=7187
-- V1.0.0.0
print(" + + +");
print(" + + + Loading WeighingStation script");
print(" + + +");
WeighStation = {};
local WeighStation_mt = Class(WeighStation);
function WeighStation:onCreate(id)
g_currentMission:addNonUpdateable(WeighStation:new(id))
end
function WeighStation:new(triggerId)
local self = {}
setmetatable(self, WeighStation_mt)
local nodeId = triggerId
self.triggerId = triggerId
addTrigger(triggerId, "triggerCallback", self)
self.isEnabled = true
self.triggerVehicles = {}
local weightDisplayIndex = getUserAttribute(nodeId, "weightDisplayIndex")
if weightDisplayIndex ~= nil then
self.displayNumbers = I3DUtil.indexToObject(nodeId, weightDisplayIndex)
end
return self
end
function WeighStation:delete()
if self.triggerId ~= nil then
removeTrigger(self.triggerId)
self.triggerId = nil
end
end
function WeighStation:updateDisplayNumbers(mass)
if self.displayNumbers ~= nil then
I3DUtil.setNumberShaderByValue(self.displayNumbers, math.floor(mass), 0)
end
end
function WeighStation:updateWeight()
local mass = 0
for vehicle, _ in pairs(self.triggerVehicles) do
mass = mass + vehicle:getTotalMass()
end
self:updateDisplayNumbers(mass*1000)
end
function WeighStation:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
if self.isEnabled and (onEnter or onLeave) then
local vehicle = g_currentMission.nodeToObject[otherId]
if onEnter then
if vehicle ~= nil then
if self.triggerVehicles[vehicle] == nil then
self.triggerVehicles[vehicle] = 0
end
self.triggerVehicles[vehicle] = self.triggerVehicles[vehicle] + 1
end
else
if vehicle ~= nil then
self.triggerVehicles[vehicle] = self.triggerVehicles[vehicle] - 1
if self.triggerVehicles[vehicle] == 0 then
self.triggerVehicles[vehicle] = nil
end
end
end
self:updateWeight()
end
end