protected virtual void PickUpItem() { targetItemDrop = null; if (ItemDropEntityDetector.itemDrops.Count > 0) { targetItemDrop = ItemDropEntityDetector.itemDrops[0]; } if (targetItemDrop != null) { PlayerCharacterEntity.CallServerPickupItem(targetItemDrop.ObjectId); } }
protected void UpdateInput() { if (GenericUtils.IsFocusInputField()) { return; } if (PlayerCharacterEntity.IsDead()) { return; } // If it's building something, don't allow to activate NPC/Warp/Pickup Item if (!ConstructingBuildingEntity) { // Activate nearby npcs / players / activable buildings if (InputManager.GetButtonDown("Activate")) { targetPlayer = null; if (ActivatableEntityDetector.players.Count > 0) { targetPlayer = ActivatableEntityDetector.players[0]; } targetNpc = null; if (ActivatableEntityDetector.npcs.Count > 0) { targetNpc = ActivatableEntityDetector.npcs[0]; } targetBuilding = null; if (ActivatableEntityDetector.buildings.Count > 0) { targetBuilding = ActivatableEntityDetector.buildings[0]; } targetVehicle = null; if (ActivatableEntityDetector.vehicles.Count > 0) { targetVehicle = ActivatableEntityDetector.vehicles[0]; } targetWarpPortal = null; if (ActivatableEntityDetector.warpPortals.Count > 0) { targetWarpPortal = ActivatableEntityDetector.warpPortals[0]; } targetItemsContainer = null; if (ItemDropEntityDetector.itemsContainers.Count > 0) { targetItemsContainer = ItemDropEntityDetector.itemsContainers[0]; } // Priority Player -> Npc -> Buildings if (targetPlayer && CacheUISceneGameplay) { // Show dealing, invitation menu SelectedEntity = targetPlayer; CacheUISceneGameplay.SetActivePlayerCharacter(targetPlayer); } else if (targetNpc) { // Talk to NPC SelectedEntity = targetNpc; PlayerCharacterEntity.CallServerNpcActivate(targetNpc.ObjectId); } else if (targetBuilding) { // Use building SelectedEntity = targetBuilding; ActivateBuilding(targetBuilding); } else if (targetVehicle) { // Enter vehicle PlayerCharacterEntity.CallServerEnterVehicle(targetVehicle.ObjectId); } else if (targetWarpPortal) { // Enter warp, For some warp portals that `warpImmediatelyWhenEnter` is FALSE PlayerCharacterEntity.CallServerEnterWarp(targetWarpPortal.ObjectId); } else if (targetItemsContainer) { // Show items ShowItemsContainerDialog(targetItemsContainer); } } // Pick up nearby items if (InputManager.GetButtonDown("PickUpItem")) { targetItemDrop = null; if (ItemDropEntityDetector.itemDrops.Count > 0) { targetItemDrop = ItemDropEntityDetector.itemDrops[0]; } if (targetItemDrop != null) { PlayerCharacterEntity.CallServerPickupItem(targetItemDrop.ObjectId); } } // Reload if (InputManager.GetButtonDown("Reload")) { // Reload ammo when press the button ReloadAmmo(); } if (InputManager.GetButtonDown("ExitVehicle")) { // Exit vehicle PlayerCharacterEntity.CallServerExitVehicle(); } if (InputManager.GetButtonDown("SwitchEquipWeaponSet")) { // Switch equip weapon set GameInstance.ClientInventoryHandlers.RequestSwitchEquipWeaponSet(new RequestSwitchEquipWeaponSetMessage() { equipWeaponSet = (byte)(PlayerCharacterEntity.EquipWeaponSet + 1), }, ClientInventoryActions.ResponseSwitchEquipWeaponSet); } if (InputManager.GetButtonDown("Sprint")) { // Toggles sprint state isSprinting = !isSprinting; } // Auto reload if (PlayerCharacterEntity.EquipWeapons.rightHand.IsAmmoEmpty() || PlayerCharacterEntity.EquipWeapons.leftHand.IsAmmoEmpty()) { // Reload ammo when empty and not press any keys ReloadAmmo(); } } UpdateLookInput(); UpdateWASDInput(); PlayerCharacterEntity.SetExtraMovement(isSprinting ? ExtraMovementState.IsSprinting : ExtraMovementState.None); }
public void TabTargetUpdateFollowTarget() { // use attack targetActionType = TargetActionType.Attack; if (isAutoAttacking && CanAttack(out targetDamageable)) { if (targetDamageable.IsHideOrDead()) { isAutoAttacking = false; ClearQueueUsingSkill(); PlayerCharacterEntity.StopMove(); ClearTarget(); Targeting.UnTarget(Targeting.SelectedTarget); return; } float attackDistance = 0f; float attackFov = 0f; GetAttackDistanceAndFov(isLeftHandAttacking, out attackDistance, out attackFov); Attack(targetDamageable, attackDistance, CurrentGameInstance.characterLayer.Mask); return; } if (!isFollowingTarget) { return; } // Use the set target action type for the following actions if (TryGetDoActionEntity(out targetPlayer)) { DoActionOrMoveToEntity(targetPlayer, CurrentGameInstance.conversationDistance, () => { // TODO: Do something }); return; } if (TryGetDoActionEntity(out targetNpc)) { DoActionOrMoveToEntity(targetNpc, CurrentGameInstance.conversationDistance, () => { if (!didActionOnTarget) { didActionOnTarget = true; PlayerCharacterEntity.CallServerNpcActivate(targetNpc.ObjectId); } }); return; } if (TryGetDoActionEntity(out targetItemDrop)) { DoActionOrMoveToEntity(targetItemDrop, CurrentGameInstance.pickUpItemDistance, () => { PlayerCharacterEntity.CallServerPickupItem(targetItemDrop.ObjectId); ClearTarget(); }); return; } // use skill targetActionType = TargetActionType.UseSkill; if (TryGetUsingSkillEntity(out targetDamageable)) { if (queueUsingSkill.skill.IsAttack() && targetDamageable.IsHideOrDead()) { ClearQueueUsingSkill(); PlayerCharacterEntity.StopMove(); ClearTarget(); Targeting.UnTarget(Targeting.SelectedTarget); return; } float castDistance = 0f; float castFov = 0f; GetUseSkillDistanceAndFov(isLeftHandAttacking, out castDistance, out castFov); UseSkillOrMoveToEntity(targetDamageable, castDistance); return; } targetActionType = TargetActionType.Activate; if (TryGetDoActionEntity(out targetBuilding, TargetActionType.Activate)) { DoActionOrMoveToEntity(targetBuilding, CurrentGameInstance.conversationDistance, () => { if (!didActionOnTarget) { didActionOnTarget = true; ActivateBuilding(targetBuilding); } }); return; } targetActionType = TargetActionType.ViewOptions; if (TryGetDoActionEntity(out targetBuilding, TargetActionType.ViewOptions)) { DoActionOrMoveToEntity(targetBuilding, CurrentGameInstance.conversationDistance, () => { if (!didActionOnTarget) { didActionOnTarget = true; ShowCurrentBuildingDialog(); } }); return; } targetActionType = TargetActionType.Activate; if (TryGetDoActionEntity(out targetVehicle)) { DoActionOrMoveToEntity(targetVehicle, CurrentGameInstance.conversationDistance, () => { PlayerCharacterEntity.CallServerEnterVehicle(targetVehicle.ObjectId); ClearTarget(); Targeting.UnTarget(Targeting.SelectedTarget); }); } }