Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- @project_name
- Cyanide's Inventory System
- @project_author
- Cyanide
- @license
- Mozilla Public License 1.1
- @description
- This inventory system's name explains it all. This inventory system features
- a description feature, which can be used for useful purposes. There's a
- load and safe feature installed into the script.
- @functions (Scripters Only)
- countInventoryItems( clientid ) - Counts the amount of inventory items a player has.
- listInventoryItems( clientid, inv_name[ ], inv_description[ ], &inv_int, &index ) - Lists all inventory items, view forum topic for information.
- saveInventory( clientid, directory[ ] = INVENTORY_DIRECTORY ) - Saves a inventory.
- loadInventory( clientid, directory[ ] = INVENTORY_DIRECTORY ) - Laods a inventory.
- getInventoryItemDesc( clientid, itemName[ ] ) - Gets a item's description.
- checkInventoryItemQuanity( clientid, itemName[ ] ) - Checks the amount of a item a player has.
- checkInventoryItem( clientid, itemName[ ] ) - Checks if a player has a inventory item.
- addInventoryItem( clientid, itemName[ ], description[ ], amount ) - Adds a inventory item.
- removeInventoryItem( clientid, itemName[ ], amount = 0 ) - Removes a inventory item.
- resetInventory( clientid ) - Resets a player's inventory.
- onPlayerReceiveItem( playerid, itemName[ ], description[ ], amount ) - Called when a player gets item.
- onPlayerRemoveItem( playerid, itemName[ ], amount ) - Called when a player loses a item.
- onPlayerInventorySaved( playerid, directory[ ] ) - Called when a inventory is saved.
- onPlayerInventoryLoaded( playerid, directory[ ] ) - Called when a inventory is loaded.
- @commands
- @credits
- Cyanide - Project Launcher & Developer
- SA-MP Team - San Andreas Multiplayer Modification.
- */
- //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #define INVENTORY_DIRECTORY "playerInventories/%s.ini"
- //#define INVENTORY_DEBUG
- //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- forward onPlayerReceiveItem( playerid, itemName[ ], description[ ], amount );
- forward onPlayerRemoveItem( playerid, itemName[ ], amount );
- forward onPlayerInventorySaved( playerid, directory[ ] );
- forward onPlayerInventoryLoaded( playerid, directory[ ] );
- //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- static
- inv_string[ 300 ]
- ;
- //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- stock countInventoryItems( clientid )
- {
- #if defined INVENTORY_DEBUG
- printf( "countInventoryItems( %i )", clientid );
- #endif
- static
- s_index[ 3 ]
- ;
- s_index[ 0 ] = GetPVarsUpperIndex( clientid );
- while( s_index[ 1 ] < s_index[ 0 ] )
- {
- GetPVarNameAtIndex( clientid, s_index[ 1 ], inv_string, sizeof inv_string );
- if( ( strfind( inv_string, "inv_", true ) != -1 ) && ( strfind( inv_string, "d_", true ) == -1 ) )
- {
- s_index[ 2 ] ++;
- }
- s_index[ 1 ] ++;
- }
- return s_index[ 2 ];
- }
- stock listInventoryItems( clientid, inv_name[ ], inv_description[ ], &inv_int, &index )
- {
- #if defined INVENTORY_DEBUG
- printf( "listInventoryItems( %i, %s, %s, %i, %i )", clientid, inv_name, inv_description, inv_int, index );
- #endif
- if( !countInventoryItems( clientid ) )
- return false;
- static
- s_index[ 2 ]
- ;
- s_index[ 0 ] = GetPVarsUpperIndex( clientid );
- s_index[ 1 ] = index;
- while( s_index[ 1 ] < s_index[ 0 ] )
- {
- GetPVarNameAtIndex( clientid, s_index[ 1 ], inv_string, sizeof inv_string );
- if( ( strfind( inv_string, "inv_", true ) != -1 ) && ( strfind( inv_string, "d_", true ) == -1 ) )
- {
- inv_name[ 0 ] = EOS, inv_description[ 0 ] = EOS;
- sscanf( inv_string, "p<_>{s[100]}s[30]", inv_string );
- strcat( inv_name, inv_string, 30 );
- strcat( inv_description, getInventoryItemDesc( clientid, inv_name ), 100 );
- inv_int = checkInventoryItemQuanity( clientid, inv_name );
- index ++;
- return true;
- }
- s_index[ 1 ] ++;
- }
- return false;
- }
- stock saveInventory( clientid, directory[ ] = INVENTORY_DIRECTORY )
- {
- #if defined INVENTORY_DEBUG
- printf( "saveInventory( %i, %s )", clientid, directory );
- #endif
- static
- File:s_file,
- s_inv[ 3 ][ 100 ],
- s_inv_int,
- s_index[ 2 ]
- ;
- GetPlayerName( clientid, inv_string, 24 );
- format( inv_string, sizeof inv_string, directory, inv_string );
- s_index[ 0 ] = GetPVarsUpperIndex( clientid );
- s_file = fopen( inv_string, io_write );
- while( s_index[ 1 ] < s_index[ 0 ] )
- {
- GetPVarNameAtIndex( clientid, s_index[ 1 ], inv_string, sizeof inv_string );
- if( ( strfind( inv_string, "inv_", true ) != -1 ) && ( strfind( inv_string, "d_", true ) == -1 ) )
- {
- sscanf( inv_string, "p<_>{s[100]}s[30]", s_inv[ 2 ] );
- format( s_inv[ 0 ], 100, s_inv[ 2 ] );
- format( s_inv[ 1 ], 100, getInventoryItemDesc( clientid, s_inv[ 2 ] ) );
- s_inv_int = checkInventoryItemQuanity( clientid, s_inv[ 2 ] );
- format( inv_string, sizeof inv_string, "%s|%s|%i\r\n", s_inv[ 0 ], s_inv[ 1 ], s_inv_int );
- fwrite( s_file, inv_string );
- }
- s_index[ 1 ] ++;
- }
- fclose( s_file );
- CallRemoteFunction( "onPlayerInventorySaved", "is", clientid, directory );
- }
- stock loadInventory( clientid, directory[ ] = INVENTORY_DIRECTORY )
- {
- #if defined INVENTORY_DEBUG
- printf( "loadInventory( %i, %s )", clientid, directory );
- #endif
- static
- File:s_file,
- s_load[ 2 ][ 100 ],
- s_loadint
- ;
- GetPlayerName( clientid, inv_string, 24 );
- format( inv_string, sizeof inv_string, directory, inv_string );
- s_file = fopen( inv_string, io_read );
- while( fread( s_file, inv_string ) )
- {
- sscanf( inv_string, "p<|>s[30]s[100]i", s_load[ 0 ], s_load[ 1 ], s_loadint );
- addInventoryItem( clientid, s_load[ 0 ], s_load[ 1 ], s_loadint );
- }
- fclose( s_file );
- CallRemoteFunction( "onPlayerInventoryLoaded", "is", clientid, directory );
- return true;
- }
- stock getInventoryItemDesc( clientid, itemName[ ] )
- {
- #if defined INVENTORY_DEBUG
- printf( "getInventoryItemDesc( %i, %s )", clientid, itemName );
- #endif
- new
- returnString[ 100 ]
- ;
- if( !checkInventoryItem( clientid, itemName ) )
- return returnString;
- format( inv_string, sizeof inv_string, "d_inv_%s", itemName );
- GetPVarString( clientid, inv_string, returnString, sizeof returnString );
- return returnString;
- }
- stock checkInventoryItemQuanity( clientid, itemName[ ] )
- {
- #if defined INVENTORY_DEBUG
- printf( "checkInventoryItemQuanity( %i, %s )", clientid, itemName );
- #endif
- if( !checkInventoryItem( clientid, itemName ) )
- return false;
- format( inv_string, sizeof inv_string, "inv_%s", itemName );
- return GetPVarInt( clientid, inv_string );
- }
- stock checkInventoryItem( clientid, itemName[ ] )
- {
- #if defined INVENTORY_DEBUG
- printf( "checkInventoryItem( %i, %s )", clientid, itemName );
- #endif
- format( inv_string, sizeof inv_string, "inv_%s", itemName );
- if( GetPVarType( clientid, inv_string ) != PLAYER_VARTYPE_NONE )
- return true;
- return false;
- }
- stock addInventoryItem( clientid, itemName[ ], description[ ], amount )
- {
- #if defined INVENTORY_DEBUG
- printf( "addInventoryItem( %i, %s, %s, %i )", clientid, itemName, description, amount );
- #endif
- format( inv_string, sizeof inv_string, "inv_%s", itemName );
- if( GetPVarType( clientid, inv_string ) == PLAYER_VARTYPE_INT )
- SetPVarInt( clientid, inv_string, GetPVarInt( clientid, inv_string ) + amount );
- else
- SetPVarInt( clientid, inv_string, amount );
- format( inv_string, sizeof inv_string, "d_inv_%s", itemName );
- SetPVarString( clientid, inv_string, description );
- CallRemoteFunction( "onPlayerReceiveItem", "issi", clientid, itemName, description, amount );
- return true;
- }
- stock removeInventoryItem( clientid, itemName[ ], amount = 0 )
- {
- #if defined INVENTORY_DEBUG
- printf( "removeInventoryItem( %i, %s, %s, %i )", clientid, itemName, amount );
- #endif
- format( inv_string, sizeof inv_string, "inv_%s", itemName );
- if( GetPVarType( clientid, inv_string ) == PLAYER_VARTYPE_INT )
- return false;
- if( !amount || ( GetPVarInt( clientid, inv_string ) - amount <= 0 ) )
- {
- DeletePVar( clientid, inv_string );
- format( inv_string, sizeof inv_string, "d_inv_%s", itemName );
- DeletePVar( clientid, inv_string );
- }
- else
- SetPVarInt( clientid, inv_string, GetPVarInt( clientid, inv_string ) - amount );
- CallRemoteFunction( "onPlayerRemoveItem", "isi", clientid, itemName, amount );
- return true;
- }
- stock resetInventory( clientid )
- {
- #if defined INVENTORY_DEBUG
- printf( "resetInventory( %i )", clientid );
- #endif
- static
- s_index[ 2 ]
- ;
- s_index[ 0 ] = GetPVarsUpperIndex( clientid );
- while( s_index[ 1 ] < s_index[ 0 ] )
- {
- GetPVarNameAtIndex( clientid, s_index[ 1 ], inv_string, sizeof inv_string );
- print( inv_string );
- if( strfind( inv_string, "inv_", false ) != -1 )
- DeletePVar( clientid, inv_string );
- s_index[ 1 ] ++;
- }
- return true;
- }
Add Comment
Please, Sign In to add comment