[Frage] Völker Sektorverteidigung
Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
[Frage] Völker Sektorverteidigung
wie wird eigentlich die sektorverteidigung bei den terranern ausgelöst? alles hardcode oder kann
man die "eingreiftruppe" in einem script md-script irgendwo sehen?
der grund dafür: die angriffsgruppe der argonen und anderen standardvölker ist ein witz!
nur schiffe im sektor werden feindlich und greifen an. das möchte ich gern so wie bei den terranern machen!
man die "eingreiftruppe" in einem script md-script irgendwo sehen?
der grund dafür: die angriffsgruppe der argonen und anderen standardvölker ist ein witz!
nur schiffe im sektor werden feindlich und greifen an. das möchte ich gern so wie bei den terranern machen!
-
- Posts: 5224
- Joined: Thu, 23. Jun 11, 14:57
da JSDD in deinem anderen Thema schon offenbart hat, das die sectoren per MD freigeschltet werden sollte das auch darüber gehen, bestimmt auch in der gleichen Datei.
My X3 Mods
XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
-
- Posts: 5224
- Joined: Thu, 23. Jun 11, 14:57
Hier mal zum einlesen in den MD (aus JSDDs Sig geklaut): http://www.xdatabase.de/downloads/en/x/ ... e_v122.pdf
My X3 Mods
XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
XRebirth, things left to patch:
In General; On Firing NPC's; In De Vries; Out Of Zone; And the Antiwishlist
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
-
- Posts: 1379
- Joined: Fri, 21. Mar 14, 20:51
... ubuntu hat dir ja schon "die quelle des wissens" gepostet, also ...Joda wrote:... md-scripten ist ne andere sache! da kenn ich mich nur sehr sehr wenig aus.

Joda wrote:hatte gehofft das mir wenigstens jemand das md file verraten kann, in dem das geregelt wird
ubuntu wrote:da JSDD in deinem anderen Thema schon offenbart hat, ...

... um dir dann doch noch etwas klar zu verschaffen:
1. <cue name="Sol Access" map="default">
daher hab ich de "kot" geklaut, da werden die sektoren erstmal gefunden (= das gleiche wie im SE: "find_sector"-blablausw)
2. <cue name="TAR" library="1" comment="Terran Access Response" version="2">
regelt den fall, wenn du unerlaubt die terraner-sektoren durchstreifst
3. <cue name="Outer Sol Restricted" delay="5s">
bzw. zeile 286-292 bildet zusammen mit punkt 2 ne art flip-flop-schaltung, damit permanent aktiviert
... die einzelnen code-blöcke alla ...
Code: Select all
<cue name="Neptune Restricted" delay="10s">
<condition>
<check_any>
<count_objects race="player" min="1">
<sector sector="Sol Access.Neptune"/>
</count_objects>
<check_value value="{player.sector}" exact="{sector@Sol Access.Neptune}"/>
</check_any>
</condition>
<cues>
<cue ref="TAR">
<params>
<param name="Reset Cue" value="Neptune Restricted" comment="Cue to reset when finished"/>
<param name="Sector" value="{sector@Sol Access.Neptune}" comment="The sectorid of the watched sector"/>
</params>
</cue>
</cues>
</cue>

TAR wiederum findest du in zeile 98, "verdächtigerweise" steht da library="1", was konkret bedeutet, dass das "TAR"-cue standartmäßig nicht ausgeführt wird, nur wenn es "aufgerufen" wird via "ref", dann wird es aktiviert
(<cue> sind standardmäßig aktiv, werden also wie setup.scripts beim gameload gestartet, ABER danach niewieder, library="1" vermeidet dieses standardmäßiges aktivieren)
wenn du nun ähnliche systematik für z.B. argon machen willst, dann kopier dir die datei & benenne alle namen / referenzen um (hinweis: keine "." im cue-namen !!) ... achja, und gib natürlich die argon-sektor-koordinaten ein ^^
wenn du erstmal richtig in die thematik reinfinden willst, empfiehlt es sich, ketraar´s md-videos anzusehen

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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
danke danke danke
mit so einer antwort kann ich was anfangen
die videos seh ich zum ersten mal! werde die mir mal in ruhe ansehen.
jetzt hab ich wenigstens mal nen anhaltspunkt. du scheinst dich mit md und se
auszukennen!? solche leute braucht man
edit
verstehe die mechanik einigermaßen
torus unzerstörbar machen zeile 762
hub sektor ab zeile 779
sogar der unfokusierte sprungantrieb sektor ist drin.
sektorüberwachung:
verschiedene abläufe für spielerschiffe und [PLAYERSHIP]
( so versteht man es hoffentlich )
die 1. warnung, die 2. nachricht das man nun getötet wird, bloß wo ist der part wo die flotte erstellt wird?
das m2 und die ganzen anderen schiffe? wo zum geier sind die definiert?
edit2
habs gefunden obs
mit so einer antwort kann ich was anfangen

die videos seh ich zum ersten mal! werde die mir mal in ruhe ansehen.
jetzt hab ich wenigstens mal nen anhaltspunkt. du scheinst dich mit md und se
auszukennen!? solche leute braucht man

edit
verstehe die mechanik einigermaßen
torus unzerstörbar machen zeile 762
hub sektor ab zeile 779
sogar der unfokusierte sprungantrieb sektor ist drin.
sektorüberwachung:
verschiedene abläufe für spielerschiffe und [PLAYERSHIP]

die 1. warnung, die 2. nachricht das man nun getötet wird, bloß wo ist der part wo die flotte erstellt wird?
das m2 und die ganzen anderen schiffe? wo zum geier sind die definiert?
edit2
habs gefunden obs

-
- Posts: 1379
- Joined: Fri, 21. Mar 14, 20:51
... yepp, "obs" heißt das md-script, macht ziemlich laune dran rumzuspielen, vor allem wenn man mit dem figh-part in TC unterfordert ist 
... hier mal meine / ubuntus version, die bewaffnung erfolgt über ein aufgerufenes script, damit lassen sich flak / pik / psg usw. problemlos verteilen ^^
ps: sie flottenstärke kannste über den wert bei "OBS Points" steuern
pps: wenn du dir zusätzlich die datei "SRST" (alias: select random ship type) ansiehst, wirste feststellen, dass diejenigen parameter, die die verbesserten schiffstypen zulassen, schon gesetzt sind, lediglich in der obs wurden sie (warum auch immer) weggelassen
der vollständigkeit halber erwähn ich hier noch "constants.xml", darin werden die stärken (in punkte bzw. "OBS Points") der verschiedenen schiffsklassen definiert

