Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include < amxmodx >
- #include < amxmisc >
- #include < fakemeta >
- #define MODEL "models/player/assassin/assassin.mdl" // Model
- #define DISTANCE 200 // In units
- native get_user_cash( client );
- native set_user_cash( client, cash );
- native get_user_bank( client );
- native set_user_bank( client, cash );
- new const szPrefix[ ] = "AMXX";
- new szItem[ 128 ], szFile[ 256 ], entNPC, bool: bInMenu[ 33 ], bool: bMadeNPC, Float: fNPCOrigin[ 3 ];
- public plugin_init()
- {
- register_plugin( "NPC Bank", "1.0", "Rejack" );
- /* Loading NPC */
- static szConfigsFolder[ 32 ];
- get_mapname( szFile, charsmax( szFile ) );
- get_configsdir( szConfigsFolder, charsmax( szConfigsFolder ) );
- format( szFile, charsmax( szFile ), "%s/NPC/%s.coord", szConfigsFolder, szFile );
- set_task( 3.5, "taskLoadNPC" );
- /* Forwards */
- register_forward( FM_Touch, "FwdTouch" );
- /* Events */
- register_event( "ResetHUD", "evResetHUD", "be" );
- /* Commands */
- register_concmd( "create_npc", "CmdCreateNPC", ADMIN_RCON, "- Create a Banker NPC" );
- register_concmd( "client_deposit", "CmdDeposit" );
- register_concmd( "client_withdraw", "CmdWithdraw" );
- }
- public plugin_precache()
- precache_model( MODEL );
- public client_putinserver( client )
- bInMenu[ client ] = false;
- public evResetHUD( client )
- bInMenu[ client ] = false;
- public taskLoadNPC()
- CmdCreateNPC( 0 );
- public FwdTouch( ent, client )
- {
- if ( !is_user_alive( client ) )
- return 1;
- new szClass[ 32 ];
- pev( ent, pev_classname, szClass, charsmax( szClass ) );
- if ( equali( szClass, "banker" ) && !bInMenu[ client ] )
- return CmdBankMenu( client );
- return 1;
- }
- public CmdBankMenu( client )
- {
- if ( !is_distance( client ) )
- return ColorPrint( client, "You're too far from the^3 NPC Banker^1." );
- bInMenu[ client ] = true;
- formatex( szItem, charsmax( szItem ), "\r%s \d|\y NPC Banker", szPrefix );
- new Menu = menu_create( szItem, "SubBankMenu" );
- menu_additem( Menu, "\yDeposit\d cash into your bank account^n" );
- menu_additem( Menu, "\rWithdraw\d cash from your bank account^n^n" );
- formatex( szItem, charsmax( szItem ), "\dYou have\r %i Cash^n\dYou have\r %i Cash\d in the bank^nYou have a total of\r %i Cash",
- get_user_cash( client ), get_user_bank( client ), get_user_cash( client ) + get_user_bank( client ) );
- menu_addtext( Menu, szItem, 0 );
- menu_display( client, Menu );
- return 1;
- }
- public SubBankMenu( client, Menu, Item )
- {
- bInMenu[ client ] = false;
- if ( Item == MENU_EXIT )
- {
- menu_destroy( Menu );
- return 1;
- }
- if ( !is_distance( client ) )
- return ColorPrint( client, "You're too far from the^3 NPC Banker^1." );
- switch ( Item )
- {
- case 0:
- client_cmd( client, "messagemode client_deposit" );
- case 1:
- client_cmd( client, "messagemode client_withdraw" );
- }
- menu_destroy( Menu );
- return 1;
- }
- public CmdDeposit( client )
- {
- if ( !is_distance( client ) )
- return ColorPrint( client, "You're too far from the^3 NPC Banker^1." );
- static szArgs[ 128 ], Amount;
- read_args( szArgs, charsmax( szArgs ) );
- remove_quotes( szArgs );
- Amount = str_to_num( szArgs );
- if ( !is_str_num( szArgs ) )
- {
- client_cmd( client, "messagemode client_deposit" );
- return ColorPrint( client, "Please use valid numbers." );
- }
- if ( Amount > get_user_cash( client ) )
- {
- client_cmd( client, "messagemode client_deposit" );
- return ColorPrint( client, "You don't have this amount of cash." );
- }
- set_user_bank( client, get_user_bank( client ) + Amount );
- set_user_cash( client, get_user_cash( client ) - Amount );
- ColorPrint( client, "You made a^3 deposit^1 of^4 %i^1 cash to the bank.", Amount );
- return CmdBankMenu( client );
- }
- public CmdWithdraw( client )
- {
- if ( !is_distance( client ) )
- return ColorPrint( client, "You're too far from the^3 NPC Banker^1." );
- static szArgs[ 128 ], Amount;
- read_args( szArgs, charsmax( szArgs ) );
- remove_quotes( szArgs );
- Amount = str_to_num( szArgs );
- if ( !is_str_num( szArgs ) )
- {
- client_cmd( client, "messagemode client_withdraw" );
- return ColorPrint( client, "Please use valid numbers." );
- }
- if ( Amount > get_user_bank( client ) )
- {
- client_cmd( client, "messagemode client_withdraw" );
- return ColorPrint( client, "You don't have this amount of cash in the bank." );
- }
- set_user_bank( client, get_user_bank( client ) - Amount );
- set_user_cash( client, get_user_cash( client ) + Amount );
- ColorPrint( client, "You made a^3 withdraw^1 of^4 %i^1 cash from the bank.", Amount );
- return CmdBankMenu( client );
- }
- public CmdCreateNPC( client )
- {
- if ( bMadeNPC && pev_valid( entNPC ) )
- engfunc( EngFunc_RemoveEntity, entNPC );
- bMadeNPC = true;
- static Float: iOrigin[ 3 ], Float: fAngles[ 3 ];
- if ( client > 0 )
- {
- pev( client, pev_origin, iOrigin );
- pev( client, pev_angles, fAngles );
- }
- else
- {
- static File;
- File = fopen( szFile, "r" );
- if ( File ) /* File Exists */
- {
- static szData[ 128 ], i; i = 0;
- while ( !feof( File ) )
- {
- fgets( File, szData, charsmax( szData ) );
- if ( i < 3 ) // 1 - 3 = Origin
- iOrigin[ i ] = str_to_float( szData );
- else if ( i > 2 )
- fAngles[ i - 3 ] = str_to_float( szData );
- i++;
- }
- fclose( File );
- }
- else /* File was not found */
- {
- log_amx( "Error: Could not create an NPC Banker." );
- log_amx( "Error: The file ^"%s^" was not found!", szFile );
- return 1;
- }
- }
- /* Creating the NPC ent */
- entNPC = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );
- engfunc( EngFunc_SetModel, entNPC, MODEL );
- engfunc( EngFunc_SetSize, entNPC, Float: { -17.0, -17.0, -36.0 }, Float: { 17.0, 17.0, 36.0 } );
- fAngles[ 0 ] = 0.0;
- set_pev( entNPC, pev_angles, fAngles );
- engfunc( EngFunc_SetOrigin, entNPC, iOrigin );
- if ( client > 0 )
- {
- iOrigin[ 2 ] += 80;
- engfunc( EngFunc_SetOrigin, client, iOrigin );
- }
- set_pev( entNPC, pev_solid, SOLID_BBOX );
- set_pev( entNPC, pev_classname, "banker" );
- /* Setting Default Animation */
- set_pev( entNPC, pev_animtime, 2.0 );
- set_pev( entNPC, pev_framerate, 1.0 );
- set_pev( entNPC, pev_sequence, 1 );
- /* Setting bones positions */
- set_pev( entNPC, pev_controller_0, 125 );
- set_pev( entNPC, pev_controller_1, 125 );
- set_pev( entNPC, pev_controller_2, 125 );
- set_pev( entNPC, pev_controller_3, 125 );
- /* Setting damage and HP */
- set_pev( entNPC, pev_takedamage, 0.0 );
- /* Drop NPC to the ground */
- engfunc( EngFunc_DropToFloor, entNPC );
- /* Save the NPC to the file */
- if ( client > 0 )
- {
- static File;
- File = fopen( szFile, "w+" );
- if ( File )
- {
- fprintf( File, "%f^n%f^n%f^n%f^n%f^n%f", iOrigin[ 0 ], iOrigin[ 1 ], iOrigin[ 2 ], fAngles[ 0 ], fAngles[ 1 ], fAngles[ 2 ] );
- fclose( File );
- ColorPrint( client, "You successfuly created an^3 NPC Banker^1." );
- }
- }
- fNPCOrigin = iOrigin;
- return FMRES_HANDLED;
- }
- /* Stocks */
- stock bool: is_distance( const client )
- {
- static Float: iOrigin[ 3 ];
- pev( client, pev_origin, iOrigin );
- if ( get_distance_f( iOrigin, fNPCOrigin ) <= DISTANCE )
- return true;
- return false;
- }
- stock ColorPrint( const index, const string[], any:... )
- {
- new szMsg[ 191 ], Players[ 32 ], PNum = 1;
- static iLen; iLen = formatex( szMsg, charsmax( szMsg ), "^4[%s]^1 ", szPrefix );
- vformat( szMsg[ iLen ], charsmax( szMsg ) - iLen, string, 3 );
- if ( index )
- Players[ 0 ] = index;
- else
- get_players( Players, PNum, "ch" );
- for ( new i; i < PNum; i++ )
- {
- if( is_user_connected( Players[ i ] ) )
- {
- message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, Players[ i ] );
- write_byte( Players[ i ] );
- write_string( szMsg );
- message_end( );
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment