Schiffe hacken

Hier ist der ideale Ort um über Scripts und Mods für X²: Die Bedrohung zu diskutieren.

Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators

User avatar
RavenWarrior90
Posts: 432
Joined: Mon, 29. Dec 08, 21:23
x4

Schiffe hacken

Post by RavenWarrior90 » Mon, 26. Sep 11, 14:48

Hey Leute,

hier in diesem Thread wurde schon vor längerer Zeit ein Script entwickelt, der aber niemals wirklich vollendet wurde: http://forum.egosoft.com/viewtopic.php?t=145882.

Das klingt alles sehr interessant und ich würde sowas auch voll gerne in meinem X2 haben wollen. Nur leider habe ich keine Ahnung vom Scripten und da bräuchte ich auf jeden Fall Hilfe.

Und das hier habe ich mir genau vorgestellt:

So soll es funktionieren:

Innerhalb von Stationen kann man Schiffe kapern, dazu muss man andocken, aus seinem Schiff aussteigen und im Raumanzug zum Schiff der begierde fliegen. Wenn man ganz nah am Schiff ist, kann man das Schiff mit einem Befehl in der Kommandokonsole übernehmen. Das Ganze ist natürlich vom Intro inspiriert worden und so soll es auch funktionieren. Nach dem erfolgreichen Diebstahl besteht eine Chance, dass man entdeckt wird und dann greifen Polizeikräfte an. Ebenfalls soll dann eine Chance bestehen, dass der Hackversuch fehlschlägt und man das Schiff nicht mehr kapern kann. Und wird man entdeckt oder stiehlt man erfolgreich ein Schiff, dann erleidet man Rufverlust beim Volk, von dem man das Schiff gestohlen hat (sollte aber auch nicht übertrieben sein).

Soviel dazu... die Leute in dem oben stehenden Link hatten ein paar Probleme, dies zu realisieren (ebenso finde ich die Idee mit der Bombe blöd, dass man bei einem fehlgeschlagenen Hackversuch in die Luft fliegt, das passt nicht so ganz... allerhöchstens bei Schiffen der Piraten, aber nicht bei den anderen Schiffen).

Ich hätte liebend gerne so ein PlugIn... das wollte ich schon immer mal machen können. Wenn ich nur wüsste, wie man scriptet UND wie man das macht, dass der Befehl in der Kommandokonsole auftaucht. Man hatte es bisher nur geschafft, dass man den Script manuell in Scriptmenü starten musste... aber das ist voll komisch und dann komme ich mir vor als würde ich cheaten oder etwas machen, was nicht in das Spiel gehört. Also den Scripteditor will ich im Spiel garnicht erst benutzen müssen... es soll wie eine offizielle Erweiterung sein.

Wie soll ich jetzt an die Sache rangehen? Ich bezweifle, dass jemand so großzügig ist und sich die Zeit nimmt, sowas zu programmieren... das nimmt ja auch bestimmt einiges an Zeit in Anspruch.

Hoffentlich kann mir da jemand helfen. Gruß,

RavenWarrior90

User avatar
Shadow dream
Posts: 1840
Joined: Thu, 1. Mar 07, 11:39
x3tc

Post by Shadow dream » Mon, 26. Sep 11, 15:07

vorweg: Im Pandora-Mod ist hacking (auch auf diese Weise) enthalten, allerdings kann ich noch nicht mit release-daten dienen...

Wie du Scripts ins befehls-menü bringst, siehst du hier. Ich hab das auch erst kürzlich angetestet und hatte anfangs ein paar probleme, bis es sauber lief. Insgesammt ist es dann aber doch nicht so schwer wie anfangs gedacht ;)

Schwierig sollte es also erst werden, wenn es darum geht ein hack-script zu starten. Da ich das unsere weder geschrieben, noch gesehen habe (also den code), kann ich auch nicht all zu viel dazu helfen. Grundsätzlich kannst du aber eines machen:
Du lässt das script eine zufällige Zahl aus dem bereich a-n wählen, dann nochmal (als seperate Variable), und wenn sie übereinstimmt, wird der Besitz überschrieben. (der glücksfaktor variiert dann einfach vom Zahlenbereich). Zusätzlich könntest du dann einen dritten bereich wählen lassen und sagst: wenn der wert < x kommt die Polizei, wenn > dann nicht. (ansich könntest du dieses Verfahren auch beim Schiffsklau anwenden)

Shadow
Wahre Gentlemen behalten sogar umzingelt von Löwen ihren Leitsatz: Ladies first.
Wann lernt die Gesellschaft endlich, dass Geld erst die Probleme macht, die wir haben?
[ external image ]
Topic - Gallery - Forum - Freiheit

User avatar
RavenWarrior90
Posts: 432
Joined: Mon, 29. Dec 08, 21:23
x4

Post by RavenWarrior90 » Mon, 26. Sep 11, 15:38

Ah danke schonmal für den Tipp... ich weiß zwar noch nicht so ganz, wie man das programmiert, aber ich verstehe in etwa, was du meinst ^^ . Ich finde es nur schwierig, mit Variablen zu arbeiten... früher konnte ich mal ein bisschen scripten, aber das habe ich längst wieder verlernt. Da konnte ich ein bisschen mit Variablen umgehen.

Hatte damals nur einen simplen Script gemacht, womit man irgendein Schiff der eigenen Kontrolle zuordnen kann.

Hmm... aber die Pandora-Mod muss ich mir mal ansehen ^^ ...

User avatar
Shadow dream
Posts: 1840
Joined: Thu, 1. Mar 07, 11:39
x3tc

Post by Shadow dream » Mon, 26. Sep 11, 15:55

zum script: du hast ja eh schon nen topic verlinkt ;) im letzten post steht schon mal ne ordentliche Version, an der du dich orientieren kannst!
So lernt man scripten: andere scripts lesen :D

Shadow
Wahre Gentlemen behalten sogar umzingelt von Löwen ihren Leitsatz: Ladies first.
Wann lernt die Gesellschaft endlich, dass Geld erst die Probleme macht, die wir haben?
[ external image ]
Topic - Gallery - Forum - Freiheit

User avatar
RavenWarrior90
Posts: 432
Joined: Mon, 29. Dec 08, 21:23
x4

Post by RavenWarrior90 » Mon, 26. Sep 11, 17:12

Ja da hast du wohl Recht ^^ ... aber ich wüsste jetzt nicht, was ich alles weglassen müsste, damit bei einem Fehlschlag nicht die Möglichkeit besteht, dass man stirbt und alles explodiert.

Nachher lösche ich zuviel und der Script funktioniert nicht mehr richtig. Dummerweise kann ich aber auch nicht so ganz aus dem Script rauslesen, wie die Variablen definiert wurden.

Ist alles noch ein wenig kompliziert und etwas undurchsichtig. Ich müsste dann aber auch noch eine Reihe anderer Dinge wissen:

- wie man z.B. prüft, ob das zu kapernde Schiff ein Schiff der Piraten ist (wegen Sprengfalle, das sollen wenn überhaupt nur Schiffe der Piraten haben)
- wie man vermeiden kann, dass der Script auch außerhalb einer Station funktioniert (weil das sonst ein übler Cheatscript ist, mit dem man jedes Schiff theoretisch einfach so kapern kann)
- wie man Schiffe generell spawnen lässt und wie man es anstellt, dass im Falle der Entdeckung eine zufällig zusammengestellte Flotte aus Jägern erstellt wird... es soll ja schliesslich nicht immer die selbe Staffel hinter einem herjagen, wenn man entdeckt wurde... die Schiffe müssen vom Volk der Station sein und es müssten Schiffe der Klassen M6-M3 sein... die Anzahl der Schiffe würde sich dann zufällig zusammenrechnen... so ca. zwischen 3 und 6 Schiffe der Klassen M6,M5,M4 und M3 (wobei M6-Schiffe mit geringer Wahrscheinlichkeit erschaffen werden... z.b. nur 10%)
- wie man einstellen kann, dass man an Ruf verliert, wenn man beim Hacken entdeckt wird... und man soll nur bei dem Volk an Ruf verlieren, dem das Schiff gehört

So, das wären wohl die Dinge, die solch eine Mod auf jeden Fall haben müsste... damit das alles ausgeglichen ist und vorallem auch reibungslos funktioniert.

Aber das ist sowas von kompliziert... darauf würde ich ja nie kommen, wie man das alles programmiert. Vorallen das mit den spawnenden Verfolgerschiffen wäre echt schwer. Die Bombe bei den Piratenschiffen ist nicht so wichtig...
Wichtig ist nur, dass im Falle der Entdeckung Feinde spawnen, die nur mich angreifen und dass der Script nur innerhalb einer Station funktioniert. Ach ja... und natürlich ist es auch wichtig, dass man an Ruf verliert beim entsprechenden Volk, wenn man entdeckt wurde.

Klingt ja wirklich wie eine unlösbare Aufgabe für mich xD ... für jemanden, der keien Ahnung vom Scripten hat und auch noch komplexe Ideen hat... Aua! :lol:

User avatar
Shadow dream
Posts: 1840
Joined: Thu, 1. Mar 07, 11:39
x3tc

Post by Shadow dream » Mon, 26. Sep 11, 17:51

Du machst hier viel mit warscheinlichkeiten! Und ja, das wird ein längeres script. Event. wäre eine aufteilung in mehrere einzel-scripts nicht verkehrt. So könntest du zB mitten im script die Polizei-Schiffe erstellen lassen, ohne den aufbau des kaperns zu "stören".
Das funktioniert mit dem "call script"-Befehl. Dafür muss das zu startende aber schon fertig sein - oder zumindest gespeichert.

zB bei den M6 könntest du sowas machen (wobei das geschriebene vom script-text abweichen könnte):

Code: Select all

