Skip to content

Instantly share code, notes, and snippets.

@EyeDeck
Last active December 10, 2020 11:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EyeDeck/4e64a212c78c3f517f107681aee9bb40 to your computer and use it in GitHub Desktop.
Save EyeDeck/4e64a212c78c3f517f107681aee9bb40 to your computer and use it in GitHub Desktop.
R88 Simple Sorter Sim Settlements post-processor
{ Removes overridden Sim Settlements scripted misc items, like building plans etc.
Usage:
- Run Ruddy88's Simple Sorter
- Right click the plugin it made -> Apply Script
- Find and run this script
}
unit DeleteSSStuff;
const
EDIDregex = '^WSFW_(?:NameHolder_|Blank)|^SS2_(?:NameHolder|LeaderTrait|SLCP|Skin|BuildingPlan|LevelPlan|Template|BP)_|^kgSIM_TextReplace_|^kgConq_AssaultQuestVerb_';
var
SSScripts: TStringList;
total: Cardinal;
// Borrowed from https://github.com/fireundubh/xedit-scripts/blob/master/lib/dubhFunctions.pas per library's MIT license
function RegExMatches(ptrn, subj: String): Boolean;
var
re: TPerlRegEx;
output: String;
begin
output := False;
re := TPerlRegEx.Create;
try
re.RegEx := ptrn;
re.Options := [1]; // case insensitive per http://docwiki.embarcadero.com/Libraries/Sydney/en/System.RegularExpressions.TRegExOption
re.Subject := subj;
if re.Match then
output := re.FoundMatch;
finally
re.Free;
Result := output;
end;
end;
function Initialize: integer;
begin
SSScripts := TStringList.Create;
SSScripts.Add('SimSettlements:CityPlan');
SSScripts.Add('SimSettlements:CityPlanLayer');
SSScripts.Add('SimSettlements:DynamicFlag');
SSScripts.Add('SimSettlements:FactionUnitData');
SSScripts.Add('SimSettlements:LeaderCard');
SSScripts.Add('SimSettlements:SimBuildingPlan');
SSScripts.Add('SimSettlements:SimBuildingPlanSkin');
SSScripts.Add('SimSettlements:SimPlanPath');
SSScripts.Add('SimSettlements:SimStory');
SSScripts.Add('SimSettlements:SpawnableFoundation');
SSScripts.Add('SimSettlements:medicalresearchrecipe');
SSScripts.Add('SimSettlementsV2:Armors:BuildingClass');
SSScripts.Add('SimSettlementsV2:Armors:ThemeDefinition_Flags');
SSScripts.Add('SimSettlementsV2:MiscObjects:AddonPackConfiguration');
SSScripts.Add('SimSettlementsV2:MiscObjects:BuildingPlanTheme');
SSScripts.Add('SimSettlementsV2:MiscObjects:Foundation');
SSScripts.Add('SimSettlementsV2:MiscObjects:OptionsProfile');
SSScripts.Add('SimSettlementsV2:MiscObjects:PetStoreCreatureItem');
SSScripts.Add('SimSettlementsV2:MiscObjects:PlotConfiguration_Agricultural');
SSScripts.Add('SimSettlementsV2:MiscObjects:PlotConfiguration_Commercial');
SSScripts.Add('SimSettlementsV2:MiscObjects:PlotConfiguration_Industrial');
SSScripts.Add('SimSettlementsV2:MiscObjects:PlotConfiguration_Martial');
SSScripts.Add('SimSettlementsV2:MiscObjects:PlotConfiguration_Municipal');
SSScripts.Add('SimSettlementsV2:MiscObjects:PlotConfiguration_Recreational');
SSScripts.Add('SimSettlementsV2:MiscObjects:PlotConfiguration_Residential');
SSScripts.Add('SimSettlementsV2:MiscObjects:PlotMessages');
SSScripts.Add('SimSettlementsV2:MiscObjects:PowerPole');
SSScripts.Add('SimSettlementsV2:MiscObjects:StageItem');
SSScripts.Add('SimSettlementsV2:MiscObjects:UnlockableBuildingClass');
SSScripts.Add('SimSettlementsV2:MiscObjects:UnlockableBuildingPlan');
SSScripts.Add('SimSettlementsV2:MiscObjects:UnlockableFlag');
SSScripts.Add('SimSettlementsV2:MiscObjects:medicalresearchrecipe');
SSScripts.Add('SimSettlementsV2:Weapons:BuildingLevelPlan');
SSScripts.Add('SimSettlementsV2:Weapons:BuildingLevelSkin');
SSScripts.Add('SimSettlementsV2:Weapons:BuildingPlan');
SSScripts.Add('SimSettlementsV2:Weapons:CityPlan');
SSScripts.Add('SimSettlementsV2:Weapons:LeaderCard');
SSScripts.Add('simsettlementsv2:miscobjects:settlerlocationdiscovery');
SSScripts.Add('simsettlementsv2:miscobjects:themeruleset');
SSScripts.Add('simsettlementsv2:miscobjects:unlockable');
AddMessage('Purging Sim Settlements MISC/WEAP/ARMO item overrides...');
end;
function Process(e: IInterface): integer;
var
r: IInterface;
i: Cardinal;
s, sig: string;
remove: boolean;
begin
// don't delete base records in case this is run on the wrong plugin
sig := Signature(e);
if ((sig <> 'MISC') and (sig <> 'WEAP') and (sig <> 'ARMO')) or (IsMaster(e)) then
Exit;
r := ElementByPath(e,'VMAD\Scripts');
if Equals(r, Nil) then
Exit;
for i := 0 to ElementCount(r)-1 do begin
s := GetElementEditValues(ElementByIndex(r, i), 'ScriptName');
if (SSScripts.IndexOf(s) >= 0) then begin
PopRecord(e, s + ' override ');
Exit;
end;
end;
if (RegExMatches(EDIDregex, EditorID(e))) then
PopRecord(e, 'regex match override ');
Result := 0;
end;
procedure PopRecord(e: IInterface; s: String);
begin
AddMessage(' Deleting ' + s + EditorID(e));
inc(total);
RemoveNode(e);
end;
function Finalize: integer;
begin
SSScripts.Free;
AddMessage('Done. Removed ' + IntToStr(total) + ' records.');
Result := 0;
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment