public SpawnMonster(Monster m) : base(PacketCmdS2C.PKT_S2C_ObjectSpawn) { buffer.Write(m.getNetId()); buffer.Write((short)345); // buffer.Write((short)343); buffer.Write((byte)99);// 99 for jungle monster, 3 for minion buffer.Write(m.getNetId()); buffer.Write(m.getNetId()); buffer.Write((byte)64); buffer.Write((float)m.getX()); //x buffer.Write((float)m.getZ()); //z buffer.Write((float)m.getY()); //y buffer.Write((float)m.getX()); //x buffer.Write((float)m.getZ()); //z buffer.Write((float)m.getY()); //y buffer.Write((float)m.getFacing().X); //facing x buffer.Write((float)m.getMap().getHeightAtLocation(m.getFacing().X, m.getFacing().Y)); //facing z buffer.Write((float)m.getFacing().Y); //facing y var str = m.getName(); foreach (var b in Encoding.Default.GetBytes(str)) // starting with a string -> Dragon6.1.1 buffer.Write(b); buffer.fill(0, 64 - str.Length); foreach (var b in Encoding.Default.GetBytes(m.getModel())) // starting with a string -> Dragon buffer.Write(b); buffer.fill(0, 64 - m.getModel().Length); str = m.getName(); foreach (var b in Encoding.Default.GetBytes(str)) // starting with a string -> Dragon6.1.1 buffer.Write(b); buffer.fill(0, 64 - str.Length); buffer.fill(0, 64); // empty buffer.Write((int)300); buffer.fill(0, 12); buffer.Write((int)1); //campId 1 buffer.Write((int)100); buffer.Write((int)74); buffer.Write((long)1); buffer.Write((float)115.0066f); buffer.Write((byte)0); // buffer.fill(0, 13); buffer.Write((sbyte)-128); // always 0x80/-128 buffer.Write((byte)63); // always 0x3F/63 buffer.fill(0, 13); buffer.Write((byte)3); //type 3=champ/jungle; 2=minion buffer.Write((int)13337); buffer.Write((float)m.getX()); //x buffer.Write((float)m.getY()); //y buffer.Write((float)-0.8589599f); // rotation1 from -1 to 1 buffer.Write((float)0.5120428f); //rotation2 from -1 to 1 }