|
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));
|
@@ -165,7 +201,18 @@ public StainingTemplateEntry(byte[] data, int offset)
|
165 | 201 | nArray.Add(new Half[] { new Half(), new Half(), new Half() });
|
166 | 202 | continue;
|
167 | 203 | }
|
168 |
| - nArray.Add(halfData[index - 1]); |
| 204 | + |
| 205 | + // Seriously, wtf SE? |
| 206 | + if(x == 1 && index == 1 && (i <= 110 && i != 91)) |
| 207 | + { |
| 208 | + index = 0; |
| 209 | + } |
| 210 | + |
| 211 | + if(index >= halfData.Count) |
| 212 | + { |
| 213 | + index = 0; |
| 214 | + } |
| 215 | + nArray.Add(halfData[index]); |
169 | 216 | }
|
170 | 217 |
|
171 | 218 | halfData = nArray;
|
@@ -280,5 +327,6 @@ public StainingTemplateFile(byte[] data)
|
280 | 327 | }
|
281 | 328 |
|
282 | 329 |
|
| 330 | + |
283 | 331 | }
|
284 | 332 | }
|
0 commit comments