Ejemplo n.º 1
0
        //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();
            }