181 lines
8.5 KiB
C#
181 lines
8.5 KiB
C#
|
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 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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|