public static void Notify(ReceivablePacket packet) { long objectId = packet.ReadLong(); CharacterDataHolder characterData = new CharacterDataHolder(); characterData.SetName(packet.ReadString()); characterData.SetRace((byte)packet.ReadByte()); characterData.SetHeight(packet.ReadFloat()); characterData.SetBelly(packet.ReadFloat()); characterData.SetHairType((byte)packet.ReadByte()); characterData.SetHairColor(packet.ReadInt()); characterData.SetSkinColor(packet.ReadInt()); characterData.SetEyeColor(packet.ReadInt()); characterData.SetHeadItem(packet.ReadInt()); characterData.SetChestItem(packet.ReadInt()); characterData.SetLegsItem(packet.ReadInt()); characterData.SetHandsItem(packet.ReadInt()); characterData.SetFeetItem(packet.ReadInt()); characterData.SetLeftHandItem(packet.ReadInt()); characterData.SetRightHandItem(packet.ReadInt()); characterData.SetX(packet.ReadFloat()); characterData.SetY(packet.ReadFloat()); characterData.SetZ(packet.ReadFloat()); characterData.SetHeading(packet.ReadFloat()); WorldManager.Instance.UpdateObject(objectId, characterData); }
public CharacterSlotUpdate(GameClient client, ReceivablePacket packet) { // Read data. byte oldSlot = (byte)packet.ReadByte(); byte newSlot = (byte)packet.ReadByte(); // Database queries. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_SLOT_UPDATE_QUERY, con); cmd.Parameters.AddWithValue("slot", 0); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.Parameters.AddWithValue("oldslot", oldSlot); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_SLOT_UPDATE_QUERY, con); cmd.Parameters.AddWithValue("slot", oldSlot); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.Parameters.AddWithValue("oldslot", newSlot); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_SLOT_UPDATE_QUERY, con); cmd.Parameters.AddWithValue("slot", newSlot); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.Parameters.AddWithValue("oldslot", 0); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } }
public static void Process(ReceivablePacket packet) { // Read data. long objectId = packet.ReadLong(); float velocityX = packet.ReadFloat(); float velocityZ = packet.ReadFloat(); bool triggerJump = packet.ReadByte() == 1; bool isInWater = packet.ReadByte() == 1; bool isGrounded = packet.ReadByte() == 1; ((IDictionary <long, AnimationHolder>)WorldManager.Instance.GetAnimationQueue()).Remove(objectId); WorldManager.Instance.GetAnimationQueue().TryAdd(objectId, new AnimationHolder(velocityX, velocityZ, triggerJump, isInWater, isGrounded)); }
public CharacterSelectUpdate(GameClient client, ReceivablePacket packet) { // Read data. int slot = packet.ReadByte(); // Make existing characters selected value false. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_SELECTED_RESET_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Set character selected. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_SELECTED_UPDATE_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.Parameters.AddWithValue("slot", slot); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } }
public LocationUpdate(GameClient client, ReceivablePacket packet) { // Read data. float posX = (float)packet.ReadDouble(); // TODO: Client WriteFloat float posY = (float)packet.ReadDouble(); // TODO: Client WriteFloat float posZ = (float)packet.ReadDouble(); // TODO: Client WriteFloat float heading = (float)packet.ReadDouble(); // TODO: Client WriteFloat int animState = packet.ReadShort(); int waterState = packet.ReadByte(); // Update player location. Player player = client.GetActiveChar(); LocationHolder location = player.GetLocation(); location.SetX(posX); location.SetY(posY); location.SetZ(posZ); location.SetHeading(heading); // Broadcast movement. foreach (Player nearby in WorldManager.GetVisiblePlayers(player)) { nearby.ChannelSend(new MoveToLocation(player, heading, animState, waterState)); } }
public PlayerOptionsUpdate(GameClient client, ReceivablePacket packet) { try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(UPDATE_CHARACTER_OPTIONS_QUERY, con); cmd.Parameters.AddWithValue("chat_color_normal", packet.ReadInt()); cmd.Parameters.AddWithValue("chat_color_message", packet.ReadInt()); cmd.Parameters.AddWithValue("chat_color_system", packet.ReadInt()); cmd.Parameters.AddWithValue("chat_use_timestamps", packet.ReadByte()); cmd.Parameters.AddWithValue("key_up_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_up_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_down_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_down_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_left_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_left_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_right_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_right_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_jump_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_jump_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_character_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_character_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_inventory_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_inventory_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_skills_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_skills_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_1_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_1_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_2_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_2_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_3_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_3_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_4_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_4_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_5_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_5_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_6_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_6_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_7_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_7_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_8_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_8_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_9_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_9_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_10_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_10_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_11_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_11_2", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_12_1", packet.ReadShort()); cmd.Parameters.AddWithValue("key_shortcut_12_2", packet.ReadShort()); cmd.Parameters.AddWithValue("name", client.GetActiveChar().GetName()); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } }
public static void Notify(ReceivablePacket packet) { // Read the data. int chatType = packet.ReadByte(); // 0 system, 1 normal chat, 2 personal message string senderName = packet.ReadString(); string message = packet.ReadString(); // Send the message. ChatBoxManager.Instance.SendMessageToChat(senderName + ": " + message, chatType); }
public static void notify(ReceivablePacket packet) { // Get player list size. int listSize = packet.ReadByte(); // Read the data. ArrayList characterList = new ArrayList(listSize); for (int i = 0; i < listSize; i++) { CharacterDataHolder characterData = new CharacterDataHolder(); characterData.SetName(packet.ReadString()); characterData.SetSlot((byte)packet.ReadByte()); characterData.SetSelected(packet.ReadByte() == 1 ? true : false); characterData.SetClassId((byte)packet.ReadByte()); characterData.SetLocationName(packet.ReadString()); characterData.SetX(packet.ReadFloat()); characterData.SetY(packet.ReadFloat()); characterData.SetZ(packet.ReadFloat()); characterData.SetHeading(packet.ReadInt()); characterData.SetExperience(packet.ReadLong()); characterData.SetHp(packet.ReadLong()); characterData.SetMp(packet.ReadLong()); characterData.SetAccessLevel((byte)packet.ReadByte()); characterData.SetItemHead(packet.ReadInt()); characterData.SetItemChest(packet.ReadInt()); characterData.SetItemGloves(packet.ReadInt()); characterData.SetItemLegs(packet.ReadInt()); characterData.SetItemBoots(packet.ReadInt()); characterData.SetItemRightHand(packet.ReadInt()); characterData.SetItemLeftHand(packet.ReadInt()); characterList.Add(characterData); } // Send the data. PlayerManager.instance.characterList = characterList; // Enable player selection. CharacterSelectionManager.instance.waitingServer = false; }
public AnimatorUpdateRequest(GameClient client, ReceivablePacket packet) { // Read data. float velocityX = packet.ReadFloat(); float velocityZ = packet.ReadFloat(); bool triggerJump = packet.ReadByte() == 1; bool isInWater = packet.ReadByte() == 1; bool isGrounded = packet.ReadByte() == 1; // Set last known world object animations. Player player = client.GetActiveChar(); player.SetAnimations(new AnimationHolder(velocityX, velocityZ, triggerJump, isInWater, isGrounded)); // Broadcast movement. AnimatorUpdate animatorUpdate = new AnimatorUpdate(player.GetObjectId(), velocityX, velocityZ, triggerJump, isInWater, isGrounded); foreach (Player nearby in WorldManager.GetVisiblePlayers(player)) { nearby.ChannelSend(animatorUpdate); } }
public static void Notify(ReceivablePacket packet) { OptionsManager.chatColorNormalIntValue = packet.ReadInt(); OptionsManager.chatColorMessageIntValue = packet.ReadInt(); OptionsManager.chatColorSystemIntValue = packet.ReadInt(); OptionsManager.useChatTimestamps = packet.ReadByte() == 1; InputManager.SetKeybind(0, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(1, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(2, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(3, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(4, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(5, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(6, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(7, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(8, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(9, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(10, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(11, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(12, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(13, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(14, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(15, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(16, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(17, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(18, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(19, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(20, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(21, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(22, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(23, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(24, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(25, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(26, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(27, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(28, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(29, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(30, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(31, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(32, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(33, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(34, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(35, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(36, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(37, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(38, (KeyCode)packet.ReadShort()); InputManager.SetKeybind(39, (KeyCode)packet.ReadShort()); }
public static void Notify(ReceivablePacket packet) { // Get player list size. int listSize = packet.ReadByte(); // Read the data. List <CharacterDataHolder> characterList = new List <CharacterDataHolder>(listSize); for (int i = 0; i < listSize; i++) { CharacterDataHolder characterData = new CharacterDataHolder(); characterData.SetName(packet.ReadString()); characterData.SetSlot((byte)packet.ReadByte()); characterData.SetSelected(packet.ReadByte() == 1 ? true : false); characterData.SetRace((byte)packet.ReadByte()); characterData.SetHeight(packet.ReadFloat()); characterData.SetBelly(packet.ReadFloat()); characterData.SetHairType(packet.ReadByte()); characterData.SetHairColor(packet.ReadInt()); characterData.SetSkinColor(packet.ReadInt()); characterData.SetEyeColor(packet.ReadInt()); characterData.SetHeadItem(packet.ReadInt()); characterData.SetChestItem(packet.ReadInt()); characterData.SetLegsItem(packet.ReadInt()); characterData.SetHandsItem(packet.ReadInt()); characterData.SetFeetItem(packet.ReadInt()); characterData.SetLeftHandItem(packet.ReadInt()); characterData.SetRightHandItem(packet.ReadInt()); characterData.SetX(packet.ReadFloat()); characterData.SetY(packet.ReadFloat()); characterData.SetZ(packet.ReadFloat()); characterData.SetHeading(packet.ReadFloat()); characterData.SetExperience(packet.ReadLong()); characterData.SetCurrentHp(packet.ReadLong()); characterData.SetMaxHp(packet.ReadLong()); characterData.SetCurrentMp(packet.ReadLong()); characterData.SetMaxMp(packet.ReadLong()); characterData.SetAccessLevel((byte)packet.ReadByte()); characterList.Add(characterData); } // Send the data. MainManager.Instance.SetCharacterList(characterList); // Enable player selection. CharacterSelectionManager.Instance.SetWaitingServer(false); }
public CharacterCreationRequest(GameClient client, ReceivablePacket packet) { // Make sure player has authenticated. if ((client.GetAccountName() == null) || (client.GetAccountName().Length == 0)) { return; } // Read data. string characterName = packet.ReadString(); int race = packet.ReadByte(); float height = packet.ReadFloat(); float belly = packet.ReadFloat(); int hairType = packet.ReadByte(); int hairColor = packet.ReadInt(); int skinColor = packet.ReadInt(); int eyeColor = packet.ReadInt(); // Replace illegal characters. for (int i = 0; i < Util.ILLEGAL_CHARACTERS.Length; i++) { characterName = characterName.Replace(Util.ILLEGAL_CHARACTERS[i], '\''); } // Name character checks. if (characterName.Contains("'")) { client.ChannelSend(new CharacterCreationResult(INVALID_NAME)); return; } if ((characterName.Length < 2) || (characterName.Length > 12)) // 12 should not happen, checking it here in case of client cheat. { client.ChannelSend(new CharacterCreationResult(NAME_IS_TOO_SHORT)); return; } // Visual exploit checks. if ((race < 0 || race > 1) || (height < 0.39 || height > 0.61) || (hairType < 0 || hairType > 3) /*|| (!Config.VALID_SKIN_COLORS.Contains(skinColor))*/) // TODO: Check palette. { client.ChannelSend(new CharacterCreationResult(INVALID_PARAMETERS)); return; } // Account character count database check. int characterCount = 0; int lastCharacterSlot = 0; try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(ACCOUNT_CHARACTER_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { characterCount++; int slot = reader.GetInt32("slot"); if (slot > lastCharacterSlot) { lastCharacterSlot = slot; } } con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } if (characterCount >= Config.ACCOUNT_MAX_CHARACTERS) { client.ChannelSend(new CharacterCreationResult(CANNOT_CREATE_ADDITIONAL_CHARACTERS)); return; } // Check database if name exists. bool characterExists = false; try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(NAME_EXISTS_QUERY, con); { cmd.Parameters.AddWithValue("name", characterName); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { characterExists = true; } } con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } if (characterExists) { client.ChannelSend(new CharacterCreationResult(NAME_ALREADY_EXISTS)); return; } // Make existing characters selected value false. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_SELECTED_RESET_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Create character. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_CREATE_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.Parameters.AddWithValue("name", characterName); cmd.Parameters.AddWithValue("slot", lastCharacterSlot + 1); cmd.Parameters.AddWithValue("selected", 1); // Selected character. cmd.Parameters.AddWithValue("race", race); cmd.Parameters.AddWithValue("height", height); cmd.Parameters.AddWithValue("belly", belly); cmd.Parameters.AddWithValue("hair_type", hairType); cmd.Parameters.AddWithValue("hair_color", hairColor); cmd.Parameters.AddWithValue("skin_color", skinColor); cmd.Parameters.AddWithValue("eye_color", eyeColor); cmd.Parameters.AddWithValue("x", Config.STARTING_LOCATION.GetX()); cmd.Parameters.AddWithValue("y", Config.STARTING_LOCATION.GetY()); cmd.Parameters.AddWithValue("z", Config.STARTING_LOCATION.GetZ()); cmd.Parameters.AddWithValue("heading", Config.STARTING_LOCATION.GetHeading()); cmd.Parameters.AddWithValue("experience", 0); // TODO: Implement Player level data. cmd.Parameters.AddWithValue("hp", 100); // TODO: Implement Player level data. cmd.Parameters.AddWithValue("mp", 100); // TODO: Implement Player level data. cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Create a character_options entry for this character. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_CREATE_OPTIONS_QUERY, con); cmd.Parameters.AddWithValue("name", characterName); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Add starting items. int itemCount = Config.STARTING_ITEMS.Count; if (itemCount > 0) { // Prepare query. StringBuilder query = new StringBuilder(CHARACTER_ITEM_START); List <ItemSlot> usedEquipableSlots = new List <ItemSlot>(); int inventorySlotCounter = 8; // First inventory item slot. foreach (int itemId in Config.STARTING_ITEMS) { query.Append("('"); query.Append(characterName); query.Append("',"); ItemTemplateHolder itemHolder = ItemData.GetItemTemplate(itemId); ItemSlot itemSlot = itemHolder.GetItemSlot(); if (itemHolder.GetItemType() == ItemType.EQUIP && !usedEquipableSlots.Contains(itemSlot)) { usedEquipableSlots.Add(itemSlot); query.Append((int)itemHolder.GetItemSlot()); } else { query.Append(inventorySlotCounter++); } query.Append(","); query.Append(itemId); query.Append(",1,0"); // quantity, enchant query.Append(")"); query.Append(itemCount-- == 1 ? ";" : ","); } // Store new item records. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(query.ToString(), con); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } } // Send success result. client.ChannelSend(new CharacterCreationResult(SUCCESS)); }
public static void notify(ReceivablePacket packet) { CharacterCreationManager.instance.creationResult = packet.ReadByte(); }
public CharacterCreationRequest(GameClient client, ReceivablePacket packet) { // Make sure player has authenticated. if ((client.GetAccountName() == null) || (client.GetAccountName().Length == 0)) { return; } // Read data. string characterName = packet.ReadString(); int classId = packet.ReadByte(); // Replace illegal characters. foreach (char c in Util.ILLEGAL_CHARACTERS) { characterName = characterName.Replace(c, '\''); } // Name character checks. if (characterName.Contains("'")) { client.ChannelSend(new CharacterCreationResult(INVALID_NAME)); return; } if ((characterName.Length < 2) || (characterName.Length > 12)) // 12 should not happen, checking it here in case of client cheat. { client.ChannelSend(new CharacterCreationResult(NAME_IS_TOO_SHORT)); return; } // Account character count database check. int characterCount = 0; int lastCharacterSlot = 0; try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(ACCOUNT_CHARACTER_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { characterCount++; int slot = reader.GetInt32("slot"); if (slot > lastCharacterSlot) { lastCharacterSlot = slot; } } con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } if (characterCount >= Config.ACCOUNT_MAX_CHARACTERS) { client.ChannelSend(new CharacterCreationResult(CANNOT_CREATE_ADDITIONAL_CHARACTERS)); return; } // Check database if name exists. bool characterExists = false; try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(NAME_EXISTS_QUERY, con); { cmd.Parameters.AddWithValue("name", characterName); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { characterExists = true; } } con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } if (characterExists) { client.ChannelSend(new CharacterCreationResult(NAME_ALREADY_EXISTS)); return; } // Make existing characters selected value false. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_SELECTED_RESET_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Create character. try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_CREATE_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.Parameters.AddWithValue("name", characterName); cmd.Parameters.AddWithValue("slot", lastCharacterSlot + 1); cmd.Parameters.AddWithValue("selected", 1); // Selected character. cmd.Parameters.AddWithValue("class_id", classId); cmd.Parameters.AddWithValue("location_name", "Start Location"); cmd.Parameters.AddWithValue("x", Config.STARTING_LOCATION.GetX()); cmd.Parameters.AddWithValue("y", Config.STARTING_LOCATION.GetY()); cmd.Parameters.AddWithValue("z", Config.STARTING_LOCATION.GetZ()); cmd.Parameters.AddWithValue("heading", Config.STARTING_LOCATION.GetHeading()); cmd.Parameters.AddWithValue("experience", 0); // TODO: Starting level experience. cmd.Parameters.AddWithValue("hp", 1); // TODO: Character stats HP. cmd.Parameters.AddWithValue("mp", 1); // TODO: Character stats MP. cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Send success result. client.ChannelSend(new CharacterCreationResult(SUCCESS)); }
public CharacterDeletionRequest(GameClient client, ReceivablePacket packet) { // Read data. byte slot = (byte)packet.ReadByte(); // Get remaining character names. List <string> characterNames = new List <string>(); string deletedCharacterName = ""; try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(ACCOUNT_CHARACTER_QUERY, con); cmd.Parameters.AddWithValue("account", client.GetAccountName()); MySqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { if ((byte)reader.GetInt16("slot") == slot) // TODO: Remove cast? { deletedCharacterName = reader.GetString("name"); } else { characterNames.Add(reader.GetString("name")); } } con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Delete character. (Prefer to set access level to -1 and rename to name + deletion time.) long deleteTime = DateTimeOffset.Now.ToUnixTimeSeconds(); try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_DELETION_QUERY, con); cmd.Parameters.AddWithValue("name", deletedCharacterName + deleteTime); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.Parameters.AddWithValue("oldname", deletedCharacterName); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Delete character items. (Same as above, change item owner to name + deletion time.) try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_ITEM_DELETION_QUERY, con); cmd.Parameters.AddWithValue("owner", deletedCharacterName + deleteTime); cmd.Parameters.AddWithValue("oldowner", deletedCharacterName); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Delete character interface. (Same as above, change interface name to name + deletion time.) try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_INTERFACE_DELETION_QUERY, con); cmd.Parameters.AddWithValue("name", deletedCharacterName + deleteTime); cmd.Parameters.AddWithValue("oldname", deletedCharacterName); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } // Order remaining character slots. byte counter = 0; foreach (string characterName in characterNames) { counter++; try { MySqlConnection con = DatabaseManager.GetConnection(); MySqlCommand cmd = new MySqlCommand(CHARACTER_SLOT_UPDATE_QUERY, con); cmd.Parameters.AddWithValue("slot", counter); cmd.Parameters.AddWithValue("selected", ((counter == 1) && (slot == 1)) || (counter == (slot - 1)) ? 1 : 0); cmd.Parameters.AddWithValue("account", client.GetAccountName()); cmd.Parameters.AddWithValue("name", characterName); cmd.ExecuteNonQuery(); con.Close(); } catch (Exception e) { LogManager.Log(e.ToString()); } } // Notify the client that character was deleted. client.ChannelSend(new CharacterDeletionResult()); }
public static void Notify(ReceivablePacket packet) { LoginManager.Instance.status = packet.ReadByte(); }
public static void Handle(GameClient client, ReceivablePacket packet) { /* * switch (packet.ReadShort()) // Packet id. * { * case 1: * new AccountAuthenticationRequest(client, packet); * break; * * case 2: * new CharacterSelectionInfoRequest(client, packet); * break; * * case 3: * new CharacterCreationRequest(client, packet); * break; * * case 4: * new CharacterDeletionRequest(client, packet); * break; * * case 5: * new CharacterSlotUpdate(client, packet); * break; * * case 6: * new CharacterSelectUpdate(client, packet); * break; * * case 7: * new EnterWorldRequest(client, packet); * break; * * case 8: * new ExitWorldRequest(client, packet); * break; * * case 9: * new LocationUpdateRequest(client, packet); * break; * * case 10: * new AnimatorUpdateRequest(client, packet); * break; * * case 11: * new ObjectInfoRequest(client, packet); * break; * * case 12: * new PlayerOptionsUpdate(client, packet); * break; * * case 13: * new ChatRequest(client, packet); * break; * } */ // Test receive. LogManager.Log("" + packet.ReadByte()); LogManager.Log("" + packet.ReadShort()); LogManager.Log("" + packet.ReadInt()); LogManager.Log("" + packet.ReadLong()); LogManager.Log("" + packet.ReadFloat()); LogManager.Log("" + packet.ReadDouble()); LogManager.Log("" + packet.ReadString()); // Test send. SendablePacket send = new SendablePacket(); send.WriteShort(1); // id send.WriteString("All is good!"); client.ChannelSend(send); }
public static void Notify(ReceivablePacket packet) { CharacterCreationManager.Instance.SetCreationResult(packet.ReadByte()); }
public static void Process(ReceivablePacket packet) { LoginManager.Instance.SetStatus(packet.ReadByte()); }
public static void notify(ReceivablePacket packet) { AuthenticationManager.instance.status = packet.ReadByte(); }