Firstborn/Assets/RPG Creation Kit/Scripts/Trade System/UI/BookItemInTradeUI.cs
Schaken-Mods f35c8a6d6e 6/21/23 update
Upgraded the framework which includes the Distant cell rendering. I have been merging meshes to cut down the Draw calls, so far gaining on average 20FPS everywhere. New bugs are the magic fails (Again) and the environment presets fail to call when outside. Currently trying to build new lightmaps for the combined meshes.
2023-06-21 11:09:52 -05:00

187 lines
6.7 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 (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);
}
}
}
}
}