[DISKUSSION] Allgemeine MD-Fragen

Hier ist der ideale Ort um über Scripts und Mods für X³: Terran Conflict und X³: Albion Prelude zu diskutieren.

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

Post Reply
User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Checken ob Object im Sektor vorhanden oder nicht!

Post by creatoxx » Mon, 19. Nov 18, 22:20

Guten Abend... :evil:

Aufgabe: Feststellen ob ein Sektor bekannt ist, oder nicht, nach dem man ihn das erste mal durch ein Tor erreicht hat!

Lösung: <sector_is_known>, <object.sector@object> etc.

Ergebnis: Gute Idee, schlechte Ausführung, da ein Sektor in der Sekunde des Ereichens ja "known" ist.

Eine Evaluierung mittels einer Array-Liste wie beim scripten gibt es für MD nicht, oder doch? Also quasi bei Spielstart alle Sektoren außer dem, in dem mann sich befindet in eine "Liste/Gruppe" einfügen und dann jeweils den einzelnen Sektor aus der Gruppe/Liste entfernen, wenn der Sektor "known" ist? Wie auch immer, ich habe es nicht hinbekommen.

Lösung02: Ein unsichtbares Dummyobjekt in alle besuchten Sektoren einfügen, um es als existierenedes Objekt referenzieren zu können.

Ergebnis: auch ne gute Idee...ich kill hier gleich mein Keyboard... :evil:

Der aktuelle Code sieht so oder so ähnlich aus:
Spoiler
Show

Code: Select all

		<cue name="TX_MD02_cue01">
			<!--condition>
				<check_all>
					<cue_is_complete cue="TX_MD01_cue04"/>
				</check_all>
			</condition-->
			<action>
				<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
					<position object="{player.ship}" min="1000km"/>
				</create_debris>
			</action>
		</cue>
	
		<cue name="TX_MD02_cue02">
			<condition>
				<check_all>
					<object_changed_sector/>
					<object_sector negate="1" object="TX_MD02_sector_dummy">
			    		<position object="{player.ship}"/>
			    		<sector sector="{player.sector}"/>
		  			</object_sector>				
				</check_all>
			</condition>
			<timing>
				<time min="1s"/>
			</timing>
			<action>
				<do_all>
					<incoming_message text="Hat geklappt!"/>
					<reward_player>
						<money exact="1000"/>
					</reward_player>
					<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
						<position object="{player.ship}" min="1000km"/>
					</create_debris>																			
					<reset_cue cue="TX_MD02_cue02"/>								
				</do_all>	
			</action>
		</cue>
...ich probier das jetzt seit 5 Tagen. Bis hier hin hat alles gut geklappt, aber jetzt mag mich die Engine offensichtlich nicht mehr. Ich habe sämtliche Variablen durch. Wirklich sämtliche Variablen innerhalb der director.htm. Den letzten Versuch habe ich zuvor mit <object_position> probiert. Dann fing die Engine auf einmal an die condition-><object_changed_sector/> als positiv zu bewerten, nachdem ich neu ins Spiel einsteige...was vorher nie passiert ist. Ich hab jetzt auch grad mal kein Bock mehr... :evil:

Warum kann ich nicht einfach Fragen: Ist das Objekt in diesem Sektor=ja, oder nein? Warum muss ich fragen Ist das Objekt im Sektor ja/nein UND in 100km Entfernung, oder ja/nein UND minimum 1 Sektor entfernt? Einfach ja, es ist hier, oder nein es ist nicht hier...einfach nur ein schnöder Boolean ohne Zusatzbedingung. Bei <object_position> war es egal ob verneint oder nicht, egal ob min oder max, egal welche Distanz, egal was auch immer. Er hat einfach entweder immer positiv die action gestartet, oder immer negativ, je nach dem was verändert wurde. Die action aber nur dann durchzuführen, wenn sich das Objekt noch nicht im Sektor befunden hat, wollte die doofe Engine einfach nicht machen. Und jetzt hab ich halt grad mal eine Stressblockade...da geht eh nix mehr... :rant:

User avatar
JSDD
Posts: 1378
Joined: Fri, 21. Mar 14, 20:51
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by JSDD » Mon, 19. Nov 18, 23:39

wenn du probleme hast, das zu verstehen, versuch mal plot scripts nachzuvollziehen (von plots die du kennst).

