Benötige Hilfe beim scripten /mein erstes "echtes"

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

User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

Levitahn wrote:Will sagen, ist der mittelpunkt JEDES Sectors 0,0,0 oder zieht sich das Koordinatensys über das gesamte X-Universe ?
Ja. Jeder Sektor hat sein eigenes Koordinatensystem. Dessen Mittelpunkt ist immer x0y0z0. Seltsam fand ich nur, dass, statt wie gewohnt die Z-, hier die Y-Achse die Vertikale Achse ist.
Levitahn wrote:Ansonnsten kann ich Dir nur den Tipp geben, so viele Variablen wie möglich zwischendurch ins Playerlog zu schreiben um sie zu prüfen.
Playerlog :?

@penntuete:
Ich denke mit meinen Koords schon gans gut zu liegen.
Das ist so weit oberhalb, dass die Toore gerade noch in der Erfassung liegen. Da kommt nicht soo häufig jemand vorbei um die Sats zu Schiessübungen zu misbrauchen.
Wenn die 10km hinter einem Toor liegen haben sie ja keine vernünftige Funktion mehr.
Aber ich kann mir vorstellen, die Option einzubauen, das die Sats automatisch platziert werden oder nach Spielervorgabe.
Das dürfte aber etwas überfordern, wenn der Spieler erst gucken muss, wie die Koordinaten von seiner LieblingsSatelitenPosition sind.
Wer schaut denn auf der Karte schon auf die Zahlen unten rechts?!

Wo ich das grad schreibe binn ich wieder etwas angepisst.
Ich hab mir einen freien Fleck in der Warentabelle für meinen ScoutNavComputer gesucht, die 49xxxx.xml geschrieben und versucht die Texte für Meldungen einzubinden.
Die ini.xxxx.xml, wo ich die Textdatei laden lasse funktioniert, also kann da eigendlich kein Fehler mehr sein.
Trotzdem hängt sich X² jedesmal auf, wenn ich das Script testen will.
:headbang: :gruebel:

Jemand interesse mal reinzuschauen? Dann poste ich das Script wieder.
Solong, GothicK
Levitahn
Posts: 75
Joined: Tue, 3. Feb 04, 16:07
x4

Post by Levitahn »

Hau rein Dein Script :D
Playerlog:
Unter AudioCommands gibts eine Methode, welche Variableninhalte in das Playerlogbuch schreibt (l). Ist imho die erste Methode "write to playerlogbook $var" oder so ähnlich. Solltest Du rege Gebrauch von machen, oder rausbekommen, wie der Debugger funzt :D

Levi
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

OK. Hier das Hauptscript:

Code: Select all

Script KriMe.scout2
Version: 0
for Script Engine Version: 23

Description
Description 
Arguments
1: Satelitetype , Nummer , '1 for NavSat - 2 for eSat' 
2: buy.jump , Nummer , 'How much jumps to buy Sat' 
Source Text

