Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include < amxmodx >
- #include < fvault >
- enum _: SAVE_TYPE
- {
- ALL = 0, // Save all data
- CREATOR, // Save only creators data
- GENERAL, // Save only general data
- SKILLS // Save only skills data
- };
- enum _: g_mGangsData
- {
- g_mGangID,
- g_mGangName[ 32 ],
- g_mGangCreatorAuth[ 35 ],
- g_mGangCreatorName[ 32 ],
- g_mGangGlow,
- g_mGangMembers,
- g_mGangDaysWon,
- g_mGangXP,
- g_mGangLevel,
- g_mGangCash
- };
- enum _: g_mGangSkillsData
- {
- g_mGangHealthBonus,
- g_mGangHealthTimer,
- g_mGangPunchReduction,
- g_mGangDamageBonus,
- g_mGangNextCashBonus,
- g_mGangGetCashBonus,
- g_mGangKillCashBonus,
- g_mGangXPBonus,
- g_mGangCashBonus,
- g_mGangResetHP,
- g_mGangSkillMembers
- };
- enum _: g_mStatusData
- {
- g_mStatusNone = 0,
- g_mStatusMember,
- g_mStatusAdmin,
- g_mStatusLeader
- };
- enum _: g_mPlayersData
- {
- g_mPlayersGang,
- g_mPlayersStatus
- };
- new Array: g_aGangs;
- new Array: g_aSkills;
- new const szVault[ ] = "jbGangs"; // Stores gang ids
- new const szDataVault[ ] = "jbGangsData"; // Stores the gangs data
- new const szMembersVault[ ] = "jbGangsPlayers"; // Stores the gang members data
- new const szPrefix[ ] = "AMXX";
- new g_iGang[ 33 ];
- new szItem[ 128 ];
- new gIndex[ 33 ][ g_mPlayersData ];
- public plugin_init( )
- {
- register_plugin( "Jailbreak: Gangs", "1.0", "Rejack" );
- register_clcmd( "say /gang", "cmdMainMenu" );
- register_concmd( "SetGangName", "cmdSetGangName" );
- g_aGangs = ArrayCreate( g_mGangsData )
- g_aSkills = ArrayCreate( g_mGangSkillsData );
- if ( LoadGangs( ) == -1 )
- log_amx( "No gangs were loaded." );
- }
- public plugin_end( )
- {
- if ( fvault_size( szVault ) > 0 )
- {
- static i;
- static aData[ g_mGangsData ];
- for ( i = 0; i < fvault_size( szVault ); i++ )
- {
- ArrayGetArray( g_aGangs, i, aData );
- SaveGangData( aData[ g_mGangID ], ALL );
- }
- }
- ArrayDestroy( g_aGangs );
- ArrayDestroy( g_aSkills );
- }
- public cmdSetGangName( const client )
- {
- static szArgs[ 32 ];
- read_args( szArgs, charsmax( szArgs ) );
- remove_quotes( szArgs );
- CreateGang( client, szArgs, 1 );
- ColorPrint( client, "^3Rejack^1 has created a^4 new gang^1 called^3 %s^1, Beware!", szArgs );
- return 1;
- }
- public cmdMainMenu( const client )
- {
- static Menu;
- formatex( szItem, charsmax( szItem ), "\r[%s]\w Jailbreak Gangs", szPrefix );
- Menu = menu_create( szItem, "handlerMainMenu" );
- menu_additem( Menu, "Create a Gang" );
- menu_additem( Menu, "Clear vaults" );
- menu_display( client, Menu );
- return 1;
- }
- public handlerMainMenu( client, Menu, Item )
- {
- if ( Item == MENU_EXIT )
- {
- menu_destroy( Menu );
- return 1;
- }
- switch ( Item )
- {
- case 0:
- {
- client_cmd( client, "messagemode SetGangName" );
- return 1;
- }
- case 1:
- {
- fvault_clear( szVault );
- fvault_clear( szDataVault );
- fvault_clear( szMembersVault );
- }
- }
- return 1;
- }
- /* Client Side */
- public client_putinserver( client )
- {
- static g_szAuthID[ 35 ]
- static szKey[ 64 ], szData[ 8 ];
- get_user_authid( client, g_szAuthID, charsmax( g_szAuthID ) );
- if ( fvault_get_data( szMembersVault, g_szAuthID, szData, charsmax( szData ) ) ) // If authid was found in szMembersVault (has gang)
- {
- g_iGang[ client ] = str_to_num( szData ); // Set gang
- // Get status
- formatex( szKey, charsmax( szKey ), "%s-Status", g_szAuthID );
- fvault_get_data( szVault, szKey, szData, charsmax( szData ) );
- gIndex[ client ][ g_mPlayersStatus ] = str_to_num( szData );
- }
- else
- {
- g_iGang[ client ] = -1;
- gIndex[ client ][ g_mPlayersStatus ] = g_mStatusNone;
- }
- }
- /* Stocks */
- stock ColorPrint( const index, const string[], any:... )
- {
- new szMsg[ 512 ], 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;
- }
- stock SaveGangData( const iGangID, SaveType = SAVE_TYPE )
- {
- static szKey[ 64 ], szData[ 128 ];
- static aData[ g_mGangsData ];
- static iItem;
- iItem = MatchGangIDtoArray( iGangID );
- if ( SaveType != SKILLS )
- ArrayGetArray( g_aGangs, iItem, aData );
- if ( SaveType == ALL || SaveType == CREATOR )
- {
- formatex( szKey, charsmax( szKey ), "%i-Creator", iGangID );
- formatex( szData, charsmax( szData ), "%s#%s", aData[ g_mGangCreatorName ], aData[ g_mGangCreatorAuth ] );
- fvault_set_data( szDataVault, szKey, szData );
- }
- if ( SaveType == ALL || SaveType == GENERAL )
- {
- formatex( szKey, charsmax( szKey ), "%i-General", iGangID );
- formatex( szData, charsmax( szData ), "%i#%i#%i#%i#%i#%i",
- aData[ g_mGangGlow ], aData[ g_mGangMembers ],
- aData[ g_mGangDaysWon ], aData[ g_mGangXP ],
- aData[ g_mGangLevel ], aData[ g_mGangCash ]
- );
- fvault_set_data( szDataVault, szKey, szData );
- }
- if ( SaveType == ALL || SaveType == SKILLS )
- {
- static aSkills[ g_mGangSkillsData ];
- ArrayGetArray( g_aSkills, iItem, aSkills );
- static i;
- static szBuffer[ 8 ];
- formatex( szKey, charsmax( szKey ), "%i-Skills", iGangID );
- for ( i = 0; i < g_mGangSkillsData; i++ )
- {
- if ( i == 0 )
- {
- formatex( szData, charsmax( szData ), "%i#", aSkills[ i ] );
- continue;
- }
- if ( i == ( g_mGangSkillsData - 1 ) )
- formatex( szBuffer, charsmax( szBuffer ), "%i", aSkills[ i ] );
- else
- formatex( szBuffer, charsmax( szBuffer ), "%i#", aSkills[ i ] );
- add( szData, charsmax( szData ), szBuffer );
- }
- fvault_set_data( szDataVault, szKey, szData );
- }
- return 1;
- }
- stock LoadGangs( )
- {
- /*
- "NovaCorp" "1" - Gangid (in szVault)
- "1-Creator" "Name#SteamID" (in szDataVault)
- "1-General" "GlowID#Members#DaysWon#XP#Level#Cash" (in szDataVault)
- "1-Skills" "HealthBonus#HealthTimer#Punch#Damage#NextCash#GetCash#KillCash#BonusXP#BonusCash#ResetHP" (in szDataVault)
- "STEAMID" "1" - Gangid (in szMembersVault)
- "STEAMID-Status""3#Rejack" - Status leader (in szMembersVault)
- "STEAMID-Data" "Donated#DaysWon#TsKilled" (in szMembersVault)
- */
- if ( fvault_size( szVault ) < 1 )
- return -1;
- static i;
- new szKey[ 64 ], szData[ 128 ];
- new szArgs[ 11 ][ 35 ];
- static aData[ g_mGangsData ];
- static aSkills[ g_mGangSkillsData ];
- for ( i = 0; i < fvault_size( szVault ); i++ )
- {
- // Get gang id and name
- fvault_get_keyname( szVault, i, szKey, charsmax( szKey ) ); // get key name to get data (also gang name)
- fvault_get_data( szVault, szKey, szData, charsmax( szData ) );
- aData[ g_mGangID ] = str_to_num( szData );
- formatex( aData[ g_mGangName ], 31, szKey );
- // Get gang creator data (name and authid)
- formatex( szKey, charsmax( szKey ), "%i-Creator", aData[ g_mGangID ] );
- fvault_get_data( szDataVault, szKey, szData, charsmax( szData ) );
- replace_all( szData, charsmax( szData ), "#", " " );
- parse( szData, szArgs[ 0 ], 31, szArgs[ 2 ], 34 );
- formatex( aData[ g_mGangCreatorName ], 31, szArgs[ 0 ] );
- formatex( aData[ g_mGangCreatorAuth ], 34, szArgs[ 1 ] );
- // Get gang general data (glowid, members, days won, xp, level and cash)
- formatex( szKey, charsmax( szKey ), "%i-General", aData[ g_mGangID ] );
- fvault_get_data( szDataVault, szKey, szData, charsmax( szData ) );
- replace_all( szData, charsmax( szData ), "#", " " );
- parse( szData, szArgs[ 0 ], 7, szArgs[ 1 ], 7, szArgs[ 2 ], 7, szArgs[ 3 ], 15, szArgs[ 4 ], 7, szArgs[ 5 ], 15 );
- aData[ g_mGangGlow ] = str_to_num( szArgs[ 0 ] );
- aData[ g_mGangMembers ] = str_to_num( szArgs[ 1 ] );
- aData[ g_mGangDaysWon ] = str_to_num( szArgs[ 2 ] );
- aData[ g_mGangXP ] = str_to_num( szArgs[ 3 ] );
- aData[ g_mGangLevel ] = str_to_num( szArgs[ 4 ] );
- aData[ g_mGangCash ] = str_to_num( szArgs[ 5 ] );
- /*
- Get gang skills data
- * HP Regen: Amount
- * HP Regen: Intervals
- * Punch Reduction
- * Damage Bonus
- * /nextcash Bonus
- * /getcash
- * Bonus Cash: Killing
- * Bonus XP (On days, gang xp)
- * Bonus Cash (On days, gang cash)
- * Ability to reset hp (On days)
- * Upgrade Gang Members
- */
- formatex( szKey, charsmax( szKey ), "%i-Skills", aData[ g_mGangID ] );
- fvault_get_data( szDataVault, szKey, szData, charsmax( szData ) );
- replace_all( szData, charsmax( szData ), "#", " " );
- parse( szData,
- szArgs[ 0 ], 4, szArgs[ 1 ], 4, szArgs[ 2 ], 4, szArgs[ 3 ], 4, szArgs[ 4 ], 4, szArgs[ 5 ], 4,
- szArgs[ 6 ], 4, szArgs[ 7 ], 4, szArgs[ 8 ], 4, szArgs[ 9 ], 4, szArgs[ 10 ], 4
- );
- static j;
- for ( j = 0; j < g_mGangSkillsData; j++ )
- aSkills[ j ] = str_to_num( szArgs[ j ] );
- ArrayPushArray( g_aGangs, aData );
- ArrayPushArray( g_aSkills, aSkills );
- }
- return i;
- }
- stock CreateGang( const index, const szGangName[ ], const iGangGlow )
- {
- static szKey[ 64 ], szData[ 128 ];
- static aData[ g_mGangsData ];
- // Create & Set - Gang id and name
- if ( fvault_size( szVault ) < 1 )
- aData[ g_mGangID ] = 1;
- else
- {
- fvault_get_keyname( szVault, ( fvault_size( szVault ) - 1 ), szKey, charsmax( szKey ) );
- fvault_get_data( szVault, szKey, szData, charsmax( szData ) );
- aData[ g_mGangID ] = str_to_num( szData ) + 1;
- }
- formatex( szKey, charsmax( szKey ), szGangName );
- formatex( szData, charsmax( szData ), "%i", aData[ g_mGangID ] );
- fvault_set_data( szVault, szKey, szData );
- // Set the name and authid of the gangs creator
- static g_szName[ 32 ], g_szAuthid[ 35 ];
- get_user_name( index, g_szName, charsmax( g_szName ) );
- get_user_authid( index, g_szAuthid, charsmax( g_szAuthid ) );
- formatex( aData[ g_mGangCreatorName ], 31, g_szName );
- formatex( aData[ g_mGangCreatorAuth ], 35, g_szAuthid );
- // Set general data
- aData[ g_mGangGlow ] = iGangGlow;
- aData[ g_mGangMembers ] = 1;
- aData[ g_mGangDaysWon ] = 0;
- aData[ g_mGangXP ] = 0;
- aData[ g_mGangLevel ] = 1;
- aData[ g_mGangCash ] = 0;
- static i;
- static aSkills[ g_mGangSkillsData ];
- for ( i = 0; i < g_mGangSkillsData; i++ )
- aSkills[ i ] = 0;
- ArrayPushArray( g_aGangs, aData );
- ArrayPushArray( g_aSkills, aSkills );
- SaveGangData( aData[ g_mGangID ], ALL );
- AddPlayerToGang( index, aData[ g_mGangID ], g_mStatusLeader, false );
- }
- stock AddPlayerToGang( const index, const iGangID, const iStatus, bool: bSave = true )
- {
- static szKey[ 64 ], szData[ 128 ];
- static g_szName[ 32 ], g_szAuthid[ 32 ];
- get_user_name( index, g_szName, charsmax( g_szName ) );
- get_user_authid( index, g_szAuthid, charsmax( g_szAuthid ) );
- gIndex[ index ][ g_mPlayersGang ] = iGangID;
- gIndex[ index ][ g_mPlayersStatus ] = iStatus;
- formatex( szKey, charsmax( szKey ), "%s", g_szAuthid );
- formatex( szData, charsmax( szData ), "%i", iGangID );
- fvault_set_data( szMembersVault, szKey, szData );
- formatex( szKey, charsmax( szKey ), "%s-Status", g_szAuthid );
- formatex( szData, charsmax( szData ), "%i#%s", iStatus, g_szName );
- fvault_set_data( szMembersVault, szKey, szData );
- formatex( szKey, charsmax( szKey ), "%s-Data", g_szAuthid );
- szData = "0#0#0";
- fvault_set_data( szMembersVault, szKey, szData );
- static aData[ g_mGangsData ], iItem;
- iItem = MatchGangIDtoArray( iGangID );
- ArrayGetArray( g_aGangs, iItem, aData );
- aData[ g_mGangMembers ]++;
- ArraySetArray( g_aGangs, iItem, aData );
- if ( bSave )
- SaveGangData( aData[ g_mGangID ], GENERAL );
- }
- stock MatchGangIDtoArray( const iGangID ) // Returns -1 if didn't find a match
- {
- static iSize;
- iSize = fvault_size( szVault );
- if ( iSize < 1 )
- return -1;
- static i;
- static szKey[ 64 ], szData[ 128 ];
- for ( i = 0; i < iSize; i++ )
- {
- fvault_get_keyname( szVault, i, szKey, charsmax( szKey ) );
- fvault_get_data( szVault, szKey, szData, charsmax( szData ) );
- if ( iGangID == str_to_num( szData ) )
- return i;
- }
- return -1;
- }
- stock getStatus( const index )
- return gIndex[ index ][ g_mPlayersStatus ];
Advertisement
Add Comment
Please, Sign In to add comment