Mod Frage

Hier ist der ideale Ort um über Scripts und Mods für X Rebirth zu diskutieren.

Moderators: Moderators for English X Forum, Scripting / Modding Moderators

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Mod Frage

Post by gruengruen » Thu, 29. Oct 15, 14:41

He

ich denke grade über eine marine fregatte mod nach.

Deswegen gleich meine erste frage: gibt es sowas schon?

lg

User avatar
Marvin Martian
Posts: 3548
Joined: Sun, 8. Apr 12, 09:40
x4

Post by Marvin Martian » Thu, 29. Oct 15, 14:54

ein Was? meinst du ein Enterschiff wie die TP & M7M aus X3:TC/AP?

theoretisch kann man wohl die Marines in die Drohnenrampen stopfen, eine Funktion haben diese aber dann noch nicht

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Thu, 29. Oct 15, 15:34

hi:)

ja genau ein Enterschiff.
Theoretisch wäre das eine ähnliche Funktion wie die von Architekt.
Der sietzt auch auf einem anderen Schiff und bekommt von der skunk einen Befehl.
Statt also eine Station zu bauen soll der MArineofficer die drohnen starten.

Als Schiff man ja als erstes nen normalen Frachter nehmen.
Die nächste Frage wäre dann noch wie man die Funktion "Entern" ( vom "Mauscursor") mit dem Officer auf dem Frachter verlinkt

User avatar
Marvin Martian
Posts: 3548
Joined: Sun, 8. Apr 12, 09:40
x4

Post by Marvin Martian » Thu, 29. Oct 15, 17:19

an den Schnelloptionen herumpfuschen wird wohl schwer

MD/Boarding.xml
scheint aber auf den ersten Blick so ausgelegt zu sein dass prinzipiell auch ein anderes als das Playership Marine und Stoßtrupp stellen kann

vermutlich kann man das Event also auch per Conversation triggern, z.b. auf Schiffe in einem bestimmten Abstand

um die Zerstörung der Subsysteme und den ganzen anderen Zauber muss sich aber weiterhin der Player kümmern, außer man strickt das noch mit der SchiffsAI um


:arrow: einfacher wäre es aber wohl beim Start der Boarddingpods einfach noch auf Gefolgsschiffen nach Marines zu suchen, was die Enterstärke erhöhen würde und weit weniger Zauberei bedarf
Die Marines kann man wie gesagt einfach in die Drohnenrampe stecken und von dort anfordern

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Thu, 29. Oct 15, 19:52

erstmal danke für den tip mit der Xml Datei.

Deinen Ansatz , die Marines von einem anderen Schiff anzuforden,finde ich sehr gut .
Mal schauen.
Danke erstmal:)

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Fri, 30. Oct 15, 00:07

da habe ich doch gleich ne neue Anfängerfrage.

Also ich erstelle also eine eigenden Mission "Enterschiff" die
mehr oder weniger Boarding.xml ist.
Damit übernehm ich erstmal die übriege Handlung.

Die Frage ist wie kommen die Mariens ursprünglich auf das Enterschiff.
Sie sollen nicht beim Enter event erstellt werden sondern schon vorher gekauft werden. Also beim Recruter kauf event einhaken?

wenn man übrings statt marins ->androiden kaufen würden könnte man sich unter umständen (immersions mässig) erklären (kann sich super klein packen) wieso die alle in die skunk rein gehen.
so ala http://jedipedia.wikia.com/wiki/Pistoek ... age-Droide
Der Umstand das die rund 50 Soldaten irgendwo zwischen toilette und bad in der skunk versteckt sind stört mich total.
Das wäre dann nur den Textstring von marines in android marins ändern
rest macht die Vorstellung.

User avatar
Marvin Martian
Posts: 3548
Joined: Sun, 8. Apr 12, 09:40
x4

Post by Marvin Martian » Fri, 30. Oct 15, 09:56

mach dir keine Gedanken dazu, die Features der Skunk passen zu einem kleinem Großschiff, aber nicht zur Skunk
Betrachte die Mühle einfach als Tardis, sonst kannst du nie erklären warum da 8 Drohnen die eine ähnliche Größe wie die Skunk haben und die besagten Marines MIT Enterkapseln die ebenfalls ziemlich groß sind reinpassen

eine eigene Boarding.xml würde ich da nicht unbedingt verwenden, eher die vorhandene modifizieren

weitere Schiffe kannst du damit finden

Code: Select all