... hier mal meine / ubuntus version, die bewaffnung erfolgt über ein aufgerufenes script, damit lassen sich flak / pik / psg usw. problemlos verteilen ^^
ps: sie flottenstärke kannste über den wert bei "OBS Points" steuern
pps: wenn du dir zusätzlich die datei "SRST" (alias: select random ship type) ansiehst, wirste feststellen, dass diejenigen parameter, die die verbesserten schiffstypen zulassen, schon gesetzt sind, lediglich in der obs wurden sie (warum auch immer) weggelassen
Code: Select all
<param name="Include M3P" value="1"/>
<param name="Include M4P" value="1"/>
<param name="Include M5P" value="1"/>
<param name="Include M6M" value="1"/>
<param name="Include M7M" value="1"/>
Code: Select all
...
<set_value name="Constant {lookup.class@m6} Points" exact="100"/>
<set_value name="Constant {lookup.class@m7} Points" exact="220"/>
<set_value name="Constant {lookup.class@m2} Points" exact="760"/>
...
d.h. 1xm2 ist ca. gleichwertig mit 7xm6
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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
über das bin ich in lucikes forum schon vor längerer zeit mal gestoßen,
nur hab ichs mir nie genau angesehen. habs mir sofort runtergeladen und
mal angeschaut. mit den kommentaren ist es sehr gut verständlich!
dein script hab ich mal meinen "bedürfnissen" angepasst,
denn in meinem mod uni
sind die schadenswerte einiger waffen extrem angepasst worden.
ne kleine bitte hätte ich noch. kann mir jemand, am besten mit code, sagen wie
ich coresektoren und bordersektoren trennen kann?
im sector managment script werden ja einzelne sektoren geprüft und
jeden sektor einzeln will ich nicht unbedingt prüfen! da reicht schon ne trennung
der kern und außensektoren
nur hab ichs mir nie genau angesehen. habs mir sofort runtergeladen und
mal angeschaut. mit den kommentaren ist es sehr gut verständlich!
dein script hab ich mal meinen "bedürfnissen" angepasst,

sind die schadenswerte einiger waffen extrem angepasst worden.
ne kleine bitte hätte ich noch. kann mir jemand, am besten mit code, sagen wie
ich coresektoren und bordersektoren trennen kann?
im sector managment script werden ja einzelne sektoren geprüft und
jeden sektor einzeln will ich nicht unbedingt prüfen! da reicht schon ne trennung
der kern und außensektoren
-
- Posts: 1379
- Joined: Fri, 21. Mar 14, 20:51
... um zu checken, ob ein sektor grenzsektor ist:
... um zu checken, ob ein sektor kernsektor ist:
... im beispiel wird jeweils der spielersektor (also: {player.sector}) gecheckt
... wenn du allerdings ne IF-abfrage in einem <action>-block brauchst, dann:
... bzw.:
... hast hoffentlich rausbekommen, wie man an die ganzen variablen / befehle rankommt, oder ? (ketraar-video nr. 1)
stichwort: die 6 notwendigen md-files
(in den director-ordner kopieren + "ms vwd" nutzen)
beispiel für den gesamten code:
Code: Select all
<condition>
<check_all>
<match_sector sector="{player.sector}" border="1"/>
</check_all>
</condition>
Code: Select all
<condition>
<check_all>
<match_sector sector="{player.sector}" core="1"/>
</check_all>
</condition>
... wenn du allerdings ne IF-abfrage in einem <action>-block brauchst, dann:
Code: Select all
<do_if value="{sector.core@thesectoriwanttocheck}" exact="1">
<!--hier dann der weitere code-->
</do_if>
Code: Select all
<do_if value="{sector.border@thesectoriwanttocheck}" exact="1">
<!--hier dann der weitere code-->
</do_if>
stichwort: die 6 notwendigen md-files

beispiel für den gesamten code:
Code: Select all
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">
<cues>
<cue name="sector_defence_core" delay="5s">
<condition>
<check_all>
<match_sector sector="{player.sector}" core="1" race="default"/>
<check_value value="{player.notoriety.{player.sector.race}.rank}" max="-1"/>
</check_all>
</condition>
<action>
<do_all>
<!--hier beginnt der spaß ...-->
<incoming_message popup="1" text="... zieh leine! sonst ..."/>
<set_value name="sector_defence_core.race" exact="{player.sector.race}"/>
<set_value name="sector_defence_core.timeout" exact="({player.age}+30)"/>
</do_all>
</action>
<cues>
<cue name="sector_defence_core_timeout" delay="5s">
<condition>
<check_any>
<check_value value="{player.notoriety.{value@sector_defence_core.race}.rank}" min="0"/>
<match_sector sector="{player.sector}" race="{value@sector_defence_core.race}" negate="1"/>
<match_sector sector="{player.sector}" core="0"/>
<check_age min="{value@sector_defence_core.timeout}"/>
</check_any>
</condition>
<action>
<do_all>
<do_if value="{player.notoriety.{value@sector_defence_core.race}.rank}" min="0">
<reset_cue cue="sector_defence_core"/>
</do_if>
<do_if value="{sector.race@{player.sector}}" exact="{value@sector_defence_core.race}" negate="1">
<reset_cue cue="sector_defence_core"/>
</do_if>
<do_if value="{sector.core@{player.sector}}" exact="0">
<reset_cue cue="sector_defence_core"/>
</do_if>
</do_all>
</action>
<cues>
<!--hier wirds dann ernst ... flotte spawnen + cmd verteilen ... letztlich wieder cue resetten!!-->
</cues>
</cue>
</cues>
</cue>
</cues>
</director>
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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
Hi
hab jetzt lange nichts gemacht, wie so oft
und bin jetzt wieder mal darüber. scripte map mods alles fertig, nur dieses md script bringt mich immer noch um den Verstand.
So....
hab kommentare direkt ins md scripd geschrieben ums besser zu verstehen mit + am Anfang
PS: ist nur ein testscript. noch werden terraner erzeugt und die terr. nachricht abgespielt.
Zusammenfassung meiner Wünsche Fragen:
- Wie macht man an die lybary einen Sektorübergabe von anderen Playerobjekten ohne jeden Sektor vorher zu definieren?
- Was ist beim wechsel des Playerships in nen anderen Sektor?
- Wie mache ich aus dem ganzen ne Endlosschleife bis alle Playerobjekte zerstört sind?
Fragen über Fragen
ich hoffe ihr könnt mir da nochmal helfen.
THX
hab jetzt lange nichts gemacht, wie so oft

So....
hab kommentare direkt ins md scripd geschrieben ums besser zu verstehen mit + am Anfang
PS: ist nur ein testscript. noch werden terraner erzeugt und die terr. nachricht abgespielt.
Code: Select all
<cues>
<cue name="SEKTORZUGANG" map="default">
<condition>
<check_age min="10s"/>
</condition>
<action>
<do_all>
<find_sector name="this.Moonn" x="0" y="3" race="argon" exact="0"/>
</do_all>
</action>
<cues>
+ der zu prüfende sektor. Du hast mir das fürs Spielerschiff gezeigt - <match_sector sector="{player.sector}" border="1"/>
Problem: beim Spielerschff ist es die player.sector Variable - aaaaber wie ist es bei anderen spielerbesitz???
<!-- Startbedingung Angriffsflotte -->
<cue name="ASM" delay="10s">
<condition>
<check_all>
<check_value value="{player.notoriety.argon.rank}" max="0"/>
<match_sector sector="{player.sector}" border="1" race="argon"/>
</check_all>
</condition>
<action>
<do_all>
<set_value name="angriffssektor" exact="{player.sector}"/>
</do_all>
</action>
<cues>
<cue ref="RSM">
<params>
<param name="Reset Cue" value="ASM" comment="Cue to reset when finished"/>
<param name="Sector" value="{sector@angriffssektor}" comment="The sectorid of the watched sector"/>
</params>
</cue>
</cues>
</cue>
+ Da hab ich versucht die Variable player.sector in "angriffssektor" zu speichern, weil wenn das playership den sektor velassen hat das OBS immer unendlich schiffe erzeugt hat ohne befehl und nicht feindlich.
<!-- Startbedingung Angriffsflotte -->
<cue name="ASMM" delay="10s">
<condition>
<check_all>
<check_value value="{player.notoriety.argon.rank}" max="0"/>
<count_objects race="player" min="1">
<sector sector="SEKTORZUGANG.Moonn"/>
</count_objects>
</check_all>
</condition>
<cues>
<cue ref="RSM">
<params>
<param name="Reset Cue" value="ASMM" comment="Cue to reset when finished"/>
<param name="Sector" value="{sector@SEKTORZUGANG.Moonn}" comment="The sectorid of the watched sector"/>
</params>
</cue>
</cues>
</cue>
+ Das funktioniert! leider halt nur in diesem einen Sektor. Die Angriffslybery habe ich bis "RSM Playerships Left" unverändert gelassen, außer die cue namen angepasst halt
<!-- Angriffslibary -->
<cue name="RSM" library="1" comment="Rassen Sector Management" version="2">
<documentation>
<params>
<param name="Reset Cue" type="cuename" description="Cue to reset when finished"/>
<param name="Sector" type="sectorid" description="The sectorid of the watched sector"/>
</params>
</documentation>
<cues>
<!-- Bei minus 2 Rang keine Warnung mehr -->
<cue name="RSM Instant Kill" check="cancel">
<condition>
<check_value value="{player.notoriety.argon.rank}" max="{value@{param@Sector} ARGON Rank}-2"/>
</condition>
<action>
<do_all>
<cancel_cue cue="RSM Warning"/>
<set_value name="this.Wait" min="{player.age}+1" max="{player.age}+15"/>
</do_all>
</action>
<cues>
<cue name="RSM Instant Kill Wait">
<condition>
<check_all>
<cue_is_complete cue="RSM Instant Kill"/>
<check_age min="{value@RSM Instant Kill.Wait}"/>
</check_all>
</condition>
<cues>
<cue ref="RSM Final Strike"/>
</cues>
</cue>
</cues>
</cue>
<!-- Sprachwarnung bei Playersektor oder ein Feindschiff erzeugen -->
<cue name="RSM Warning">
<condition>
<cue_cancelled cue="RSM Instant Kill"/>
</condition>
<action>
<do_all>
<do_choose>
<do_when value="{player.sector}" exact="{param@Sector}">
<play_text pageid="115" textid="643"/>
</do_when>
<do_otherwise>
<find_object name="this.object" race="player">
<sector sector="{param@Sector}"/>
</find_object>
<create_ship typename="SS_SH_TR_M4" capturable="0" racelogic="0" race="terran" group="RSM.Ships">
<position object="this.object"/>
<sector sector="{param@Sector}"/>
<equipment loadout="maximum"/>
<command command="attack" commandobject="this.object"/>
</create_ship>
</do_otherwise>
</do_choose>
</do_all>
</action>
<cues>
<cue name="RSM Full Attack">
<timing>
<time exact="60s"/>
</timing>
<action>
<do_all>
<do_choose>
<do_when value="{player.sector}" exact="{param@Sector}">
<play_text pageid="115" textid="641"/>
</do_when>
<do_otherwise>
<find_object group="this.objects" multiple="1" race="player">
<sector sector="{param@Sector}"/>
</find_object>
<do_choose>
<do_when value="{group.object.count@this.objects}" exact="0">
<set_object name="this.Target" value="{player.ship}"/>
<reward_player>
<notoriety>
<relation race="terran" exact="{penalty.notoriety.terran@{lookup.level@veryhard}}"/>
</notoriety>
</reward_player>
</do_when>
<do_otherwise>
<set_object name="this.Target" value="{group.object.random@this.objects}"/>
<reward_player>
<notoriety>
<relation race="terran" exact="{penalty.notoriety.terran@{lookup.level@hard}}"/>
</notoriety>
</reward_player>
</do_otherwise>
</do_choose>
<create_ship typename="SS_SH_TR_M5" capturable="0" racelogic="0" race="terran" group="RSM.Ships">
<position object="this.Target"/>
<sector sector="{param@Sector}"/>
<equipment loadout="maximum"/>
<command command="attack" commandobject="this.Target"/>
</create_ship>
</do_otherwise>
</do_choose>
</do_all>
</action>
<cues>
<cue name="RSM Full Attack Wait">
<condition>
<cue_completed cue="RSM Full Attack"/>
</condition>
<cues>
<cue ref="RSM Final Strike"/>
</cues>
</cue>
</cues>
</cue>
</cues>
</cue>
<cue name="RSM Final Strike" library="1">
<action>
<do_all>
<find_object multiple="1" group="this.objects" race="player">
<sector sector="{param@Sector}"/>
</find_object>
<do_choose>
<do_when value="{group.object.count@this.objects}" exact="0">
<set_object name="this.PosObject" value="{player.ship}"/>
</do_when>
<do_otherwise>
<set_object name="this.PosObject" value="{group.object.random@this.objects}"/>
</do_otherwise>
</do_choose>
</do_all>
</action>
<cues>
<cue ref="OBS">
<params>
<param name="OBS Cue" value="RSM" comment="The cue name where the ship groups are saved too"/>
<param name="OBS Cancel Cue" value="OBS" comment="The cue which is canceled after the OBS finishes"/>
<param name="OBS Fleet Group Name" value="Ships" comment="The group name where all main ships are saved too"/>
<param name="OBS Support Fleet Group Name" value="Ships" comment="The group name where all support ships are saved too"/>
<param name="OBSFleetRace" value="{lookup.race@terran}" comment="The maker race ID of the ships or the racemask 'default' or 'pirategroup'"/>
<param name="OBSFleetPilotsRace" value="{lookup.race@terran}" comment="The race ID of the pilots"/>
<param name="OBS Points" value="1000" comment="A fixed amount to use"/>
<param name="OBSMissionRank" value="{player.fightrank.rank}" comment="A 0-30 scale preferably based on the players fight rank"/>
<param name="OBSDifficultyRank" value="8" comment="A 1-8 scale of difficulty"/>
<param name="OBSPosition" value="50m" comment="how far away should the OBS ships be from FleetPositionObject"/>
<param name="OBSSector" value="{param@Sector}" comment="The sector where the ships will spawn if OBSFleetPositionObject not set"/>
<param name="OBSFleetRaceLogic" value="0" comment="0/1 Sets if the created ships will have default race logic"/>
<param name="OBSFleetPositionObject" value="RSM Final Strike.PosObject" comment="The object which will provide the location information"/>
<param name="OBS Dock Support" value="0" comment="0/1 Sets if the created support ships are docked with their homebase"/>
<param name="OBS Support Overflow" value="1" comment="0/1 Sets if additional support ships are created outside when the homebase is full"/>
<param name="OBSFleetRelation" value="-1"/>
</params>
</cue>
<cue name="RSM Warning OBS Set Commands" version="2">
<condition>
<cue_cancelled cue="OBS"/>
</condition>
<action>
<do_all>
<set_group_homebase group="RSM.Ships" homebase="0"/>
<set_group_relation group="RSM.Ships">
<relation object="{player.ship}" relation="enemy"/>
</set_group_relation>
<set_group_command group="RSM.Ships" command="killenemies"/>
</do_all>
</action>
</cue>
</cues>
</cue>
+ Hier nächstes Problem: Mein Wunsch... wenn alle Feindschiffe zerstört sind oder alle playerobjekte vernichtet, dann resette das ganze. Sollten die Feindschiffe zuerst vernichtet werden, sollten so neue erzeugt werden, bis alle playerobjekte vernichtet sind ( endlosschleife ). hat komischerweise nur 1mal funktioniert.
<cue name="RSM Playerships Left" delay="2s">
<condition>
<check_any>
<all_objects_destroyed group="RSM.Ships"/>
<count_objects race="player" exact="0">
<sector sector="{param@Sector}"/>
</count_objects>
<!-- <check_value value="{player.sector}" exact="{param@Sector}" negate="1"/>
</check_all> -->
</check_any>
</condition>
<action>
<do_all>
<destroy_group group="RSM.Ships"/>
<reset_cue cue="{param@Reset Cue}"/>
</do_all>
</action>
</cue>
</cues>
</cue>
</cues>
</cue>
</cues>
</director>
Zusammenfassung meiner Wünsche Fragen:
- Wie macht man an die lybary einen Sektorübergabe von anderen Playerobjekten ohne jeden Sektor vorher zu definieren?
- Was ist beim wechsel des Playerships in nen anderen Sektor?
- Wie mache ich aus dem ganzen ne Endlosschleife bis alle Playerobjekte zerstört sind?
Fragen über Fragen
ich hoffe ihr könnt mir da nochmal helfen.
THX
-
- Posts: 1379
- Joined: Fri, 21. Mar 14, 20:51
... genauso wie ichJoda wrote:Hi
hab jetzt lange nichts gemacht, wie so oft

