8
8
using System . Text ;
9
9
using System . Threading . Tasks ;
10
10
using xivModdingFramework . Cache ;
11
+ using xivModdingFramework . Exd . Enums ;
12
+ using xivModdingFramework . Exd . FileTypes ;
11
13
using xivModdingFramework . Items . DataContainers ;
12
14
using xivModdingFramework . Mods ;
13
15
using xivModdingFramework . Mods . DataContainers ;
@@ -54,6 +56,40 @@ public static async Task SaveStainingTemplateFile(StainingTemplateFile file, str
54
56
await _dat . ImportType2Data ( data , GearStainingTemplatePath , applicationSource , null , index , modlist ) ;
55
57
56
58
}
59
+ public static async Task < Dictionary < int , string > > GetDyeNames ( )
60
+ {
61
+
62
+ var lang = XivCache . GameInfo . GameLanguage ;
63
+ if ( lang == General . Enums . XivLanguage . None )
64
+ {
65
+ lang = General . Enums . XivLanguage . English ;
66
+ }
67
+
68
+ Dictionary < int , string > Dyes = new Dictionary < int , string > ( ) ;
69
+
70
+ var ex = new Ex ( XivCache . GameInfo . GameDirectory , lang ) ;
71
+ var exData = await ex . ReadExData ( XivEx . stain ) ;
72
+
73
+
74
+ var dataLength = exData [ 0 ] . Length - 2 ;
75
+
76
+ foreach ( var kv in exData )
77
+ {
78
+ if ( kv . Key == 0 ) continue ;
79
+
80
+ var size = kv . Value . Length - dataLength ;
81
+ var name = Encoding . UTF8 . GetString ( kv . Value , dataLength , size ) . Replace ( "\0 " , "" ) ;
82
+ var dyeId = kv . Key - 1 ;
83
+ if ( String . IsNullOrEmpty ( name ) ) {
84
+ name = "Dye " + dyeId . ToString ( ) ;
85
+ }
86
+
87
+ Dyes . Add ( dyeId , name ) ;
88
+ }
89
+
90
+
91
+ return Dyes ;
92
+ }
57
93
}
58
94
59
95
public enum StainingTemplateArrayType
@@ -133,7 +169,7 @@ public StainingTemplateEntry(byte[] data, int offset)
133
169
134
170
Half [ ] halfs = new Half [ 3 ] ;
135
171
136
- var elementStart = offsetStart + ( i * 2 ) ;
172
+ var elementStart = offsetStart + ( ( i * 2 ) * elementSize ) ;
137
173
138
174
var reversed = new byte [ ] { data [ elementStart + 1 ] , data [ elementStart ] } ;
139
175
var test = new Half ( BitConverter . ToUInt16 ( reversed , 0 ) ) ;
@@ -150,22 +186,32 @@ public StainingTemplateEntry(byte[] data, int offset)
150
186
if ( type == StainingTemplateArrayType . Indexed )
151
187
{
152
188
var nArray = new List < Half [ ] > ( ) ;
189
+ var indexes = new byte [ 128 ] ;
153
190
for ( int i = 0 ; i < 128 ; i ++ )
154
191
{
155
- var index = data [ indexStart + i ] ;
156
- var entry = new Half [ 3 ] ;
157
- if ( index == 255 )
192
+ try
158
193
{
159
- nArray . Add ( new Half [ ] { new Half ( ) , new Half ( ) , new Half ( ) } ) ;
160
- continue ;
161
- }
162
-
163
- if ( index == 0 )
194
+ var index = data [ indexStart + i + 1 ] ;
195
+ var entry = new Half [ 3 ] ;
196
+ if ( index > halfData . Count )
197
+ {
198
+ nArray . Add ( new Half [ ] { new Half ( ) , new Half ( ) , new Half ( ) } ) ;
199
+ continue ;
200
+ }
201
+
202
+ if ( index == 0 )
203
+ {
204
+ nArray . Add ( new Half [ ] { new Half ( ) , new Half ( ) , new Half ( ) } ) ;
205
+ continue ;
206
+ }
207
+
208
+ index -= 1 ;
209
+
210
+ nArray . Add ( halfData [ index ] ) ;
211
+ } catch ( Exception ex )
164
212
{
165
- nArray . Add ( new Half [ ] { new Half ( ) , new Half ( ) , new Half ( ) } ) ;
166
- continue ;
213
+ throw ;
167
214
}
168
- nArray . Add ( halfData [ index - 1 ] ) ;
169
215
}
170
216
171
217
halfData = nArray ;
@@ -280,5 +326,6 @@ public StainingTemplateFile(byte[] data)
280
326
}
281
327
282
328
329
+
283
330
}
284
331
}
0 commit comments