<create_group groupname="$boardingfleet"/>
<do_all exact="$boardership.subordinates.count" counter="$i">
	<do_if value="$boardership.subordinates.{$i}.availableunits.{unitcategory.marine}.count and $boardership.zone == $boardership.subordinates.{$i}.zone">
		<add_to_group groupname="$boardingfleet" object="$boardership.subordinates.{$i}" />
	</do_if>
</do_all>
und diese dann neben dem Boardingship in der
cue name="LaunchBoardingPods" starten und dich im weiteren des Quellcodes dann an request_units, remove_units, return_units orientieren wo du das alles auf die Schiffe verteilst


Tja, die Marines auf ein Schiff zu bekommen ist relativ einfach per scripting
eine MD die ungefähr so aussehen könnte (ungetestet, nur kurz zusammengezimmert)
Transfer erfolgt dann über den Marine der Skunk zu einem beliebigen Gefolgsschiff das freie Drohnenplätze hat

EDIT: aktueller Stand http://forum.egosoft.com/viewtopic.php? ... 29#4561629
Last edited by Marvin Martian on Sat, 31. Oct 15, 19:35, edited 1 time in total.

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

Post by UniTrader » Fri, 30. Oct 15, 12:16

Auch wenn ich gerade nix beitragen kann - interessantes Thema, ich werde es bestimmt verfolgen ;) vor allem auch weil mich die TARDIS Skunk ebenfalls stört, wobei mein Vorhaben noch ein wenig radikaler ist: die Skunk kann keine Marines und Drohnen mehr tragen sondern diese werden von den Schiffe im Player-squad zur Verfügung gestellt
aber bis ich damit anfange vergeht bestimmt noch ein Jahr, gibt bei meinem Projekt erst noch eine Menge anderer Sachen die zuerst fertig werden müssen....
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 ;)

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Fri, 30. Oct 15, 14:31

he ihr beiden - erstmal vielen lieben Dank für solche prominente Aufmerksamkeit:)
Ich programmieren zwar schon relative lange(java und c#) aber ich bin ich noch sehr am Anfang was das Thema X Rebirth Modding angeht.
Eigentlich ist das ganze gestern Abend bei jede Menge Bier entstanden
und dem Bedürfnis etwas positives beizutragen statt immer nur über das Spiel zu nörgeln was nicht geht.
Nach Marvins Post gabs erstmal jede menge Google auch wo man denn da ansetzt,und vor allem welche Programmiersprache etc.

so nun schau ich mir erstmal in ruhe Marvins beispiel Code an:-)

User avatar
Marvin Martian
Posts: 3548
Joined: Sun, 8. Apr 12, 09:40
x4

Post by Marvin Martian » Fri, 30. Oct 15, 15:00

zum einfügen/ersetzen von Code per patch in der bestehenden boarding.xml dürfte dir http://forum.egosoft.com/viewtopic.php?t=354310 helfen
ich würde hier wirklich nur das Handling der Marines aus dem Boardingship auf mehrere Schiffe aufbohren, den Rest kann man dann erst mal lassen

Final muss man dann einfach sehen ob es noch Sinn macht eine Enterfregatte zu basteln
zwar wird aktuell der Entertrupp nahe der Skunk einfach irgendwo erstellt, aber auch das könnte man für die Gefolgsschiffsmarines noch verbessern in dem die Landepods beim Schiff/Dock erstellen lässt
womöglich kann man diese sogar irgendwie an der Drohnenrampe selbst starten lassen - müsste man mal experimentieren

persönlich würde mir statt einer Fregatte eher sowas wie ein Hymir mit ~20-30 Drohnen-bzw. Marineslots ohne Laderaum vorschweben der mit besseren Antrieben dann auch mit der Skunk mithält
dann reduziert man die Skunkmarines auf einige wenige und muss seine Mannschaften aus den Gefolgsschiffen beziehen - ist wahrscheinlich auch eher machbar, da IMO der [Entern] button irgendwo in der Engine tiefer verdrahtet ist

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Fri, 30. Oct 15, 18:12

ja. danke:)
ich muss glaub erstmal viel lesen.

Ich bin auch über
http://www.egosoft.com/download/x_rebir ... rGuide.pdf gestolpert ich werde beide links mal durchakern.

Die nächste Frage wird dann wohl sein wie entpacke ich die Scripts weil im Rebirth Verzeichnis war davon nichts zu sehen aber vielleicht erübrigt sich bald die Frage von selbst:)
Einen xml Editor habe ich schon über das Forum gezogen.

Ich hätte gern das die Skunk eher die Rolle eines Kommandoschiffs einnehmen würde. Das meint das Ren mehr delegiert.

zu dem Enterschiff selbst.
Von der Idee her hätte ich gern das der Spieler ein oder mehrerer Enter-Schiff haben kann die quasi autonom agieren.
Autonom meint :die Spieler Aktion soll sich auf Auswahl des Ziels beschränken.

Also auch kein "ich hab dir mal ein paar Ziele ausgewählt" bla.
Entweder ist die Entermannschaft elite und schaffts allein oder das
Schiff wird zerblassen.
Natürlich kann der Spieler nachhelfen aber es sollte ihm überlassen bleiben ob er hilft oder nicht. Das Missions design von Boarding ist derzeit wie ein Tutorial und zwingt den Spieler jedesmal die selben Schritte zu tun. Was irgendwann nicht nur sehr schnell langweilig wird sondern
es ist auch seltsam bevormundend für ein Sandkasten-Spiel.

-->Auf einen einzelnen Befehl hin soll das Schiff zum Ziel beschleunigen
, Schilde und Türme selbstständig angreifen es also "enter fertig" machen und dann im Anschluss die marines entsenden
Zwischen werden Status Updates an den Spieler gesendet.

Auch schick wärs wenn man der job Ai dieses Enterschiffs
unterschiebt und Piraten eben auch Schiffe entern könnten.

aaaaaaber ich denke ich werde es erstmal so machen wie du gesagt hast.
Marines werden normal gekauft aber dann Manuel oder automatisch auf ein neues Enterschiff übertragen.Erst dachte ich es würde reichen sich einfach eine Zahl irgendwo zu merken aber die marines haben ja selbst auch Zustände die irgendwo ja auch gespeichert werden. vermutlich im marin Objekt selbst ...wenns sowas gibt:).
Nach "Enter" Befehl wird halt das normale Mission desgin abgefeuert und dann am ende geschaut bei welchen Schiff die Marines sind und von dort aus die Kapseln gespawnt.

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

Post by UniTrader » Fri, 30. Oct 15, 19:23

die grundlagen vom XR-Modding hab ich auch hier beschrieben:
http://forum.egosoft.com/viewtopic.php?t=370503
denke das hilft dir weiter als die englische Anleitung, weils wirklich von ganz vom Anfang anfängt, nicht mittendrin ;)
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 ;)

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Fri, 30. Oct 15, 19:44

joo das ist was ich gesucht habe.
danke da wühl ich mich jetzt erstmal durch.-)

User avatar
Marvin Martian
Posts: 3548
Joined: Sun, 8. Apr 12, 09:40
x4

Post by Marvin Martian » Sat, 31. Oct 15, 19:34

da ich mich jetzt doch noch etwas damit beschäftigt habe hier der aktuelle Stand

MySpBoarding.xml (für den Transfer der Marines zwischen Skunk<>Geleitschffe)

Code: Select all

<?xml version="1.0" encoding="utf-8"?>

