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