private bool LoadZelda(CString levelData, string fileVersion) { // Get the appropriate filesystem. //CFileSystem* fileSystem = server->getFileSystem(); //if (server->getSettings()->getBool("nofoldersconfig", false) == false) // fileSystem = server->getFileSystem(FS_LEVEL); // Path-To-File //actualLevelName = levelName = pLevelName; //fileName = fileSystem->find(pLevelName); //modTime = fileSystem->getModTime(pLevelName); // Check if it is actually a .graal level. The 1.39-1.41r1 client actually // saved .zelda as .graal. if (fileVersion.Substring(0, 2) == "GR") return this.LoadGraal(levelData, fileVersion); int v = -1; if (fileVersion == "Z3-V1.03") v = 3; else if (fileVersion == "Z3-V1.04") v = 4; if (v == -1) return false; #region Load tiles. bool layerExists = false; foreach (KeyValuePair<int, GraalLevelTileList> l in this.layers) if (l.Key == 0) layerExists = true; if (!layerExists) this.layers[0] = new GraalLevelTileList(); { int bits = (v > 4 ? 13 : 12); int read = 0; uint buffer = 0; long code = 0; int[] tiles = new int[2] { -1, -1 }; int boardIndex = 0; int count = 1; bool doubleMode = false; // Read the tiles. while (boardIndex < 64 * 64 && levelData.BytesLeft != 0) { // Every control code/tile is either 12 or 13 bits. WTF. // Read in the bits. while (read < bits) { buffer += ((uint)levelData.ReadGByte1()) << read; read += 8; } // Pull out a single 12/13 bit code from the buffer. code = buffer & (bits == 12 ? 0xFFF : 0x1FFF); buffer >>= bits; read -= bits; Console.WriteLine("Code&bits: " + (code & (bits == 12 ? 0x800 : 0x1000))); // See if we have an RLE control code. // Control codes determine how the RLE scheme works. if ((code & (bits == 12 ? 0x800 : 0x1000)) != 0) { // If the 0x100 bit is set, we are in a double repeat mode. // {double 4}56 = 56565656 if ((code & 0x100) != 0) doubleMode = true; // How many tiles do we count? count = (int)(code & 0xFF); continue; } // If our count is 1, just read in a tile. This is the default mode. if (count == 1) { GraalLevelTile tile = this.layers[0].AddTile(boardIndex++, (int)code); continue; } // If we reach here, we have an RLE scheme. // See if we are in double repeat mode or not. if (doubleMode) { // Read in our first tile. if (tiles[0] == -1) { tiles[0] = (int)code; continue; } // Read in our second tile. tiles[1] = (int)code; // Add the tiles now. for (int i = 0; i < count && boardIndex < 64 * 64 - 1; ++i) { GraalLevelTile tile = this.layers[0].AddTile(boardIndex++, tiles[0]); GraalLevelTile tile2 = this.layers[0].AddTile(boardIndex++, tiles[1]); } // Clean up. tiles[0] = tiles[1] = -1; doubleMode = false; count = 1; } // Regular RLE scheme. else { GraalLevelTile tile = null; for (int i = 0; i < count && boardIndex < 64 * 64; ++i) tile = this.layers[0].AddTile(boardIndex++, (int)code); count = 1; } } } #endregion #region Load the links. { while (levelData.BytesLeft != 0) { CString line = levelData.ReadString('\n'); if (line.Length == 0 || line.Text == "#") break; // Assemble the level string. CStringList vline = new CStringList(); vline.Load(line.Text, ' '); CString level = vline.Get(0); if (vline.Count > 7) { for (int i = 0; i < vline.Count - 7; ++i) level += " " + vline.Get(1 + i); } int offset = vline.Count - 7; //GraalLevelLink link = new GraalLevelLink(vline.Get(0).Text, vline.Get(1).ToInt(), vline.Get(2).ToInt(), vline.Get(3).ToInt(), vline.Get(4).ToInt(),vline.Get(5).Text, vline.Get(6).Text); //this.LinkList.Add(this.LinkList.Count + 1, link); } } #endregion #region Load the baddies. { while (levelData.BytesLeft != 0) { int x = levelData.ReadGUByte1(); int y = levelData.ReadGUByte1(); int type = levelData.ReadGUByte1(); // Ends with an invalid baddy. if (x == -1 && y == -1 && type == -1) { levelData.ReadString('\n'); // Empty verses. break; } /* // Add the baddy. TLevelBaddy* baddy = addBaddy((float)x, (float)y, type); if (baddy == 0) continue; // Only v1.04+ baddies have verses. if (v > 3) { // Load the verses. std::vector<CString> bverse = fileData.readString("\n").tokenize("\\"); CString props; for (char j = 0; j < (char)bverse.size(); ++j) props >> (char)(BDPROP_VERSESIGHT + j) >> (char)bverse[j].length() << bverse[j]; if (props.length() != 0) baddy->setProps(props); } */ } } #endregion #region Load signs. { while (levelData.BytesLeft != 0) { CString line = levelData.ReadString('\n'); if (line.Length == 0) break; byte x = line.ReadGUByte1(); byte y = line.ReadGUByte1(); CString text = line.ReadString(); this.SignList.Add(this.SignList.Count + 1, new GraalLevelSign(x, y, text.Text)); } } #endregion return true; }
/// <summary> /// Handle Received Data /// </summary> protected override void HandleData(CString Packet) { // Player not logged in if (!LoggedIn) HandleLogin(Packet.ReadString('\n')); // Parse Packets while (Packet.BytesLeft > 0) { // Grab Single Packet CString CurPacket = Packet.ReadString('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1(); // Call Packet Callback //RemoteControl.CallCallBack(PacketId, (CString)CurPacket.DeepClone()); // Run Internal Packet Function switch ((PacketIn)PacketId) { //case PacketIn.NPCWEAPONADD: // Add Class to List // { //String className = CurPacket.ReadString().Text; //if (RemoteControl.ClassList.IndexOf(className) == -1) // RemoteControl.ClassList.Add(className); // break; // } //case PacketIn.NEWWORLDTIME: // Remove Class from List //RemoteControl.ClassList.Remove(CurPacket.ReadString().Text); // break; // Retrieve Class case PacketIn.NC_CLASSGET: { String Name = CurPacket.ReadString().Text; ServerClass Class = Server.FindClass(Name); if (Class != null) SendPacket(new CString() + (byte)PacketOut.NC_WEAPONGET + (byte)Class.Name.Length + Class.Name + Class.Script); else Server.SendNCChat(Account + " prob: script " + Name + " doesn't exist", null); break; } // Set Class case PacketIn.NC_CLASSADD: { String ClassName = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String ClassScript = CurPacket.ReadString().Text; int res = Server.SetClass(ClassName, ClassScript, true); if (res >= 0) Server.SendNCChat("Script " + ClassName + " " + (res == 1 ? "added" : "updated") + " by " + this.Account); break; } // Delete Class case PacketIn.NC_CLASSDELETE: { String ClassName = CurPacket.ReadString().Text; if (Server.DeleteClass(ClassName)) Server.SendNCChat("Script " + ClassName + " deleted by " + this.Account); else Server.SendNCChat(Account + " prob: script " + ClassName + " doesn't exist"); break; } // Retrieve Weapon List case PacketIn.NC_WEAPONLISTGET: { CString Out = new CString() + (byte)PacketOut.NC_WEAPONLISTGET; /* foreach (KeyValuePair<string, ServerWeapon> weapon in Server.WeaponList) { Out.WriteGByte1((sbyte)weapon.Key.Length); Out.Write(weapon.Key); } */ SendPacket(Out); break; } // Retrieve Weapon case PacketIn.NC_WEAPONGET: { String Name = CurPacket.ReadString().Text; ServerWeapon Weapon = Server.FindWeapon(Name); if (Weapon != null) SendPacket(new CString() + (byte)PacketOut.NC_WEAPONGET + (byte)Weapon.Name.Length + Weapon.Name + (byte)Weapon.Image.Length + Weapon.Image + Weapon.Script); else Server.SendNCChat(Account + " prob: weapon " + Name + " doesn't exist", null); break; } // Set Weapon case PacketIn.NC_WEAPONADD: { String WeaponName = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponImage = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponScript = CurPacket.ReadString().Text; int res = Server.SetWeapon(WeaponName, WeaponImage, WeaponScript, true); if (res >= 0) Server.SendNCChat("Weapon/GUI-script " + WeaponName + " " + (res == 1 ? "added" : "updated") + " by " + this.Account); break; } // Delete Weapon case PacketIn.NC_WEAPONDELETE: { String WeaponName = CurPacket.ReadString().Text; if (Server.DeleteWeapon(WeaponName)) Server.SendNCChat("Weapon " + WeaponName + " deleted by " + this.Account); else Server.SendNCChat(Account + " prob: weapon " + WeaponName + " doesn't exist"); break; } default: System.Console.WriteLine("CLIENTNC -> Packet [" + PacketId + "]: " + CurPacket.Text); break; } } }
/// <summary> /// Handle Received Data /// </summary> protected override void HandleData(CString Packet) { while (Packet.BytesLeft > 0) { // Grab Single Packet CString CurPacket = Packet.ReadString ('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1 (); // Call Packet Callback //RemoteControl.CallCallBack(PacketId, (CString)CurPacket.DeepClone()); // Run Internal Packet Function switch ((PacketIn)PacketId) { // Packet 6 - Set Active Level & Clear case PacketIn.LEVELNAME: ActiveLevel = Server.FindLevel (CurPacket.ReadString ().Text); Console.WriteLine (ActiveLevel.Name); //ActiveLevel.Clear(); break; // Paceket 1 - Level Links case PacketIn.LEVELLINKS: break; // Packet 3 - Level NPC Props case PacketIn.LEVELNPCPROPS: { int npcId = CurPacket.ReadGByte3 (); //Console.WriteLine("npc-id("+npcId.ToString()+")"); if (ActiveLevel != null) { GraalLevelNPC test = ActiveLevel.GetNPC (this.Server.GSConn, npcId); test.npcserver = true; test.SetProps (CurPacket); /* foreach (NCConnection nc in Server.NCList) { nc.SendPacket(new CString() + (byte)NCConnection.PacketOut.NC_NPCADD + (int)test.Id + (byte)50 + (byte)test.Nickname.Length + test.Nickname + (byte)51 + (byte)("OBJECT".Length) + "OBJECT" + (byte)52 + (byte)test.Level.Name.Length + test.Level.Name); } */ this.Server.Compiler.CompileAdd (test); } break; } // Packet 5 - Level Signs case PacketIn.LEVELSIGNS: break; // Packet 39 - Level Mod Time case PacketIn.LEVELMODTIME: if (ActiveLevel != null) ActiveLevel.SetModTime (CurPacket.ReadGUByte5 ()); break; // Packet 150 - Delete Level NPC case PacketIn.LEVELNPCDELETE: Server.FindLevel (CurPacket.ReadChars (CurPacket.ReadGUByte1 ())).DeleteNPC (CurPacket.ReadGByte3 ()); break; // Packet 156 - Set Active Level case PacketIn.LEVELSETACTIVE: ActiveLevel = Server.FindLevel (CurPacket.ReadString ().Text); break; // Add Player & Set Props case PacketIn.OTHERPLPROPS: { Players.Player Player = (Players.Player)Server.PlayerManager.AddPlayer (CurPacket.ReadGByte2 (), this); if (Player != null) { Player.SetProps (CurPacket); } break; } case PacketIn.PLFLAGSET: { Players.Player Player = (Players.Player)Server.PlayerManager.AddPlayer (CurPacket.ReadGByte2 ()); String FlagName = CurPacket.ReadString ('=').Text; String FlagValue = CurPacket.ReadString ().Text; if (Player != null) Player.Flags [FlagName] = FlagValue; break; } case PacketIn.PLAYERPROPS: if (NCPlayer == null) NCPlayer = (Players.Player)Server.PlayerManager.AddPlayer (0); NCPlayer.SetProps (CurPacket); break; // Add weapon to list case PacketIn.NPCWEAPONADD: { String WeaponName = CurPacket.ReadChars (CurPacket.ReadGUByte1 ()); String WeaponImage = CurPacket.ReadChars (CurPacket.ReadGUByte1 ()); String WeaponScript = CurPacket.ReadString ().Text; Server.SetWeapon (this, WeaponName, WeaponImage, WeaponScript, false); /* foreach (Players.Player p in this.Server.PlayerManager) { this.Server.SendGSPacket (new CString () + (byte)GServerConnection.PacketOut.NCQUERY + (byte)GServerConnection.NCREQ.PLGETWEPS + (short)p.Id); } */ break; } // Add/Remove weapon from Player case PacketIn.PLWEAPONMNG: { Players.Player Player = (Players.Player)Server.PlayerManager.AddPlayer (CurPacket.ReadGByte2 ()); if (Player != null) { bool addWeapon = (CurPacket.ReadGByte1 () > 0); String name = CurPacket.ReadString ().Text; if (addWeapon) Player.AddWeapon (name); else Player.DeleteWeapon (name, false); } break; } case PacketIn.PLWEAPONSSET: { Players.Player Player = (Players.Player)Server.PlayerManager.AddPlayer (CurPacket.ReadGByte2 ()); if (Player != null) { while (CurPacket.BytesLeft > 0) Player.AddWeapon (CurPacket.ReadChars (CurPacket.ReadGUByte1 ())); } break; } case PacketIn.NEWWORLDTIME: // Remove Class from List Server.NWTime = CurPacket.ReadGByte4 (); //RemoteControl.ClassList.Remove(CurPacket.ReadString().Text); break; // Private Message case PacketIn.PRIVATEMESSAGE: short PlayerId = CurPacket.ReadGByte2 (); CString Message = CurPacket.ReadString (); Server.SendPM (PlayerId, Server.NCMsg, true); break; case PacketIn.TRIGGERACTION: short _pid = CurPacket.ReadGByte2 (); int _npcId = (int)CurPacket.readGUInt (); float x = (float)CurPacket.readGUChar () / 2.0f; float y = (float)CurPacket.readGUChar () / 2.0f; string action = CurPacket.ReadString (',').ToString ().Trim (); string[] _params = CurPacket.ReadString ().ToString ().Split (','); Console.Write ("Call npcid(" + _npcId.ToString () + ") onAction" + action + "(_params); _params: "); foreach (string p in _params) Console.Write (p + ", "); Console.WriteLine (); if (_npcId != 0) { GraalLevelNPC tmpNpc = this.Server.PlayerManager.FindPlayer (_pid).Level.GetNPC (_npcId); if (tmpNpc == null) Console.WriteLine ("npc cannot be found! :'("); if (tmpNpc != null) tmpNpc.Call ("onAction" + action, new object[] { this.Server.PlayerManager.FindPlayer (_pid), _params }); } else { this.Server.PlayerManager.FindPlayer (_pid).CallNPCs ("onAction" + action, new object[] { this.Server.PlayerManager.FindPlayer (_pid), _params } ); this.Server.PlayerManager.FindPlayer (_pid).Level.CallNPCs ("onAction" + action, new object[] { this.Server.PlayerManager.FindPlayer (_pid), _params } ); } break; case PacketIn.NC_CONTROL: System.Console.Write ("GSCONN -> Packet [" + (PacketIn)PacketId + "]: "); Server.SendGSPacket (new CString () + (byte)PacketOut.GETWEAPONS); Server.SendGSPacket (new CString () + (byte)PacketOut.GETLEVELS); int PacketId2 = CurPacket.ReadGUByte1 (); switch ((NCI)PacketId2) { case NCI.PLAYERWEAPONS: // 0 { Players.Player Player = (Players.Player)Server.PlayerManager.AddPlayer (CurPacket.ReadGByte2 ()); if (Player != null) { Console.WriteLine (Player.Account); CString weapons = CurPacket.Untokenize (); string[] weaponsarr = weapons.ToString ().Split ('\n'); foreach (string tmpWeap in weaponsarr) { //string tmpWeap = CurPacket.ReadChars(CurPacket.ReadGUByte1()); Console.WriteLine ("Weapon: " + tmpWeap); if (Player.FindWeapon (tmpWeap) == null) { Console.WriteLine ("Not Found on player"); Common.Scripting.ServerWeapon tmpWeap2 = this.Server.FindWeapon (tmpWeap); if (tmpWeap2 != null) { Console.WriteLine ("Adding"); Player.AddWeapon (tmpWeap2); } else Console.WriteLine ("Weapon not found in system. :'("); } } } break; } case NCI.PLAYERWEAPONADD: System.Console.WriteLine (" ADDWEAPON"); Players.Player _Player = (Players.Player)Server.PlayerManager.AddPlayer (CurPacket.ReadGByte2 ()); if (_Player != null) { System.Console.Write ("Player: " + _Player.Account); bool addWeapon = (CurPacket.ReadGByte1 () > 0); String name = CurPacket.ReadString ().Text; System.Console.WriteLine (" Name: " + name); Common.Scripting.ServerWeapon tmpWp = this.Server.FindWeapon (name); if (addWeapon) _Player.AddWeapon (tmpWp); else _Player.DeleteWeapon (name, false); } break; default: System.Console.WriteLine ("[" + PacketId2 + "]: " + CurPacket.ReadString ().Text); break; } break; default: System.Console.WriteLine ("GSCONN -> Packet [" + (PacketIn)PacketId + "]: " + CurPacket.ReadString ().Text); break; } } }
/// <summary> /// Handle Received Data /// </summary> /// protected override void HandleData(CString Packet) { if (this.serverWindow == null) this.serverWindow = ServerWindow.GetInstance(); int prevPacket = 0; uint readc = 0; //System.Console.WriteLine("Test: " + Packet.Text); while (Packet.BytesLeft > 0) { CString CurPacket; // Grab Single Packet if (prevPacket == 100) CurPacket = Packet.ReadChars2(readc); else CurPacket = Packet.ReadString('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1(); // Call Packet Callback //RemoteControl.CallCallBack(PacketId, (CString)CurPacket.DeepClone()); // Run Internal Packet Function switch ((PacketIn)PacketId) { case PacketIn.LEVELCHEST: { CString Message = CurPacket.ReadString(); this.serverWindow.ErrorMsg = Message.Text.ToString(); //this.errorWindow.error_label.Text = Message.Text.ToString(); break; } case PacketIn.LEVELBOARD: int serverCount = CurPacket.ReadGUByte1(); this.serverWindow.Write_Text("Number of servers: " + serverCount.ToString()); this.serverList.Clear(); this.listStore.Clear(); for (int i = 0; i < serverCount; i++) { // empty byte CurPacket.ReadGUByte1(); // add server TServer server = this.serverList.AddTServer((short)i); // parse server server.setName(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setLanguage(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setDescription(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setUrl(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setVersion(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setPCount(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); server.setIp(new CString(CurPacket.ReadChars(CurPacket.ReadGUByte1()))); int port; int.TryParse(CurPacket.ReadChars(CurPacket.ReadGUByte1()), out port); server.setPort(port); Gdk.Pixbuf icon; if (server.getType() == "1") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_nuclear.png"); else if (server.getType() == "2") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_gold.png"); else if (server.getType() == "3") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_silver.png"); else if (server.getType() == "4") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_bronze.png"); else if (server.getType() == "5") icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_uc.png"); else icon = global::Gdk.Pixbuf.LoadFromResource("OpenGraal.GraalIM.Resources.rcicon_uc.png"); ServerWindow sw = ServerWindow.GetInstance(); this.listStore.AppendValues(icon, server.name, server.getPCount()); } break; default: this.serverWindow.Write_Text("[" + Enum.GetName(typeof(PacketIn), PacketId).ToString() + "]: " + CurPacket.ReadString().Text + "\r\n"); break; } prevPacket = PacketId; } //if (this.serverWindow.ErrorMsg != "error") // this.serverWindow.Hide(); }
/// <summary> /// Handle Received Data /// </summary> protected override void HandleData(CString Packet) { // Player not logged in //if (!LoggedIn) // HandleLogin(Packet.ReadString('\n')); // Parse Packets while (Packet.BytesLeft > 0) { // Grab Single Packet CString CurPacket = Packet.ReadString('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1(); // Run Internal Packet Function switch ((PacketIn)PacketId) { default: Abstraction.GetInstance().WriteText("CLIENTNC -> Packet [" + PacketId + "]: " + CurPacket.Text); break; } } }
/// <summary> /// Handle Received Data /// </summary> /// protected override void HandleData(CString Packet) { int prevPacket = 0; uint readc = 0; while (Packet.BytesLeft > 0) { CString CurPacket; // Grab Single Packet if (prevPacket == 100) CurPacket = Packet.ReadChars2(readc); else CurPacket = Packet.ReadString('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1(); // Run Internal Packet Function switch ((PacketIn)PacketId) { // Packet 6 - Set Active Level & Clear case PacketIn.LEVELNAME: //ActiveLevel = Server.FindLevel(CurPacket.ReadString().Text); //ActiveLevel.Clear(); break; // Paceket 1 - Level Links case PacketIn.LEVELLINK: break; // Packet 3 - Level NPC Props case PacketIn.NPCPROPS: { int npcId = CurPacket.ReadGByte3(); //if (ActiveLevel != null) // ActiveLevel.GetNPC(npcId).SetProps(CurPacket); break; } // Packet 5 - Level Signs case PacketIn.LEVELSIGN: break; // Packet 39 - Level Mod Time case PacketIn.LEVELMODTIME: uint modTime = CurPacket.ReadGUByte5(); //if (ActiveLevel != null) // ActiveLevel.SetModTime(modTime); break; case PacketIn.SIGNATURE: { this.ReceivedSignature(); break; } case PacketIn.BOARDPACKET: { break; } case PacketIn.RAWDATA: readc = CurPacket.ReadGUByte3(); //Console.WriteLine(":::readc::::" + readc.ToString() + "::::"); break; // Packet 150 - Delete Level NPC case PacketIn.NPCDEL2: string _levelName = CurPacket.ReadChars(CurPacket.ReadGUByte1()); int _npcId = CurPacket.ReadGByte3(); this.DeleteLevelNpc(_levelName, _npcId); break; // Packet 156 - Set Active Level case PacketIn.SETACTIVELEVEL: //ActiveLevel = Server.FindLevel(CurPacket.ReadString().Text); break; case PacketIn.ADDPLAYER: { short playerId = CurPacket.ReadGByte2(); string playerAccount = CurPacket.ReadChars(CurPacket.ReadGUByte1()); Dictionary<int,dynamic> props = GraalPlayer.ParseProps(CurPacket); this.AddPlayer(playerId, playerAccount, props); break; } case PacketIn.DELPLAYER: { short pId = CurPacket.ReadGByte2(); //Server.PlayerManager.DeletePlayer(pId); break; } // Add Player & Set Props case PacketIn.OTHERPLPROPS: { /* GraalPlayer Player = (GraalPlayer)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { Player.SetProps(CurPacket); } */ break; } case PacketIn.FLAGSET: { //GraalPlayer Player = (GraalPlayer)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); String FlagName = CurPacket.ReadString('=').Text; String FlagValue = CurPacket.ReadString().Text; /* if (Player != null) Player.Flags[FlagName] = FlagValue; */ break; } case PacketIn.PLAYERPROPS: { /* if (this.form.NCPlayer == null) this.form.NCPlayer = Server.PlayerManager.AddPlayer(0); //this.form.WriteText(" -!- ME!\r\n"); this.form.NCPlayer.SetProps(CurPacket); */ break; } // Add weapon to list case PacketIn.NPCWEAPONADD: { String WeaponName = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponImage = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponScript = CurPacket.ReadString().Text; //Server.SetWeapon(WeaponName, WeaponImage, WeaponScript, false); break; } // Add/Remove weapon from Player case PacketIn.NPCWEAPONDEL: { /* GraalPlayer Player = Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { bool addWeapon = (CurPacket.ReadGByte1() > 0); String name = CurPacket.ReadString().Text; if (addWeapon) Player.AddWeapon(name); else Player.DeleteWeapon(name, false); } */ break; } case PacketIn.UNKNOWN60: { /* GraalPlayer Player = Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { while (CurPacket.BytesLeft > 0) Player.AddWeapon(CurPacket.ReadChars(CurPacket.ReadGUByte1())); } */ break; } case PacketIn.NEWWORLDTIME: // Remove Class from List //Server.NWTime = CurPacket.ReadGByte4(); break; // Private Message case PacketIn.PRIVATEMESSAGE: { short PlayerId = CurPacket.ReadGByte2(); CString Message = CurPacket.ReadString(); this.ReceivedPM(PlayerId, Message); break; } case PacketIn.TOALL: { short PlayerId = CurPacket.ReadGByte2(); CString Message = CurPacket.ReadString(); //this.form.WriteText(Message.Text); this.ReceivedToall(PlayerId, Message); break; } case PacketIn.RC_SERVEROPTIONSGET: string serverOptions = CurPacket.ReadString().Untokenize().ToString(); this.ReceivedServerOptions(serverOptions); break; case PacketIn.RC_SERVERFLAGSGET: int serverFlagsTotal = CurPacket.ReadGByte2(); List<string> serverFlags = new List<string>(); string serverFlagsString = ""; while (CurPacket.BytesLeft > 0) { serverFlags.Add(CurPacket.ReadChars(CurPacket.ReadGUByte1())); } serverFlags.Sort(); foreach (string sf in serverFlags) serverFlagsString += sf + "\n"; this.ReceivedServerFlags(serverFlagsTotal, serverFlagsString); break; case PacketIn.RC_FOLDERCONFIGGET: string folderConfig = CurPacket.ReadString().Untokenize().ToString(); this.ReceivedFolderConfig(folderConfig); break; case PacketIn.RC_FILEBROWSER_DIR: //CString s2 = CurPacket.Untokenize(); this.WriteText(CurPacket.Text); break; // Servertext case PacketIn.SERVERTEXT: { CString Message = CurPacket.ReadString(); string TheMessage2 = ""; TheMessage2 = CString.untokenize(Message.Text); string[] test = TheMessage2.Split('\n'); List<string> test2 = new List<string>(test); this.ReceivedServertext(test2); break; } case PacketIn.SHOWIMG: { break; } case PacketIn.DISCMESSAGE: { //Console.WriteLine("PacketId: " + PacketId.ToString()); string _disconnectMessage = CurPacket.ReadString().Text;//Enum.GetName(typeof(PacketIn), PacketId).ToString(); this.Disconnected(_disconnectMessage); break; } case PacketIn.RC_CHAT: this.ReceivedRCChat(CurPacket.ReadString().Text); break; default: { Console.WriteLine("PacketId: " + PacketId.ToString()); try { string packetName = Enum.GetName(typeof(PacketIn), PacketId).ToString(); //this.form.WriteText("[" + packetName + "]: " + CurPacket.ReadString().Text + ""); } catch (IndexOutOfRangeException e) { } catch (NullReferenceException e) { } break; } } prevPacket = PacketId; } }
/// <summary> /// Handle Received Data /// </summary> /// protected override void HandleData(CString Packet) { // Check if the instance of Framework is null and get the instance if it is. if (Server == null) Server = Framework.GetInstance(); if (this.form == null) this.form = Abstraction.GetInstance(); int prevPacket = 0; uint readc = 0; while (Packet.BytesLeft > 0) { CString CurPacket; // Grab Single Packet if (prevPacket == 100) CurPacket = Packet.ReadChars2(readc); else CurPacket = Packet.ReadString('\n'); // Read Packet Type int PacketId = CurPacket.ReadGUByte1(); // Run Internal Packet Function switch ((PacketIn)PacketId) { // Packet 6 - Set Active Level & Clear case PacketIn.LEVELNAME: //ActiveLevel = Server.FindLevel(CurPacket.ReadString().Text); //ActiveLevel.Clear(); break; // Paceket 1 - Level Links case PacketIn.LEVELLINK: break; // Packet 3 - Level NPC Props case PacketIn.NPCPROPS: { int npcId = CurPacket.ReadGByte3(); //if (ActiveLevel != null) // ActiveLevel.GetNPC(npcId).SetProps(CurPacket); break; } // Packet 5 - Level Signs case PacketIn.LEVELSIGN: break; // Packet 39 - Level Mod Time case PacketIn.LEVELMODTIME: uint modTime = CurPacket.ReadGUByte5(); //if (ActiveLevel != null) // ActiveLevel.SetModTime(modTime); break; case PacketIn.SIGNATURE: { this.form.WriteText("Connected!"); Server.SendGSPacket(new CString() + (byte)PacketOut.PLAYERPROPS + (byte)PLPROPS.NICKNAME + (byte)this.Nickname.Length + this.Nickname); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,pmguilds,\"\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,pmservers,\"all\""); //Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,pmserverplayers,\"U Classic iPhone\"\n"); Server.SendGSPacket(new CString() + (byte)PacketOut.SENDTEXT + "GraalEngine,lister,options,globalpms=true,buddytracking=true,showbuddies=true"); Server.SendGSPacket(new CString() + (byte)PacketOut.SENDTEXT + "GraalEngine,lister,verifybuddies,1,1964252486"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"unixmad\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"stefan\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"tig\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"skyld\""); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "GraalEngine,lister,addbuddy,\"xor\""); //Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-ShopGlobal,lister,getglobalitems\n"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-Serverlist,lister,list,all"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-Serverlist,lister,upgradeinfo\n"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-Serverlist,lister,subscriptions\n"); Server.SendGSPacket(new CString() + (byte)PacketOut.REQUESTTEXT + "-Serverlist,lister,getlockcomputer"); // Logging into IRC. Server.SendGSPacket(new CString() + (byte)154 + "-Serverlist_Chat,irc,login,-"); Server.SendGSPacket(new CString() + (byte)154 + "-Serverlist_Chat,irc,privmsg,IRCBot,!geteventbots"); Server.SendGSPacket(new CString() + (byte)154 + "-Serverlist_Chat,irc,join,#graalim"); break; } case PacketIn.BOARDPACKET: { break; } case PacketIn.RAWDATA: readc = CurPacket.ReadGUByte3(); Console.WriteLine(":::readc::::" + readc.ToString() + "::::"); break; // Packet 150 - Delete Level NPC case PacketIn.NPCDEL2: //Server.FindLevel(CurPacket.ReadChars(CurPacket.ReadGUByte1())).DeleteNPC(CurPacket.ReadGByte3()); break; // Packet 156 - Set Active Level case PacketIn.SETACTIVELEVEL: //ActiveLevel = Server.FindLevel(CurPacket.ReadString().Text); break; case PacketIn.ADDPLAYER: { Player Player = (Player)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { Player.Account = CurPacket.ReadChars(CurPacket.ReadGUByte1()); Player.SetProps(CurPacket); } break; } case PacketIn.DELPLAYER: { short pId = CurPacket.ReadGByte2(); Server.PlayerManager.DeletePlayer(pId); break; } // Add Player & Set Props case PacketIn.OTHERPLPROPS: { Player Player = (Player)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { Player.SetProps(CurPacket); } break; } case PacketIn.FLAGSET: { Player Player = (Player)Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); String FlagName = CurPacket.ReadString('=').Text; String FlagValue = CurPacket.ReadString().Text; if (Player != null) Player.Flags[FlagName] = FlagValue; break; } case PacketIn.PLAYERPROPS: { if (this.form.NCPlayer == null) this.form.NCPlayer = Server.PlayerManager.AddPlayer(0); //this.form.WriteText(" -!- ME!\r\n"); this.form.NCPlayer.SetProps(CurPacket); break; } // Add weapon to list case PacketIn.NPCWEAPONADD: { String WeaponName = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponImage = CurPacket.ReadChars(CurPacket.ReadGUByte1()); String WeaponScript = CurPacket.ReadString().Text; //Server.SetWeapon(WeaponName, WeaponImage, WeaponScript, false); break; } // Add/Remove weapon from Player case PacketIn.NPCWEAPONDEL: { Player Player = Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { bool addWeapon = (CurPacket.ReadGByte1() > 0); String name = CurPacket.ReadString().Text; if (addWeapon) Player.AddWeapon(name); else Player.DeleteWeapon(name, false); } break; } case PacketIn.UNKNOWN60: { Player Player = Server.PlayerManager.AddPlayer(CurPacket.ReadGByte2()); if (Player != null) { while (CurPacket.BytesLeft > 0) Player.AddWeapon(CurPacket.ReadChars(CurPacket.ReadGUByte1())); } break; } case PacketIn.NEWWORLDTIME: // Remove Class from List Server.NWTime = CurPacket.ReadGByte4(); break; // Private Message case PacketIn.PRIVATEMESSAGE: { short PlayerId = CurPacket.ReadGByte2(); CString Message = CurPacket.ReadString(); this.ReceivePM(PlayerId, Message); break; } case PacketIn.TOALL: { short PlayerId = CurPacket.ReadGByte2(); CString Message = CurPacket.ReadString(); //this.form.WriteText(Message.Text); this.ReceiveToall(PlayerId, Message); break; } case PacketIn.RC_SERVEROPTIONSGET: string serverOptions = CurPacket.ReadString().Untokenize().ToString(); this.form.WriteText(serverOptions); break; case PacketIn.RC_SERVERFLAGSGET: int serverFlagsTotal = CurPacket.ReadGByte2(); List<string> serverFlags = new List<string>(); string serverFlagsString = ""; while (CurPacket.BytesLeft > 0) { serverFlags.Add(CurPacket.ReadChars(CurPacket.ReadGUByte1())); } serverFlags.Sort(); foreach (string sf in serverFlags) serverFlagsString += sf + "\n"; this.ReceivedServerFlags(serverFlagsTotal, serverFlagsString); break; case PacketIn.RC_FOLDERCONFIGGET: //CString s2 = CurPacket.Untokenize(); string folderConfig = CurPacket.ReadString().Untokenize().ToString(); this.ReceivedFolderConfig(folderConfig); break; case PacketIn.RC_FILEBROWSER_DIR: //CString s2 = CurPacket.Untokenize(); this.form.WriteText(CurPacket.ReadString().ToString()); break; case PacketIn.RC_FILEBROWSER_DIRLIST: List<string> fileBrowserDirList = new List<string>(CurPacket.ReadString().Untokenize().ToString().Split('\n')); fileBrowserDirList.Sort(); foreach (string dir in fileBrowserDirList) this.form.WriteText(dir); break; case PacketIn.RC_FILEBROWSER_MESSAGE: this.form.WriteText(CurPacket.ReadString().ToString()); break; // Servertext case PacketIn.SERVERTEXT: { CString Message = CurPacket.ReadString(); this.form = Abstraction.GetInstance(); string TheMessage2 = ""; TheMessage2 = CString.untokenize(Message.Text); string[] test = TheMessage2.Split('\n'); List<string> test2 = new List<string>(test); if (test2[0].Trim() == "GraalEngine" || test2[0].Trim() == "-Playerlist") { if (test2[1].Trim() == "lister") { } } else if (test2[0].Trim() == "-Serverlist_Chat") { if (test2[1].Trim() == "irc") { switch (test2[2].Trim()) { case "join": { this.form.OpenIRC(test2[3].Trim()); break; } case "addchanneluser"://[SERVERTEXT]: -Serverlist_Chat irc addchanneluser #graal CrypticMyst login1 Gos_Pira { this.form.IRC_AddChannelUser(test2[3].Trim(), test2[4].Trim()); break; } case "deletechanneluser"://[SERVERTEXT]: -Serverlist_Chat irc delchanneluser #graal CrypticMyst { this.form.IRC_AddChannelUser(test2[3].Trim(), test2[4].Trim(), true); break; } case "privmsg": { string message = test2[5].Trim(); if (test2[4].Trim().StartsWith("#")) this.form.IRC_Privmsg(test2[3].Trim(), test2[4].Trim(), message); else { this.ReceivePM(test2[3].Trim(), new CString(message)); } break; } default: { break; } } } } else if (test2[0].Trim() == "-Serverlist") { if (test2[1].Trim() == "lister") { #region SimpleServerList if (test2[2].Trim() == "subscriptions2") { string subscription = "Trial"; //this.form.WriteText(test2.Count.ToString()); if (test2.Count > 3) { //this.form.WriteText(test2.Count.ToString()); string server2 = CString.untokenize(test2[3].Trim()); string[] test3 = server2.Split('\n'); subscription = test3[1].Trim(); } this.form.SetSubscriptionText("Subscription: " + subscription); } else if (test2[2].Trim() == "lockcomputer") { int locked = 0; int.TryParse(test2[3].Trim(), out locked); this.form.SetLockedByComputerText("Locked by PC-ID: " + ((locked == 1) ? "Yes" : "No")); } else if (test2[2].Trim() == "simpleserverlist" || test2[2].Trim() == "serverlist") { List<string> servers = test2; servers.RemoveRange(0, 3); this.form.WriteText("SERVERS(" + servers.Count + "):"); this.form.WriteText("------------"); //this.form.WriteText("[SERVERTEXT]: " + TheMessage2 + ""); foreach (string server in servers) { //CString server2 = new CString(); //server2.Write(server); if (server != "") { string server2 = CString.untokenize(server); string[] test3 = server2.Split('\n'); //this.form.Write_Text(server2 + "\r\n"); var servername = ""; var servertype = ""; if (test3[1].Trim().Substring(0, 2) == "P " || test3[1].Trim().Substring(0, 2) == "H " || test3[1].Trim().Substring(0, 2) == "3 " || test3[1].Trim().Substring(0, 2) == "U ") { servertype = test3[1].Trim().Substring(0, 2); servername = test3[1].Trim().Substring(2, test3[1].Trim().Length - 2); if (servertype == "P ") servertype = "Gold"; if (servertype == "H ") servertype = "Hosted"; if (servertype == "3 ") servertype = "3D"; if (servertype == "U ") servertype = "Hidden"; } else { servertype = "Classic"; servername = test3[1].Trim(); } var serverid = test3[0].Trim(); var serverpc = test3[2].Trim(); this.form.WriteText(" * Id: " + serverid + " Type: " + servertype + " Name: " + servername + " Players: " + serverpc + ""); } } this.form.WriteText(""); } else this.form.WriteText("[SERVERTEXT]: " + TheMessage2.Replace("\r\n", ",") + ""); #endregion } } else { }// this.form.WriteText("[SERVERTEXT]: " + TheMessage2.Replace("\r\n", ",") + ""); break; } case PacketIn.SHOWIMG: { break; } case PacketIn.DISCMESSAGE: { //Console.WriteLine("PacketId: " + PacketId.ToString()); string packetName = "";//Enum.GetName(typeof(PacketIn), PacketId).ToString(); this.form.WriteText("Disconnect: " + CurPacket.ReadString().Text + "\r\n"); break; } case PacketIn.RC_CHAT: this.form.WriteText(CurPacket.ReadString().Text + ""); break; default: { Console.WriteLine("PacketId: " + PacketId.ToString()); try { string packetName = Enum.GetName(typeof(PacketIn), PacketId).ToString(); this.form.WriteText("[" + packetName + "]: " + CurPacket.ReadString().Text + ""); } catch (IndexOutOfRangeException e) { } catch (NullReferenceException e) { } break; } } prevPacket = PacketId; } }
/// <summary> /// Set Properties /// </summary> /// <param name="Packet"></param> public void SetProps(CString Packet) { while (Packet.BytesLeft > 0) { Int32 PropId = Packet.readGUChar(); //Console.Write("[prop]: " + PropId.ToString()); switch ((Properties)PropId) { case Properties.IMAGE: // 0 this.Image = Packet.readChars(Packet.readGUChar()).ToString(); break; case Properties.SCRIPT: // 1 int length; if (!this.npcserver) length = Packet.readGUShort(); else length = (int)Packet.ReadGUByte5(); this.Script = Packet.readChars(length).ToString(); this.Script = this.Script.Replace("\xa7", "\n"); this.Script = this.Script.Replace("�", "\n"); this.Script = this.Script.Replace("�", "\n"); //if (this.Script.IndexOf("void") > 0 || this.Script.IndexOf("join(") > 0) this.CompileScript = true; break; case Properties.NPCX: // 2 - obsolete //Packet.ReadGByte1 (); this.OldX = (float)(Packet.readGChar()) / 2.0f; this.PixelX = (int)(this.OldX * 16); break; case Properties.NPCY: // 3 - obsolete //Packet.ReadGByte1 (); this.OldY = (float)(Packet.readGChar()) / 2.0f; this.PixelY = (int)(this.OldY * 16); break; case Properties.NPCPOWER: // 4 Packet.readGUChar(); break; case Properties.NPCRUPEES: // 5 this.Gralats = (int)Packet.readGUInt(); break; case Properties.ARROWS: // 6 this.Arrows = Packet.readGUChar(); break; case Properties.BOMBS: // 7 this.Bombs = Packet.readGUChar(); break; case Properties.GLOVEPOWER: // 8 Packet.readGUChar(); break; case Properties.BOMBPOWER: // 9 Packet.readGUChar(); break; case Properties.SWORDIMG: // 10 { int sp = Packet.readGUChar(); if (sp <= 4) _swordImage = "sword" + sp.ToString() + ".png"; else { sp -= 30; int len = Packet.readGUChar(); if (len > 0) { _swordImage = Packet.readChars(len).ToString(); if (_swordImage.ToString().Trim().Length != 0)// && clientVersion < CLVER_2_1 && getExtension(swordImage).isEmpty()) _swordImage += ".gif"; } else _swordImage = ""; //swordPower = clip(sp, ((settings->getBool("healswords", false) == true) ? -(settings->getInt("swordlimit", 3)) : 0), settings->getInt("swordlimit", 3)); } //_swordPower = (char)sp; } break; case Properties.SHIELDIMG: // 11 { int sp = Packet.readGUChar(); CString shieldImage = new CString(); int len; if (sp <= 3) { shieldImage = new CString() + "shield" + new CString(sp.ToString()) + ".png"; } else { sp -= 10; len = Packet.readGUChar(); if (len > 0) { shieldImage = Packet.readChars(len); if (shieldImage.ToString().Trim().Length != 0)// && clientVersion < CLVER_2_1 && getExtension(shieldImage).isEmpty()) shieldImage += new CString() + ".gif"; } else shieldImage = new CString() + ""; } //shieldPower = (char)sp; _shieldImage = shieldImage.ToString(); } break; case Properties.GANI: // 12 this.Animation = Packet.readChars(Packet.readGUChar()).ToString(); break; case Properties.VISFLAGS: // 13 this.VisFlags = (sbyte)Packet.readGUChar(); break; case Properties.BLOCKFLAGS: // 14 this.BlockFlags = (sbyte)Packet.readGUChar(); break; case Properties.MESSAGE: // 15 this.Chat = Packet.readChars(Packet.readGUChar()).ToString(); break; case Properties.HURTDXDY: // 16 float hurtX = ((float)(Packet.readGUChar() - 32)) / 32; float hurtY = ((float)(Packet.readGUChar() - 32)) / 32; break; case Properties.NPCID: // 17 this.Id = (int)Packet.readGUInt(); break; case Properties.SPRITE: // 18 this.Dir = Packet.readGUChar(); break; case Properties.COLORS: // 19 for (int i = 0; i < 5; i++) Packet.readGUChar(); break; case Properties.NICKNAME: // 20 this.Nickname = Packet.readChars(Packet.readGUChar()).ToString(); break; case Properties.HORSEIMG: // 21 Packet.readChars(Packet.readGUChar()); break; case Properties.HEADIMG: // 22 { Int32 len = Packet.readGUChar(); this.HeadImage = (len < 100 ? "head" + len + ".png" : Packet.readChars(len - 100).ToString()); break; } case Properties.SAVE0: // 23 this.Save[0] = (byte)Packet.readGUChar(); break; case Properties.SAVE1: // 24 this.Save[1] = (byte)Packet.readGUChar(); break; case Properties.SAVE2: // 25 this.Save[2] = (byte)Packet.readGUChar(); break; case Properties.SAVE3: // 26 this.Save[3] = (byte)Packet.readGUChar(); break; case Properties.SAVE4: // 27 this.Save[4] = (byte)Packet.readGUChar(); break; case Properties.SAVE5: // 28 this.Save[5] = (byte)Packet.readGUChar(); break; case Properties.SAVE6: // 29 this.Save[6] = (byte)Packet.readGUChar(); break; case Properties.SAVE7: // 30 this.Save[7] = (byte)Packet.readGUChar(); break; case Properties.SAVE8: // 31 this.Save[8] = (byte)Packet.readGUChar(); break; case Properties.SAVE9: // 32 this.Save[9] = (byte)Packet.readGUChar(); break; case Properties.ALIGNMENT: // 33 Packet.readGUChar(); break; case Properties.IMAGEPART: // 34 this.ImagePart = Packet.readChars(6); break; case Properties.BODYIMG: // 35 this.BodyImage = Packet.readChars(Packet.readGUChar()).ToString(); break; case Properties.GMAPLVLX: // 41 this.GMapX = (byte)Packet.readGUChar(); break; case Properties.GMAPLVLY: // 42 this.GMapY = (byte)Packet.readGUChar(); break; case Properties.GATTRIB6: // 44 case Properties.GATTRIB7: // 45 case Properties.GATTRIB8: // 46 case Properties.GATTRIB9: // 47 case Properties.GATTRIB10: // 53, case Properties.GATTRIB11: // 54, case Properties.GATTRIB12: // 55, case Properties.GATTRIB13: // 56, case Properties.GATTRIB14: // 57, case Properties.GATTRIB15: // 58, case Properties.GATTRIB16: // 59, case Properties.GATTRIB17: // 60, case Properties.GATTRIB18: // 61, case Properties.GATTRIB19: // 62, case Properties.GATTRIB20: // 63, case Properties.GATTRIB21: // 64, case Properties.GATTRIB22: // 65, case Properties.GATTRIB23: // 66, case Properties.GATTRIB24: // 67, case Properties.GATTRIB25: // 68, case Properties.GATTRIB26: // 69, case Properties.GATTRIB27: // 70, case Properties.GATTRIB28: // 71, case Properties.GATTRIB29: // 72, case Properties.GATTRIB30: // 73, Packet.readChars(Packet.readGUChar()); break; case Properties.CLASS: // 74 Packet.readChars(Packet.readGShort()); break; case Properties.PIXELX: // 75 { int tmp = this.PixelX = Packet.readGUShort(); // If the first bit is 1, our position is negative. this.PixelX >>= 1; if ((tmp & 0x0001) != 0) this.PixelX = -this.PixelX; break; } case Properties.PIXELY: // 76 { int tmp = this.PixelY = Packet.readGUShort(); // If the first bit is 1, our position is negative. this.PixelY >>= 1; if ((tmp & 0x0001) != 0) this.PixelY = -this.PixelY; break; } default: System.Console.WriteLine("Unknown NPC Prop: " + PropId + " Data: " + Packet.ReadString()); //Packet.ReadGUByte1 (); return; } //Console.WriteLine(": " + this.GetProp((Properties)PropId).ToString()); } // Compile script if script changed. //if (CompileScript) // Server.Compiler.CompileAdd(this); }