Skip to content

Commit e6bf6a4

Browse files
committed
Beta v2.3.4.3b
2 parents 6e6c268 + 389da9e commit e6bf6a4

File tree

1 file changed

+59
-12
lines changed
  • xivModdingFramework/Materials/FileTypes

1 file changed

+59
-12
lines changed

xivModdingFramework/Materials/FileTypes/STM.cs

Lines changed: 59 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
using System.Text;
99
using System.Threading.Tasks;
1010
using xivModdingFramework.Cache;
11+
using xivModdingFramework.Exd.Enums;
12+
using xivModdingFramework.Exd.FileTypes;
1113
using xivModdingFramework.Items.DataContainers;
1214
using xivModdingFramework.Mods;
1315
using xivModdingFramework.Mods.DataContainers;
@@ -54,6 +56,40 @@ public static async Task SaveStainingTemplateFile(StainingTemplateFile file, str
5456
await _dat.ImportType2Data(data, GearStainingTemplatePath, applicationSource, null, index, modlist);
5557

5658
}
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+
}
5793
}
5894

5995
public enum StainingTemplateArrayType
@@ -133,7 +169,7 @@ public StainingTemplateEntry(byte[] data, int offset)
133169

134170
Half[] halfs = new Half[3];
135171

136-
var elementStart = offsetStart + (i * 2);
172+
var elementStart = offsetStart + ((i * 2) * elementSize);
137173

138174
var reversed = new byte[] { data[elementStart + 1], data[elementStart] };
139175
var test = new Half(BitConverter.ToUInt16(reversed, 0));
@@ -150,22 +186,32 @@ public StainingTemplateEntry(byte[] data, int offset)
150186
if(type == StainingTemplateArrayType.Indexed)
151187
{
152188
var nArray = new List<Half[]>();
189+
var indexes = new byte[128];
153190
for (int i = 0; i < 128; i++)
154191
{
155-
var index = data[indexStart + i];
156-
var entry = new Half[3];
157-
if (index == 255)
192+
try
158193
{
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)
164212
{
165-
nArray.Add(new Half[] { new Half(), new Half(), new Half() });
166-
continue;
213+
throw;
167214
}
168-
nArray.Add(halfData[index - 1]);
169215
}
170216

171217
halfData = nArray;
@@ -280,5 +326,6 @@ public StainingTemplateFile(byte[] data)
280326
}
281327

282328

329+
283330
}
284331
}

0 commit comments

Comments
 (0)