예제 #1
0
		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;
		}
예제 #2
0
        /// <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;
				}
			}
		}
예제 #6
0
        /// <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;

            }
        }
예제 #8
0
        /// <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);
        }