Results 1 to 6 of 6

Thread: Wie finde ich heraus welche Seite gerade geladen/angezeigt wird in GUI Extensions?

  1. #1

    Wie finde ich heraus welche Seite gerade geladen/angezeigt wird in GUI Extensions?

    Hallo liebe Scriptgemeinde,

    Ich würde gerne in der Schiffsansicht und in der Schiffsliste unterschiedliche Ausgaben per GUI Extension anzeigen. Ich bin mir jetzt aber nicht sicher, wie ich den aktuellen Kontext herausbekommen kann. Es gibt ja diverse Möglichkeiten wie CGuiEventOnTableAfterCreate nur auf welcher Seite treten welche Events auf? Ich hätte auch gerne folgendes:

    Wenn Schiffsansicht dann zeige Nachricht1 und übergebe CMyShip Objekt an FunktionX;
    Wenn Schiffsliste dann zeige Nachricht 2;

    Hat da schon jemand Erfahrungen gesammelt und kann mir weiterhelfen?

    EDITH: Ich vermute dass das CGuiEventFilter eine Rolle spielt aber ich finde die Beispiele nicht mehr.
    Last edited by SimonSlater; 02-03-2013 at 18:12.

  2. #2
    Senior Member
    Join Date
    Nov 2011
    Posts
    150
    Mehrere Callback-Funktionen, z. B.:

    Var
    * Filter* As* CGuiEventFilter* =* CGuiEventFilter.Create().AddControl(EGuiControl.Sh ipList);
    ScriptContext.RegisterEvent(EGuiEventType.TableBef oreCreate,* AddressOf* CallBack_TableBeforeCreate,* Filter);

    siehe die [Extension] Code example for extensions von Arakis

    http://game3.stne.net/objectexplorer?p=EGuiPage

    lg
    Elchi
    Gelb und grau - Proximo ist schlau,
    Proxi ist ein Held, gebt ihm euer Geld,
    Ihr seid alle dumm und meckert doch nur rum,
    seid nicht so unfair, sonst bekommt ihr keine Updates mehr

  3. #3
    Danke das hilft mir schon weiter. Habe mich mittlerweile auch wieder an die Bibliothek erinnert.

  4. #4
    Ich habe da noch ein kleines Problem. Ich würde gerne das Event "PageBeforeCreateControls" mehrfach verwenden. Zum einen soll es ohne Filter eingesetzt werden, zum anderen als spezielle Variante nur in der Schiffsansicht. Ich habe die Events dazu so eingetragen:
    Code:
      Var ShiplistFilter As CGuiEventFilter;
      Var ShipviewFilter As CGuiEventFilter;
      
        ShiplistFilter = CGuiEventFilter.Create().AddControl(EGuiControl.ShipList_ShipTable);
        ShipviewFilter = CGuiEventFilter.Create().AddPage(EGuiPage.Ship);
      
        ScriptContext.EnableExtension();
        // Schiffsliste-Events
        ScriptContext.RegisterEvent(EGuiEventType.PageBeforeCreateControls, AddressOf CallBack_BeforeCreateControls); 
        ScriptContext.RegisterEvent(EGuiEventType.TableBeforeCreate, AddressOf CallBack_TableBeforeCreate, ShiplistFilter);
        ScriptContext.RegisterEvent(EGuiEventType.TableAfterRowAdded, AddressOf CallBack_RowAdded, ShiplistFilter);
        ScriptContext.RegisterEvent(EGuiEventType.TableAfterHeadAdded, * AddressOf* CallBack_HeadAdded, * ShiplistFilter);
        
        // Schiffsansicht-Events
        ScriptContext.RegisterEvent(EGuiEventType.PageBeforeCreateControls, AddressOf CallBack_ShipView, ShipviewFilter); 
        
        ScriptContext.ActivateEvents();
        ScriptContext.WriteAppLog('Handelsscript Extension geladen!');
      }
    Jetzt habe ich das Problem, dass in der Schiffsansicht das Callback "CallBack_ShipView" nicht aufgerufen wird, sondern nur "CallBack_BeforeCreateControls". Hat da jemand eine Idee wie ich beide Callbacks aufrufen lassen kann? Wenn ich für das Schiffsansicht Event ein anderes EGuiEvenetType Event verwende, funktioniert es.

  5. #5
    Da ich das Problem mittlerweile gelöst habe, will ich euch die Lösung natürlich nicht vorenthalten:

    Ich habe jetzt in die gleiche Callback-Funktion alles reingeschrieben was auf allen Seiten ausgeführt werden soll. Die Unterscheidung läuft dann über die Test() Funktion der CGuiEventFilter Klasse.
    Code:
    ShipviewFilter = CGuiEventFilter.Create().AddPage(EGuiPage.Ship);
    
    ScriptContext.RegisterEvent(EGuiEventType.PageBeforeCreateControls, AddressOf CallBack_BeforeCreateControls);
    ScriptContext.RegisterEvent(EGuiEventType.PageBeforeCreateControls, AddressOf CallBack_BeforeCreateControls, ShipviewFilter);
    
    Function CallBack_BeforeCreateControls()
    {
      If(e.Filter.Test(ShipviewFilter))
        {
          ScriptContext.WriteAppLog('Diese Nachricht wird nur in der Schiffsansicht angezeigt!');
        }
      Else
      {
          ScriptContext.WriteAppLog('Diese Nachricht wird überall angezeigt!');
      }
    }

  6. #6

    Question

    Super-Ding!

    Edit:
    Geht doch ohne Probleme. Das einzige was ein Problem machte war die falsche Fehlerausgabe bzw. die Fehlerhafte....
    Last edited by Searcherii; 03-12-2013 at 22:49.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •