public override async UniTask <List <SocialCharacterData> > ReadFriends(string id1)
        {
            List <SocialCharacterData> result = new List <SocialCharacterData>();
            List <string> characterIds        = new List <string>();

            await ExecuteReader((reader) =>
            {
                while (reader.Read())
                {
                    characterIds.Add(reader.GetString(0));
                }
            }, "SELECT characterId2 FROM friend WHERE characterId1=@id1",
                                new MySqlParameter("@id1", id1));

            SocialCharacterData socialCharacterData;

            foreach (string characterId in characterIds)
            {
                await ExecuteReader((reader) =>
                {
                    while (reader.Read())
                    {
                        // Get some required data, other data will be set at server side
                        socialCharacterData               = new SocialCharacterData();
                        socialCharacterData.id            = reader.GetString(0);
                        socialCharacterData.dataId        = reader.GetInt32(1);
                        socialCharacterData.characterName = reader.GetString(2);
                        socialCharacterData.level         = reader.GetInt16(3);
                        result.Add(socialCharacterData);
                    }
                }, "SELECT id, dataId, characterName, level FROM characters WHERE BINARY id = @id",
                                    new MySqlParameter("@id", characterId));
            }
            return(result);
        }
示例#2
0
        public async UniTaskVoid HandleRequestAcceptGuildInvitation(RequestHandlerData requestHandler, RequestAcceptGuildInvitationMessage request, RequestProceedResultDelegate <ResponseAcceptGuildInvitationMessage> result)
        {
#if UNITY_STANDALONE && !CLIENT_BUILD
            await UniTask.Yield();

            BasePlayerCharacterEntity playerCharacter;
            if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter))
            {
                result.InvokeError(new ResponseAcceptGuildInvitationMessage()
                {
                    message = UITextKeys.UI_ERROR_NOT_LOGGED_IN,
                });
                return;
            }
            ValidateGuildRequestResult validateResult = GameInstance.ServerGuildHandlers.CanAcceptGuildInvitation(request.guildId, playerCharacter);
            if (!validateResult.IsSuccess)
            {
                result.InvokeError(new ResponseAcceptGuildInvitationMessage()
                {
                    message = validateResult.GameMessage,
                });
                return;
            }
            playerCharacter.GuildId = request.guildId;
            validateResult.Guild.AddMember(playerCharacter);
            GameInstance.ServerGuildHandlers.SetGuild(request.guildId, validateResult.Guild);
            GameInstance.ServerGuildHandlers.RemoveGuildInvitation(request.guildId, playerCharacter.Id);
            // Save to database
            AsyncResponseData <GuildResp> updateResp = await DbServiceClient.UpdateCharacterGuildAsync(new UpdateCharacterGuildReq()
            {
                SocialCharacterData = SocialCharacterData.Create(playerCharacter),
                GuildId             = request.guildId,
                GuildRole           = validateResult.Guild.GetMemberRole(playerCharacter.Id)
            });

            if (!updateResp.IsSuccess)
            {
                result.InvokeError(new ResponseAcceptGuildInvitationMessage()
                {
                    message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR,
                });
                return;
            }
            // Broadcast via chat server
            if (ClusterClient.IsNetworkActive)
            {
                ClusterClient.SendAddSocialMember(MMOMessageTypes.UpdateGuildMember, request.guildId, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level);
            }
            GameInstance.ServerGameMessageHandlers.SendSetGuildData(requestHandler.ConnectionId, validateResult.Guild);
            GameInstance.ServerGameMessageHandlers.SendAddGuildMembersToOne(requestHandler.ConnectionId, validateResult.Guild);
            GameInstance.ServerGameMessageHandlers.SendAddGuildMemberToMembers(validateResult.Guild, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level);
            // Send message to inviter
            GameInstance.ServerGameMessageHandlers.SendGameMessageByCharacterId(request.inviterId, UITextKeys.UI_GUILD_INVITATION_ACCEPTED);
            // Response to invitee
            result.InvokeSuccess(new ResponseAcceptGuildInvitationMessage()
            {
                message = UITextKeys.UI_GUILD_INVITATION_ACCEPTED,
            });
#endif
        }
        public override PartyData ReadParty(int id)
        {
            PartyData result = null;

            ExecuteReader((reader) =>
            {
                if (reader.Read())
                {
                    result = new PartyData(id,
                                           reader.GetBoolean(0),
                                           reader.GetBoolean(1),
                                           reader.GetString(2));
                }
            }, "SELECT shareExp, shareItem, leaderId FROM party WHERE id=@id LIMIT 1",
                          new SqliteParameter("@id", id));
            if (result != null)
            {
                ExecuteReader((reader) =>
                {
                    SocialCharacterData partyMemberData;
                    while (reader.Read())
                    {
                        // Get some required data, other data will be set at server side
                        partyMemberData               = new SocialCharacterData();
                        partyMemberData.id            = reader.GetString(0);
                        partyMemberData.dataId        = reader.GetInt32(1);
                        partyMemberData.characterName = reader.GetString(2);
                        partyMemberData.level         = reader.GetInt16(3);
                        result.AddMember(partyMemberData);
                    }
                }, "SELECT id, dataId, characterName, level FROM characters WHERE partyId=@id",
                              new SqliteParameter("@id", id));
            }
            return(result);
        }
示例#4
0
        public override PartyData ReadParty(int id)
        {
            PartyData result = null;
            var       reader = ExecuteReader("SELECT * FROM party WHERE id=@id LIMIT 1",
                                             new MySqlParameter("@id", id));

            if (reader.Read())
            {
                result = new PartyData(id, reader.GetBoolean("shareExp"), reader.GetBoolean("shareItem"), reader.GetString("leaderId"));
                reader = ExecuteReader("SELECT id, dataId, characterName, level FROM characters WHERE partyId=@id",
                                       new MySqlParameter("@id", id));
                SocialCharacterData partyMemberData;
                while (reader.Read())
                {
                    // Get some required data, other data will be set at server side
                    partyMemberData               = new SocialCharacterData();
                    partyMemberData.id            = reader.GetString("id");
                    partyMemberData.characterName = reader.GetString("characterName");
                    partyMemberData.dataId        = reader.GetInt32("dataId");
                    partyMemberData.level         = reader.GetInt16("level");
                    result.AddMember(partyMemberData);
                }
            }
            return(result);
        }
 public override void RegisterPlayerCharacter(long connectionId, BasePlayerCharacterEntity playerCharacterEntity)
 {
     // Set user data to map server
     if (!usersById.ContainsKey(playerCharacterEntity.Id))
     {
         SocialCharacterData userData = new SocialCharacterData();
         userData.userId        = playerCharacterEntity.UserId;
         userData.id            = playerCharacterEntity.Id;
         userData.characterName = playerCharacterEntity.CharacterName;
         userData.dataId        = playerCharacterEntity.DataId;
         userData.level         = playerCharacterEntity.Level;
         userData.currentHp     = playerCharacterEntity.CurrentHp;
         userData.maxHp         = playerCharacterEntity.MaxHp;
         userData.currentMp     = playerCharacterEntity.CurrentMp;
         userData.maxMp         = playerCharacterEntity.MaxMp;
         usersById.TryAdd(userData.id, userData);
         // Add map user to central server and chat server
         UpdateMapUser(CentralAppServerRegister, UpdateUserCharacterMessage.UpdateType.Add, userData);
         if (ChatNetworkManager.IsClientConnected)
         {
             UpdateMapUser(ChatNetworkManager.Client, UpdateUserCharacterMessage.UpdateType.Add, userData);
         }
     }
     base.RegisterPlayerCharacter(connectionId, playerCharacterEntity);
 }
        public override List <SocialCharacterData> FindCharacters(string finderId, string characterName, int skip, int limit)
        {
            string excludeIdsQuery = "(id!='" + finderId + "'";

            // Exclude friend, requested characters
            ExecuteReader((reader) =>
            {
                while (reader.Read())
                {
                    excludeIdsQuery += " AND id!='" + reader.GetString(0) + "'";
                }
            }, "SELECT characterId2 FROM friend WHERE characterId1='" + finderId + "'");
            excludeIdsQuery += ")";
            List <SocialCharacterData> result = new List <SocialCharacterData>();

            ExecuteReader((reader) =>
            {
                SocialCharacterData socialCharacterData;
                while (reader.Read())
                {
                    // Get some required data, other data will be set at server side
                    socialCharacterData               = new SocialCharacterData();
                    socialCharacterData.id            = reader.GetString(0);
                    socialCharacterData.dataId        = reader.GetInt32(1);
                    socialCharacterData.characterName = reader.GetString(2);
                    socialCharacterData.level         = reader.GetInt16(3);
                    result.Add(socialCharacterData);
                }
            }, "SELECT id, dataId, characterName, level FROM characters WHERE characterName LIKE @characterName AND " + excludeIdsQuery + " LIMIT " + skip + ", " + limit,
                          new SqliteParameter("@characterName", "%" + characterName + "%"));
            return(result);
        }
示例#7
0
        public override List <SocialCharacterData> ReadFriends(string id1)
        {
            List <SocialCharacterData> result = new List <SocialCharacterData>();

            SQLiteRowsReader reader = ExecuteReader("SELECT characterId2 FROM friend WHERE characterId1=@id1",
                                                    new SqliteParameter("@id1", id1));
            string characterId;
            SocialCharacterData socialCharacterData;
            SQLiteRowsReader    reader2;

            while (reader.Read())
            {
                characterId = reader.GetString("characterId2");
                reader2     = ExecuteReader("SELECT id, dataId, characterName, level FROM characters WHERE id LIKE @id",
                                            new SqliteParameter("@id", characterId));
                while (reader2.Read())
                {
                    // Get some required data, other data will be set at server side
                    socialCharacterData               = new SocialCharacterData();
                    socialCharacterData.id            = reader2.GetString("id");
                    socialCharacterData.characterName = reader2.GetString("characterName");
                    socialCharacterData.dataId        = reader2.GetInt32("dataId");
                    socialCharacterData.level         = reader2.GetInt16("level");
                    result.Add(socialCharacterData);
                }
            }
            return(result);
        }
        public override GuildData ReadGuild(int id, GuildRoleData[] defaultGuildRoles)
        {
            GuildData       result = null;
            MySQLRowsReader reader = ExecuteReader("SELECT * FROM guild WHERE id=@id LIMIT 1",
                                                   new MySqlParameter("@id", id));

            if (reader.Read())
            {
                result              = new GuildData(id, reader.GetString("guildName"), reader.GetString("leaderId"), defaultGuildRoles);
                result.level        = reader.GetInt16("level");
                result.exp          = reader.GetInt32("exp");
                result.skillPoint   = reader.GetInt16("skillPoint");
                result.guildMessage = reader.GetString("guildMessage");
                result.gold         = reader.GetInt32("gold");

                reader = ExecuteReader("SELECT * FROM guildrole WHERE guildId=@id",
                                       new MySqlParameter("@id", id));
                byte          guildRole;
                GuildRoleData guildRoleData;
                while (reader.Read())
                {
                    guildRole                        = reader.GetByte("guildRole");
                    guildRoleData                    = new GuildRoleData();
                    guildRoleData.roleName           = reader.GetString("name");
                    guildRoleData.canInvite          = reader.GetBoolean("canInvite");
                    guildRoleData.canKick            = reader.GetBoolean("canKick");
                    guildRoleData.shareExpPercentage = reader.GetByte("shareExpPercentage");
                    result.SetRole(guildRole, guildRoleData);
                }

                reader = ExecuteReader("SELECT id, dataId, characterName, level, guildRole FROM characters WHERE guildId=@id",
                                       new MySqlParameter("@id", id));
                SocialCharacterData guildMemberData;
                while (reader.Read())
                {
                    // Get some required data, other data will be set at server side
                    guildMemberData               = new SocialCharacterData();
                    guildMemberData.id            = reader.GetString("id");
                    guildMemberData.characterName = reader.GetString("characterName");
                    guildMemberData.dataId        = reader.GetInt32("dataId");
                    guildMemberData.level         = reader.GetInt16("level");
                    result.AddMember(guildMemberData, reader.GetByte("guildRole"));
                }

                reader = ExecuteReader("SELECT dataId, level FROM guildskill WHERE guildId=@id",
                                       new MySqlParameter("@id", id));
                while (reader.Read())
                {
                    result.SetSkillLevel(reader.GetInt32("dataId"), reader.GetInt16("level"));
                }
            }
            return(result);
        }
示例#9
0
        private void UpdateMapUser(UpdateUserCharacterMessage.UpdateType updateType, SocialCharacterData userData, long exceptConnectionId)
        {
            foreach (long mapServerConnectionId in mapServerConnectionIds)
            {
                if (mapServerConnectionId == exceptConnectionId)
                {
                    continue;
                }

                UpdateMapUser(mapServerConnectionId, updateType, userData);
            }
        }
        public SocialCharacterData ToSocialCharacterData()
        {
            var result = new SocialCharacterData();

            result.id            = id;
            result.characterName = characterName;
            result.dataId        = dataId;
            result.level         = level;
            result.currentHp     = currentHp;
            result.maxHp         = maxHp;
            result.currentMp     = currentMp;
            result.maxMp         = maxMp;

            return(result);
        }
示例#11
0
        public async UniTaskVoid HandleRequestAcceptGuildInvitation(RequestHandlerData requestHandler, RequestAcceptGuildInvitationMessage request, RequestProceedResultDelegate <ResponseAcceptGuildInvitationMessage> result)
        {
#if UNITY_STANDALONE && !CLIENT_BUILD
            await UniTask.Yield();

            BasePlayerCharacterEntity playerCharacter;
            if (!GameInstance.ServerUserHandlers.TryGetPlayerCharacter(requestHandler.ConnectionId, out playerCharacter))
            {
                result.Invoke(AckResponseCode.Error, new ResponseAcceptGuildInvitationMessage()
                {
                    message = UITextKeys.UI_ERROR_NOT_LOGGED_IN,
                });
                return;
            }
            ValidateGuildRequestResult validateResult = GameInstance.ServerGuildHandlers.CanAcceptGuildInvitation(request.guildId, playerCharacter);
            if (!validateResult.IsSuccess)
            {
                result.Invoke(AckResponseCode.Error, new ResponseAcceptGuildInvitationMessage()
                {
                    message = validateResult.GameMessage,
                });
                return;
            }
            playerCharacter.GuildId = request.guildId;
            validateResult.Guild.AddMember(playerCharacter);
            GameInstance.ServerGuildHandlers.SetGuild(request.guildId, validateResult.Guild);
            GameInstance.ServerGuildHandlers.RemoveGuildInvitation(request.guildId, playerCharacter.Id);
            // Save to database
            _ = DbServiceClient.UpdateCharacterGuildAsync(new UpdateCharacterGuildReq()
            {
                SocialCharacterData = DatabaseServiceUtils.ToByteString(SocialCharacterData.Create(playerCharacter)),
                GuildId             = request.guildId,
                GuildRole           = validateResult.Guild.GetMemberRole(playerCharacter.Id)
            });
            // Broadcast via chat server
            if (ChatNetworkManager.IsClientConnected)
            {
                ChatNetworkManager.SendAddSocialMember(null, MMOMessageTypes.UpdateGuildMember, request.guildId, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level);
            }
            GameInstance.ServerGameMessageHandlers.SendSetGuildData(requestHandler.ConnectionId, validateResult.Guild);
            GameInstance.ServerGameMessageHandlers.SendAddGuildMembersToOne(requestHandler.ConnectionId, validateResult.Guild);
            GameInstance.ServerGameMessageHandlers.SendAddGuildMembersToMembers(validateResult.Guild, playerCharacter.Id, playerCharacter.CharacterName, playerCharacter.DataId, playerCharacter.Level);
            result.Invoke(AckResponseCode.Success, new ResponseAcceptGuildInvitationMessage()
            {
                message = UITextKeys.UI_GUILD_INVITATION_ACCEPTED,
            });
#endif
        }
        public override List <SocialCharacterData> ReadFriends(string id, bool readById2, byte state, int skip, int limit)
        {
            List <SocialCharacterData> result = new List <SocialCharacterData>();
            List <string> characterIds        = new List <string>();

            if (readById2)
            {
                ExecuteReader((reader) =>
                {
                    while (reader.Read())
                    {
                        characterIds.Add(reader.GetString(0));
                    }
                }, "SELECT characterId1 FROM friend WHERE characterId2=@id AND state=" + state + " LIMIT " + skip + ", " + limit,
                              new SqliteParameter("@id", id));
            }
            else
            {
                ExecuteReader((reader) =>
                {
                    while (reader.Read())
                    {
                        characterIds.Add(reader.GetString(0));
                    }
                }, "SELECT characterId2 FROM friend WHERE characterId1=@id AND state=" + state + " LIMIT " + skip + ", " + limit,
                              new SqliteParameter("@id", id));
            }
            SocialCharacterData socialCharacterData;

            foreach (string characterId in characterIds)
            {
                ExecuteReader((reader) =>
                {
                    while (reader.Read())
                    {
                        // Get some required data, other data will be set at server side
                        socialCharacterData               = new SocialCharacterData();
                        socialCharacterData.id            = reader.GetString(0);
                        socialCharacterData.dataId        = reader.GetInt32(1);
                        socialCharacterData.characterName = reader.GetString(2);
                        socialCharacterData.level         = reader.GetInt16(3);
                        result.Add(socialCharacterData);
                    }
                }, "SELECT id, dataId, characterName, level FROM characters WHERE id LIKE @id",
                              new SqliteParameter("@id", characterId));
            }
            return(result);
        }
示例#13
0
        private IEnumerator FindCharactersRoutine(BasePlayerCharacterEntity playerCharacterEntity, string characterName)
        {
            FindCharactersJob job = new FindCharactersJob(Database, characterName);

            job.Start();
            yield return(StartCoroutine(job.WaitFor()));

            SocialCharacterData[] characters = new SocialCharacterData[job.result.Count];
            SocialCharacterData   tempCharacter;

            for (int i = 0; i < job.result.Count; ++i)
            {
                tempCharacter = job.result[i];
                characters[i] = tempCharacter;
            }
            SendUpdateFoundCharactersToClient(playerCharacterEntity.ConnectionId, characters);
        }
示例#14
0
        public override List <SocialCharacterData> FindCharacters(string characterName)
        {
            List <SocialCharacterData> result = new List <SocialCharacterData>();
            SQLiteRowsReader           reader = ExecuteReader("SELECT id, dataId, characterName, level FROM characters WHERE characterName LIKE @characterName LIMIT 0, 20",
                                                              new SqliteParameter("@characterName", "%" + characterName + "%"));
            SocialCharacterData socialCharacterData;

            while (reader.Read())
            {
                // Get some required data, other data will be set at server side
                socialCharacterData               = new SocialCharacterData();
                socialCharacterData.id            = reader.GetString("id");
                socialCharacterData.characterName = reader.GetString("characterName");
                socialCharacterData.dataId        = reader.GetInt32("dataId");
                socialCharacterData.level         = reader.GetInt16("level");
                result.Add(socialCharacterData);
            }
            return(result);
        }
        public override async UniTask <List <SocialCharacterData> > FindCharacters(string characterName)
        {
            List <SocialCharacterData> result = new List <SocialCharacterData>();

            await ExecuteReader((reader) =>
            {
                SocialCharacterData socialCharacterData;
                while (reader.Read())
                {
                    // Get some required data, other data will be set at server side
                    socialCharacterData               = new SocialCharacterData();
                    socialCharacterData.id            = reader.GetString(0);
                    socialCharacterData.dataId        = reader.GetInt32(1);
                    socialCharacterData.characterName = reader.GetString(2);
                    socialCharacterData.level         = reader.GetInt16(3);
                    result.Add(socialCharacterData);
                }
            }, "SELECT id, dataId, characterName, level FROM characters WHERE characterName LIKE @characterName LIMIT 0, 20",
                                new MySqlParameter("@characterName", "%" + characterName + "%"));

            return(result);
        }
 public void Deserialize(NetDataReader reader)
 {
     GuildId             = reader.GetInt();
     GuildRole           = reader.GetByte();
     SocialCharacterData = reader.GetValue <SocialCharacterData>();
 }
        private void UpdateMapUser(LiteNetLibClient transportHandler, UpdateUserCharacterMessage.UpdateType updateType, SocialCharacterData userData)
        {
#if UNITY_STANDALONE && !CLIENT_BUILD
            UpdateUserCharacterMessage updateMapUserMessage = new UpdateUserCharacterMessage();
            updateMapUserMessage.type = updateType;
            updateMapUserMessage.data = userData;
            transportHandler.SendPacket(0, DeliveryMethod.ReliableOrdered, MMOMessageTypes.UpdateMapUser, updateMapUserMessage.Serialize);
#endif
        }
 public void Deserialize(NetDataReader reader)
 {
     PartyId             = reader.GetInt();
     SocialCharacterData = reader.GetValue <SocialCharacterData>();
 }
示例#19
0
        private void UpdateMapUser(long connectionId, UpdateUserCharacterMessage.UpdateType updateType, SocialCharacterData userData)
        {
            UpdateUserCharacterMessage message = new UpdateUserCharacterMessage();

            message.type      = updateType;
            message.character = userData;
            SendPacket(connectionId, 0, DeliveryMethod.ReliableOrdered, MMOMessageTypes.UpdateMapUser, (writer) => writer.PutValue(message));
        }
        public override GuildData ReadGuild(int id, GuildRoleData[] defaultGuildRoles)
        {
            GuildData result = null;

            ExecuteReader((reader) =>
            {
                if (reader.Read())
                {
                    result = new GuildData(id,
                                           reader.GetString(0),
                                           reader.GetString(1),
                                           defaultGuildRoles);
                    result.level              = reader.GetInt16(2);
                    result.exp                = reader.GetInt32(3);
                    result.skillPoint         = reader.GetInt16(4);
                    result.guildMessage       = reader.GetString(5);
                    result.guildMessage2      = reader.GetString(6);
                    result.gold               = reader.GetInt32(7);
                    result.score              = reader.GetInt32(8);
                    result.options            = reader.GetString(9);
                    result.autoAcceptRequests = reader.GetBoolean(10);
                    result.rank               = reader.GetInt32(11);
                }
            }, "SELECT `guildName`, `leaderId`, `level`, `exp`, `skillPoint`, `guildMessage`, `guildMessage2`, `gold`, `score`, `options`, `autoAcceptRequests`, `rank` FROM guild WHERE id=@id LIMIT 1",
                          new SqliteParameter("@id", id));
            if (result != null)
            {
                // Guild roles
                ExecuteReader((reader) =>
                {
                    byte guildRole;
                    GuildRoleData guildRoleData;
                    while (reader.Read())
                    {
                        guildRole                        = reader.GetByte(0);
                        guildRoleData                    = new GuildRoleData();
                        guildRoleData.roleName           = reader.GetString(1);
                        guildRoleData.canInvite          = reader.GetBoolean(2);
                        guildRoleData.canKick            = reader.GetBoolean(3);
                        guildRoleData.shareExpPercentage = reader.GetByte(4);
                        result.SetRole(guildRole, guildRoleData);
                    }
                }, "SELECT guildRole, name, canInvite, canKick, shareExpPercentage FROM guildrole WHERE guildId=@id",
                              new SqliteParameter("@id", id));
                // Guild members
                ExecuteReader((reader) =>
                {
                    SocialCharacterData guildMemberData;
                    while (reader.Read())
                    {
                        // Get some required data, other data will be set at server side
                        guildMemberData               = new SocialCharacterData();
                        guildMemberData.id            = reader.GetString(0);
                        guildMemberData.dataId        = reader.GetInt32(1);
                        guildMemberData.characterName = reader.GetString(2);
                        guildMemberData.level         = reader.GetInt16(3);
                        result.AddMember(guildMemberData, reader.GetByte(4));
                    }
                }, "SELECT id, dataId, characterName, level, guildRole FROM characters WHERE guildId=@id",
                              new SqliteParameter("@id", id));
                // Guild skills
                ExecuteReader((reader) =>
                {
                    while (reader.Read())
                    {
                        result.SetSkillLevel(reader.GetInt32(0), reader.GetInt16(1));
                    }
                }, "SELECT dataId, level FROM guildskill WHERE guildId=@id",
                              new SqliteParameter("@id", id));
            }
            return(result);
        }
