2014-06-28 21:22:05 +00:00
using System ;
using System.Drawing ;
using System.Windows.Forms ;
namespace PKHeX
{
public partial class SAV_Inventory : Form
{
2015-09-21 03:34:09 +00:00
public SAV_Inventory ( )
2014-06-28 21:22:05 +00:00
{
InitializeComponent ( ) ;
2015-09-21 03:34:09 +00:00
Util . TranslateInterface ( this , Main . curlanguage ) ;
sav = ( byte [ ] ) Main . savefile . Clone ( ) ;
2014-11-21 23:34:10 +00:00
2014-06-28 21:22:05 +00:00
getListItems ( ) ;
getListKeyItems ( ) ;
2014-08-14 00:46:09 +00:00
getListTMHM ( ) ;
2014-06-28 21:22:05 +00:00
getListMedicine ( ) ;
getListBerries ( ) ;
B_DisplayItems . ForeColor = Color . Red ;
popItems ( ) ;
2015-09-21 03:34:09 +00:00
B_DisplayItems . Text = Main . itempouch [ 0 ] ;
B_DisplayMedicine . Text = Main . itempouch [ 1 ] ;
B_DisplayTMHM . Text = Main . itempouch [ 2 ] ;
B_DisplayBerries . Text = Main . itempouch [ 3 ] ;
B_DisplayKeyItems . Text = Main . itempouch [ 4 ] ;
2014-06-28 21:22:05 +00:00
}
2015-09-21 03:34:09 +00:00
public byte [ ] sav ;
2014-06-28 21:22:05 +00:00
public string [ ] item_val ;
public string [ ] keyitem_val ;
public string [ ] tmhm_val ;
public string [ ] medicine_val ;
public string [ ] berries_val ;
2014-11-21 23:34:10 +00:00
2014-06-28 21:22:05 +00:00
// Initialize String Tables
private void getListItems ( )
{
2015-09-21 03:34:09 +00:00
ushort [ ] itemlist = ( Main . SaveGame . ORAS ) ? Legal . Pouch_Items_ORAS : Legal . Pouch_Items_XY ;
2014-07-26 21:56:06 +00:00
item_val = new string [ itemlist . Length ] ;
for ( int i = 0 ; i < itemlist . Length ; i + + )
2015-09-21 03:34:09 +00:00
item_val [ i ] = Main . itemlist [ itemlist [ i ] ] ;
2014-07-26 21:56:06 +00:00
Array . Sort ( item_val ) ;
2014-06-28 21:22:05 +00:00
}
private void getListKeyItems ( )
{
2015-09-21 03:34:09 +00:00
ushort [ ] itemlist = ( Main . SaveGame . ORAS ) ? Legal . Pouch_Key_ORAS : Legal . Pouch_Key_XY ;
2014-07-26 21:56:06 +00:00
keyitem_val = new string [ itemlist . Length ] ;
for ( int i = 0 ; i < itemlist . Length ; i + + )
2015-09-21 03:34:09 +00:00
keyitem_val [ i ] = Main . itemlist [ itemlist [ i ] ] ;
2014-07-26 21:56:06 +00:00
Array . Sort ( keyitem_val ) ;
2014-06-28 21:22:05 +00:00
}
2014-08-14 00:46:09 +00:00
private void getListTMHM ( )
2014-06-28 21:22:05 +00:00
{
2015-09-21 03:34:09 +00:00
ushort [ ] itemlist = ( Main . SaveGame . ORAS ) ? Legal . Pouch_TMHM_ORAS : Legal . Pouch_TMHM_XY ;
2014-07-26 21:56:06 +00:00
tmhm_val = new string [ itemlist . Length ] ;
for ( int i = 0 ; i < itemlist . Length ; i + + )
2015-09-21 03:34:09 +00:00
tmhm_val [ i ] = Main . itemlist [ itemlist [ i ] ] ;
2014-07-26 21:56:06 +00:00
// Array.Sort(tmhm_val); Already sorted, keep HMs last.
2014-06-28 21:22:05 +00:00
}
private void getListMedicine ( )
{
2015-09-21 03:34:09 +00:00
ushort [ ] itemlist = ( Main . SaveGame . ORAS ) ? Legal . Pouch_Medicine_ORAS : Legal . Pouch_Medicine_XY ;
2014-07-26 21:56:06 +00:00
medicine_val = new string [ itemlist . Length ] ;
for ( int i = 0 ; i < itemlist . Length ; i + + )
2015-09-21 03:34:09 +00:00
medicine_val [ i ] = Main . itemlist [ itemlist [ i ] ] ;
2014-07-26 21:56:06 +00:00
Array . Sort ( medicine_val ) ;
2014-06-28 21:22:05 +00:00
}
private void getListBerries ( )
{
2014-12-14 19:06:17 +00:00
ushort [ ] itemlist = Legal . Pouch_Berry_XY ;
2014-07-26 21:56:06 +00:00
berries_val = new string [ itemlist . Length ] ;
for ( int i = 0 ; i < itemlist . Length ; i + + )
2015-09-21 03:34:09 +00:00
berries_val [ i ] = Main . itemlist [ itemlist [ i ] ] ;
2014-07-26 21:56:06 +00:00
Array . Sort ( berries_val ) ;
2014-06-28 21:22:05 +00:00
}
// Populate DataGrid
private void popItems ( )
{
2015-09-21 03:34:09 +00:00
int offset = Main . SaveGame . Items . HeldItem ;
2014-12-14 19:06:17 +00:00
populateList ( item_val , offset , item_val . Length - 1 ) ; // max 400
2014-06-28 21:22:05 +00:00
}
private void popKeyItems ( )
{
2015-09-21 03:34:09 +00:00
int offset = Main . SaveGame . Items . KeyItem ;
2014-12-14 19:06:17 +00:00
populateList ( keyitem_val , offset , keyitem_val . Length - 1 ) ; // max 96
2014-06-28 21:22:05 +00:00
}
private void popTMHM ( )
{
2015-09-21 03:34:09 +00:00
int offset = Main . SaveGame . Items . TMHM ;
2014-12-14 19:06:17 +00:00
populateList ( tmhm_val , offset , tmhm_val . Length - 1 ) ;
2014-06-28 21:22:05 +00:00
}
private void popMedicine ( )
{
2015-09-21 03:34:09 +00:00
int offset = Main . SaveGame . Items . Medicine ;
2014-12-14 19:06:17 +00:00
populateList ( medicine_val , offset , medicine_val . Length - 1 ) ; // 64 total slots
2014-06-28 21:22:05 +00:00
}
private void popBerries ( )
{
2015-09-21 03:34:09 +00:00
int offset = Main . SaveGame . Items . Berry ;
2014-12-14 19:06:17 +00:00
populateList ( berries_val , offset , berries_val . Length - 1 ) ; // 102 slots
2014-06-28 21:22:05 +00:00
}
private void populateList ( string [ ] itemarr , int offset , int itemcount )
{
dataGridView1 . Rows . Clear ( ) ;
dataGridView1 . Columns . Clear ( ) ;
DataGridViewColumn dgvIndex = new DataGridViewTextBoxColumn ( ) ;
{
dgvIndex . HeaderText = "CNT" ;
dgvIndex . DisplayIndex = 1 ;
dgvIndex . Width = 45 ;
dgvIndex . DefaultCellStyle . Alignment = DataGridViewContentAlignment . MiddleCenter ;
}
2015-03-11 01:44:51 +00:00
DataGridViewComboBoxColumn dgvItemVal = new DataGridViewComboBoxColumn
{
DisplayStyle = DataGridViewComboBoxDisplayStyle . Nothing
} ;
2014-06-28 21:22:05 +00:00
{
2015-03-11 01:44:51 +00:00
foreach ( string t in itemarr )
dgvItemVal . Items . Add ( t ) ; // add only the Item Names
2014-11-21 23:34:10 +00:00
2014-06-28 21:22:05 +00:00
dgvItemVal . DisplayIndex = 0 ;
dgvItemVal . Width = 135 ;
dgvItemVal . FlatStyle = FlatStyle . Flat ;
}
dataGridView1 . Columns . Add ( dgvItemVal ) ;
dataGridView1 . Columns . Add ( dgvIndex ) ;
dataGridView1 . Rows . Add ( itemcount ) ;
2015-01-04 01:44:06 +00:00
dataGridView1 . CancelEdit ( ) ;
2014-06-28 21:22:05 +00:00
string itemname = "" ;
for ( int i = 0 ; i < itemcount ; i + + )
{
int itemvalue = BitConverter . ToUInt16 ( sav , offset + i * 4 ) ;
2015-09-21 03:34:09 +00:00
try { itemname = Main . itemlist [ itemvalue ] ; }
2014-06-28 21:22:05 +00:00
catch
{
2014-12-11 06:50:40 +00:00
Util . Error ( "Unknown item detected." , "Item ID: " + itemvalue , "Item is after: " + itemname ) ;
2014-06-28 21:22:05 +00:00
continue ;
}
2014-07-26 21:56:06 +00:00
int itemarrayval = Array . IndexOf ( itemarr , itemname ) ;
2014-08-14 00:46:09 +00:00
if ( itemarrayval = = - 1 )
{
dataGridView1 . Rows [ i ] . Cells [ 0 ] . Value = itemarr [ 0 ] ;
dataGridView1 . Rows [ i ] . Cells [ 1 ] . Value = 0 ;
2014-12-11 06:50:40 +00:00
Util . Alert ( itemname + " removed from item pouch." , "If you exit the Item Editor by saving changes, the item will no longer be in the pouch." ) ;
2014-08-14 00:46:09 +00:00
}
else
{
dataGridView1 . Rows [ i ] . Cells [ 0 ] . Value = itemarr [ itemarrayval ] ;
dataGridView1 . Rows [ i ] . Cells [ 1 ] . Value = BitConverter . ToUInt16 ( sav , offset + i * 4 + 2 ) ;
}
2014-06-28 21:22:05 +00:00
}
}
private void dropclick ( object sender , DataGridViewCellEventArgs e )
{
2015-03-12 04:44:12 +00:00
if ( e . ColumnIndex ! = 0 ) return ;
ComboBox comboBox = ( ComboBox ) dataGridView1 . EditingControl ;
comboBox . DroppedDown = true ;
2014-06-28 21:22:05 +00:00
}
private void saveBag ( object sender )
{
int offset = 0 ;
if ( B_DisplayItems . ForeColor = = Color . Red )
2015-09-21 03:34:09 +00:00
offset = Main . SaveGame . Items . HeldItem ;
2014-06-28 21:22:05 +00:00
else if ( B_DisplayKeyItems . ForeColor = = Color . Red )
2015-09-21 03:34:09 +00:00
offset = Main . SaveGame . Items . KeyItem ;
2014-06-28 21:22:05 +00:00
else if ( B_DisplayTMHM . ForeColor = = Color . Red )
2015-09-21 03:34:09 +00:00
offset = Main . SaveGame . Items . TMHM ;
2014-06-28 21:22:05 +00:00
else if ( B_DisplayMedicine . ForeColor = = Color . Red )
2015-09-21 03:34:09 +00:00
offset = Main . SaveGame . Items . Medicine ;
2014-06-28 21:22:05 +00:00
else if ( B_DisplayBerries . ForeColor = = Color . Red )
2015-09-21 03:34:09 +00:00
offset = Main . SaveGame . Items . Berry ;
2014-06-28 21:22:05 +00:00
// Fetch Data
int itemcount = dataGridView1 . Rows . Count ;
int emptyslots = 0 ;
for ( int i = 0 ; i < itemcount ; i + + )
{
string item = dataGridView1 . Rows [ i ] . Cells [ 0 ] . Value . ToString ( ) ;
2015-09-21 03:34:09 +00:00
int itemindex = Array . IndexOf ( Main . itemlist , item ) ;
2015-03-11 01:44:51 +00:00
int itemcnt ;
2014-11-21 23:34:10 +00:00
try
2014-11-30 01:52:20 +00:00
{ itemcnt = Convert . ToUInt16 ( dataGridView1 . Rows [ i ] . Cells [ 1 ] . Value . ToString ( ) ) ; }
2014-11-21 23:34:10 +00:00
catch { itemcnt = 0 ; }
2014-06-28 21:22:05 +00:00
if ( itemindex = = 0 ) // Compression of Empty Slots
{
emptyslots + + ;
continue ;
}
2015-03-11 01:44:51 +00:00
if ( itemcnt = = 0 )
2014-07-26 21:56:06 +00:00
itemcnt + + ; // No 0 count of items
else if ( itemcnt > 995 )
2015-09-21 03:34:09 +00:00
itemcnt = 995 ; // cap out
2014-06-28 21:22:05 +00:00
// Write Data into Save File
2015-09-21 03:34:09 +00:00
Array . Copy ( BitConverter . GetBytes ( ( ushort ) itemindex ) , 0 , sav , offset + 4 * ( i - emptyslots ) , 2 ) ; // item #
Array . Copy ( BitConverter . GetBytes ( ( ushort ) itemcnt ) , 0 , sav , offset + 4 * ( i - emptyslots ) + 2 , 2 ) ; // count
2014-06-28 21:22:05 +00:00
}
// Delete Empty Trash
for ( int i = itemcount - emptyslots ; i < itemcount ; i + + )
{
2015-09-21 03:34:09 +00:00
Array . Copy ( BitConverter . GetBytes ( ( ushort ) 0 ) , 0 , sav , offset + 4 * i + 0 , 2 ) ; // item #
Array . Copy ( BitConverter . GetBytes ( ( ushort ) 0 ) , 0 , sav , offset + 4 * i + 2 , 2 ) ; // count
2014-06-28 21:22:05 +00:00
}
// Load New Button Color, after finished we'll load the new data.
2014-12-20 04:19:41 +00:00
B_DisplayItems . ForeColor =
B_DisplayKeyItems . ForeColor =
B_DisplayTMHM . ForeColor =
B_DisplayMedicine . ForeColor =
2015-09-21 03:34:09 +00:00
B_DisplayBerries . ForeColor = Main . defaultControlText ;
2014-06-28 21:22:05 +00:00
2015-09-21 03:34:09 +00:00
( sender as Button ) . ForeColor = Color . Red ;
2014-06-28 21:22:05 +00:00
}
2014-11-25 03:53:10 +00:00
private void giveAll ( string [ ] inarray , int count )
2014-08-31 20:32:04 +00:00
{
2014-11-25 03:53:10 +00:00
for ( int i = 0 ; i < inarray . Length - 1 ; i + + )
{
string itemname = inarray [ i + 1 ] ;
int itemarrayval = Array . IndexOf ( inarray , itemname ) ;
dataGridView1 . Rows [ i ] . Cells [ 0 ] . Value = inarray [ itemarrayval ] ;
dataGridView1 . Rows [ i ] . Cells [ 1 ] . Value = count ;
}
2014-08-31 20:32:04 +00:00
}
2014-06-28 21:22:05 +00:00
private void B_DisplayItems_Click ( object sender , EventArgs e )
{
// Store Current Items back to the save file
saveBag ( sender ) ;
popItems ( ) ;
2014-11-25 03:53:10 +00:00
if ( ModifierKeys = = Keys . Alt )
2015-09-21 03:34:09 +00:00
giveAll ( item_val , 995 ) ;
2014-06-28 21:22:05 +00:00
}
private void B_DisplayKeyItems_Click ( object sender , EventArgs e )
{
// Store Current Items back to the save file
saveBag ( sender ) ;
popKeyItems ( ) ;
2014-12-14 19:06:17 +00:00
if ( ModifierKeys = = Keys . Alt & & Util . Prompt ( MessageBoxButtons . YesNo , String . Format ( "Warning: Adding all {0} is dangerous." , B_DisplayKeyItems . Text ) , "Continue?" ) = = DialogResult . Yes )
giveAll ( keyitem_val , 1 ) ;
2014-06-28 21:22:05 +00:00
}
private void B_DisplayTMHM_Click ( object sender , EventArgs e )
{
// Store Current Items back to the save file
saveBag ( sender ) ;
popTMHM ( ) ;
2014-12-14 19:06:17 +00:00
if ( ModifierKeys = = Keys . Alt & & Util . Prompt ( MessageBoxButtons . YesNo , String . Format ( "Warning: Adding all {0} is dangerous." , B_DisplayTMHM . Text ) , "Continue?" ) = = DialogResult . Yes )
giveAll ( tmhm_val , 1 ) ;
2014-06-28 21:22:05 +00:00
}
private void B_DisplayMedicine_Click ( object sender , EventArgs e )
{
// Store Current Items back to the save file
saveBag ( sender ) ;
popMedicine ( ) ;
2014-11-25 03:53:10 +00:00
if ( ModifierKeys = = Keys . Alt )
2015-09-21 03:34:09 +00:00
giveAll ( medicine_val , 995 ) ;
2014-06-28 21:22:05 +00:00
}
private void B_DisplayBerries_Click ( object sender , EventArgs e )
{
// Store Current Items back to the save file
saveBag ( sender ) ;
popBerries ( ) ;
2014-11-25 03:53:10 +00:00
if ( ModifierKeys = = Keys . Alt )
2015-09-21 03:34:09 +00:00
giveAll ( berries_val , 995 ) ;
2014-06-28 21:22:05 +00:00
}
private void B_Cancel_Click ( object sender , EventArgs e )
{
Close ( ) ;
}
private void B_Save_Click ( object sender , EventArgs e )
{
saveBag ( sender ) ;
2015-09-21 03:34:09 +00:00
Array . Copy ( sav , Main . savefile , Main . savefile . Length ) ;
Main . savedited = true ;
2014-06-28 21:22:05 +00:00
Close ( ) ;
}
}
}