// more fields can be added (see in visualGGPK) public ModRecord(Memory m, StatsDat sDat, TagsDat tagsDat, long addr) { Address = addr; Key = m.ReadStringU(m.ReadLong(addr + 0)); Unknown8 = m.ReadLong(addr + 0x8); MinLevel = m.ReadInt(addr + 0x1C); StatNames = new[] { m.ReadLong(addr + 0x28) == 0 ? null : sDat.records[m.ReadStringU(m.ReadLong(m.ReadLong(addr + 0x28)))], m.ReadLong(addr + 0x38) == 0 ? null : sDat.records[m.ReadStringU(m.ReadLong(m.ReadLong(addr + 0x38)))], m.ReadLong(addr + 0x48) == 0 ? null : sDat.records[m.ReadStringU(m.ReadLong(m.ReadLong(addr + 0x48)))], m.ReadLong(addr + 0x58) == 0 ? null : sDat.records[m.ReadStringU(m.ReadLong(m.ReadLong(addr + 0x58)))] }; Domain = (ModDomain)m.ReadInt(addr + 0x60); UserFriendlyName = m.ReadStringU(m.ReadLong(addr + 0x64)); AffixType = (ModType)m.ReadInt(addr + 0x6C); Group = m.ReadStringU(m.ReadLong(addr + 0x70)); StatRange = new[] { new IntRange(m.ReadInt(addr + 0x78), m.ReadInt(addr + 0x7C)), new IntRange(m.ReadInt(addr + 0x80), m.ReadInt(addr + 0x84)), new IntRange(m.ReadInt(addr + 0x88), m.ReadInt(addr + 0x8C)), new IntRange(m.ReadInt(addr + 0x90), m.ReadInt(addr + 0x94)) }; Tags = new TagsDat.TagRecord[m.ReadLong(addr + 0x98)]; long ta = m.ReadLong(addr + 0xA0); for (int i = 0; i < Tags.Length; i++) { long ii = ta + 0x8 + 0x10 * i; Tags[i] = tagsDat.records[m.ReadStringU(m.ReadLong(ii, 0), 255)]; } TagChances = new Dictionary <string, int>(m.ReadInt(addr + 0xA8)); long tc = m.ReadLong(addr + 0xB0); for (int i = 0; i < Tags.Length; i++) { TagChances[Tags[i].Key] = m.ReadInt(tc + 4 * i); } IsEssence = m.ReadByte(addr + 0x1AC) == 0x01; Tier = m.ReadStringU(m.ReadLong(addr + 0x1C5)); }
public ModifierDefinition( string id, ModDomain domain, ModGenerationType generationType, IReadOnlyList <ModifierSpawnWeight> spawnWeights, IReadOnlyList <CraftableStat> stats) { Id = id; Domain = domain; GenerationType = generationType; SpawnWeights = spawnWeights; Stats = stats; }