PDA

View Full Version : Fehler bei Aufruf von Actions im CBaseShipManager



bolianer
09-11-2011, 22:27
Hallo,

ich bekomme bei jedwedem Aufruf einer Action der Klasse "CBaseShipManager" eine exception. Beispiele:


Var vonSchiff as CMyShip;
Var zuSchiff as CMyShip;

... (u.a. erzeuge zuSchiff usw., mit zuSchiff kann ich definitiv arbeiten, die ShipID wird z.B. korrekt ausgegeben)

vonSchiff.Action.Undock();
vonSchiff.Action.ActivateWarpCore(True);
vonSchiff.Action.TransferToShip(zuSchiff.ShipID,* 100.0,* EBeamResource.Warpcore);

Habe auch andere Actions probiert. Stets kommt beim Scriptablauf die Meldung:

[Exception: Not allowed in extensions]
bei stne.Scripting.Types.CBaseShipManager.InitShipActi on() in D:\source\proximo\dev1\projects\stne\game\Scriptin g\Objects.vb:Zeile 2555.
bei stne.Scripting.Types.CBaseShipManager.Transferiere ZuSchiff(Int32 ToShipID, Double Anzahl, EBeamRessource Ressource) in D:\source\proximo\dev1\projects\stne\game\Scriptin g\Objects.vb:Zeile 2632.

