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)); }
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); }