コード例 #1
0
    public CharacterSelectionInfoResult(string accountName)
    {
        // Local data.
        List <CharacterDataHolder> characterList = new List <CharacterDataHolder>();

        // Get data from database.
        try
        {
            MySqlConnection con = DatabaseManager.GetConnection();
            MySqlCommand    cmd = new MySqlCommand(CHARACTER_QUERY, con);
            cmd.Parameters.AddWithValue("account", accountName);
            MySqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                CharacterDataHolder characterData = new CharacterDataHolder();
                characterData.SetName(reader.GetString("name"));
                characterData.SetSlot((byte)reader.GetInt16("slot"));        // TODO: Remove cast?
                characterData.SetSelected(reader.GetBoolean("selected"));
                characterData.SetClassId((byte)reader.GetInt16("class_id")); // TODO: Remove cast?
                characterData.SetLocationName(reader.GetString("location_name"));
                characterData.SetX(reader.GetFloat("x"));
                characterData.SetY(reader.GetFloat("y"));
                characterData.SetZ(reader.GetFloat("z"));
                characterData.SetHeading(reader.GetFloat("heading"));
                characterData.SetExperience(reader.GetInt64("experience"));
                characterData.SetHp(reader.GetInt64("hp"));
                characterData.SetMp(reader.GetInt64("mp"));
                characterData.SetAccessLevel((byte)reader.GetInt16("access_level")); // TODO: Remove cast?
                characterList.Add(characterData);
            }
            con.Close();
        }
        catch (Exception e)
        {
            LogManager.Log(e.ToString());
        }

        // Send the data.
        WriteShort(2); // Packet id.
        WriteByte(characterList.Count);
        foreach (CharacterDataHolder characterData in characterList)
        {
            WriteString(characterData.GetName());
            WriteByte(characterData.GetSlot());
            WriteByte(characterData.IsSelected() ? 1 : 0);
            WriteByte(characterData.GetClassId());
            WriteString(characterData.GetLocationName());
            WriteFloat(characterData.GetX());
            WriteFloat(characterData.GetY());
            WriteFloat(characterData.GetZ());
            WriteFloat(characterData.GetHeading());
            WriteLong(characterData.GetExperience());
            WriteLong(characterData.GetHp());
            WriteLong(characterData.GetMp());
            WriteByte(characterData.GetAccessLevel());
        }
    }
コード例 #2
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;
    }