Banner left   Banner center   Banner right

Germanenglish Home · News · Diary · Screenshots · Documentation (Wiki) · Downloads · Guestbook · Forum

Home · Benutzer registrieren · Suchen · Statistik · FAQ · Benutzerliste

Zur Zeit online: keiner ausser dir

 X-Force - Fight For Destiny - Forum —› X-Skript / Developer-Pack —› eval() ?

Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [23] [24] >>

Autor Mitteilung
verfasst am: 25.01.2010, 10:42 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beitrge: 1185
Keine Ahnung, ob eval() jemandem was sagt. Ist Bestandteil vieler interpretierten Sprachen (Java, PHP, Python, Ruby) und fhrt den String, der bergeben wird, als Befehl(e) der jeweiligen Sprache aus. Das ist v.A. ntzlich fr selbstmodifizierenden Code, aber man kann damit auch eine interaktive "Shell", die Befehle der jeweiligen Sprache akzeptiert, sehr leicht umsetzen, was jedem mit Skriptfhigkeiten das debuggen/testen sehr erleichtern knnte. Wenn PascalScript also soetwas hergibt, baut es bitte ein *zu Natter schiel, der das nach dem Mergen der Skriptsprache wissen knnte*
verfasst am: 25.01.2010, 21:36
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
Was genau willst du damit machen? Ich glaube, einen entsprechenden Befehl gibt es in PascalScript nicht. Eventuell liee sich eine Funktion basteln, die einen String als Grundlage fr ein neues Skript verwendet, und dieses startet. Wre aber schon etwas arbeit - und man msste auch berlegen wie so ein Befehl arbeiten sollte, bzw. was man damit alles erreichen will.
verfasst am: 26.01.2010, 13:57 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beitrge: 1185
Naja, PascalScript wird doch max. zu Bytecode kompiliert (wenn berhaupt) und von einem in Delphi geschriebenen Interpreter ausgefhrt, oder? Prinzipiell macht eval nichts anderes, als diesen Interpreter mit einem String zu fttern, der nicht im Sourcecode stand, sondern aus irgendwelchen Quellen zur runtime entsteht.
Stark vereinfacht: Nehmen wir eine Schleife an, die das Script ausliest, und die einzelnen Zeilen an den eigentlichen Interpreter berreicht. Stt diese Schleife auf eval(str), reicht es nicht "eval(str)" weiter, sondern nur "str".

Ich habe keine Ahnung von der Engine... aber wenn ich das hier richtig lese, ist es wohl durchaus mglich. Ich meine diesen Teil:
function TPSCE.Compile(const FileName: string): Boolean;
var
  S: TStringList;
  i: Integer;
begin
  Result:=False;
  if FileExists(FileName) then begin
    S:=TStringList.Create;
    S.LoadFromFile(FileName);
    FScr.Script:=S;
    Result:=FScr.Compile; // hier wird zur runtime kompiliert
    S.Free;
    if not Result then
      if FScr.CompilerMessageCount > 0 then
        for i:=0 to FScr.CompilerMessageCount-1 do
          Writeln(FScr.CompilerErrorToStr(i));
  end else Writeln('File not found: ', FileName);
end;

function TPSCE.Execute: Boolean;
begin
  Result:=FScr.Execute; // und hier wird das kompilierte ausgefhrt
  if not Result then
    Writeln('Run-time error:' + FScr.ExecErrorToString);
end;


Das ist wohl, was du mit "String als Grundlage fr ein neues Skript" meinst?
verfasst am: 27.01.2010, 01:14 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
Zitat: sujin

Das ist wohl, was du mit "String als Grundlage fr ein neues Skript" meinst?

Ja, so ungefhr. Allerdings wird man trotzdem ein ordentliches Skript bentigen - also es reicht nicht, game_api_MessageBox() zu schreiben, man bruchte auch program Name etc. Auerdem wird fr normale Skripte ja zu Beginn StartMission aufgerufen. Man msste sich halt berlegen, wie man das am besten umsetzen will. Also user komplettes Skript eingeben lassen, oder Gerst automatisch erzeugen (String in StartMission einfgen), oder eine Alternative programmieren, die direkt den String an den Compiler gibt. Dann msste man aber je nach Zweck eine vllig ungewohnte Syntax verwenden, was auch nicht immer praktisch wre. Daher die Frage, wofr du das verwenden willst. Oder soll der Befehl im laufenden Skript ausgefhrt werden (also dass Skript, das den String abfragt)? Das wre wohl die schwierigste Variante. Man msste auch beachten, dass bei der Variante wohl jeder Eingabefehler das Skript beenden wrde - und somit weitere Eingaben nicht mglich wren.
verfasst am: 27.01.2010, 02:26
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
Man knnte alternativ auch berlegen, z.B. bei gesetztem DEBUG-Wert (globale Variable) ein Shortcut zu aktivieren, das im Geoscape die Stringeingabe ermglicht.
verfasst am: 27.01.2010, 13:49
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beitrge: 1185
Zitat: Natter
Daher die Frage, wofr du das verwenden willst.