<mdscript name="My_Specialboarding" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="md.xsd">
	<cues>

		<cue name="SectionHandler_MyBoarding_Marine" instantiate="true" >
			<conditions>
				<check_any>
					<event_conversation_started conversation="default" />
					<event_conversation_returned_to_section section="default" />
				</check_any>
				<check_value value="event.object.type" exact="entitytype.marine" />
				<check_value value="event.object.trueowner" exact="faction.player" />
				<check_value value="event.object.iscontrolentity" />
			</conditions>
			<actions>
				<add_player_choice_sub text="'Truppen verlegen'" section="mysp_transfer" selectable="event.object.container.availableunits.{unitcategory.marine}.count" comment="INIT" />
			</actions>
		</cue>

		<cue name="MyBoarding_work" instantiate="true">
			<conditions>
				<check_any>
					<event_conversation_next_section sectionprefix="mysp_"/>
					<event_conversation_returned_to_section sectionprefix="mysp_" />
				</check_any>
			</conditions>
			<actions>

				<do_if value="event.param" exact="'mysp_do_transfer'">
					<do_if value="event.param2? and event.param2.{3}?">
						<set_value name="$from" exact="event.param2.{2}" />
						<set_value name="$to" exact="event.param2.{3}" />
					</do_if>
					<do_all exact="unitcategory.marine.maxmk" counter="$i" reverse="true" comment="Best first">
						<do_if value="$from.availableunits.{unitcategory.marine}.mk.{$i}.count" min="1">
							<set_value name="$amount" exact="[$from.availableunits.{unitcategory.marine}.mk.{$i}.count, $to.units.maxcount - $to.units.count ].min" />
							<do_all exact="$amount">
								<add_units object="$to" macro="$from.availableunits.{unitcategory.marine}.mk.{$i}.list.{1}" exact="1" />
								<remove_units object="$from" macro="$from.availableunits.{unitcategory.marine}.mk.{$i}.list.{1}" exact="1" />
							</do_all>
						</do_if>
						<do_if value="$to.units.maxcount - $to.units.count" exact="0">
							<break />						
						</do_if>
					</do_all>
					<remove_value name="$from"/>
					<remove_value name="$to"/>
					<remove_value name="$amount"/>
				</do_if>

				<do_if value="event.param" exact="'mysp_transfer'">
					<add_player_choice_sub text="'von Skunk'" position="top_left" section="mysp_select" choiceparam="[1, 'free']" />
					<add_player_choice_sub text="'zu Skunk'" position="top_right" section="mysp_select" choiceparam="[1, 'skunk']" />				
				</do_if>
				<do_elseif value="event.param" exact="'mysp_select'">

					<create_group groupname="$boardingfleet"/>
					<create_group groupname="$freespace"/>
					<create_group groupname="$boardingfleet_freespace"/>
					<do_all exact="event.object.container.subordinates.count" counter="$i">
						<do_if value="event.object.container.subordinates.{$i}.availableunits.{unitcategory.marine}.count and event.object.container.zone == event.object.container.subordinates.{$i}.zone">
							<add_to_group groupname="$boardingfleet" object="event.object.container.subordinates.{$i}" />
							<do_if value="event.object.container.subordinates.{$i}.units.maxcount - event.object.container.subordinates.{$i}.units.count">
								<add_to_group groupname="$boardingfleet_freespace" object="event.object.container.subordinates.{$i}" />
							</do_if>
						</do_if>
						<do_elseif value="event.object.container.subordinates.{$i}.units.maxcount - event.object.container.subordinates.{$i}.units.count and event.object.container.zone == event.object.container.subordinates.{$i}.zone">
							<add_to_group groupname="$freespace" object="event.object.container.subordinates.{$i}" />
						</do_elseif>
					</do_all>

					<do_if value="event.param2? and event.param2.{2}?">
						<set_value name="$do" exact="event.param2.{2}" />
						<set_value name="$lstart" exact="event.param2.{1}" />
					</do_if>
					<do_else>
						<set_value name="$do" exact="'free'" />
						<set_value name="$lstart" exact="1" />
					</do_else>

					<do_if value="$do" exact="'free'">
						<create_group groupname="$to"/>
						<add_to_group groupname="$to" list="$boardingfleet_freespace.list" />
						<add_to_group groupname="$to" list="$freespace.list" />
						<set_value name="$from" exact="event.object.container" />
						<set_value name="$lmax" exact="$to.count" />
						<do_all exact="unitcategory.marine.maxmk" counter="$i">
							<do_if value="$fromlist?">
								<set_value name="$fromlist" exact="$fromlist + '/%1'.[$from.availableunits.{unitcategory.marine}.mk.{$i}.count]" />
							</do_if>
							<do_else>
								<set_value name="$fromlist" exact="'%1'.[$from.availableunits.{unitcategory.marine}.mk.{$i}.count]" />
							</do_else>
						</do_all>
					</do_if>
					<do_elseif value="$do" exact="'skunk'">
						<create_group groupname="$from"/>
						<add_to_group groupname="$from" list="$boardingfleet.list" />
						<set_value name="$to" exact="event.object.container" />
						<set_value name="$lmax" exact="$from.count" />
					</do_elseif>
					<remove_value name="$boardingfleet"/>
					<remove_value name="$freespace"/>
					<remove_value name="$boardingfleet_freespace"/>


					<do_all exact="6" counter="$i">

						<do_if value="$i == 6 and ($lstart + 1) le $lmax">
							<add_player_choice 		text="'Next 5, start with %1 of %2'.[$lstart, $lmax]" position="bottom_right"	section="mysp_select" choiceparam="[$lstart, $do]"/>
						</do_if>
						<do_elseif value="$lstart le $lmax">
							<do_if value="$do" exact="'free'">
								<add_player_choice text="'%1 [%2/%3][%4]'.[$to.{$lstart}.name, $to.{$lstart}.units.{unitcategory.marine}.count, $to.{$lstart}.units.maxcount - $to.{$lstart}.units.count, $fromlist]" 	position="$i" 	section="mysp_do_transfer" choiceparam="[1 ,$from, $to.{$lstart}]" />
							</do_if>
							<do_elseif value="$do" exact="'skunk'">
								<do_all exact="unitcategory.marine.maxmk" counter="$j">
									<do_if value="$fromlist?">
										<set_value name="$fromlist" exact="$fromlist + '/%1'.[$from.{$lstart}.availableunits.{unitcategory.marine}.mk.{$j}.count]" />
									</do_if>
									<do_else>
										<set_value name="$fromlist" exact="'%1'.[$from.{$lstart}.availableunits.{unitcategory.marine}.mk.{$j}.count]" />
									</do_else>
								</do_all>
								<add_player_choice text="'%1 [%2/%3][%4]'.[$from.{$lstart}.name, $to.units.{unitcategory.marine}.count, $to.units.maxcount - $to.units.count, $fromlist]" 	position="$i" 	section="mysp_do_transfer" choiceparam="[1 ,$from.{$lstart}, $to]" selectable="$to.units.maxcount - $to.units.count" />
								<remove_value name="$fromlist"/>
							</do_elseif>
							<set_value name="$lstart"  operation="add" exact="1" />
						</do_elseif>
						<do_elseif value="$i == 6">
							<add_player_choice_return text="{1002,20}" position="bottom_right" comment="Back"/>
						</do_elseif>

					</do_all>

					<remove_value name="$from"/>
					<remove_value name="$to"/>
					<remove_value name="$fromlist"/>
					<remove_value name="$lstart"/>
					<remove_value name="$lmax"/>
				</do_elseif>
			</actions>
		</cue>	
	</cues>
