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.
19 lines
2.0 KiB
Python
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,¢er,empty));target.position.x=1000.1;assert(!Eligible(&target,¢er,empty));target.position={0,1001,0};assert(!Eligible(&target,¢er,empty));target.position={10,0,0};assert(Eligible(&target,¢er,empty));target.player=true;assert(!Eligible(&target,¢er,empty));target.player=false;assert(!Eligible(&target,¢er,Array{&target}));target.character=false;assert(!Eligible(&target,¢er,empty));target.character=true;target.alive=false;assert(!Eligible(&target,¢er,empty));assert(!Eligible(nullptr,¢er,empty));assert(!Eligible(¢er,¢er,empty));}
|
|
''')
|
|
print('PASS: actual killais eligibility includes the 1000m boundary, excludes players/retained bodies/dead/non-character entities and checks full 3D distance')
|