benutz vorerst einfach <check_value .../> mit {object.sector@...}, den du zum anderen sektor {player.sector} vergleichst
To err is human. To really foul things up you need a computer.
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.


Mission Director Beispiele

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Tue, 20. Nov 18, 15:22

JSDD wrote:
Mon, 19. Nov 18, 23:39
wenn du probleme hast, das zu verstehen, versuch mal plot scripts nachzuvollziehen (von plots die du kennst).

benutz vorerst einfach <check_value .../> mit {object.sector@...}, den du zum anderen sektor {player.sector} vergleichst
Ich will doch nur den Dummy platzieren, wenn der Dummy nicht im Sektor ist. Das muss doch irgendwie unkompliziert, mit ganz wenig Code möglich sein?

Höö?... :gruebel:

Du meinst jetzt so?

Code: Select all

<cue name="CheckerCue">
	<condition>
		<object_changed_sector/>
		<check_value negate="0" value="{object.sector@Trümmerlotte}" exact="{player.sector}">
		<action>
			<do_all>
				Mach mal lieber die Mörchen... :rant: 
			</do_all>
		</action>		
	</condition>
</cue>
Ich bin mir sicher, dass ich das schon probiert habe. Nur zum Verständnis, mit der Variante sage ich sinngemäß...

1. wenn du(Spieler) den Sektor erreichst
2. und check=das Objekt Trümmerlotte befindet sich nicht in diesem gerade erreichten Sektor
3. Mach mal lieber die Mörchen

...richtig? Unter condition kann ich aber kein <find_debris> einfügen und eine entsprechende Variable für den condition Bereich gibt es nicht, bzw. funzt nicht, da ja der tag "name" fehlt. Ich muss das Objekt Trümmerlotte ja erst mal gefunden haben und einen Namen verpassen. Natürlich könnte man das über zwei cues laufen lassen, wo der eine als condition nur den sector change enthält und dann in action find initiiert, während der zweite dann nach Trümmerlotte checked, und die weiteren actions ausführt...das hab ich auch bereits probiert...;)

Edit:

So! Würde dann so aussehen...

Code: Select all

	<cues>
	
		<cue name="TX_MD02_cue01">
			<condition>
				<object_changed_sector/>
			</condition>
			<timing>
				<time min="1s"/>
			</timing>
			<action>
				<find_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH"/>
			</action>
			<cues>
			
				<cue name="TX_MD02_cue02">
					<condition>
						<check_all>
							<cue_is_complete cue="TX_MD02_cue01"/>
							<check_value negate="0" value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}"/>
						</check_all>		
					</condition>
					<timing>
						<time min="1s"/>
					</timing>
					<action>
						<do_all>
							<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
								<position object="{player.ship}" min="1000km"/>
							</create_debris>
							<incoming_message text="Hat geklappt!"/>
							<reward_player>
								<money exact="1000"/>
							</reward_player>																			
							<reset_cue cue="TX_MD02_cue02"/>
						</do_all>									
					</action>
				</cue>
				
			</cues>		
		</cue>
		
	</cues>
...kann ich erst heut spät Abend testen... :gruebel:

User avatar
creatoxx
Posts: 32
Joined: Wed, 17. Oct 18, 14:01
x3tc

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by creatoxx » Thu, 22. Nov 18, 13:43

Trau mich schon gar nicht mehr zu fragen, aber sei es drum...
Aufklappen
Show

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>

