Skip to content

Instantly share code, notes, and snippets.

@fireundubh
Created May 30, 2016 00:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fireundubh/e54ac92e414fa34143059cc312ac3cf8 to your computer and use it in GitHub Desktop.
Save fireundubh/e54ac92e414fa34143059cc312ac3cf8 to your computer and use it in GitHub Desktop.
function HasFlag(akFlags: IInterface; asFlagName: String): Boolean;
var
lsFlags, lsTemplateFlags, lsCellFlags, lsRecordFlags: TStringList;
i: Integer;
begin
// create flag lists
lsFlags := TStringList.Create;
// merge flag lists
lsTemplateFlags := TStringList.Create;
lsTemplateFlags.DelimitedText := '"Use Traits=1", "Use Stats=2", "Use Factions=4", "Use Spell List=8", "Use Actor Effect List=8", "Use AI Data=16", "Use AI Packages=32", "Use Model/Animation=64", "Use Base Data=128", "Use Inventory=256", "Use Script=512", "Use Def Pack List=1024", "Use Attack Data=2048", "Use Keywords=4096"';
lsFlags.AddStrings(lsTemplateFlags);
FreeAndNil(lsTemplateFlags);
lsCellFlags := TStringList.Create;
lsCellFlags.DelimitedText := '"Is Interior Cell=1", "Has Water=2", "Behave Like Exterior=128", "Use Sky Lighting=256"';
lsFlags.AddStrings(lsCellFlags);
FreeAndNil(lsCellFlags);
lsRecordFlags := TStringList.Create;
lsRecordFlags.DelimitedText := '"ESM=1", "Deleted=32", "Border Region=64", "Turn Off Fire=128", "Casts Shadows=512", "Persistent Reference=1024", "Initially Disabled=2048", "Ignored=4096", "Visible When Distant=32768", "Dangerous=131072", "Compressed=262144", "Cant Wait=524288"';
lsFlags.AddStrings(lsRecordFlags);
FreeAndNil(lsRecordFlags);
// find index
i := StrToInt(Lowercase(lsFlags.Values[asFlagName]));
FreeAndNil(lsFlags);
// return result
Result := (GetNativeValue(akFlags) and i > 0);
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment