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); } }
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 }); } }