Firstborn/Assets/RPG Creation Kit/Scripts/Trade System/UI/BookItemInTradeUI.cs

187 lines
6.7 KiB
C#
Raw Permalink Normal View History

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using RPGCreationKit;
namespace RPGCreationKit
{
public class BookItemInTradeUI : BookItemInInventoryUI
{
public override void OnClick(bool takeAll = false)
{
if (TradeSystemUI.instance.isBuyingOrDrawing)
{
Debug.Log("Taking item: " + base.bookItemInInventory.item.ItemName);
if (TradeSystemUI.instance.isMerchant)
{
// if the amount is 1, add it one time
if (base.bookItemInInventory.Amount <= 1)
{
TradeSystemUI.instance.confirmTradePanel.gameObject.SetActive(true);
TradeSystemUI.instance.confirmTradePanel.Init(base.bookItemInInventory, this, "Are you sure you want to buy 1 " + base.bookItemInInventory.item.ItemName + " for " + base.bookItemInInventory.item.Value + " golds?");
TradeSystemUI.instance.confirmTradePanel.continueButton.onClick.AddListener(() => ConfirmTrade(1, ConfirmTradeAction.BuyFromMerchant));
}
else if (base.bookItemInInventory.item.isCumulable && base.bookItemInInventory.Amount > 1)
{
TradeSystemUI.instance.takeDepositItemsPanel.gameObject.SetActive(true);
TradeSystemUI.instance.takeDepositItemsPanel.Init(bookItemInInventory, this);
}
}
else
{
// we're drawing from a friendly npc
}
}
else // we're selling
{
if (base.bookItemInInventory.item.QuestItem)
{
AlertMessage.instance.InitAlertMessage("You can't sell Quest Items", AlertMessage.DEFAULT_MESSAGE_DURATION_MEDIUM);
return;
}
// if the amount is 1, add it one time
if (TradeSystemUI.instance.isMerchant)
{
// if the amount is 1, add it one time
if (base.bookItemInInventory.Amount <= 1)
{
TradeSystemUI.instance.confirmTradePanel.gameObject.SetActive(true);
TradeSystemUI.instance.confirmTradePanel.Init(base.bookItemInInventory, this, "Are you sure you want to sell 1 " + base.bookItemInInventory.item.ItemName + " for " + base.bookItemInInventory.item.Value + " golds?");
TradeSystemUI.instance.confirmTradePanel.continueButton.onClick.AddListener(() => ConfirmTrade(1, ConfirmTradeAction.SellToMerchant));
}
else if (base.bookItemInInventory.item.isCumulable && base.bookItemInInventory.Amount > 1)
{
TradeSystemUI.instance.takeDepositItemsPanel.gameObject.SetActive(true);
TradeSystemUI.instance.takeDepositItemsPanel.Init(bookItemInInventory, this);
}
}
}
}
public override void ConfirmButtonCumulableItem(int amount)
{
if (TradeSystemUI.instance.isBuyingOrDrawing)
{
if (TradeSystemUI.instance.isMerchant)
{
TradeSystemUI.instance.takeDepositItemsPanel.CancelButton();
TradeSystemUI.instance.confirmTradePanel.gameObject.SetActive(true);
TradeSystemUI.instance.confirmTradePanel.Init(base.bookItemInInventory, this, "Are you sure you want to buy " + amount + " " + base.bookItemInInventory.item.ItemName + " for " + (base.bookItemInInventory.item.Value * amount) + " golds?", true);
TradeSystemUI.instance.confirmTradePanel.continueButton.onClick.AddListener(() => ConfirmTrade(amount, ConfirmTradeAction.BuyFromMerchant));
}
else
{
// friendly npc
}
}
else // we're selling
{
if (TradeSystemUI.instance.isMerchant)
{
TradeSystemUI.instance.takeDepositItemsPanel.CancelButton();
TradeSystemUI.instance.confirmTradePanel.gameObject.SetActive(true);
TradeSystemUI.instance.confirmTradePanel.Init(base.bookItemInInventory, this, "Are you sure you want to sell " + amount + " " + base.bookItemInInventory.item.ItemName + " for " + (base.bookItemInInventory.item.Value * amount) + " golds?", true);
TradeSystemUI.instance.confirmTradePanel.continueButton.onClick.AddListener(() => ConfirmTrade(amount, ConfirmTradeAction.SellToMerchant));
}
else
{
//friendly npc
}
}
}
public override void ConfirmTrade(int _amount, ConfirmTradeAction _action)
{
int totalGoldsAmount = (base.bookItemInInventory.item.Value * _amount);
if (_action == ConfirmTradeAction.BuyFromMerchant)
{
if (Inventory.PlayerInventory.GetItemCount("Gold001") >= totalGoldsAmount)
{
Inventory.PlayerInventory.AddItem(base.bookItemInInventory.item, base.bookItemInInventory.metadata, _amount);
Inventory.PlayerInventory.RemoveItem("Gold001", totalGoldsAmount);
TradeSystemUI.instance.curMerchant.inventory.AddItem("Gold001", totalGoldsAmount);
// Remove the item from the merchant inventory
TradeSystemUI.instance.curMerchant.inventory.RemoveItem(base.bookItemInInventory, _amount);
TradeSystemUI.instance.PlaySound(GoldsSounds.Spend);
TradeSystemUI.instance.confirmTradePanel.CancelButton();
AlertMessage.instance.InitAlertMessage("Transaction Completed!", 3f);
TradeSystemUI.instance.UpdateStatsUI();
// if the merchant's item is out of stocks, remove the item
if (base.bookItemInInventory.Amount <= 0)
{
TradeSystemUI.instance.SelectNextButton();
// Disable this object
pool.usedObjects.Remove(this);
pool.BooksPool.usedObjects.Remove(this);
gameObject.GetComponent<Button>().onClick.RemoveAllListeners();
gameObject.SetActive(false);
}
else
{
Init();
}
}
else
{
TradeSystemUI.instance.confirmTradePanel.CancelButton();
AlertMessage.instance.InitAlertMessage("You don't have enough gold.", 3f);
}
}
else if (_action == ConfirmTradeAction.SellToMerchant)
{
if (TradeSystemUI.instance.curMerchant.inventory.GetItemCount("Gold001") >= totalGoldsAmount)
{
TradeSystemUI.instance.curMerchant.inventory.AddItem(base.bookItemInInventory.item, base.bookItemInInventory.metadata, _amount);
Inventory.PlayerInventory.RemoveItem(base.bookItemInInventory, _amount);
TradeSystemUI.instance.curMerchant.inventory.RemoveItem("Gold001", totalGoldsAmount);
Inventory.PlayerInventory.AddItem("Gold001", totalGoldsAmount);
TradeSystemUI.instance.PlaySound(GoldsSounds.Gain);
TradeSystemUI.instance.confirmTradePanel.CancelButton();
AlertMessage.instance.InitAlertMessage("Transaction Completed!", 3f);
TradeSystemUI.instance.UpdateStatsUI();
// if the merchant's item is out of stocks, remove the item
if (base.bookItemInInventory.Amount <= 0)
{
TradeSystemUI.instance.SelectNextButton();
// Disable this object
pool.usedObjects.Remove(this);
pool.BooksPool.usedObjects.Remove(this);
gameObject.GetComponent<Button>().onClick.RemoveAllListeners();
gameObject.SetActive(false);
}
else
{
Init();
}
}
else
{
TradeSystemUI.instance.confirmTradePanel.CancelButton();
AlertMessage.instance.InitAlertMessage("The merchant doesn't have enough gold.", 3f);
}
}
}
}
}