Exemplo n.º 1
0
        public Ability(ServerZoneIpcType Type, byte[] message, int offset)
        {
            this.Type = Type;
            int headerLength = 42;

            PacketParser.ParsePacket(message, offset, out Header);

            int maxCount = MaxCount();
            int count    = Header.Count > maxCount ? maxCount : Header.Count;

            int targetOffset = offset + headerLength + 4 * 16 * maxCount + 6;

            Unknown8 = BitConverter.ToUInt32(message, targetOffset - 6);
            Unknown9 = BitConverter.ToUInt16(message, targetOffset - 2);

            Target = new AbilityTarget[count];
            for (int i = 0; i < count; ++i)
            {
                var targetItem = new AbilityTarget();
                targetItem.ID       = BitConverter.ToUInt32(message, targetOffset + i * 2 * 4);
                targetItem.Unknown0 = BitConverter.ToUInt32(message, targetOffset + i * 2 * 4 + 4);
                targetItem.ParseArguments(message, headerLength + 4 * 16 * i);
                Target[i] = targetItem;
            }
        }
Exemplo n.º 2
0
        public static IPCBase ParseIPCPacket(ServerZoneIpcType type, byte[] message, int offset, Dictionary <string, string> parsedValues)
        {
            switch (type)
            {
            case ServerZoneIpcType.Announcement:
                return(new IPC.Announcement(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.CompanyBoard:
                return(new IPC.CompanyBoard(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.GroupMessage:
                return(new IPC.GroupMessage(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.PublicMessage:
                return(new IPC.PublicMessage(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.Ability1:
            case ServerZoneIpcType.Ability8:
            case ServerZoneIpcType.Ability16:
            case ServerZoneIpcType.Ability24:
            case ServerZoneIpcType.Ability32:
                return(new IPC.Ability(type, message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.AddStatusEffect:
                return(new IPC.AddStatusEffect(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.StatusEffectList:
                return(new IPC.StatusEffectList(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.ItemInit:
                return(new IPC.ItemInit(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.ItemChange:
                return(new IPC.ItemChange(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.ItemSimple:
                return(new IPC.ItemSimple(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.ActorControl143:
                return(new IPC.ActorControl143(message, offset).WriteParams(parsedValues));

            case ServerZoneIpcType.ActorMove:
            case (ServerZoneIpcType)0x0145:
                return(new IPCIgnore());

            default:
                parsedValues.Add("Data", "(unknown)");
                return(null);
            }
        }