コード例 #1
0
 protected virtual void on_create_role(PomeloException err, ClientCreateRoleResponse rsp)
 {
     log_response(rsp, err);
     if (Response.CheckSuccess(rsp))
     {
         do_enter_game(rsp.s2c_role.uuid, on_enter_game);
     }
     else if (rsp.s2c_code == ClientCreateRoleResponse.CODE_NAME_ALREADY_EXIST)
     {
         var rn = client.GameClient.GetLastResponse <ClientGetRandomNameResponse>();
         if (rn != null)
         {
             var name = rn.s2c_name + this.random.Next(100).ToString();
             do_create_role(name, on_create_role);
         }
         else
         {
             var name = this.account + this.random.Next(100).ToString();
             do_create_role(name, on_create_role);
         }
     }
     else if (rsp.s2c_code == ClientCreateRoleResponse.CODE_BLACK_NAME)
     {
         var name = this.account + this.random.Next(100).ToString();
         do_create_role(name, on_create_role);
     }
     else
     {
         var name = client.GameClient.GetLastResponse <ClientGetRandomNameResponse>();
         do_create_role(name.s2c_name, on_create_role);
     }
 }
コード例 #2
0
        public virtual async Task <ClientCreateRoleResponse> client_rpc_Handle(ClientCreateRoleRequest req)
        {
            try
            {
                var serverID = await accountSave.LoadFieldAsync <string>(nameof(AccountData.lastLoginServerID));

                var privilege = await accountSave.LoadFieldAsync <RolePrivilege>(nameof(AccountData.privilege));

                var accountData = accountSave.Data;
                var roleIDMap   = accountRoleSnapSave.Data.roleIDMap;
                if (roleIDMap == null)
                {
                    roleIDMap = new HashMap <string, RoleIDSnap>();
                }

                int roleCount = 0;
                foreach (var item in roleIDMap)
                {
                    if (item.Value.serverID == serverID)
                    {
                        roleCount++;
                    }
                }

                if (roleCount >= RPGServerTemplateManager.Instance.GetRoleMaxCount())//该服下账号是否达到创建上限.
                {
                    return(new ClientCreateRoleResponse()
                    {
                        s2c_code = ClientCreateRoleResponse.CODE_CREATE_ROLE_LIMIT
                    });
                }
                else if (RPGServerTemplateManager.Instance.IsBlackWord(req.c2s_name))
                {
                    return(new ClientCreateRoleResponse()
                    {
                        s2c_code = ClientCreateRoleResponse.CODE_BLACK_NAME
                    });
                }
                else if (!RPGServerPersistenceManager.Instance.CheckRoleName(req.c2s_name))
                {
                    //名字异常,长度不符合规范
                    return(new ClientCreateRoleResponse()
                    {
                        s2c_code = ClientCreateRoleResponse.CODE_CREATE_ROLE_INVAILD
                    });
                }
                // 创建纯数据
                var roleData = RPGServerTemplateManager.Instance.CreateRoleData(req, accountID, serverID);
                //用户权限.
                roleData.privilege = privilege;

                if (roleData == null)
                {
                    return(new ClientCreateRoleResponse()
                    {
                        s2c_code = ClientCreateRoleResponse.CODE_TEMPLATE_NOT_EXIST
                    });
                }
                var digitID = await RPGServerPersistenceManager.Instance.TryRegistRoleNameMappingAsync(roleData.uuid, roleData.name, this);

                if (digitID == null)
                {
                    return(new ClientCreateRoleResponse()
                    {
                        s2c_code = ClientCreateRoleResponse.CODE_NAME_ALREADY_EXIST
                    });
                }
                roleData.digitID = digitID;

                // Role数据映射
                var snapData = await RPGServerPersistenceManager.Instance.CreateRoleDataAsync(roleData, this);


                var roleIDSnap = RPGServerTemplateManager.Instance.CreateRoleIDSnapData(roleData);
                roleIDMap.Add(roleIDSnap.roleUUID, roleIDSnap);
                accountRoleSnapSave.SetField(nameof(AccountRoleSnap.roleIDMap), roleIDMap);
                await accountRoleSnapSave.FlushAsync();

                //单区内角色记录
                var serverRoleIDSet = RPGServerPersistenceManager.Instance.GetServerRoleIDMappingSet(this, roleData.server_id);
                await serverRoleIDSet.AddRoleIDAsync(roleData.uuid);

                var ret = new ClientCreateRoleResponse()
                {
                    s2c_role = snapData
                };
                //网络协议接口日志//
                //log.Log(ret);
                //BI创角记录.
                RPGServerPersistenceManager.Instance.SaveBICreateRoleInfo(log, roleData, Channel);
                return(ret);
            }
            catch (Exception err)
            {
                log.Error(string.Format("ClientCreateRoleRequest Handle Error:account = {0}  msg = {1} ", accountID, err.Message), err);
                return(new ClientCreateRoleResponse()
                {
                    s2c_code = ClientCreateRoleResponse.CODE_ERROR,
                    s2c_msg = err.Message
                });
            }
        }