</mdscript>
das Patchscript für die Boarding.xml

Code: Select all

<?xml version="1.0" encoding="utf-8" ?>
<diff>
	<add sel="//set_value[@name='$boardership']" pos="after">
		<do_if value="$boardership?"> 
			<create_group groupname="$BoardingFleet"/>
			<add_to_group groupname="$BoardingFleet" object="$boardership" />
			<do_all exact="$boardership.subordinates.count" counter="$i">
				<do_if value="$boardership.subordinates.{$i}.availableunits.{unitcategory.marine}.count and $boardership.zone == $boardership.subordinates.{$i}.zone"> 
					<add_to_group groupname="$BoardingFleet" object="$boardership.subordinates.{$i}" /> 
				</do_if> 
			</do_all>
		</do_if> 
	</add>

	<add sel="//cue[@name='Finish']/actions" pos="prepend">
		<remove_value name="$BoardingFleet"/> 
	</add>

	<add sel="//library[@name='ClearOnFail']" pos="after">
		<!--
		<set_value name="$objectmacro" exact="macro.character_argon_male_marine_mk1_macro" />
		<include_actions ref="DeleteUnitFleet"/>
		-->
		<library name="DeleteUnitFleet">
			<actions>
				<do_all exact="unitcategory.marine.maxmk" counter="$xi">
					<do_if value="unitcategory.marine.mk.{$xi}.list.indexof.{$objectmacro}"> 
						<set_value name="$mk" exact="$xi" />
						<break />
					</do_if>
				</do_all>
				<do_all exact="$BoardingFleet.count" counter="$xi"> 
					<do_if value="$BoardingFleet.{$xi}.units.{unitcategory.marine}.mk.{$mk}.count" negate="true"> 
						<continue />
					</do_if> 
					<do_if value="$BoardingFleet.{$xi}.units.{unitcategory.marine}.mk.{$mk}.count - $BoardingFleet.{$xi}.availableunits.{unitcategory.marine}.mk.{$mk}.count"> 
						<remove_units object="$BoardingFleet.{$xi}" macro="$objectmacro" exact="1" unavailable="true"/> 
						<break />
					</do_if> 
				</do_all>
				<remove_value name="$objectmacro"/>
				<remove_value name="$xi"/>
				<remove_value name="$mk"/>
			</actions>
		</library>
		<library name="AddUnitFleet">
			<actions>
				<do_all exact="unitcategory.marine.maxmk" counter="$xi">
					<do_if value="unitcategory.marine.mk.{$xi}.list.indexof.{$objectmacro}"> 
						<set_value name="$mk" exact="$xi" />
						<break />
					</do_if> 
				</do_all>
				<do_all exact="$BoardingFleet.count" counter="$xi"> 
					<do_if value="$BoardingFleet.{$xi}.units.maxcount - $BoardingFleet.{$xi}.units.count" negate="true"> 
						<continue />
					</do_if> 
					<add_units object="$BoardingFleet.{$xi}" macro="$objectmacro" exact="1"/> 
					<break />
				</do_all>
				<remove_value name="$objectmacro"/>
				<remove_value name="$xi"/>
				<remove_value name="$mk"/>
			</actions>
		</library>
		<library name="ReturnUnitFleet">
			<actions>
				<do_all exact="unitcategory.marine.maxmk" counter="$xi">
					<do_if value="unitcategory.marine.mk.{$xi}.list.indexof.{$objectmacro}"> 
						<set_value name="$mk" exact="$xi" />
						<break />
					</do_if> 
				</do_all>
				<do_all exact="$BoardingFleet.count" counter="$xi"> 
					<do_if value="$BoardingFleet.{$xi}.units.{unitcategory.marine}.mk.{$mk}.count" negate="true"> 
						<continue />
					</do_if> 
					<do_if value="$BoardingFleet.{$xi}.units.{unitcategory.marine}.mk.{$mk}.count - $BoardingFleet.{$xi}.availableunits.{unitcategory.marine}.mk.{$mk}.count"> 
						<return_units object="$BoardingFleet.{$xi}" macro="$objectmacro" exact="1"/> 
						<break />
					</do_if> 
				</do_all>
				<remove_value name="$objectmacro"/>
				<remove_value name="$xi"/>
				<remove_value name="$mk"/>
			</actions>
		</library>
	</add>

	<replace sel="//cue[@name='LaunchBoardingPods']/actions">
		<actions>

			<!--TODO: Should this be $boardership, not player.primaryship-->
			<!-- remove marine commander from playership-->
			<dismiss_control_entity object="player.primaryship" actor="$commander"/>
			<remove_actor_from_room actor="$commander" comment="remove marine-commander from playership"/>
			<create_cue_actor actor="$commander" cue="Start" comment="Commander has to be 'somewhere' or we have savegame problems"/>

			<do_if value="not $training">
				<signal_cue_instantly cue="md.Notifications.PlayerBoarding" param="[$target, 'boarding started']"/>
			</do_if>

			<!-- create boarding pods and send towards target -->
			<create_list name="$BoardingPodsList"/>
			<set_value name="$commander_on_pod" exact="false"/>

			<create_group groupname="$MarinePilots"/>
			<debug_text text="'marine.maxmk ' + unitcategory.marine.maxmk" chance="$debugoutputchance"/>
			<do_all exact="unitcategory.marine.maxmk" counter="$i" comment="Loop thorough the number of Marks marine units have">

				<append_to_list name="$BoardingPodsList" exact="[]" comment="... create a new list for this Mk"/>

				<do_all exact="$BoardingFleet.count" counter="$b"> 
					<set_value name="$UnitList" exact="$BoardingFleet.{$b}.availableunits.{unitcategory.marine}.mk.{$i}.list"/>
					<debug_text text="$UnitList" chance="$debugoutputchance"/>
					<do_all exact="$UnitList.count" counter="$j" comment="#marines of this Mk">

						<!-- This also marks the marine as "unavailable" on the playership, they can be made available again with "return_units" -->
						<request_units object="$BoardingFleet.{$b}" macro="$UnitList.{$j}" exact="1" comment="marks the marine as 'unavailable' on the playership"/>

						<create_ship name="$boardingpod" groupname="$boardingpodsinflight" group="boardingpods" zone="$BoardingFleet.{$b}.zone">
							<pilot macro="$UnitList.{$j}">
								<owner exact="$BoardingFleet.{$b}.trueowner"/>
							</pilot>
							<position object="$BoardingFleet.{$b}" x="$i * 40m" y="$j*20m" z="-200m + $i*10" max="10m"/>
							<!--position object="$BoardingFleet.{$b}" x="$i * 1m" y="$j*1m" z="-200m + $i*1" comment="all together - for testing"/-->
						</create_ship>

						<add_to_group groupname="$MarinePilots" object="$boardingpod.pilot"/>

						<append_to_list name="$BoardingPodsList.{$i}" exact="$boardingpod" comment="End up with a list per Mk"/>

						<find_object_surface posname="$targetpos" rotname="$targetrot" object="$target" />

						<set_value name="$randomdelay" min="2" max="5"/>

						<!--do_if value="$commander_on_pod == false" comment="Alternative savegame-solution">
					<debug_text text="'Putting commander on board of pod' + $i + ':' + $j"/>
					<set_value name="$commander_on_pod" exact="true"/>
					<assign_boarding_commander object="$boardingpod" actor="$commander"/>
				  </do_if>
				  <do_else>
					<debug_text text="'Set object commander of pod' + $i + ':' + $j"/>
					<set_object_commander object="$boardingpod" commander="$boardingpods.{1}" />
				  </do_else-->

						<start_script name="'boarding.pod'" object="$boardingpod.pilot">
							<param name="target" value="$target" />
							<param name="targetpos" value="$targetpos" />
							<param name="targetrot" value="$targetrot" />
							<param name="initialwaittime" value="$randomdelay + $i * 2s" />
							<param name="debugoutputchance" value="$debugoutputchance"/>
						</start_script>
					</do_all>
				</do_all>
			</do_all>
			<remove_value name="$UnitList"/>

			<set_value name="$FirstArrived" exact="false" />
			<set_value name="$EarliestAttackedConvTime" exact="player.age" />

			<!-- Ensure that the boarding pods arrive at their target -->
			<debug_text text="'Setting objective: Protect boarding pods'" />
			<set_objective cue="Start" action="objective.protect" group="$boardingpodsinflight" />
			<start_conversation actor="$commander" conversation="BoardingSupport_ProtectPods_Started_Conversation" />
		</actions>
	</replace>

	<add sel="//library[@name='ClearOnFail']/actions/do_all/do_if[@value='$boardingpodsinflight.{$Counter}.pilot']/remove_units" type="@chance" >0</add>
	<add sel="//library[@name='ClearOnFail']/actions/do_all/do_if[@value='$boardingpodsinflight.{$Counter}.pilot']/remove_units" pos="after">
		<do_if value="$boardingpodsinflight.{$Counter}.pilot.macro?"> 
			<set_value name="$objectmacro" exact="$boardingpodsinflight.{$Counter}.pilot.macro" />
			<include_actions ref="DeleteUnitFleet"/>
		</do_if> 
	</add>

	<add sel="//library[@name='ClearOnFail']/actions/do_all/do_all[@exact='$ArrivedMarines.{$Counter}.count']/remove_units" type="@chance" >0</add>
	<add sel="//library[@name='ClearOnFail']/actions/do_all/do_all[@exact='$ArrivedMarines.{$Counter}.count']/remove_units" pos="after">
		<do_if value="$ArrivedMarines.{$Counter}.{$i}?"> 
			<set_value name="$objectmacro" exact="$ArrivedMarines.{$Counter}.{$i}" />
			<include_actions ref="DeleteUnitFleet"/>
		</do_if> 
	</add>

	<add sel="//cue[@name='MarinePilotKilled']/actions/remove_units" type="@chance" >0</add>
	<add sel="//cue[@name='MarinePilotKilled']/actions/remove_units" pos="after">
		<do_if value="event.object.macro?"> 
			<set_value name="$objectmacro" exact="event.object.macro" />
			<include_actions ref="DeleteUnitFleet"/>
		</do_if> 
	</add>

	<add sel="//library[@name='LoseMarines']/actions/do_if/do_if/do_all/do_if/remove_units" type="@chance" >0</add>
	<add sel="//library[@name='LoseMarines']/actions/do_if/do_if/do_all/do_if/remove_units" pos="after">
		<do_if value="$ArrivedMarines.{$KilledMarineMK}.{$KilledMarineIndex}?"> 
			<set_value name="$objectmacro" exact="$ArrivedMarines.{$KilledMarineMK}.{$KilledMarineIndex}" />
			<include_actions ref="DeleteUnitFleet"/>
		</do_if> 
	</add>

	<add sel="//library[@name='LoseMarines']/actions/do_else/do_all/do_all/remove_units" type="@chance" >0</add>
	<add sel="//library[@name='LoseMarines']/actions/do_else/do_all/do_all/remove_units" pos="after">
		<do_if value="$ArrivedMarines.{$i}.{$o}?"> 
			<set_value name="$objectmacro" exact="$ArrivedMarines.{$i}.{$o}" />
			<include_actions ref="DeleteUnitFleet"/>
		</do_if> 
	</add>

	<add sel="//cue[@name='Success']/actions/do_all/do_all/do_all/do_if/do_if/do_if[@value='true']/remove_units" type="@chance" >0</add>
	<add sel="//cue[@name='Success']/actions/do_all/do_all/do_all/do_if/do_if/do_if[@value='true']/remove_units" pos="after">
		<do_if value="$ReturnedMarine?"> 
			<set_value name="$objectmacro" exact="$ReturnedMarine" />
			<include_actions ref="DeleteUnitFleet"/>
		</do_if> 
	</add>

	<add sel="//cue[@name='Success']/actions/do_all[@exact='$PromotedMarines.count']/add_units" type="@chance" >0</add>
	<add sel="//cue[@name='Success']/actions/do_all[@exact='$PromotedMarines.count']/add_units" pos="after">
		<do_if value="$PromotedMarines.{$i}?"> 
			<set_value name="$objectmacro" exact="$PromotedMarines.{$i}" />
			<include_actions ref="AddUnitFleet"/>
		</do_if> 
	</add>

	<add sel="//cue[@name='Success']/actions/do_all[@exact='$ReturningMarines.count']/return_units" type="@chance" >0</add>
	<add sel="//cue[@name='Success']/actions/do_all[@exact='$ReturningMarines.count']/return_units" pos="after">
		<do_if value="$ReturningMarines.{$i}?"> 
			<set_value name="$objectmacro" exact="$ReturningMarines.{$i}" />
			<include_actions ref="ReturnUnitFleet"/>
		</do_if> 
	</add>