Code: Select all
<cues>
<cue name="SEKTORZUGANG" map="default">
<condition>
<check_age min="10s"/>
</condition>
<action>
<do_all>
<find_sector name="this.Moonn" x="0" y="3" race="argon" exact="0"/>
</do_all>
</action>
<cues>
+ der zu prüfende sektor. Du hast mir das fürs Spielerschiff gezeigt - <match_sector sector="{player.sector}" border="1"/>
Problem: beim Spielerschff ist es die player.sector Variable - aaaaber wie ist es bei anderen spielerbesitz???
... dazu muss irgendne variable ne referenz zu dem objekt speichern
beispiel: du willst deine fab in argon prime verwenden => <find_station name="this.myfab" race="player" ... usw. am besten via typename / position o.ä. die suche einschränken
im klartext heißt das:
du musst zuerst via find... das gewünschte objekt speichern, dan kannste via {sector@this.myfab} z.B. auf den sektor des objekts zugreifen
Code: Select all
<!-- Startbedingung Angriffsflotte -->
<cue name="ASM" delay="10s">
<condition>
<check_all>
<check_value value="{player.notoriety.argon.rank}" max="0"/>
<match_sector sector="{player.sector}" border="1" race="argon"/>
</check_all>
</condition>
<action>
<do_all>
<set_value name="angriffssektor" exact="{player.sector}"/>
</do_all>
</action>
<cues>
<cue ref="RSM">
<params>
<param name="Reset Cue" value="ASM" comment="Cue to reset when finished"/>
<param name="Sector" value="{sector@angriffssektor}" comment="The sectorid of the watched sector"/>
</params>
</cue>
</cues>
</cue>
+ Da hab ich versucht die Variable player.sector in "angriffssektor" zu speichern, weil wenn das playership den sektor velassen hat das OBS immer unendlich schiffe erzeugt hat ohne befehl und nicht feindlich.
... wenn du allerdings zuerst den sektor unter einem namen speichern willst & später über den namen drauf zurückgreifen willst, merke:
set_value funzt nicht !!! nimm stattdessen set_sector
ähnliches gilt für objekte:
set_value name="this.myobject" value="{player.ship}" funzu nicht !!! nimm lieber:
set_object name="this.myobject" value="{player.ship}"
Code: Select all
+ Hier nächstes Problem: Mein Wunsch... wenn alle Feindschiffe zerstört sind oder alle playerobjekte vernichtet, dann resette das ganze. Sollten die Feindschiffe zuerst vernichtet werden, sollten so neue erzeugt werden, bis alle playerobjekte vernichtet sind ( endlosschleife ). hat komischerweise nur 1mal funktioniert.
<cue name="RSM Playerships Left" delay="2s">
<condition>
<check_any>
<all_objects_destroyed group="RSM.Ships"/>
entweder delay rausnehmen & damit jede millisekund checken (performance-lastig)
oder den zustand prüfen via <any_object_exists group="xxxxx" negate="1"/>

Code: Select all
<count_objects race="player" exact="0">
<sector sector="{param@Sector}"/>
</count_objects>

... count_ships wär vllt. die "bessere" alternative, aber ist jetzt nur aus der ferne geraten, getesten hab ichs ned ^^
... das objekt allerdings muss zuvor schon definiert / "gefunden" worden sein, damit man ja via {sector@xxxxxx} danach fragen kann- Wie macht man an die lybary einen Sektorübergabe von anderen Playerobjekten ohne jeden Sektor vorher zu definieren?
... ansonsten wie gehabt: via <param> übergeben
???- Was ist beim wechsel des Playerships in nen anderen Sektor?


... schon richtig so, also ein subcue, das z.B. <any_object_exists group="xxxxx" negate="1"/> checkt & bei zutreffen der condition ein reset des gewünschten cue- Wie mache ich aus dem ganzen ne Endlosschleife bis alle Playerobjekte zerstört sind?
// aber stell sicher (!), dass keine endlosschleife ohne zeitl. verzug ausgeführt wird, weist ja bescheid:
Code: Select all
while true
(kein @wait)
end
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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele
-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
Ich bin zwar kein MD-Guru und hab mich in X3 nie damit auseinander gesetzt, aber das Prinzip der Endlosschleife ist wie ich das verstehe in diesem fall nicht zutreffend.. Schiffe Spawnen bis der Spieler weg ist sollte man denke ich eher so umsetzen (ist mehr pseudo-Code, da ich die genauen Befehle nicht kenne)
Code: Select all
<cue name="Endless_Spawning_Enemies" >
<conditions>
<event_cue_signalled comment="irgendwas zum manuellenn auslösen halt" />
</conditions>
<cues>
<cue name="Spawn_Enemies">
<!-- keine conditions - cue triggert sofort wenn resettet oder wartend -->
<actions>
***** Feinde in Gruppe $Enemies erstellen
</actions>
<cues>
<cue name="ReSpawn_Enemies">
<conditions>
<event_group_destroyed group="$Enemies" />
</conditions>
<actions>
<reset_cue cue="Spawn_Enemies" />
</actions>
</cue>
<cue name="Player_Banished>
<conditions>
***** Erfassen, dass der Spieler keinen besitz mehr im Sektor hat
(check aller 5s reicht btw völlig, denn IS wäre das gleichzeitig ein Game Over)
</conditions>
<actions>
<destroy_group group="$Enemies" />
<!-- kA welcher von beiden koorekter weise gecancelt werden müsste - daher mach ichs für beide -->
<cancel_cue cue="Spawn_Enemies" />
<cancel_cue cue="ReSpawn_Enemies" />
**** Sonstige Aufräumaktionen ****
</actions>
</cue>
</cues>
</cue>
</cues>
</cue>
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
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

