コード例 #1
0
        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);
        }
コード例 #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
                });
            }
        }