Wie gesagt z.B. eine "Pascal-Shell" - gib "myUFO := TUFO.Create" ein, und es entsteht ein neues UFO, gib dann "myUFO.huntObject(myUFO.nearestEnemy)" ein, und das neue UFO geht aufs nchste Flugzeug los.
Zitat: Natter
Oder soll der Befehl im laufenden Skript ausgefhrt werden (also dass Skript, das den String abfragt)?

Ja, das ist eigentlich Sinn der Sache. In einem seperaten Namespace ist die ganze Sache schon deutlich witzloser...
Zitat: Natter
Man msste auch beachten, dass bei der Variante wohl jeder Eingabefehler das Skript beenden wrde - und somit weitere Eingaben nicht mglich wren.

Selbstverstndlich. Kennt PascalScript Exceptions? Wenn nicht, dann muss es so gehen...
verfasst am: 27.01.2010, 22:41 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
Zitat: sujin

Ja, das ist eigentlich Sinn der Sache. In einem seperaten Namespace ist die ganze Sache schon deutlich witzloser...

Naja - wenn man mehr als eine Zeile Eingeben kann, knnte man ja auch
myUFO:=ufo_api_create_UFO;
myUFO.huntObject(myUFO.nearestEnemy)

verwenden. Imho ist die Variante eines neuen Skriptes deutlich flexibler, da man z.B. auch neue Variablen anlegen knnte (dein Beispiel wrde nmlich nur klappen, wenn man vorher in weiser vorraussicht eine entsprechende Variable angelegt htte), Events registrieren etc. Natrlich ist dafr die Eingabe etwas komplizierter. Aber man kann ja eine einfache Eingabe ermglichen, wenn man im Skript das gewnschte Grundgerst (z.B. als Konstante) automatisch erzeugt.

Zitat: sujin

Selbstverstndlich. Kennt PascalScript Exceptions? Wenn nicht, dann muss es so gehen...

Nein. Momentan wird ein Skript bei einer Exception automatisch beeendet, und erst danach der Fehler abgefangen.
verfasst am: 28.01.2010, 15:53 · Edited by: sujin
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beitrge: 1185
Man muss nicht unbedingt neue Variablen anlegen. Ein Dataholder (vom Skript, das zur Eingabe auffordert, verwaltet) wrde schon reichen.
Natrlich kann man auch mit dem Erstellen neuer Skripte viel erreichen. Wenn ein ausfhren im gleichen Namespace zu aufwndig ist, dann wird die erste Variante auch ausreichen. Wre nur etwas eleganter fr einfachere Zwecke gewesen.
verfasst am: 28.01.2010, 18:52
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
Zitat: sujin
Wre nur etwas eleganter fr einfachere Zwecke gewesen.

Naja, wenn ich davon berzeugt wre, dass dies die bessere Variante ist, wrde ich schon probieren, ob sich das lsen lsst. Da knnte man ja auch in der PascalScript-Newsgroup nachfragen. Momentan sehe ich aber noch nicht den wirklichen Vorteil, weil man auch mit neuen Skripten eine hnlich einfache Eingabe realisieren knnte, die Variante bei Bedarf aber deutlich flexibler einsetzbar wre. Aber vielleicht bersehe ich ja auch noch was ^^
verfasst am: 28.01.2010, 20:10
Spielsatz Alliances

Registrierdatum: 14.07.2004, 14:47

 Beitrge: 1185
Wie gesagt: Hat nur bei simplen Zwecken einen Vorteil, nmlich den geringeren Aufwand. Zugriff auf die Variablen des aufrufenden Skripts kann man mit ein minimalem Mehraufwand auch regeln. Ist also eine reine Bequemlichkeitsfrage ;-)
verfasst am: 10.09.2011, 15:35 · Edited by: Natter
Programmierer, allgemeines

Registrierdatum: 06.06.2004, 17:19

 Beitrge: 3186
2503
program YourName;

const
  Nachricht = 'Test';
  Skriptstring =
