Exemplo n.º 1
0
        public virtual async Task <RoleLeaveZoneResponse> RequestLeaveZoneAsync()
        {
            var rd      = service.roleModule.GetRoleData();
            var request = new RoleLeaveZoneRequest()
            {
                zoneUUID   = rd.last_zone_uuid,
                roleID     = service.roleID,
                keepObject = false,
            };
            var result = await this.areaManager.CallAsync <RoleLeaveZoneResponse>(request);

            if (result != null && RoleLeaveZoneResponse.CheckSuccess(result))
            {
                this.service.roleModule.SaveLeaveZoneInfo(result);
                OnLeaveZone?.Invoke(request, result);
            }
            return(result);
        }
Exemplo n.º 2
0
        public virtual Task <RoleLeaveZoneResponse> DoPlayerLeaveAsync(AreaZonePlayer player, RoleLeaveZoneRequest leave)
        {
            var tcs = new System.Threading.Tasks.TaskCompletionSource <RoleLeaveZoneResponse>();

            this.node.PlayerLeave(player,
                                  (c) =>
            {
                tcs.TrySetResult(new RoleLeaveZoneResponse()
                {
                    lastScenePos = new Data.ZonePosition()
                    {
                        x = c.Actor.X,
                        y = c.Actor.Y,
                        z = c.Actor.Z,
                    },
                    curHP             = c.Actor.CurrentHP,
                    curMP             = c.Actor.CurrentMP,
                    LeaveZoneSaveData = c.LastZoneSaveData,
                });
            },
                                  (e) =>
            {
                tcs.TrySetResult(new RoleLeaveZoneResponse()
                {
                    s2c_code = RoleLeaveZoneResponse.CODE_ERROR,
                    s2c_msg  = e.Message,
                });
            });
            return(tcs.Task);
        }