public virtual ServerRoleData CreateRoleData(ClientCreateRoleRequest req, string accountID, string serverid) { var roleTemplate = GetRoleTemplate(req.c2s_template_id, 0); if (roleTemplate == null) { return(null); } var roleID = (Guid.NewGuid().ToString()); //玩家角色信息. ServerRoleData srd = new ServerRoleData(); //创建UUID. srd.uuid = roleID; srd.account_uuid = accountID; srd.name = req.c2s_name; srd.server_id = serverid; srd.role_template_id = req.c2s_template_id; srd.unit_template_id = req.c2s_template_id; srd.create_time = DateTime.UtcNow; return(srd); }
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 }); } }