| 
                     | 
                
            
                
 المشاركات 2,515  | 
         +التقييم 1.09  | 
 
تاريخ التسجيل Jul 2019  | 
  
  
الاقامة  |      
         
           
        نظام التشغيل  | 
         
        رقم العضوية 358  | 
    





		
	 
ProtoContract 
   
	
		
		
		
		
	 
PlayerProto 
   
	
		
		
		
		
	 
public byte[]  PlayerProto(Entity Entity, byte WindowsView = 0) 
   
	
		
		
		
		
	 
using System;
using System.Text;
using New_Thor_S_B_Mohamed_Hossam.Interfaces;
using New_Thor_S_B_Mohamed_Hossam.Client;
namespace New_Thor_S_B_Mohamed_Hossam.Network.AuthPackets
{
    public class Forward : IPacket
    {
        private byte[] Buffer;
        public Forward()
        {
            this.Buffer = new byte[48];
            Writer.WriteUInt16((ushort)40, 0, this.Buffer);
            Writer.WriteUInt16((ushort)1637, 2, this.Buffer);
        }
        public uint Identifier
        {
            get
            {
                return BitConverter.ToUInt32(this.Buffer, 4);
            }
            set
            {
                Writer.WriteUInt32(value, 4, this.Buffer);
            }
        }
        public Forward.ForwardType Type
        {
            get
            {
                return (Forward.ForwardType)BitConverter.ToUInt32(this.Buffer, 12);
            }
            set
            {
                Writer.WriteUInt32((uint)value, 12, this.Buffer);
            }
        }
        public ushort Port
        {
            get
            {
                return BitConverter.ToUInt16(this.Buffer, 16);
            }
            set
            {
                Writer.WriteUInt16(value, 16, this.Buffer);
            }
        }
        public string IP
        {
            get
            {
                return Encoding.Default.GetString(this.Buffer, 24, 16);
            }
            set
            {
                Writer.WriteString(value, 24, this.Buffer);
            }
        }
        public byte[] ToArray()
        {
            return this.Buffer;
        }
        public void Deserialize(byte[] buffer)
        {
        }
        public void Send(GameState client)
        {
            client.Send(this.Buffer);
        }
        public enum ForwardType : byte
        {
            InvalidInfo = 1,
            Ready = 2,
            Banned = 25,
            WrongAccount = 57,
        }
    }
}
Class Program
    static void AuthServer_OnClientReceive(byte[] buffer, int length, ClientWrapper arg3)
        {
            var player = arg3.Connector as Client.AuthClient;
            player.Cryptographer.Decrypt(buffer, length);
            player.Queue.Enqueue(buffer, length);
            while (player.Queue.CanDequeue())
            {
                byte[] packet = player.Queue.Dequeue();
                ushort len = BitConverter.ToUInt16(packet, 0);
                ushort id = BitConverter.ToUInt16(packet, 2);
                if (len == 312)
                {
                    player.Info = new Authentication();
                    player.Info.Deserialize(packet);
                    player.Account = new AccountTable(player.Info.Username);
                    string passdone = "";
                    msvcrt.msvcrt.srand(player.PasswordSeed);
                    Forward Fw = new Forward();
                    if (!player.Account.exists)
                    {
                        Fw.Type = Forward.ForwardType.InvalidInfo;
                        player.Send(Fw);
                    }
                    if (player.Account.Password == player.Info.Password && player.Account.exists)
                    {
                        Fw.Type = Forward.ForwardType.Ready;
                    }
                    else
                    {
                        Fw.Type = Forward.ForwardType.InvalidInfo;
                    }
                    if (IPBan.IsBanned(arg3.IP))
                    {
                        Fw.Type = Forward.ForwardType.Banned;
                        player.Send(Fw);
                        return;
                    }
                    if (Fw.Type == Network.AuthPackets.Forward.ForwardType.Ready)
                    {
                            
                      /*  if (player.Info.Server != Constants.ServerName)
                        {
                         Console.WriteLine("User==>[" + player.Info.Username + "] Change Name Server To [" + player.Info.Server + "] UID=[" + player.Account.EntityID + "]", ConsoleColor.Blue);
                           // return;
                      } */
                        Client.GameState aClient;
                        if (Kernel.GamePool.TryGetValue(Fw.Identifier, out aClient))
                        {
                            Fw.Type = Forward.ForwardType.InvalidInfo;
                            aClient.Disconnect();
                            player.Send(Fw);
                            return;
                        }
                        Fw.Identifier = player.Account.GenerateKey();
                        Kernel.AwaitingPool[Fw.Identifier] = player.Account;
                        Fw.IP = GameIP;
                        Fw.Port = GamePort;
                    }
                    player.Send(Fw);
                }
            }
        }
void GameServer_OnClientReceive
        static void GameServer_OnClientReceive(byte[] buffer, int length, ClientWrapper obj)
        {
            if (obj.Connector == null)
            {
                obj.Disconnect();
                return;
            }
            Client.GameState Client = obj.Connector as Client.GameState;
            if (Client.Exchange)
            {
                Client.Exchange = false;
                Client.Action = 1;
                var crypto = new GameCryptography(Program.Encoding.GetBytes(Constants.GameCryptographyKey));
                byte[] otherData = new byte[length];
                Array.Copy(buffer, otherData, length);
                crypto.Decrypt(otherData, length);
                bool extra = false;
                int pos = 0;
                if (BitConverter.ToInt32(otherData, length - 140) == 128)//no extra packet
                {
                    pos = length - 140;
                    Client.Cryptography.Decrypt(buffer, length);
                }
                else if (BitConverter.ToInt32(otherData, length - 180) == 128)//extra packet + 4 3d
                {
                    pos = length - 180;
                    extra = true;
                    Client.Cryptography.Decrypt(buffer, length - 40);
                }
                int len = BitConverter.ToInt32(buffer, pos); pos += 4;
                if (len != 128)
                {
                    Client.Disconnect();
                    return;
                }
                byte[] pubKey = new byte[128];
                for (int x = 0; x < len; x++, pos++) pubKey[x] = buffer[pos];
                string PubKey = Program.Encoding.GetString(pubKey);
                Client.Cryptography = Client.DHKeyExchange.HandleClientKeyPacket(PubKey, Client.Cryptography);
                if (extra)
                {
                    byte[] data = new byte[40];
                    Buffer.BlockCopy(buffer, length - 40, data, 0, 40);
                    processData(data, 40, Client);
                }
            }
            else
            {
                processData(buffer, length, Client);
            }
        }
class Authentication
      using System;
using System.IO;
using System.Text;
using New_Thor_S_B_Mohamed_Hossam.Network.Cryptography;
namespace New_Thor_S_B_Mohamed_Hossam.Network.AuthPackets
{
    public class Authentication : Interfaces.IPacket
    {
        public string Username, Password, Server;
        public Authentication() { }
        public void Deserialize(byte[] buffer)
        {
            Username = Program.Encoding.GetString(buffer, 8, 32).Replace("\0", "");
            Password = Program.Encoding.GetString(buffer, 100, 32).Replace("\0", "");
            Server = Program.Encoding.GetString(buffer, 136, 16).Replace("\0", "");
        }
        public byte[] ToArray() { throw new NotImplementedException(); }
        public void Send(Client.GameState client) { }
    }
}
class Constants
GameCryptographyKey = "C238xs65pjy7HU9Q",
CLASS PacketHandler
                #region Data (10010)
                case 10010:
                    {
                        if (client.Action != 2)
                            return;
                        var pkt = new MsgAction_TATA();
                        pkt.Handle(client, packet);
                        break;
                    }
                #endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ProtoBuf;