001 $max.m6.menge = 2
002 $m6.zähler = 0
003 $Rasse = $Station get owner  \\ wobei hier zu berücksichtigen ist, dass die Station vom überscript mitgegeben werden muss! Hier steht Station dann unter "Arguments" definiert
004 while $m6.zähler < $max.m6.menge
005 $m6.warscheinlichkeit = get random number from 0 to 100 -1
006 if $m6.warscheinlichkeit <= 10
007   if $Rasse = Argon
008    $m6 = create ship: type=Zentaur Position=$Station ....  \\die genaue angabe hat noch mehr zu bieten! 
009   end
010   if $Rasse = Boron
........
0xx   inc = $m6.zähler
0yy end
das ist jetzt wirklich sehr grob gestaltet. Für genaue Zeilen bräuchte ich etwas länger :P
Wichtig ist erstmal, dass dir klar ist, welcher wert was macht.
"while" hat den sinn, dass eine Schleife entsteht. So kannst du mehrmals das selbe machen. hier zB können bis zu 2 M6 erstellt werden. Selbes Schema geht auf für Jäger - oder ganz andere Aufgaben!
Damit das while nicht endlos läuft, gibt es noch die Variable "m6.zähler" und die "max.m6.menge". Der Zähler sagt dem script, wie oft es schon das while wiederholt hat. "0xx inc = $m6.zähler ist" hier ganz wichtig! diese Zeile sagt dem script, dass es 1x läuft/gelaufen ist und ändert deshalb den wert aus Zeile 002 auf 1. Zeile 004 kontrolliert dann: 1<2 -> nochmal laufen. inc setzt den Wert dann auf 2; 2<2 (falsch) -> weiter ab dem "end" des "while"

Insgesammt gibt es einiges zu beachten, aber alles davon ist ganz logisch :D Wenn du was willst, musst du dem script nur sagen, was. Die Befehle erklären sich fast immer von selbst. (nur einzelne, wie hier zB das "inc" können verwirren).


Shadow
Wahre Gentlemen behalten sogar umzingelt von Löwen ihren Leitsatz: Ladies first.
Wann lernt die Gesellschaft endlich, dass Geld erst die Probleme macht, die wir haben?
[ external image ]
Topic - Gallery - Forum - Freiheit

User avatar
Chris Gi
Posts: 960
Joined: Wed, 20. Sep 06, 09:57
x3tc

Post by Chris Gi » Mon, 26. Sep 11, 18:37

RavenWarrior90 wrote:Klingt ja wirklich wie eine unlösbare Aufgabe für mich xD ... für jemanden, der keien Ahnung vom Scripten hat und auch noch komplexe Ideen hat... Aua!
Genauso habe ich scripten gelernt - keine Ahnung, aber jede Mengen Ideen. Und dann angefangen zu lesen - Hinweise gibt es hier ja genug, insbesondere ausgehend von diesem Thread, in dem u.a. ein Hinweis auf die Scriptbefehle gegeben ist.
wie man z.B. prüft, ob das zu kapernde Schiff ein Schiff der Piraten ist (wegen Sprengfalle, das sollen wenn überhaupt nur Schiffe der Piraten haben)
Das geht mit "get owner".
wie man vermeiden kann, dass der Script auch außerhalb einer Station funktioniert (weil das sonst ein übler Cheatscript ist, mit dem man jedes Schiff theoretisch einfach so kapern kann)
geht z.b. mit [PLAYERSHIP]->is docked (das heißt natürlich, dass das nur für das Spielerschiff funktioniert). Allerdings ist das nicht sicher, besser wäre es zu fragen, ob der Spieler in einem "Small ship" sitzt (also intern dockt) und in welcher Umgebung das Schiff ist und ob diese Umgebung eine Station ist...
wie man Schiffe generell spawnen lässt
Create Ship
Man ermittelt den Besitzer der Station (über "get owner") und erzeugt ein Schiff mit diesem Eigner. Das würde ich dann in der Station erstellen ("addto"-Parameter vom "create ship"-Befehl), wobei man dann bei M6 natürlich aufpassen muss. Noch besser wäre es vielleicht, die Schiffe, die die Station sowieso besitzt, für diese Aufgabe zu nutzen, aber das ist Geschmackssache...
wie man einstellen kann, dass man an Ruf verliert, wenn man beim Hacken entdeckt wird
"add notoriety" mit negativem Wert

Idealerweise würde man bereits im Menü prüfen, ob die Bedingungen für's Hacken (innerhalb einer Station, ggf. Entfernung zum Zielobjekt) erfüllt sind - dann wäre der Befehl nur dann auch ausführbar.
Also den Scripteditor will ich im Spiel garnicht erst benutzen müssen... es soll wie eine offizielle Erweiterung sein.
Das wird so gar nicht funktionieren - unsignierte Scripte laufen nur bei aktiviertem Script-Editor oder wenn Du einen Mod aktiv hast. Wenn Du keinen Mod aktiv ist, ist der Eintrag erst sichtbar, wenn der SE aktuv ist , das Spiel gespeichert und neu geladen wurde.
--------------------------------

[ external image ]

User avatar
RavenWarrior90
Posts: 432
Joined: Mon, 29. Dec 08, 21:23
x4

Post by RavenWarrior90 » Mon, 26. Sep 11, 22:21

@Chris Gi:
Das wird so gar nicht funktionieren - unsignierte Scripte laufen nur bei aktiviertem Script-Editor oder wenn Du einen Mod aktiv hast. Wenn Du keinen Mod aktiv ist, ist der Eintrag erst sichtbar, wenn der SE aktuv ist , das Spiel gespeichert und neu geladen wurde.
Ok, so meinte ich das garnicht. Dass der Scripteditor aktiviert wird, ist ja nicht schlimm... ich möchte ihn nur nicht verwenden müssen (also in den Editor reingehen und da Scripts manuell aktivieren müssen).

