private void spawnProjectile(TeraPacketParser p)
        {
            ulong          i   = (ulong)p["id"].value;
            ulong          pId = (ulong)p["player id"].value;
            TeraProjectile pr;
            TeraPlayer     pl;

            if (projectiles.TryGetValue(i, out pr))
            {
                if (players.TryGetValue(pId, out pl))
                {
                    pr.player = pl;
                    return;
                }
                projectiles.Remove(i);
                return;
            }
            if (players.TryGetValue(pId, out pl))
            {
                pr = new TeraProjectile()
                {
                    id = i, player = pl
                };
                projectiles.Add(i, pr);
                return;
            }
        }
        private void updatePartyMembers(TeraPacketParser p)
        {
            ushort count = (ushort)p["count"].value;

            for (int i = 0; i < count; i++)
            {
            }
        }
        private void deSpawnProjectile(TeraPacketParser p)
        {
            ulong          i = (ulong)p["id"].value;
            TeraProjectile pr;

            if (projectiles.TryGetValue(i, out pr))
            {
                projectiles.Remove(i);
            }
        }
        private TeraPlayer userStatusChange(TeraPacketParser p)
        {
            ulong      i = (ulong)p["id"].value;
            TeraPlayer pl;

            if (!players.TryGetValue(i, out pl))
            {
                return(null);
            }
            pl.inBattle = (byte)p["status"].value > 0;
            return(pl);
        }
        TeraPlayer deSpawnPlayer(TeraPacketParser p)
        {
            TeraPlayer pl;

            if (!players.TryGetValue((ulong)p["id"].value, out pl))
            {
                return new TeraPlayer()
                       {
                           id = (ulong)p["id"].value
                       }
            }
            ;
            players.Remove(pl.id);
            return(pl);
        }
        private DamageEventArgs damage(TeraPacketParser p)
        {
            ulong          i = (ulong)p["attacker id"].value;
            TeraProjectile pr;

            if (projectiles.TryGetValue(i, out pr))
            {
                return(new DamageEventArgs(pr,
                                           (ulong)(uint)p["damage"].value,
                                           (ushort)p["type"].value));
            }
            TeraPlayer pl;

            if (players.TryGetValue(i, out pl))
            {
                return(new DamageEventArgs(pl,
                                           (ulong)(uint)p["damage"].value,
                                           (ushort)p["type"].value));
            }
            return(null);
        }
        TeraPlayer spawnPlayer(TeraPacketParser p)
        {
            string     n = (string)p["name"].value;
            ulong      i = (ulong)p["id"].value;
            ushort     l = 0;
            TeraPlayer player;

            if (players.TryGetValue(i, out player))
            {
                player.id = i; player.name = n; player.level = l;
            }
            else
            {
                player = new TeraPlayer()
                {
                    name = n, id = i, level = l
                };
                players.Add(i, player);
            }
            return(player);
        }
        TeraPlayer login(TeraPacketParser p)
        {
            string     n = (string)p["name"].value;
            ulong      i = (ulong)p["player id"].value;
            ushort     l = (ushort)p["level"].value;
            TeraPlayer player;

            if (players.TryGetValue(i, out player))
            {
                player.id = i; player.name = n; player.level = l;
            }
            else
            {
                player = new TeraPlayer()
                {
                    name = n, id = i, level = l
                };
                players.Add(i, player);
            }
            selfId = i;
            return(player);
        }
        public void reMake()
        {
            try
            {
                string str            = "{0:X4} - {1} : {2}\n\n{3}";
                string str_with_shift = "{0:X4}+{1} - {2} : {3}\n\n{4}";
                try
                {
                    ushort start = UInt16.Parse(numericBoxStart.Text);
                    ushort size  = UInt16.Parse(numericBoxSize.Text);
                    string type  = comboBoxType.SelectedItem.ToString();
                    switch (type)
                    {
                    case "bitarray":
                        BitArray ba = new BitArray(new byte[1] {
                            data[start]
                        });
                        StringBuilder sb = new StringBuilder();
                        for (int i = 0; i < ba.Length; i++)
                        {
                            if (ba[i])
                            {
                                sb.Append("1");
                            }
                            else
                            {
                                sb.Append("0");
                            }
                        }
                        str = String.Format(str, start, sb.ToString(), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 1));
                        break;

                    case "byte": str = String.Format(str, start, data[start], type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 1)); break;

                    case "sbyte": str = String.Format(str, start, (sbyte)data[start], type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 1)); break;

                    case "ushort": str = String.Format(str, start, BitConverter.ToUInt16(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 2)); break;

                    case "short": str = String.Format(str, start, BitConverter.ToInt16(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 2)); break;

                    case "uint": str = String.Format(str, start, BitConverter.ToUInt32(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 4)); break;

                    case "int": str = String.Format(str, start, BitConverter.ToInt32(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 4)); break;

                    case "ulong": str = String.Format(str, start, BitConverter.ToUInt64(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 8)); break;

                    case "long": str = String.Format(str, start, BitConverter.ToInt64(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 8)); break;

                    case "float": str = String.Format(str, start, BitConverter.ToSingle(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 4)); break;

                    case "double": str = String.Format(str, start, BitConverter.ToDouble(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 8)); break;

                    case "char": str = String.Format(str, start, BitConverter.ToChar(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 1)); break;

                    case "string": str = String.Format(str, start, TeraPacketParser.byteArrayToString(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, TeraPacketParser.byteArrayToString(data, start).Length)); break;

                    case "boolean": str = String.Format(str, start, BitConverter.ToBoolean(data, start), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, 1)); break;

                    case "hex": str = String.Format(str, start, TeraPacketParser.byteArrayToHexString(data, start, size), type, TeraPacketParser.byteArrayToHexStringRightToLeft(data, start, size)); break;

                    default: str = String.Format(str_with_shift, start, size, "unknown", type); break;
                    }
                }
                catch (Exception e)
                {
                    str = e.Message;
                }
                textBox.Text = str;
            }
            catch { }
        }