-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
das ging schnell thx
hab das prüf cue nun unter die obs lib drangehängt - grund ..
wie du schon geschrieben hast prüft das gleich alle 2 sekunden und da in dieser zeit die flotte noch nicht erstellt wurde ... loop
jetzt funktioniert es. die zeit könnte man doch jetzt rausnehmen oder?
versteh nicht warum das nicht gleich so gemacht wurde.
z.B. ein erkundungsschiff von mir durchstreift das uni. Schiff unbekannt - Sektor unbekannt. jetzt möchte ich das es angegriffen wird sobald es in zentalen sektoren des volkes xyz ankommt und den rang von x unterschreitet.
wenn ich wie schon getan den sektor angebe - kein problem.. count objekt.....
nur muss ich da jeden der 200irgendwas sektoren angeben und das wäre mir zu aufwändig. gibt es da nicht ne bessere lösung? beim spielerschiff kann man den sektor ja einfach übergeben - aber die anderen? kann man da irgendwie mit "event.object" arbeiten
dann noch ne frage zu
wieso wurde da eigentlich cue_cancelled benutzt? müsste da nicht cue_is_complete rein?
und um die fragen nicht abreißen zu lassen, wie kommt man eigentlich unter X3TC in das MD Menü rein? Thereshallbewings eingeben geht nicht, da komm ich nur in den se rein. soll laut anleitung bei den al einstellungen zu finden sein!? hab ich da was vergessen oder gibts da nen anderen weg?
hab das prüf cue nun unter die obs lib drangehängt - grund ..
wie du schon geschrieben hast prüft das gleich alle 2 sekunden und da in dieser zeit die flotte noch nicht erstellt wurde ... loop
jetzt funktioniert es. die zeit könnte man doch jetzt rausnehmen oder?
versteh nicht warum das nicht gleich so gemacht wurde.
Code: Select all
<cues>
<cue ref="OBS">
<params>
<param name="OBS Cue" value="RSM" comment="The cue name where the ship groups are saved too"/>
<param name="OBS Cancel Cue" value="OBS" comment="The cue which is canceled after the OBS finishes"/>
<param name="OBS Fleet Group Name" value="Ships" comment="The group name where all main ships are saved too"/>
<param name="OBS Support Fleet Group Name" value="Ships" comment="The group name where all support ships are saved too"/>
<param name="OBSFleetRace" value="{lookup.race@terran}" comment="The maker race ID of the ships or the racemask 'default' or 'pirategroup'"/>
<param name="OBSFleetPilotsRace" value="{lookup.race@terran}" comment="The race ID of the pilots"/>
<param name="OBS Points" value="1000" comment="A fixed amount to use"/>
<param name="OBSMissionRank" value="{player.fightrank.rank}" comment="A 0-30 scale preferably based on the players fight rank"/>
<param name="OBSDifficultyRank" value="8" comment="A 1-8 scale of difficulty"/>
<param name="OBSPosition" value="50m" comment="how far away should the OBS ships be from FleetPositionObject"/>
<param name="OBSSector" value="{param@Sector}" comment="The sector where the ships will spawn if OBSFleetPositionObject not set"/>
<param name="OBSFleetRaceLogic" value="0" comment="0/1 Sets if the created ships will have default race logic"/>
<param name="OBSFleetPositionObject" value="RSM Final Strike.PosObject" comment="The object which will provide the location information"/>
<param name="OBS Dock Support" value="0" comment="0/1 Sets if the created support ships are docked with their homebase"/>
<param name="OBS Support Overflow" value="1" comment="0/1 Sets if additional support ships are created outside when the homebase is full"/>
<param name="OBSFleetRelation" value="-1"/>
</params>
</cue>
<cue name="RSM Warning OBS Set Commands" version="2">
<condition>
<cue_cancelled cue="OBS"/>
</condition>
<action>
<do_all>
<set_group_homebase group="RSM.Ships" homebase="0"/>
<set_group_relation group="RSM.Ships">
<relation object="{player.ship}" relation="enemy"/>
</set_group_relation>
<set_group_command group="RSM.Ships" command="killenemies"/>
</do_all>
</action>
<cues>
<cue name="RSM Playerships Left" delay="2s">
<condition>
<check_any>
<any_object_exists group="RSM.Ships" negate="1"/>
<count_objects race="player" exact="0">
<sector sector="{param@Sector}"/>
</count_objects>
</check_any>
</condition>
<action>
<do_all>
<destroy_group group="RSM.Ships"/>
<reset_cue cue="{param@Reset Cue}"/>
</do_all>
</action>
</cue>
</cues>
</cue>
</cues>
na genau darum geht es mir ja.... na, zuerst muss das script ja wissen, WELCHES andere spielerobjekt
... dazu muss irgendne variable ne referenz zu dem objekt speichern
z.B. ein erkundungsschiff von mir durchstreift das uni. Schiff unbekannt - Sektor unbekannt. jetzt möchte ich das es angegriffen wird sobald es in zentalen sektoren des volkes xyz ankommt und den rang von x unterschreitet.
wenn ich wie schon getan den sektor angebe - kein problem.. count objekt.....
nur muss ich da jeden der 200irgendwas sektoren angeben und das wäre mir zu aufwändig. gibt es da nicht ne bessere lösung? beim spielerschiff kann man den sektor ja einfach übergeben - aber die anderen? kann man da irgendwie mit "event.object" arbeiten

dann noch ne frage zu
Code: Select all
<cue name="RSM Warning OBS Set Commands" version="2">
<condition>
<cue_cancelled cue="OBS"/>
</condition>
und um die fragen nicht abreißen zu lassen, wie kommt man eigentlich unter X3TC in das MD Menü rein? Thereshallbewings eingeben geht nicht, da komm ich nur in den se rein. soll laut anleitung bei den al einstellungen zu finden sein!? hab ich da was vergessen oder gibts da nen anderen weg?
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
-
- Posts: 1379
- Joined: Fri, 21. Mar 14, 20:51
... welche zeit ??Joda wrote:jetzt funktioniert es. die zeit könnte man doch jetzt rausnehmen oder?
versteh nicht warum das nicht gleich so gemacht wurde.
... wenn du auf events checkst, musst du bedenken, dass diese irgendwann "passieren" & danach nix mehr vom signal übrig bleibt
=> event != zustand, event-checks dürfen keine delays haben, denn es wäre vergleichbar wie n 6er im lotto, dass GENAU wenn das event passiert, dass dann das cue "zufällig" die conditions checkt & somit triggert
gleichbedeutend damit ist in performance-abfall: muss nicht sein, dass wegen 1 cue die fps merkbar sinkt, wohl aber wenn mehrere cue das tun !!
... ahh ! jetzt weiß ich worums geht: kannste vermutlich knickenjoda wrote:na genau darum geht es mir ja.... ich wrote:... na, zuerst muss das script ja wissen, WELCHES andere spielerobjekt
... dazu muss irgendne variable ne referenz zu dem objekt speichern
z.B. ein erkundungsschiff von mir durchstreift das uni. Schiff unbekannt - Sektor unbekannt. jetzt möchte ich das es angegriffen wird sobald es in zentalen sektoren des volkes xyz ankommt und den rang von x unterschreitet.
wenn ich wie schon getan den sektor angebe - kein problem.. count objekt.....
nur muss ich da jeden der 200irgendwas sektoren angeben und das wäre mir zu aufwändig. gibt es da nicht ne bessere lösung?

