Exemple #1
0
        /// <summary>
        /// 请求进入场景
        /// </summary>
        public virtual async Task <RoleEnterZoneResponse> RequestEnterZoneAsync(RoleEnterZoneRequest req)
        {
            var rd = service.roleModule.GetRoleData();

            req.roleUUID           = service.roleID;
            req.roleSessionName    = service.sessionName;
            req.roleSessionNode    = service.sessionNode;
            req.roleLogicName      = service.SelfAddress.ServiceName;
            req.roleLogicNode      = service.SelfAddress.ServiceNode;
            req.roleDisplayName    = rd.name;
            req.roleUnitTemplateID = rd.unit_template_id;
            req.roleData           = ToRoleBattleData(req);//< ---战斗相关数据
            req.LastZoneSaveData   = rd.last_zone_saved;
            req.lastPublicMapID    = rd.last_public_mapID;
            req.lastPublicMapUUID  = rd.last_public_area_uuid;
            req.lastPublicPos      = rd.last_public_map_pos;
            req.expectAreaNode     = service.SelfAddress.ServiceNode;
            var result = await this.areaManager.CallAsync <RoleEnterZoneResponse>(req);

            if (RoleEnterZoneResponse.CheckSuccess(result))
            {
                currentArea = await service.Provider.GetAsync(new RemoteAddress(result.areaName, result.areaNode));

                this.service.roleModule.SaveEnterZoneInfo(result);
                CurZoneChange(req, result);
            }
            else
            {
                service.log.Error("Enter Zone Error : " + result);
            }
            return(result);
        }
Exemple #2
0
 protected virtual void CurZoneChange(RoleEnterZoneRequest req, RoleEnterZoneResponse result)
 {
     //变更过场景,场景线缓存失效.
     mZoneInfoDirtyFlag = true;
     OnEnterZone?.Invoke(req, result);
 }