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 { } }
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; } }