Skip to content

Commit

Permalink
Minor updates for readability
Browse files Browse the repository at this point in the history
  • Loading branch information
nitoygo committed Jan 8, 2025
1 parent 5fd9e39 commit 3db6f68
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
35 changes: 23 additions & 12 deletions src/GameLogic/PlayerActions/MiniGames/EnterMiniGameAction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

namespace MUnique.OpenMU.GameLogic.PlayerActions.MiniGames;

using MUnique.OpenMU.DataModel.Configuration.Items;
using MUnique.OpenMU.GameLogic.Attributes;
using MUnique.OpenMU.GameLogic.GuildWar;
using MUnique.OpenMU.GameLogic.MiniGames;
Expand All @@ -16,6 +17,8 @@ namespace MUnique.OpenMU.GameLogic.PlayerActions.MiniGames;
/// </summary>
public class EnterMiniGameAction
{
private const int UndefinedTicketSlot = 0xFF;

/// <summary>
/// Tries to enter the mini game event of the specified type and level with the specified ticket item.
/// </summary>
Expand Down Expand Up @@ -169,34 +172,42 @@ private async ValueTask ConsumeTicketItemAsync(Item? ticketItem, Player player)

private bool CheckTicketItem(MiniGameDefinition miniGameDefinition, Player player, byte gameTicketInventoryIndex, out Item? ticketItem)
{
ticketItem = null;

if (miniGameDefinition.TicketItem is not { } ticketItemDefinition)
{
ticketItem = null;
return true;
}

ticketItem = player.Inventory?.GetItem(gameTicketInventoryIndex);
if (ticketItemDefinition.Equals(ticketItem?.Definition) && ticketItem.Durability > 0 && ticketItem.Level == miniGameDefinition.TicketItemLevel)
if (gameTicketInventoryIndex != UndefinedTicketSlot)
{
return true;
ticketItem = player.Inventory?.GetItem(gameTicketInventoryIndex);
if (this.IsValidTicket(ticketItem, ticketItemDefinition, miniGameDefinition))
{
return true;
}
}

var candidateTicketItems = player.Inventory?.FindItemsByDefinition(ticketItemDefinition);
if (candidateTicketItems is not null && candidateTicketItems.Any())
foreach (var candidateItem in player.Inventory?.FindItemsByDefinition(ticketItemDefinition) ?? Enumerable.Empty<Item>())
{
foreach (var candidateTicketItem in candidateTicketItems)
if (this.IsValidTicket(candidateItem, ticketItemDefinition, miniGameDefinition))
{
ticketItem = candidateTicketItem;
if (ticketItemDefinition.Equals(ticketItem?.Definition) && ticketItem.Durability > 0 && ticketItem.Level == miniGameDefinition.TicketItemLevel)
{
return true;
}
ticketItem = candidateItem;
return true;
}
}

return false;
}

private bool IsValidTicket(Item? ticketItem, ItemDefinition requiredItemDefinition, MiniGameDefinition miniGameDefinition)
{
return ticketItem is not null
&& requiredItemDefinition.Equals(ticketItem.Definition)
&& ticketItem.Durability > 0
&& ticketItem.Level == miniGameDefinition.TicketItemLevel;
}

private bool CheckEntranceFee(MiniGameDefinition miniGameDefinition, Player player, out int entranceFee)
{
entranceFee = Math.Max(miniGameDefinition.EntranceFee, 0);
Expand Down
2 changes: 1 addition & 1 deletion src/GameLogic/Storage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ public IEnumerable<Item> FindItemsByDefinition(ItemDefinition definition)
{
var primaryMatches = this.ItemArray
.Where(i => i != null && i.Definition == definition)
.Cast<Item>();
.Select(i => i!);

var extensionMatches = this.Extensions?
.SelectMany(extension => extension.FindItemsByDefinition(definition))
Expand Down

0 comments on commit 3db6f68

Please sign in to comment.