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; } } }
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"); //} } }
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; }); }
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; } }
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; } }
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); } }
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); } }
/*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; }
public override void OnAction() { _userCmdGenerator.SetUserCmd((cmd) => cmd.IsTabDown = true); }
public override void OnAction() { _userCmdGenerator.SetUserCmd((cmd) => cmd.IsUseAction = true); _userCmdGenerator.SetUserCmd((cmd) => cmd.UseEntityId = _playerId); _userCmdGenerator.SetUserCmd((cmd) => cmd.UseType = (int)EUseActionType.Player); }