Mission Director Basics and Installation
Moderators: Moderators for English X Forum, Scripting / Modding Moderators
-
- EGOSOFT
- Posts: 13092
- Joined: Sat, 9. Nov 02, 11:45
The checking conditions for any BBS mission offer or question must be in a subcue of the offer.
The reason that the cue does not trigger is because the action that offers the mission is on the same level as the condition that checks it. 'steviobbslottery Misson Accepted' must become a subcue of 'steviobbslottery Mission Offer'.
The reason that the cue does not trigger is because the action that offers the mission is on the same level as the condition that checks it. 'steviobbslottery Misson Accepted' must become a subcue of 'steviobbslottery Mission Offer'.
Come watch me on Twitch where I occasionally play several of the X games
- Sandalpocalypse
- Posts: 4447
- Joined: Tue, 2. Dec 03, 22:28
Bleh! Had to stick iin my own debugging messages before I figured out some error in my target selection was causing my mission to reset and thats why the BBS wasn't workin'.
I was trying to use Set Value to change an objects name, I don't think that's working. Am I using Set Object properly here? Not at my X3 comp unfortunately, can't test it. I want this.DistilleryM to be renamed to this.Distillery, or at least have this.Distillery refer to the same object as this.DistilleryM.
I was trying to use Set Value to change an objects name, I don't think that's working. Am I using Set Object properly here? Not at my X3 comp unfortunately, can't test it. I want this.DistilleryM to be renamed to this.Distillery, or at least have this.Distillery refer to the same object as this.DistilleryM.
Code: Select all
<find_station typename="SS_FAC_F219" nearest="1" name="this.DistilleryM" max="1" comment="Find the nearest Distillery M" race="default"/>
<set_sector name="this.SFDSector" value="{object.sector@this.DistilleryM}"/>
<set_object name="this.DistilleryM" value="{object@this.Distillery}"/>
What you have there should make this.Distillery and this.DistilleryM refer to the same object. However I think you've got them the wrong way around in the <set_object> action. I think what you meant was:
Code: Select all
<set_object name="this.Distillery" value="{object@this.DistilleryM}"/>
Any obvious checks I should add before crash testing?
Code: Select all
<cues>
<cue name="JL01enterSector">
<condition>
<check_all comment="IFF player enters a Xenon sector.">
<object_changed_sector comment="Player has entered a new sector."/>
<check_value value="{player.sector.race}" exact="{lookup.race@xenon}"/>
</check_all>
</condition>
<action>
<find_ship race="Xenon" group="JL01.victims">
<sector sector="{player.sector.race}"/>
</find_ship>
</action>
<cues>
<cue name="JL01deadXenon">
<condition>
<check_all comment="All initial Xenon have died and player is still in Xenon sector.">
<any_object_destroyed group="JL01.victims"/>
<check_value value="{player.sector.race}" exact="{lookup.race@xenon}"/>
<check_value value="{group.object.count@victims}" exact="0"/>
</check_all>
</condition>
<action>
<!-- first test: direct retaliation -->
<do_all count="({player.fightrank.rank}/3)">
<create_ship class="m6" race="Xenon" group="JL01.avengers">
<position object="{player.ship}" max="15km"/>
<sector sector="{player.sector}"/>
<equipment loadout="maximum"/>
<command command="killenemies"/>
</create_ship>
</do_all>
</action>
</cue>
</cues>
</cue>
</cues>
Goner Pancake Protector X
Insanity included at no extra charge.
There is no Box. I am the sand.
Insanity included at no extra charge.
There is no Box. I am the sand.
-
- EGOSOFT
- Posts: 13092
- Joined: Sat, 9. Nov 02, 11:45
The find ship action you have used will only find one ship. Use the multiple attribute and set max to something like 99. Also, the sector node says {player.sector.race} where it should be {player.sector}
<check_value value="{group.object.count@victims}" exact="0"/>
You have forgotten to localise the victims group. It should be {group.object.count@JL01.victims}.
There is no 'count' attibute in do_all. There is counter which increments by one each time. If you want it to perform several times use the exact attribute.
<check_value value="{group.object.count@victims}" exact="0"/>
You have forgotten to localise the victims group. It should be {group.object.count@JL01.victims}.
There is no 'count' attibute in do_all. There is counter which increments by one each time. If you want it to perform several times use the exact attribute.
Come watch me on Twitch where I occasionally play several of the X games
never been careful in details.
The one and only desired condition ought to be "whenever the player kills the last Xenon of a Xenon sector". But since the any_destroyed requires a group to test the race of killed ship by, and group has to be defined before condition ... or is there a simpler, more fool-proof way?Xenon_Slayer wrote:The find ship action you have used will only find one ship. Use the multiple attribute and set max to something like 99.
Goner Pancake Protector X
Insanity included at no extra charge.
There is no Box. I am the sand.
Insanity included at no extra charge.
There is no Box. I am the sand.
-
- EGOSOFT
- Posts: 13092
- Joined: Sat, 9. Nov 02, 11:45
To see if a player destroys all ships in a Xenon sector could be difficult. The problem is that the ships are moving. Some are entering a sector, some are leaving. For that you will need to update the group every few seconds.
Actually knowing if it was the player who killed all the Xenon before could be a problem. You can increment a value every time any_object_destroyed_by_player is triggered. That would be the best option.
Also, checking if the sector race is Xenon is not a very solid basis for this mission. I suggest it is done per sector instead of looking at the race. It sounds like you want it per sector anyway. The way I would do it is to either make the mission watch one sector, or use the sector ID in the values you create so that they are different from one an other.
Actually knowing if it was the player who killed all the Xenon before could be a problem. You can increment a value every time any_object_destroyed_by_player is triggered. That would be the best option.
Also, checking if the sector race is Xenon is not a very solid basis for this mission. I suggest it is done per sector instead of looking at the race. It sounds like you want it per sector anyway. The way I would do it is to either make the mission watch one sector, or use the sector ID in the values you create so that they are different from one an other.
Come watch me on Twitch where I occasionally play several of the X games
Ok.CBJ wrote:Of course! Positive contributions are always welcome.ChemODun wrote:May I post in this thread link to russian translation of Manual and MD files, when I will finish it?
Can I use russian analog word episode for naming cue in Manual?
Becouse, from my point of view cue - is a part of Mission, so - it's episode of mission.
Multiply entropy by absolute zero
Ñâîáîäà ñðåäè çâåçä / Freedom in space
Ñâîáîäà ñðåäè çâåçä / Freedom in space
That's certainly not the way the naming works in the English version. A "cue" is taken from theatrical terminology, where it refers to the script line or action that signals to someone that they have to do something (e.g. one character in the play throws something on the floor, which is another character's "cue" to come onto the stage through a door). This terminology is carefully chosen to describe the functionality of the Mission Director, not the purpose for which it is used.
Ok.CBJ wrote:That's certainly not the way the naming works in the English version. A "cue" is taken from theatrical terminology, where it refers to the script line or action that signals to someone that they have to do something (e.g. one character in the play throws something on the floor, which is another character's "cue" to come onto the stage through a door). This terminology is carefully chosen to describe the functionality of the Mission Director, not the purpose for which it is used.
Word-for-word translation of cue writed in Russian equal with another term - replica, so usage this word-to-word translation is incorrect, from my point of view.
Most suitable - one is word-to word translation of term event, which sound like episode, but mean event.
P.S. Sorry for bad English. I have more experience when read and translate from English.
Multiply entropy by absolute zero
Ñâîáîäà ñðåäè çâåçä / Freedom in space
Ñâîáîäà ñðåäè çâåçä / Freedom in space
i am making a circuit of markers like that in the race mission in freedoms reach,
each marker is named this.mark{index@this}
so the id will increment (rather than decrement i hope)
each marker i want placed between 5 and 8km from each other, so i want to use the last marker as the ref object for the next marker
at the moment i have this;
<set_value name="this.last" exact="{index@this}-1"/>
<position min="5km" max="8km" object="this.mark{this.last}"/>
thats right isn't it?
heres a snipit:
each marker is named this.mark{index@this}
so the id will increment (rather than decrement i hope)
each marker i want placed between 5 and 8km from each other, so i want to use the last marker as the ref object for the next marker
at the moment i have this;
<set_value name="this.last" exact="{index@this}-1"/>
<position min="5km" max="8km" object="this.mark{this.last}"/>
thats right isn't it?
heres a snipit:
Code: Select all
<cues>
<cue name="cotgbfready">
<condition>
<check_all>
<cue_is_complete cue="cotgbfstart"/>
<object_position max="200m">
<position object="cotgbfstart.startmark"/>
</object_position>
</check_all>
</condition>
<timing>
<count exact="20"/>
</timing>
<action>
<do_all>
<set_value name="this.last" exact="{index@this}-1"/>
<create_object name="this.mark{index@this}" typename="SS_SPECIAL_MARKER" class="special">
<position min="5km" max="8km" object="this.mark{this.last}"/>
</create_object>
</do_all>
Yeah, I think 'hint' would be a decent replacement for 'cue'. Because cues are basically hints for when to do something.Toastie wrote:How about ' Намёк ' for 'cue' (literally means hint), this is another theatrical term for cue?ChemODun wrote:Word-for-word translation of cue writed in Russian equal with another term - replica, so usage this word-to-word translation is incorrect, from my point of view.
10,000 Lightyears of awesomeness
Yes. It's another term for cue, but in Russian it will be look not well.Toastie wrote:How about ' Намёк ' for 'cue' (literally means hint), this is another theatrical term for cue?ChemODun wrote:Word-for-word translation of cue writed in Russian equal with another term - replica, so usage this word-to-word translation is incorrect, from my point of view.
Sorry for Russian next:
Another variant - russian analog of word thread, which means mental step. One mind thread may go by one way or another way.Russian wrote: Например так - условие активации намека, хронометраж намека, блок действий намека.
Или так -
условие активации эпизода, хронометраж эпизода, блок действий эпизода.
Есть еще вариант - нить или поток.
Нить миссии, активация нити, хронометраж и блок действий нити
Last edited by ChemODun on Wed, 9. Jan 08, 10:13, edited 2 times in total.
Multiply entropy by absolute zero
Ñâîáîäà ñðåäè çâåçä / Freedom in space
Ñâîáîäà ñðåäè çâåçä / Freedom in space
- Sandalpocalypse
- Posts: 4447
- Joined: Tue, 2. Dec 03, 22:28
-
- EGOSOFT
- Posts: 13092
- Joined: Sat, 9. Nov 02, 11:45
No Sorry. The find ship will find random ships which meet the criteria. The Multiple attribute will allow several ships to be found, the max attribute sets the maximum number of ships which can be found. If you set it to "1" then it will not find multiple ships.Sandalpocalypse wrote:Just to be clear about find ship: If I did race=pirates multiple=1 max=1, would it find one Jobs-group of pirates and tag all of them with that group label?
If the above is true, and you did player race instead, would the player + ships escorting him be found as a group?
There is no way to look at a ship and check if it has wingmen or following ships. Be advised though, if you want to run a mission on existing objects, be careful about how many you add to MD tracking. It is not exactly designed to watch all Pirate groups in the universe for example. Although that could lead to a more lively universe it may cause some performance issues. Adding all local Pirate groups in one sector, and updating the group every few minutes should keep the numbers low and more manageable.
Come watch me on Twitch where I occasionally play several of the X games
- Sandalpocalypse
- Posts: 4447
- Joined: Tue, 2. Dec 03, 22:28