<director name="TX_MD02_name" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">

	<documentation>	
		<author name="CrEaToXx" alias="M.Adam" contact="creatorx42@gmail.com"/>
		<content name="Exploring Auto Credits" description="Terran Explorer Service"/>
		<version number="0.0.1" date="15.11.2018" status="development"/>
	</documentation>
	
	<cues>
	
		<cue name="TX_MD02_cue01">
			<condition>
				<check_all>
					<check_age value="{player.age}" min="3s"/>
				</check_all>	
			</condition>
			<timing>
				<time min="1s"/>
			</timing>
			<action>
				<do_all>
					<find_debris findobject="{player.ship}" name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" silent="1">
						<sector sector="{player.sector}"/>
					</find_debris>
					<do_if negate="1" value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}">
						<show_help force="1" text="{TX_MD02_sector_dummy} is not in {player.sector}, creating!"/>
						<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
							<position object="{player.ship}" min="1000km"/>
						</create_debris>
					</do_if>
					<do_if value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}">
						<show_help force="1" text="{TX_MD02_sector_dummy} is in {player.sector}!"/>
					</do_if>
				</do_all>	
			</action>					
			<cues>	
				<cue name="TX_MD02_cue02">
					<condition>
						<check_all>
							<cue_is_complete cue="TX_MD02_cue02"/>
							<object_changed_sector/>
						</check_all>	
					</condition>
					<timing>
						<time min="1s"/>
					</timing>
					<action>
						<do_all>
							<find_debris findobject="{player.ship}" name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" silent="1">
								<sector sector="{player.sector}"/>
							</find_debris>
							<do_if negate="1" value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}">
								<show_help force="1" text="{TX_MD02_sector_dummy} is not in {player.sector}, but in{object.sector@TX_MD02_sector_dummy},  creating!"/>
								<create_debris name="TX_MD02_sector_dummy" typename="SS_DEBRIS_FGH" invincible="1" hidden="1" scanned="0">
									<position object="{player.ship}" min="1000km"/>
								</create_debris>
								<reward_player>
									<money exact="1000"/>
								</reward_player>																			
								<reset_cue cue="TX_MD02_cue02"/>
							</do_if>
							<do_if value="{object.sector@TX_MD02_sector_dummy}" exact="{player.sector}">
								<show_help force="1" text="{TX_MD02_sector_dummy} is in {player.sector}, resetting!"/>
								<reset_cue cue="TX_MD02_cue02"/>
							</do_if>
						</do_all>	
					</action>				
				</cue>
			</cues>		
		</cue>
					
	</cues>		

</director>
Es scheitert, so denke ich, generell daran, dass die Engine die Verneinung dahingehend interpretiert, dass das gesuchte Objekt zwar nicht im player.sector vorhanden ist, dafür aber in jedem anderen wo ich zuvor den dummy platziert habe.

Gibt es wirklich keine Möglichkeit eine Sektorinterene Suche nur auf diesen einen Sektor zu beschränken? Wenn doch, dann bitte, bitte, bitte, posted einen Codeschnipsel. Ich bin offensichtlich zu doof... :cry:

User avatar
Ketraar
EGOSOFT
EGOSOFT
Posts: 11741
Joined: Fri, 21. May 04, 17:15
x4

Re: [DISKUSSION] Allgemeine MD-Fragen

Post by Ketraar » Fri, 23. Nov 18, 00:13

Code: Select all

<check_value negate="0" value="{object.sector@Trümmerlotte}" exact="{player.sector}">
negate=0 ist default muss man also nicht extra schreiben

{object.sector@Trümmerlotte} was ist trümerlotte und ist es eine global value, da kein cue prefix. auch fehlt der closing dash vor dem > würde angezeigt werden wenn man zB den Web Developer in Zusammenhang mir der director.xsd nutzen würde.

Code: Select all

<check_value value="{object.sector@Trümmerlotte}" exact="{player.sector}"/>
Um ein Objekt standort als conditon zu nutzen wäre es besser diesen check zu nutzen

Code: Select all

<object_sector object="this.ship" exact="0">
 <sector sector="{player.sector}"/>
</object_sector>
action komm nach conditions, und um mehrere conditions zu nutzen braucht es ein check all. In diesem sinne müsste das in etwa so aussehen.

Code: Select all

    <cue name="mycue">
      <condition>
        <check_all>
          <object_changed_sector/>
          <object_sector object="{object@myobject}" exact="0">
            <sector sector="{player.sector}"/>
          </object_sector>
        </check_all>
        </condition>
      <action>
        <do_all>
          <set_value name="this.value" exact="1"/>
        </do_all>
      </action>
    </cue>

Code: Select all

{object.sector@Trümmerlotte}
Auch werden umlaute in variablen und so nicht funktionieren, zumindest mein mein xml editor das die xsd dies nicht mag.

Es gibt ein paar tutorials hier iwo verlinkt mit den Basis Info wie man MD coded, auch habe ich auf youtube paar Videos gemacht (auf englisch) um zu erklären wie MD funktioniert. Würde sich lohnen in diese erste Schritte zu investieren um erst ein Gefühl zu kriegen wie MD "denkt" und strukturiert ist.

MFG

Ketraar
Image

Post Reply

Return to “X³: Terran Conflict / Albion Prelude - Scripts und Modding”