PDA

View Full Version : Schiffs-Gui



Elchi
20-11-2011, 16:35
Wie bekomme ich per Gui auf einer Schiffsseite die ID heraus? Wennn ich versuche Quelltext zu extrahieren kommt:


[Exception: Es kann kein Text zurückgegeben werden, da das erste Childcontrol kein THtmlLiteral ist]
bei larne.Html.THtmlControl.get_InnerHtml() in D:\source\jack\dev1\projects\shared\larne.extented \WebControls.vb:Zeile 2532.
bei larne.Html.THtmlControl.get_InnerHtml1() in D:\source\jack\dev1\projects\shared\larne.extented \WebControls.vb:Zeile 3041.

[TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht.]
bei System.RuntimeMethodHandle._InvokeMethodFast(IRunt imeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
bei System.RuntimeMethodHandle.InvokeMethodFast(IRunti meMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
bei System.Reflection.RuntimePropertyInfo.GetValue(Obj ect obj, Object[] index)
bei larne.scripting.TScriptObjectMemberNative.GetValue Internal(TScriptContext Context, Object obj, Object[] Index) in D:\source\jack\dev1\projects\shared\larne.scriptin g\Script.vb:Zeile 2604.
bei larne.scripting.TScriptObjectMemberNative.GetValue (TScriptContext Context, TCodeExpressionObjectMember CallExp, Object obj, Object[] Index) in D:\source\jack\dev1\projects\shared\larne.scriptin g\Script.vb:Zeile 2595.
bei larne.scripting.Expressions.TCodeExpressionObjectM ember.Get(TScriptContext Context) in D:\source\jack\dev1\projects\shared\larne.scriptin g\ScriptExpressions.vb:Zeile 342.
bei larne.scripting.Commands.TCodeCommandDim.Process(T ScriptContext Context) in D:\source\jack\dev1\projects\shared\larne.scriptin g\ScriptCommands.vb:Zeile 145.
bei larne.scripting.TScriptContext.ExecuteInternal() in D:\source\jack\dev1\projects\shared\larne.scriptin g\Script.vb:Zeile 1271.

[Exception: Das Script hat einen Laufzeitfehler verursacht. Zeile: 15, Spalte: 9, Token: 'i', Script: 'Script 6435']
bei larne.scripting.TScriptContext.ExecuteInternal() in D:\source\jack\dev1\projects\shared\larne.scriptin g\Script.vb:Zeile 1281.
bei larne.scripting.TScriptContext.CallMethod(TScriptO bjectMemberCustom mem, TCodeExpressionObjectMember Caller, Object[] Args, CObject Instance) in D:\source\jack\dev1\projects\shared\larne.scriptin g\Script.vb:Zeile 1097.
bei larne.scripting.TScriptContext.CallMethod(TScriptO bjectMemberCustom Mem, Object[] Args, CObject Instance) in D:\source\jack\dev1\projects\shared\larne.scriptin g\Script.vb:Zeile 1054.
bei larne.scripting.TScriptObjectMemberCustom.GetValue Internal(TScriptContext Context, Object obj, Object[] Index) in D:\source\jack\dev1\projects\shared\larne.scriptin g\Script.vb:Zeile 1879.
bei larne.scripting.Types.CDelegate.Invoke(Object[] args) in D:\source\jack\dev1\projects\shared\larne.scriptin g\ScriptMethods.vb:Zeile 140.
bei stne.TScriptExtensionItem.CallEvent(CGuiEvent e) in D:\source\jack\dev1\projects\stne\game\Scripting\E xtensions.vb:Zeile 182.

[Exception: Es ist ein Fehler in einer Extension aufgetreten.]
bei stne.TScriptExtensionItem.CallEvent(CGuiEvent e) in D:\source\jack\dev1\projects\stne\game\Scripting\E xtensions.vb:Zeile 193.
bei stne.TScriptExtensionManagerUserItem.CallEvent(CGu iEvent e) in D:\source\jack\dev1\projects\stne\game\Scripting\E xtensions.vb:Zeile 121.
bei stne.TUserSession.CallScriptEvent(CGuiEvent e) in D:\source\jack\dev1\projects\stne\game\UserLib.vb: Zeile 6195.
bei stne.TstnePage.PrepareRender() in D:\source\jack\dev1\projects\stne\game\WebControls .vb:Zeile 526.
bei stne.wf_Game.Page_Load(Object sender, EventArgs e) in D:\source\jack\dev1\projects\stne\game\Game.aspx.v b:Zeile 126.
bei System.Web.UI.Control.LoadRecursive()
bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Assembly: larne.extended.dll
Time: 20.11.2011 15:34:01
STNE-Version: 1.0.73.580
Server: DE3
User-ID: 25442

lg
Elchi

ker
23-11-2011, 12:59
Function CallBack_PageBeforeRender(e As CGuiEventOnPageBeforeRender){
Var Root As IGuiControl = e.Page.Body;
Var helmtable As IGuiControlCollection = e.Page.Body.FindByControlType(EGuiControl.ShipPage _HelmControlTable);
If(helmtable.Count <> 0) {
Var idbox As IGuiControl = Root.Controls.Item(0);
Var i As Integer = idbox.InnerHtml.LastIndexOf(" NCC ");
Var j As Integer = idbox.InnerHtml.IndexOf(" ", i + 6);
Var id_str As String = idbox.InnerHtml.Substring(i + 5, j - (i + 5));
Var id As Integer = Int32.Parse(id_str);
Var activeShip As New CMyShip(id);
// da haste nen CMyShip... versuch aber nichmal .Action aufzurufen ;)
}
}

Arakis
23-11-2011, 13:37
Drei mal hintereinander idbox.InnerHtml aufgerufen ohne das Ergebnis zwischenzuspeichern, da wundert es mich nicht, dass viele Scripte mit ihrer Ausführungszeit nicht auskommen ;)

Lieben Gruß,
Arakis

ker
23-11-2011, 14:52
Arrakis, das ist eine kopie aus nem testscript... kein echt genutztes script :)
und ich bin noch nie ans limit gestossen...