... es sei denn, du checkst in "moderaten" abständen, wo sich deine ships befinden, das geht zwar (einfach über das x-uni iterieren/loopen), aber wenn du mich fragst, ist das aus performance-sicht nicht "top"

nope, hab kein geeignetes event gefundenbeim spielerschiff kann man den sektor ja einfach übergeben - aber die anderen? kann man da irgendwie mit "event.object" arbeiten
{event.object} würde das schiff bedeuten, das soeben den sektor gewechselt hat (oder abgedockt ist), wenn du <object_changed_sector object="this.trackedobject"/>
der hacken an der sache: du MUSST ZUVOR das object festgelegt haben (via find.. bzw. set_object)
<any_object_changed_sector group="this.myships"/> wäre hierfür "geeignet", bedenken würde ich jedoch, dass dabei permanent jedes spielereigene ship getracked wird => k.a. wie sehr das die fps drücken kann, es heißt ja der MD sei "eventdriven": bedeutet das, dass das game sparsamer mit cpu-leistung umgeht ?? ich weiß s jedenfalls nicht

vllt. unitrader ?! *schieltrüber*
Code: Select all
<cue name="RSM Warning OBS Set Commands" version="2">
<condition>
<cue_cancelled cue="OBS"/>
</condition>
... wenn die OBS am ende angekommen ist, wird das cue OBS gecancelt & damit alle variablen (& somit afaik die "tracking"-prozesse des OBS-cue [?]) gelöscht
(drum muss man ja die enemygroup extern speichern, also unter anderem cue_name)
... geht afaik nicht, ist n X3AP feature (spiele auch TC, MD debuggen ist da noch etwas .. "umständlich"wie kommt man eigentlich unter X3TC in das MD Menü rein?


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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
das mit der zeit...
Bsp.
da wird doch kein event sondern der zustand - aktuelle wert abgefragt. ist da dann eine zeit nötig?
dann ne frage zu den libs.
sollte so eine <check_any> oder sonstige abfrage enthalten sein und der cue somit "warten", wird die lib dann überhaupt beendet?
beim se ist es ja so z.B.
...
return null
script, schleife, lib, etc beendet. nur wie läuft es da?
specieller fall ( fast ganz unten )
wenn man jetzt genau hinsieht kann immer nur eine der beiden prüf cue zutreffen ( die flotte zerstört das player objekt und wird dann
selbst vernichtet, jetzt müsste doch die cue "RSM SCHIFFSGRUPPE WEG" warten bis wieder ein spieler objekt da ist oder? ). was passiert dann mit der lib?
resettet die bei <reset_cue cue="{param@Reset Cue}"/> mit oder betrifft das nur die aufruf cue?
ist es überhaupt sinnvoll die lib von der lib nochmal zu starten?
"RSM Final Strike" ruft ja bei meinem ersten kommentar sich selbst noch mal auf. hab angst das damit die performance mit der zeit sinkt.
PS: funktionieren tut sie
ich hab mir mal deine werke in lucikes forum angeschaut...
da hab ich glück das der meister selber mir hilft
Bsp.
Code: Select all
<cue name="RSM Playerships Left" delay="2s">
<condition>
<check_any>
<any_object_exists group="RSM.Ships" negate="1"/>
<count_objects race="player" exact="0">
<sector sector="{param@Sector}"/>
</count_objects>
</check_any>
</condition>
<action>
<do_all>
<destroy_group group="RSM.Ships"/>
<reset_cue cue="{param@Reset Cue}"/>
</do_all>
</action>
</cue>
dann ne frage zu den libs.
sollte so eine <check_any> oder sonstige abfrage enthalten sein und der cue somit "warten", wird die lib dann überhaupt beendet?
beim se ist es ja so z.B.
...
return null
script, schleife, lib, etc beendet. nur wie läuft es da?
specieller fall ( fast ganz unten )
Code: Select all
<!-- Angriffslibary -->
<cue name="RSM" library="1" comment="Rassen Sector Management" version="2">
<documentation>
<params>
<param name="Reset Cue" type="cuename" description="Cue to reset when finished"/>
<param name="Sector" type="sectorid" description="The sectorid of the watched sector"/>
</params>
</documentation>
<cues>
<!-- Bei minus 2 Rang keine Warnung mehr -->
<cue name="RSM Instant Kill" check="cancel">
<condition>
<check_value value="{player.notoriety.argon.rank}" max="-2"/>
</condition>
<action>
<do_all>
<cancel_cue cue="RSM Warning"/>
<set_value name="this.Wait" min="{player.age}+1" max="{player.age}+15"/>
</do_all>
</action>
<cues>
<cue name="RSM Instant Kill Wait">
<condition>
<check_all>
<cue_is_complete cue="RSM Instant Kill"/>
<check_age min="{value@RSM Instant Kill.Wait}"/>
</check_all>
</condition>
<cues>
<cue ref="RSM Final Strike"/>
</cues>
</cue>
</cues>
</cue>
<!-- Sprachwarnung bei Playersektor oder ein Feindschiff erzeugen -->
<cue name="RSM Warning">
<condition>
<cue_cancelled cue="RSM Instant Kill"/>
</condition>
<action>
<do_all>
<do_choose>
<do_when value="{player.sector}" exact="{param@Sector}">
<play_text pageid="115" textid="643"/>
</do_when>
<do_otherwise>
<find_object name="this.object" race="player">
<sector sector="{param@Sector}"/>
</find_object>
<create_ship typename="SS_SH_TR_M4" capturable="0" racelogic="0" race="terran" group="RSM.Ships">
<position object="this.object"/>
<sector sector="{param@Sector}"/>
<equipment loadout="maximum"/>
<command command="attack" commandobject="this.object"/>
</create_ship>
</do_otherwise>
</do_choose>
</do_all>
</action>
<cues>
<cue name="RSM Full Attack">
<timing>
<time exact="60s"/>
</timing>
<action>
<do_all>
<do_choose>
<do_when value="{player.sector}" exact="{param@Sector}">
<play_text pageid="115" textid="641"/>
</do_when>
<do_otherwise>
<find_object group="this.objects" multiple="1" race="player">
<sector sector="{param@Sector}"/>
</find_object>
<do_choose>
<do_when value="{group.object.count@this.objects}" exact="0">
<set_object name="this.Target" value="{player.ship}"/>
</do_when>
<do_otherwise>
<set_object name="this.Target" value="{group.object.random@this.objects}"/>
</do_otherwise>
</do_choose>
<create_ship typename="SS_SH_TR_M5" capturable="0" racelogic="0" race="terran" group="RSM.Ships">
<position object="this.Target"/>
<sector sector="{param@Sector}"/>
<equipment loadout="maximum"/>
<command command="attack" commandobject="this.Target"/>
</create_ship>
</do_otherwise>
</do_choose>
</do_all>
</action>
<cues>
<cue name="RSM Full Attack Wait">
<condition>
<cue_completed cue="RSM Full Attack"/>
</condition>
<cues>
<cue ref="RSM Final Strike"/>
</cues>
</cue>
</cues>
</cue>
</cues>
</cue>
<cue name="RSM Final Strike" library="1">
<action>
<do_all>
<find_object multiple="1" group="this.objects" race="player">
<sector sector="{param@Sector}"/>
</find_object>
<do_choose>
<do_when value="{group.object.count@this.objects}" exact="0">
<set_object name="this.PosObject" value="{player.ship}"/>
</do_when>
<do_otherwise>
<set_object name="this.PosObject" value="{group.object.random@this.objects}"/>
</do_otherwise>
</do_choose>
</do_all>
</action>
<cues>
<cue ref="OBS">
<params>
<param name="OBS Cue" value="RSM" comment="The cue name where the ship groups are saved too"/>
<param name="OBS Cancel Cue" value="OBS" comment="The cue which is canceled after the OBS finishes"/>
<param name="OBS Fleet Group Name" value="Ships" comment="The group name where all main ships are saved too"/>
<param name="OBS Support Fleet Group Name" value="Ships" comment="The group name where all support ships are saved too"/>
<param name="OBSFleetRace" value="{lookup.race@terran}" comment="The maker race ID of the ships or the racemask 'default' or 'pirategroup'"/>
<param name="OBSFleetPilotsRace" value="{lookup.race@terran}" comment="The race ID of the pilots"/>
<param name="OBS Points" value="1000" comment="A fixed amount to use"/>
<param name="OBSMissionRank" value="{player.fightrank.rank}" comment="A 0-30 scale preferably based on the players fight rank"/>
<param name="OBSDifficultyRank" value="8" comment="A 1-8 scale of difficulty"/>
<param name="OBSPosition" value="50m" comment="how far away should the OBS ships be from FleetPositionObject"/>
<param name="OBSSector" value="{param@Sector}" comment="The sector where the ships will spawn if OBSFleetPositionObject not set"/>
<param name="OBSFleetRaceLogic" value="0" comment="0/1 Sets if the created ships will have default race logic"/>
<param name="OBSFleetPositionObject" value="RSM Final Strike.PosObject" comment="The object which will provide the location information"/>
<param name="OBS Dock Support" value="0" comment="0/1 Sets if the created support ships are docked with their homebase"/>
<param name="OBS Support Overflow" value="1" comment="0/1 Sets if additional support ships are created outside when the homebase is full"/>
<param name="OBSFleetRelation" value="-1"/>
</params>
</cue>
<cue name="RSM Warning OBS Set Commands" version="2">
<condition>
<cue_cancelled cue="OBS"/>
</condition>
<action>
<do_all>
<set_group_homebase group="RSM.Ships" homebase="0"/>
<set_group_relation group="RSM.Ships">
<relation object="{player.ship}" relation="enemy"/>
</set_group_relation>
<set_group_command group="RSM.Ships" command="killenemies"/>
</do_all>
</action>
+Hier z.B. Schiffsgruppe zerstört, min 1 playerobjekt noch da - starte die lib "RSM Final Strike" mit dem OBS neu.
<cues>
<cue name="RSM SCHIFFSGRUPPE WEG" delay="5s">
<condition>
<check_all>
<any_object_exists group="RSM.Ships" negate="1"/>
<count_objects race="player" min="1">
<sector sector="{param@Sector}"/>
</count_objects>
<!-- <check_value value="{player.sector}" exact="{param@Sector}" negate="1"/> -->
</check_all>
</condition>
<cues>
<cue ref="RSM Final Strike"/>
</cues>
</cue>
</cues>
</cue>
</cues>
</cue>
+ Alle Spielerobjekte weg - reset die "aufruf" cue von der lib
<cue name="RSM SPIELEROBJ WEG" delay="5s">
<condition>
<check_all>
<count_objects race="player" exact="0">
<sector sector="{param@Sector}"/>
</count_objects>
<!-- <check_value value="{player.sector}" exact="{param@Sector}" negate="1"/> -->
</check_all>
</condition>
<action>
<do_all>
<destroy_group group="RSM.Ships"/>
<reset_cue cue="{param@Reset Cue}"/>
<!--<cancel_cue cue="RSM SCHIFFSGRUPPE WEG"/>-->
</do_all>
</action>
</cue>
</cues>
</cue>
selbst vernichtet, jetzt müsste doch die cue "RSM SCHIFFSGRUPPE WEG" warten bis wieder ein spieler objekt da ist oder? ). was passiert dann mit der lib?
resettet die bei <reset_cue cue="{param@Reset Cue}"/> mit oder betrifft das nur die aufruf cue?
ist es überhaupt sinnvoll die lib von der lib nochmal zu starten?
"RSM Final Strike" ruft ja bei meinem ersten kommentar sich selbst noch mal auf. hab angst das damit die performance mit der zeit sinkt.
PS: funktionieren tut sie