using New_Thor_S_B_Mohamed_Hossam.Network;
using New_Thor_S_B_Mohamed_Hossam.Network.GamePackets;
using New_Thor_S_B_Mohamed_Hossam.Game.Features;
using New_Thor_S_B_Mohamed_Hossam.Game.MsgServer;
using New_Thor_S_B_Mohamed_Hossam.Interfaces;
using New_Thor_S_B_Mohamed_Hossam.Game;
using System.Drawing;
using New_Thor_S_B_Mohamed_Hossam.Client;
namespace New_Thor_S_B_Mohamed_Hossam
{
    class MsgAction_TATA
    {
        public class CustomCommands
        {
            public const ushort
                ExitQuestion = 1,
                Minimize = 2,
                ShowReviveButton = 1053,
                FlowerPointer = 1067,
                Enchant = 1091,
                LoginScreen = 1153,
                SelectRecipiet = 30,
                JoinGuild = 34,
                MakeFriend = 38,
                ChatWhisper = 40,
                CloseClient = 43,
                HotKey = 53,
                Furniture = 54,
                TQForum = 79,
                PathFind = 97,
                LockItem = 102,
                ShowRevive = 1053,
                HideRevive = 1054,
                StatueMaker = 1066,
                GambleOpen = 1077,
                GambleClose = 1078,
                Compose = 1086,
                Craft1 = 1088,
                Craft2 = 1089,
                Warehouse = 1090,
                ShoppingMallShow = 1100,
                ShoppingMallHide = 1101,
                NoOfflineTraining = 1117,
                CenterClient = 1155,
                ClaimCP = 1197,
                ClaimAmount = 1198,
                Advertise = 3274,
                MerchantApply = 1201,
                MerchantDone = 1202,
                RedeemEquipment = 1233,
                ClaimPrize = 1234,
                RepairAll = 1239,
                FlowerIcon = 1244,
                SendFlower = 1246,
                ReciveFlower = 1248,
                WarehouseVIP = 1272,
                UseExpBall = 1288,
                HackProtection = 1298,
                HideGUI = 1307,
                Inscribe = 3059,
                BuyPrayStone = 3069,
                HonorStore = 3104,
                Opponent = 3107,
                CountDownQualifier = 3109,
                QualifierStart = 3111,
                ItemsReturnedShow = 3117,
                ItemsReturnedWindow = 3118,
                ItemsReturnedHide = 3119,
                QuestFinished = 3147,
                QuestPoint = 3148,
                QuestPointSparkle = 3164,
                StudyPointsUp = 3192,
                PKTeamName = 3209,
                CTFFlag = 3211,
                Updates = 3218,
                IncreaseLineage = 3227,
                HorseRacingStore = 3245,
                GuildPKTourny = 3249,
                QuitPK = 3251,
                Spectators = 3252,
                CardPlayOpen = 3270,
                CardPlayClost = 3271,
                ArtifactPurification = 3344,
                SafeguardConvoyShow = 3389,
                SafeguardConvoyHide = 3390,
                RefineryStabilization = 3392,
                ArtifactStabilization = 3398,
                SmallChat = 3406,
                NormalChat = 3407,
                Reincarnation = 3439,
                CTFEnd = 3549,
                CTFScores = 3359;
        }
        public class WindowCommands
        {
            public const ushort
                Compose = 1,
                Craft = 2,
                Warehouse = 4,
                DetainRedeem = 336,
                DetainClaim = 337,
                VIPWarehouse = 341,
                Breeding = 368,
                PurificationWindow = 455,
                StabilizationWindow = 459,
                TalismanUpgrade = 347,
                GemComposing = 422,
                OpenSockets = 425,
                Blessing = 426,
                TortoiseGemComposing = 438,
                RefineryStabilization = 448,
                HorseRacingStore = 464,
                JiangHuSetName = 617,
                Reincarnation = 485;
        }
        public const ushort
            DragonBallDropped = 165,
             JumpOutEffect = 134,
                ObserveKnownPerson = 54,
                SetLocation = 74,
                Hotkeys = 75,
                ConfirmFriends = 76,
                ConfirmProficiencies = 77,
                ConfirmSpells = 78,
                ChangeDirection = 79,
                ChangeAction = 81,
                UsePortal = 85,
                Teleport = 86,
                Leveled = 92,
                XPListEnd = 93,
                Revive = 94,
                DeleteCharacter = 95,
                ChangePKMode = 96,
                ConfirmGuild = 97,
                SwingPickaxe = 99,
                TeamMemberPos = 101,
                UnknownEntity = 102,
                TeamSearchForMember = 106,
                RemoveSpell = 109,
                NewCoordonates = 108,
                OwnBooth = 111,
                GetSurroundings = 114,
                OpenCustom = 116,
                ObserveEquipment = 117,
                EndTransformation = 118,
                EndFly = 120,
                ViewEnemyInfo = 123,
                OpenWindow = 126,
                JiangHu0 = 126,
                CompleteLogin = 251,
                RemoveEntity = 135,
                AddEntity = 134,
                Jump = 137,
                Die = 145,
                EndTeleport = 146,
                ViewFriendInfo = 148,
                ChangeFace = 151,
                ViewPartnerInfo = 152,
                Confiscator = 153,
                OpenShop = 0xA0,
                FlashStep = 156,
                CountDown = 159,
                Away = 161,
                AutoPatcher = 162,
                 HideGui = 158,
                AppearanceType = 178,
                SpawnEffect = 134,
                LevelUpSpell = 252,
                RemoveTrap = 434,
                LevelUpProficiency = 253,
                ObserveEquipment2 = 310,
                BeginSteedRace = 401,
                FinishSteedRace = 402,
                DetainWindowRequest = 153;
        public void MsgAction(Client.GameState client, MsgActionProto action, bool SendScreen = false)
        {
            MsgActionProto Action = new MsgActionProto();
            Action = action;
            if (SendScreen == true)
            {
                if (client.Entity.EntityFlag == EntityFlag.Entity)
                {
                    client.SendScreen(SendPacket(Action));
                }
                else if (client.Entity.EntityFlag == EntityFlag.Monster)
                {
                    client.Entity.MonsterInfo.SendScreen(SendPacket(Action));
                }
            }
            else
            {
                if (client.Entity.EntityFlag == EntityFlag.Entity)
                {
                    client.Send(SendPacket(Action));
                }
            }
        }
        public MsgActionProto Info;
        public void Handle(Client.GameState client, byte[] packet)
        {
            Info = new MsgActionProto();
            var myPacket = new byte[packet.Length - 8];
            for (int i = 0; i < myPacket.Length; i++)
            {
                myPacket[i] = packet[i];
            }
            using (var memoryStream = new MemoryStream(myPacket))
            {
                Info = Serializer.DeserializeWithLengthPrefix<MsgActionProto>(memoryStream, PrefixStyle.Fixed32);
            }
            switch (Info.ID)
            {
                case SetLocation:
                    if (client._setlocation)
                    {
                        if (client.Entity.MyJiang != null)
                        {
                            JiangHu.AttributesToArray(client);
                            if (client.Entity.MyJiang.SecondsEnd != 0)
                            {
                                client.Entity.MyJiang.SendOnline(client, true);
                                client.Entity.MyJiang.OnShutDown = true;
                                client.Entity.MyJiang.StartJiang = Time32.Now;
                                client.LoadItemStats();
                            }
                            else
                            {
                                client.Entity.MyJiang.SendToArray(client, false);
                            }
                        }
                        else if (client.Entity.Reborn == 2)
                        {
                            TalentStatus tal = new TalentStatus(client.Entity.UID);
                            tal.Mode = "0";
                            tal.Type = 0;
                            client.Send(tal);
                        }
                        SendFlower sendFlower = new SendFlower();
                        sendFlower.Typing = (Flowers.IsBoy((uint)client.Entity.Body) ? 3u : 2u);
                        //   sendFlower.Apprend(client.Entity.MyFlowers);
                        client.Send(sendFlower.ToArray());
                        client.Send(client.Entity.MyAchievement.ToArray());
                        // ElitePKTournament.GiveClientReward(client);
                        if (client.Guild != null)
                        {
                            client.Guild.SendGuild(client);
                            GuildMinDonations guildMinDonations = new GuildMinDonations(31);
                            guildMinDonations.AprendGuild(client.Guild);
                            client.Send(guildMinDonations.ToArray());
                        }
                        Clan clan = client.Entity.GetClan;
                        if (clan != null)
                        {
                            clan.Build(client, Clan.Types.Info);
                            client.Send(clan);
                            client.Entity.ClanName = clan.Name;
                            client.Send(new ClanRelations(clan, ClanRelations.RelationTypes.Allies));
                            client.Send(new ClanRelations(clan, ClanRelations.RelationTypes.Enemies));
                        }
                        foreach (Game.ConquerStructures.Society.Guild guild in Kernel.Guilds.Values)
                        {
                            guild.SendName(client);
                            guild.SendName(client);
                        }
                        if (client.Entity.EnlightmentTime > 0)
                        {
                            Enlight enlight = new Enlight(true);
                            enlight.Enlighted = client.Entity.UID;
                            enlight.Enlighter = 0;
                            if (client.Entity.EnlightmentTime > 80)
                                client.Entity.EnlightmentTime = 100;
                            else if (client.Entity.EnlightmentTime > 60)
                                client.Entity.EnlightmentTime = 80;
                            else if (client.Entity.EnlightmentTime > 40)
                                client.Entity.EnlightmentTime = 60;
                            else if (client.Entity.EnlightmentTime > 20)
                                client.Entity.EnlightmentTime = 40;
                            else if (client.Entity.EnlightmentTime > 0)
                                client.Entity.EnlightmentTime = 20;
                            for (int count = 0; count < client.Entity.EnlightmentTime; count += 20)
                            {
                                client.Send(enlight);
                            }
                        }
                        if (client.Entity.Hitpoints != 0)
                        {
                            if (client.Map.ID == 1036 || client.Map.ID == 1039)
                            {
                                if (client.Entity.PreviousMapID == 0)
                                    client.Entity.SetLocation(1002, 410, 354);
                                else
                                {
                                    switch (client.Entity.PreviousMapID)
                                    {
                                        default:
                                            {
                                                client.Entity.SetLocation(1002, 410, 354);
                                                break;
                                            }
                                        case 1000:
                                            {
                                                client.Entity.SetLocation(1000, 500, 650);
                                                break;
                                            }
                                        case 1020:
                                            {
                                                client.Entity.SetLocation(1020, 565, 562);
                                                break;
                                            }
                                        case 1011:
                                            {
                                                client.Entity.SetLocation(1011, 188, 264);
                                                break;
                                            }
                                        case 1015:
                                            {
                                                client.Entity.SetLocation(1015, 717, 571);
                                                break;
                                            }
                                    }
                                }
                            }
                        }
                        else
                        {
                            if (client.Entity.MapID == 1038 && New_Thor_S_B_Mohamed_Hossam.Game.GuildWar.IsWar)
                            {
                                client.Entity.SetLocation(6001, 31, 74);
                            }
                            else
                            {
                                ushort[] Point = Database.DataHolder.FindReviveSpot(client.Map.ID);
                                client.Entity.SetLocation(Point[0], Point[1], Point[2]);
                            }
                        }
                        Info.dwParam = client.Map.BaseID;
                        Info.wParam1 = client.Entity.X;
                        Info.wParam2 = client.Entity.Y;
                        client.Send(SendPacket(Info));
                        client.Screen.Reload(null);//Done
                        client.Screen.FullWipe();
                        client.SendScreenSpawn(client.Entity, true);
                        client.Screen.Reload(null);
                    }
                    break;
                case 256:
                    {
                        if (client.SashSlots < 200)
                        {
                            if (client.Entity.ConquerPoints >= 90)
                            {
                                client.Entity.ConquerPoints -= 90;
                                client.SashSlots += 1;
                            }
                            else
                            {
                                client.Entity.SendSysMesage("make sure you Have 90 CPs");
                            }
                        }
                        else
                        {
                            client.Entity.SendSysMesage("you already opened max number of slots");
                        }
                        break;
                    }
                case 255:
                    {
                        //PrintPacket(packet);
                        Info.UID = client.Entity.UID;
                        Info.ID = 257;
                        client.Send(SendPacket(Info));
                        break;
                    }
                case DetainWindowRequest:
                    {
                        if (!client.JustOpenedDetain)
                        {
                            if (client.DeatinedItem.Count != 0)
                            {
                                MsgActionProto Action = new MsgActionProto();
                                Action.ID = MsgAction_TATA.OpenWindow;
                                Action.UID = client.Entity.UID;
                                Action.dwParam = (uint)WindowCommands.DetainRedeem;
                                Action.TimeStamp = (uint)Time32.Now.GetHashCode();
                                client.Send(MsgAction_TATA.SendPacket(Action));
                            }
                            if (client.ClaimableItem.Count != 0)
                            {
                                MsgActionProto Action = new MsgActionProto();
                                Action.ID = MsgAction_TATA.OpenWindow;
                                Action.UID = client.Entity.UID;
                                Action.dwParam = (uint)WindowCommands.DetainClaim;
                                Action.TimeStamp = (uint)Time32.Now.GetHashCode();
                                client.Send(MsgAction_TATA.SendPacket(Action));
                            }
                        }
                        client.JustOpenedDetain = !client.JustOpenedDetain;
                        break;
                    }
                case 408:
                    {
                        if (!client.JustOpenedDetain)
                        {
                            if (client.ClaimableItem.Count != 0)
                            {
                                MsgActionProto Action = new MsgActionProto();
                                Action.ID = MsgAction_TATA.OpenWindow;
                                Action.UID = client.Entity.UID;
                                Action.dwParam = (uint)MsgAction_TATA.WindowCommands.DetainClaim;
                                Action.TimeStamp = (uint)Time32.Now.GetHashCode();
                                Action.wParam1 = client.Entity.X;
                                Action.wParam2 = client.Entity.Y;
                                client.Send(MsgAction_TATA.SendPacket(Action));
                            }
                        }
                        client.JustOpenedDetain = !client.JustOpenedDetain;
                        break;
                    }
                case 132:
                    {
                        Console.WriteLine("Dis? " + client.Entity.Name);
                        client.Disconnect();
                        break;
                    }
                case AppearanceType:
                    {
                        if (client.Entity.Tournament_Signed)
                            return;
                        Info.UID = client.Entity.UID;
                        client.Entity.Appearance = (Game.AppearanceType)Info.dwParam;
                        client.Appearance = (uint)client.Entity.Appearance;
                        client.SendScreen(SendPacket(Info), true);
                        break;
                    }
                case CompleteLogin:
                    {
                        MsgSignIn.Show(client);
                        PacketHandler.LoginMessages(client);
                        client.Send(packet);
                        break;
                    }
                case LevelUpSpell:
                    {
                        if (client.Trade.InTrade)
                            return;
                        MsgSpell Spell;
                        if (client.MySpells.ClientSpells.TryGetValue((ushort)Info.dwParam, out Spell))
                        {
                            Dictionary<ushort, Database.MagicType.Magic> DbSpells;
                            if (Kernel.Magic.TryGetValue(Spell.ID, out DbSpells))
                            {
                                if (Spell.Level < DbSpells.Count - 1)
                                {
                                    decimal cpCost = DbSpells[Spell.Level].CpsCost;
                                    cpCost = ((cpCost / 2) - (cpCost / 2 / 10)) / 10;
                                    int max = Math.Max((int)Spell.Experience, 1);
                                    int percentage = (int)Math.Ceiling((decimal)(100 - (int)(max / Math.Max((DbSpells[Spell.Level].Experience / 100), 1))));
                                    cpCost = Math.Ceiling((decimal)(cpCost * percentage / 100));
                                    if (client.Entity.ConquerPoints >= cpCost)
                                    {
                                        client.Entity.ConquerPoints -= (ulong)cpCost;
                                        client.MySpells.Add(packet, Spell.ID, (ushort)(Spell.Level + 1), Spell.SoulLevel, Spell.PreviousLevel, 0);
                                    }
                                }
                            }
                        }
                        break;
                    }
                case LevelUpProficiency:
                    {
                        ushort proficiencyID = (ushort)Info.dwParam;
                        IProf proficiency = null;
                        if (client.Proficiencies.TryGetValue(proficiencyID, out proficiency))
                        {
                            if (proficiency.Level != 20)
                            {
                                if (client.Trade.InTrade) return;
                                uint cpCost = 0;
                                #region Costs
                                switch (proficiency.Level)
                                {
                                    case 1: cpCost = 28; break;
                                    case 2: cpCost = 28; break;
                                    case 3: cpCost = 28; break;
                                    case 4: cpCost = 28; break;
                                    case 5: cpCost = 28; break;
                                    case 6: cpCost = 55; break;
                                    case 7: cpCost = 81; break;
                                    case 8: cpCost = 135; break;
                                    case 9: cpCost = 162; break;
                                    case 10: cpCost = 270; break;
                                    case 11: cpCost = 324; break;
                                    case 12: cpCost = 324; break;
                                    case 13: cpCost = 324; break;
                                    case 14: cpCost = 324; break;
                                    case 15: cpCost = 375; break;
                                    case 16: cpCost = 548; break;
                                    case 17: cpCost = 799; break;
                                    case 18: cpCost = 1154; break;
                                    case 19: cpCost = 1420; break;
                                }
                                #endregion
                                uint needExperience = Database.DataHolder.ProficiencyLevelExperience(proficiency.Level);
                                int max = Math.Max((int)proficiency.Experience, 1);
                                int percentage = 100 - (int)(max / (needExperience / 100));
                                cpCost = (uint)(cpCost * percentage / 100);
                                if (client.Entity.ConquerPoints >= cpCost)
                                {
                                    client.Entity.ConquerPoints -= cpCost;
                                    proficiency.Level++;
                                    if (proficiency.Level == proficiency.PreviousLevel / 2)
                                    {
                                        proficiency.Level = proficiency.PreviousLevel;
                                        Database.DataHolder.ProficiencyLevelExperience((byte)(proficiency.Level + 1));
                                    }
                                    proficiency.Experience = 0;
                                    proficiency.Send(client);
                                }
                            }
                        }
                        break;
                    }
                case SwingPickaxe:
                    client.Mining = true;
                    break;
                case Revive:
                    {
                        if (client.Entity.ContainFlag(MsgUpdate.Flags.SoulShackle))
                            return;
                        if (client.InTeamQualifier())
                            return;
                        client.Entity.OnDeath = null;
                        bool ReviveHere = Info.dwParam == 1;
                        bool Rev = Info.dwParam == 0;
                        if (client.Entity.StraightLife && !ReviveHere && !Rev)
                        {
                            client.Entity.BringToLife();
                            client.Entity.Teleport(client.Entity.MapID, client.Entity.X, client.Entity.Y, false);
                            var spell = Database.SpellTable.GetSpell(1095, 4);
                            client.Entity.AddFlag(MsgUpdate.Flags.Stigma, (int)spell.Duration, true);
                            var spell1 = Database.SpellTable.GetSpell(1090, 4);
                            client.Entity.AddFlag(MsgUpdate.Flags.MagicShield, (int)spell1.Duration, true);
                            client.Entity.StraightLife = false;
                        }
                        else
                        {
                            if (Time32.Now >= client.Entity.DeathStamp.AddSeconds(18))
                            {
                                //
                                client.Entity.Action = New_Thor_S_B_Mohamed_Hossam.Game.Enums.ConquerAction.None;
                                client.ReviveStamp = Time32.Now;
                                client.Attackable = false;
                                client.Entity.TransformationID = 0;
                                client.Entity.RemoveFlag(MsgUpdate.Flags.Dead);
                                client.Entity.RemoveFlag(MsgUpdate.Flags.Ghost);
                                client.Entity.Hitpoints = client.Entity.MaxHitpoints;
                                if (client.Entity.MapID == 1507 || client.Entity.MapID == 1508 || client.Entity.MapID == 1509)
                                {
                                    client.Entity.Teleport(1002, 410, 354);
                                    return;
                                }
                                if (client.Entity.MapID == 1518)
                                {
                                    client.Entity.Teleport(1002, 410, 354);
                                    return;
                                }
                                if (ReviveHere && (client.Entity.HeavenBlessing > 0))
                                {
                                    if (client.Entity.MapID == 10137)
                                    {
                                        client.Entity.Teleport(client.Map.BaseID, client.Entity.X, client.Entity.Y, false);
                                        return;
                                    }
                                }
                                if (client.Entity.MapID == 700)
                                {
                                    client.Entity.Teleport(700, 51, 51);
                                }
                                if (client.Entity.MapID == 3868)
                                {
                                    client.Entity.Teleport(3868, 227, 240);
                                }
                                if (client.Entity.MapID == 1038 && DateTime.Now.DayOfWeek == DayOfWeek.Friday)
                                {
                                    client.Entity.Teleport(6001, 31, 74);
                                }
                                else if (client.Entity.MapID == 10380 && DateTime.Now.Day >= 27 && DateTime.Now.Day <= 29)
                                {
                                    client.Entity.Teleport(1002, 410, 354);
                                }
                                else if (client.Entity.MapID == 1509)
                                {
                                    client.Entity.Teleport(1509, 103, 43);
                                }
                                else if (client.Entity.MapID == 11024)
                                {
                                    client.Entity.Teleport(11024, 303, 147);
                                }
                                else if (client.Entity.MapID == 11032)
                                {
                                    client.Entity.Teleport(11032, 226, 227);
                                }
                                else if (client.Entity.MapID == 2014)
                                {
                                    client.Entity.Teleport(2014, 150, 162);
                                }
                                else if (client.Entity.MapID == 10137)
                                {
                                    client.Entity.Teleport(10137, 96, 411);
                                }
                                else if (client.Entity.MapID == GuildScoreWar.Map.ID)
                                {
                                    client.Entity.Teleport(GuildScoreWar.Map.ID, 226, 229);
                                }
                                else if (client.Entity.MapID == 2071 || client.Entity.MapID == 11022)
                                {
                                    client.Entity.Teleport(client.Entity.MapID, 43, 129);
                                }
                                else if (client.Entity.MapID == 1730)
                                {
                                    client.Entity.Teleport(1731, 59, 69);
                                }
                                else if (client.Entity.MapID == 1731)
                                {
                                    client.Entity.Teleport(1732, 59, 69);
                                }
                                else if (client.Entity.MapID == 1732)
                                {
                                    client.Entity.Teleport(1733, 59, 69);
                                }
                                else if (client.Entity.MapID == 1733)
                                {
                                    client.Entity.Teleport(1734, 59, 69);
                                }
                                else if (client.Entity.MapID == 1734)
                                {
                                    client.Entity.Teleport(1735, 59, 69);
                                }
                                else if (client.Entity.MapID == 1735)
                                {
                                }
                                else if (client.Entity.MapID == 2071)
                                {
                                    client.Entity.Teleport(2071, 44, 130);
                                }
                                else if (client.Entity.MapID == 11017)
                                {
                                    client.Entity.Teleport(11017, 302, 147);
                                }
                                else if (client.Entity.MapID == 1510)
                                {
                                    client.Entity.Teleport(1510, 103, 44);
                                }
                                else if (client.Entity.MapID == 3693)
                                {
                                    client.Entity.Teleport(1002, 410, 354);
                                }
                                else if (client.Entity.MapID == 7777)
                                {
                                    client.Entity.Teleport(7777, 150, 164);
                                }
                                else if (client.Entity.MapID == 8883)
                                {
                                    if (client.Entity.TeamDeathMatch_BlackTeam == true)
                                    {
                                        client.Entity.Teleport(8883, 042, 051);
                                    }
                                    if (client.Entity.TeamDeathMatch_BlueTeam == true)
                                    {
                                        client.Entity.Teleport(8883, 060, 042);
                                    }
                                    if (client.Entity.TeamDeathMatch_WhiteTeam == true)
                                    {
                                        client.Entity.Teleport(8883, 066, 064);
                                        if (client.Entity.TeamDeathMatch_RedTeam == true)
                                        {
                                            client.Entity.Teleport(8883, 039, 036);
                                        }
                                    }
                                }
                                else
                                {
                                    if (ReviveHere && (client.Entity.HeavenBlessing > 0 || client.Entity.PKMode == Enums.PKMode.Jiang || client.Entity.JiangActive == true))
                                    {
                                        if (client.Entity.MapID == 1762)
                                        {
                                            client.Entity.Teleport(1762, 290, 72);
                                        }
                                        else
                                            client.Entity.Teleport(client.Entity.MapID, client.Entity.X, client.Entity.Y, false);
                                    }
                                    else
                                    {
                                        ushort[] Point = Database.DataHolder.FindReviveSpot(client.Map.ID);
                                        client.Entity.Teleport(Point[0], Point[1], Point[2], false);
                                    }
                                }
                            }
                        }
                        break;
                    }
                case UsePortal:
                    {
                        client.Entity.Action = New_Thor_S_B_Mohamed_Hossam.Game.Enums.ConquerAction.None;
                        client.ReviveStamp = Time32.Now;
                        client.Attackable = false;
                        ushort portal_X = (ushort)(Info.dwParam & 0xFFFF);
                        ushort portal_Y = (ushort)(Info.dwParam >> 16);
                        string portal_ID = portal_X.ToString() + ":" + portal_Y.ToString() + ":" + client.Map.ID.ToString();
                        if (client.Account.State == Database.AccountTable.AccountState.ProjectManager)
                            client.Send(new Message("Portal ID: " + portal_ID, System.Drawing.Color.Red, Network.GamePackets.Message.TopLeft));
                        foreach (Game.Portal portal in client.Map.Portals)
                        {
                            int P = Kernel.GetDistance(portal.CurrentX, portal.CurrentY, client.Entity.X, client.Entity.Y);
                            if (P <= 20)
                            {
                                client.Entity.Teleport(portal.DestinationMapID, portal.DestinationX, portal.DestinationY);
                                return;
                            }
                        }
                        client.Entity.Teleport(1002, 410, 354);
                        break;
                    }
                case ChangePKMode:
                    {
                        if (client.Entity.TeamWatchingMatch != null || client.Entity.SkillWatchingMatch != null || client.WatchingElitePKMatch != null || client.WatchingGroup != null || client.TeamWatchingGroup != null)
                        {
                            client.Send("You can not change your pk mode while you are watching.");
                            return;
                        }
                        if (client.Team != null && (client.Team.TeamMatch != null || client.Team.SkillMatch != null))
                            return;
                        if (client.InTeamQualifier()) return;
                        if (client.Entity.PKMode == Game.Enums.PKMode.Jiang)
                        {
                            if ((Game.Enums.PKMode)(byte)Info.dwParam != Game.Enums.PKMode.Jiang)
                            {
                                if (client.Entity.MyJiang != null && client.Entity.JiangActive)
                                {
                                    client.Entity.MyJiang.StartJiang = Time32.Now;
                                    client.Entity.MyJiang.SecondsEnd = 60;
                                    client.Entity.MyJiang.OnShutDown = true;
                                }
                            }
                        }
                        client.Entity.AttackPacket = null;
                        client.Entity.PKMode = (Game.Enums.PKMode)(byte)Info.dwParam;
                        Info.dwParam2 = Info.dwParam;
                        client.Send(SendPacket(Info));
                        if (client.Entity.PKMode == Enums.PKMode.PK)
                        {
                            client.Send(new New_Thor_S_B_Mohamed_Hossam.Network.GamePackets.Message("Free PK mode. You can attack monster and all Entitys.", System.Drawing.Color.Red, 0x7d0));
                        }
                        else if (client.Entity.PKMode == Enums.PKMode.Capture)
                        {
                            client.Send(new New_Thor_S_B_Mohamed_Hossam.Network.GamePackets.Message("Capture PK mode. You can only attack monsters, black-name and blue-name Entitys.", System.Drawing.Color.Red, 0x7d0));
                        }
                        else if (client.Entity.PKMode == Enums.PKMode.Peace)
                        {
                            client.Send(new New_Thor_S_B_Mohamed_Hossam.Network.GamePackets.Message("Peace mode. You can only attack monsters.", System.Drawing.Color.Red, 0x7d0));
                        }
                        else if (client.Entity.PKMode == Enums.PKMode.Team)
                        {
                            client.Send(new New_Thor_S_B_Mohamed_Hossam.Network.GamePackets.Message("Team PK mode. You can attack monster and all Entitys except your teammates.", System.Drawing.Color.Red, 0x7d0));
                        }
                        else if (client.Entity.PKMode == Enums.PKMode.Revenge)
                        {
                            client.Send(new New_Thor_S_B_Mohamed_Hossam.Network.GamePackets.Message("Revenge PK mode. You can attack monster and all Your Enemy List Entitys.", System.Drawing.Color.Red, 0x7d0));
                        }
                        else if (client.Entity.PKMode == Enums.PKMode.Guild)
                        {
                            client.Send(new New_Thor_S_B_Mohamed_Hossam.Network.GamePackets.Message("Guild PK mode. You can attack monster and all Your Guild's Enemies", System.Drawing.Color.Red, 0x7d0));
                        }
                        else if (client.Entity.PKMode == Game.Enums.PKMode.Jiang)
                        {
                            client.Entity.MyJiang.SendOnline(client, true);
                        }
                        break;
                    }
                case ChangeAction:
                    {
                        if (client.ProgressBar != null)
                            client.ProgressBar.End(client);
                        client.Entity.Action = (ushort)Info.dwParam;
                        if (client.Entity.ContainFlag(MsgUpdate.Flags.CastPray))
                        {
                            foreach (var Client in client.Prayers)
                            {
                                Info.UID = Client.Entity.UID;
                                Info.dwParam = (uint)client.Entity.Action;
                                Info.wParam1 = Client.Entity.X;
                                Info.wParam2 = Client.Entity.Y;
                                Client.Entity.Action = client.Entity.Action;
                                if (Time32.Now >= Client.CoolStamp.AddMilliseconds(1500))
                                {
                                    if (Client.Equipment.IsAllSuper())
                                        Info.dwParam = (uint)(Info.dwParam | (uint)(Client.Entity.Class * 0x10000 + 0x1000000));
                                    else if (Client.Equipment.IsArmorSuper())
                                        Info.dwParam = (uint)(Info.dwParam | (uint)(Client.Entity.Class * 0x10000));
                                    Client.SendScreen(SendPacket(Info), true);
                                    Client.CoolStamp = Time32.Now;
                                }
                                else
                                    Client.SendScreen(SendPacket(Info), false);
                            }
                        }
                        Info.UID = client.Entity.UID;
                        Info.dwParam = (uint)client.Entity.Action;
                        if (client.Entity.Action == New_Thor_S_B_Mohamed_Hossam.Game.Enums.ConquerAction.Cool)
                        {
                            if (Time32.Now >= client.CoolStamp.AddMilliseconds(1500))
                            {
                                if (client.Equipment.IsAllSuper())
                                    Info.dwParam = (uint)(Info.dwParam | (uint)(client.Entity.Class * 0x10000 + 0x1000000));
                                else if (client.Equipment.IsArmorSuper())
                                    Info.dwParam = (uint)(Info.dwParam | (uint)(client.Entity.Class * 0x10000));
                                client.SendScreen(SendPacket(Info), true);
                                client.CoolStamp = Time32.Now;
                            }
                            else
                                client.SendScreen(SendPacket(Info), false);
                        }
                        else
                            client.SendScreen(SendPacket(Info), false);
                        break;
                    }
                case ChangeDirection:
                    {
                        client.Entity.Facing = (Game.Enums.ConquerAngle)Info.Facing;
                        client.SendScreen(SendPacket(Info), false);
                        break;
                    }
                case Hotkeys:
                    client.Send(packet);
                    break;
                case ConfirmSpells:
                    if (client.MySpells.ClientSpells != null)
                    {
                        client.MySpells.SendAll(packet);
                    }
                    client.Send(packet);
                    break;
                case ConfirmProficiencies:
                    if (client.Proficiencies != null)
                        foreach (Interfaces.IProf proficiency in client.Proficiencies.Values)
                            proficiency.Send(client);
                    client.Send(packet);
                    break;
                case ConfirmGuild:
                    client.Send(packet);
                    break;
                case ConfirmFriends:
                    #region Friends/Enemy/TradePartners/Apprentices
                    Message msg2 = new Message("Your friend, " + client.Entity.Name + ", has logged on.", System.Drawing.Color.Red, Message.TopLeft);
                    foreach (Game.ConquerStructures.Society.Friend friend in client.Friends.Values)
                    {
                        if (friend.IsOnline)
                        {
                            var pckt = new KnownPersons(true)
                            {
                                UID = client.Entity.UID,
                                Type = KnownPersons.RemovePerson,
                                Name = client.Entity.Name,
                                NobilityRank = client.Entity.NobilityRank,
                                IsBoy = Game.Features.Flowers.IsBoy(client.Entity.Body),
                                Online = true
                            };
                            friend.Client.Send(pckt);
                            pckt.Type = KnownPersons.AddFriend;
                            friend.Client.Send(pckt);
                            friend.Client.Send(msg2);
                        }
                        client.Send(new KnownPersons(true)
                        {
                            UID = friend.ID,
                            Type = KnownPersons.AddFriend,
                            Name = friend.Name,
                            NobilityRank = friend.NobilityRank,
                            IsBoy = friend.IsBoy,
                            Online = friend.IsOnline
                        });
                        if (friend.Message != "")
                        {
                            client.Send(new Message(friend.Message, client.Entity.Name, friend.Name, System.Drawing.Color.Red, Message.Whisper));
                            Database.KnownPersons.UpdateMessageOnFriend(friend.ID, client.Entity.UID, "");
                        }
                    }
                    foreach (Game.ConquerStructures.Society.Enemy enemy in client.Enemy.Values)
                    {
                        client.Send(new KnownPersons(true)
                        {
                            UID = enemy.ID,
                            Type = KnownPersons.AddEnemy,
                            Name = enemy.Name,
                            NobilityRank = enemy.NobilityRank,
                            //   IsBoy = enemy.IsBoy,
                            Online = enemy.IsOnline
                        });
                    }
                    Message msg3 = new Message("Your partner, " + client.Entity.Name + ", has logged in.", System.Drawing.Color.Red, Message.TopLeft);
                    foreach (Game.ConquerStructures.Society.TradePartner partner in client.Partners.Values)
                    {
                        if (partner.IsOnline)
                        {
                            var packet3 = new TradePartner(true)
                            {
                                UID = client.Entity.UID,
                                Type = TradePartner.BreakPartnership,
                                Name = client.Entity.Name,
                                HoursLeft = (int)(new TimeSpan(partner.ProbationStartedOn.AddDays(3).Ticks).TotalHours - new TimeSpan(DateTime.Now.Ticks).TotalHours),
                                Online = true
                            };
                            partner.Client.Send(packet3);
                            packet3.Type = TradePartner.AddPartner;
                            partner.Client.Send(packet3);
                            partner.Client.Send(msg3);
                        }
                        var packet4 = new TradePartner(true)
                        {
                            UID = partner.ID,
                            Type = TradePartner.AddPartner,
                            Name = partner.Name,
                            HoursLeft = (int)(new TimeSpan(partner.ProbationStartedOn.AddDays(3).Ticks).TotalHours - new TimeSpan(DateTime.Now.Ticks).TotalHours),
                            Online = partner.IsOnline
                        };
                        client.Send(packet4);
                    }
                    foreach (Game.ConquerStructures.Society.Apprentice appr in client.Apprentices.Values)
                    {
                        if (appr.IsOnline)
                        {
                            ApprenticeInformation AppInfo = new ApprenticeInformation();
                            AppInfo.Apprentice_ID = appr.ID;
                            AppInfo.Apprentice_Level = appr.Client.Entity.Level;
                            AppInfo.Apprentice_Class = appr.Client.Entity.Class;
                            AppInfo.Apprentice_PkPoints = appr.Client.Entity.PKPoints;
                            AppInfo.Apprentice_Experience = appr.Actual_Experience;
                            AppInfo.Apprentice_Composing = appr.Actual_Plus;
                            AppInfo.Apprentice_Blessing = appr.Actual_HeavenBlessing;
                            AppInfo.Apprentice_Name = appr.Name;
                            AppInfo.Apprentice_Online = true;
                            AppInfo.Apprentice_Spouse_Name = appr.Client.Entity.Spouse;
                            AppInfo.Enrole_date = appr.EnroleDate;
                            AppInfo.Mentor_ID = client.Entity.UID;
                            AppInfo.Mentor_Mesh = client.Entity.Mesh;
                            AppInfo.Mentor_Name = client.Entity.Name;
                            AppInfo.Type = 2;
                            client.Send(AppInfo);
                            MentorInformation Information = new MentorInformation(true);
                            Information.Mentor_Type = 1;
                            Information.Mentor_ID = client.Entity.UID;
                            Information.Apprentice_ID = appr.ID;
                            Information.Enrole_Date = appr.EnroleDate;
                            Information.Mentor_Level = client.Entity.Level;
                            Information.Mentor_Class = client.Entity.Class;
                            Information.Mentor_PkPoints = client.Entity.PKPoints;
                            Information.Mentor_Mesh = client.Entity.Mesh;
                            Information.Mentor_Online = true;
                            Information.Shared_Battle_Power = appr.Client.Entity.BattlePowerFrom(client.Entity);
                            Information.String_Count = 3;
                            Information.Mentor_Name = client.Entity.Name;
                            Information.Apprentice_Name = appr.Name;
                            Information.Mentor_Spouse_Name = client.Entity.Spouse;
                            appr.Client.ReviewMentor();
                            appr.Client.Send(Information);
                        }
                        else
                        {
                            ApprenticeInformation AppInfo = new ApprenticeInformation();
                            AppInfo.Apprentice_ID = appr.ID;
                            AppInfo.Apprentice_Name = appr.Name;
                            AppInfo.Apprentice_Online = false;
                            AppInfo.Enrole_date = appr.EnroleDate;
                            AppInfo.Mentor_ID = client.Entity.UID;
                            AppInfo.Mentor_Mesh = client.Entity.Mesh;
                            AppInfo.Mentor_Name = client.Entity.Name;
                            AppInfo.Type = 2;
                            client.Send(AppInfo);
                        }
                    }
                    #endregion
                    client.Send(packet);
                    break;
                case EndTeleport:
                    break;
                case GetSurroundings:
                    {
                        if (client.Booth != null)
                        {
                            client.Entity.TransformationID = 0;
                            client.Booth.Remove();
                            client.Booth = null;
                        }
                        client.Screen.FullWipe();
                        client.Screen.Reload(null);
                        Game.Weather.CurrentWeatherBase.Send(client);
                        client.Send(packet);
                        break;
                    }
                case Jump:
                    {
                        using (var rec = new ServerSockets.RecycledPacket())
                        {
                            var stream = rec.GetStream();
                            client.Entity.RemoveBuffersMovements(stream);
                        }
                        client.OnAutoAttack = false;
                        client.Entity.SetAway(false);
                        client.LastMove = Time32.Now;
                        if (client.Entity.Dead || client.Entity.ContainFlag((MsgUpdate.Flags.Dead)) || client.Entity.ContainFlag(MsgUpdate.Flags.Ghost))
                        {
                            return;
                        }
                        client.Entity.KillCount2 = 0;
                        client.Entity.SpiritFocus = false;
                        ushort oldX = client.Entity.X;
                        ushort oldY = client.Entity.Y;
                        if (client.Entity.OnCheckGuard)
                        {
                            client.Entity.OnCheckGuard = false;
                            client.MessageBox("Unable~to~check!", null, null, 0);
                            DialyQuestsEffect.CheckCancelGuard(client);
                            client.Entity.CheckGuardSec = 0;
                        }
                        if (client.Team == null)
                        {
                            if (client.Entity.SpookMap != null && client.Entity.MapID == client.Entity.SpookMap.ID && Kernel.GetDistance(client.Entity.X, client.Entity.Y, 36, 24) < 25)
                            {
                                ((INpc)new NpcSpawn
                                {
                                    UID = 8798,
                                    Mesh = 7610,
                                    Type = Enums.NpcType.Talker,
                                    X = 36,
                                    Y = 24,
                                    MapID = client.Entity.MapID
                                }).SendSpawn(client);
                                ((INpc)new NpcSpawn
                                {
                                    UID = 8308,
                                    Mesh = 2507,
                                    Type = Enums.NpcType.Talker,
                                    X = 25,
                                    Y = 30,
                                    MapID = client.Entity.MapID
                                }).SendSpawn(client);
                            }
                        }
                        else
                        {
                            if (client.Team.SpookMap != null && client.Entity.MapID == client.Team.SpookMap.ID && Kernel.GetDistance(client.Entity.X, client.Entity.Y, 36, 24) < 25)
                            {
                                ((INpc)new NpcSpawn
                                {
                                    UID = 8798,
                                    Mesh = 7610,
                                    Type = Enums.NpcType.Talker,
                                    X = 36,
                                    Y = 24,
                                    MapID = client.Entity.MapID
                                }).SendSpawn(client);
                                ((INpc)new NpcSpawn
                                {
                                    UID = 8308,
                                    Mesh = 2507,
                                    Type = Enums.NpcType.Talker,
                                    X = 25,
                                    Y = 30,
                                    MapID = client.Entity.MapID
                                }).SendSpawn(client);
                            }
                        }
                        if (client.Entity.MapID == 3846 && Kernel.SpawnNemesis2)
                        {
                            foreach (INpc Npc in client.Map.Npcs.Values)
                            {
                                if (Npc.MapID == 3846 && (Npc.UID == 3080) && Kernel.GetDistance(client.Entity.X, client.Entity.Y, Npc.X, Npc.Y) < 17)
                                {
                                    Npc.SendSpawn(client);
                                }
                            }
                        }
                        if (client.Entity.MapID == 1927 && Kernel.SpawnBanshee2)
                        {
                            foreach (INpc Npc in client.Map.Npcs.Values)
                            {
                                if (Npc.MapID == 1927 && (Npc.UID == 2999) && Kernel.GetDistance(client.Entity.X, client.Entity.Y, Npc.X, Npc.Y) < 17)
                                {
                                    Npc.SendSpawn(client);
                                }
                            }
                        }
                        client.Entity.Action = Enums.ConquerAction.None;
                        client.Mining = false;
                        if (client.Entity.ContainFlag(MsgUpdate.Flags.CastPray))
                        {
                            client.Entity.RemoveFlag(MsgUpdate.Flags.CastPray);
                            foreach (var Client in client.Prayers)
                            {
                                if (Client.Entity.ContainFlag(MsgUpdate.Flags.Praying))
                                {
                                    Client.Entity.RemoveFlag(MsgUpdate.Flags.Praying);
                                }
                            }
                            client.Prayers.Clear();
                        }
                        if (client.Entity.ContainFlag(MsgUpdate.Flags.Praying))
                        {
                            client.Entity.RemoveFlag(MsgUpdate.Flags.Praying);
                            client.PrayLead = null;
                        }
                        Time32 Now = Time32.Now;
                        client.Attackable = true;
                        if (client.Entity.AttackPacket != null)
                        {
                            client.Entity.AttackPacket = null;
                        }
                        if (client.Entity.Dead)
                        {
                            if (Now > client.Entity.DeathStamp.AddSeconds(4))
                            {
                                Console.WriteLine("Disconnected Jump");
                                client.Disconnect();
                                return;
                            }
                        }
                        ushort new_X = (ushort)Info.NewX;
                        ushort new_Y = (ushort)Info.NewY;
                        if (client.lastJumpDistance == 0) goto Jump;
                        if (client.Entity.ContainFlag(MsgUpdate.Flags.Ride))
                        {
                            int distance = Kernel.GetDistance(new_X, new_Y, client.Entity.X, client.Entity.Y);
                            ushort take = (ushort)(1.5F * (distance / 2));
                            if (client.Entity.Vigor >= take)
                            {
                                client.Entity.Vigor -= take;
                                ServerTime time = new ServerTime();
                                time.Type = (uint)2;
                                time.Year = (uint)client.Entity.Vigor;
                                client.Send(Kernel.FinalizeProtoBuf(time, Game.GamePackets.ServerInfo));
                            }
                        }
                        client.LastJumpTime = (int)Kernel.maxJumpTime(client.lastJumpDistance);
                        int a1 = Now.GetHashCode() - client.lastJumpTime.GetHashCode();
                        int a2 = Info.TimeStamp.GetHashCode() - client.lastClientJumpTime.GetHashCode();
                        bool DOO = false;
                        if (a2 - a1 > 1000) DOO = true;
                        if (Now < client.lastJumpTime.AddMilliseconds(client.LastJumpTime))
                        {
                            bool doDisconnect = false;
                            if (client.Entity.Transformed)
                                if (client.Entity.TransformationID != 207 && client.Entity.TransformationID != 267)
                                    doDisconnect = true;
                            if (client.Entity.Transformed && doDisconnect)
                            {
                                //client.Entity.Shift(client.Entity.X, client.Entity.Y);
                                //return;
                            }
                            if (client.Entity.Transformed && !doDisconnect)
                            {
                                goto Jump;
                            }
                            if (!client.Entity.OnCyclone() && !client.Entity.ContainFlag(MsgUpdate.Flags.Ride) && !DOO)
                            {
                                //Speedhack detected
                                //client.Entity.Shift(client.Entity.X, client.Entity.Y);
                                //client.Send(new Message("You have been shifted back . speed hack detected or just lag.", Message.Tip));
                                //return;
                            }
                            else if (client.Entity.ContainFlag(MsgUpdate.Flags.Ride))
                            {
                                int time = (int)Kernel.maxJumpTime(client.lastJumpDistance);
                                int speedprc = Database.DataHolder.SteedSpeed(client.Equipment.TryGetItem(ConquerItem.Steed).Plus);
                                if (speedprc != 0)
                                {
                                    if (Now < client.lastJumpTime.AddMilliseconds(time - (time * speedprc / 100)))
                                    {
                                        //client.Entity.Shift(client.Entity.X, client.Entity.Y);
                                        //return;
                                    }
                                }
                                else
                                {
                                    //client.Entity.Shift(client.Entity.X, client.Entity.Y);
                                    //return;
                                }
                            }
                        }
                    Jump:
                        client.lastJumpDistance = Kernel.GetDistance(new_X, new_Y, client.Entity.X, client.Entity.Y);
                        client.lastClientJumpTime = Time32.Now;
                        client.lastJumpTime = Now;
                        Game.Map Map = client.Map;
                        if (Map != null)
                        {
                            if (Map.Floor[new_X, new_Y, Game.MapObjectType.Entity, null])
                            {
                                if (Kernel.GetDistance(new_X, new_Y, client.Entity.X, client.Entity.Y) <= 20)
                                {
                                    client.Entity.Action = Game.Enums.ConquerAction.Jump;
                                    client.Entity.Facing = Kernel.GetAngle((ushort)Info.wParam1, (ushort)Info.wParam2, (ushort)new_X, (ushort)new_Y);
                                    client.Entity.PX = client.Entity.X;
                                    client.Entity.PY = client.Entity.Y;
                                    client.Entity.X = new_X;
                                    client.Entity.Y = new_Y;
                                    if (client.Entity.MapID == MsgCaptureTheFlag.MapID)
                                        PacketHandler.CheckForFlag(client);
                                    foreach (Interfaces.IMapObject obj in client.Screen.Objects)
                                    {
                                        if (obj == null) continue;
                                        if (obj.UID != client.Entity.UID)
                                        {
                                            if (obj.MapObjType == Game.MapObjectType.Entity)
                                            {
                                                GameState client2 = obj.Owner as GameState;
                                                client2.Send(SendPacket(Info));
                                            }
                                        }
                                    }
                                    client.Send(SendPacket(Info));
                                    client.Screen.Reload(SendPacket(Info));
                                    //if (client.Entity.InteractionInProgress && client.Entity.InteractionSet)
                                    //{
                                    //    if (client.Entity.Body == 1005 || client.Entity.Body == 1006)
                                    //    {
                                    //        if (Kernel.GamePool.ContainsKey(client.Entity.InteractionWith))
                                    //        {
                                    //            Client.GameState ch = Kernel.GamePool[client.Entity.InteractionWith];
                                    //            New_Thor_S_B_Mohamed_Hossam.Network.GamePackets.Data general = new New_Thor_S_B_Mohamed_Hossam.Network.GamePackets.Data(true);
                                    //            general.UID = ch.Entity.UID;
                                    //            general.wParam1 = new_X;
                                    //            general.wParam2 = new_Y;
                                    //            general.ID = 0x9c;
                                    //            ch.Send(general.ToArray());
                                    //            ch.Entity.Action = Game.Enums.ConquerAction.Jump;
                                    //            ch.Entity.X = new_X;
                                    //            ch.Entity.Y = new_Y;
                                    //            ch.Entity.Facing = Kernel.GetAngle(ch.Entity.X, ch.Entity.Y, new_X, new_Y);
                                    //            ch.SendScreen(generalData, true);
                                    //            ch.Screen.Reload(general);
                                    //            client.SendScreen(generalData, true);
                                    //            client.Screen.Reload(general);
                                    //        }
                                    //    }
                                    //}
                                }
                                else
                                {
                                    client.Disconnect();
                                }
                            }
                            else
                            {
                                if (client.Entity.Mode == Game.Enums.Mode.None)
                                {
                                    client.Entity.Teleport(client.Map.ID, client.Entity.X, client.Entity.Y);
                                }
                            }
                        }
                        else
                        {
                            if (Kernel.GetDistance(new_X, new_Y, client.Entity.X, client.Entity.Y) <= 20)
                            {
                                client.Entity.Action = Game.Enums.ConquerAction.Jump;
                                client.Entity.Facing = Kernel.GetAngle((ushort)Info.wParam1, (ushort)Info.wParam2, (ushort)new_X, (ushort)new_Y);
                                client.Entity.X = new_X;
                                client.Entity.Y = new_Y;
                                foreach (Interfaces.IMapObject obj in client.Screen.Objects)
                                {
                                    if (obj == null) continue;
                                    if (obj.UID != client.Entity.UID)
                                    {
                                        if (obj.MapObjType == Game.MapObjectType.Entity)
                                        {
                                            GameState client2 = obj.Owner as GameState;
                                            client2.Send(SendPacket(Info));
                                        }
                                    }
                                }
                                client.Send(SendPacket(Info));
                                client.Screen.Reload(SendPacket(Info));
                            }
                            else
                            {
                                client.Disconnect();
                            }
                        }
                        if (client.Map.BaseID == 1038 && (New_Thor_S_B_Mohamed_Hossam.Game.GuildWar.IsWar || New_Thor_S_B_Mohamed_Hossam.Game.SuperGuildWar.IsWar))
                        {
                            New_Thor_S_B_Mohamed_Hossam.Game.Calculations.IsBreaking(client, oldX, oldY);
                        }
                        if (!client.Entity.HasMagicDefender)
                        {
                            if (client.Team != null)
                            {
                                var owners = client.Team.Teammates.Where(x => x.Entity.MagicDefenderOwner);
                                if (owners != null)
                                {
                                    foreach (var owner in owners)
                                    {
                                        if (Kernel.GetDistance(client.Entity.X, client.Entity.Y, owner.Entity.X, owner.Entity.Y) <= 4)
                                        {
                                            client.Entity.HasMagicDefender = true;
                                            client.Entity.MagicDefenderStamp = Time32.Now;
                                            client.Entity.MagicDefenderSecs = (byte)(owner.Entity.MagicDefenderStamp.AddSeconds(owner.Entity.MagicDefenderSecs) - owner.Entity.MagicDefenderStamp).AllSeconds();
                                            client.Entity.AddFlag(Game.MsgServer.MsgUpdate.Flags.MagicDefender, 60, true);
                                            using (var rec = new ServerSockets.RecycledPacket())
                                            {
                                                var stream = rec.GetStream();
                                                Game.MsgServer.MsgUpdate upgrade = new Game.MsgServer.MsgUpdate(stream, client.Entity.UID, 1);
                                                //upgrade.UID = client.Entity.UID;
                                                upgrade.Append(stream, Game.MsgServer.MsgUpdate.DataType.AzureShield, 128, client.Entity.MagicDefenderSecs, 0, 0);
                                                client.Send(stream);
                                                //client.Send(upgrade.ToArray());
                                            }
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            client.Entity.RemoveMagicDefender();
                        }
                        Database.EntityTable.UpdateCored(client);
                        client.Entity.SpellStamp = Time32.Now.AddSeconds(-1);
                        break;
                    }
                case UnknownEntity:
                    {
                        #region UnknownEntity
                        Client.GameState pClient = null;
                        if (Kernel.GamePool.TryGetValue(Info.dwParam, out pClient))
                        {
                            if (Kernel.GetDistance(pClient.Entity.X, pClient.Entity.Y, client.Entity.X, client.Entity.Y) <= Constants.pScreenDistance && client.Map.ID == pClient.Map.ID)
                            {
                                if (pClient.Guild != null)
                                    pClient.Guild.SendName(client);
                                if (client.Guild != null)
                                    client.Guild.SendName(pClient);
                                if (pClient.Entity.UID != client.Entity.UID)
                                {
                                    if (pClient.Map.ID == client.Map.ID)
                                    {
                                        if (pClient.Map.BaseID == 700 && pClient.Map.ID != 700)
                                        {
                                            if (client.InQualifier())
                                            {
                                                if (pClient.InQualifier())
                                                {
                                                    client.Entity.SendSpawn(pClient);
                                                    pClient.Entity.SendSpawn(client);
                                                    if (pClient.Guild != null)
                                                        client.Entity.SendSpawn(pClient, false);
                                                    if (client.Guild != null)
                                                        pClient.Entity.SendSpawn(client, false);
                                                }
                                                else
                                                {
                                                    client.Entity.SendSpawn(pClient);
                                                    if (pClient.Guild != null)
                                                        client.Entity.SendSpawn(pClient, false);
                                                    client.Screen.Add(pClient.Entity);
                                                }
                                            }
                                            else
                                            {
                                                if (pClient.InQualifier())
                                                {
                                                    pClient.Entity.SendSpawn(client);
                                                    if (client.Guild != null)
                                                        pClient.Entity.SendSpawn(client, false);
                                                    pClient.Screen.Add(client.Entity);
                                                }
                                                else
                                                {
                                                    client.Entity.SendSpawn(pClient, false);
                                                    pClient.Entity.SendSpawn(client, false);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            client.Entity.SendSpawn(pClient, false);
                                            pClient.Entity.SendSpawn(client, false);
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            Game.Entity monster = null;
                            if (client.Map.Entities.TryGetValue(Info.dwParam, out monster))
                            {
                                if (Kernel.GetDistance(monster.X, monster.Y, client.Entity.X, client.Entity.Y) <= Constants.pScreenDistance)
                                {
                                    monster.SendSpawn(client, false);
                                }
                            }
                            //if (client.Map.Companions.TryGetValue(gdwParam, out monster))
                            //{
                            //    if (Kernel.GetDistance(monster.X, monster.Y, client.Entity.X, client.Entity.Y) <= Constants.pScreenDistance)
                            //    {
                            //        monster.SendSpawn(client, false);
                            //    }
                            //}
                        }
                        #endregion
                        break;
                    }
                case ChangeFace:
                    {
                        if (client.Entity.Money >= 500)
                        {
                            uint newface = Info.dwParam;
                            if (client.Entity.Body > 2000)
                            {
                                newface = newface < 200 ? newface + 200 : newface;
                                client.Entity.Face = (ushort)newface;
                            }
                            else
                            {
                                newface = newface > 200 ? newface - 200 : newface;
                                client.Entity.Face = (ushort)newface;
                            }
                        }
                        break;
                    }
                case ObserveEquipment:
                case ObserveEquipment2:
                case ObserveKnownPerson:
                    {
                        if (!client.Entity.InSkillMatch())
                        {
                            double power = 1.5;
                            client.Entity.EquipmentColor = (uint)power;
                            //  client.Entity.BattlePower /= 2;
                            if (PacketHandler.NulledClient(client))
                                return;
                            GameState Observer, Observee;
                            if (Kernel.GamePool.TryGetValue(Info.UID, out Observer) && Kernel.GamePool.TryGetValue(Info.dwParam, out Observee))
                            {
                                if (Info.ID != 117)
                                {
                                    Observee.Entity.Class = Observee.Entity.Class;
                                    Observer.Send(Observee.Entity.PlayerProto(Observee.Entity, 1));
                                    WindowsStats WS = new WindowsStats(Observee);
                                    WS.Send(Observer);
                                }
                                for (byte Position = 1; (int)Position <= 29; ++Position)
                                {
                                    ConquerItem i = Observee.Equipment.TryGetItem(Position);
                                    if (i != null && i.IsWorn)
                                    {
                                        BoothItem boothItem = new BoothItem();
                                        boothItem.CostType = (ushort)BoothItem.CostTypes.ViewEquip;
                                        boothItem.Identifier = Observee.Entity.UID;
                                        boothItem.Position = (PacketHandler.Positions)((uint)Position);
                                        boothItem.ParseItem(i);
                                        Observer.Send((IPacket)boothItem);
                                        i.SendExtras(client);
                                    }
                                }
                                foreach (var it in Observee.Entity.RuneItem.Values.Where(x => x.Position == 101 || x.Position == 102 || x.Position == 103 || x.Position == 104 || x.Position == 105))
                                {
                                    BoothItem boothItem = new BoothItem();
                                    boothItem.CostType = (ushort)(BoothItem.CostTypes)7;
                                    boothItem.Identifier = Observee.Entity.UID;
                                    boothItem.Position = (New_Thor_S_B_Mohamed_Hossam.Network.PacketHandler.Positions)it.Position;
                                    boothItem.ParseItem(it);
                                    Observer.Send((IPacket)boothItem);
                                }
                                _String packet2 = new _String(true);
                                packet2.Type = 16;
                                packet2.UID = client.Entity.UID;
                                packet2.TextsCount = 1;
                                packet2.Texts = new List<string>() { Observee.Entity.Spouse };
                                Observer.Send(packet2);
                                if (Info.ID == 117)
                                {
                                    packet2.Type = 10;
                                    Observer.Send(packet);
                                }
                                Observer.Send(SendPacket(Info));
                                Observee.Entity.Class = Observee.Entity.Class;
                                Observee.Send(new Message(Observer.Entity.Name + " is checking your equipment.", Color.Red, Message.Whisper));
                            }
                        }
                        break;
                    }
                case ViewEnemyInfo:
                    {
                        if (client.Enemy.ContainsKey(Info.dwParam))
                        {
                            if (client.Enemy[Info.dwParam].IsOnline)
                            {
                                KnownPersonInfo info = new KnownPersonInfo(true);
                                info.Fill(client.Enemy[Info.dwParam], true, false);
                                if (client.Enemy[Info.dwParam].Client.Guild != null)
                                    client.Enemy[Info.dwParam].Client.Guild.SendName(client);
                                client.Send(info);
                            }
                        }
                        break;
                    }
                case ViewFriendInfo:
                    {
                        if (client.Friends.ContainsKey(Info.dwParam))
                        {
                            if (client.Friends[Info.dwParam].IsOnline)
                            {
                                KnownPersonInfo info = new KnownPersonInfo(true);
                                info.Fill(client.Friends[Info.dwParam], false, false);
                                if (client.Friends[Info.dwParam].Client.Guild != null)
                                    client.Friends[Info.dwParam].Client.Guild.SendName(client);
                                client.Send(info);
                            }
                        }
                        break;
                    }
                case ViewPartnerInfo:
                    {
                        if (client.Partners.ContainsKey(Info.dwParam))
                        {
                            if (client.Partners[Info.dwParam].IsOnline)
                            {
                                TradePartnerInfo info = new TradePartnerInfo(true);
                                info.Fill(client.Partners[Info.dwParam]);
                                if (client.Partners[Info.dwParam].Client.Guild != null)
                                    client.Partners[Info.dwParam].Client.Guild.SendName(client);
                                client.Send(info);
                            }
                        }
                        break;
                    }
                case EndFly:
                    client.Entity.RemoveFlag(MsgUpdate.Flags.Fly);
                    client.Entity.RemoveFlag(MsgUpdate.Flags.Infinity);
                    break;
                case EndTransformation:
                    client.Entity.Untransform();
                    break;
                case XPListEnd:
                case Die:
                    break;
                case OwnBooth:
                    {
                        client.Booth = new Game.ConquerStructures.Booth(client);
                        client.Send(new MapStatus() { BaseID = client.Map.BaseID, ID = client.Map.ID, Status = Database.MapsTable.MapInformations[1036].Status });
                        break;
                    }
                case Away:
                    {
                        //  client.Entity.SetAway(packet[8] == 1);
                        //  client.SendScreen(gData, true);
                        if (client.Entity.Away == 0)
                        {
                            client.Entity.Away = 1;
                        }
                        else
                        {
                            client.Entity.Away = 0;
                        }
                        client.SendScreenSpawn(client.Entity, false);
                        break;
                    }
                case DeleteCharacter:
                    {
                        if ((client.WarehousePW == 0 || client.WarehousePW == 0 && Info.dwParam == 0) || (client.WarehousePW == Info.dwParam))
                        {
                            Database.MySqlCommand cmd = new Database.MySqlCommand(Database.MySqlCommandType.SELECT).Select("entities").Where("UID", client.Entity.UID);//debug and test!
                            Database.MySqlReader reader = new Database.MySqlReader(cmd);
                            if (!reader.Read())//wait
                            {
                                Database.MySqlCommand cmd2 = new Database.MySqlCommand(Database.MySqlCommandType.DELETE);
                                cmd2.Delete("entities", "Name", client.Entity.Name).Where("UID", client.Entity.UID).Execute();
                            }
                            client.Account.EntityID = 0;
                            client.Account.Save();
                            client.Disconnect();
                        }
                        break;
                    }
                case TeamSearchForMember:
                    {
                        if (client.Team != null)
                        {
                            Client.GameState Client = null;
                            if (!client.Team.IsTeammate(Info.UID))
                                return;
                            if (Kernel.GamePool.TryGetValue(Info.UID, out Client))
                            {
                                Info.wParam1 = Client.Entity.X;
                                Info.wParam2 = Client.Entity.Y;
                                client.Send(SendPacket(Info));
                            }
                        }
                        break;
                    }
                default:
                    client.Send(packet);
                    break;
            }
        }
        public static byte[] SendPacket(MsgActionProto obj)
        {
            using (var memoryStream = new System.IO.MemoryStream())
            {
                Serializer.SerializeWithLengthPrefix(memoryStream, obj, PrefixStyle.Fixed32);
                var pkt = new byte[8 + memoryStream.Length];
                memoryStream.ToArray().CopyTo(pkt, 0);
                Writer.Write((ushort)memoryStream.Length, 0, pkt);
                Writer.Write((ushort)10010, 2, pkt);
                return pkt;
            }
        }
    }
} 
   
	
		
		
		
		
	 
using System;
using Real_Conquer.Network;
using System.Net.Sockets;
using Real_Conquer.Network.Sockets;
using Real_Conquer.Network.Cryptography;
namespace Real_Conquer.Client
{
    public class AuthClient
    {
        private ClientWrapper _socket;
        public Network.AuthPackets.Authentication Info;
        public Database.AccountTable Account;
        public Network.Cryptography.AuthCryptography Cryptographer;
        public int PasswordSeed;
        public ConcurrentPacketQueue Queue;
        public static uint nextID = 0;
        public AuthClient(ClientWrapper socket)
        {
            Queue = new ConcurrentPacketQueue(0);
            _socket = socket;
        }
        public void Send(byte[] buffer)
        {
            byte[] _buffer = new byte[buffer.Length];
            Buffer.BlockCopy(buffer, 0, _buffer, 0, buffer.Length);
            Cryptographer.Encrypt(_buffer);
            _socket.Send(_buffer);
        }
        public void Send(Interfaces.IPacket buffer)
        {
            Send(buffer.ToArray());
        }
        // public static uint nextID = 0;
    }
} 
   
	
		
		
		
		
	 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Real_Conquer.Network.Cryptography
{
    public class LoaderEncryption
    {
        private static byte[] Key = { 12, 12, 215, 10, 20, 11, 60, 193, 11, 96, 53, 157, 71, 37, 150, 225, 86, 224, 178, 184, 230, 147, 79, 194, 160, 0, 99, 239, 218, 134, 179, 13, 247, 155, 237, 245, 165, 245, 128, 144 };
        public static void Encrypt(byte[] arr)
        {
            int length = Key.Length;
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] ^= Key[i % length];
                arr[i] ^= Key[(i + 1) % length];
            }
        }
        public static void Decrypt(byte[] arr, int size)
        {
            int length = Key.Length;
            for (int i = 0; i < size; i++)
            {
                arr[i] ^= Key[(i + 1) % length];
                arr[i] ^= Key[i % length];
            }
        }
    }
} 
   
	
		
		
		| الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1) | |
| أدوات الموضوع | |
                
  | 
        
| الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة | 
| البروتو | midoazoz | قسم الاقتراحات والابداع | 25 | 2024-06-05 02:34 PM | 
| لو سمحتوا حد يعرف فين اتاك الارشر فى البروتو | Thinker | مشكلات السيرفيرات كونكر الشخصيه | 3 | 2020-03-09 01:52 PM | 
| سورس ماتريكس قبل البروتو 3 دي | Adel Abd El Hay | مشكلات السيرفيرات كونكر الشخصيه | 1 | 2019-11-29 10:14 AM | 
| السورس البروتو اضافة اخر تحديث | nova | مشكلات السيرفيرات كونكر الشخصيه | 3 | 2019-05-22 07:00 PM |