A few questions

Workshop for all Mission Engineer Comrades. Home of the FA Mission Making Template.
User avatar
SuicideKing
Host
Posts: 312
Joined: Wed Nov 27, 2013 1:29 pm
Location: India/US West
Contact:

A few questions

Post by SuicideKing »

Hey,

So skype is being horrible and I've given up. Had a few questions:

(BTW I make all missions with unmodded A3).
  • Is the radio protocol disabled in F3? I asked Kefirz last night, he said no, but the AI units don't make a sound, nor do they issue orders via radio. For example, to test helicopter insertion, I enabled all platoon AI and selected Platoon Medic for myself. CO does give me an order to disembark, but I don't hear the audio or get the subtitles. An "eject" symbol appears on my character, but that's it.
  • Can I use the task module (without waypoints) to track objectives, or should I just use the hint function with triggers?
  • How should I implement a countdown timer? Like, "hold this position for x minutes", after which a trigger will activate. Obviously this needs to be on the screen.
  • Is there a convenient way to trigger particular (partial) endings? What I'm thinking of is, if a mission has 5 objectives, a smaller group can try doing a subset of them (perhaps just the primary ones). Right now all I can think of is a tree of triggers with AND/OR conditions.


Cheers. :science101:

EDIT:

One more thing, I thought I succeeded in changing the mission date, but I haven't. It shows up in the mission log, but then so does the time I set in the editor (7 AM), which isn't the actual mission time (4:50 AM), so I'm guessing the date is wrong too. Why does it matter? Because the position of the sun needs to be appropriate, that's why! Solved

Only thing left, I suppose, is the infuriating behaviour of helos.
Last edited by SuicideKing on Thu Oct 08, 2015 11:14 am, edited 4 times in total.
themiddlevoid.wordpress.com

User avatar
boberro
Posts: 196
Joined: Sun May 12, 2013 10:27 pm

Re: A few questions

Post by boberro »

If you're using Heads malware Swifty, or just downloaded ALL THE MODS, you have MRB Voice Stop istalled. It's responsible for AI being silent.
Delete this marker please. You're scaring the tank.
My screenshots are being added using Steam Screenshots Sharing Script™. You'll need Tampermonkey (Chrome) or Greasemonkey (Firefox) On Opera should be good to go..

User avatar
SuicideKing
Host
Posts: 312
Joined: Wed Nov 27, 2013 1:29 pm
Location: India/US West
Contact:

Re: A few questions

Post by SuicideKing »

boberro wrote:If you're using Heads malware Swifty, or just downloaded ALL THE MODS, you have MRB Voice Stop istalled. It's responsible for AI being silent.
Ah, neither is the case! I use the Arma launcher for selecting mods, and as mentioned, deselect all mods when making missions. I've stopped using Voice Stop for FA sessions as well.

AI talk fine in single player...even if I'm Zeus, the AI don't acknowledge commands in the F3 mission but do so in single player.
themiddlevoid.wordpress.com

darkChozo
Host
Posts: 207
Joined: Fri Aug 14, 2015 12:48 pm

Re: A few questions

Post by darkChozo »

AFAIK the only way to really do countdowns is have a loop that increments a timer, sleeps, increments a timer, and so on and so forth. So something like this:

Code: Select all

_counter = 0;
_timeNeeded = 120;
while {_counter < _timeNeeded} do {
  // do whatever
  _counter = _counter + 1;
  sleep 1;
}
If you needed more precision, you could also keep a t0 and do a waitUntil {time - t0 > counter} instead.

If you just want to have a success and partial success ending that's pretty much already baked into f3. Just have three endings, failure, full success, partial success. If you want to do something more complicated, you're gonna run out of endings pretty quickly and you can't change debriefings AFAIK. If you can use tasks, that shows up in the debriefing but I dunno if we want to use tasks.

The date is overridden by the time selector, look in f\missionConditions\fn_setTime.sqf. You can override the ymd there.

User avatar
SuicideKing
Host
Posts: 312
Joined: Wed Nov 27, 2013 1:29 pm
Location: India/US West
Contact:

