Jump to content
Persian MO

[Release] Injured Ai script/Mod

Recommended Posts

Hows the next version going? I'm itching to test out what comes next :)

  • Like 1

Share this post


Link to post
Share on other sites

Hey Persian MO is there a way to add the carry and load functions to wounded units. I have been looking for a good AI friendly revive scripts that has these functions.

Share this post


Link to post
Share on other sites

Persian MO if you are going to continue to update this I have a few suggestions/requests. Most revive scripts have been lacking functionality and quite frankly I'm surprised bohemia has not focused on a better wounded/revive system.

 

1. AI's units to revive AI units and players.

2. Drag  carry and load wounded units.

3. The ability to set the script for All units in the mission or the ability to select a side only west units or playable units ...

 

I have seen all these function work in different scripts from ARMA2 to ARMA3 but not all of them in one script. If you could add this you would have a unique simple revive script that would have all the functionally that a mission designer would needed especially people that play with a lot of AI. This has been a work in progress for me. I have attempted to merge multiple revive scripts together to add all of the functionally with no luck due to my lack of understanding of writing scripting. What do you think.

Share this post


Link to post
Share on other sites

Sorry for not responding sooner.

 

I've been playing around with the script on my dedicated server and basically zeus spawned units don't drag or revive, but they do get injured, drop flares and play sounds. Units that are placed as part of the mission (like in your example mission) do run the script fully. I've tested this multiple times.

 

However, by making the changes I mentioned above everything works for me.... changing (!isServer) to (isServer) and adding _dummy hideObject true;

 

I also run MCC on my server and if you spawn units using MCC and assign them to GAIA the script stops working on those units. I'm assuming that this is because MCC has its own scripting that overrides anything done by this script. I don't think there is much you can do about this, but I thought I would mention it. Ultimately it would be great to see this script combined with others to create more dynamic AI behaviours - like laying down suppressing fire, not laying on the ground so much, seeking cover and using buildings. MCC does much of this but there are plenty of other mods that look at this kind of stuff as well.

 

Also from observing the AI in zeus it seems that:

 

1) Revived units seem to be placed into separate groups - all on their own. This makes them act separately from the squad they were originally part of and often they do not move much beyond the spot where they were revived. Perhaps they could auto join the same group as the unit that revived them?

 

2) Often even after the fighting is done and injured units are on the ground and no one moves to drag and revive them - even when they are under no fire. Perhaps the priority of reviving units should be increased so that if a squad has a unit injured it sends another unit to drag and revive - but no more than one dragger in a squad at a time. 

 

Anyway, just some thoughts. This is a great script, so keep up the good work! :)

1- I 'll try to not separate from groups for injured ais next update

2- the last update had something like it.if dragger got problem, somebody else will try to help

 

Hows the next version going? I'm itching to test out what comes next :)

I'm working on Ais reacting to grenade so they run away when seeing grenade near them.Still WIP.

 

Persian MO if you are going to continue to update this I have a few suggestions/requests. Most revive scripts have been lacking functionality and quite frankly I'm surprised bohemia has not focused on a better wounded/revive system.

 

1. AI's units to revive AI units and players.

2. Drag  carry and load wounded units.

3. The ability to set the script for All units in the mission or the ability to select a side only west units or playable units ...

 

I have seen all these function work in different scripts from ARMA2 to ARMA3 but not all of them in one script. If you could add this you would have a unique simple revive script that would have all the functionally that a mission designer would needed especially people that play with a lot of AI. This has been a work in progress for me. I have attempted to merge multiple revive scripts together to add all of the functionally with no luck due to my lack of understanding of writing scripting. What do you think.

Thanks for suggestions. i always can use some of them .

1-this script working for ais , no plan for the player , there is no room to make it for playable units.script most focus on some effect like dragging , yelling, injured act and etc effects for ais to make it more realistic , the battlefield .

2- drag is already in there by ais, i tried some carry animation but the result wasn't that good which I put it in the script, perhaps later if I got a better way to do it.about the load in the vehicle , let see if its possible by ais 

3- I 'll try to add something like it , sure.

 

if you looking for a well revive script with some good options, you may want to try this, if you not seeing this before.

https://forums.bistudio.com/topic/161291-a3-wounding-system-ais-by-psycho/?hl=revive%20script

Share this post


Link to post
Share on other sites