Elchi
23-11-2011, 20:38
@ker: In der Theorie richtig, aber in der Praxis:


Var Root As IGuiControl = e.Page.Body;
Var helmtable As IGuiControlCollection = e.Page.Body.FindByControlType(EGuiControl.ShipPage _HelmControlTable);
Var helmform As IGuiControlCollection = e.Page.Body.FindByControlType(EGuiControl.ShipPage _HelmControlForm);
Var lrstable As IGuiControlCollection = e.Page.Body.FindByControlType(EGuiControl.ShipPage _LRSTable);
If(helmtable.Count <> 0) {
//Var idbox As IGuiControl = Root.Controls.Item(0);
Var i As String = Root.InnerHtml/*.LastIndexOf(" NCC ")*/;
/*Var j As Integer = idbox.InnerHtml.IndexOf(" ", i + 6);
Var id_str As String = idbox.InnerHtml.Substring(i + 5, j - (i + 5));
Var id As Integer = Int32.Parse(id_str);
Var activeShip As New CMyShip(id);
*/}


Wenn ich den verwende taucht die gleiche Fehlermeldung auf. Sobald ich ich die "var i as string"-Zeile ausklammere, funktioniert alles. der Fehler liegt darin, dass man nicht auf InnerHtml zurückgreifen kann. ich suche eine alternative Funktion, wie man ShipID rausbekommen kann.

lg
Elchi

ker
23-11-2011, 22:52
du bist lustig...



Root.Controls.Item(0);


ist nicht das gleiche wie



Root.InnerHtml

Sargraner
24-11-2011, 15:49
Also, ich bekomme die NCC eines Schiffes auf folgende Weise:

Var Root As IGuiControl = e.Page.Body;
Var ncc As String = Root.Controls.Item(0).InnerHtml;
ncc = ncc.Substring(ncc.IndexOf(' NCC ') + 5);

ker
24-11-2011, 15:57
dann ist aber noch der schiffstyp mit drin :)

Elchi
24-11-2011, 17:55
Function CallBack_PageBeforeRender(e As CGuiEventOnPageBeforeRender){
Var html As String = e.Page.Body.Controls.Item(0).InnerHtml;
}


Hier gibt es eine Fehlermeldung.


Function CallBack_PageBeforeRender(e As CGuiEventOnPageBeforeRender){
Var html As String = "Hello World";
}


Hier nicht.

logische Schlussfolgerung:

1. e.Page.Body.Controls.Item(0).InnerHtml kann nicht aufgerufen werden.

oder

2. e.Page.Body.Controls.Item(0).InnerHtml kann nicht in einen String geschrieben werden.
(oder beides)


[Exception: Es kann kein Text zurückgegeben werden, da das erste Childcontrol kein THtmlLiteral ist]

Das hier und weil operator=(s1 as string, s2 as string) meines Wissens nach einwandfrei funktioniert lässt Möglichkeit Nr. 1 in den Vordergrund rücken.

------------------------------------------------------------------------------------------------------------------------------

Hier meine Frage:
Wie kann ich es umgehen e.Page.Body.Controls.Item(0).InnerHtml zu verwenden um an den Schiffsnamen ranzukommen?

lg
Elchi

ker
24-11-2011, 20:45
... das