[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.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.MethodBase.Invoke(Object obj, Object[] parameters)
bei larne.scripting.TScriptObjectMemberNative.GetValue Internal(TScriptContext Context, Object obj, Object[] Index) in D:\source\proximo\dev1\projects\shared\larne.scrip ting\Script.vb:Zeile 2606.
bei larne.scripting.TScriptObjectMemberNative.GetValue (TScriptContext Context, TCodeExpressionObjectMember CallExp, Object obj, Object[] Index) in D:\source\proximo\dev1\projects\shared\larne.scrip ting\Script.vb:Zeile 2595.
bei larne.scripting.Expressions.TCodeExpressionObjectM ember.Get(TScriptContext Context) in D:\source\proximo\dev1\projects\shared\larne.scrip ting\ScriptExpressions.vb:Zeile 342.
bei larne.scripting.Commands.TCodeCommandExpressionCal l.Process(TScriptContext Context) in D:\source\proximo\dev1\projects\shared\larne.scrip ting\ScriptCommands.vb:Zeile 60.
bei larne.scripting.TScriptContext.ExecuteInternal() in D:\source\proximo\dev1\projects\shared\larne.scrip ting\Script.vb:Zeile 1271.

[Exception: Das Script hat einen Laufzeitfehler verursacht. Zeile: 133, Spalte: 9, Token: 'vonSchiff', Script: 'WK-Augleichen in Flotte']
bei larne.scripting.TScriptContext.ExecuteInternal() in D:\source\proximo\dev1\projects\shared\larne.scrip ting\Script.vb:Zeile 1281.
bei larne.scripting.TScriptContext.Execute(Int32 StartLine) in D:\source\proximo\dev1\projects\shared\larne.scrip ting\Script.vb:Zeile 1314.
bei larne.scripting.TScriptContext.Execute() in D:\source\proximo\dev1\projects\shared\larne.scrip ting\Script.vb:Zeile 1348.
bei stne.TScript.ExecuteInternal() in D:\source\proximo\dev1\projects\stne\game\Temp3.vb :Zeile 1066.
bei stne.TScript.ExecuteInQueue() in D:\source\proximo\dev1\projects\stne\game\Temp3.vb :Zeile 978.
bei stne.wf_ScriptEdit.act_Execute() in D:\source\proximo\dev1\projects\stne\game\ScriptEd it.vb:Zeile 492.
bei stne.wf_ScriptEdit.ExecuteAction() in D:\source\proximo\dev1\projects\stne\game\ScriptEd it.vb:Zeile 107.
bei stne.TstnePage.CallExecuteAction() in D:\source\proximo\dev1\projects\stne\game\WebContr ols.vb:Zeile 775.
bei stne.wf_ScriptEdit.Run() in D:\source\proximo\dev1\projects\stne\game\ScriptEd it.vb:Zeile 75.
bei stne.wf_Game.Page_Load(Object sender, EventArgs e) in D:\source\proximo\dev1\projects\stne\game\Game.asp x.vb:Zeile 98.
bei System.Web.UI.Control.LoadRecursive()
bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Assembly: stne.dll
Time: 09.11.2011 21:23:58
STNE-Version: 1.0.73.545
Server: DE3
User-ID: 32245



Was ist das Problem? Was genau ist denn nicht erlaubt und was genau sind Extensions? Wie kann ich WK beamen (was offenbar das eigentliche Ziel ist, Undock usw. sind nur Tests ob andere Actions auch Fehler werfen, was sie tun).

Danke im Voraus!

HerrKoch
10-11-2011, 08:35
[Exception: Not allowed in extensions] << Das müsste doch eigentlich alles sagen? Du versuchst wohl die Aktion in einer Extension auszuführen, und das scheint nicht erlaubt. .TransferiereZuSchiff ist laut Fehlermeldung die "verbotene" Aktion. Wundert mich zwar, dass die Vorgegangen Aktionen wohl ausgeführt werden, aber sonst... Irgendwo hier gab es auch schon eine Diskussion darüber meine ich mich zu erinnern (kam glaube ich von Sargi)

Sargraner
10-11-2011, 13:51
So ist es. In Extensions sollen keine Aktionen möglich sein, weil man sonst noch Änderungen verursachen könnte, während die Schiffsseite schon erstellt ist. Da hilft nur ein normales Script oder Portal draus machen.

bolianer
10-11-2011, 15:50
Ich wiederhole meine Frage vom Ende des Postings: was genau sind Extensions?

Leider sagt mir die Fehlermeldung gar nichts, weil ich "Extensions" nicht zuordnen kann. Von den vielen Übersetzungsmöglichkeiten des englischen Begriffs "extension" vermag ich keine in einen sinnvollen Kontext zu einem Schiff oder einem Beamvorgang oder der Scriptumgebung von STNE zu setzen. Aber irgendwas davon muss ja gemeint sein.


Du versuchst wohl die Aktion in einer Extension auszuführen

Was meint "in einer Extension ausführen"? Ich stehe im Quellcode des Scriptes und drücke dann auf den Button "Script ausführen". Das geht gut bis zu besagten Aufrufen.

@HerrKoch: die Aufrufe davor gehen auch nicht und liefern dieselbe Fehlermeldung. Ich habe einige Actions probiert um auszuschließen, dass "TransferToShip" die Fehlerquelle ist. Ich habe einige Aufrufe angegeben, um diese Tests anzudeuten. Drum steht drüber auch "Beispiele". Ist sicher nicht besonders glücklich dargestellt, ich wollte nur nicht die ganzen auskommentierten Tests und zugehörigen writelines mit posten. Wär wohl besser gewesen.

Hier daher korrekt die Passage aus dem Script:

* * /// WriteLine("test: deaktiviere WK");
/// vonSchiff.Action.ActivateWarpCore(False);

/// WriteLine("test: aktiviere WK");
/// vonSchiff.Action.ActivateWarpCore(True);

/// WriteLine("test: abdocken");
/// vonSchiff.Action.Undock();

/// WriteLine("test: andocken");
/// vonSchiff.Action.DockTo(515894);


WriteLine("test: beame " & Math.Truncate(benoetigtWK) & " von Schiff " & vonSchiff.ShipID & " zu Schiff " & zuSchiff.ShipID);
vonSchiff.Action.TransferToShip(zuSchiff.ShipID, Math.Truncate(benoetigtWK), EBeamResource.Warpcore);



Die Math.Truncate(...)-Sache ist bestimmt auch überflüssig, gehört zur Fehlersuche falls da vielleicht doch eine Integer oder eine double-Zahl ohne Nachkommawerte verlangt war - "extension" könnte sich ja auf die Nachkommastellen beziehen, ist ja auch eine "Erweiterung". Man weiß ja nie :P Wie Ihr seht tappe ich voll im Dunklen bezüglich "extension".

@Sargraner: Was ist denn ein normales Script? Bzw. was habe ich? Ich bin gegangen über Datenbank - Scripting - MeineScripte - Neues Script anlegen - "Benutzerdefiniertes Script ohne Eingabeassistent" Erstellen. Dann hab ich den Quellcode eingetippt. Für mich klingt das nach "normalem Scripting".


Ist mein erstser Versuch in STNE-Scritps, Hilfequelle = STNE-Script-Wiki und Objektexplorer. Eine vollständige API-Doku wäre übrigens extrem hilfreich, gibts die irgendwo? Inkl. Syntax usw., denn das ist ja eine Mischung verschiedener Sprachdialekte hier, woher soll man da zielsicher die richtige Syntax treffen ... Fühlt sich jedenfalls an wie eine c-java-basic-...zähl alle möglichen Sprachen auf...-mach ich wie ich grade will-Sprache.

Sargraner
10-11-2011, 18:07
Dann will ich mal deine Grundsatzfragen klären.

Script: alles was im Scripteditor erstellt wurde sind Scripte.

Webscript: sind Scripte die Html-Seiten erzeugen und auf Eingaben verarbeiten können, beginnen mit #UseInterface* Web

Portale: sind Scripte die man Schiffe oder Kolonien zuweisen kann. Jemand der diesem Schiff/Kolonie im Spiel begenet kann sie aufrufen. beginnen mit #UseInterface ShipPortal oder ColoniePortal

Extensions: sind Scripte die beim Anzeigen von STNE-Seiten ausgeführt werden, beginnen mit #UseInterface Gui

In deinem Fall würde ich einfach mal das Gui hinter #UseInterface löschen, das ist vielleicht garkein Script welches Extensions benutzt.

bolianer
10-11-2011, 18:25
Volltreffer, Script läuft.

Habe die #UseInterface ... Zeile gelöscht, alles schick.

Besten Dank, Sargraner, auch für die Erklärungen Extensions/Portale usw. :)