Merge owned systems into one addon while preserving resource identities. Gate player admission on the replicated prison scene, restore the original framed door, and hold enemy AI until escape. Correct scenario branding and author metadata, include publishing assets, and retain regression and native verification evidence.
56 lines
4.5 KiB
Python
56 lines
4.5 KiB
Python
"""Actual WORKBENCH-only native-context fallback; no production admission bypass."""
|
|
import os
|
|
from pathlib import Path
|
|
from policy_harness import ROOT,body,run
|
|
base=Path(os.environ.get('ERR_VEHICLE_DIAGNOSTICS_ROOT',str(ROOT)))
|
|
source=base/'addons/core/Scripts/Game/ERR/00_Core/ERR_NativeVehicleSecurityProbe.c'
|
|
wrapped=body(source,'protected bool DriverAvailable(').replace('protected ','').replace('m_DriverAction.','m_DriverAction->')
|
|
run('''#include <cassert>
|
|
struct Action {bool allowed=false,fallback=true;int context=-1,checks=0,diagnostics=0,bindings=0;bool CanBePerformedScript(int){checks++;return allowed;}void ERR_ProbeRejectedEntry(int){diagnostics++;}int ERR_ProbeResolvedDoor(int){return context;}bool ERR_ProbeDeclaredDriverDoor(int){bindings++;return fallback;}};
|
|
struct Probe{Action* m_DriverAction;int m_Player=7;
|
|
'''+wrapped+'''
|
|
};
|
|
int main(){Action a;Probe p{&a};a.allowed=true;assert(p.DriverAvailable()&&a.checks==1&&a.diagnostics==0&&a.bindings==0);
|
|
a.allowed=false;a.context=2;assert(!p.DriverAvailable()&&a.diagnostics==1&&a.bindings==0); // real selected context cannot be overridden
|
|
a.context=-1;assert(p.DriverAvailable()&&a.diagnostics==2&&a.bindings==1);
|
|
a.fallback=false;assert(!p.DriverAvailable()&&a.diagnostics==3&&a.bindings==2);
|
|
}
|
|
''')
|
|
method=body(source,'bool ERR_ProbeDeclaredDriverDoor(')
|
|
method=method.replace('BaseCompartmentSlot seat','BaseCompartmentSlot* seat').replace('array<int> doors = {};','Array doors;').replace('seat.','seat->').replace('m_CompartmentManager.','m_CompartmentManager->')
|
|
method=method.replace('SCR_CompartmentAccessComponent.','SCR_CompartmentAccessComponent::').replace('ECompartmentType.PILOT','PILOT')
|
|
run('''#include <cassert>
|
|
#include <vector>
|
|
using IEntity=int;enum {PILOT=1,CARGO=2};
|
|
struct Array:std::vector<int>{int Count(){return size();}};
|
|
struct BaseCompartmentSlot{int type=PILOT;std::vector<int> doors={3};void GetAvailableDoorIndices(Array& a){a.assign(doors.begin(),doors.end());}};
|
|
struct Manager {int valid=3;bool GetDoorInfo(int i){return i==valid;}};
|
|
struct SCR_CompartmentAccessComponent{static int GetCompartmentType(BaseCompartmentSlot* s){return s->type;}};
|
|
void PrintFormat(const char*,int,int,bool){}
|
|
struct Action {Manager* m_CompartmentManager;BaseCompartmentSlot* seat;int context=-1,stored=-1,checks=0,sets=0,diagnostics=0;bool nativeAllowed=true;
|
|
int GetRelevantDoorIndex(IEntity){return context;}BaseCompartmentSlot* GetCompartmentSlot(){return seat;}
|
|
int GetCompartmentDoorInfoIndex(){return stored;}void SetCompartmentDoorInfoIndex(int i){stored=i;sets++;}
|
|
bool CanBePerformedScript(IEntity){checks++;return nativeAllowed&&stored==3;}
|
|
void ERR_ProbeRejectedEntry(IEntity){diagnostics++;}
|
|
'''+method+'''
|
|
};
|
|
int main(){Manager m;BaseCompartmentSlot s;Action a;a.m_CompartmentManager=&m;a.seat=&s;
|
|
assert(a.ERR_ProbeDeclaredDriverDoor(7)&&a.stored==-1&&a.checks==1&&a.sets==2); // derived door 3, never hardcoded driver 0
|
|
a.nativeAllowed=false;assert(!a.ERR_ProbeDeclaredDriverDoor(7)&&a.stored==-1&&a.diagnostics==1&&a.sets==4);
|
|
a.context=2;assert(!a.ERR_ProbeDeclaredDriverDoor(7)&&a.sets==4);a.context=-1;
|
|
s.type=CARGO;assert(!a.ERR_ProbeDeclaredDriverDoor(7)&&a.sets==4);s.type=PILOT;
|
|
s.doors={};assert(!a.ERR_ProbeDeclaredDriverDoor(7));s.doors={3,4};assert(!a.ERR_ProbeDeclaredDriverDoor(7));
|
|
s.doors={4};assert(!a.ERR_ProbeDeclaredDriverDoor(7)&&a.sets==4&&a.checks==2);
|
|
a.seat=nullptr;assert(!a.ERR_ProbeDeclaredDriverDoor(7));a.seat=&s;a.m_CompartmentManager=nullptr;assert(!a.ERR_ProbeDeclaredDriverDoor(7));
|
|
}
|
|
''')
|
|
diagnostics=body(source,'void ERR_ProbeRejectedEntry(')
|
|
for forbidden in ('SetCompartmentDoorInfoIndex(', 'SetAffiliatedFaction(', 'ClearAffiliatedFaction(', 'GetInVehicle(', 'EnableDamageHandling(', 'TryBreach('):assert forbidden not in diagnostics
|
|
assert 'GetCannotPerformReason()' in diagnostics and 'GetRelevantDoorIndex(user)' in diagnostics
|
|
assert 'CanGetInVehicleViaDoor' in diagnostics and 'GetStoredResources' in diagnostics
|
|
assert diagnostics.index('door >= 0 && m_CompartmentManager.GetDoorInfo(door)') < diagnostics.index('m_CompartmentManager.GetDoorUser(door)')
|
|
assert 'if (index < 0 || !m_CompartmentManager.GetDoorInfo(index))' in diagnostics
|
|
assert 'missing or invalid context; no indexed native query issued' in diagnostics
|
|
assert 'modded class ERR_SecureGetInAction' in source.read_text() and source.read_text().startswith('#ifdef WORKBENCH')
|
|
print('PASS: actual diagnostic fallback runs only on failed missing-context call, derives unique native pilot door, preserves stock eligibility and restores prior index on success/failure; diagnostics mutate no game state.')
|