public int Add(CString pString)
 {
     CString newString = new CString();
     newString.Write(pString);
     _bufferList[this._id] = newString;
     int listId = this._id;
     this._id++;
     return listId;
 }
 public int Add(string pStr)
 {
     CString newString;
     if (pStr == null)
         newString = new CString();
     else
     {
         newString = new CString();
         newString.Write(pStr);
     }
     _bufferList[this._id] = newString;
     int listId = this._id;
     this._id++;
     return listId;
 }
        public void Replace(int pIndex, string pString)
        {
            CString str = (CString)_bufferList[pIndex];
            if (str == null)
                return;
            //delete str;

            str = new CString();
            str.Write(pString);
            this._bufferList[pIndex] = str;
        }
        public void Load(string pInput, char pSep)
        {
            CString newString = new CString();
            //this.clear();
            newString.Write(pInput);

            string[] lines = newString.Text.Split(pSep);
            foreach (string line in lines)
            {
                this.Add(line);
                //line = strtok(null, pSep);
            }
        }
        /// <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.Replace ('\n', '\xa7'));
                        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 ().Untokenize().Text;
                        Console.WriteLine(" prob: Class " + ClassName + " Script: " + ClassScript);
                        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;
                    }

                case PacketIn.NC_LEVELLISTGET:
                    {
                        CString Out = new CString () + (byte)PacketOut.NC_LEVELLIST;
                        foreach (KeyValuePair<string, GraalLevel> level in Server.LevelList) {
                            Out.WriteGByte1 ((sbyte)level.Key.Length);
                            Out.Write (level.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.Replace ('\n', '\xa7'));
                        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 (this.Server.GSConn, 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;
                    }
                /*
                case PacketIn.NC_CHAT:
                    break;
                */
                default:
                    System.Console.WriteLine ("CLIENTNC -> Packet [" + PacketId + "]: " + CurPacket.Text);
                    break;
                }
            }
        }
示例#6
0
        public CString ReadChars2(uint pCount)
        {
            Byte[] data = new byte[pCount];
            Read(data);
            CString data2 = new CString();

            data2.Write(Encoding.Default.GetString(data, 0, data.Length));

            return data2;
        }