</diff>
ist jetzt nicht groß getestet, einige Entermanöver wurden aber jeweils erfolgreich mit mehreren Schiffen absolviert, wobei incl. Beförderungen alles wie erhofft funktionierte

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Sun, 1. Nov 15, 21:01

haha wie geil - da hab ich ja was angefangen.
ich bin noch nicht so weit.
mein letztes Projekt ,ein Gebäude für Skylines, habe ich grade beendet
und nun wollt ich mich ab morgen mit Xrebirth modding beschäftigen:)

so marines adden und marines von Schiffen anfordern hast du wohl schon realisiert.
Haste schon mehr geplant?
lg

User avatar
Marvin Martian
Posts: 3548
Joined: Sun, 8. Apr 12, 09:40
x4

Post by Marvin Martian » Mon, 2. Nov 15, 10:18

außer dass ich noch einen kurzen Hinweis zu den Stärkeverhältnissen hinzugefügt habe ist eigentlich nichts weiter geplant
(wird offensichtlich auch wie erwartet korrekt Anhand der gelandeten Marines errechnet, hatte jedenfall mit 140 Elite Marines einen Enterwert von ~700)

es empfiehlt sich aber wie mir scheint immer zu warten bis die Enterschiffe Nahe am Ziel sind, da die Enterkapseln schließlich von den jeweiligen Positionen starten (zwar nur so plump wie von der Skunk, nicht so shiny wie richtige Drohnen, aber es erfüllt seinen Zweck)

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Mon, 2. Nov 15, 12:31

