Page 1 of 1

WeighStation Trigger für LS19

Posted: Fri Jan 18, 2019 6:40 pm
by TopAce888
Hallo liebe Community,
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? :hmm:

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

WeighStation Trigger für LS19

Posted: Sun May 05, 2019 2:23 pm
by MeikoHuppix
bist du iwie weiter gekommen? hab gerade genau das gleiche problem glaub ich :D
das mit den scripten überfordert mich doch ziehmlich abundzu.

Re: WeighStation Trigger für LS19

Posted: Sun May 05, 2019 3:11 pm
by Trax
Über ein Callback werden meines wissens nur Scripte für in die Map fest integrierte Objekte abgerufen und funktionieren nicht mit Fahrzeugen oder platzierbaren Objekten, dafür müsste das Script umgeschrieben werden.