Erstes eigenes Script

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

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

Obsserver
Posts: 56
Joined: Sun, 15. Feb 04, 02:31
x4

Erstes eigenes Script

Post by Obsserver »

Hallo ,

nachdem ich eben mein erstes kleines billigscript gebaut habe ( mein solarkraftwerk über mehere sectoren verschoben , ging irgendwie nicht darum detroy und neu spawnen lassen mit allen drum und dran wie waren und resis hinzufügen und zum schluss schilde ) dachte ich mir ich schreib mal was anständiges.
Machte mich also frohen mutes daran meine Kampfsoftware mk3 zu schreiben.
Das Ding soll kaufbar und primär für frachter sein.
Da ich meine gesammte flotte verloren habe als ich kurz mal ( 5 stunden ) nicht hingeschaut habe , wollte ich das teil so schreiben das die Frachter automatisch an die nächste freundlich / neutrale station andocken und mir eine meldung schreiben wo sie sind.
Das ganze sollten sie tun wenn ein feindliches schiff mehr als 6 ( <-? hoffe das bedeutet kilometer ) von meinem frachter entfernt auftaucht - erstmal zumindest ... denn mit den feindlichen schiffen sind wohl alle auf feindlich eingestellten gemeint ... und keiner meiner frachter muss sich vor einem piraten verstecken.

in der nächsten stufe wollte ich eine art "schutzversicherung abschliessen lassen ... diese muss man zusätzlich einkaufen.
bei einem angriff soll das ganze wie bei 1. von statten gehen aber zusätzlich sollen ein paar "bodyguards" gerufen werden ( irgendwelche kleinen jäger ).

also die planung steht ... die ersten zeilen code auch ... aber etwas verstehe ich noch nicht ganz :

wenn das script ständig oder in kurzen abständen prüfen soll ob ein feind in der nähe ist ( oder halt später ob man beschossen wird und das schild nur noch x % hat ) muss ich dann das ganze script in einer while schleife laufen lassen ?
Oder hat X2 eine art heartbeat welches solche script alle x ms von selbst neu aufruft ?

Danke

Obssi
matt32
Posts: 110
Joined: Sat, 18. Oct 03, 22:05
x2

Post by matt32 »

...yep .. ne andere chance haste im mom noch nicht ... das macht die cpu dann fertig ab einer gewissen anzahl frachter..
so wie ich gehört habe soll es im nächsten patch globale variablen geben...
wenn das weiterhilft ... aber normal musst du ja ständig schauen ob irgendwelche signale eingehen .. und wenn ein cluster erstmal einen frachter in der mangel hat, dann überlebt der selten ... ausser vielleicht mit der alpha schockwelle oder dem gamma kyonen ...

mich hat das auch genervt mit dem kaputtschiessen der frachter ...
die haben jetz alle gamma kyonen und sind 630 schnell ... bisher keinen verloren...nicht mal im xenon sector ...

aber wie schon gesagt .. ich spiele nicht so lange ein spiel und bin genervt, wenn man wochenlang in der gegend (sektoren) rumdaddelt um ein paar credits zu horten ...
da hab ich keinen spass dran :)
matt32
Posts: 110
Joined: Sat, 18. Oct 03, 22:05
x2

Post by matt32 »

..hab ich noch vergessen.. wenn der frachter angegriffen wird und du dann erst ein paar schiffe losschickst ist es eh zu spät ... außer du änderst den befehl move to sector und move to position etwas ab.