@Shadow Dream:

Ohje... das ist echt Wahnsinn :o ... das braucht doch gefühlte Jahre, bis ich dass alles drauf habe.

Aber wir kommen der Sache wenigstens schon näher ^^ . Ein paar Zeilen deines Codes kann ich aber nicht so ganz nachvollziehen (markierte Sachen verstehe ich nicht so ganz):

008 $m6 = create ship: type=zentaur Position = $Station...

-> Das sind doch Variablen, wenn ich das richtig sehe... wie sind die definiert? Und was ist mit der Station? Die Zeile sieht mir etwas unfertig aus... d.h. dass das Programm mit dieser Zeile noch garnicht weiß, welche Station gemeint ist ("get station?").

003 $Rasse = $Station get owner

-> Was für einen Überscript? Kann man nicht alles in einem Script ablaufen lassen? Warum zwei seperate Scripts?


Wie du siehst, herrscht einiges an Unverständnis :wink: ... aber ich denke mal, mit dem Überscript meinst du den, womit man die Schiffe hackt... und wenn eine bestimmte Bedingung erfüllt wird (d.h. wenn man entdeckt wird -> 10% Chance), dann wird dieser Spawn-Script aktiviert.

Da kommt natürlich wieder die Frage, wie man die Schiffe auf einen hetzt.

Ach ja... man müsste in dem Script auch noch mit einarbeiten, dass die Station im Falle des Entdecktwerdens feindlich wird...

Ich denke aber, du hast Recht mit den stationseigenen Schiffen... immerhin ist das unlogisch, wenn auf einmal aus dem Nichts Schiffe kommen.

Da kommt mir eine neue Idee: Wie wäre es, wenn bereits bestehende Kampfschiffe im Sektor feindlich werden? Also dass das dann Militär- oder Polizeischiffe sind. Und natürlich werden stationseigene Kampfschiffe gestartet.

Das würde ich mir so vorstellen: Bis zu 6 Schiffe im Sektor können feindlich werden, wovon maximal 2 Korvetten und maximal 1 Schiff ein M2 oder ein M1 sein darf... aber kein M1 und M2 zusammen. Und die Schiffe würden nach ein paar Stazuras wieder neutral werden.

Ich fasse mal der Übersicht halber alles nochmal zusammen:

Hacking-Script


- Schiffe kann man in einer Station übernehmen, man muss in der Station UND im Raumanzug sein
- das anvisierte Schiff kann übernommen werden und man darf maximal 15m entfernt sein
- Erfolgswahrscheinlichkeit: 70%
- Fehlschlagwahrscheinlichkeit: 30% -> danach ist das Schiff nicht mehr zu hacken... eventuell später nach 6 Ingame-Stunden wieder möglich
- Chance des Entdecktwerdens: 20% (auch bei Fehlschlag möglich)
- löst im Falle des Entdecktwerdens den Verfolger-Script aus
- im Falle des Entdecktwerdens erleidet der Spieler den selben Rufverlust, als wenn er ein Schiff durch Kampf gekapert hätte
- bei einem Schiff der Piraten besteht eine 20%ige Chance, dass eine versteckte Sprengfalle losgeht


Verfolger-Script


- alle Schiffe der Station werden gestartet und greifen das Spielerschiff an (nur Schiffe der Klassen M5, M4 und M3)
- Station wird feindlich
- 50% Chance, dass Station Verstärkung ruft
- wenn Verstärkung erfolgreich gerufen wurde, werden bis zu 6 Schiffe im gleichen Sektor feindlich und greifen das Spielerschiff an
- unter den maximal 6 Schiffen darf nur 1 Schiff ein M1 oder M2 sein
- unter den maximal 6 Schiffen dürfen maximal 2 M6 sein
- Feindschiffe und Station werden nach 6 Ingame-Stunden wieder neutral


-> Der Hacking-Script soll durch das Kommandomenü unter Spezialkommandos auslösbar sein


Das wäre dann alles... der Script soll genau so aussehen und so bleibt meine Idee jetzt auch ^^ ... ein paar Ansätze habe ich ja schon, aber das wird echt verdammt schwer.

User avatar
Shadow dream
Posts: 1840
Joined: Thu, 1. Mar 07, 11:39
x3tc

Post by Shadow dream » Tue, 27. Sep 11, 16:46

Überscript ist das eigentliche hackingscript, genau :) Also eigentlich das Hauptscript hier.

das $m6 in Zeile 008:
vorweg: das "$" gibt nur an, dass es sich um eine Variable handelt.
das $m6 ist hier eine "leere" Variable. Der Befehl der Zeile verlangt hier eine Variable. Da wir diese aber in diesem Beispiel nicht weiter verfolgt haben, fällt sie leer aus.
Tatsächlich würdest du sie aber für das komplette paket brauchen. Der Befehl lautet ja "create ship" -> Ein Schiff wird erstellt und das script muss wissen, wie es dieses erfassen kann. Darum die Angabe als Variable $m6.
Dieses Erfassen kann nebensächlich sein (zB wenn du die Map aufdeckst und einfach nur blind sateliten in die Sectoren pflanzt. Die müssen nichts mehr tun). Hier aber musst du dem Schiff sagen können, dass es ein angriffsziel hat. (etwa: $m6 -> set target [PLAYERSHIP]). Wichtig ist, dass dieser Befehl kommt, bevor die Schleife neu anfängt. denn wenn sie neu anfängt wird das zweite M6 in dieser variable angegeben. Das erste wieder zu bekommen kann sehr umständlich werden...