ich hab mir mal deine werke in lucikes forum angeschaut...
da hab ich glück das der meister selber mir hilft

-
- Moderator (Script&Mod)
- Posts: 14571
- Joined: Sun, 20. Nov 05, 22:45
für X3 keine ahnung im speziellen, aber in XR ist es performance-mässig grundlegend egal wie viele Objekte für ein solches event registriert werden, hier ne Erklärung:JSDD wrote:<any_object_changed_sector group="this.myships"/> wäre hierfür "geeignet", bedenken würde ich jedoch, dass dabei permanent jedes spielereigene ship getracked wird => k.a. wie sehr das die fps drücken kann, es heißt ja der MD sei "eventdriven": bedeutet das, dass das game sparsamer mit cpu-leistung umgeht ?? ich weiß s jedenfalls nicht
vllt. unitrader ?! *schieltrüber*
Im prinzip wird ne art Merker auf dem Objekt gespeichert, dass wenn es den Sektor wechselt (bzw. was auch immer der event ist) das MD-Script soundso ausgeführt werden soll (bzw. die conditions gecheckt werden sollen) und ggf. mit dden folgenden actions/cues weiter gemacht werden soll. kostet also 0 CPU-Zeit und ein paar byte Speicher pro Schiff.
ich denke EGO hat das in X3 auch ähnlich gelöst, weil dieser Ansatz performance-mässig das beste ist was geht.
Zu bedenken wäre aber, dass der Event warscheinlich nur für die Objekte gilt, die zu dem Zeitpunkt in der Liste sind in der der cue in den Waiting-State (oder ist es active? bin wie gesagt kein MD-Guru) wechselt, ich glaube nicht dass es für weitere Schiffe gilt wenn man die Liste nachträglich erweitert... für so nen Update müsste man denke ich den cue resetten oder sowas in der art..
All diese infos stammen aus dem betrachten von XR-Savegames und einiger MD-Scripte, sprich es ist alles zusammen gereimt und daher keine garantie für korrrektheit ^^
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
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