<?xml version="1.0" standalone="yes" ?>
<?xml-stylesheet href="x2script.xsl" type="text/xsl" ?>
<script>
<name>ship.cmd.warppos</name>
<version>0</version>
<engineversion>23</engineversion>
<description>Description</description>
<arguments>
<argument index="1" name="pos" type="Var/Sector Position" desc="select position" />
</arguments>
<sourcetext>
<line linenr="001" indent=""><var>$x = </var><var>$pos</var><text>[</text><var>0</var><text>]</text></line>
<line linenr="002" indent=""><var>$y = </var><var>$pos</var><text>[</text><var>1</var><text>]</text></line>
<line linenr="003" indent=""><var>$z = </var><var>$pos</var><text>[</text><var>2</var><text>]</text></line>
<line linenr="004" indent=""><var>$sec = </var><var>$pos</var><text>[</text><var>3</var><text>]</text></line>
<line linenr="005" indent=""><var>[THIS] -></var><text> set position: x=</text><var>$x</var><text> y=</text><var>$y</var><text> z=</text><var>$z</var></line>
<line linenr="006" indent=""><text>return </text><var>null</var></line>
</sourcetext>
<codearray>
<sval type="array" size="10"><sval type="string" val="ship.cmd.warppos" /><sval type="int" val="23" /><sval type="string" val="Description" /><sval type="int" val="0" /><sval type="int" val="0" /><sval type="array" size="5"><sval type="string" val="pos" /><sval type="string" val="x" /><sval type="string" val="y" /><sval type="string" val="z" /><sval type="string" val="sec" /></sval><sval type="array" size="6"><sval type="array" size="6"><sval type="int" val="129" /><sval type="int" val="1" /><sval type="int" val="131074" /><sval type="int" val="0" /><sval type="int" val="4" /><sval type="int" val="0" /></sval><sval type="array" size="6"><sval type="int" val="129" /><sval type="int" val="2" /><sval type="int" val="131074" /><sval type="int" val="0" /><sval type="int" val="4" /><sval type="int" val="1" /></sval><sval type="array" size="6"><sval type="int" val="129" /><sval type="int" val="3" /><sval type="int" val="131074" /><sval type="int" val="0" /><sval type="int" val="4" /><sval type="int" val="2" /></sval><sval type="array" size="6"><sval type="int" val="129" /><sval type="int" val="4" /><sval type="int" val="131074" /><sval type="int" val="0" /><sval type="int" val="4" /><sval type="int" val="3" /></sval><sval type="array" size="9"><sval type="int" val="767" /><sval type="int" val="131075" /><sval type="int" val="65536" /><sval type="int" val="131074" /><sval type="int" val="1" /><sval type="int" val="131074" /><sval type="int" val="2" /><sval type="int" val="131074" /><sval type="int" val="3" /></sval><sval type="array" size="3"><sval type="int" val="103" /><sval type="int" val="0" /><sval type="int" val="0" /></sval></sval><sval type="array" size="1"><sval type="array" size="2"><sval type="int" val="52" /><sval type="string" val="select position" /></sval></sval><sval type="int" val="0" /><sval type="int" val="0" /></sval>
</codearray>
</script>

.. in der datei !ship.cmd.moveposition.pl.pck
muss dann der call auf das script oben verweisen :)).. dann sind deine blitzschnell am tatort ..
für die longplayer kann man ja noch ne warpsoftware einbauen.. wer spass dran hat.. ist aber ziemlich aufwendig und bedarf vieler tests

.. das gleiche kannste mit move to sector machen
..einfach ein eigenes jumpscript einhängen ... meine springen immer positionsgenau und sind unabhängig von den toren :)

viel spass
matt32
Posts: 110
Joined: Sat, 18. Oct 03, 22:05
x2

Post by matt32 »

... hab mal kurz geschaut .. ich glaub du musst das hier nur etwas 'aufpeppen'

Script !ship.signal.attacked.ts
Version: 1
for Script Engine Version: 22

Description
Asynchron signal. attacked for TS TP ships
Arguments
1: attacker , Var/Ship/Station , 'the attacker'
2: action , Var/Number , 'action'
Source Text

001
002 * front mounted lasers
003 $frontlasers = [THIS] -> get max. number of lasers in turret 0
004 $maxlaserst = [THIS] -> get maximum laser strength
005 $frontmaxlaserst = [THIS] -> get max laser strength in turret 0
006
007 $random = random value from 0 to 100 - 1
008
009 if [THIS] != [PLAYERSHIP] AND ( $random < 30 OR [OWNER] == Player )
010 $r = random value from 5 to 11 - 1
011 $r = [THIS] -> launch $r fight drones: protect me or attack target=null
012 end
013
014 if $action == [ACTION_LAND_IN_STATION] OR $action == [ACTION_ENTER_GATE]
015 return null
016 end
017
018 * try to attack
019 $sobj = [THIS] -> get SectorObject ID
020 if not is script with prio 50 on stack
021 if ( [OWNER] == Player AND $sobj == 0 ) OR ( $random < 20 AND $frontlasers AND $frontmaxlaserst )
022 @ skip if not [THIS] -> call script '!ship.signal.attacked' : the attacker=$attacker action=$action
023 return null
024 end
025 end
026
027 if $sobj
028 $r = random value from 60 to 90 - 1
029 $timeout = random value from 20000 to 40000 - 1
030 @ $r = [THIS] -> defensive move: type=null, intensity=$r, timeout=$timeoutms, avoid object=$attacker
031 end
032
033 * try to fly to nearest station only if not already done...
034 if not is script with prio 50 on stack
035 if not is script with prio 99 on stack
036 if $random < 40 AND [OWNER] != Player
037 $flags = [Find.Friend] | [Find.Neutral] | [Find.Nearest]
038 $station = find station: sector=[SECTOR] class or type=null race=null flags=$flags refobj=[THIS] maxdist=null maxnum=null refpos=null
039 if $station
040 * run the flee to station part with prio 50
041 set script priority to 50
042 @ = [THIS] -> call script '!ship.sh.attack.ts.flee' : the attacker=$attacker station to dock at=$station
043 return null
044 end
045 end
046 end
047 end
048
049 return null


.. ist das original von egosoft ;)

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