コード例 #1
0
        protected override FishingActionRequest ClientTryCreateRequest(ICharacter character)
        {
            if (ComponentFishingVisualizer.TryGetFor(character, out _) ||
                PlayerCharacter.GetPrivateState(character).CurrentActionState is FishingActionState)
            {
                // already fishing
                return(null);
            }

            var itemFishingRod        = character.SharedGetPlayerSelectedHotbarItem();
            var fishingRodPublicState = itemFishingRod.GetPublicState <ItemFishingRodPublicState>();

            if (fishingRodPublicState.CurrentProtoBait is null ||
                SharedFindBaitItem(character, fishingRodPublicState.CurrentProtoBait) is null)
            {
                // no bait selected - try switch it
                FishingBaitReloadingSystem.ClientTrySwitchBaitType();
                if (fishingRodPublicState.CurrentProtoBait is null ||
                    SharedFindBaitItem(character, fishingRodPublicState.CurrentProtoBait) is null)
                {
                    // no bait selected after a switch attempt
                    return(null);
                }
            }

            var fishingTargetPosition = ClientInputManager.MouseWorldPosition;

            // clamp max distance from player
            fishingTargetPosition = character.Position
                                    + ((fishingTargetPosition - character.Position)
                                       .ClampMagnitude(MaxFishingDistance * 0.95));

            // validation will be done in SharedValidateRequest automatically
            return(new FishingActionRequest(character, itemFishingRod, fishingTargetPosition));
        }
コード例 #2
0
        private bool IsPlayerHasBait()
        {
            var fishingRodPublicState = SelectedItem.GetPublicState <ItemFishingRodPublicState>();

            if (fishingRodPublicState.CurrentProtoBait is null ||
                FishingSystem.SharedFindBaitItem(CurrentCharacter, fishingRodPublicState.CurrentProtoBait) is null)
            {
                // no bait selected - try switch it
                FishingBaitReloadingSystem.ClientTrySwitchBaitType();
                if (fishingRodPublicState.CurrentProtoBait is null ||
                    FishingSystem.SharedFindBaitItem(CurrentCharacter, fishingRodPublicState.CurrentProtoBait) is null)
                {
                    // no bait selected after a switch attempt
                    return(false);
                }
            }
            return(true);
        }