Probleme mit Ship.oncreate

  • Hallo LS Gemeinde,



    Ich wollte mein eigenes ship.oncreate lua erstellen.
    Habe es mit modDesc.xml als script bzw. extrasource file gelinkt.
    Dann habe ich das Originale genommen
    http://www.ls-mods.de/scriptDo…=objects/Ship&language=de


    Habe dort das Wort zu z.B. truck geändert. Alle ersetz.
    Dann ein spline erstellt und statt Ship.onCreate mein erstelltes Truck.onCreate
    als script callback genommen und nichts passiert.
    Funktioniert nicht.
    Um mich zu vergewissern, daß der spline funktioniert habe ich Ship.onCreate genommen. Das funktioniert.
    Dann kann eigentlich irgendwas mit dem erstellten Truck.onCreate script falsch sein.


    Das verstehe ich nun gar nicht. Kann es sein, daß die scripte auf dieser Seite http://www.ls-mods.de/scriptDocumentation.php?language=de
    nicht funktionieren? Oder habe ich bei Änderung des Wortes von ship auf Truck etwas falsch gemacht?


    Würde mich auf eure Ratschläge freuen.


    mfg,


    Geo

  • Wäre vielleicht hilfreich wenn du deine veränderte LUA hier posten würdest ;)



    Ansonsten ändere mal diese Zeile:
    [lua]
    function Truck:onCreate(id)
    g_currentMission:addUpdateable(Truck:new(id));
    print("created Truck, id: ", id);
    end;
    [/lua]


    Indem du das print wieder aktiv setzt.. Dann siehst du in der Log gleich ob das onCreate überhaupt aufgerufen wird oder nicht. Wenn nicht, versuche es mal so:


    [lua]
    function onCreate(self, id)
    g_currentMission:addUpdateable(Truck:new(id));
    print("created Truck, id: ", id);
    end;
    [/lua]


    Dann in der i3d NAME_DER_ZIP.onCreate. Alternativ das Script so lassen und mit NAME_DER_ZIP.Truck.onCreate versuchen aber keine Ahnung ob das geht :whistling:


    LG

  • Danke für die schnelle Antwort modelleicher,



    Ich habe in dem script alles mit ship auf truck geändert.
    Das ist alles.


    Ship = {}
    local Ship_mt = Class(Ship);


    Mußt du denn auch nicht oben die Wörter Ship auf Truck ändern?
    Oder bleiben die bei Ship?


    Auch bei dem Rest des scripts muß doch ship auf Truck geändert so viel ich weiß.


    Ich versuche mal deine Version. Vielleicht klappt es ja.


    mfg,


    Geo

  • Naja wenn du fragst ob du vielleicht beim von ship auf truck ändern was falsch gemacht haben könntest wäre es hald gut die LUA zu sehen.. ;) Wenn du alles von ship auf truck änderst funktioniert das Script genau so wie vorher auch..


    Wenn du von Ship auf Truck änderst musst du alles was Ship heißt auf Truck ändern um keine Fehler zu verursachen. Meine Version ist ja auch nur ein Ausschnitt aus dem Script, eben der Ausschnitt der verändert werden muss.



    Das Problem ist meiner Meinung nach der onCreate Aufruf, der funktioniert beim Mod nicht exakt gleich wie beim fest ins Spiel integrierten Script. Daher findet der LS das onCreate nicht wenn du die Scripte 1:1 übernimmst. Daher mein Änderungsvorschlag. Ist aber schon ne Weile her dass ich mit Map-Scripten gebastelt hab..



    LG

  • Dann in der i3d NAME_DER_ZIP.onCreate. Alternativ das Script so lassen und mit NAME_DER_ZIP.Truck.onCreate versuchen aber keine Ahnung ob das geht :whistling:

    Wenn ich deine Version versuche dann gibt er mir den Fehler an:


    scripts/Truck.lua:5: attempt to index global 'Truck' (a nil value)


    script wird schon geladen aber es funktioniert nicht.

  • Das onCreate muss unterhalb davon stehen:
    Truck = {}
    local Truck _mt = Class(Truck );


    Sonst kennt er Truck noch nicht und kann es entsprechend nicht laden.


    Zitat

    script wird schon geladen aber es funktioniert nicht.


    Hast du mal ein Print im onCreate versucht und geschaut ob das aufgerufen wird? Das onCreate wird von der Spline aufgerufen blöd gesagt, und wenn die Spline das onCreate nicht findet ist zwar das Script da und die Spline da aber die beiden verbindet nix. Das onCreate ist die Verbindung, also muss das entsprechend passen.


    Poste doch bitte in Zukunft einfach die jeweilige Version deines Scripts auch wenn da nix anderes drin ist als Truck anstatt Ship und die geänderte Zeile von mir.. Das macht das ganze einfacher :D



    LG

  • Hier ist der script


    -- Copyright (C) GIANTS Software GmbH, Confidential, All Rights Reserved.
    Truck = {}
    local Truck_mt = Class(Truck);


    function onCreate(self, id)
    g_currentMission:addUpdateable(Truck:new(id));
    print("created Truck, id: ", id);
    end;


    function Truck:new(id)
    local instance = {};
    setmetatable(instance, Truck_mt);
    instance.nurbsId = getChildAt(id, 0);
    instance.truckIds = {};
    table.insert(instance.truckIds, getChildAt(id, 1));
    instance.times = {};
    table.insert(instance.times, 0);
    local length = getSplineLength(instance.nurbsId);
    instance.timeScale = (Utils.getNoNil(getUserAttribute(id, "speed"), 10)/3.6);
    local numTrucks = Utils.getNoNil(getUserAttribute(id, "numTrucks"), 1);
    for i=2,numTrucks do
    local truckId = clone(instance.truckIds[1], false, true);
    link(id, truckId);
    table.insert(instance.truckIds, truckId);
    table.insert(instance.times, (1/numTrucks)*(i-1));
    end;
    if length ~= 0 then
    instance.timeScale = instance.timeScale/length;
    end;
    instance.initCount = 0;
    return instance;
    end;


    function Truck:delete()
    end;


    function Truck:update(dt)
    -- Avoid depth buffer of the water shader (initial one frame delay)
    if self.initCount > 0 then
    for i=1, table.getn(self.truckIds) do
    self.times[i] = self.times[i] - 0.001*dt*self.timeScale;
    local x,y,z = getSplinePosition(self.nurbsId, self.times[i]);
    local rx,ry,rz = getSplineOrientation(self.nurbsId, self.times[i], 0, -1, 0);
    setTranslation(self.truckIds[i], x, y, z);
    setRotation(self.truckIds[i], rx, ry, rz);
    end;
    else
    self.initCount = self.initCount + 1;
    end;
    end;

  • Ich dachte den Fehler gefunden zu haben.
    Ich habe numShips oben angegeben statt
    numTrucks.
    Das muß ja dementsprechend auch bei GE geändert werden.


    Leider hat das auch nicht geholfen. Ich versuche mal die originalen Zeilen wieder.





    function Truck:onCreate(id)
    g_currentMission:addUpdateable(Truck:new(id));
    print("created Truck, id: ", id);
    end;
    Vielleicht klappt das.


    Melde mich gleich wieder.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!