'program YourName;'+#13#10
+'procedure StartMission;'+#13#10
+'begin'+#13#10
+'game_api_MessageBox('+#39+Nachricht+#39+');'
+'end;'+#13#10
+'begin'+#13#10
+'end.';
procedure StartMission;
begin
  mission_api_StartScriptFromString(Skriptstring,nil);
end;

begin
  MissionName := 'YourName';
  MissionType := mzObjects;
end.


So, hab da mal was umgesetzt. Vielleicht kann jemand mal ein eigenstndiges Skript erstellen, welches einen Button + zustzliche Seite erstellt, in der Skripte zunchst geschrieben (und gespeichert) werden knnen, und dann nach belieben gestartet.
verfasst am: 27.11.2021, 15:18
Registrierdatum: 29.10.2021, 14:57

 Beitrge: 763
Cant wait to find this love, soo great! baby photography okc cant wait to find this love, soo great!
verfasst am: 22.11.2023, 10:26
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 72721
verfasst am: 01.12.2023, 12:03
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 72721
audiobookkeeper.rucottagenet.rueyesvision.rueyesvisions.comfactoringfee.rufilmzones.rugadwall.rugaffertape.rugageboard.rugagrule.rugallduct.rugalvanometric.rugangforeman.rugangwayplatform.rugarbagechute.rugardeningleave.rugascautery.rugashbucket.rugasreturn.rugatedsweep.rugaugemodel.rugaussianfilter.rugearpitchdiameter.ru
geartreating.rugeneralizedanalysis.rugeneralprovisions.rugeophysicalprobe.rugeriatricnurse.rugetintoaflap.rugetthebounce.ruhabeascorpus.ruhabituate.ruhackedbolt.ruhackworker.ruhadronicannihilation.ruhaemagglutinin.ruhailsquall.ruhairysphere.ruhalforderfringe.ruhalfsiblings.ruhallofresidence.ruhaltstate.ruhandcoding.ruhandportedhead.ruhandradar.ruhandsfreetelephone.ru
hangonpart.ruhaphazardwinding.ruhardalloyteeth.ruhardasiron.ruhardenedconcrete.ruharmonicinteraction.ruhartlaubgoose.ruhatchholddown.ruhaveafinetime.ruhazardousatmosphere.ruheadregulator.ruheartofgold.ruheatageingresistance.ruheatinggas.ruheavydutymetalcutting.rujacketedwall.rujapanesecedar.rujibtypecrane.rujobabandonment.rujobstress.rujogformation.rujointcapsule.rujointsealingmaterial.ru
journallubricator.rujuicecatcher.rujunctionofchannels.rujusticiablehomicide.rujuxtapositiontwin.rukaposidisease.rukeepagoodoffing.rukeepsmthinhand.rukentishglory.rukerbweight.rukerrrotation.rukeymanassurance.rukeyserum.rukickplate.rukillthefattedcalf.rukilowattsecond.rukingweakfish.rukinozones.rukleinbottle.rukneejoint.ruknifesethouse.ruknockonatom.ruknowledgestate.ru
kondoferromagnet.rulabeledgraph.rulaborracket.rulabourearnings.rulabourleasing.rulaburnumtree.rulacingcourse.rulacrimalpoint.rulactogenicfactor.rulacunarycoefficient.ruladletreatediron.rulaggingload.rulaissezaller.rulambdatransition.rulaminatedmaterial.rulammasshoot.rulamphouse.rulancecorporal.rulancingdie.rulandingdoor.rulandmarksensor.rulandreform.rulanduseratio.ru
languagelaboratory.rulargeheart.rulasercalibration.rulaserlens.rulaserpulse.rulaterevent.rulatrinesergeant.rulayabout.ruleadcoating.ruleadingfirm.rulearningcurve.ruleaveword.rumachinesensible.rumagneticequator.rumagnetotelluricfield.rumailinghouse.rumajorconcern.rumammasdarling.ru
verfasst am: 14.01.2024, 10:30
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 72721
verfasst am: 14.01.2024, 10:31
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 72721
verfasst am: 14.01.2024, 10:32
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 72721
verfasst am: 14.01.2024, 10:33
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 72721
verfasst am: 14.01.2024, 10:34
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 72721
verfasst am: 14.01.2024, 10:35
Registrierdatum: 22.11.2023, 07:10

 Beitrge: 72721

Seite: 1 [2] [3] [4] [5] [6] [7] [8] [9] [10] .. [23] [24] >>




Du musst dich registrieren um auf dieses Thema zu antworten.
Login :: » Name » Passwort

Ladezeit (sec.): 0.008 · Powered by miniBB 1.6 with parts of 1.7 © 2001-2003