001   $sector.start = [THIS] -> get sector
002   if $Satelitetype == 1
003    $ware = Navigationssatellit
004   end
005   if $Satelitetype == 2
006    $ware = Erweiterter Satellit
007   end
008   if not ( $Satelitetype == 1 ) OR ( $Satelitetype == 2 )
009    return null
010   end
011   $sector.current = $sector.start
012   Cargochek:
013   $done = 0
014 @ = [THIS] -> call script 'KriMe.bySsat' :  Satelite to buy=$ware  Amount of jumps to buy=$buy.jump  current sector=$sector.current  result.count=$done
015   skip if not $done == 1
016    goto label search
017   skip if not $done == 2
018    goto label no.space
019   skip if not $done == 3
020    goto label no.money
021   skip if not $done == 4
022    goto label no.dealer
023   search:
024   set script command: COMMAND_SCS_SCOUT_N_SAT
025   $sector.current = [THIS] -> get sector
026 @ $sector.target = [THIS] -> call script 'KriMe.Search' :  yes  or no=[TRUE]  currend.sector=$sector.current
027   
028   Flight.to:
029 @ = [THIS] -> fly to sector $sector.target
030   goto label Enemy.Detect
031   
032   Placer:
033 @ = [THIS] -> move to position: x=0 y=35500 z=0 with precision 400 m
034   skip if not $Satelitetype != 1
035    $unload =  create ship: type=Navigationssatellit owner=Player addto=$sector.target x=0 y=36000 z=0
036   skip if not $Satelitetype != 2
037    $unload =  create ship: type=Erweiterter Satellit owner=Player addto=$sector.target x=0 y=36000 z=0
038   $unload = [THIS] -> add -1 units of $ware
039   write to player logbook: sprintf: pageid=5701 textid=1015, [THIS], [SECTOR], null, null, null
040 @ = wait randomly from 2500 to 6000 ms
041   goto label Cargochek
042   return null
043   
044   Enemy.Detect:
045   $flee = [FALSE]
046   $ememy.station =  find station in galaxy: startsector=$sector.current class or type=[Find.Random] race=Xenon flags=null refobj=null serial=null max.jumps=0
047   skip if $ememy.station -> exists
048    $ememy.station =  find station in galaxy: startsector=$sector.current class or type=[Find.Random] race=Khaak flags=null refobj=null serial=null max.jumps=0
049   skip if not $ememy.station -> exists
050    $flee = [TRUE]
051   $emeny.capship =  find ship: sector=$sector.current class or type=Big Ship race=Xenon flags=null refobj=null maxdist=null maxnum=null refpos=null
052   skip if $emeny.capship -> exists
053    $emeny.capship =  find ship: sector=$sector.current class or type=Big Ship race=Khaak flags=null refobj=null maxdist=null maxnum=null refpos=null
054   skip if not $emeny.capship -> exists
055    $flee = [TRUE]
056   if $flee == [TRUE]
057    set script command: COMMAND_MOVE_SECTOR
058    $message = sprintf: pageid=5701 textid=1016, [THIS], [SECTOR], null, null, null
059    send incoming message $message to player: display it=[FALSE]
060 @  = [THIS] -> fly to sector $sector.current
061    goto label search
062   end
063   goto label Placer
064   return null
065   
066   no.space:
067   set script command: COMMAND_RETURN_HOME
068   $message = sprintf: pageid=5701 textid=1011, [THIS], [SECTOR], null, null, null
069   send incoming message $message to player: display it=[FALSE]
070 @ = [THIS] -> call script '!move.movetosector' :  sector=$sector.start
071   return null
072   
073   no.money:
074   set script command: COMMAND_STAY
075   $message = sprintf: pageid=5701 textid=1012, [THIS], [SECTOR], null, null, null
076   send incoming message $message to player: display it=[FALSE]
077   return null
078   
079   no.dealer:
080   set script command: COMMAND_RETURN_HOME
081   $message = sprintf: pageid=5701 textid=1013, [THIS], [SECTOR], null, null, null
082   send incoming message $message to player: display it=[FALSE]
083 @ = [THIS] -> call script '!move.movetosector' :  sector=$sector.start
084   return null
Solong, GothicK
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

Das Frachtraumprüf- und Einkaufsscript. ES FUNZT.

Code: Select all

Script KriMe.bySsat
Version: 0
for Script Engine Version: 23

Description
Description 
Arguments
1: ware , Var/Ware , 'Satelite to buy' 
2: buy.jump , Value , 'Amount of jumps to buy' 
3: sector.current , Var/Sector , 'current sector' 
4: done , Value , 'result.count' 
Source Text

001   $max.jump = $buy.jump
002   
003   $amount = [THIS] -> get volume of ware $ware in cargo bay
004   if $amount >= 1
005    $done = 1
006    return $done
007    
008   end
009   $wanted.amount = [THIS] -> get free volume of ware $ware in cargo bay
010   if $wanted.amount < 1
011    $done = 2
012    return $done
013    
014   end
015   $money = get player money
016   $avprice = get average price of ware $ware
017   if $avprice > $money
018    $done = 3
019    return $done
020   end
021   search.dealer:
022   $dealer =  find station: product $ware with best price:  max.price=$avprice, amount=1, max.jumps=$max.jump, startsector=$sector.current, trader=[Find.Friend]
023   if not $dealer -> exists
024    $buy.jump = $buy.jump + 1
025    if $max.jump > ( $buy.jump + 1 )
026     $done = 3
027     return $done
028    end
029    goto label search.dealer
030   end
031   set script command: COMMAND_GET_WARE
032   $sector.dealer = $dealer -> get sector
033 @ = [THIS] -> fly to sector $sector.dealer
034 @ = [THIS] -> fly to station $dealer
035   if [THIS] -> is docked
036    = [THIS] -> buy $wanted.amount units of $ware to a max. price of $avprice Cr
037    $buyed.amount = [THIS] -> get true amount of ware $ware in cargo bay
038    $message = sprintf: pageid=5701 textid=1014, [THIS], [SECTOR], $buyed.amount, $dealer, null
039 @  = wait 10000 ms
040    $done = 4
041    return $done
042   end
043   return null
Solong, GothicK
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

