2023-03-28 13:16:30 -04:00
using System.Collections ;
using System.Collections.Generic ;
using UnityEngine ;
using UnityEngine.UI ;
using RPGCreationKit ;
namespace RPGCreationKit
{
2023-06-21 12:09:52 -04:00
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 ) ;
}
}
}
}
2023-03-28 13:16:30 -04:00
}