Last active
December 10, 2020 11:57
-
-
Save EyeDeck/4e64a212c78c3f517f107681aee9bb40 to your computer and use it in GitHub Desktop.
R88 Simple Sorter Sim Settlements post-processor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ 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