Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
27 lines
1.8 KiB
Python
27 lines
1.8 KiB
Python
"""Run actual loading-damage lease methods; native damage routing is checked separately."""
|
|
from policy_harness import ROOT, body, run
|
|
p=ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_SpawnFinalization.c'
|
|
s='\n'.join(body(p,key) for key in ('bool Begin(IEntity actor)', 'void Stop()'))
|
|
for before,after in [('IEntity actor','Actor* actor'),('DamageManagerComponent damage','Damage* damage'),('DamageManagerComponent.Cast(actor.FindComponent(DamageManagerComponent))','actor->damage'),('Replication.IsServer()','server'),('m_Damage.','m_Damage->'),('damage.','damage->'),('null','nullptr')]:s=s.replace(before,after)
|
|
run(r'''
|
|
#include <cassert>
|
|
bool server=true;
|
|
struct Damage {bool enabled=true,destroyed=false;int writes=0;bool IsDestroyed(){return destroyed;}bool IsDamageHandlingEnabled(){return enabled;}void EnableDamageHandling(bool value){enabled=value;writes++;}};
|
|
struct Actor {Damage* damage;};
|
|
struct Lease {Damage* m_Damage=nullptr;bool m_RestoreDamage=false;
|
|
'''+s+r'''
|
|
};
|
|
int main(){
|
|
Damage damage;Actor actor{&damage};Lease lease;
|
|
assert(lease.Begin(&actor)&&!damage.enabled);assert(!lease.Begin(&actor));
|
|
lease.Stop();assert(damage.enabled&&damage.writes==2);lease.Stop();assert(damage.writes==2);
|
|
damage.enabled=false;assert(lease.Begin(&actor));lease.Stop();assert(!damage.enabled&&damage.writes==3);
|
|
damage.destroyed=true;assert(!lease.Begin(&actor));damage.destroyed=false;
|
|
server=false;assert(!lease.Begin(&actor));server=true;
|
|
Actor missing{nullptr};assert(!lease.Begin(&missing)&&!lease.Begin(nullptr));
|
|
// Deleted native component is a weak null reference; teardown must be harmless.
|
|
damage.enabled=true;assert(lease.Begin(&actor));lease.m_Damage=nullptr;lease.Stop();
|
|
}
|
|
''')
|
|
print('PASS: loading protection restores only its own damage change, rejects invalid admission actors, and tolerates repeat/deleted cleanup')
|