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());
        }
    }
Пример #5
0
    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());
     }
 }
Пример #7
0
    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);
    }
Пример #8
0
    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;
    }
Пример #9
0
    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);
    }
Пример #12
0
    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();
 }
Пример #14
0
    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());
    }
Пример #16
0
 public static void Notify(ReceivablePacket packet)
 {
     LoginManager.Instance.status = packet.ReadByte();
 }
Пример #17
0
    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);
    }
Пример #18
0
 public static void Notify(ReceivablePacket packet)
 {
     CharacterCreationManager.Instance.SetCreationResult(packet.ReadByte());
 }
Пример #19
0
 public static void Process(ReceivablePacket packet)
 {
     LoginManager.Instance.SetStatus(packet.ReadByte());
 }
 public static void notify(ReceivablePacket packet)
 {
     AuthenticationManager.instance.status = packet.ReadByte();
 }