Files
jakub 1b1a8b5173 Add mission customization, HQ support and aggression-driven AI
Integrate faction and random settings menus, generated objectives, scouts, convoys, air support, mortar stations and body-intel recovery. Add identified-body aggression, finite hunter UAZ deployment, dedicated objective defence and maximum AI skill with separate reduced aim accuracy. Include policy tests, native probes, evidence and documentation.
2026-09-23 15:07:14 +02:00

19 lines
2.0 KiB
Python

"""Execute production kill eligibility, including players, retained bodies and radius."""
from policy_harness import ROOT,body,run
s=body(ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_DebugAI.c','static bool Eligible(')
s=s.replace('IEntity target','IEntity* target').replace('IEntity center','IEntity* center').replace('array<IEntity> protectedBodies','Array protectedBodies').replace('target.','target->').replace('center.','center->').replace('ChimeraCharacter.Cast','ChimeraCharacter::Cast').replace('ERR_Actors.','ERR_Actors::').replace('vector.','vector::')
run(r'''
#include <cassert>
#include <vector>
#include <algorithm>
#include <cmath>
struct vector{float x=0,y=0,z=0;static float Distance(vector a,vector b){return std::sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z));}};
struct IEntity{vector position;bool alive=true,player=false,character=true;vector GetOrigin(){return position;}};
struct Array:std::vector<IEntity*>{using std::vector<IEntity*>::vector;bool Contains(IEntity* p){return std::find(begin(),end(),p)!=end();}};
namespace ChimeraCharacter{bool Cast(IEntity* e){return e&&e->character;}}
namespace ERR_Actors{bool Alive(IEntity* e){return e->alive;}bool Player(IEntity* e){return e->player;}}
'''+s+r'''
int main(){IEntity center,target;Array empty;target.position.x=1000;assert(Eligible(&target,&center,empty));target.position.x=1000.1;assert(!Eligible(&target,&center,empty));target.position={0,1001,0};assert(!Eligible(&target,&center,empty));target.position={10,0,0};assert(Eligible(&target,&center,empty));target.player=true;assert(!Eligible(&target,&center,empty));target.player=false;assert(!Eligible(&target,&center,Array{&target}));target.character=false;assert(!Eligible(&target,&center,empty));target.character=true;target.alive=false;assert(!Eligible(&target,&center,empty));assert(!Eligible(nullptr,&center,empty));assert(!Eligible(&center,&center,empty));}
''')
print('PASS: actual killais eligibility includes the 1000m boundary, excludes players/retained bodies/dead/non-character entities and checks full 3D distance')