Und hier das Sektorsuchscript: Es funzt nicht wirklich zufriedenstellend.
Problembeschreibung folgt.

Code: Select all

Script KriMe.Search
Version: 0
for Script Engine Version: 23

Description
Description 
Arguments
1: satelit , Var/Constant , 'yes or no' 
2: sector.currend , Value , 'currend.sector' 
Source Text

001   $jump = 1
002   $i = 1
003   loop:
004   $sector.target =  find a random sector: startsector=$sector.currend, jumps=$jump, owner=null
005   if $sector.target -> is sector known by the player
006    if $satelit == [TRUE]
007     goto label search.satelit
008    end
009    $i = ( $i + 1 )
010    skip if not $i >= 4
011     $jump = ( $jump + 1 )
012    goto label loop
013   end
014   goto label compere.jumps
015   search.satelit:
016   $sector.sat =  find ship: sector=$sector.target class or type=Erweiterter Satellit race=Player flags=null refobj=null maxdist=null maxnum=null refpos=null
017   skip if $sector.sat -> exists
018    $sector.sat =  find ship: sector=$sector.target class or type=Navigationssatellit race=Player flags=null refobj=null maxdist=null maxnum=null refpos=null
019   if $sector.sat -> exists
020    $i = ( $i + 1 )
021    goto label loop
022   end
023   compere.jumps:
024   $realjumps = get jumps from sector $sector.currend to sector $sector.target
025   if $realjumps > $jump
026    $i = 0
027    goto label loop
028   end
029   return $sector.target
Solong, GothicK
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

Also:

Es werden immernoch keine Sateliten gespawnt. Weis der [ external image ] wiso.

Und das Suchscript...

Es findet. Aber die von mir angedachte Priorisierung auf bekannte Sektoren OHNE eigene Sateliten funzt nicht.

Eigendlich sollte das Schiff, sofern es Sats verteilen soll, erst in die bekannten Sektoren fliegen, die noch keinen Satelit haben.
Es fliegt aber grundsätzlich in unbekannte Sektoren.

Das muss die übliche Betriebsblindheit sein, dass ich den Fehler nicht seh. *g*

So. Jetzt werd ich das spawnen auch in ein externes Script packen.
Vieleicht gehts dann.
Solong, GothicK
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

So. Die Absturzursache ist gefunden.
Zumindest die eine. *kicher*

Und die Suche funzt jetzt auch.

Einkaufen geht....

...NUR DIESE DAMNED SATELITEN WOLLEN EINFACH NICHT SPAWNEN!
[ external image ]
Solong, GothicK
wuerstchen2003
Posts: 3
Joined: Sat, 14. Feb 04, 19:37
x2

Post by wuerstchen2003 »

Ähhh... Was kostet Dein Script, wenn er dann mal funzt...? *liebguck*

Das neu-positionieren der Sat's hat mich nämlich bis jetzt davon abgehalten, ein neues Game zu starten... :oops:



BigBear
User avatar
LaSheR01
Posts: 507
Joined: Thu, 5. Feb 04, 08:49
x2

Post by LaSheR01 »

Bitte bitte beeile dich, ich warte auch sehnsüchtig auf dieses script !
Levitahn
Posts: 75
Joined: Tue, 3. Feb 04, 16:07
x4

Post by Levitahn »

@GothicK: Könntest Du das Setzen von Sats in unbekannten Sectoren optional machen ? Die würde ich gerne selbst erforschen :D

Was funzt denn genau nicht ? Die Sats werden nicht gesetzt ?

Levi
User avatar
LaSheR01
Posts: 507
Joined: Thu, 5. Feb 04, 08:49
x2

Post by LaSheR01 »

