public static LongVector Add(LongVector v0, LongVector v1) { var rtn = new Vector4[v0.Vector4s.Length]; for (var i = 0; i < v0.Vector4s.Length; i++) { rtn[i] = Vector4.Add(v0.Vector4s[i], v1.Vector4s[i]); } return(new LongVector(rtn, v0.Lng)); }
public Particle(BinaryReader reader) { position = new LongVector(reader); velocity = new FloatVector(reader); color = new FloatVector(reader); alpha = reader.ReadSingle(); size = reader.ReadSingle(); count = reader.ReadInt32(); type = reader.ReadInt32(); spread = reader.ReadSingle(); unknown = reader.ReadInt32(); }
public Hit(BinaryReader reader) { attacker = reader.ReadInt64(); target = reader.ReadInt64(); damage = reader.ReadSingle(); critical = reader.ReadInt32(); stuntime = reader.ReadInt32(); paddingA = reader.ReadInt32(); position = new LongVector(reader); direction = new FloatVector(reader); isYellow = reader.ReadByte(); type = (DamageType)reader.ReadByte(); showlight = reader.ReadByte(); paddingB = reader.ReadByte(); }
public StaticEntity(BinaryReader reader) { chunkX = reader.ReadInt32(); chunkY = reader.ReadInt32(); id = reader.ReadInt32(); paddingA = reader.ReadInt32(); type = reader.ReadInt32(); paddingB = reader.ReadInt32(); position = new LongVector(reader); rotation = reader.ReadInt32(); size = new FloatVector(reader); closed = reader.ReadInt32(); time = reader.ReadInt32(); unknown = reader.ReadInt32(); paddingC = reader.ReadInt32(); guid = reader.ReadInt64(); }
public Shoot(BinaryReader reader) { attacker = reader.ReadInt64(); chunkX = reader.ReadInt32(); chunkY = reader.ReadInt32(); unknownA = reader.ReadInt32(); paddingA = reader.ReadInt32(); position = new LongVector(reader); unknownV = new IntVector(reader); velocity = new FloatVector(reader); legacyDMG = reader.ReadSingle(); unknownB = reader.ReadSingle(); scale = reader.ReadSingle(); mana = reader.ReadSingle(); particles = reader.ReadSingle(); skill = reader.ReadInt32(); projectile = reader.ReadInt32(); paddingB = reader.ReadInt32(); unknownC = reader.ReadSingle(); unknownD = reader.ReadSingle(); }
unsafe public static float Dot(LongVector v0, LongVector v1) { var tmp = new LongVector(v0.Lng); fixed(float *p = &tmp.Vector4s[0].X) fixed(Vector4 * vvv0 = &v0.Vector4s[0]) fixed(Vector4 * vvv1 = &v1.Vector4s[0]) { float * pp = p; Vector4 *vv0 = vvv0; Vector4 *vv1 = vvv1; for (var i = 0; i < v0.Vector4s.Length; i++) { *pp++ = Vector4.Dot(*vv0++, *vv1++); } } //float sum = 0; //foreach (var t in tmp) // sum += t; return(tmp.Sum()); }
unsafe private static void Main(string[] args) { var arr = new float[1001]; for (var i = 0; i < arr.Length; i++) { arr[i] = i; } var arr2 = new float[1001]; for (var i = 0; i < arr.Length; i++) { arr2[i] = i + 1; } var sw = new Stopwatch(); var lv = new LongVector(arr); var lv2 = new LongVector(arr2); LongVector tmp; float[] tmpa; float sum = 0; sw.Start(); for (var i = 0; i < 1000000; i++) { // tmpa= Arra.add(arr, arr2); // sum = Arra.dot(arr, arr2); //1002001 3.34334E+08 // tmp = LongVector.Add(lv, lv2); 3.34334E+08 sum = LongVector.Dot(lv, lv2); } sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); }
// Converter: longVector v2 = longVector.FromVector( v1 ); public static LongVector FromVector(LongVector that) { return(new LongVector(that)); }
// Constructor: longVector v2 = new longVector( v1 ); public LongVector(LongVector that) : base() { this.CopyFromArray(that.ToArray()); return; }
public EntityUpdate(BinaryReader reader) { byte[] uncompressed = Zlib.Decompress(reader.ReadBytes(reader.ReadInt32())); MemoryStream stream = new MemoryStream(uncompressed); BinaryReader r = new BinaryReader(stream); guid = r.ReadInt64(); var bitfield = r.ReadInt64(); if (Tools.GetBit(bitfield, 0)) { position = new LongVector(r); } if (Tools.GetBit(bitfield, 1)) { rotation = new FloatVector(r); } if (Tools.GetBit(bitfield, 2)) { velocity = new FloatVector(r); } if (Tools.GetBit(bitfield, 3)) { acceleration = new FloatVector(r); } if (Tools.GetBit(bitfield, 4)) { extraVel = new FloatVector(r); } if (Tools.GetBit(bitfield, 5)) { viewportPitch = r.ReadSingle(); } if (Tools.GetBit(bitfield, 6)) { physicsFlags = r.ReadInt32(); } if (Tools.GetBit(bitfield, 7)) { hostility = r.ReadByte(); } if (Tools.GetBit(bitfield, 8)) { entityType = r.ReadInt32(); } if (Tools.GetBit(bitfield, 9)) { mode = r.ReadByte(); } if (Tools.GetBit(bitfield, 10)) { modeTimer = r.ReadInt32(); } if (Tools.GetBit(bitfield, 11)) { combo = r.ReadInt32(); } if (Tools.GetBit(bitfield, 12)) { lastHitTime = r.ReadInt32(); } if (Tools.GetBit(bitfield, 13)) { appearance = new Appearance(r); } if (Tools.GetBit(bitfield, 14)) { entityFlags = r.ReadInt16(); } if (Tools.GetBit(bitfield, 15)) { roll = r.ReadInt32(); } if (Tools.GetBit(bitfield, 16)) { stun = r.ReadInt32(); } if (Tools.GetBit(bitfield, 17)) { slow = r.ReadInt32(); } if (Tools.GetBit(bitfield, 18)) { ice = r.ReadInt32(); } if (Tools.GetBit(bitfield, 19)) { wind = r.ReadInt32(); } if (Tools.GetBit(bitfield, 20)) { showPatchTime = r.ReadInt32(); } if (Tools.GetBit(bitfield, 21)) { entityClass = r.ReadByte(); } if (Tools.GetBit(bitfield, 22)) { specialization = r.ReadByte(); } if (Tools.GetBit(bitfield, 23)) { charge = r.ReadSingle(); } if (Tools.GetBit(bitfield, 24)) { unused24 = new FloatVector(r); } if (Tools.GetBit(bitfield, 25)) { unused25 = new FloatVector(r); } if (Tools.GetBit(bitfield, 26)) { rayHit = new FloatVector(r); } if (Tools.GetBit(bitfield, 27)) { HP = r.ReadSingle(); } if (Tools.GetBit(bitfield, 28)) { MP = r.ReadSingle(); } if (Tools.GetBit(bitfield, 29)) { block = r.ReadSingle(); } if (Tools.GetBit(bitfield, 30)) { multipliers = new Multipliers(r); } if (Tools.GetBit(bitfield, 31)) { unused31 = r.ReadByte(); } if (Tools.GetBit(bitfield, 32)) { unused32 = r.ReadByte(); } if (Tools.GetBit(bitfield, 33)) { level = r.ReadInt32(); } if (Tools.GetBit(bitfield, 34)) { XP = r.ReadInt32(); } if (Tools.GetBit(bitfield, 35)) { parentOwner = r.ReadInt64(); } if (Tools.GetBit(bitfield, 36)) { unused36 = r.ReadInt64(); } if (Tools.GetBit(bitfield, 37)) { powerBase = r.ReadByte(); } if (Tools.GetBit(bitfield, 38)) { unused38 = r.ReadInt32(); } if (Tools.GetBit(bitfield, 39)) { unused39 = new IntVector(r); } if (Tools.GetBit(bitfield, 40)) { spawnPos = new LongVector(r); } if (Tools.GetBit(bitfield, 41)) { unused41 = new IntVector(r); } if (Tools.GetBit(bitfield, 42)) { unused42 = r.ReadByte(); } if (Tools.GetBit(bitfield, 43)) { consumable = new Item(r); } if (Tools.GetBit(bitfield, 44)) { equipment = new Item[13]; for (int i = 0; i < 13; i++) { equipment[i] = new Item(r); } } if (Tools.GetBit(bitfield, 45)) { name = new string(r.ReadChars(16)); name = name.Substring(0, name.IndexOf("\0")); } if (Tools.GetBit(bitfield, 46)) { skillDistribution = new SkillDistribution(r); } if (Tools.GetBit(bitfield, 47)) { manaCubes = r.ReadInt32(); } }
public void Filter(EntityUpdate previous) { if (position != null) { if (Math.Abs(position.x - previous.position.x) < 100000 && Math.Abs(position.y - previous.position.y) < 100000 && Math.Abs(position.z - previous.position.z) < 100000) { position = null; } } rotation = null; if (velocity != null) { if (Math.Abs(velocity.z - previous.velocity.z) < 2) { velocity = null; } } if (acceleration != null) { if (Math.Abs(acceleration.x - previous.acceleration.x) < 10 && Math.Abs(acceleration.y - previous.acceleration.y) < 10 && Math.Abs(acceleration.z - previous.acceleration.z) < 10) { acceleration = null; } } if (extraVel != null) { if (Math.Abs(extraVel.x) < 1 && Math.Abs(extraVel.y) < 1 && Math.Abs(extraVel.z) < 1) { extraVel = null; } } viewportPitch = null; physicsFlags = null; if (modeTimer != null && modeTimer > 100) { previous.modeTimer = modeTimer;//necessary for rayhit filtering modeTimer = null; } lastHitTime = null; if (roll != null && !(roll > 500)) { roll = null; } if (stun != null && stun < previous.stun) { stun = null; } if (slow != null && slow < previous.slow) { slow = null; } if (ice != null && ice < previous.ice) { ice = null; } if (wind != null && wind < previous.wind) { wind = null; } showPatchTime = null; if (charge != null) { if (Math.Abs((float)(charge - previous.charge)) < 0.1f) { charge = null; } } unused24 = null; unused25 = null; if (rayHit != null) { if (previous.mode == 0 || previous.modeTimer > 1500 || //current could be null (Math.Abs(rayHit.x - previous.rayHit.x) < 1.5f && Math.Abs(rayHit.y - previous.rayHit.y) < 1.5f && Math.Abs(rayHit.z - previous.rayHit.z) < 1.5f)) { rayHit = null; } } MP = null; multipliers = null; unused31 = null; unused32 = null; XP = null; unused36 = null; powerBase = null; unused38 = null; unused39 = null; spawnPos = null; unused41 = null; unused42 = null; skillDistribution = null; manaCubes = null; }
static void ProcessPacket(int packetid) { switch (packetid) { case 0: #region entityUpdate var entityUpdate = new EntityUpdate(reader); if (players.ContainsKey(entityUpdate.guid)) { var previous = players[entityUpdate.guid]; if (entityUpdate.modeTimer == 0) { if ((entityUpdate.mode == Mode.FireExplosion_After || (entityUpdate.mode == null && previous.mode == Mode.FireExplosion_After)) && previous.modeTimer < 1000) { firespammers[entityUpdate.guid]++; switch (firespammers[entityUpdate.guid]) { case 1: //nothing break; case 2: //warn new ChatMessage { message = "/pm #" + entityUpdate.guid + " stop spamming fire explosion, its a bannable abuse" }.Write(writer); break; default: //kick new ChatMessage { message = "/kick #" + entityUpdate.guid + " firespamming (black_bot)" }.Write(writer); break; } } else { //firespammers[entityUpdate.guid] = 0; } } entityUpdate.Merge(players[entityUpdate.guid]); } else { players.Add(entityUpdate.guid, entityUpdate); } if (entityUpdate.MP > 1f) { new ChatMessage { message = "/kick #" + entityUpdate.guid + " MP lock (black_bot)" }.Write(writer); } if (entityUpdate.name != null) { Console.ForegroundColor = ConsoleColor.DarkGreen; //Console.WriteLine(entityUpdate.guid + ": " + entityUpdate.name); } if (false && players[entityUpdate.guid].name.ToLower() == "²@blackrock") { maloxGuid = entityUpdate.guid; var opplayer = new EntityUpdate(); var x = players[entityUpdate.guid].position.x - players[personalGuid].position.x; var y = players[entityUpdate.guid].position.y - players[personalGuid].position.y; double distance = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2)); if (distance > 65536 * 40) { var follow = new EntityUpdate { position = players[entityUpdate.guid].position, guid = personalGuid }; follow.Write(writer); } if (entityUpdate.modeTimer < 50) { var shoot = new Shoot() { attacker = personalGuid, chunkX = (int)players[personalGuid].position.x / 0x1000000, chunkY = (int)players[personalGuid].position.y / 0x1000000, position = players[personalGuid].position, particles = 1f, mana = 1f, scale = 5f, projectile = ProjectileType.Arrow, }; shoot.position.x = players[maloxGuid].position.x + (long)(players[maloxGuid].rayHit.x * 0x10000); shoot.position.y = players[maloxGuid].position.y + (long)(players[maloxGuid].rayHit.y * 0x10000); shoot.position.z = players[maloxGuid].position.z + (long)((players[maloxGuid].rayHit.z + 15) * 0x10000); shoot.velocity.z = -40f; //shoot.velocity.x = (float)players[maloxGuid].position.x / 0x10000f + players[maloxGuid].rayHit.x - (float)players[personalGuid].position.x / 0x10000f; //shoot.velocity.y = (float)players[maloxGuid].position.y / 0x10000f + players[maloxGuid].rayHit.y - (float)players[personalGuid].position.y / 0x10000f; //shoot.velocity.z = (float)players[maloxGuid].position.z / 0x10000f + players[maloxGuid].rayHit.z - (float)players[personalGuid].position.z / 0x10000f; int range = 10; shoot.position.x -= (range - 1) / 2 * 0x10000; shoot.position.y -= (range - 1) / 2 * 0x10000; for (int i = 0; i < range; i++) { for (int j = 0; j < range; j++) { shoot.Write(writer); shoot.position.x += 0x10000; } shoot.position.x -= range * 0x10000; shoot.position.y += 0x10000; } } } goto case 2; //break; #endregion case 2: #region complete var antiTimeout = new EntityUpdate() { guid = personalGuid, position = players[personalGuid].position, lastHitTime = (int)swLasthittime.ElapsedMilliseconds }; antiTimeout.Write(writer); break; #endregion case 4: #region serverupdate var serverUpdate = new ServerUpdate(reader); foreach (var hit in serverUpdate.hits) { if (hit.attacker == hit.target) { continue; } Console.WriteLine(hit.attacker + " attacked " + hit.target + " with " + hit.damage); if (hit.damage > 500f && players[hit.attacker].entityClass == EntityClass.Rogue) { SendMessage("/kick #" + hit.attacker + " shuriken glitch (black_bot)"); } if (hit.target == personalGuid) { swLasthittime.Restart(); if (players[personalGuid].HP <= 0) { continue; } players[personalGuid].HP -= hit.damage / 2; var life = new EntityUpdate() { guid = personalGuid, HP = players[personalGuid].HP, lastHitTime = (int)swLasthittime.ElapsedMilliseconds }; life.Write(writer); if (players[personalGuid].HP <= 0) { SendMessage("/firework"); life.HP = players[personalGuid].HP = 3000f; life.lastHitTime = 0; life.Write(writer); swLasthittime.Restart(); } } } foreach (var chunkItemData in serverUpdate.chunkItems) { var c = new Chunk() { x = chunkItemData.chunkX, y = chunkItemData.chunkY }; if (!drops.ContainsKey(c)) { drops.Add(c, chunkItemData.droppedItems); } else { drops[c] = chunkItemData.droppedItems; } } break; #endregion case 5: #region time var time = new Time(reader); break; #endregion case 10: #region chat var chatMessage = new ChatMessage(reader, true); long sender = (long)chatMessage.sender; if (sender == 0) { Console.ForegroundColor = ConsoleColor.DarkGray; } else { Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(players[sender].name + ": "); Console.ForegroundColor = ConsoleColor.White; } Console.WriteLine(chatMessage.message); switch (chatMessage.message.ToLower()) { case ".heal_me": case ".kill_me": SendMessage("/pm #" + sender + " This command is no longer available"); break; case ".stun_me": new Hit { attacker = personalGuid, target = sender, damage = 0f, critical = true, stuntime = 10000, showlight = true, position = players[sender].position }.Write(writer); SendMessage("/pm #" + sender + " have fun sticking to the ground for 10 seconds :P"); break; case ".shutdown": if (chatMessage.message == ".shutdOWN") { SendMessage("goodbye"); Task.Delay(250).Wait(); Environment.Exit(0); } else { SendMessage("no permission"); } break; case ".clear": foreach (var kvp in drops) { for (int i = 0; i < kvp.Value.Count; i++) { var pickup = new EntityAction() { type = ActionType.PickUp, chunkX = kvp.Key.x, chunkY = kvp.Key.y, index = i, item = kvp.Value[i].item, }; pickup.Write(writer); pickup.Write(writer); } } //SendMessage(".\n\n\n\n\n\n\n\n\n\n."); break; case ".items": #region items double timePassed = swCooldown.ElapsedMilliseconds / 1000f; if (timePassed < 30f) { SendMessage("/pm #" + sender + " command is on cooldown (30sec)"); break; } bool fullyGeared = true; var pl = players[sender]; for (int i = 1; i < 9; i++) { if (pl.equipment[i].level < pl.level || pl.equipment[i].rarity != ItemRarity.Legendary) { fullyGeared = false; break; } } if (pl.equipment[10].type == 0 || pl.equipment[11].type == 0) { fullyGeared = false; } if (fullyGeared) { SendMessage("/pm #" + chatMessage.sender + " you already have maximum gear, don't spam items."); break; } swCooldown.Restart(); var port = new EntityUpdate { position = players[sender].position, guid = personalGuid }; port.Write(writer); players[personalGuid].position = port.position; var items = new List <Item>(); var rng = new Random(); for (byte i = 3; i <= 9; i++) { items.Add(new Item() { type = (ItemType)i, modifier = rng.Next(0x7FFFFFFF), rarity = ItemRarity.Legendary, level = (short)players[sender].level }); } items[5].material = (ItemMaterial)rng.Next(11, 12); items[6].material = (ItemMaterial)rng.Next(11, 12); items.Add(items[6]); ItemMaterial armorMaterial; switch (players[sender].entityClass) { case EntityClass.Warrior: //items[0].subtype = 0; items[0].material = ItemMaterial.Iron; for (int i = 0; i < 6; i++) { items.Add(new Item() { type = ItemType.Weapon, material = ItemMaterial.Iron, modifier = rng.Next(0x7FFFFFFF), rarity = ItemRarity.Legendary, level = (short)players[sender].level }); } items[8].subtype = 1; items[9].subtype = 2; items[10].subtype = 13; items[11].subtype = 15; items[12].subtype = 16; items[13].subtype = 17; armorMaterial = ItemMaterial.Iron; break; case EntityClass.Ranger: items[0].subtype = 6; items[0].material = ItemMaterial.Wood; for (int i = 0; i < 2; i++) { items.Add(new Item() { type = ItemType.Weapon, material = ItemMaterial.Wood, modifier = rng.Next(0x7FFFFFFF), rarity = ItemRarity.Legendary, level = (short)players[sender].level }); } items[8].subtype = 7; items[9].subtype = 8; armorMaterial = ItemMaterial.Linen; break; case EntityClass.Mage: items[0].subtype = 10; items[0].material = ItemMaterial.Wood; for (int i = 0; i < 3; i++) { items.Add(new Item() { type = ItemType.Weapon, material = (ItemMaterial)rng.Next(11, 12), modifier = rng.Next(0x7FFFFFFF), rarity = ItemRarity.Legendary, level = (short)players[sender].level }); } items[8].subtype = 11; items[8].material = ItemMaterial.Wood; items[9].subtype = 12; items[10].subtype = 12; armorMaterial = ItemMaterial.Silk; break; case EntityClass.Rogue: items[0].subtype = 3; items[0].material = ItemMaterial.Iron; for (int i = 0; i < 2; i++) { items.Add(new Item() { type = ItemType.Weapon, material = ItemMaterial.Iron, modifier = rng.Next(0x7FFFFFFF), rarity = ItemRarity.Legendary, level = (short)players[sender].level }); } items[8].subtype = 4; items[9].subtype = 5; armorMaterial = ItemMaterial.Cotton; break; default: goto case EntityClass.Warrior; } for (int i = 1; i <= 4; i++) { items[i].material = armorMaterial; } items.Add(new Item { type = ItemType.Special, material = ItemMaterial.Wood, }); var drop = new EntityAction { type = ActionType.Drop }; foreach (var that in items) { drop.item = that; drop.Write(writer); } SendMessage("items delivered"); #endregion break; case ".come_here": var port2 = new EntityUpdate { position = players[sender].position, guid = personalGuid }; port2.Write(writer); break; case ".info": case ".help": SendMessage("hi " + players[sender].name + "! I am a computer controlled player, created by Malox and @Blackrock. I can do various stuff, type .commands for more"); break; case ".commands": SendMessage(".info .commands .items .countdown come_here .stun_me .69 .restart .come_here"); break; case ".countdown": Task.Factory.StartNew(Countdown); break; case ".killall": if (chatMessage.message == ".kiLLaLL") { foreach (var p in players.Values) { if (p.guid < 1000 && p.guid > 2) { new EntityUpdate { position = p.position, guid = personalGuid }.Write(writer); Task.Delay(100).Wait(); new Hit { attacker = personalGuid, target = p.guid, damage = 10000f, }.Write(writer); Task.Delay(100).Wait(); } } } else { SendMessage("haha you wish!"); } break; case ".69": new EntityUpdate { position = players[sender].position, guid = personalGuid }.Write(writer); var sixtynine = new Hit { attacker = personalGuid, target = sender, damage = 138f, //-0.2f, critical = true, showlight = true, position = players[sender].position }; for (int i = 0; i < 30; i++) { sixtynine.damage *= -1; sixtynine.Write(writer); Task.Delay(50).Wait(); } break; case ".derp": // ".idontevenknow": if (chatMessage.message == ".dERp") { var tele = new EntityUpdate { position = new LongVector() { z = players[sender].position.z }, guid = personalGuid }; var dropperino = new EntityAction { type = ActionType.Drop, item = new Item() { type = ItemType.PetFood, //1, subtype = 19, //1, material = 0, level = 1, }, }; for (int i = 0; i < 25; i++) { for (int j = 0; j < 25; j++) { tele.position.x = players[sender].position.x + (i * 90000); tele.position.y = players[sender].position.y + (j * 90000); tele.Write(writer); dropperino.Write(writer); } } } else { SendMessage("no permission"); } break; case ".restart": SendMessage("I'll be right back"); throw new Exception(); case ".boost": if (chatMessage.message == ".bOOst") { var dayum = new Hit { attacker = personalGuid, target = sender, damage = -10000f, critical = true, showlight = true, position = players[sender].position }; for (int i = 0; i < 30; i++) { dayum.Write(writer); SendMessage("/firework"); Task.Delay(50).Wait(); } } else { SendMessage("no permission"); } break; case ".ping": SendMessage("pong!"); break; default: break; } if (chatMessage.message.Contains("change") && chatMessage.message.Contains("team") && chatMessage.sender != personalGuid) { SendMessage("./team_join red/blue"); } break; #endregion case 15: #region mapseed var mapSeed = new MapSeed(reader); break; #endregion case 16: #region join var join = new Join(reader); personalGuid = join.guid; var playerstats = new EntityUpdate() { position = new LongVector() { x = 550299161554, //8020800000, y = 550289388106, //8020800000, z = 6296719, }, rotation = new FloatVector(), velocity = new FloatVector(), acceleration = new FloatVector(), extraVel = new FloatVector(), viewportPitch = 0, physicsFlags = 0b00000000_00000000_00000000_00010001, //17 hostility = 0, entityType = EntityType.HumanMale, mode = 0, modeTimer = 0, combo = 0, lastHitTime = 0, appearance = new EntityUpdate.Appearance() { character_size = new FloatVector() { x = 0.9600000381f, y = 0.9600000381f, z = 2.160000086f }, head_model = 1249, hair_model = 1265, hand_model = 431, foot_model = 432, body_model = 1, tail_model = -1, shoulder2_model = -1, wings_model = -1, head_size = 1.00999999f, body_size = 1f, hand_size = 1f, foot_size = 0.9800000191f, shoulder2_size = 1f, weapon_size = 0.9499999881f, tail_size = 0.8000000119f, shoulder_size = 1f, wings_size = 1f, body_offset = new FloatVector() { z = -5f }, head_offset = new FloatVector() { y = 0.5f, z = 5f }, hand_offset = new FloatVector() { x = 6f, }, foot_offset = new FloatVector() { x = 3f, y = 1f, z = -10.5f }, back_offset = new FloatVector() { y = -8f, z = 2f }, }, entityFlags = 0b00000000_00000000_00000000_00100000, //64 roll = 0, stun = 0, slow = 0, ice = 0, wind = 0, showPatchTime = 0, entityClass = EntityClass.Warrior, specialization = 1, charge = 0, unused24 = new FloatVector(), unused25 = new FloatVector(), rayHit = new FloatVector(), HP = 3000f, MP = 0, block = 1, multipliers = new EntityUpdate.Multipliers() { HP = 100, attackSpeed = 1, damage = 1, armor = 1, resi = 1, }, unused31 = 0, unused32 = 0, level = 500, XP = 0, parentOwner = 0, unused36 = 0, powerBase = 0, unused38 = 0, unused39 = new IntVector(), spawnPos = new LongVector(), unused41 = new IntVector(), unused42 = 0, consumable = new Item(), equipment = new Item[13], name = "@BLACK_BOT", skillDistribution = new EntityUpdate.SkillDistribution() { ability1 = 5, ability2 = 5, ability3 = 5, }, manaCubes = 0, }; for (int i = 0; i < 13; i++) { playerstats.equipment[i] = new Item() { }; } var e = playerstats.equipment; e[1].type = ItemType.Amulet; e[1].modifier = 3; e[1].rarity = ItemRarity.Legendary; e[1].material = ItemMaterial.Silver; e[1].level = 647; e[2].type = ItemType.Chest; e[2].modifier = 63; e[2].rarity = ItemRarity.Epic; e[2].material = ItemMaterial.Iron; e[2].level = 647; e[3].type = ItemType.Boots; e[3].modifier = 63; e[3].rarity = ItemRarity.Legendary; e[3].material = ItemMaterial.Iron; e[3].level = 647; e[4].type = ItemType.Gloves; e[4].modifier = 0; e[4].rarity = ItemRarity.Legendary; e[4].material = ItemMaterial.Iron; e[4].level = 647; e[5].type = ItemType.Shoulder; e[5].modifier = 84; e[5].rarity = ItemRarity.Epic; e[5].material = ItemMaterial.Iron; e[5].level = 647; e[6].type = ItemType.Weapon; e[6].subtype = 2; e[6].modifier = -67; e[6].rarity = ItemRarity.Epic; e[6].material = ItemMaterial.Iron; e[6].level = 647; e[7] = e[6]; playerstats.Write(writer); swLasthittime.Start(); players.Add(personalGuid, playerstats); SendMessage("/login " + password); SendMessage("/trail 0 0 0"); SendMessage("online (version 3.4.1)"); break; #endregion case 17: //serving sending the right version if yours is wrong #region version var version = new ProtocolVersion(reader); break; #endregion case 18: #region server full //empty break; #endregion default: Console.WriteLine(string.Format("unknown packet id: {0}", packetid)); break; } }
public static void Teleport(LongVector destination) { memory.WriteLong(EntityStart + 0x10, destination.x); memory.WriteLong(EntityStart + 0x18, destination.y); memory.WriteLong(EntityStart + 0x20, destination.z); }
public Shoot() { position = new LongVector(); unknownV = new IntVector(); velocity = new FloatVector(); }
static void ProcessPacket(int packetid) { switch (packetid) { case 0: #region entityUpdate var entityUpdate = new EntityUpdate(reader); if (players.ContainsKey(entityUpdate.guid)) { entityUpdate.Merge(players[entityUpdate.guid]); } else { players.Add(entityUpdate.guid, entityUpdate); } if (players[entityUpdate.guid].name == "malox") { maloxGuid = entityUpdate.guid; var x = players[entityUpdate.guid].position.x - players[personalGuid].position.x; var y = players[entityUpdate.guid].position.y - players[personalGuid].position.y; double distance = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2)); if (distance > 65536 * 40) { var follow = new EntityUpdate { position = players[entityUpdate.guid].position, guid = personalGuid }; follow.Write(writer); } if (entityUpdate.modeTimer < 50) { var shoot = new Shoot() { attacker = personalGuid, chunkX = (int)players[personalGuid].position.x / 0x1000000, chunkY = (int)players[personalGuid].position.y / 0x1000000, position = players[personalGuid].position, particles = 1f, mana = 1f, scale = 1f, projectile = 0, }; shoot.position.x = players[maloxGuid].position.x + (long)(players[maloxGuid].rayHit.x * 0x10000); shoot.position.y = players[maloxGuid].position.y + (long)(players[maloxGuid].rayHit.y * 0x10000); shoot.position.z = players[maloxGuid].position.z + (long)((players[maloxGuid].rayHit.z + 15) * 0x10000); shoot.velocity.z = -40f; //shoot.velocity.x = (float)players[maloxGuid].position.x / 0x10000f + players[maloxGuid].rayHit.x - (float)players[personalGuid].position.x / 0x10000f; //shoot.velocity.y = (float)players[maloxGuid].position.y / 0x10000f + players[maloxGuid].rayHit.y - (float)players[personalGuid].position.y / 0x10000f; //shoot.velocity.z = (float)players[maloxGuid].position.z / 0x10000f + players[maloxGuid].rayHit.z - (float)players[personalGuid].position.z / 0x10000f; int range = 20; shoot.position.x -= (range - 1) / 2 * 0x10000; shoot.position.y -= (range - 1) / 2 * 0x10000; for (int i = 0; i < range; i++) { for (int j = 0; j < range; j++) { shoot.Write(writer); shoot.position.x += 0x10000; } shoot.position.x -= range * 0x10000; shoot.position.y += 0x10000; } } } break; #endregion case 2: #region complete new EntityUpdate() { lastHitTime = (int)stopWatch.ElapsedMilliseconds }.Write(writer); break; #endregion case 4: #region serverupdate var serverUpdate = new ServerUpdate(reader); foreach (var hit in serverUpdate.hits) { if (hit.target == personalGuid) { stopWatch.Restart(); players[personalGuid].HP -= hit.damage; var life = new EntityUpdate() { HP = players[personalGuid].HP, }; life.Write(writer); if (players[personalGuid].HP <= 0) { life.HP = 1623f; life.Write(writer); } } } break; #endregion case 5: #region time var time = new Time(reader); break; #endregion case 10: #region chat var chatMessage = new ChatMessage(reader, true); if (chatMessage.sender == 0) { Console.ForegroundColor = ConsoleColor.DarkGray; } else { Console.ForegroundColor = ConsoleColor.Cyan; Console.Write(players[chatMessage.sender].name + ": "); Console.ForegroundColor = ConsoleColor.White; } Console.WriteLine(chatMessage.message); if (chatMessage.message == "!give_me_items") { var port = new EntityUpdate { position = players[chatMessage.sender].position, guid = personalGuid }; port.Write(writer); players[personalGuid].position = port.position; var items = new List <Item>(); var rng = new Random(); for (byte i = 3; i <= 9; i++) { items.Add(new Item() { type = i, modifier = rng.Next(0x7FFFFFFF), rarity = 4, level = (short)players[chatMessage.sender].level }); } items[5].material = (byte)rng.Next(11, 12); items[6].material = (byte)rng.Next(11, 12); items.Add(items[6]); byte armorMaterial; switch (players[chatMessage.sender].entityClass) { case 0: //warrior //items[0].subtype = 0; items[0].material = 1; for (int i = 0; i < 6; i++) { items.Add(new Item() { type = 3, material = 1, modifier = rng.Next(0x7FFFFFFF), rarity = 4, level = (short)players[chatMessage.sender].level }); } items[8].subtype = 1; items[9].subtype = 2; items[10].subtype = 13; items[11].subtype = 15; items[12].subtype = 16; items[13].subtype = 17; armorMaterial = 1; break; case 1: //mage items[0].subtype = 10; items[0].material = 2; for (int i = 0; i < 3; i++) { items.Add(new Item() { type = 3, material = (byte)rng.Next(11, 12), modifier = rng.Next(0x7FFFFFFF), rarity = 4, level = (short)players[chatMessage.sender].level }); } items[8].subtype = 11; items[8].material = 2; items[9].subtype = 12; items[10].subtype = 12; armorMaterial = 25; break; case 2: //ranger items[0].subtype = 6; items[0].material = 2; for (int i = 0; i < 2; i++) { items.Add(new Item() { type = 3, material = 2, modifier = rng.Next(0x7FFFFFFF), rarity = 4, level = (short)players[chatMessage.sender].level }); } items[8].subtype = 7; items[9].subtype = 8; armorMaterial = 26; break; case 3: //rogue items[0].subtype = 3; items[0].material = 1; for (int i = 0; i < 2; i++) { items.Add(new Item() { type = 3, material = 1, modifier = rng.Next(0x7FFFFFFF), rarity = 4, level = (short)players[chatMessage.sender].level }); } items[8].subtype = 4; items[9].subtype = 5; armorMaterial = 27; break; default: goto case 0; } for (int i = 1; i <= 4; i++) { items[i].material = armorMaterial; } foreach (var that in items) { var drop = new EntityAction { type = (int)Database.ActionType.drop, item = that }; drop.Write(writer); } //item = new Item { // type = 3, // 3 = weapon // rarity = 4, // 4 = legendary // level = 647, // material = 1 //} } else if (chatMessage.message == "!come_here") { var port = new EntityUpdate { position = players[chatMessage.sender].position, guid = personalGuid }; port.Write(writer); } break; #endregion case 15: #region mapseed var mapSeed = new MapSeed(reader); break; #endregion case 16: #region join var join = new Join(reader); personalGuid = join.guid; var playerstats = new EntityUpdate() { position = new LongVector(), rotation = new FloatVector(), velocity = new FloatVector(), acceleration = new FloatVector(), extraVel = new FloatVector(), viewportPitch = 0, physicsFlags = 0b00000000_00000000_00000000_00010001, //17 hostility = 0, entityType = 0, mode = 0, modeTimer = 0, combo = 0, lastHitTime = 0, appearance = new Appearance() { character_size = new FloatVector() { x = 0.9600000381f, y = 0.9600000381f, z = 2.160000086f }, head_model = 1236, hair_model = 1280, hand_model = 430, foot_model = 432, body_model = 1, tail_model = -1, shoulder2_model = -1, wings_model = -1, head_size = 1.00999999f, body_size = 1f, hand_size = 1f, foot_size = 0.9800000191f, shoulder2_size = 1f, weapon_size = 0.9499999881f, tail_size = 0.8000000119f, shoulder_size = 1f, wings_size = 1f, body_offset = new FloatVector() { z = -5f }, head_offset = new FloatVector() { y = 0.5f, z = 5f }, hand_offset = new FloatVector() { x = 6f, }, foot_offset = new FloatVector() { x = 3f, y = 1f, z = -10.5f }, back_offset = new FloatVector() { y = -8f, z = 2f }, }, entityFlags = 0b00000000_00000000_00000000_00100000, //64 roll = 0, stun = 0, slow = 0, ice = 0, wind = 0, showPatchTime = 0, entityClass = 2, specialization = 0, charge = 0, unused24 = new FloatVector(), unused25 = new FloatVector(), rayHit = new FloatVector(), HP = 1623f, MP = 0, block = 1, multipliers = new Multipliers() { HP = 100, attackSpeed = 1, damage = 1, armor = 1, resi = 1, }, unused31 = 0, unused32 = 0, level = 500, XP = 0, parentOwner = 0, unused36 = 0, powerBase = 0, unused38 = 0, unused39 = new IntVector(), spawnPos = new LongVector(), unused41 = new IntVector(), unused42 = 0, consumable = new Item(), equipment = new Item[13], name = "ET_bot", skillDistribution = new SkillDistribution() { ability1 = 5, ability2 = 5, ability3 = 5, }, manaCubes = 0, }; for (int i = 0; i < 13; i++) { playerstats.equipment[i] = new Item(); } playerstats.Write(writer); stopWatch.Start(); players.Add(personalGuid, playerstats); break; #endregion case 17: //serving sending the right version if yours is wrong #region version var version = new ProtocolVersion(reader); break; #endregion case 18: #region server full //empty break; #endregion default: Console.WriteLine(string.Format("unknown packet id: {0}", packetid)); break; } }