Beiträge von Webby

    Ich habs im Script geändert.

    Code
    Error: Can't load resource: mods/Einoed/sounds/bing.wav
    Error: Can't load sample mods/Einoed/sounds/bing.wav.
    MapSoundTrigger by Webby successfully loaded!


    Ich werde den Pfad im Trigger mal kürzen auf
    sounds/bing.wav


    Mal gucken was dann passiert.


    EDIT:
    Hmm ne, das wars auch nicht:

    Code
    Error: Can't load resource: sounds/bing.wav
    Error: Can't load sample sounds/bing.wav.
    MapSoundTrigger by Webby successfully loaded!

    Also der Lua Fehler ist soweit weg.
    Wenn ich die Testmap lade, steht in der Log:

    Code
    Error: Can't load resource: oadSample
    Error: Can't load sample oadSample.
    MapSoundTrigger by Webby successfully loaded!


    Was zum Geier ist ein oadSample?
    Hab das nirgends im Script oder im Trigger drin stehen ?(


    Hier mal das aktuelle Scirpt:
    [expander]
    [lua]
    function onCreate(self, id)
    local instance = MapSoundTrigger:new(g_server ~= nil, g_client ~= nil);
    local index = g_currentMission:addOnCreateLoadedObject(instance);
    instance:load(id);
    instance:register(true);
    print("MapSoundTrigger by Webby successfully loaded!") -- Wenn dieser Text in deiner Log zu finden ist, dann wird dein Trigger korekt geladen.
    end;


    MapSoundTrigger = {}; --Klassen am Besten mit einem Großbuchstaben beginnen


    local MapSoundTrigger_mt = Class(MapSoundTrigger, Object);


    function MapSoundTrigger:new(isServer, isClient)
    local self = Object:new(isServer, isClient, MapSoundTrigger_mt);
    self.className = "MapSoundTrigger_mt";
    return self;
    end;


    function MapSoundTrigger:load(id)
    self.id = id;
    self.soundFile = getUserAttribute(id, "soundFile");
    self.triggerId = id;
    addTrigger(self.triggerId, "TriggerCallback", self);

    self.mapSoundFile = getUserAttribute(id, "soundFile");
    self.mapSoundId = createSample("MSTrigger");
    loadSample(self.mapSoundId, mapSoundFile, false);
    self.mapSoundPlaying = false;
    self.playedSound = false;
    end;


    function MapSoundTrigger:delete()
    removeTrigger(self.triggerId);
    end;


    function MapSoundTrigger:mouseEvent(posX, posY, isDown, isUp, button)
    end;


    function MapSoundTrigger:keyEvent(unicode, sym, modifier, isDown)
    end;


    function MapSoundTrigger:TriggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
    if onEnter then
    playSample(self.mapSoundId,1,1,0);
    end;
    end;


    function MapSoundTrigger:update(dt)
    end;


    function MapSoundTrigger:draw()
    end;
    [/lua]
    [/expander]

    Ok ich versuchs mal, danke^^


    Geplant ist eigentlich, das der Sound nur einmal abgespielt wird, also bei betreten.
    Natürlich soll der Sound wieder zu hören sein, wenn man dann nochmal durchfährt.


    EDIT:
    Hmm ne, geht nicht.
    So langsam gehen mir die Ideen aus... stimmt denn der onCreate aufruf im Trigger?
    Ich hab folgendes drin stehen:
    MapSoundTrigger.onCreatemapSoundTrigger

    Ich bin mir nicht sicher, ob ich das richtig gemacht habe aber es tut sich leider nix.
    Hier mal das Script, wie es jetzt habe (Damit der Thread nicht zu lang wird, packe ich es mal in den Expander :) ):
    [expander]
    [lua]
    mapSoundTrigger = {}


    local mapSoundTrigger_mt = Class(mapSoundTrigger);


    print("MapSoundTrigger v1.0 by Webby loaded!");


    function mapSoundTrigger:onCreate(id)
    g_currentMission:addNonUpdateable(mapSoundTrigger:new(id));
    end;


    function mapSoundTrigger:new(nodeId)
    local instance = {};
    setmetatable(instance, mapSoundTrigger_mt);
    instance.triggerId = nodeId;
    addTrigger(nodeId, "triggerCallback", instance);
    instance.isEnabled = true;
    return instance;
    end;

    function mapSoundTrigger:load(id)
    self.id = id;
    self.soundFile = getUserAttribute(id, "soundFile");
    self.triggerId = id;
    addTrigger(self.triggerId, "TriggerCallback", self);

    mapSoundFile = Utils.getUserAttribute(id, "soundFile");
    self.mapSoundId = createSample("MSTrigger");
    loadSample(self.mapSoundId, mapSoundFile, false);
    self.mapSoundPlaying = false;
    self.playedSound = false;
    end;


    function mapSoundTrigger:delete()
    removeTrigger(self.triggerId);
    end;


    function mapSoundTrigger:mouseEvent(posX, posY, isDown, isUp, button)
    end;


    function mapSoundTrigger:keyEvent(unicode, sym, modifier, isDown)
    end;


    function mapSoundTrigger:TriggerCallback(triggerId, otherId, onEnter, onLeave, onStay, otherShapeId)
    if onEnter and self.isEnabled then
    if (g_currentMission.player ~= nil and otherId == g_currentMission.player.rootNode) or (g_currentMission.controlledVehicle ~= nil and otherId == g_currentMission.controlledVehicle.components[1].node) then
    if self.playedSound == false then
    playSample(self.mapSoundId,1,1,0);
    self.playedSound = true;
    end;
    else
    self.playedSound = false;
    end;
    end;
    end;


    function mapSoundTrigger:update(dt)
    end;


    function mapSoundTrigger:draw()
    end;
    [/lua]
    [/expander]


    Ich hoffe es weiß jemand Rat, ich brauche das Script für ein Mapprojekt wirklich dringend :whistling:


    LG
    Webby

    Ok, hier noch mal aktuell:
    [lua]
    local mapSoundTrigger_mt = Class(mapSoundTrigger);

    function mapSoundTrigger:onCreate(id)
    g_currentMission:addUpdateable(mapSoundTrigger:new(id));
    end;


    function mapSoundTrigger:new(nodeId)
    local self = {};
    setmetatable(self, mapSoundTrigger_mt);
    self.triggerId = nodeId;
    addTrigger(nodeId, "triggerCallback", self);
    self.isEnabled = true;
    return self;
    end;
    [/lua]


    Wobei ich nicht weiß was mit 'setmetatable' gemeint ist.
    Schade das es nirgends mal eine Auflistung gibt, wo drin steht, was man alles braucht an Funktionen wenn man einen Trigger abfragen will :(


    Es geht überings noch nicht!

    Hi,


    nachdem ich das erste Script jetzt so einigermaßen verstanden habe, wollte ich mich mal an etwas anderes ran wagen.
    Die Idee zu dem MapSoundTrigger kam mir, als ich eine Map von MH angespielt habe, auf der eine Katze auf einem Stein saß.


    Ich dachte mir, wie cool es wäre, wenn der Flohtransporter miaut, wenn man vorbei fährt/geht.


    Also hab ich mein Maya angeworfen, hab einen Würfel gebaut und diesem dann mit diesen UserAttributen ausgestattet:

    Code
    <UserAttribute nodeId="1">
    <Attribute name="soundFile" type="string" value="Sounds/sound.wav"/>
    <Attribute name="onCreate" type="scriptCallback" value="MapSoundTrigger.onCreateMSTrigger"/>
    </UserAttribute>


    Dann hab ich mir einige Scripts angeguckt, die auf Trigger zugreifen.
    Dabei ist folgendes raus gekommen:


    [lua]
    MSTrigger = {}


    function mapSoundTrigger:load(id)
    self.id = id;
    self.soundFile = getUserAttribute(id, "soundFile");
    self.triggerId = id;
    addTrigger(self.triggerId, "TriggerCallback", self);

    mapSoundFile = Utils.getUserAttribute(id, "soundFile");
    self.mapSoundId = createSample("MSTrigger");
    loadSample(self.mapSoundId, mapSoundFile, false);
    self.mapSoundPlaying = false;
    self.playedSound = false;
    end;


    function mapSoundTrigger:delete()
    removeTrigger(self.triggerId);
    end;


    function mapSoundTrigger:TriggerCallback(triggerId, otherId, onEnter, onLeave, onStay, otherShapeId)
    if onEnter then
    if self.playedSound == false then
    playSample(self.mapSoundId,1,1,0);
    self.playedSound = true;
    end;
    else
    self.playedSound = false;
    end;
    end;
    [/lua]


    Hab den Trigger testweise in eine Map verbaut, den richtigen Pfad zur Sounddatei eingegeben und aus dem Script eine ZIP (mit allem drum und dran) gemacht.
    Nach Spielstart bleibt die Log sauber aber ich höre keinen Ton weder beim fahren noch beim gehen.


    Also wende ich mich wieder mal optimistisch an euch :love:
    Wäre nett, wenn da mal jemand drüber fliegen könnte...


    cu
    Webby

    Hmm..ok, also ich hab das Ganze jetzt erstmal in den draw Bereich gepackt und zwar so:
    [lua]
    function lowFuelIndicator:draw()
    if self.fuelFillLevel <= (self.fuelCapacity / 100) * 90 then -- 90% nur zu Testzwecke
    self.lowFuelIndicatorHud:render(); -- Ruft das overlayHud auf
    if self.playedSound == false then
    playSample(self.lowFuelSoundId,1,1,0);
    self.playedSound = true;
    else
    self.playedSound = false;
    end;
    end;
    end;
    [/lua]


    Im load Bereich habe ich zusätzlich noch:
    [lua]
    self.playedSound = false;
    [/lua]
    ..nachgetragen aber es ändert sich nicht, wird immernoch x mal abgespielt.

    öhm, eine passende Variable habe ich doch drin mit:
    [lua]self.lowFuelSoundPlaying = false;[/lua]


    Aber ich versuchs mal mit dem ELSE, von der Logik her sollte es so gehen..


    Ich bin eigentlich davon aus gegangen, das die erste 1 (die ja für Loops (Wiederholungen)) steht ausreicht aber war nicht so ^^


    EDIT: Die GIANTS Scriptdoku geht überings wieder :)

    Hi,


    ich habe das lowFuelIndicator Script etwas erweitert.
    Es wird jetzt bei erreichen/unterschreiten der % Zahl ein OverlayHud Bild eingeblendet und ein Sound abgespielt.
    Leider wiederholt sich der Sound so lange, bis der Tank wieder voll ist bzw die %-Zahl überschritten ist.
    Der Sound soll aber nur 1 mal abgespielt werden (optional vielleichts sogar 1 mal alle 60 Sekunden :) ).


    Ich habe folgenden Code in der load Funktion:
    [lua]
    lowFuelSoundFile = Utils.getFilename("Sounds/fuelIndicator_bing.wav", self.baseDirectory);
    self.lowFuelSoundId = createSample("LFSound");
    loadSample(self.lowFuelSoundId, lowFuelSoundFile, false);
    self.lowFuelSoundPlaying = false;
    [/lua]


    In der draw Funktion innerhalb der IF Bedingung steht folgendes:
    [lua]
    playSample(self.lowFuelSoundId,1,1,0);
    [/lua]


    Ich habe versucht mehr über die einzelnen Bezeichnungen raus zu finden aber leider ist die GIANTS Script Doku z.Z. nicht erreichbar :(


    Hat jemand einen Tipp für mich?


    cu
    Webby

    Japp, funzt :D


    Ich danke euch allen vielmals für eure Tipps und eure Geduld :thumbsup:
    Gleich (in der Halbzeit :D ) versuche ich noch die Implementierung eines hudOverlays und eines Warntones.
    Dann bin ich glücklich und werde sicher weiter machen mit dem Scriptkram :love: