예제 #1
0
        protected override void InternalExecute()
        {
            var player     = _contexts.player.flagSelfEntity;
            var controller = player.WeaponController();

            if (!player.gamePlay.IsLifeState(EPlayerLifeState.Alive) || !player.gamePlay.CanAutoPick())
            {
                return;
            }

            Collider[] colliders = Physics.OverlapCapsule(player.position.Value, player.bones.Head.position,
                                                          0.4f, UnityLayerManager.GetLayerMask(EUnityLayerName.UserInputRaycast));
            foreach (Collider collider in colliders)
            {
                var rcTar = collider.transform.GetComponentInParent <RayCastTarget>();
                if (rcTar == null)
                {
                    continue;
                }
                if (SingletonManager.Get <GameModeConfigManager>().GetBagTypeById(_contexts.session.commonSession.RoomInfo.ModeId) == EBagType.Chicken)
                {
                    var target = _contexts.sceneObject.GetEntityWithEntityKey(new EntityKey(rcTar.IdList[1], (short)EEntityType.SceneObject));
                    if (target.simpleItem.Category == (int)ECategory.Weapon && player.WeaponController().FilterAutoPickup(target.simpleItem.Id))
                    {
                        var model = target.hasUnityObject ? target.unityObject.UnityObject : target.multiUnityObject.FirstAsset;
                        if (CommonObjectCastUtil.HasObstacleBetweenPlayerAndItem(player, target.position.Value, model))
                        {
                            continue;
                        }

                        SimpleProto pickUp = FreePool.Allocate();
                        pickUp.Key = FreeMessageConstant.PickUpItem;
                        pickUp.Ins.Add(rcTar.IdList[1]);
                        pickUp.Ins.Add(target.simpleItem.Category);
                        pickUp.Ins.Add(target.simpleItem.Id);
                        pickUp.Ins.Add(1);
                        player.network.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, pickUp);
                    }
                }
                else
                {
                    _userCmdGenerator.SetUserCmd((userCmd) =>
                    {
                        if (!userCmd.AutoPickUpEquip.Contains(rcTar.IdList[1]))
                        {
                            userCmd.AutoPickUpEquip.Add(rcTar.IdList[1]);
                        }
                    });
                }
            }

            if (controller.AutoThrowing.HasValue && controller.AutoThrowing.Value)
            {
                if (null != _userCmdGenerator && controller.RelatedThrowAction.IsReady == true)
                {
                    _userCmdGenerator.SetUserCmd((userCmd) => { userCmd.IsThrowing = true; });
                    controller.AutoThrowing = false;
                }
            }
        }
예제 #2
0
 public override void OnAction()
 {
     if (_enableAction)
     {
         _userCmdGenerator.SetUserCmd((cmd) => cmd.IsUseAction = true);
         _userCmdGenerator.SetUserCmd((cmd) => cmd.UseEntityId = _doorObjId);
         _userCmdGenerator.SetUserCmd((cmd) => cmd.UseType     = (int)EUseActionType.Door);
         var player = _playerContext.flagSelfEntity;
         //if(null != player)
         //{
         //    if(_open)
         //    {
         //        player.soundManager.Value.PlayOnce(XmlConfig.EPlayerSoundType.OpenDoor);
         //    }
         //    else
         //    {
         //        player.soundManager.Value.PlayOnce(XmlConfig.EPlayerSoundType.CloseDoor);
         //    }
         //}
         //else
         //{
         //    Logger.Error("self entity in player context is null");
         //}
     }
 }
예제 #3
0
 public override void OnAction()
 {
     _userCmdGenerator.SetUserCmd((cmd) => cmd.IsUseAction    = true);
     _userCmdGenerator.SetUserCmd((cmd) => cmd.UseVehicleSeat = _seatId);
     _userCmdGenerator.SetUserCmd((cmd) => cmd.UseEntityId    = _vehicleId);
     _userCmdGenerator.SetUserCmd((cmd) => cmd.UseType        = (int)EUseActionType.Vehicle);
     Logger.DebugFormat("Action vehicle {0} seat {1}", _vehicleId, _seatId);
 }
 public override void SendPickup(IPlayerWeaponProcessor weaponProcessor, int entityId, int itemId, int category, int count)
 {
     _userCmdGenerator.SetUserCmd((cmd) =>
     {
         cmd.IsManualPickUp    = true;
         cmd.ManualPickUpEquip = entityId;
     });
 }
예제 #5
0
 public override void OnAction()
 {
     if (_enableAction)
     {
         _userCmdGenerator.SetUserCmd((cmd) => cmd.IsUseAction = true);
         _userCmdGenerator.SetUserCmd((cmd) => cmd.UseEntityId = _doorObjId);
         _userCmdGenerator.SetUserCmd((cmd) => cmd.UseType     = (int)EUseActionType.Door);
         var player = _playerContext.flagSelfEntity;
     }
 }
예제 #6
0
        public void Action()
        {
            Logger.DebugFormat("action in state {0}", _parachuteState);
            _userCmdGenerator.SetUserCmd((cmd) => cmd.IsUseAction = true);
            switch (_parachuteState)
            {
            case ParachuteState.WaitGlide:
                break;

            case ParachuteState.WaitParachute:
                break;
            }
        }
예제 #7
0
        public override void SendPickup(IPlayerWeaponProcessor weaponProcessor, int entityId, int itemId, int category, int count)
        {
            var player = _contexts.player.flagSelfEntity;

            if (null == player)
            {
                return;
            }
            SimpleProto pickUp = FreePool.Allocate();

            _userCmdGenerator.SetUserCmd((cmd) => cmd.IsManualPickUp = true);
            _userCmdGenerator.SetUserCmd((cmd) => cmd.IsUseAction    = true);
            pickUp.Key = FreeMessageConstant.PickUpItem;
            pickUp.Ins.Add(entityId);
            pickUp.Ins.Add(category);
            pickUp.Ins.Add(itemId);
            pickUp.Ins.Add(count);
            player.network.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, pickUp);
            if (Logger.IsDebugEnabled)
            {
                Logger.DebugFormat("send pick up message entityId {0}, category {1}, itemid {2}, count {3}", entityId, category, itemId, count);
            }
        }
예제 #8
0
        public void ExecuteUserCmd(IUserCmdOwner owner, IUserCmd cmd)
        {
            var player     = owner.OwnerEntity as PlayerEntity;
            var controller = player.WeaponController();

            if (IsNotAliveThenIgnoreCmd(player))
            {
                return;
            }
            if (cmd.PickUpEquip > 0)
            {
                if (cmd.IsManualPickUp)
                {
                    player.ModeController().DoPickup(player, cmd.PickUpEquip);
                }
                else
                {
                    player.ModeController().AutoPickupWeapon(player, cmd.PickUpEquip);
                }
            }
            else if (cmd.FilteredInput.IsInput(XmlConfig.EPlayerInput.IsDropWeapon))
            {
                player.ModeController().Drop(player, controller.HeldSlotType);
            }
            //投掷时会判断是否已经准备,手雷的对象为Playback,不存在预测回滚的问题
            if (controller.AutoThrowing.HasValue && controller.AutoThrowing.Value)
            {
                if (null != _userCmdGenerator)
                {
                    _userCmdGenerator.SetUserCmd((userCmd) => {
                        userCmd.IsThrowing = true;
                    });
                    controller.AutoThrowing = false;
                }
            }
        }
        public void ExecuteUserCmd(IUserCmdOwner owner, IUserCmd cmd)
        {
            var player = owner.OwnerEntity as PlayerEntity;

            if (IsNotAliveThenIgnoreCmd(player))
            {
                return;
            }
            if (cmd.PickUpEquip > 0)
            {
                if (cmd.IsManualPickUp)
                {
                    player.modeLogic.ModeLogic.DoPickup(player.entityKey.Value.EntityId, cmd.PickUpEquip);
                }
                else
                {
                    player.modeLogic.ModeLogic.AutoPickupWeapon(player.entityKey.Value.EntityId, cmd.PickUpEquip);
                }
            }
            //TODO 暂时没有考虑回滚,后续需对回滚的情况做处理
            if (player.hasWeaponAutoState && player.weaponAutoState.AutoThrowing)
            {
                if (null != _userCmdGenerator)
                {
                    _userCmdGenerator.SetUserCmd((userCmd) => {
                        userCmd.IsThrowing = true;
                    });
                    player.weaponAutoState.AutoThrowing = false;
                }
            }
            if (cmd.FilteredInput.IsInput(XmlConfig.EPlayerInput.IsDropWeapon))
            {
                var slot = (EWeaponSlotType)player.weaponState.CurrentWeaponSlot;
                player.modeLogic.ModeLogic.Dorp(player.entityKey.Value.EntityId, slot);
            }
        }
예제 #10
0
        /*public override void SendAutoPickupWeapon(int entityId)
         * {
         *  var target = _contexts.sceneObject.GetEntityWithEntityKey(new EntityKey(entityId, (short)EEntityType.SceneObject));
         *  if (target != null && Player.WeaponController().FilterAutoPickup(target.simpleItem.Id))
         *  {
         *      var model = target.hasUnityObject ? target.unityObject.UnityObject : target.multiUnityObject.FirstAsset;
         *      if (CommonObjectCastUtil.HasObstacleBetweenPlayerAndItem(Player, target.position.Value, model))
         *      {
         *          return;
         *      }
         *
         *      SimpleProto pickUp = FreePool.Allocate();
         *      pickUp.Key = FreeMessageConstant.PickUpItem;
         *      pickUp.Ins.Add(entityId);
         *      pickUp.Ins.Add(target.simpleItem.Category);
         *      pickUp.Ins.Add(target.simpleItem.Id);
         *      pickUp.Ins.Add(1);
         *      Player.network.NetworkChannel.SendReliable((int)EClient2ServerMessage.FreeEvent, pickUp);
         *  }
         * }*/

        protected override void DoDropGrenade(PlayerEntity playerEntity, EWeaponSlotType slot, IUserCmd cmd)
        {
            _userCmdGenerator.SetUserCmd((userCmd) => userCmd.IsLeftAttack = true);
            playerEntity.WeaponController().AutoThrowing = true;
        }
예제 #11
0
 public override void OnAction()
 {
     _userCmdGenerator.SetUserCmd((cmd) => cmd.IsTabDown = true);
 }
예제 #12
0
 public override void OnAction()
 {
     _userCmdGenerator.SetUserCmd((cmd) => cmd.IsUseAction = true);
     _userCmdGenerator.SetUserCmd((cmd) => cmd.UseEntityId = _playerId);
     _userCmdGenerator.SetUserCmd((cmd) => cmd.UseType     = (int)EUseActionType.Player);
 }