/// <summary> /// Handles the creation of the character. /// </summary> /// <param name="player">The player.</param> /// <param name="packet">The packet.</param> private static bool HandleCreation(Models.Entities.Player player, CharacterCreationPacket packet) { if (player.ClientId != packet.ClientId) { Accounts.Ban(player.DbPlayer.Account, Drivers.Messages.INVALID_CLIENT_ID, DbAccount.BanRangeType.Perm); return(false); } if (!packet.Job.ToString().StartsWith("Intern")) { Accounts.Ban(player.DbPlayer.Account, Drivers.Messages.INVALID_CLIENT_ID, DbAccount.BanRangeType.Perm); return(false); } if (packet.Model != 1003 && packet.Model != 1004 && packet.Model != 2001 && packet.Model != 2002) { Accounts.Ban(player.DbPlayer.Account, Drivers.Messages.INVALID_MODEL, DbAccount.BanRangeType.Perm); return(false); } if (!ValidateCharacters(packet.Name)) { player.ClientSocket.Send(MessageController.CreateNewPlayer(Drivers.Messages.Errors.INVALID_CHARS)); return(true); } if (IsBannedName(packet.Name)) { player.ClientSocket.Send(MessageController.CreateNewPlayer(Drivers.Messages.Errors.NAME_BANNED)); return(true); } if (Players.GetPlayerByName(packet.Name, Drivers.Settings.WorldSettings.Server) != null) { player.ClientSocket.Send(MessageController.CreateNewPlayer(Drivers.Messages.Errors.NAME_TAKEN)); return(true); } // stats fallback ... player.DbPlayer.Strength = 0; player.DbPlayer.Agility = 0; player.DbPlayer.Vitality = 0; player.DbPlayer.Spirit = 0; player.DbPlayer.Name = packet.Name; player.Job = packet.Job; player.Level = 1; player.DbPlayer.Model = packet.Model; Players.Create(player.DbPlayer, new ushort[] { player.Strength, player.Vitality, player.Agility, player.Spirit }, player.MaxHP, player.MaxMP); player.ClientSocket.Disconnect(Drivers.Messages.SUCCESS_CREATE); return(true); }
public static bool HandlePacket(Models.Entities.Player player, CharacterCreationPacket packet) { switch (packet.PacketSubType) { case 0: return(HandleCreation(player, packet)); case 1: return(HandleBackButton(player, packet)); default: #if LOCAL PacketLogger.Log(packet, true, true); #else PacketLogger.Log(packet, false, true); #endif break; } return(true); }
public void LoadProcessors() { myServer.AssignProcessor(delegate(Packet P) { LoginPacket myPacket = (LoginPacket)P; Console.WriteLine(myPacket.Username + " attempted to connect!"); IConnectionWrapper myData; if (myLoginHandler.VerifyPlayerLogin(myPacket.Username, myPacket.Sender, myPacket.GetCreationTime(), myPacket.GetSHA(), out myData)) { var PDataInfo = (PlayerData)myData.MyExternalData; if (PDataInfo != null) { PlayerInfoPacket myInfo = new PlayerInfoPacket(); myInfo.NewChar = false; myInfo.myMap = myMapHandler.GetPlayerMap(PDataInfo); myInfo.Sender = myPacket.Sender; myServer.Send(myInfo, NetDeliveryMethod.ReliableOrdered); myMapHandler.Login(myData); } else { ThreadPool.QueueUserWorkItem(delegate(object State) { PlayerInfoPacket myInfo = new PlayerInfoPacket(); myInfo.Sender = myPacket.Sender; PDataInfo = new PlayerData(); myInfo.NewChar = true; myInfo.SetPlayerData(PDataInfo); myInfo.myMap = myMapHandler.PlaceInFirstAvailable(myInfo.Sender, PDataInfo); PDataInfo.CurrentMapID = PDataInfo.CurrentMapID; myLoginHandler.UpdateInfo(myPacket.GetSHA(), PDataInfo); myServer.Send(myInfo, NetDeliveryMethod.ReliableOrdered); }); } Console.WriteLine("User Authenticated Successfully!\n Awaiting Character Creation!"); } else { LoginFailedPacket myAck = new LoginFailedPacket(); myAck.Sender = myPacket.Sender; myServer.Send(myAck, NetDeliveryMethod.ReliableOrdered); Console.WriteLine("User Authentication Failed!"); } }, typeof(LoginPacket)); myServer.AssignProcessor(delegate(Packet P) { IConnectionWrapper mySender; if ((mySender = myLoginHandler.isLoggedIn(P.UserID)) != null) { AnnounceToMapPacket myPacket = (AnnounceToMapPacket)P; } }, typeof(AnnounceToMapPacket)); myServer.AssignProcessor(delegate(Packet P) { IConnectionWrapper mySender; if ((mySender = myLoginHandler.isLoggedIn(P.UserID)) != null) { IConnectionWrapper Recipient; WhisperMessagePlayer myPacket = (WhisperMessagePlayer)P; if ((Recipient = myLoginHandler.isLoggedIn(myPacket.RecipientUserID)) != null) { PlayerData Recip = (PlayerData)Recipient.MyExternalData; PlayerData Sender = (PlayerData)mySender.MyExternalData; if (Recip.CurrentMapID.CompareTo(Sender.CurrentMapID) == 0) { myPacket.Sender = Recipient.GetConnection(); myServer.Send(myPacket, NetDeliveryMethod.ReliableOrdered); } } else { //TODO: send response packet. } } }, typeof(WhisperMessagePlayer)); myServer.AssignProcessor(delegate(Packet P) { IConnectionWrapper mySender; if ((mySender = myLoginHandler.isLoggedIn(P.UserID)) != null) { SendMessageLocalAreaPacket myPacket = (SendMessageLocalAreaPacket)P; } }, typeof(SendMessageLocalAreaPacket)); myServer.AssignProcessor(delegate(Packet P) { IConnectionWrapper mySender; if ((mySender = myLoginHandler.isLoggedIn(P.UserID)) != null) { SendMessageMapAreaPacket myPacket = (SendMessageMapAreaPacket)P; //List<PlayerData> myData = myMapHandler.GetPlayersOnMap(); } }, typeof(SendMessageMapAreaPacket)); myServer.AssignProcessor(delegate(Packet P) { IConnectionWrapper mySender; if ((mySender = myLoginHandler.isLoggedIn(P.UserID)) != null) { AnnounceToAllMapsPacket myPacket = (AnnounceToAllMapsPacket)P; } }, typeof(AnnounceToAllMapsPacket)); myServer.AssignProcessor(delegate(Packet P) { IConnectionWrapper Wrapper; if ((Wrapper = myLoginHandler.isLoggedIn(P.UserID)) != null) { myLoginHandler.Logout(P.UserID); myMapHandler.Logout(Wrapper); } }, typeof(DisconnectPacket)); myServer.AssignProcessor(delegate(Packet P) { IConnectionWrapper myValue = myLoginHandler.isLoggedIn(P.UserID); if (myValue != null) { Map myMap = myMapHandler.GetPlayerMap((PlayerData)myValue.MyExternalData); foreach (NetConnection A in myMap.GetPlayerIPs()) { PlayerMapConnectionPacket myNewPlayer = new PlayerMapConnectionPacket(); myNewPlayer.SetNewPlayerData((PlayerData)myValue.MyExternalData); myNewPlayer.Sender = A; myServer.Send(myNewPlayer, NetDeliveryMethod.ReliableOrdered); } } }, typeof(MapLoadedPacket)); myServer.AssignProcessor(delegate(Packet P) { CharacterCreationPacket Packet = ((CharacterCreationPacket)P); IConnectionWrapper myValue = myLoginHandler.isLoggedIn(Packet.UserID); if (myValue != null) { ((PlayerData)myValue.MyExternalData).SetAnimation(Packet.GetAnimationInfo()); ((PlayerData)myValue.MyExternalData).SetName(Packet.GetName()); Map myMap = myMapHandler.GetPlayerMap(((PlayerData)myValue.MyExternalData)); foreach (NetConnection A in myMap.GetPlayerIPs()) { PlayerMapConnectionPacket myNewPlayer = new PlayerMapConnectionPacket(); myNewPlayer.SetNewPlayerData(((PlayerData)myValue.MyExternalData)); myNewPlayer.Sender = A; myServer.Send(myNewPlayer, NetDeliveryMethod.ReliableOrdered); } } }, typeof(CharacterCreationPacket)); }
/// <summary> /// Handles the back button press. /// </summary> /// <param name="player">The player.</param> /// <param name="packet">The packet.</param> private static bool HandleBackButton(Models.Entities.Player player, CharacterCreationPacket packet) { return(false); }
//CharacterCreationPacket private static void HandlePacket(CharacterCreationPacket packet) { Globals.WaitingOnServer = false; Interface.Interface.MenuUi.MainMenu.NotifyOpenCharacterCreation(); }