$Station wäre aus dem Hackingteil mitgeliefert. Da muss ja erfasst werden, ob der Spieler in einer Station ist. Ist die Station erfasst, kannst du diese Info in ein zweites Script weitergeben. Dieses zweite muss diese Variable nur unter "arguments" führen. d.h im zweiten script gibt es kein "get station" mehr. (Arguments sind infos, die dem script bei seinem Start gegeben werden. zB wenn man ausrüstung cheatet, gibt man an, was und wie viel (->Var/ware; number))

Wie du das hacking-script in das befehlsmenü bekommst, hab ich schon mal verlinkt :roll:

Zu deiner Übersicht:
1.)Spieler im Raumanzug: Überspringe die nächste Zeile (= Script beenden), wenn der Spieler im Raumanzug sitzt.

Code: Select all

001 skip if [PLAYERSHIP] == 'Raumanzug'
002return null
2.) Warscheinlichkeit: Hier arbeitest du einfach mit zufallswerten. Ein "$prozent = get random number 0 - 100" und ein "if $prozent <= 20" (also 20% warscheinlichkeit).

3.) Nicht mehr hackbar: Das ist dann doch ein sehr komplexer eingriff. Das heißt du müsstest das Schiff irgendwo notieren, damit es nicht mehr geklaut werden kann. Am einfachsten wäre es, diese Info auf die "Hülle" des Schiffes zu kleben (vergessen, wie das geht :o ). So kann das script immer das ziel überprüfen, ob es noch hackbar ist. Allerdings weiß ich nicht, ob das schiff ein anderes wird, sobald man ab und wieder an dockt...

4.) Verfolger: Da nimmst du einfach den "call script" befehl. Bedenke aber, dass dein Ziel-script schon fertig sein muss! nachträglich überarbeiten ist nicht ratsam, besonders wenn neue variablen rein müssen...
am besten nimmst du dort als start-input den wert "start", dann läuft es eigentständig weiter. sprich, wärend das hacking-script läuft, spawnen schon die angreifer ;) kann sehr nützlich sein. Falls du aber zB einen Wert ausrechnen lassen willst über ein zweit-script, brauchst du eine Variable und am "return" des zweiten script, gibst du an, was ausgerechnet wurde. (zB bei Warscheinlichkeit: return $warscheinlichkeit). Im beispiel der Warscheinlichkeit weiter oben hab ich ne Fix-zahl angegeben. Das kannst du aber auch über variable machen.
ich hör jetz besser auf, es wird sehr komplex :D

5.) Rufferlust:
add notoriety to race $Rasse -100 (zb)

6.) Sprengfalle:
eine zusätzliche Scheife bei einem erfassten Piratenschiff (if $Rasse == 'Pirat') setzt du einfach wieder ne prozentrechnung rein, und dann ein "destruct $ship: show explosion = [True]" und nochmal eines mit dem Spielerschiff.


Ab hier kenn ich mich zu wenig aus als dass ich genaues sagen könnte. Da müsste ich mich selbst erst rum plagen :roll:

Shadow
Wahre Gentlemen behalten sogar umzingelt von Löwen ihren Leitsatz: Ladies first.
Wann lernt die Gesellschaft endlich, dass Geld erst die Probleme macht, die wir haben?
[ external image ]
Topic - Gallery - Forum - Freiheit

UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader » Tue, 27. Sep 11, 17:22

zu 3.
Lokale Variablen ;)
und die Schiffe in der Station sind immer dieselben (besser: sie stammen aus demselben Pool.. an einer Station sind idr. ca. 15 Schiffe gedockt, aber nur ne handvoll davon ist wenn man in der Station ist tatsächlich im Hangar erreichbar.. und jedes mal wenn man neu dockt wird wieder durchgewürfelt ^^

und ne allgemeine Anmerkung: versuch nicht alles auf einmal zu schreiben - besonders als ungeübter Scripter übernimmt man sich damit.. baue strukturiert nach und nach die gewünschen Feutures in dein Gerüst ein..

1. Schiff mit einer gewissen warscheinlichkeit übernehmen (einfache sache, zufallszahl von 0 bis 100 und wenn grösser 50 dann Besitzer ändern)

2. das ganze in die Kommandokonsole (des Raumanzuges ;) ) einbinden

3. nur einen Hackingversuch pro Schiff erlauben (eine Lokale Variable auf ihren Inhalt prüfen, wenn [TRUE] abbrechen, wenn null oder [FALSE] das eigentliche Hacking starten)

4. mit weiteren Zufallszahlen arlamierung auslösen (also erstmal einen Eintrag ins persönliche Logbuch)

5. bei besagter Arlamierung Feindschiffe erstellen (erstmal immer dieselben)

6. A) die Feindschiffe je nach umständen zufällig generieren
B) die Feindschiffe nicht erstellen sondern von den lokalen Sicherheitskräften die benutzen