示例#21
0
        public override async UniTask <GuildData> ReadGuild(int id, GuildRoleData[] defaultGuildRoles)
        {
            GuildData result = null;

            await ExecuteReader((reader) =>
            {
                if (reader.Read())
                {
                    result = new GuildData(id,
                                           reader.GetString(0),
                                           reader.GetString(1),
                                           defaultGuildRoles);
                    result.level        = reader.GetInt16(2);
                    result.exp          = reader.GetInt32(3);
                    result.skillPoint   = reader.GetInt16(4);
                    result.guildMessage = reader.GetString(5);
                    result.gold         = reader.GetInt32(6);
                }
            }, "SELECT guildName, leaderId, level, exp, skillPoint, guildMessage, gold FROM guild WHERE id=@id LIMIT 1",
                                new MySqlParameter("@id", id));

            // Read relates data if guild exists
            if (result != null)
            {
                // Guild roles
                await ExecuteReader((reader) =>
                {
                    byte guildRole;
                    GuildRoleData guildRoleData;
                    while (reader.Read())
                    {
                        guildRole                        = reader.GetByte(0);
                        guildRoleData                    = new GuildRoleData();
                        guildRoleData.roleName           = reader.GetString(1);
                        guildRoleData.canInvite          = reader.GetBoolean(2);
                        guildRoleData.canKick            = reader.GetBoolean(3);
                        guildRoleData.shareExpPercentage = reader.GetByte(4);
                        result.SetRole(guildRole, guildRoleData);
                    }
                }, "SELECT guildRole, name, canInvite, canKick, shareExpPercentage FROM guildrole WHERE guildId=@id",
                                    new MySqlParameter("@id", id));

                // Guild members
                await ExecuteReader((reader) =>
                {
                    SocialCharacterData guildMemberData;
                    while (reader.Read())
                    {
                        // Get some required data, other data will be set at server side
                        guildMemberData               = new SocialCharacterData();
                        guildMemberData.id            = reader.GetString(0);
                        guildMemberData.dataId        = reader.GetInt32(1);
                        guildMemberData.characterName = reader.GetString(2);
                        guildMemberData.level         = reader.GetInt16(3);
                        result.AddMember(guildMemberData, reader.GetByte(4));
                    }
                }, "SELECT id, dataId, characterName, level, guildRole FROM characters WHERE guildId=@id",
                                    new MySqlParameter("@id", id));

                // Guild skills
                await ExecuteReader((reader) =>
                {
                    while (reader.Read())
                    {
                        result.SetSkillLevel(reader.GetInt32(0), reader.GetInt16(1));
                    }
                }, "SELECT dataId, level FROM guildskill WHERE guildId=@id",
                                    new MySqlParameter("@id", id));
            }
            return(result);
        }
示例#22
0
        private void UpdateMapUser(long connectionId, UpdateUserCharacterMessage.UpdateType updateType, SocialCharacterData userData)
        {
            UpdateUserCharacterMessage updateMapUserMessage = new UpdateUserCharacterMessage();

            updateMapUserMessage.type = updateType;
            updateMapUserMessage.data = userData;
            ServerSendPacket(connectionId, DeliveryMethod.ReliableOrdered, MMOMessageTypes.UpdateMapUser, updateMapUserMessage);
        }