Also ich hab mir die beiden erwähnten Guides angetan und weis nun
die commands und schlüsselworte dieser xml (scriptsprache) zu deuten:-)

.. es wird wohl noch bischen dauern bis ich einfach frank und frei deinen gepostet quellcode verwenden kann.
Nach zweit Tagen bin ich immer noch etwas verwirret wenn ich ihn betrachte.
Bzw ich bin froh das du dran geschrieben hast was die Abschnitte bewirken...
Aber das wird wohl hoffentlich bald vergehen:)

User avatar
Marvin Martian
Posts: 3548
Joined: Sun, 8. Apr 12, 09:40
x4

Post by Marvin Martian » Mon, 2. Nov 15, 16:04

ich habe zwar ein Enterschiff gebastelt, welches sich aber in bestehenden Spielen nicht wirklich gut einbinden lässt, daher verzichte ich auf ein veröffentlichen

den aktuellen Modstatus habe ich mal zu einem fertigen Mod zusammengepackt und hier http://forum.egosoft.com/viewtopic.php?t=383486 veröffentlicht, ist wohl einfach als immer weiter die Quelltexte zu posten

gruengruen
Posts: 28
Joined: Wed, 16. Oct 13, 08:51
x3ap

Post by gruengruen » Mon, 2. Nov 15, 16:49

he,
ja fein:-)

Was fehlt ist das das Schiff mit marins noch zum ziel hinfliegt.
Bzw das die Pods nicht 10-20 Kilometer fliegen müssen.

Ich hab in verschiedenen scripts bischen gefischt.
die cats entpackt und die scriptpropertie entdeckt.
Ich würde gern wissen ob der nachfolgenden code theoretisch geht,
weil ich kann nicht testen da ich noch nciht gerafft habe wie ich
das einbinden soll. danke:)

also irgendwo sollte command.move.totarget aufgerufen werden.
das dann command.move.totarget startet.

Code: Select all

<run_script name="'command.move.totarget'">
	<param name="target" value="player.target" />
</run_script>

<?xml version="1.0" encoding="iso-8859-1" ?>
<aiscript name="command.move.totarget" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="aiscripts.xsd">
<params>
	<param name="target" />	
</params>
<init>
    <set_command command="command.move" param="$target" />
</init>
<do_if value="not $target.exists">
     <return />
</do_if>
<run_script name="'move.generic'">
      <param name="destination" value="$target"
      <param name="position" value="850mt"/>
</run_script>
</aiscript>
[/code]

Return to “X Rebirth - Scripts und Modding”