mein englisch ist eher das eines 6.-Klässlers, aber wenn ich mich nicht irre, dann macht das MAPPER script schon sowas ähnliches ?

"Description: This scripts adds a command to he Navigation Software Mk1 that order the ship to automacally deploy advanced satellites in sectors. It goes first to the sectors where the player is. I recomend a very fast ship, like the Paranid Pegasus."


oder bin ich jetzt aufm holzweg ? :lol:
User avatar
odo_blaue
Posts: 70
Joined: Wed, 6. Nov 02, 20:31
x3tc

Post by odo_blaue »

Hallo allerseits!
Da ich im englischen nicht bewandert bin, und noch nie einen Script geschrieben habe, find ich diese Diskussion sehr gut. Vor allem die deutschen Kommentare zwischen den Scriptzeilen, dadurch versteht man auch den Sinn des englischen Befehls zum Großteil.

Daher möchte ich einmal ein großes Lob an die Beteiligten aussprechen, und sie weiterhin, so wie andere bitten, dies mit ihren Scripten ab und zu auch zu tun. Ich find dies sehr lehrreich.

Gruß odo
Wünsche noch einen netten Tag!

Gruß odo
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

@LaSheR01
Gibts schon. Na und?
Soll ich mir desshalb den Spass nicht gönnen es selbst zu versuchen?
Ausserdem: Als ich anfing war der mapper ein reines cheatscript.
Das wollte ich nicht.
Ich wills auch nicht unbedingt besser machen. Na, ein bischen schon. :wink:
Ein bischen Ehrgeiz kann nicht schaden.

Wichtiger ist aber: Ich tu es einfach. Aus Spass an der Freude.
Das es sowas schon gibt trübt die Freude darüber überhaupt nicht, es selbst und ohne Anleitung geschafft zu haben.
Pah.

@odo_blaue:
Also, wenn ich jetzt noch alles auskommentieren soll, dann ist es halt doch noch nicht fertig. :wink:
Solong, GothicK
User avatar
LaSheR01
Posts: 507
Joined: Thu, 5. Feb 04, 08:49
x2

Post by LaSheR01 »

Lieber Gothick, bitte nicht falsch verstehen,
ich hab das nur geschrieben, falls du dir aus dem script was abguggen willst.
Die englischen scripte sind eh alle schlecht, weil dann im Menü steht: Read001011-00023 und sone Sachen, deshalb will und kann ich damit nix anfangen. Ich hoffe, das ist bei den deutschen scripten dann nicht so ?!

Außerdem macht das engl. script doch etwas weniger, oder ? z.b. nicht das mit den unentdeckten sektoren....

tütelü, wie weit bist du jetzt eigentlich ? :) *zappelndaufdasscriptwart*

ps: bin ebenfalls goth... :)
User avatar
odo_blaue
Posts: 70
Joined: Wed, 6. Nov 02, 20:31
x3tc

Post by odo_blaue »

Hallo allerseits!
GothicK wrote: @odo_blaue:
Also, wenn ich jetzt noch alles auskommentieren soll, dann ist es halt doch noch nicht fertig. :wink:
@Gothick
So meinte ich dies nun auch wieder nicht, alles auskommentieren. Wäre ja auch unverschämt das zu verlangen, aber hin und wieder so wie du es am Anfang gemacht hast.
Ich hoffe ja immer noch auf eine deutsche Dokumentation.
Wünsche noch einen netten Tag!

Gruß odo
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

AAARGH...

Ich dreh noch durch.
Das Einkaufen klappte, dafür das Verteilen nicht.
Jetzt klappt das Verteilen, da spinnt die Einkaufsroutine.
Jetzt werd ich erstmal [ external image ].
Und dann [ external image ] mir gehts nämlich grad [ external image ]

Achja: Die neue Funktion, vorzugeben wieviele unbekannte Sektoren mann erforschen will, klappt.
Damit kann mann dann auch vorgeben, dass nur Sateliten verteilt werden.
Und erhältlich ist die Software (ingame) auch schon. Zumindest in meinem Spiel.
Wenns so weitergeht werd ich's aber umtaufen in WindowsExplorer.[ external image ]