Hey thank you for the getting back to me but A3 Wounding System does not have the load function (:  or works for enemy AI units only the player side AI. Most of my mission are played with a lot of AI and use a modified revive that the player and his AI will only go unconscious and will never die. I would love to have the load function so the AI or player would needed to be loaded up and transferred to a medical area to fully heal. Your script is very nice to added to the enemy AI but would be great to allow you to set what side of AI you want to use the script.

 

Why can't you get the AI to revive the playable units as well?

Share this post


Link to post
Share on other sites

Hey thank you for the getting back to me but A3 Wounding System does not have the load function (:  or works for enemy AI units only the player side AI. Most of my mission are played with a lot of AI and use a modified revive that the player and his AI will only go unconscious and will never die. I would love to have the load function so the AI or player would needed to be loaded up and transferred to a medical area to fully heal. Your script is very nice to added to the enemy AI but would be great to allow you to set what side of AI you want to use the script.

 

Why can't you get the AI to revive the playable units as well?

ais drag player maybe i can do it but need to more test and try . about player can drag ai its not possible with this script yet.

anyway about the ai drag and load injured ai or player in vehicle and transfer to medical area, sounds good idea.

Share this post


Link to post
Share on other sites

Thank you so much for this!

It's a feature that I think Arma has been missing for a long time now. The way you made the animations interpolate makes it look really smooth.

This is basically essential in my missions now. I can't wait until it has more bugs ironed out.

 

How would I go about specifying Blufor/Opfor specific sounds without hurting performance?

Share this post


Link to post
Share on other sites

here is a sample for changing sound for sides, i think it work, not tested yet.

killer sound 

killer.sqf

if !(isServer) exitWith {}; 
_victim = _this select 0;
_killer = _this select 1; 

_victim removeAllMPEventHandlers "MPKilled";

/////////////////////////////////sound for west units
if (side _killer == west) then {
// add finisher sounds here
_sound = [
"kill1", "kill2"
] call BIS_fnc_selectRandom;


//_killer say3D _sound;
[[_killer,_sound] remoteExec ["say3D"]]; 

} else {
////////////////////////////sound for east units
(side _killer == east) then {
// add finisher sounds here
_sound = [
"kill3", "kill4"
] call BIS_fnc_selectRandom;


//_killer say3D _sound;
[[_killer,_sound] remoteExec ["say3D"]]; 

} else {
////////////////////////////////////sound for independent/civilians units
// add finisher sounds here	
_sound = [
"kill5"
] call BIS_fnc_selectRandom;


//_killer say3D _sound;
[[_killer,_sound] remoteExec ["say3D"]]; 
	
}:

};

i ll add this in next update to help users to separate sounds for each sides

Share this post


Link to post
Share on other sites

Hi persian

 

iv encountered an issue with the script...

 

AI in players group who goes down wounded,and AI who heals him,will disband from the group and form their own groups,leaving the player with no control over them.

Share this post


Link to post
Share on other sites

 script disband injured and draggier ai to follow script lines, if ais don't disband from the group, they will not going to do the job.

I have to find a way for ais return back to the group when the job was done.

Share this post


Link to post
Share on other sites

Oh i understand.

 

Ok man no worries,im using a trigger to call them back for the moment.

Share this post


Link to post
Share on other sites

Persian would it be possible to add ambient AI chatter even when combat is not happening?

 

Your script really exposed how lifeless and robotic AI can be without "personality" by simply speaking.

 

How about adding random chatter back and fort between AI?

Share this post


Link to post
Share on other sites

This script passed me by,thanks for pointing my attention to it.

 

If i heard the video correctly,the AI was speaking vanilla radio voices? Its still great in what it does,custom banter/chatter would be great.

 

I can think back to the game "Endwar" and the AI groups/units in that game had some funny banter back and forth that would be hilarious in this game

Share this post


Link to post
Share on other sites

Getting an error occasionally, not sure if it's a mod conflicting. (ASR_AI, ALiVE etc) "Error undefined variable in expression _dragger"

The unit looks dead at this point, if I remember correctly.

Share this post


Link to post
Share on other sites

Hey Persian, there may be some in-game voice files you can use like "Target down" you can mix in with the custom ones.  They aren't as "colorful", but the advantage is you have something to say in every supported language.  I used this kick-ass utility from Larrow to find in-game voice files.  Once you see the file path pattern to the voice files, you can then sub-string for the languages to say "Target Down" (for example) in FRE, ENG, GRE, PER, CHI etc.  Example:  Here's all the voice file commands for "Attack" in all Arma 3 languages:

 

 "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"
 "A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"
 "A3\Dubbing_Radio_F\data\GRE\Male01GRE\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"
 "A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"   <<-- PROTOCOL IS ENG,NOT ENGB
 "A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F
 "A3\Dubbing_Radio_F_EXP\data\CHI\Male01CHI\RadioProtocolCHI\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F
 "A3\Dubbing_Radio_F_EXP\data\ENGFRE\Male01ENGFRE\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"  <<-- PROTOCOL IS ENG NOT ENGFRE, EXP is on Dubbing_Radio_F

 

Here's my script for issuing voice commands in any language.  My script cracked the code on the path patterns above, so I just have to pass in "Attack_1" sound file name and Languge (ENG, PER, FRE, etc.), and "attack" is said in whichever language.

 

I mixed in vanilla commands with my custom commands.  For those commands that had no in-game vanilla equivalent, I recorded my own by using google translate to hear the word spoeken.  Example, I recorded "Detain" in French and Chinese by repeating what google translate said.  I cheated for Persian because Google translate doesn't support that, so in that case I took the "Team America" approach:  "Dirka dirka" (no offence to the Farsi speakers out there...).

 

No problem if this isn't worth the trouble to you...just an idea.

//JBOY_HandlerSpeak.sqf
if (!isServer)  exitwith {};
params["_dog","_handler","_command"];
//if (!alive _handler or !alive _dog) exitwith {};
//if (_handler ==objNull)  exitwith {};
_language = (_dog getVariable "vHandlerLanguageAbbrev");
//if (_language=="none") exitwith {};

_fnc_assembleSoundPath = {
    params["_speaker", "_language", "_behaviour,","_soundFileName","_lastSubDir"];
    _s = "";
    switch _language do
    {     
        case "ENG":
        {
            _s = "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
        };
        case "GRE":
        {
            _s = "A3\Dubbing_Radio_F\data\GRE\Male01GRE\RadioProtocolGRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
        case "ENGB":
        {
            _s = "A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
        case "PER":
        {
            _s = "A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
        case "FRE":
        {
            _s = "A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
        case "ENGFRE":
        {
            _s = "A3\Dubbing_Radio_F_EXP\data\ENGFRE\Male01ENGFRE\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
        case "CHI":
        {
            _s = "A3\Dubbing_Radio_F_EXP\data\CHI\Male01CHI\RadioProtocolCHI\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
        case "PERVR":
        {
            _s = "A3\Dubbing_Radio_F\data\VR\Male01PERVR\RadioProtocolPER\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
        case "GREVR":
        {
            _s = "A3\Dubbing_Radio_F\data\VR\Male01GREVR\RadioProtocolGRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
        case "ENGVR":
        {
            _s = "A3\Dubbing_Radio_F\data\VR\Male01ENGVR\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";
         };
    };
    //diag_log _s;
    playSound3D [_s, _speaker];
};

_behaviour = "Normal";
switch (behaviour _handler) do
{     
    case "COMBAT": { _behaviour = "Combat";
                     if (_command == "Guard") then //"WatchThatTarget" only has voice files for normal and stealth, not combat.
                     { _behaviour = "Normal";} ;
                   };
    case "STEALTH":{ _behaviour = "Stealth";};
    default        { _behaviour = "Normal";};
};
switch _command do
{     
    case "heel":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerHeel","Boomer, Heel."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, _behaviour, "FormOnMe","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Heel.";
        };
    };
    case "sit":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerSit","Boomer, Sit."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, _behaviour, "StayLow","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Sit.";
        };        
    };
    case "stay":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerStay","Boomer, Stay."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, _behaviour, "Halt","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Stop.";
        };               
    };
     case "stop":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerStay","Boomer, Stay."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, "Combat", "Disengage","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Stop attacking!";
        };               
    };
    case "moveThere":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerMoveThere","Boomer, Move there."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, _behaviour, "moveUp_1","070_MoveDirectionRelative1"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Move there.";
        };               
    };
    case "attack":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerAttack","Boomer, Attack!"] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, "Combat", "Attack_1","015_Targeting"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Attack!";
        };               
    };
    case "fetch":
    {
       switch _language do
        {     
            case "boomer":
            {
                 dummy= [_handler, 0, "boomerFetch",""] execVM "JBOY_Dog\delaySay.sqf";
            };
            case "ENG":    { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "GRE":    { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGB":   { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "PER":    { dummy= [_handler, 0, ("Per"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "FRE":    { dummy= [_handler, 0, ("Fre"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGFRE": { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "CHI":    { dummy= [_handler, 0, ("Chi"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "PERVR":  { dummy= [_handler, 0, ("Per"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "GREVR":  { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGVR":  { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };
        };
    };
    case "detain":
    {
/*
        if (_language=="boomer") then {
            _phrases = [ "boomerDetain", "boomerGuard2", "boomerGuardThisPrick", "boomerGuardThisJoker"] call BIS_fnc_arrayShuffle;
            dummy= [_handler, 0, (_phrases select 0),"Boomer, guard."] execVM "JBOY_Dog\delaySay.sqf";
            //dummy= [_handler, 0, "boomerGuard","Boomer, Guard."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, _behaviour, "WatchThatTarget","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
        };               
 */
        switch _language do
        {     
            case "boomer":
            {
                 _phrases = [ "boomerDetain", "boomerGuardThisPrick", "boomerGuardThisJoker"] call BIS_fnc_arrayShuffle;
                dummy= [_handler, 0, (_phrases select 0),"Boomer, Detain."] execVM "JBOY_Dog\delaySay.sqf";
            };
            case "ENG":    { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "GRE":    { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGB":   { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "PER":    { dummy= [_handler, 0, ("Per"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "FRE":    { dummy= [_handler, 0, ("Fre"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGFRE": { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "CHI":    { dummy= [_handler, 0, ("Chi"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "PERVR":  { dummy= [_handler, 0, ("Per"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "GREVR":  { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGVR":  { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };
        };
    };
     case "dropit":
    {
        switch _language do
        {     
            case "boomer":
            {
                 dummy= [_handler, 0, "boomerDropIt",""] execVM "JBOY_Dog\delaySay.sqf";
            };
            case "ENG":    { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "GRE":    { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGB":   { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "PER":    { dummy= [_handler, 0, ("Per"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "FRE":    { dummy= [_handler, 0, ("Fre"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGFRE": { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "CHI":    { dummy= [_handler, 0, ("Chi"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "PERVR":  { dummy= [_handler, 0, ("Per"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "GREVR":  { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
            case "ENGVR":  { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };
        };
            _handler sidechat "Drop it.";
    };
    case "atEase":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerAtEase","Boomer, At ease."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, _behaviour,( ["Safe_2", "Relax"] call BIS_fnc_selectRandom),"100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "At ease.";
       };               
    };
    case "scout":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerScout","Boomer, Scout."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, _behaviour,"Dismount_1","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Scout.";
        };               
    };
    // TODO: Need to add boomer voice files for these ones!
    case "getin":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerGetin","Boomer, Get in."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, "Normal","BoardThatVehicle","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Get in.";
        };               
    };
    case "getout":
    {
        if (_language=="boomer") then {
            dummy= [_handler, 0, "boomerGetout","Boomer, Get out."] execVM "JBOY_Dog\delaySay.sqf";
        } else {
            [_handler, _language, "Normal", "Dismount_1","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name
            _handler sidechat "Get out.";
        };               
    };
 };
 
/*
        {     case (_speaker find 'ENGFRE' > 0):{_language = 'ENGFRE'};
            case (_speaker find 'ENGB' > 0):  {_language = 'ENGB'};
            case (_speaker find 'ENGVR' > 0): {_language = 'ENGVR'};
            case (_speaker find 'ENG' > 0):   {_language = 'ENG'};
            case (_speaker find 'GREVR' > 0): {_language = 'GREVR'};
            case (_speaker find 'GRE' > 0):   {_language = 'GRE'};
            case (_speaker find 'PERVR' > 0): {_language = 'PERVR'};
            case (_speaker find 'PER' > 0):   {_language = 'PER'};
            case (_speaker find 'FRE' > 0):   {_language = 'FRE'};
            case (_speaker find 'CHI' > 0):   {_language = 'CHI'};
            case (_speaker find 'ENG' > 0):   {_language = 'ENG'};
            default                           {_language = 'boomer'};

Here's the different variations per Language for saying sound snipper "Attack_1.ogg":
 
 "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"
 "A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"
 "A3\Dubbing_Radio_F\data\GRE\Male01GRE\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"
 "A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"   <<-- PROTOCOL IS ENG,NOT ENGB
        
 "A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F
 "A3\Dubbing_Radio_F_EXP\data\CHI\Male01CHI\RadioProtocolCHI\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F
 "A3\Dubbing_Radio_F_EXP\data\ENGFRE\Male01ENGFRE\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"  <<-- PROTOCOL IS ENG NOT ENGFRE, EXP is on Dubbing_Radio_F

 "A3\Dubbing_Radio_F\data\VR\Male01PERVR\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"  <-- fuck the VR dudes, make them normal their own language
 "A3\Dubbing_Radio_F\data\VR\Male01GREVR\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"
 "A3\Dubbing_Radio_F\data\VR\Male01ENGVR\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg.ogg"
        
Heel/Form On Me:  "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\FormOnMe.ogg"
Sit/Stay Low :  "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\StayLow.ogg"
Stay/Halt:Halt:    "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Halt.ogg"
MoveThere / Move Up: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\070_MoveDirectionRelative1\moveUp_2.ogg"
                     "A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\Normal\070_MoveDirectionRelative1\moveUp_2.ogg"
Attack:   "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"
Guard/WatchThatTarget:  "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\WatchThatTarget.ogg"
Stop:             "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Stop.ogg"
At Ease:          "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Safe_2.ogg"
AtEase/Relax:            "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Relax.ogg"

Dismount:         "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Dismount_1.ogg"
Board Vehicle:    "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\BoardThatVehicle.ogg"
Engage:    "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Engage_1.ogg"
Disengage:        "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Disengage.ogg"

Advance/Scout?:   "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Advance.ogg"
Engage:    "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Engage_1.ogg"
"A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Engage_1.ogg" <<-- PROTOCOL IS ENG,NOT ENGB
"A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\Normal\015_Targeting\Engage_1.ogg"

Cease Fire: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\CeaseFire_1.ogg"
Danger: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Danger.ogg"
Silence: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Silence.ogg"
Stealth: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\CommStealth.ogg"
Taking Command: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\TakingCommand.ogg"

Wait:  "a3\dubbing_f_beta\firing_drills\Timing\firing_drills_timing_ROF_2.ogg"
Stay Put:  "a3\dubbing_f_beta\firing_drills\Timing\firing_drills_timing_ROF_3.ogg"
Go: "a3\dubbing_f_beta\firing_drills\Timing\firing_drills_timing_ROF_4.ogg"

Snake: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\020_Names\Snake.ogg"
Loop of radio static:  "A3\Dubbing_Radio_F\Sfx\radionoise1.ogg"
Mic in:  "A3\Dubbing_Radio_F\Sfx\in2a.ogg"
Mic out: "A3\Dubbing_Radio_F\Sfx\out2c.ogg"
wounded:
"A3\Missions_F_EPA\data\sounds\WoundedGuyA_01.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyA_02.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyA_03.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyA_04.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyA_05.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyA_06.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyA_07.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyA_08.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_01.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyB_02.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyB_03.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyB_04.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyB_05.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyB_06.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyB_07.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyB_08.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyC_01.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyC_02.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyC_03.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyC_04.wss"
"A3\Missions_F_EPA\data\sounds\WoundedGuyC_05.wss"

"A3\Missions_F_EPA\data\sounds\crowd2.wss"
"A3\Missions_F_EPA\data\sounds\combat_deafness.wss"

n= [] spawn {
sleep 1;
{playSound3D [_x, player]; hint _x;}
foreach [
"A3\Missions_F_EPA\data\sounds\falls_into_water.wss"
];  
};
*/

Share this post


Link to post
Share on other sites

This script passed me by,thanks for pointing my attention to it.

 

If i heard the video correctly,the AI was speaking vanilla radio voices? Its still great in what it does,custom banter/chatter would be great.

 

I can think back to the game "Endwar" and the AI groups/units in that game had some funny banter back and forth that would be hilarious in this game

@redarmy:  That script is super simple, it would be very easy for you to add in custom voice files to randomly say.

Share this post


Link to post
Share on other sites

Persian would it be possible to add ambient AI chatter even when combat is not happening?

 

Your script really exposed how lifeless and robotic AI can be without "personality" by simply speaking.

 

How about adding random chatter back and fort between AI?

I ll go for it later.also, i have some ideas about add animations while patrolling and talking

 

Getting an error occasionally, not sure if it's a mod conflicting. (ASR_AI, ALiVE etc) "Error undefined variable in expression _dragger"

The unit looks dead at this point, if I remember correctly.

This error means the script didn't find any units around injured guy.I didn't try script with asr and alive mods.

 

Hey Persian, there may be some in-game voice files you can use like "Target down" you can mix in with the custom ones.  They aren't as "colorful", but the advantage is you have something to say in every supported language.  I used this kick-ass utility from Larrow to find in-game voice files.  Once you see the file path pattern to the voice files, you can then sub-string for the languages to say "Target Down" (for example) in FRE, ENG, GRE, PER, CHI etc.  Example:  Here's all the voice file commands for "Attack" in all Arma 3 languages:

 

 "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\GRE\Male01GRE\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"   <<-- PROTOCOL IS ENG,NOT ENGB

 "A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F

 "A3\Dubbing_Radio_F_EXP\data\CHI\Male01CHI\RadioProtocolCHI\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F

 "A3\Dubbing_Radio_F_EXP\data\ENGFRE\Male01ENGFRE\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"  <<-- PROTOCOL IS ENG NOT ENGFRE, EXP is on Dubbing_Radio_F

 

Here's my script for issuing voice commands in any language.  My script cracked the code on the path patterns above, so I just have to pass in "Attack_1" sound file name and Languge (ENG, PER, FRE, etc.), and "attack" is said in whichever language.

 

I mixed in vanilla commands with my custom commands.  For those commands that had no in-game vanilla equivalent, I recorded my own by using google translate to hear the word spoeken.  Example, I recorded "Detain" in French and Chinese by repeating what google translate said.  I cheated for Persian because Google translate doesn't support that, so in that case I took the "Team America" approach:  "Dirka dirka" (no offence to the Farsi speakers out there...).

 

No problem if this isn't worth the trouble to you...just an idea.

//JBOY_HandlerSpeak.sqf

if (!isServer)  exitwith {};

params["_dog","_handler","_command"];

//if (!alive _handler or !alive _dog) exitwith {};

//if (_handler ==objNull)  exitwith {};

_language = (_dog getVariable "vHandlerLanguageAbbrev");

//if (_language=="none") exitwith {};

_fnc_assembleSoundPath = {

    params["_speaker", "_language", "_behaviour,","_soundFileName","_lastSubDir"];

    _s = "";

    switch _language do

    {     

        case "ENG":

        {

            _s = "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

        };

        case "GRE":

        {

            _s = "A3\Dubbing_Radio_F\data\GRE\Male01GRE\RadioProtocolGRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

        case "ENGB":

        {

            _s = "A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

        case "PER":

        {

            _s = "A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

        case "FRE":

        {

            _s = "A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

        case "ENGFRE":

        {

            _s = "A3\Dubbing_Radio_F_EXP\data\ENGFRE\Male01ENGFRE\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

        case "CHI":

        {

            _s = "A3\Dubbing_Radio_F_EXP\data\CHI\Male01CHI\RadioProtocolCHI\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

        case "PERVR":

        {

            _s = "A3\Dubbing_Radio_F\data\VR\Male01PERVR\RadioProtocolPER\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

        case "GREVR":

        {

            _s = "A3\Dubbing_Radio_F\data\VR\Male01GREVR\RadioProtocolGRE\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

        case "ENGVR":

        {

            _s = "A3\Dubbing_Radio_F\data\VR\Male01ENGVR\RadioProtocolENG\"+_behaviour+"\"+_lastSubDir+"\" + _soundFileName + ".ogg";

         };

    };

    //diag_log _s;

    playSound3D [_s, _speaker];

};

_behaviour = "Normal";

switch (behaviour _handler) do

{     

    case "COMBAT": { _behaviour = "Combat";

                     if (_command == "Guard") then //"WatchThatTarget" only has voice files for normal and stealth, not combat.

                     { _behaviour = "Normal";} ;

                   };

    case "STEALTH":{ _behaviour = "Stealth";};

    default        { _behaviour = "Normal";};

};

switch _command do

{     

    case "heel":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerHeel","Boomer, Heel."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, _behaviour, "FormOnMe","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Heel.";

        };

    };

    case "sit":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerSit","Boomer, Sit."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, _behaviour, "StayLow","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Sit.";

        };        

    };

    case "stay":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerStay","Boomer, Stay."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, _behaviour, "Halt","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Stop.";

        };               

    };

     case "stop":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerStay","Boomer, Stay."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, "Combat", "Disengage","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Stop attacking!";

        };               

    };

    case "moveThere":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerMoveThere","Boomer, Move there."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, _behaviour, "moveUp_1","070_MoveDirectionRelative1"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Move there.";

        };               

    };

    case "attack":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerAttack","Boomer, Attack!"] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, "Combat", "Attack_1","015_Targeting"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Attack!";

        };               

    };

    case "fetch":

    {

       switch _language do

        {     

            case "boomer":

            {

                 dummy= [_handler, 0, "boomerFetch",""] execVM "JBOY_Dog\delaySay.sqf";

            };

            case "ENG":    { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "GRE":    { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGB":   { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "PER":    { dummy= [_handler, 0, ("Per"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "FRE":    { dummy= [_handler, 0, ("Fre"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGFRE": { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "CHI":    { dummy= [_handler, 0, ("Chi"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "PERVR":  { dummy= [_handler, 0, ("Per"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "GREVR":  { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGVR":  { dummy= [_handler, 0, ("Eng"+"Fetch"),"Fetch!"] execVM "JBOY_Dog\delaySay.sqf"; };

        };

    };

    case "detain":

    {

/*

        if (_language=="boomer") then {

            _phrases = [ "boomerDetain", "boomerGuard2", "boomerGuardThisPrick", "boomerGuardThisJoker"] call BIS_fnc_arrayShuffle;

            dummy= [_handler, 0, (_phrases select 0),"Boomer, guard."] execVM "JBOY_Dog\delaySay.sqf";

            //dummy= [_handler, 0, "boomerGuard","Boomer, Guard."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, _behaviour, "WatchThatTarget","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

        };               

 */

        switch _language do

        {     

            case "boomer":

            {

                 _phrases = [ "boomerDetain", "boomerGuardThisPrick", "boomerGuardThisJoker"] call BIS_fnc_arrayShuffle;

                dummy= [_handler, 0, (_phrases select 0),"Boomer, Detain."] execVM "JBOY_Dog\delaySay.sqf";

            };

            case "ENG":    { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "GRE":    { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGB":   { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "PER":    { dummy= [_handler, 0, ("Per"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "FRE":    { dummy= [_handler, 0, ("Fre"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGFRE": { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "CHI":    { dummy= [_handler, 0, ("Chi"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "PERVR":  { dummy= [_handler, 0, ("Per"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "GREVR":  { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGVR":  { dummy= [_handler, 0, ("Eng"+"Detain"),"Detain!"] execVM "JBOY_Dog\delaySay.sqf"; };

        };

    };

     case "dropit":

    {

        switch _language do

        {     

            case "boomer":

            {

                 dummy= [_handler, 0, "boomerDropIt",""] execVM "JBOY_Dog\delaySay.sqf";

            };

            case "ENG":    { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "GRE":    { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGB":   { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "PER":    { dummy= [_handler, 0, ("Per"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "FRE":    { dummy= [_handler, 0, ("Fre"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGFRE": { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "CHI":    { dummy= [_handler, 0, ("Chi"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "PERVR":  { dummy= [_handler, 0, ("Per"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "GREVR":  { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

            case "ENGVR":  { dummy= [_handler, 0, ("Eng"+"DropIt"),"Drop it."] execVM "JBOY_Dog\delaySay.sqf"; };

        };

            _handler sidechat "Drop it.";

    };

    case "atEase":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerAtEase","Boomer, At ease."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, _behaviour,( ["Safe_2", "Relax"] call BIS_fnc_selectRandom),"100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "At ease.";

       };               

    };

    case "scout":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerScout","Boomer, Scout."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, _behaviour,"Dismount_1","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Scout.";

        };               

    };

    // TODO: Need to add boomer voice files for these ones!

    case "getin":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerGetin","Boomer, Get in."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, "Normal","BoardThatVehicle","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Get in.";

        };               

    };

    case "getout":

    {

        if (_language=="boomer") then {

            dummy= [_handler, 0, "boomerGetout","Boomer, Get out."] execVM "JBOY_Dog\delaySay.sqf";

        } else {

            [_handler, _language, "Normal", "Dismount_1","100_Commands"] call _fnc_assembleSoundPath;  // 3rd parameter is internal sound file name

            _handler sidechat "Get out.";

        };               

    };

 };

 

/*

        {     case (_speaker find 'ENGFRE' > 0):{_language = 'ENGFRE'};

            case (_speaker find 'ENGB' > 0):  {_language = 'ENGB'};

            case (_speaker find 'ENGVR' > 0): {_language = 'ENGVR'};

            case (_speaker find 'ENG' > 0):   {_language = 'ENG'};

            case (_speaker find 'GREVR' > 0): {_language = 'GREVR'};

            case (_speaker find 'GRE' > 0):   {_language = 'GRE'};

            case (_speaker find 'PERVR' > 0): {_language = 'PERVR'};

            case (_speaker find 'PER' > 0):   {_language = 'PER'};

            case (_speaker find 'FRE' > 0):   {_language = 'FRE'};

            case (_speaker find 'CHI' > 0):   {_language = 'CHI'};

            case (_speaker find 'ENG' > 0):   {_language = 'ENG'};

            default                           {_language = 'boomer'};

Here's the different variations per Language for saying sound snipper "Attack_1.ogg":

 

 "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\GRE\Male01GRE\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"   <<-- PROTOCOL IS ENG,NOT ENGB

        

 "A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F

 "A3\Dubbing_Radio_F_EXP\data\CHI\Male01CHI\RadioProtocolCHI\Normal\015_Targeting\Attack_1.ogg" <<-- _EXP is on Dubbing_Radio_F

 "A3\Dubbing_Radio_F_EXP\data\ENGFRE\Male01ENGFRE\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"  <<-- PROTOCOL IS ENG NOT ENGFRE, EXP is on Dubbing_Radio_F

 "A3\Dubbing_Radio_F\data\VR\Male01PERVR\RadioProtocolPER\Normal\015_Targeting\Attack_1.ogg"  <-- fuck the VR dudes, make them normal their own language

 "A3\Dubbing_Radio_F\data\VR\Male01GREVR\RadioProtocolGRE\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\VR\Male01ENGVR\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"

 "A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg.ogg"

        

Heel/Form On Me:  "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\FormOnMe.ogg"

Sit/Stay Low :  "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\StayLow.ogg"

Stay/Halt:Halt:    "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Halt.ogg"

MoveThere / Move Up: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\070_MoveDirectionRelative1\moveUp_2.ogg"

                     "A3\Dubbing_Radio_F_EXP\data\FRE\Male01FRE\RadioProtocolFRE\Normal\070_MoveDirectionRelative1\moveUp_2.ogg"

Attack:   "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Attack_1.ogg"

Guard/WatchThatTarget:  "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\WatchThatTarget.ogg"

Stop:             "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Stop.ogg"

At Ease:          "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Safe_2.ogg"

AtEase/Relax:            "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Relax.ogg"

Dismount:         "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Dismount_1.ogg"

Board Vehicle:    "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\BoardThatVehicle.ogg"

Engage:    "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Engage_1.ogg"

Disengage:        "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Disengage.ogg"

Advance/Scout?:   "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Advance.ogg"

Engage:    "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\015_Targeting\Engage_1.ogg"

"A3\Dubbing_Radio_F\data\ENGB\Male01ENGB\RadioProtocolENG\Normal\015_Targeting\Engage_1.ogg" <<-- PROTOCOL IS ENG,NOT ENGB

"A3\Dubbing_Radio_F\data\PER\Male01PER\RadioProtocolPER\Normal\015_Targeting\Engage_1.ogg"

Cease Fire: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\CeaseFire_1.ogg"

Danger: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Danger.ogg"

Silence: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\Silence.ogg"

Stealth: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\100_Commands\CommStealth.ogg"

Taking Command: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\TakingCommand.ogg"

Wait:  "a3\dubbing_f_beta\firing_drills\Timing\firing_drills_timing_ROF_2.ogg"

Stay Put:  "a3\dubbing_f_beta\firing_drills\Timing\firing_drills_timing_ROF_3.ogg"

Go: "a3\dubbing_f_beta\firing_drills\Timing\firing_drills_timing_ROF_4.ogg"

Snake: "A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\020_Names\Snake.ogg"

Loop of radio static:  "A3\Dubbing_Radio_F\Sfx\radionoise1.ogg"

Mic in:  "A3\Dubbing_Radio_F\Sfx\in2a.ogg"

Mic out: "A3\Dubbing_Radio_F\Sfx\out2c.ogg"

wounded:

"A3\Missions_F_EPA\data\sounds\WoundedGuyA_01.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyA_02.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyA_03.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyA_04.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyA_05.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyA_06.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyA_07.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyA_08.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_01.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_02.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_03.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_04.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_05.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_06.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_07.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyB_08.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyC_01.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyC_02.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyC_03.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyC_04.wss"

"A3\Missions_F_EPA\data\sounds\WoundedGuyC_05.wss"

"A3\Missions_F_EPA\data\sounds\crowd2.wss"

"A3\Missions_F_EPA\data\sounds\combat_deafness.wss"

n= [] spawn {

sleep 1;

{playSound3D [_x, player]; hint _x;}

foreach [

"A3\Missions_F_EPA\data\sounds\falls_into_water.wss"

];  

};

*/

:) thanks .very useful pieces of stuff.

  • Like 1

Share this post


Link to post
Share on other sites

Persian i have the script init set to false for AI dragging,but they still drag an injured team mate.

Im using the latest version.I only want to use the script for the AI voices in one particular mission,but yeah,they still drag when set to false.

Share this post


Link to post
Share on other sites

I was using Larrow's utility to scrounge some more voice files, so while in there I bagged those that might be useful for your script.  Note the path pattern where you can substitute ENG with PER, FRE, FREENG, CHI, etc., to get the other languages.

"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\ScratchOne.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\TargetIsDown.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\TargetEliminated.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\HeIsDown.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\IVeGotHim.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\HostileDown.ogg"

 

Share this post


Link to post
Share on other sites

Just added this to my mission.  One of the coolest god damn AI scripts out there.  Love how it's a script and not a mod, too. (I can easily make mission auto-disable script if host enables ACE)

 

Great job again.  Looking forward to your update.

Share this post


Link to post
Share on other sites
9 hours ago, redarmy said:

Persian i have the script init set to false for AI dragging,but they still drag an injured team mate.

Im using the latest version.I only want to use the script for the AI voices in one particular mission,but yeah,they still drag when set to false.

 

 

That false or true is for 2 type drag, one of them looking for bush or rock around and another is looking for just more distance to drag.

If you want to disable drag part, have to change the unconscious chance to zero.

_null = [true, true, false, 0, 50] execvm "scripts\injured.sqf";

 

4 hours ago, johnnyboy said:

I was using Larrow's utility to scrounge some more voice files, so while in there I bagged those that might be useful for your script.  Note the path pattern where you can substitute ENG with PER, FRE, FREENG, CHI, etc., to get the other languages.


"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\ScratchOne.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\TargetIsDown.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\TargetEliminated.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\HeIsDown.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\IVeGotHim.ogg"
"A3\Dubbing_Radio_F\data\ENG\Male01ENG\RadioProtocolENG\Normal\110_Com_Announce\HostileDown.ogg"

 

 

Thank you.really good stuffs 

Share this post


Link to post
Share on other sites

I think you should consider changing BIS_fnc_selectRandom to selectRandom; I did some quick tests and selectRandom executes faster.

  • Like 1

Share this post


Link to post
Share on other sites

Persian is it possible to add a line to the script to exclude a side? 

for example,i would like to exclude Opfor from the scripts functions,but keep it working on the other sides.

 

EDIT

 

I would like to keep ai voices for opfor but remove the fall/hit/ dragging functions.Basically only leave them the ability to shout awesome lines:f:

Share this post


Link to post
Share on other sites
4 hours ago, redarmy said:

Persian is it possible to add a line to the script to exclude a side? 

for example,i would like to exclude Opfor from the scripts functions,but keep it working on the other sides.

 

EDIT

 

I would like to keep ai voices for opfor but remove the fall/hit/ dragging functions.Basically only leave them the ability to shout awesome lines:f:

 

open voice.sqf, line 08 change it to this:

if ((_x isKindOf "Man") && (!isplayer _x) && (side _x == EAST)) then {

injured.sqf, line 162:

if ((_x isKindOf "Man") && (!isplayer _x) && !(side _x == EAST)) then

 

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×