If(helmtable.Count <> 0) {
ist nicht grundlos da... das script stirbt sonst bevor du zum entsprechenden seitenaufruf kommst...

kannst du einfach mal das hoheitsgebietsscript (in der scriptbib) von mir ausführen, das läuft nämlich bei mir und bei archer, weshalb anzunehmen ist, dass meine methode funktioniert!

wir reden auch von s3, richtig?
nur um sicher zu gehen, dass da keine serverabhängigen dinge passieren...

Elchi
25-11-2011, 12:12
Ja, ich hab das mit Hoheitsgebiet probiert:


[Exception: Es kann kein Text zurückgegeben werden, da das erste Childcontrol kein THtmlLiteral ist]
bei larne.Html.THtmlControl.get_InnerHtml() in D:\source\arakis\dev1\projects\shared\larne.extent ed\WebControls.vb:Zeile 2532.
bei larne.Html.THtmlControl.get_InnerHtml1() in D:\source\arakis\dev1\projects\shared\larne.extent ed\WebControls.vb:Zeile 3041.

[TargetInvocationException: Ein Aufrufziel hat einen Ausnahmefehler verursacht.]
bei System.RuntimeMethodHandle._InvokeMethodFast(IRunt imeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
bei System.RuntimeMethodHandle.InvokeMethodFast(IRunti meMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
bei System.Reflection.RuntimePropertyInfo.GetValue(Obj ect obj, Object[] index)
bei larne.scripting.TScriptObjectMemberNative.GetValue Internal(TScriptContext Context, Object obj, Object[] Index) in D:\source\arakis\dev1\projects\shared\larne.script ing\Script.vb:Zeile 2604.
bei larne.scripting.TScriptObjectMemberNative.GetValue (TScriptContext Context, TCodeExpressionObjectMember CallExp, Object obj, Object[] Index) in D:\source\arakis\dev1\projects\shared\larne.script ing\Script.vb:Zeile 2595.
bei larne.scripting.Expressions.TCodeExpressionObjectM ember.Get(TScriptContext Context) in D:\source\arakis\dev1\projects\shared\larne.script ing\ScriptExpressions.vb:Zeile 342.
bei larne.scripting.Commands.TCodeCommandDim.Process(T ScriptContext Context) in D:\source\arakis\dev1\projects\shared\larne.script ing\ScriptCommands.vb:Zeile 145.
bei larne.scripting.TScriptContext.ExecuteInternal() in D:\source\arakis\dev1\projects\shared\larne.script ing\Script.vb:Zeile 1271.

[Exception: Das Script hat einen Laufzeitfehler verursacht. Zeile: 143, Spalte: 9, Token: 'idbox', Script: '[Extension] Hoheitsgebiet']
bei larne.scripting.TScriptContext.ExecuteInternal() in D:\source\arakis\dev1\projects\shared\larne.script ing\Script.vb:Zeile 1281.
bei larne.scripting.TScriptContext.CallMethod(TScriptO bjectMemberCustom mem, TCodeExpressionObjectMember Caller, Object[] Args, CObject Instance) in D:\source\arakis\dev1\projects\shared\larne.script ing\Script.vb:Zeile 1097.
bei larne.scripting.TScriptContext.CallMethod(TScriptO bjectMemberCustom Mem, Object[] Args, CObject Instance) in D:\source\arakis\dev1\projects\shared\larne.script ing\Script.vb:Zeile 1054.
bei larne.scripting.TScriptObjectMemberCustom.GetValue Internal(TScriptContext Context, Object obj, Object[] Index) in D:\source\arakis\dev1\projects\shared\larne.script ing\Script.vb:Zeile 1879.
bei larne.scripting.Types.CDelegate.Invoke(Object[] args) in D:\source\arakis\dev1\projects\shared\larne.script ing\ScriptMethods.vb:Zeile 140.
bei stne.TScriptExtensionItem.CallEvent(CGuiEvent e) in D:\source\arakis\dev1\projects\stne\game\Scripting \Extensions.vb:Zeile 182.

[Exception: Es ist ein Fehler in einer Extension aufgetreten.]
bei stne.TScriptExtensionItem.CallEvent(CGuiEvent e) in D:\source\arakis\dev1\projects\stne\game\Scripting \Extensions.vb:Zeile 193.
bei stne.TScriptExtensionManagerUserItem.CallEvent(CGu iEvent e) in D:\source\arakis\dev1\projects\stne\game\Scripting \Extensions.vb:Zeile 121.
bei stne.TUserSession.CallScriptEvent(CGuiEvent e) in D:\source\arakis\dev1\projects\stne\game\UserLib.v b:Zeile 6195.
bei stne.TstnePage.PrepareRender() in D:\source\arakis\dev1\projects\stne\game\WebContro ls.vb:Zeile 526.
bei stne.wf_Game.Page_Load(Object sender, EventArgs e) in D:\source\arakis\dev1\projects\stne\game\Game.aspx .vb:Zeile 126.
bei System.Web.UI.Control.LoadRecursive()
bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Assembly: larne.extended.dll
Time: 25.11.2011 11:08:39
STNE-Version: 1.0.73.593
Server: DE3
User-ID: 25442

Diese Fehlermeldung gibt es bei allen Schiffen außer Stationen. Ich weiß ja selber nicht, was ich falsch mache.

lg
Elchi

ker
25-11-2011, 16:49
ok... jetzt ist wirklich was seltsam...
hast du noch andere extensions an? die können logischerweise sich mit dieser statischen methode beissen...

weisst du was? ich hau jetzt einfach mal nen feature request rein, dass bitte ein CMyShip oder CMyColony objekt in CGuiEventOnPageBeforeRender.DataObject drinsteht...
das ist eh die einzige Sinnvolle Methode das zu handhaben...