2023-03-28 13:16:30 -04:00
using System.Collections ;
using System.Collections.Generic ;
using UnityEngine ;
using UnityEngine.UI ;
using RPGCreationKit ;
using RPGCreationKit.AI ;
namespace RPGCreationKit
{
public class KeyItemInLootingUI_DrawDeposit : KeyItemInInventoryUI
{
public override void OnClick ( bool takeAll = false )
{
2023-05-07 00:20:29 -04:00
if ( LootingInventoryUI . instance . curIsPickPocket & & LootingInventoryUI . instance . curLootingPoint ! = null )
2023-03-28 13:16:30 -04:00
{
// Player is attempting to pickpocket
// This is a VERY simple rule, if the weight of the item is over 1 the player will never be able to successfully pickpocket it
// You may want to change/alter this for your own projects
2023-05-07 00:20:29 -04:00
float B = ( float ) EntityAttributes . PlayerAttributes . attributes . Dexterity / 100f ; // Dexterity - Your dexterity divided by 100. level 5 is 5% chance
float A = ( 1f - ( ( float ) keyItemInInventory . item . Value / 100f ) ) ; // Value - The value will work backwards starting at 50 Gold. if its value is 49, you have a 2% chance.
float C = ( 1f - ( ( float ) keyItemInInventory . item . Weight / 100f ) ) ; // Weight - the weight will work backwards at 50 LBS. if it is 49 LBS, you have a 2% chance
float ChanceForSuccess = ( ( A + B + C ) / 3 ) ; // add the percenct, divide by 3 to get average. - Done.
// lets base it off chance.
2023-03-28 13:16:30 -04:00
// Could use Vector3.Dot to make less likely to succeed when infront of the AI
2023-05-07 00:20:29 -04:00
float RandomChance = ( Random . value ) ;
Debug . Log ( "Item: " + keyItemInInventory . item . ItemName + "; A: " + A + "; B: " + B + "; C: " + C + "; ChanceForSuccess:" + ChanceForSuccess + "; RandomChance: " + RandomChance + ";" ) ;
2023-03-28 13:16:30 -04:00
2023-05-07 00:20:29 -04:00
if ( ChanceForSuccess < RandomChance ) { // random selects a percent between 0% and 100%, and sees if yours is greater, if so, you have success.
2023-03-28 13:16:30 -04:00
// Failed chance check
RckAI ai = LootingInventoryUI . instance . curLootingPoint . GetComponent < RckAI > ( ) ;
2023-05-07 00:20:29 -04:00
ai . TryEngageWithPlayer ( ) ; // Engage with player - Lets get faction instead of every fucker in the area.
2023-03-28 13:16:30 -04:00
LootingInventoryUI . instance . CloseUI ( ) ;
return ;
2023-05-07 00:20:29 -04:00
} else { // Reward Player
EntityAttributes . PlayerAttributes . attributes . DexterityPoints + = 1 ;
A = ( float ) EntityAttributes . PlayerAttributes . attributes . DexterityPoints ;
B = ( float ) EntityAttributes . PlayerAttributes . attributes . Dexterity ;
while ( A > = ( B * 3 ) ) {
EntityAttributes . PlayerAttributes . attributes . Dexterity + = 1 ;
float D = ( A - ( B * 3f ) ) ;
EntityAttributes . PlayerAttributes . attributes . DexterityPoints = ( int ) D ;
A = ( float ) EntityAttributes . PlayerAttributes . attributes . DexterityPoints ;
B = ( float ) EntityAttributes . PlayerAttributes . attributes . Dexterity ;
}
2023-03-28 13:16:30 -04:00
}
}
// Some palce in the codebase seems to be calling this method after the CloseUI randomly, not sure why or where yet
// this is a backup in that case
if ( LootingInventoryUI . instance . curIsPickPocket & & LootingInventoryUI . instance . curLootingPoint = = null ) {
return ;
}
if ( LootingInventoryUI . instance . isDrawing )
{
// if the amount is 1, add it one time
if ( base . keyItemInInventory . Amount < = 1 )
{
Inventory . PlayerInventory . AddItem ( base . keyItemInInventory . item , base . keyItemInInventory . metadata , 1 , ! takeAll ) ;
// Remove the item from the current loot inventory
LootingInventoryUI . instance . curLootingPoint . inventory . RemoveItem ( base . keyItemInInventory , 1 ) ;
LootingInventoryUI . instance . SelectNextButton ( ) ;
// Disable this object
pool . usedObjects . Remove ( this ) ;
pool . KeysPool . usedObjects . Remove ( this ) ;
gameObject . GetComponent < Button > ( ) . onClick . RemoveAllListeners ( ) ;
gameObject . SetActive ( false ) ;
}
else if ( base . keyItemInInventory . item . isCumulable & & base . keyItemInInventory . Amount > 1 )
{
if ( ! takeAll )
{
LootingInventoryUI . instance . takeDepositItemsPanel . gameObject . SetActive ( true ) ;
LootingInventoryUI . instance . takeDepositItemsPanel . Init ( keyItemInInventory , this ) ;
}
else
{
ConfirmButtonCumulableItem ( base . keyItemInInventory . Amount ) ;
}
}
}
else // we're depositing
{
if ( base . keyItemInInventory . item . QuestItem )
{
AlertMessage . instance . InitAlertMessage ( "You can't leave Quest Items" , AlertMessage . DEFAULT_MESSAGE_DURATION_MEDIUM ) ;
return ;
}
// if the amount is 1, add it one time
if ( base . keyItemInInventory . Amount < = 1 )
{
// Remove the item from the current loot inventory
LootingInventoryUI . instance . curLootingPoint . inventory . AddItem ( base . keyItemInInventory . item , base . keyItemInInventory . metadata , 1 ) ;
Inventory . PlayerInventory . RemoveItem ( base . keyItemInInventory , 1 ) ;
LootingInventoryUI . instance . SelectNextButton ( ) ;
// Disable this object
pool . usedObjects . Remove ( this ) ;
pool . KeysPool . usedObjects . Remove ( this ) ;
gameObject . GetComponent < Button > ( ) . onClick . RemoveAllListeners ( ) ;
gameObject . SetActive ( false ) ;
}
else if ( base . keyItemInInventory . item . isCumulable & & base . keyItemInInventory . Amount > 1 )
{
LootingInventoryUI . instance . takeDepositItemsPanel . gameObject . SetActive ( true ) ;
LootingInventoryUI . instance . takeDepositItemsPanel . Init ( keyItemInInventory , this ) ;
}
}
}
public override void ConfirmButtonCumulableItem ( int amount )
{
if ( LootingInventoryUI . instance . isDrawing )
{
// Add in PlayerInventory
Inventory . PlayerInventory . AddItem ( base . keyItemInInventory . item , base . keyItemInInventory . metadata , amount ) ;
// Remove from Loot Inventory
LootingInventoryUI . instance . curLootingPoint . inventory . RemoveItem ( base . keyItemInInventory , amount ) ;
if ( keyItemInInventory . Amount < = 0 )
{
LootingInventoryUI . instance . takeDepositItemsPanel . SetPreviousSelected ( ) ;
LootingInventoryUI . instance . SelectNextButton ( true ) ;
//If we've took all the items
pool . usedObjects . Remove ( this ) ;
pool . KeysPool . usedObjects . Remove ( this ) ;
// Disable this object
gameObject . GetComponent < Button > ( ) . onClick . RemoveAllListeners ( ) ;
gameObject . SetActive ( false ) ;
}
else
{
// Update the UI
Init ( ) ;
}
}
else // we're depositing
{
// Remove from Loot Inventory
LootingInventoryUI . instance . curLootingPoint . inventory . AddItem ( base . keyItemInInventory . item , base . keyItemInInventory . metadata , amount ) ;
// Add in PlayerInventory
Inventory . PlayerInventory . RemoveItem ( base . keyItemInInventory , amount ) ;
if ( keyItemInInventory . Amount < = 0 )
{
LootingInventoryUI . instance . takeDepositItemsPanel . SetPreviousSelected ( ) ;
LootingInventoryUI . instance . SelectNextButton ( true ) ;
//If we've took all the items
pool . usedObjects . Remove ( this ) ;
pool . KeysPool . usedObjects . Remove ( this ) ;
// Disable this object
gameObject . GetComponent < Button > ( ) . onClick . RemoveAllListeners ( ) ;
gameObject . SetActive ( false ) ;
}
else
{
// Update the UI
Init ( ) ;
}
}
}
}
}