-
- Posts: 1379
- Joined: Fri, 21. Mar 14, 20:51
@unitrader ... thx 4 infos 
bzgl. performance sollte es dann nicht wikklich tragisch sein, alle spielerschiffe auf n paar events zu checken
was ich allerdings bezweifle (habs noch nicht selbst getestet
:D) ist, dass sich die group nicht nachträglich erweitern lässt (auch ohne event_cue_reset)
@joda ... schau dir mal das beispiel an:
<<edit: kleine korrektur im code>>
oberstes cue legt ne gruppe fest, das update-cue aktualisiert diese & das untere cue checkt auf "feindl. invasion"
letzteres cue instanziiert sich, bedeutet es ist permanent im active-status, sobald einmal die conditions zutreffen, wird ne kopie des cue ausgeführt, aber "eigentlich" bleibt es trotzdem im active-status (checkt also weiterhin seine conditions)
=> da es ein event checkt, ist es ausgeschlossen, dass es ne art endlosschleife bzw. "unendlich" viele instanzen ausführt werden !! (das ist übrigens eines der wenigen fälle, wenn ich cues instanziiere, ansonsten ist höchste vorsicht dabei geboten !!)
deine aufgabe ist es nun, oberen code zu testen
(sollte "eigentlich" funzen)

wenn du mal die tutorials von ketraar durch hast (die videos mehrfach gesehen hast & alles verstanden hast) & erstmal ne komplette mission erstellt hast, weißt du, worauf es ankommt

bzgl. performance sollte es dann nicht wikklich tragisch sein, alle spielerschiffe auf n paar events zu checken
was ich allerdings bezweifle (habs noch nicht selbst getestet

@joda ... schau dir mal das beispiel an:
Code: Select all
<?xml version="1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet href="director.xsl" type="text/xsl" ?>
<director name="template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="director.xsd">
<cues>
<!--init group of player owned ships-->
<cue name="cue0_init">
<action>
<do_all>
<find_ship group="cue0_init.ships" race="player">
<jumps max="99"/>
</find_ship>
</do_all>
</action>
<cues>
<!--update group of player owned ships-->
<cue name="cue1_update">
<timing>
<time min="30s" max="60s"/>
</timing>
<action>
<do_all>
<find_ship group="cue0_init.ships" race="player">
<jumps max="99"/>
</find_ship>
<reset_cue cue="cue1_update"/>
</do_all>
</action>
</cue>
<cue name="cue2_checkinvasion" instantiate="static">
<condition>
<check_all>
<!--in case any player owned ship changes environment ...-->
<any_object_changed_sector group="cue0_init.ships"/>
<!--in case new environment is core sector ...-->
<match_sector sector="{sector@{event.object}}" core="1" race="(default|pirategroup)"/>
<!--if new environment belongs to an enemy race ...-->
<check_value value="{player.notoriety.{sector.race@{event.object}}.rank}" max="-1"/>
</check_all>
</condition>
<action>
<do_all>
<!--speak to player ... do other stuff ... attack player ...-->
</do_all>
</action>
</cue>
</cues>
</cue>
</cues>
</director>
oberstes cue legt ne gruppe fest, das update-cue aktualisiert diese & das untere cue checkt auf "feindl. invasion"
letzteres cue instanziiert sich, bedeutet es ist permanent im active-status, sobald einmal die conditions zutreffen, wird ne kopie des cue ausgeführt, aber "eigentlich" bleibt es trotzdem im active-status (checkt also weiterhin seine conditions)
=> da es ein event checkt, ist es ausgeschlossen, dass es ne art endlosschleife bzw. "unendlich" viele instanzen ausführt werden !! (das ist übrigens eines der wenigen fälle, wenn ich cues instanziiere, ansonsten ist höchste vorsicht dabei geboten !!)
deine aufgabe ist es nun, oberen code zu testen

achwas !! die wahren meister sind immernoch lucike, ketraar & co.joda wrote:ich hab mir mal deine werke in lucikes forum angeschaut...
da hab ich glück das der meister selber mir hilft

wenn du mal die tutorials von ketraar durch hast (die videos mehrfach gesehen hast & alles verstanden hast) & erstmal ne komplette mission erstellt hast, weißt du, worauf es ankommt

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
Irren ist menschlich. Aber wenn man richtig Fehler machen will, braucht man einen Computer.
Mission Director Beispiele
-
- Posts: 217
- Joined: Sun, 18. Jan 04, 23:44
soooo update
dank deiner hilfe und tonnenweise probieren raff ich das ganze jetzt ein wenig....
hab das md script soweit erfolgreich zum laufen gebracht und es um etliche nette dinge erweitert.
zu deinem poast...
das hat so nicht funktioniert, desshalb hab ich es so wie im orginal gemacht, mit dem unterschied, das die sektoren erst geprüft werden wenn der rang zum volk sinkt ( alle 20 sek. )
dann werden die sektoren auf playeraktivitäten geprüft.
nachden ich jetzt meins soweit hab und mit reset_cue, cancel_cue, cue_complete usw rumprobiert hab, denke ich das es so nicht gehen kann... denn du resettest cue1_update gleich nach der suche und das hat nach meinen beobachtungen her den effekt das alles im cue gelöscht wird, also auch die gruppe cue0_init.ships! deswegen hab ich in cue RSM_Argonen_Sektoren_Freigabe auch einen counter der aufgerufenen lib drin, um zu verhindern das das cue resettet wird. sobald meine lib startet setzt sie den counter des volkes um 1 höher und erst bei beendeter lib wird der counter reduziert. so ist sichergestellt das die lib immer zuende gemacht wird, so das alle feindlichen schiffe wegspringen können.

dank deiner hilfe und tonnenweise probieren raff ich das ganze jetzt ein wenig....
hab das md script soweit erfolgreich zum laufen gebracht und es um etliche nette dinge erweitert.
zu deinem poast...
das hat so nicht funktioniert, desshalb hab ich es so wie im orginal gemacht, mit dem unterschied, das die sektoren erst geprüft werden wenn der rang zum volk sinkt ( alle 20 sek. )
Code: Select all
<!--Genereller Rangcheck - Performance-->
<cue name="RSM_Argonen_Sektoren_Freigabe" delay="20s">
<condition>
<check_all>
<check_value value="{player.notoriety.argon.rank}" min="{value@SEKTORZUGANG.MinRangRSMStopp}"/>
<check_value value="{value@RSMCounter{lookup.race@argon}}" exact="0"/>
</check_all>
</condition>
<action>
<do_all>
<reset_cue cue="RSM_Argonen_Sektoren_Sperren"/>
</do_all>
</action>
</cue>
<cue name="RSM_Argonen_Sektoren_Sperren" delay="20s">
<condition>
<check_value value="{player.notoriety.argon.rank}" max="{value@SEKTORZUGANG.MaxRangRSMStart}"/>
</condition>
<action>
<reset_cue cue="RSM_Argonen_Sektoren_Freigabe"/>
</action>
<cues>
<!--Sektorencheck und lib aufruf-->
</cues>
</cue>
nachden ich jetzt meins soweit hab und mit reset_cue, cancel_cue, cue_complete usw rumprobiert hab, denke ich das es so nicht gehen kann... denn du resettest cue1_update gleich nach der suche und das hat nach meinen beobachtungen her den effekt das alles im cue gelöscht wird, also auch die gruppe cue0_init.ships! deswegen hab ich in cue RSM_Argonen_Sektoren_Freigabe auch einen counter der aufgerufenen lib drin, um zu verhindern das das cue resettet wird. sobald meine lib startet setzt sie den counter des volkes um 1 höher und erst bei beendeter lib wird der counter reduziert. so ist sichergestellt das die lib immer zuende gemacht wird, so das alle feindlichen schiffe wegspringen können.