示例#10
0
        public void parsePacket(object sender, EventArgs e)
        {
            PacketEventArgs ev = (PacketEventArgs)e;

            switch (version)
            {
            case OpCodeVersion.P2805:
                switch ((OpCode2805)ev.packet.opCode)
                {
                case OpCode2805.S_LOGIN:
                {
                    TeraPacketParser p = TeraPacketCreator.create(ev.packet);
                    var pl             = login(p);
                    if (onLogin != null)
                    {
                        onLogin(this, new PlayerEventArgs(pl));
                    }
                }
                break;

                case OpCode2805.S_SPAWN_USER:
                {
                    TeraPacketParser p = TeraPacketCreator.create(ev.packet);
                    var pl             = spawnPlayer(p);
                    if (onSpawnPlayer != null)
                    {
                        onSpawnPlayer(this, new PlayerEventArgs(pl));
                    }
                }
                break;

                case OpCode2805.S_DESPAWN_USER:
                {
                    TeraPacketParser p = TeraPacketCreator.create(ev.packet);
                    var pl             = deSpawnPlayer(p);
                    if (onDeSpawnPlayer != null)
                    {
                        onDeSpawnPlayer(this, new PlayerEventArgs(pl));
                    }
                }
                break;

                case OpCode2805.S_SPAWN_PROJECTILE:
                {
                    TeraPacketParser p = TeraPacketCreator.create(ev.packet);
                    spawnProjectile(p);
                }
                break;

                case OpCode2805.S_DESPAWN_PROJECTILE:
                {
                    TeraPacketParser p = TeraPacketCreator.create(ev.packet);
                    deSpawnProjectile(p);
                }
                break;

                case OpCode2805.S_EACH_SKILL_RESULT:
                {
                    TeraPacketParser p = TeraPacketCreator.create(ev.packet);
                    var el             = damage(p);
                    if (el != null)
                    {
                        if (onDamage != null)
                        {
                            onDamage(this, el);
                        }
                    }
                }
                break;

                case OpCode2805.S_USER_STATUS:
                {
                    TeraPacketParser p = TeraPacketCreator.create(ev.packet);
                    var pl             = userStatusChange(p);
                    if (pl != null)
                    {
                        if (pl.inBattle)
                        {
                            if (onBattleStart != null)
                            {
                                onBattleStart(this, new PlayerEventArgs(pl));
                            }
                        }
                        else
                        {
                            if (onBattleEnd != null)
                            {
                                onBattleEnd(this, new PlayerEventArgs(pl));
                            }
                        }
                    }
                }
                break;

                case OpCode2805.S_CLEAR_ALL_HOLDED_ABNORMALITY:
                    clearAllAbnormality();
                    if (onClearAbnormality != null)
                    {
                        onClearAbnormality(this, EventArgs.Empty);
                    }
                    break;
                }
                break;
            }
        }