public static bool RequestUseItem(ISimGameWorldReadWriteAccessor accessor, Entity actor, Entity item, GameAction.UseParameters parameters = null) { if (!CommonReads.CanUseItem(accessor, actor, item, out ItemUnavailablityReason unavailabilityReason)) { Log.Warning($"Instigator {accessor.GetNameSafe(actor)} cannot use item {accessor.GetNameSafe(item)} because of {unavailabilityReason}"); return(false); } accessor.TryGetComponent(item, out ItemAction itemAction); CommonWrites.RequestExecuteGameAction(accessor, item, itemAction, parameters); // reduce consumable amount if (accessor.GetComponent <StackableFlag>(item)) { CommonWrites.DecrementItem(accessor, item, actor); } // reduce instigator AP if (accessor.TryGetComponent(item, out ItemSettingAPCost itemActionPointCost) && itemActionPointCost.Value != 0) { CommonWrites.ModifyStatFix <ActionPoints>(accessor, actor, -itemActionPointCost.Value); } // Cooldown if (accessor.TryGetComponent(item, out ItemTimeCooldownData itemTimeCooldownData)) { accessor.SetOrAddComponent(item, new ItemCooldownTimeCounter() { Value = itemTimeCooldownData.Value }); } return(true); }