@LaSheR01:
Sry, wenn ich etwas bissig reagiert hab. Ich hab die letzten 5 Tage nur 4h geschlafen. (Unfreiwillig und nicht wegen X²).
Zu deinen Fragen (und denen der Anderen) zum Thema Scripts anpassen werd ich noch einen Thread erstellen.
Wenn ich wieder wach bin...[ external image ]
Solong, GothicK
Casin
Posts: 387
Joined: Sun, 25. Jan 04, 14:01
x4

Post by Casin »

Wenns spawnen der Satelittten nicht funzt schau dir doch einfach mal an wie Leute das in anderen Skripten gelöst haben.
Gibt doch glaub ich bei xscripting.com eins welches in jedem System ein Sat spawnt.
Sich schlau machen ist keine Schande, solange man nicht den gleichen Quelltext benutzt und einfach kopiert. :wink:

Wo genau sollen denn die Sats gespawnt werden ?
Ich hab mit meinen Adv.Sats gute Erfahrungen in der Sektor Mitte gemacht, jedoch hab ich sie etwa 15km über oder unter der Ekliptik gesetzt, und damit oft ausserhalb der "Erfassungsreichweite" von Piraten, Khaak greifen ja meist selten NavSats an nur wenn er grad in Reichweite ist.

Cya
MfG Cas
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

Das spawnwn klappt ja inzwischen.
Die Koordinaten sind etwa x0 y3600 y0.
Je nach der genauen Position des Schiffs.
Solong, GothicK
User avatar
GothicK
Posts: 248
Joined: Fri, 6. Feb 04, 14:47
x3tc

Post by GothicK »

Die Einkauffunktion will und will nicht arbeiten.
Komischerweise ging sie mal.

Ich poste mal den Teil des Scripts.
Vieleicht kann mir ja jemand weiterhelfen. *hoff*

Code: Select all

009   $amount.true = [THIS] -> get amount of ware $ware in cargo bay
010   *$amount.true = [THIS] -> get true volume of ware $ware in cargo bay
011   skip if $amount.true < 1
012    goto label start.loop
013   $amount.free = [THIS] -> get free amount of ware $ware in cargo bay
014   *$amount.free = [THIS] -> get free volume of ware $ware in cargo bay
015   $price.av = get average price of ware $ware
016   $price.max = get max price of ware $ware
017   $price = ( $price.av + $price.max ) / 2
018   $money = get player money
019   skip if $amount.free >= 1
020    goto label no.space
021   skip if $money >= $price
022    goto label no.money
023   shopping:
024   *$dealer =  find station: product $ware with min. jumps:  max.price=$price, amount=null, max.jumps=$buy.jump, startsector=$sector.current, trader=[THIS]
025   *skip if $dealer -> exists
026   *skip if $dealer
027    $dealer =  find station sells: resource $ware with best price: max.price=$price, amount=1, max.jumps=$buy.jump, startsector=$sector.current, trader=[THIS]
028   skip if $dealer -> exists
029   *skip if $dealer
030    goto label no.dealer
031   $sector.target = $dealer -> get sector
032 @ = [THIS] -> fly to sector $sector.target
033   if not $dealer -> exists
034    $sector.current = [THIS] -> get sector
035    goto label shopping
036   end
037 @ = [THIS] -> fly to station $dealer
038   if [THIS] -> is docked
039    $price.stat = $dealer -> get price of ware $ware
040    skip if $price.stat <= $price.av
041     goto label shopping
042    = [THIS] -> buy $amount.wanted units of $ware to a max. price of $price Cr
043    $amount.true = [THIS] -> get true volume of ware $ware in cargo bay
044 @  = wait 3000 ms
045    write to player logbook: sprintf: pageid=$pageid textid=1014, [THIS], [SECTOR], $amount.true, $dealer, null
046   end
Alles mit * davor kann ignoriert werden. Ich habe damit die Befehle ausgeklammert, weil ich sie nicht löschen wollte.
Ds erleichtert das testen, wenn man nicht die Befehle immer wieder neu eintragen muss.

EDIT Fast vergessen: Was zur Zeit passiert: Egal wie hoch ich bei den jumps zum kaufen gehe, er findet einfach keinen Händler.
Solong, GothicK
User avatar
LaSheR01
Posts: 507
Joined: Thu, 5. Feb 04, 08:49
x2

Post by LaSheR01 »

*schiiiiiiiiiiiiiiiiieb*


huhu, gothick, was is eigentlich aus der sateliten-sache geworden ?

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