Jump to content
Rydygier

HETMAN - Artificial Leader

Recommended Posts

19 minutes ago, Rydygier said:

Primarily try:

 

 

BTW how you are using RydHQ_NoAttack? Is for sure proper group put inside?

 

My current setup. The all lower case class name was incorrect. The other arty requirement for it had me confused.

 

RydHQ_RHQAutoFill = false;

RHQs_Cars = ["I_Truck_02_MLRS_F"];

RydHQ_NoRecon = ["I_Truck_02_MLRS_F"];

RydHQ_NoCargo = ["I_Truck_02_MLRS_F"];

RydHQ_NoDef = ["I_Truck_02_MLRS_F"];

RydHQ_NoAttack = ["I_Truck_02_MLRS_F"];

RydHQ_NoFlank = ["I_Truck_02_MLRS_F"];

RydHQ_Add_OtherArty = [[["i_truck_02_mlrs_f"],["40Rnd_122mm_rockets","40Rnd_122mm_rockets","40Rnd_122mm_rockets","",""]]
];


Null = [] execVM "initializeHAL.sqf";

I turned of autofill just in case. I have tried it with it on as well.

Share this post


Link to post
Share on other sites

In the "No..." variables put group names, not class names (it's selection per group, not per class). But that's BTW. Arty works now? If still doesn't work, then I'm unable to determine the cause from given description. Perhaps see, if enabling autoFill will change anything. 

Share this post


Link to post
Share on other sites

Ryd, is there any chance you could look into fixing the issue with the capture limit variable (ie, to make the AI only send one group for capture missions? 

 

 

Also when activating the excluded units still give information to the commander feature, does that include civilian units? If I throw their names into the excluded bracket, would it work? Thanks.

Share this post


Link to post
Share on other sites

The chance there is, but no idea, when it would be possible. Our patience has to be unwavering...

 

Leaders commands groups per their side, but all defined (RydHQ_CivF) civilian factions are ignored. To make them passing through info about enemies, indeed throwing civilian groups into ExcludedG array, or units into Excluded array, may do the trick IIRC, but it's not tested. 

Share this post


Link to post
Share on other sites

Im using HAL Bigboss in a mission.

Im getting this script error, every minut or so:

Error in expression < select 0;

if ((_priors select _cause)>_priorCur) then
{
_dangerCause = _cause;>
14:54:24   Error position: <_priorCur) then
{
_dangerCause = _cause;>
14:54:24   Error Undefined variable in expression: _priorcur

It is opfor and blufor fighting over an opbjective.

Share this post


Link to post
Share on other sites

It's not HAL code IIRC. Try without other scripted/any mods and compare. 

Share this post


Link to post
Share on other sites
4 minutes ago, Rydygier said:

It's not HAL code IIRC. Try without other scripted/any mods and compare. 

Okay, im running it with bcombat and a couple of other mods, maybe thats reason.

But thank you for answering.

Share this post


Link to post
Share on other sites

Hey Rydygier,

 

I'm currently trying to build a story driven mission with RAVAGE on a map not yet indexed for ALiVE, so I was looking for alternative ways to create a warzone and came across your HETMAN system. 

 

I tried to set it up as script version (1.22 version, then also 1.23 WIP version) following the PDF manual , but so far no commander or unit activity is to be seen when playing the mission in editor.  Which files need to be in the mission root folder and what is the bare minimum code for init.sqf? Really just the

 

nul = [] execVM "RydHQInit.sqf"; 

??

 

Also, can I use markers as objectives or do they have to be triggers? 

 

Is the spelling for the leaders case sensitive? I had no success either with leaderHQ or with LeaderHQ, so maybe some other spelling mistake?

 

Do I have to define addon units in arrays? If so, how? Groups, individual units?

 

THX in advance for any advice

 

tourist

Share this post


Link to post
Share on other sites

Hey. If you're using scripted version, all the files from the "Script version" folder paste right into mission folder. From what you said I'm unable to identify the problem source. Causes may be many. A typo, bad naming (like using "" where shouldn't be any), using group name, where should be unit's name or vice versa, other mod interference etc. As for objectives, code assumes, these are objects (triggers are kind of the objects, markers aren't). Leader's name isn't case-sensitive. As for non-vanilla units, RHQ arrays by default are filled automatically (RydHQ_RHQAutoFill = true;), but it's not 100% reliable for exotic unit config, so instead/also you may try to add such units manually per each appriopriate RHQ array, by unit's classname, as it is shown in the manual. 

 

What you can do:

 

1. Compare your setup with included demo for differences;

2. Show me your init.sqf;

3. Show me RPT log from failed attempt;

4. Try to set scenario with analogous Hetman setup, but for vanilla only content (without any mods) and see, if it works, if not, give me such scenario in open folder form for testing. 

  • Like 1

Share this post


Link to post
Share on other sites

Hey Rydygier,

 

thx for the fast reply! :thumbsup:

 

Maybe I do really want to much at once...

 

One thing is that I may not have all the files in my mission root folder because there is no folder named "scripts" in the demo mission so I hoped that I have chosen all the minimum required files from the demo mission - I don't want to port War Stories completely.  So is all I need the folder called RYD_HAL and the file RydHQInit.sqf to be in the mission root and then call 

 

nul = [] execVM "RydHQInit.sqf"; 

at the very end of my mission's init.sqf?

 

Another thing is that I DO actually use a faction i made myself in ALiVE ORBAT tool, so maybe that isn't recognized. 

 

Here comes my init.sqf: 

 

Spoiler


skipTime (paramsArray select 0);
setTimeMultiplier (paramsArray select 1);

_debugMA = (paramsArray select 2);
_sitenames = (paramsArray select 3);

if (_debugMA == 0) then
{
    _debugMA = false;
} else
{
    _debugMA = true;
};


if (_sitenames == 0) then
{
    _sitenames = false;
} else
{
    _sitenames = true;
};

if (!IsMultiplayer or !IsDedicated) then
{
    babe_temperatur = 37;
    babe_tempFactor = 0.05;
    babe_coldDamage = 0.005;
    

    waituntil {!IsNull player};
    
    
    //[player] call babe_fnc_respawn;//
    
    0 = [] spawn
    {
        while {true} do
        {
            call babe_fnc_bodytemp;
            
            hintsilent format ["body temp: %1 °C", babe_temperatur];
    
            sleep 1;
        };
    };
};


if (isServer or !isMultiplayer) then
{

    _mapsize = 7600;
    _gss = 150;
    

    _mapdata = [_mapsize, _gss, _debugMA] call babe_fnc_mapanalyzer;

    _poses = _mapdata select 0;
    _posesWater = _mapdata select 1;
    _posesRoad = _mapdata select 2;
    _posesEmpty = _mapdata select 3;


    [30 min (count _posesEmpty), _posesEmpty, _sitenames] call babe_fnc_makesites;
};

[] spawn {
    while {true} do
    {
        {
            _x setSkill ['aimingspeed', 0.1];
            _x setSkill ['aimingaccuracy', 0.1];
            _x setSkill ['aimingshake', 0.1];
        } forEach allUnits;
        sleep 10;
    };
};

// dimension arrays used for sand/snow EFX
MKY_arSandEFX = [];
MKY_arSnowEFX = [];

// exec function that determines if this world gets snow or sand or nothing
// ** modify this function below as desired to include/exclude specific worlds/maps **
nul = [] execVM "MKY\fnc\MKY_fnc_getInfoWorld.sqf";
waitUntil {sleep 0.1; !(isNil "MKY_arInfoWorld")};

if (hasInterface) then {
    // Safety
    waitUntil {alive player};
};

// sand/snow particle EFX strengths: 0 - random, 1 - light, 2 - Moderate, 3 - heavy, 4 - disabled

// define the global sand and snow parameter arrays
//sand - [fog,overcast,use ppEfx,allow rain,force wind,vary fog,use wind audio,EFX strength]
MKY_arSandEFX = [0,"",true,false,true,true,true,1];
// snow - [[fog data],int Overcast,ppEfx,allow rain, vary fog, use audio]
MKY_arSnowEFX = [[0.23,0.047,15],0.8,true];
// init the EFX scripts
nul = [3] execVM "MKY\MKY_Sand_Snow_Init.sqf";

if (isServer) then {
    if ((MKY_arInfoWorld select 0) == "sand") exitWith {nul = [] execVM "MKY\sand\MKY_Sand_Server.sqf";};
    if ((MKY_arInfoWorld select 0) == "snow") exitWith {nul = _this execVM "MKY\snow\MKY_Snow_Server.sqf";};
};

waituntil {(player getvariable ["alive_sys_player_playerloaded",false])};
sleep 2;
{
    if !(isPlayer _x) then {
        if !(_x getVariable ["Persistent_Teleport", false]) then {
            _x setPos (getPos player);
            _x setVariable ["Persistent_Teleport", true, true];
            sleep .5;
        };
    };
} forEach units group player;

nul = [] execVM "RydHQInit.sqf";


                    
        
                
    


                    
        
                
   

 

A lot of code already there, I know I know :whistle: 

 

All of these code packets I use in various of my RAVAGE missions successfully. To be more detailed on what they do, in order of appearance from top to bottom: 

 

  1. Script suite for RAVAGE missions by Bad Benson offering randomly spawned crashsites, bandit camps and a temperature system
  2. MKY snow script
  3. ALiVE AI teammate persistence
  4. Last not least call for RYD_HAL

 

I'll post .rpt in next posting; big file...

Share this post


Link to post
Share on other sites
Quote

I may not have all the files in my mission root folder because there is no folder named "scripts" in the demo mission

 

Demo mission is supposed to be run with the addon version of HAL, thus no Hetman scripts inside mission folder. If however you run script version of the HAL (so without the HAL addon), all scripts from "Script version" have to be pasted into mission folder. I hope, you don't try to run simulatnously addon AND script versions, these are mutually exclusive. :) Addon contains same scripts, so replaces scripts inside mission folder and vice versa.  

 

Quote

So is all I need the folder called RYD_HAL and the file RydHQInit.sqf to be in the mission root and then call 

 

Yes. Plus stuff on the map of course (Leader, objectives, troops to be commanded). 

 

As for the init.sqf,  you may check, if it even reaches the last line, perhaps it is stuck or exits somewhere earlier. So either add line diag_log "checking"; just above last line, run the mission and see, if inside RPT there's "checking" log, either temporarily remove everything from the init.sqf but the last line or move the last line to the very first line and test. Easier to see, if HAL works, if you use RydHQDebug = true; 

 

Quote

I don't want to port War Stories completely.

 

Just to be clear, Hetman =/= HWS. HWS is complete scenario, that contain Hetman but also more stuff. 

 

Faction shouldn't be a problem, side is what matters - Leader has to be of the same/allied side, as commanded groups. That is west, east or independent. Civilian/POW side excluded. 

  • Like 1

Share this post


Link to post
Share on other sites

I had some success with moving the line to the top of init.sqf.  I even see the chat message ingame telling me HAL is starting. But RPT shows clearly that the RYD_HAL folder cannot be read - so there is some issue with the path descriptions in RydHQInit.sqf not matching my setup I guess. 

 

Here comes the RPT:

 

https://www.dropbox.com/s/dyk78ved2rphmt6/tourist_failed_hetman_start_modded_units_1_call_code_at_start.7z?dl=0 

 

If you search for RYD_HAL, you see what I mean.  Problem is I understand that you have already coded it into the RydHQInit.sqf  to look for either location, right?

 

if (isNil "RYD_Path") then {RYD_Path = "\RYD_HAL\"};

call compile preprocessfile (RYD_Path + "VarInit.sqf");
call compile preprocessfile (RYD_Path + "HAC_fnc.sqf");
call compile preprocessfile (RYD_Path + "HAC_fnc2.sqf");

 

 

But the RPT says it can't find the scripts which are located in the folder RYD_HAL which is placed in mission root folder:

 

Spoiler

19:11:48 Warning Message: Script \RYD_HAL\VarInit.sqf not found
19:11:48 Warning Message: Script \RYD_HAL\HAC_fnc.sqf not found
19:11:48 Warning Message: Script \RYD_HAL\HAC_fnc2.sqf not found
19:11:48 Warning Message: Script \RYD_HAL\Front.sqf not found
19:11:48 Error in expression <ull leaderHQ) then {[[(group leaderHQ)],A_HQSitRep] call RYD_Spawn;sleep 5};
if >
19:11:48   Error position: <A_HQSitRep] call RYD_Spawn;sleep 5};
if >
19:11:48   Error Undefined variable in expression: a_hqsitrep
19:11:48 File C:\Users\Felix Beßler\Documents\Arma 3 - Other Profiles\tourist\missions\RAVAGE_MAN_AGAINST_MACHINE_REDUX_HETMAN_0A.cartercity\RydHQInit.sqf, line 77
19:11:48 Error in expression <
publicVariable "RYD_MP_Sidechat";

if (RydHQ_RHQCheck) then {[] call RYD_RHQChe>
19:11:48   Error position: <RydHQ_RHQCheck) then {[] call RYD_RHQChe>
19:11:48   Error Undefined variable in expression: rydhq_rhqcheck
19:11:48 File C:\Users\Felix Beßler\Documents\Arma 3 - Other Profiles\tourist\missions\RAVAGE_MAN_AGAINST_MACHINE_REDUX_HETMAN_0A.cartercity\RydHQInit.sqf, line 24
19:11:51 No speaker given for
19:11:51 No speaker given for John Hughes
19:11:51 No face for Agent 0x57234180
19:11:53 Error in expression <l leaderHQB) then {[[(group leaderHQB)],B_HQSitRep] call RYD_Spawn;sleep 5};
if >
19:11:53   Error position: <B_HQSitRep] call RYD_Spawn;sleep 5};
if >
19:11:53   Error Undefined variable in expression: b_hqsitrep
19:11:53 File C:\Users\Felix Beßler\Documents\Arma 3 - Other Profiles\tourist\missions\RAVAGE_MAN_AGAINST_MACHINE_REDUX_HETMAN_0A.cartercity\RydHQInit.sqf, line 78
19:11:57 Road not found
19:11:58 Road not found
19:11:58 Error in expression <call RYD_Spawn;sleep 5};
if not (isNull leaderHQC) then {[[(group leaderHQC)],C_>
19:11:58   Error position: <leaderHQC) then {[[(group leaderHQC)],C_>
19:11:58   Error Undefined variable in expression: leaderhqc
19:11:58 File C:\Users\Felix Beßler\Documents\Arma 3 - Other Profiles\tourist\missions\RAVAGE_MAN_AGAINST_MACHINE_REDUX_HETMAN_0A.cartercity\RydHQInit.sqf, line 79

 

 

HETMAN

  What should I do to make the folder be found by RydHQInit.sqf? 

 

EDIT: defo a wrong path calling on my end somewhere.  When I delete the line from init.sqf and load my mission with @Hetman addon folder active, the leader of BLUFOR issues orders to me and other troops and they move towards the objectives I have placed. 

Edited by tourist
Made a quick verification test with addon version

Share this post


Link to post
Share on other sites

Not sure, why you have "\RYD_HAL\" in your RydHQInit.sqf, but that's the cause, why scripts can't be read, and reason of consequtive HAL's error logs in your RPT. First "\" is the reason, to be exact, that is proper, when scripts are run from inside of pbo/addon, but not from the mission folder. Solution is simple - remove this \, so instead you will get:

 

 RYD_Path = "RYD_HAL\"

 

that should work with scripts stored inside RYD_HAL folder located inside mission folder. 

Share this post


Link to post
Share on other sites

Id like to report a bug or an oversight. 

 

When using these settings:

nul = [] execVM "RydHQInit.sqf";

RydHQ_NObj = 5;

RydHQ_Order = "DEFEND";

RydHQ_DefFrontL = ["S"];

RydHQ_DefFront4 = ["S"];

RydHQ_DefendObjectives = 0;

 

The defenders are positioned correctly to the south, but they often decide to face the wrong way. They even face towards the objective they are defending and not the likely direction from where the enemy will come.

 

 

Share this post


Link to post
Share on other sites

Hey, 

Is there anyway to disable the AI from issuing combat ineffective commands? I am trying to make a push map with respawning AI. The problem I run into though, is that the AI only re spawn when the whole group is dead - HETMAN will often times send groups with one member back behind the lines. Is there anyway I can make HETMAN send these 1 man units into combat as normal teams/disable such rest commands?

Share this post


Link to post
Share on other sites

RydHQ_RDChance = 100 – chance (in percent) of choosing by each resting/withdrawn group as its destination area position marked by RydHQ_RestDecoy empty trigger;

 

That would be the closest solution possible without editing scripts. By placing an empty, ellipsoidal trigger named RydHQ(letter)_RestDecoy you may decide, where such groups will be sent to rest. Not exactly treating as normal group, but I see nothing better. 

 

manual again:

 

Additionally user has to his disposal three (per each Leader) special empty trigger objects, so called “decoys” for idle (except support), land support and resting missions (see 5.6.8, 5.6.10 and 5.6.11). Depending on their settings idle, support (when idle) or resting groups will choose marked by this triggers areas as mission destination areas for sure or with some probability. Simply on the map may be placed in chosen spot a trigger and named RydHQ_IdleDecoy, RydHQ_SupportDecoyorRydHQ_RestDecoy. Chance of choosing marked such way areas by each relevant group can be customized via init variables (RydHQ_IDChance, RydHQ_SDChanceandRydHQ_RDChancesee chapter“Config Variables”), that by default are equal to 100 (percent). Bigger of the trigger’s axis (recommended are same values for both axis, must greater than 0) will determine max placement distance in meters from the trigger’s position (square area). Shape (ellipse/rectangle) of the trigger will determine, if known nearby enemy presence should affect (forbid) choosing of marked area by relevant groups. Rectangle means “should affect”, ellipse – on the contrary.

Share this post


Link to post
Share on other sites
12 hours ago, Rydygier said:

RydHQ_RDChance = 100 – chance (in percent) of choosing by each resting/withdrawn group as its destination area position marked by RydHQ_RestDecoy empty trigger;

 

That would be the closest solution possible without editing scripts. By placing an empty, ellipsoidal trigger named RydHQ(letter)_RestDecoy you may decide, where such groups will be sent to rest. Not exactly treating as normal group, but I see nothing better. 

 

manual again:

 

Additionally user has to his disposal three (per each Leader) special empty trigger objects, so called “decoys” for idle (except support), land support and resting missions (see 5.6.8, 5.6.10 and 5.6.11). Depending on their settings idle, support (when idle) or resting groups will choose marked by this triggers areas as mission destination areas for sure or with some probability. Simply on the map may be placed in chosen spot a trigger and named RydHQ_IdleDecoy, RydHQ_SupportDecoyorRydHQ_RestDecoy. Chance of choosing marked such way areas by each relevant group can be customized via init variables (RydHQ_IDChance, RydHQ_SDChanceandRydHQ_RDChancesee chapter“Config Variables”), that by default are equal to 100 (percent). Bigger of the trigger’s axis (recommended are same values for both axis, must greater than 0) will determine max placement distance in meters from the trigger’s position (square area). Shape (ellipse/rectangle) of the trigger will determine, if known nearby enemy presence should affect (forbid) choosing of marked area by relevant groups. Rectangle means “should affect”, ellipse – on the contrary.


Oh wow, thanks Rydygier!

I was aware of the command but totally misused it in practice. 

Share this post


Link to post
Share on other sites

In current 1.23, I am noticing that the AI commander is sending 8-10 groups of infantry to recon/capture/attack an objective. This has never happened to me in the past, usually just a normal amount like 3-4. Now its's sending its whole army. Using BB as well. Is there a solution/reason to this?

Share this post


Link to post
Share on other sites

I don't see such behavior in my tests (only three fire teams of plenty was sent with recon task, only three fire teams of many (to fulfill default requirement of > 10 troops) sent with capturing order), so can't say. Maybe depends on init settings (some according to their description may alter default numbers of groups to be sent) or scenario conditions (eg. at night IIRC more recon groups may be sent). 

Share this post


Link to post
Share on other sites
nul = [] execVM "RydHQInit.sqf"; 
RydBB_Active = true;
RydBBa_HQs = [LeaderHQ];
RydHQ_Debug = true;
RydHQ_DebugII = true;
RydHQ_ResetTime = 60;
RydHQ_PathFinding = 400;
RydxHQ_NEAware = 600;
RydBB_LRelocating = false;
RydBB_MainInterval = 10;
RydHQ_MAtt = true;
RydHQ_Personality = "GENIUS";
RydBB_Debug = true;
RydHQ_NoRec = 1000;
RydHQ_DynForm = true;
RydxHQ_SynchroAttack = true;

Anything here that would do that?

 

Does HAL send more groups to an objective if it has reserves near by? It seems like it's only doing it for the first objective that BB sets but everything after that is normal.

Share this post


Link to post
Share on other sites

Using yours init I was able to reproduce the problem. It's an error in HQReset.sqf code supposed to reset count of troops already on place capturing given objective. Each reset it often will go more and more under 0, which shouldn't happen. After many resets, there is huge negative number supposedly of troops already capturing given objective. Meanwhile code wants to exceed capturing limit, 10 by default (and 3 or more groups/vehicles sent IIRC). Going from, eg, -100 to 10 means sending at least 110 troops, thus observed behavior. Same problem, BTW, affects 1.22, and was revealed by combination of noRec, but without rapidCapt (so several idle cycles before first capturing missions), AND with very low ResetTime (60), thus many resets during these cycles before first capturing missions was sent. Using single object for all objectives would multiply the effect (using single trigger/object for more, than one objective may be anyway poor idea after all, seems best practice is to keep separate trigger for each objective...). Also not sure, if having reset interval lower than cycle interval is good idea. Nothing particular in mind, maybe nothing wrong with this, but it was assumed, there will be more, than one cycle per reset. 

 

Once reason was found, fix was easy to do - single line of code changed. 1.23 updated, but not tested thoroughly, so check, if it works indeed:

 

HAL 1.23wip2

  • Like 1

Share this post


Link to post
Share on other sites

 

Thx Rydygier for new version, but this does not want to "cooperate" with HWS for me. Mission starts, but not show box with setting factions.

Share this post


Link to post
Share on other sites

Anyone got any good missions to use with HETMAN?  I'm always looking on good ones.

Share this post


Link to post
Share on other sites
Quote

Thx Rydygier for new version, but this does not want to "cooperate" with HWS for me. Mission starts, but not show box with setting factions.

 

Hm? HWS is standalone, contains proper version of HAL scripts inside. You shouldn't play it with HAL addon. 

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

×