Re: A few questions

Post by SuicideKing »

Thanks, darkChozo!

So how would I display the counter on screen? Like:

Code: Select all

hint counter;
?

Another alternative way I've been thinking of is to set a timeout on a trigger (Activation: BLUFOR, present, timeout: x mins), but then again, I'd need to display it somehow.

Yeah I realised tasks will mess with the briefing. I've decided to use BIS_fnc_showNotification instead, and it works well. However, it has local execution so I don't know if it'll cause issues on the server. I've put it in the trigger act. field.

Yeah I know about the baked in endings, but I was wondering if there was any easy way to create a partial ending, like "great! all primary objectives complete" and another "All objectives complete". I guess as long as the exit point is the same for both (say one final primary objective) then I could chain triggers, with the last one calling the ending.

Thanks for the date setting location. Changed it successfully.

Currently only major problem I have is that the AI piloted helicopters are misbehaving if a human player is in the AI helo's cargo. They're ignoring speed settings (and maybe even behaviour, not sure) if I am inside, but are paying heed if I don't.
themiddlevoid.wordpress.com

darkChozo
Host
Posts: 207
Joined: Fri Aug 14, 2015 12:48 pm

Re: A few questions

Post by darkChozo »

Yup, hint makes the most sense. For a timer, you'd probably want it to only run on the server or you'd have desync issues, so you can use BIS_fnc_MP to make the hint run on all clients.

BIS_fnc_showNotification won't cause issues with the server but if you don't set it up correctly it might not work properly for clients. Triggers are local, so if the trigger would fire on all clients then everyone would get the message. In general though, unless it needs to be clientside it's best practice to keep things serverside, so it might make sense to have the trigger only work for the server and then BIS_fnc_MP out the notification.

You can change the debriefing messages in description.ext, then you just have to call the right ending. So you could have 1 = full success, 2 = partial success, 3 = failure, and then do something like:

Code: Select all

if (allObjsComplete) then {
  [1] call f_fnc_mpEnd;
} else {
  [2] call f_fnc_mpEnd;
};
wherever you're triggering your ending. It just get weird if you need more endings like that, like if you have 5 different objectives and want an ending for every combination of those objectives.

User avatar
fer
Posts: 1586
Joined: Fri Jun 04, 2010 8:16 am
Location: Emotional wreck

Re: A few questions

Post by fer »

