//ellenorizz per request %%% nem kellenek ezek a boolok public void SetOnlineStatus(bool state, bool checkNofBase, bool forcedByServer = false) { if (OnlineStatus == state) { return; } if (!forcedByServer) { if (!state) { if (PBSHelper.IsOfflineOnReinforce(_pbsUnit)) { _pbsUnit.IsReinforced().ThrowIfTrue(ErrorCodes.NotPossibleDuringReinforce); } } } if (checkNofBase) { _pbsUnit.ConnectionHandler.NetworkNodes.Any(n => n is PBSDockingBase).ThrowIfFalse(ErrorCodes.NoBaseInNetwork); } OnlineStatus = state; }
private void GoOfflineOnReinforce(T pbsUnitObject) { if (PBSHelper.IsOfflineOnReinforce(pbsUnitObject)) { //go offline if the node is in reinforce pbsUnitObject.SetOnlineStatus(false, false, true); } }
public void HandleRequest(IZoneRequest request) { using (var scope = Db.CreateTransaction()) { var sourceEid = request.Data.GetOrDefault <long>(k.eid); var character = request.Session.Character; var state = request.Data.GetOrDefault <int>(k.state) == 1; var sourceUnit = request.Zone.GetUnitOrThrow(sourceEid); var sourceNode = (sourceUnit as IPBSObject).ThrowIfNull(ErrorCodes.DefinitionNotSupported); sourceNode.IsFullyConstructed().ThrowIfFalse(ErrorCodes.ObjectNotFullyConstructed); sourceNode.CheckAccessAndThrowIfFailed(character); if (PBSHelper.IsOfflineOnReinforce(sourceUnit)) { //ezeket nem lehet kapcsolgatni ha reinforceban vannak sourceNode.ReinforceHandler.CurrentState.IsReinforced.ThrowIfTrue(ErrorCodes.NotPossibleDuringReinforce); } if (sourceNode.OnlineStatus != state) { if (state) { //be akarunk valamit kapcsolni //ez a node akkor mehet csak onlineba ha nem rothadt ki alatta a mineral mar 1x var energyWell = sourceUnit as PBSEnergyWell; energyWell?.IsDepleted.ThrowIfTrue(ErrorCodes.EnergyWellDepleted); } sourceNode.SetOnlineStatus(state, true); sourceUnit.Save(); Transaction.Current.OnCommited(() => { sourceNode.SendNodeUpdate(); var logType = state ? PBSLogType.online : PBSLogType.offline; PBSHelper.WritePBSLog(logType, sourceEid, sourceUnit.Definition, sourceUnit.Owner, character.Id, background: false, zoneId: request.Zone.Id); }); } Message.Builder.FromRequest(request).WithOk().Send(); scope.Complete(); } }
public override void Exit() { ReinforceHandler._pbsUnit.OrphanedStateChanged -= OnOrphanedStateChanged; ReinforceHandler._pbsUnit.DynamicProperties.Update(k.isReinforced, 0); ReinforceHandler._pbsUnit.DynamicProperties.Update(k.reinforceEnd, default(DateTime)); ReinforceHandler._pbsUnit.States.Reinforced = false; ReinforceHandler.StartAsyncLog(PBSLogType.reinforceEnd); ReinforceHandler.SetNextReinforceCounterIncreaseFromNow(VULNERABLE_LENGTH_MINUTES); if (PBSHelper.IsOfflineOnReinforce(ReinforceHandler._pbsUnit)) { //go online if the node is leaving reinforce ReinforceHandler._pbsUnit.SetOnlineStatus(true, false, true); } base.Exit(); }