Login / Registrieren
DE EN FR ES IT CZ
Zurück Nach oben

Scriptfehler Deponia-Interface

  • #10, by afrlme 14 years ago Zitieren
    I don't know exactly what you want & it's kind of hard to explain on account of me not knowing much German or you not knowing much English but if you could explain exactly what you want in some more detail then maybe I or someone else could help.

    Could explain in German & maybe SimonS could give you an example of what you need to do - if he's not too busy? (probably is mind)
  • #11, by superscheibenkleiste 14 years ago Zitieren
    Ich versuch's erstmal auf Deutsch:
    An alle die mich verstehen können:
    Wie auch in Deponia, möchte ich mein Inventar automatisch verstecken (hochscrollen), wenn der "Cursor den Interfacebereich verlässt", UND, WENN ICH AUF EINE ENTSPRECHENDE SCHLIEßEN-SCHALTFLÄCHE KLICKE.
    Dazu möchte ich eine Aktion mit einem Skript anlegen, dass das Interface automatisch OHNE MAUSRAD bewegt.

    D.h. zum Beispiel:

    Personen > MainChar > Aktionen:
    Aufruf durch andere Aktion: Skript ausführen -> Inventar wird hochgescrollt

    Das sollte möglich sein, ich weiß nur nicht wie!


    Und zweitens muss es doch möglich sein, das Interface OHNE SCROLLING an eine andere Stelle zu verschieben!

    An alle die das verstanden haben: Bitte hilf mir, auch wenn du kein Profi bist! Du machst keinen Fehler!
    Danke, Superscheibenkleiste
  • #12, by SimonS 14 years ago Zitieren
    Also, was animiert wird, ist der Wert InterfaceOffset für das entsprechende Interface. Man kann jetzt einfach sagen:
    get_interface:setValue(VInterfaceOffset, {x=0,y=0}) 
    

    Das legt das Interface ganz nach links oben.
    Analog dazu kann das Interface auch versteckt werden. z.b.
    get_interface:setValue(VInterfaceOffset, {x=-400,y=0})  
    

    (je nachdem wie breit das Interface ist).
    Du kannst dazu den "Skript ausführen"-Aktionsteil benutzen. Das würde dann bei Klick auf schließen ausgeführt werden.
    Für aus dem Interface bewegen:
    Du kannst im OnMainLoop dazu zusätzlich ne Abfrage machen, also etwa so:
    if get_interface:getValue(VInterfaceOffset).x == 0 then //das interface ist ausgefahren
      if getCursorPos().x > 500 then // wenn der Mauszeiger weiter rechts als 500 Pixel ist
        get_interface:setValue(VInterfaceOffset, {x=-400,y=0}) 
      end
    end
    

    Respekt an dich, dass du dich da schon so früh mit begeckst wink
  • #13, by superscheibenkleiste 14 years ago Zitieren
    Sorry, bei mir geht schon dein erstes Script nicht! Muss da wirklich nur eine Zeile stehen?
    Superscheibenkleiste
  • #14, by SimonS 14 years ago Zitieren
    Du musst schauen, was in der messages.log steht. Das Skript geht davon aus, dass du get_interface definiert hast, ansonsten mach:
    getObject('Interfaces[inventory]'):setValue(VInterfaceOffset, {x=0,y=0}) 
    
  • #15, by superscheibenkleiste 14 years ago Zitieren
    So, danke.
    Zumindest kann ich das Interface mit diesen zwei Scriptzeilen direkt auf die gewünschte Position bewegen.
    Aber wenn ich jetzt versuche, das Mausrad zu scrollen, springt das Interface zurück auf die vorherige Position bevor es scrollen kann!
    Verstanden? wenn nein, naja ich auch nicht!

    Und wie lässt sich das Interface dann per Aktion flüssig bewegen?
    Superscheibenkleiste
  • #16, by SimonS 14 years ago Zitieren
    Per Aktionsteile kannst du so etwas machen wie:

    Wenn 'weiterscrollen' wahr
    Skript ausführen:
    getObject('Interfaces[inventory]'):setValue(VInterfaceOffset, {
       x=getObject('Interfaces[inventory]'):getValue(VInterfaceOffset).x - 10,
      y=0}) 
    

    Pause für 1 Millisekunde
    Springe zu Aktionsteil #1

    Wenn wir pause machen, wird die Aktion im nächsten Frame fortgesetzt, es wird nicht 1ms sein, sondern etwa 16ms. Und jedes mal wenn die Aktion durchgeführt wird, bewegt sich das Interface 10 nach links. Jetzt musst du halt überprüfen, dass es nicht zu weit weg scrollt. Dafür ist am Anfang die Abfrage, die man dann entsprechend ergänzen könnte.
  • #17, by superscheibenkleiste 14 years ago Zitieren
    Irgendwie funktioniert das alles bei mir nicht so, wie es soll!
    Da ich mich mit LUA absolut überhaupt nicht auskenne, verstehe ich auch die Logik dahinter nicht...
    Ich brauche im Prinzip einfach genau das/die script/s, die Daedalic in Deponia verwendet hat.
    Was muss ich dafür machen?
    Quasi für einsteiger von Anfang an...
    Danke,
    Superscheibenkleiste
  • #18, by SimonS 14 years ago Zitieren
    In Deponia werden im wesentlichen Aktionsteile benutzt.
    Es gibt also eine Aktion für schließen und für öffnen.
    Dafür brauchst du einen Wert den man ändern kann (am besten packt man alles in ein Interface z.B. "global" oder "system"), also Werte "+", wir nennen ihn "position" und er hat den Wert 0.
    Dann Aktion "öffnen":
    - Wenn Wert "position" < 6
    - - Wert "position" + 1
    -- Skript ausführen:
    local interf = getObject("Interfaces[Inventory]", false)
    interf:setValue(VInterfaceOffset, {x=interf:getPoint(VInterfaceOffset).x, y=interf:getPoint(VInterfaceOffset).y + 180})
    

    -- Pause für 1 ms
    -- Springe zu Aktionsteil #1

    Aktion "schließen":
    - Wenn Wert "position" >= 0
    - - Wert "position" - 1
    -- Skript ausführen:
    local interf = getObject("Interfaces[Inventory]", false)
    interf:setValue(VInterfaceOffset, {x=interf:getPoint(VInterfaceOffset).x, y=interf:getPoint(VInterfaceOffset).y - 180})
    

    -- Pause für 1 ms
    -- Springe zu Aktionsteil #1

    Zusätzlich setzen wir das Interface "Inventory" auf Position -1080 zu Anfang (Einstellungen: Absolut, y=-1080).
  • #19, by afrlme 14 years ago Zitieren
    In Deponia werden im wesentlichen Aktionsteile benutzt.


    aye, it wasn't what I was expecting to find.
    I expected a nice, neat Lua script & instead it was tons of if else queries on top of more if else queries along with the jump to x action part for looping.

    Simple/basic if else queries done inside of the editor are bad enough but complicated/multiple if else queries done inside of the editor are a right bugger to keep track of unlike in Lua where we can attach multiple queries to a single line wink

    I bet the person who worked on the sliding interface script ended up losing a bit of hair; self-inflicted, of course!
  • #20, by SimonS 14 years ago Zitieren
    I tell ya, nothing is more complicated and confusing like many lua scripts or long ones. The editor is just missing all the things that programming interfaces normally offer (I hope we fix that with the next release).
    If you could see the scripts you'd understand why they did stick to action parts wink Just image the size of a mainLoop function for all the things where animations as such are used.