SuicideKing wrote:Is the radio protocol disabled in F3? I asked Kefirz last night, he said no, but the AI units don't make a sound, nor do they issue orders via radio. For example, to test helicopter insertion, I enabled all platoon AI and selected Platoon Medic for myself. CO does give me an order to disembark, but I don't hear the audio or get the subtitles. An "eject" symbol appears on my character, but that's it.
See: http://www.ferstaberinde.com/f3/en//ind ... nd_Reports
SuicideKing wrote:How should I implement a countdown timer? Like, "hold this position for x minutes", after which a trigger will activate. Obviously this needs to be on the screen.
Ask yourself if you really, really want on-screen hints going-off throughout the countdown - or whether a simple presence trigger and chained countdown trigger with hints will do the trick.
SuicideKing wrote:Is there a convenient way to trigger particular (partial) endings? What I'm thinking of is, if a mission has 5 objectives, a smaller group can try doing a subset of them (perhaps just the primary ones). Right now all I can think of is a tree of triggers with AND/OR conditions.
For multi-objective missions I usually do the following:
  1. Set a variable called objCounter in init.sqf - usually to the value of 0
  2. For each objective, I have a trigger / script that - on completion - increments objCounter by 1
  3. A separate trigger waits for objCounter to reach a certain number (usually the total # of objectives) and then invoked an F3 ending
You could use this approach, but add an extra trigger that waits for the counter to reach a smaller number, check the number of players, and then invokes a different ending if appropriate (or does nothing). You might even experiment with different integers - like larger ones for major objectives etc.

User avatar
SuicideKing
Host
Posts: 312
Joined: Wed Nov 27, 2013 1:29 pm
Location: India/US West
Contact:

Re: A few questions

Post by SuicideKing »

Thanks, darkChozo, fer.
darkChozo wrote: BIS_fnc_showNotification won't cause issues with the server but if you don't set it up correctly it might not work properly for clients. Triggers are local, so if the trigger would fire on all clients then everyone would get the message. In general though, unless it needs to be clientside it's best practice to keep things serverside, so it might make sense to have the trigger only work for the server and then BIS_fnc_MP out the notification.
So, something like this?

Code: Select all

[["TaskSucceeded",["","AAA Unit destroyed"]],"BIS_fnc_showNotification",false,true] call BIS_fnc_MP;
darkChozo wrote:It just get weird if you need more endings like that, like if you have 5 different objectives and want an ending for every combination of those objectives.
Yeah, I'll avoid that. Just need "Everything done", "Primary Only", "Yer all dead".
Aha! Thought something was up. The only reason I want to enable this is to be able to hear AI while clearing towns. I'll enable it, I suppose, but if everyone hates it then I'll disable it for v2.
fer wrote: Ask yourself if you really, really want on-screen hints going-off throughout the countdown - or whether a simple presence trigger and chained countdown trigger with hints will do the trick.
Yeah, may just keep it simple, actually. Already getting fatigued lol.
fer wrote: For multi-objective missions I usually do the following:
  1. Set a variable called objCounter in init.sqf - usually to the value of 0
  2. For each objective, I have a trigger / script that - on completion - increments objCounter by 1
  3. A separate trigger waits for objCounter to reach a certain number (usually the total # of objectives) and then invoked an F3 ending
You could use this approach, but add an extra trigger that waits for the counter to reach a smaller number, check the number of players, and then invokes a different ending if appropriate (or does nothing). You might even experiment with different integers - like larger ones for major objectives etc.
Yeah, I think this is what I'll do. I guess I could add multiple counters, like one for primaryObj, another for secondaryObj. Add them together to check for all objectives.

The offending AI behaviour:
themiddlevoid.wordpress.com

darkChozo
Host
Posts: 207
Joined: Fri Aug 14, 2015 12:48 pm

Re: A few questions

Post by darkChozo »

SuicideKing wrote: So, something like this?

Code: Select all

[["TaskSucceeded",["","AAA Unit destroyed"]],"BIS_fnc_showNotification",false,true] call BIS_fnc_MP;
Looks right. Just make sure this only fires on the server, otherwise that's how you get 30 notifications when you complete an objective. For a trigger, this probably means a condition like isServer && this.

Whoops, not quite right actually, the boolean parameters are both wrong. You want BIS_fnc_showNotification to execute on all machines so the first one should be false (you have to make it so BIS_fnc_MP only runs on the server manually by checking isServer). And there's no reason this needs to be persistent; that would just make it so the message plays immediately for anyone who joins the server after the objective is completed.

User avatar
SuicideKing
Host
Posts: 312
Joined: Wed Nov 27, 2013 1:29 pm
Location: India/US West
Contact:

Re: A few questions

Post by SuicideKing »

darkChozo wrote:
SuicideKing wrote: So, something like this?

Code: Select all

[["TaskSucceeded",["","AAA Unit destroyed"]],"BIS_fnc_showNotification",false,true] call BIS_fnc_MP;
Looks right. Just make sure this only fires on the server, otherwise that's how you get 30 notifications when you complete an objective. For a trigger, this probably means a condition like isServer && this.

Whoops, not quite right actually, the boolean parameters are both wrong. You want BIS_fnc_showNotification to execute on all machines so the first one should be false (you have to make it so BIS_fnc_MP only runs on the server manually by checking isServer). And there's no reason this needs to be persistent; that would just make it so the message plays immediately for anyone who joins the server after the objective is completed.
But...oh, I see, I left out 'target'. I meant to specify false for isPersistent and true for isCall. So...

Code: Select all

[["TaskSucceeded",["","AAA Unit destroyed"]],"BIS_fnc_showNotification",false,false,true] call BIS_fnc_MP;
?

Do I still need

Code: Select all

isServer && this
in triggers?
themiddlevoid.wordpress.com

Post Reply