Exemplo n.º 1
0
        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,
            });
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
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;
 }