diff --git a/ESMify_Plugins.pas b/ESMify_Plugins.pas index e75c82a..a3fa146 100644 --- a/ESMify_Plugins.pas +++ b/ESMify_Plugins.pas @@ -55,7 +55,7 @@ begin end; // Refs referencing themselves do not require the flag - if not Equals(rec, referencingRecord) then begin + if not SameRecord(rec, referencingRecord) then begin result := True; break; end; @@ -64,6 +64,12 @@ begin end; end; +function SameRecord(ref: IwbMainRecord; otherRef: IwbMainRecord): boolean; +begin + // 'Equals' does not fit here + result := Assigned(ref) and (GetLoadOrderFormID(ref) = GetLoadOrderFormID(otherRef)); +end; + function InSameCell(ref: IwbMainRecord; otherRef: IwbMainRecord): boolean; var cell, otherCell, worldspace, otherWorldspace: IwbMainRecord; @@ -76,14 +82,14 @@ begin // Interior cell if (GetElementNativeValues(cell, 'DATA') and 1) > 0 then begin - result := Equals(cell, otherCell); + result := SameRecord(cell, otherCell); exit; end; worldspace := LinksTo(ElementByPath(cell, 'Worldspace')); otherWorldspace := LinksTo(ElementByPath(otherCell, 'Worldspace')); - if not Equals(worldspace, otherWorldspace) then begin + if not SameRecord(worldspace, otherWorldspace) then begin result := false; exit; end; @@ -93,10 +99,12 @@ begin result := true; exit; end; - + // Persistent refs are located in 0,0 so we detect their original grid position via their position coords := wbPositionToGridCell(GetPosition(ref)); otherCoords := wbPositionToGridCell(GetPosition(otherRef)); + //AddMessage(IntToStr(coords.x) + ' ' + IntToStr(otherCoords.x)); + //AddMessage(IntToStr(coords.y) + ' ' + IntToStr(otherCoords.y)); result := (coords.x = otherCoords.x) and (coords.y = otherCoords.y); end; @@ -123,7 +131,7 @@ function MarkPersistent(e: IwbMainRecord): boolean; begin AddMessage(' + Marking as persistent: ' + GetElementEditValues(e, 'NAME') + ' - (' + Name(e) + ')'); Inc(flaggedCount); - SetIsPersistent(e, True); + //SetIsPersistent(e, True); CheckNonPersistentOverride(e); end; @@ -159,7 +167,7 @@ begin linkedCount := ElementCount(linkedRefs); for i := 0 to Pred(linkedCount) do begin currentItem := ElementByIndex(linkedRefs, i); - if Equals(LinksTo(ElementByPath(currentItem, 'Keyword/Ref')), keyword) then begin + if SameRecord(LinksTo(ElementByPath(currentItem, 'Keyword/Ref')), keyword) then begin result := LinksTo(ElementByPath(currentItem, 'Ref')); break; end; @@ -321,7 +329,7 @@ begin else if (packageLoc = 'In cell') then begin refCell := LinksTo(ElementByPath(ElementByIndex(ElementByPath(package, 'Package Data\Data Input Values'), 0), 'PLDT\Cell')); if Assigned(refCell) then begin - if Equals(refCell, LinksTo(ElementByPath(e, 'Cell'))) then continue; + if SameRecord(refCell, LinksTo(ElementByPath(e, 'Cell'))) then continue; end; end else if (packageLoc = 'Near linked reference') then begin