"""Execute the actual faction button handler, including Random-all submission.""" from policy_harness import ROOT, body, run p = ROOT/'addons/core/Scripts/Game/ERR/00_Core/ERR_FactionMenu.c' code = body(p, 'protected void OnFactionButton(') code = (code.replace('protected ', '').replace('SCR_ButtonBaseComponent button', 'SCR_ButtonBaseComponent* button') .replace('button.GetRootWidget().GetName()', 'button->name') .replace('foreach (', 'for (').replace('ERR_FactionChoices.Roles()', 'Roles()') .replace('SCR_ComboBoxComponent.GetComboBoxComponent(', 'GetCombo(') .replace(').SetCurrentItem(', ')->SetCurrentItem(').replace(').GetCurrentIndex()', ')->GetCurrentIndex()') .replace('m_Controller.ERR_AdminSubmit', 'm_Controller->ERR_AdminSubmit')) run(r''' #include #include #include #include using string=std::string; struct IDs:std::vector{using std::vector::vector;int Count(){return size();}}; struct Combo{int index=1;void SetCurrentItem(int i){index=i;}int GetCurrentIndex(){return index;}}; struct SCR_ButtonBaseComponent{string name;}; struct Controller{std::vector commands;void ERR_AdminSubmit(string cmd,bool snapshot){assert(snapshot);commands.push_back(cmd);}}; struct Menu { bool m_Ready=true,focused=true,m_FactionFieldsInitialized=true; float m_Age=0,m_ClickDelay=0; Controller controller;Controller* m_Controller=&controller; IDs m_FactionIds={"random","us","ussr","fia"}; std::map combos; string feedback; static IDs Roles(){return {"escapists","enemy","independent"};} bool IsFocused(){return focused;}int GetRootWidget(){return 0;} Combo* GetCombo(string name,int){return &combos[name];} void SetText(string field,string value){assert(field=="Feedback");feedback=value;} '''+code+r''' }; int main(){ SCR_ButtonBaseComponent random{"FactionsRandomAll"}, apply{"FactionsApply"}, other{"Other"}; Menu m; m.OnFactionButton(&random); assert(m.controller.commands.size()==1&&m.controller.commands[0]=="factions set random random random"); for(auto role:Menu::Roles())assert(m.combos["FactionSelect_"+role].index==0); assert(m.feedback=="Saving faction selections..."&&m.m_ClickDelay>0); m.OnFactionButton(&random);assert(m.controller.commands.size()==1); // debounce for(int guard=0;guard<6;guard++){ Menu refused; if(guard==0)refused.m_Ready=false; if(guard==1)refused.focused=false; if(guard==2)refused.m_Controller=nullptr; if(guard==3)refused.m_Age=7; if(guard==4)refused.m_ClickDelay=1; if(guard==5)refused.m_FactionFieldsInitialized=false; refused.OnFactionButton(&random);assert(refused.controller.commands.empty()&&refused.combos.empty()); } Menu manual; manual.combos["FactionSelect_escapists"].index=1; manual.combos["FactionSelect_enemy"].index=0; manual.combos["FactionSelect_independent"].index=3; manual.OnFactionButton(&apply); assert(manual.controller.commands.size()==1&&manual.controller.commands[0]=="factions set us random fia"); Menu invalid;invalid.combos["FactionSelect_enemy"].index=99; invalid.OnFactionButton(&apply);invalid.OnFactionButton(&other);invalid.OnFactionButton(nullptr); assert(invalid.controller.commands.empty()); } ''') print('PASS: Random all submits persistent random roles immediately; manual mixed choices, stale/unauthorized UI guards and debounce preserved')