usw... usf..

es muss nicht alles auf einmal funktionieren, lediglich der Grundstein muss gelegt sein und darauf wird dann immer weiter aufgebaut ;)
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)

User avatar
Shadow dream
Posts: 1840
Joined: Thu, 1. Mar 07, 11:39
x3tc

Post by Shadow dream » Tue, 27. Sep 11, 18:29

Danke UniTrader :D


Deshalb würde ich hier zu unter-scripten raten ^^
An sich baust du dann ein Haupt-script, dass den Ablauf kontrolliert. Darunter hast du dann zB:
Prozent-rechner (hier könntest du dann nur ein ja/nein (1/0) zurück geben
Schiffe erstellen (lass es ruhig variabel. Nur ein create ship voll mit variablen. Das kannst du ja mehrmals wiederholen)
Rang verlust (auch hier nur ein kurzes Script mit variable
Sprengfalle
...

zumindest zu Anfang sollte dir das helfen die Übersicht zu wahren. Wenn du was ändern musst, stört keine ewig lange code-kette. Vorallem da wohl viele if und while vorkommen dürften ist es nützlich sowas zu verteilen...
vergiss aber nicht auch ein paar "wait = [Zeit]" einzulegen. der prozessor verträgt nicht endlose Code-ketten, vorallem weil dein script nicht das einzige laufende ist ;)

Shadow
Wahre Gentlemen behalten sogar umzingelt von Löwen ihren Leitsatz: Ladies first.
Wann lernt die Gesellschaft endlich, dass Geld erst die Probleme macht, die wir haben?
[ external image ]
Topic - Gallery - Forum - Freiheit

User avatar
RavenWarrior90
Posts: 432
Joined: Mon, 29. Dec 08, 21:23
x4

Post by RavenWarrior90 » Wed, 28. Sep 11, 19:59

Mist, der Script ist nicht mehr herunterladbar... und wie soll ich jetzt wissen, wie die Arguments definiert sind? Oder muss man Variablen nicht weiter definieren?

Habe es mal versucht und bin hoffnungslos überfordert mit dem Zeug... weil ich nicht weiß, was die Befehle genau machen und was bestimmte Dinge überhaupt bedeuten. Ich hatte noch nie einen Draht zur Programmierung... das kann ja was werden-

Hat jemand zufälligerweise den Script noch?

EDIT:

Ich versuche den gerade selber zu schreiben und ich hoffe, ich mache bisher alles richtig. Kann es sein, dass man garkeine Arguments soweit braucht?

User avatar
Shadow dream
Posts: 1840
Joined: Thu, 1. Mar 07, 11:39
x3tc

Post by Shadow dream » Wed, 28. Sep 11, 21:58

Naja es kommt doch einiges auf einmal rein getrudelt. Vorallem sollte man English weit genug beherschen, sonst geht gar nix.

Argumente werden oberhalb vom eigentlichen script (im ingame editor zumindest) definiert - also über den scriptzeilen.
mit "new argument" setzt du ein neues. Zuerst musst du den namen der Variablen angeben (in den Beispielen die Zeile mit dem "$", aber ohne dieses dollar-zeichen eingeben ;) ). Danach musst du angeben, welcher Art die Variable angehört. zB soll es eine Zahl sein, soll es ein Schiff sein, ...? danach gibst du noch eine beschreibung der Variable an (möglichst kurz).

wenn du dann bei script-zeilen Variablen angeben musst, stehen diese argument-variablem immer dabei. Oder du erstellst eine neue Variable (die dann nicht mehr so viele infos braucht).

Arguments haben an sich nur einen Sinn: Dem script gewisse grundinformationen von anfang an mit zu geben. Gewisse dinge kann man über das script erfassen lassen (was auch sinnvoll sein kann). Genau so gibt es auch scripts, denen man informationen zuwerfen muss.

Nehmen wir als beispiel ein script, dass warscheinlichkeiten ausrechnet:

Code: Select all

Argument: $prozent, Nummer, Prozentwert

001 $random = get random number from 0 to 100 -1
002 if $random < $prozent
003   return [TRUE]
004 end
005 return null
Erklärung:
Im Argument wird angegeben, wie hoch der Prozentwert sein soll. "$prozent" ist der Variablen-name, "Nummer" ist die Art der Variable und "Prozentwert" ist ist die Beschreibung.
im code:
001 eine zufällige Zahl zwischen 0 und 99 (dieses "-1" ist nur, weil 0 als erster wert gewählt wird und so das endergebniss wieder stimmt). hierbei ist $random die variable, die dann die Zahl enthällt.
002 hier wird gecheckt, ob der Prozentwert eingehalten wird (normales mathe ;) )
003 wird der wert eingehalten, wird ein "OK" gegeben und das script beendet.
004 wenn der Wert nicht eingehlaten wird, wird bis hier hin übersprungen
005 sollte übersprungen worden sein, endet das script hier - mit null als rückwert.

-> ein Überscript würde nun dieses [TRUE] bzw das "null" erhalten. ein dort folgendes "if" würde dann filtern: trifft die Aktion ein oder nicht?

