private void CreateIndex <T>(SnoType groupType, SnoGroup <T> snoGroup, int groupNum) where T : SnoTableEntry, new() { var container = snoGroup.Container; var maxIndex = container.MaxIndex; var index = new Dictionary <int, short>(); for (var i = 0; i < maxIndex; i++) { var entry = container[(short)i]; var snoEntryId = entry.SnoGroupId; if (snoEntryId != groupNum) { continue; } var entityId = (short)entry.Id; if (entityId == -1) { continue; } var identifier = entry.Value.Header.SnoId; index[identifier] = entityId; } LookupTable.Add(groupType, new IndexData { Index = index, MaxIndex = maxIndex, }); }
public short GetEntityId(SnoType groupId, int snoEntryId) { IndexData indexData; if (LookupTable.TryGetValue(groupId, out indexData)) { short entityId; if (indexData.Index.TryGetValue(snoEntryId, out entityId)) { return(entityId); } } return(0); }
public SnoGroup <T> CreateGroup <T>(SnoType groupId) where T : SnoTableEntry, new() { var groupNum = (int)groupId; if (groupNum < 0 || groupNum > 70) { throw new ArgumentOutOfRangeException(nameof(groupId)); } var ptr = Zeta.Game.ZetaDia.SNO[(Zeta.Game.Internals.SNOGroup)groupNum].BaseAddress; var manager = MemoryWrapper.Create <SnoGroup <T> >(ptr); if (!LookupTable.ContainsKey(groupId)) { CreateIndex(groupId, manager, groupNum); } return(manager); }
public RobokassaReceiptRequest(SnoType snoType, IList <ReceiptOrderItem> items) { Sno = snoType.ToSnakeCaseName(); Items = items; }