-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathidrinth HELMET hider new patch.pas
159 lines (157 loc) · 5 KB
/
idrinth HELMET hider new patch.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
unit UserScript;
var
f: IInterface;
//============================================================================
procedure RegisterKeyword(edid: string;form_id: string);
var
group, Result: IInterface;
begin
group := GroupBySignature(f, 'KYWD');
if not Assigned(group) then
group := Add(f, 'KYWD', True);
Result := Add(group, 'KYWD', true);
Add(Result, 'EDID', True);
SetElementEditValues(Result, 'EDID', edid);
SetLoadOrderFormID(Result, form_id);
end;
procedure RegisterKeywords();
begin
RegisterKeyword('FrostfallEnableKeywordProtection', '01CC0E28');
RegisterKeyword('FrostfallIsWarmAccessory', '01CC0E20');
RegisterKeyword('FrostfallIsWeatherproofAccessory', '01CC0E1F');
RegisterKeyword('FrostfallWarmthFair', '01CC0E11');
RegisterKeyword('FrostfallWarmthGood', '01CC0E12');
RegisterKeyword('FrostfallWarmthExcellent', '01CC0E13');
RegisterKeyword('FrostfallWarmthMax', '01CC0E14');
RegisterKeyword('FrostfallCoverageFair', '01CC0E17');
RegisterKeyword('FrostfallCoverageGood', '01CC0E18');
RegisterKeyword('FrostfallCoverageExcellent', '01CC0E19');
RegisterKeyword('FrostfallCoverageMax', '01CC0E1A');
end;
function Initialize: integer;
begin
f := AddNewFile;
if not Assigned(f) then
begin
Result := 1;
Exit;
end;
AddMasterIfMissing(f, 'Update.esm', False);
RegisterKeywords();
end;
//============================================================================
function HasKeyword(keywords: IInterface; keywordId: string): boolean;
var
i: integer;
keyword: string;
begin
Result := False;
for i := 0 to Pred(ElementCount(keywords)) do
begin
keyword := GetEditValue(ElementByIndex(keywords, i));
if SameText(keyword, keywordId) then
begin
Result := True;
Exit;
end;
end;
end;
procedure AddKeyword(keywords: IInterface; keywordId: string);
var
k: IInterface;
i: integer;
begin
if HasKeyword(keywords, keywordId) then
Exit;
k := ElementAssign(keywords, HighInteger, nil, False);
SetEditValue(k, keywordId);
end;
procedure AddHeadPiece(e: IInterface);
var
i: integer;
b, keywords: IInterface;
isMedium: boolean;
keyword: string;
begin
AddMessage(GetElementEditValues(e, 'FULL') + ' is new head gear');
AddRequiredElementMasters(e, f, False);
b := wbCopyElementToFile(e, f, False, True);
RemoveElement(b, 'Armature');
SetElementNativeValues(b, 'BOD2\First Person Flags', $40000000);//Slot 60
keywords := ElementBySignature(b, 'KWDA');
if not HasKeyword(keywords, '01CC0E28') then //prevent duplicate frostfall keywords
begin
isMedium := True;
for i := 0 to Pred(ElementCount(keywords)) do
begin
keyword := GetEditValue(ElementByIndex(keywords, i));
if SameText(keyword, 'ArmorHelmet [KYWD:0006C0EE]') then
begin
AddKeyword(keywords, '01CC0E1F');//coverage
AddKeyword(keywords, '01CC0E28');//protection
end;
if SameText(keyword, 'ClothingHead [KYWD:0010CD11]') then
begin
AddKeyword(keywords, '01CC0E20');//warmth
AddKeyword(keywords, '01CC0E28');//protection
AddKeyword(keywords, '01CC0E17');//coverage: fair
AddKeyword(keywords, '01CC0E14');//warmth: max
isMedium := False;
end;
if SameText(keyword, 'ArmorHeavy [KYWD:0006BBD2]') then
begin
AddKeyword(keywords, '01CC0E1A');//coverage: max
AddKeyword(keywords, '01CC0E11');//warmth: fair
AddKeyword(keywords, '01CC0E28');//protection
isMedium := False;
end;
if SameText(keyword, 'ArmorLight [KYWD:0006BBD3]') then
begin
AddKeyword(keywords, '01CC0E18');//coverage: good
AddKeyword(keywords, '01CC0E13');//warmth: excellent
AddKeyword(keywords, '01CC0E28');//protection
isMedium := False;
end;
end;
if isMedium then
begin
AddKeyword(keywords, '01CC0E19');//coverage: excellent
AddKeyword(keywords, '01CC0E12');//warmth: good
end;
if not ElementExists(b, 'KSIZ') then
Add(b, 'KSIZ', True);
SetElementNativeValues(b, 'KSIZ', ElementCount(keywords));
end;
AddMessage(GetElementEditValues(e, 'FULL') + ' was added');
end;
function Process(e: IInterface): integer;
var
i: integer;
b, keywords: IInterface;
keyword: string;
begin
if Signature(e) <> 'ARMO' then
Exit;
if not IsMaster(e) then
Exit;
e := WinningOverride(e);
keywords := ElementBySignature(e, 'KWDA');
if not Assigned(keywords) then
Exit;
for i := 0 to Pred(ElementCount(keywords)) do
begin
keyword := GetEditValue(ElementByIndex(keywords, i));
if not Assigned(keyword) then
Continue;
if SameText(keyword, 'ArmorHelmet [KYWD:0006C0EE]') then
AddHeadPiece(e);
if SameText(keyword, 'ClothingHead [KYWD:0010CD11]') then
AddHeadPiece(e);
end;
end;
//============================================================================
function Finalize: integer;
begin
SortMasters(f);
end;
end.