Shadow
Wahre Gentlemen behalten sogar umzingelt von Löwen ihren Leitsatz: Ladies first.
Wann lernt die Gesellschaft endlich, dass Geld erst die Probleme macht, die wir haben?
[ external image ]
Topic - Gallery - Forum - Freiheit

User avatar
RavenWarrior90
Posts: 432
Joined: Mon, 29. Dec 08, 21:23
x4

Post by RavenWarrior90 » Thu, 29. Sep 11, 01:33

Hmm... also ich mache schon Fortschritte. Wie gesagt rekonstruiere ich den kompletten Script noch einmal und lerne dabei ein wenig, wie man sowas schreibt. Wenn ich damit fertig bin, sage ich bescheid... dann werde ich wohl einige Fragen haben, wie es danach weitergeht :) ...

Eine Frage habe ich aber schonmal:

Mit welchen Befehlen bricht man einen Script ab? Ich möchte programmieren, dass der Hackingvorgang abgebrochen wird, wenn man sich zu weit vom Schiff wegbewegt (weiter als 200m).

User avatar
Chris Gi
Posts: 960
Joined: Wed, 20. Sep 06, 09:57
x3tc

Post by Chris Gi » Thu, 29. Sep 11, 11:20

Das macht man mit der return-Anweisung. Also:

Code: Select all

if $distance > 20
     return null
end
Mit "return" beendet sich das Script und gibt den Wert, der hinter dem return steht, an das aufrufende Script (falls es eins gibt) zurück. In diesem Falle also den Wert null (=0, =false).

Viele Scripter nutzen für die obige Abfrage die alternative Möglichkeit über "skip":

Code: Select all

skip if $distance <= 20
     return null
Also, wenn die Entfernung maximal 20 m beträgt, wird die folgende Anweisung (nämlich das Script zu beenden) übersprungen. Ist die Entfernung > 20 m, wird die Anweisung ausgeführt, also das Script beendet.
Kann es sein, dass man garkeine Arguments soweit braucht?
Viele Scripte brauchen keine Argumente, denn vieles kann im Script selbst ermittelt werden.
Insbesondere für diesen Fall, dass man ein Hacking-Script ins Commando-Menü einbinden will, sind Argumente eher hinderlich. Die einzig sinnvolle Variable wäre hier ja das Schiff, das der Spieler hacken will, und dieses kann man im Menü nicht angeben, da ja nur Schiffe im Raum angezeigt werden.
Ich würde stattdessen das Ziel des Spielers abfragen mit
"$target = get player tracking aim".
--------------------------------

[ external image ]

User avatar
RavenWarrior90
Posts: 432
Joined: Mon, 29. Dec 08, 21:23
x4

Post by RavenWarrior90 » Thu, 29. Sep 11, 12:20

Ähm... sehe ich das richtig, dass $distance genauso definiert ist wie $tmp im Script auf der von mir verlinkten Seite?

Hier nochmal zur Verdeutlichung:

001 $shipjacker = get player ship
002 $tgtship = get player tracking aim
003 send incoming message ...
004 $wait = wait 10000 ms
005 $tmp = get distance between $shipjacker and $tgtship

So sieht das im Originalscript aus. Das habe ich auch alles schon so programmiert. Ich bin im Moment bei Zeile 20, habe also schon die Hälfte fertig so in etwa.

Und das müsste ich dann also anhängen:

006 if $tmp > 200
007 return null
008 end

oder:

006 skip if $tmp >= 200
007 return null

User avatar
Shadow dream
Posts: 1840
Joined: Thu, 1. Mar 07, 11:39
x3tc

Post by Shadow dream » Thu, 29. Sep 11, 13:34

Ja genau.

$shipjacker ist der Spieler
$tgtship ist das Ziel
und $tmp ist die Distanz, welche über "if" abgefragt wird.

Hier würde ich aber kein "skip if" machen, weil du sicher noch eine Nachricht senden willst (zu weit entfernt o.ä). Wenn die Distanz aber größer als 200m ist wird das script einfach beendet - keine Nachricht möglich!!
beim normalen "if" kannst du immer noch einen Ablauf vor das return null setzen.

skip if ist ein reiner tot-mechanismus. Entweder die nächste Zeile trifft ein oder nicht. Das ist sinnvoll am Anfang von einem script.
Hier wäre es sinnvoll zu erfassen, ob es ein Zielschiff gibt. Wenn es keines gibt, verbraucht das script unnötig ressourcen, weil es die ganzen folgenden Abläufe durchgeht.

Code: Select all

skip if $tgtship
return null
Ganz am anfang vom script prüft es, ob das Ziel exestiert. Gibt es ein Ziel, läuft das script. Gibt es kein Ziel, fällt es auf das return null -> ende.

Shadow
Wahre Gentlemen behalten sogar umzingelt von Löwen ihren Leitsatz: Ladies first.
Wann lernt die Gesellschaft endlich, dass Geld erst die Probleme macht, die wir haben?
[ external image ]
Topic - Gallery - Forum - Freiheit

User avatar
Chris Gi
Posts: 960
Joined: Wed, 20. Sep 06, 09:57
x3tc

Post by Chris Gi » Thu, 29. Sep 11, 14:34

Ähm... sehe ich das richtig, dass $distance genauso definiert ist wie $tmp im Script auf der von mir verlinkten Seite?
Ja, genau.
Und das müsste ich dann also anhängen:

006 if $tmp > 200
007 return null
008 end
Rchtig.
oder:

006 skip if $tmp >= 200
007 return null
Nein, Vorsicht: mit "skip" wird die nächste Anweisung übersprungen, wenn die Bedingung eintritt, die hintendran genannt ist. Also muss es heißen:

Code: Select all

006 skip if $tmp [color=lime]<=[/color] 200[code]

Wenn die Entfernung kleiner oder gleich 200 ist, wird die nachfolgende Zeile übersprungen. das Script also nicht verlassen. 

Allerdings hat Shadow Dream ja zurecht eingewendet, dass mit der "skip"-Konstruktion nicht mehr das Senden einer Nachricht möglich ist, mit einer if-end Konstruktion dagegen schon.

Allerdings hat Dein Konzept noch einen kleinen Haken: 

[quote]Schiffe kann man in einer Station übernehmen, man muss in der Station UND im Raumanzug sein[/quote]

Im Raumanzug gibt es kein Kommandomenü - d.h. so wird das nicht funktionieren. Du musst also das Hacken aus einem Schiff heraus machen. Das musst Du dann entsprechend bei der Entfernungsabfrage berücksichtigen. 
--------------------------------

[ external image ]

User avatar
Shadow dream
Posts: 1840
Joined: Thu, 1. Mar 07, 11:39
x3tc

Post by Shadow dream » Thu, 29. Sep 11, 18:50

Im Raumanzug gibt es kein Kommandomenü - d.h. so wird das nicht funktionieren. Du musst also das Hacken aus einem Schiff heraus machen. Das musst Du dann entsprechend bei der Entfernungsabfrage berücksichtigen.
Das ist nicht wirklich ein Problem. Solange man in einem Schff andockt, hat man eines da. ansonsten dürfte ja eines im Sektor sein, von dem man aus das Script starten kann ;)
Vergiss nicht: Auch in Stationen kann man aus dem Schiff aussteigen ;)

Edit: Was ich noch anmerken möchte (falls du die Variablen 1:1 übernommen hast): Du musst nicht die variabel-namen kopieren, der dich durcheinander bringt. Gib ruhig Namen an, damit du weißt, was diese Variabel macht/ist - etwa wie in den Beispielen die ich schon (vermutlich zu früh für deinen jetzigen Stand) gepostet hab.
zB statt $tmp nennst du sie $Distanz. Dem Script ist gleich, was für ein synonym da steht. DU musst damit klar kommen ;)

Shadow
Wahre Gentlemen behalten sogar umzingelt von Löwen ihren Leitsatz: Ladies first.
Wann lernt die Gesellschaft endlich, dass Geld erst die Probleme macht, die wir haben?
[ external image ]
Topic - Gallery - Forum - Freiheit

User avatar
RavenWarrior90
Posts: 432
Joined: Mon, 29. Dec 08, 21:23
x4

Post by RavenWarrior90 » Fri, 30. Sep 11, 00:24

Ah danke für die Tipps... schon bald werde ich den Script übernommen haben und dann beginnt die Anpassung von allem.

Da kommt mir noch eine Idee: Wie wäre es, wenn man sowas von Schiff aus macht? Und wie wäre es, wenn man das Schiffshacking als Software kaufen könnte?

Dann müsste man nur im Schiff bleiben und sich an das begehrte Schiff genügend annähern. Und wenn man nah genug dran ist, beginnt der Vorgang... entfernt man sich zu weit, bevor der Vorgang abgeschlossen ist, dann wird er beendet. Ist dann wie die System Override Software, nur kann man Schiffe damit komplett übernehmen. Dann würde ich aber zusätzlich zu der Maximalentfernung auch einbauen, dass man nicht zu schnell fliegen darf, denn die "Verbindung zum anderen Bordcomputer" muss ja stabil bleiben (siehe Terran Conflict -> Terranerplot, wo man eine Piratenstation scannen musste). Und man müsste einbauen, dass man damit nur Kleinschiffe übernehmen kann und dass der Pilot kurz vor der Besitzerübergabe das Schiff verlässt (wäre ja sonst unlogisch, wenn das Schiff übernommen wurde, aber der Pilot quasi noch im Cockpit sitzt).

Die frage wäre da: Wie fügt man eine Ware in das Spiel ein und wie macht man das, dass diese Ware an einer bestimmten Station käuflich ist (z.B. am Piratendock Moo Kyes Rache)? Die "Ware" soll eine Schiffserweiterung sein... wie die System Override Software eben. Ist bestimmt kompliziert, sowas zu machen.

Vorteil an der ganzen Sache wäre eben, dass man nicht unbedingt in einer Station und im Raumanzug sein muss und dass der Script auch mit Reunion oder Terran Conflict kompatibel ist.

Wäre das nicht dann schon eine Mod, was mir da vorschwebt?

Das ganze muss natürlich nicht sein... aber es wäre halt passender. Vorallem würde Terran Conflict davon profitieren, da GKS viel zu leicht zu erobern sind im Vergleich zu kleinen Schiffen.

Return to “X²: Die Bedrohung - Scripts und Modding”