Rejack

jbGangs

Jan 30th, 2017 (edited)
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.34 KB | None | 0 0
  1. #include < amxmodx >
  2. #include < fvault >
  3.  
  4. enum _: SAVE_TYPE
  5. {
  6.     ALL = 0,    // Save all data
  7.     CREATOR,    // Save only creators data
  8.     GENERAL,    // Save only general data
  9.     SKILLS      // Save only skills data
  10. };
  11.  
  12. enum _: g_mGangsData
  13. {
  14.     g_mGangID,
  15.     g_mGangName[ 32 ],
  16.     g_mGangCreatorAuth[ 35 ],
  17.     g_mGangCreatorName[ 32 ],
  18.     g_mGangGlow,
  19.     g_mGangMembers,
  20.     g_mGangDaysWon,
  21.     g_mGangXP,
  22.     g_mGangLevel,
  23.     g_mGangCash
  24. };
  25.  
  26. enum _: g_mGangSkillsData
  27. {
  28.     g_mGangHealthBonus,
  29.     g_mGangHealthTimer,
  30.     g_mGangPunchReduction,
  31.     g_mGangDamageBonus,
  32.     g_mGangNextCashBonus,
  33.     g_mGangGetCashBonus,
  34.     g_mGangKillCashBonus,
  35.     g_mGangXPBonus,
  36.     g_mGangCashBonus,
  37.     g_mGangResetHP,
  38.     g_mGangSkillMembers
  39. };
  40.  
  41. enum _: g_mStatusData
  42. {
  43.     g_mStatusNone   = 0,
  44.     g_mStatusMember,
  45.     g_mStatusAdmin,
  46.     g_mStatusLeader
  47. };
  48.  
  49. enum _: g_mPlayersData
  50. {
  51.     g_mPlayersGang,
  52.     g_mPlayersStatus
  53. };
  54.    
  55.  
  56. new Array: g_aGangs;
  57. new Array: g_aSkills;
  58.  
  59. new const szVault[ ]        = "jbGangs";        // Stores gang ids
  60. new const szDataVault[ ]        = "jbGangsData";    // Stores the gangs data
  61. new const szMembersVault[ ] = "jbGangsPlayers"; // Stores the gang members data
  62.  
  63. new const szPrefix[ ]   = "AMXX";
  64.  
  65.  
  66. new g_iGang[ 33 ];
  67. new szItem[ 128 ];
  68. new gIndex[ 33 ][ g_mPlayersData ];
  69.  
  70. public plugin_init( )
  71. {
  72.     register_plugin( "Jailbreak: Gangs", "1.0", "Rejack" );
  73.    
  74.     register_clcmd( "say /gang",    "cmdMainMenu" );
  75.    
  76.     register_concmd( "SetGangName", "cmdSetGangName" );
  77.    
  78.     g_aGangs    = ArrayCreate( g_mGangsData )
  79.     g_aSkills   = ArrayCreate( g_mGangSkillsData );
  80.    
  81.     if ( LoadGangs( ) == -1 )
  82.         log_amx( "No gangs were loaded." );
  83. }
  84.  
  85. public plugin_end( )
  86. {
  87.     if ( fvault_size( szVault ) > 0 )
  88.     {
  89.         static i;
  90.         static aData[ g_mGangsData ];
  91.        
  92.         for ( i = 0; i < fvault_size( szVault ); i++ )
  93.         {
  94.             ArrayGetArray( g_aGangs, i, aData );
  95.            
  96.             SaveGangData( aData[ g_mGangID ], ALL );
  97.         }
  98.     }
  99.    
  100.     ArrayDestroy( g_aGangs );
  101.     ArrayDestroy( g_aSkills );
  102. }
  103.  
  104. public cmdSetGangName( const client )
  105. {
  106.     static szArgs[ 32 ];
  107.    
  108.     read_args( szArgs, charsmax( szArgs ) );
  109.    
  110.     remove_quotes( szArgs );
  111.    
  112.     CreateGang( client, szArgs, 1 );
  113.    
  114.     ColorPrint( client, "^3Rejack^1 has created a^4 new gang^1 called^3 %s^1, Beware!", szArgs );
  115.    
  116.     return 1;
  117. }
  118.  
  119. public cmdMainMenu( const client )
  120. {
  121.     static Menu;
  122.    
  123.     formatex( szItem, charsmax( szItem ), "\r[%s]\w Jailbreak Gangs", szPrefix );
  124.    
  125.     Menu    = menu_create( szItem, "handlerMainMenu" );
  126.    
  127.     menu_additem( Menu, "Create a Gang" );
  128.    
  129.     menu_additem( Menu, "Clear vaults" );
  130.    
  131.     menu_display( client, Menu );
  132.    
  133.     return 1;
  134. }
  135.  
  136. public handlerMainMenu( client, Menu, Item )
  137. {
  138.     if ( Item == MENU_EXIT )
  139.     {
  140.         menu_destroy( Menu );
  141.        
  142.         return 1;
  143.     }
  144.    
  145.     switch ( Item )
  146.     {
  147.         case 0:
  148.         {
  149.             client_cmd( client, "messagemode SetGangName" );
  150.            
  151.             return 1;
  152.         }
  153.        
  154.         case 1:
  155.         {
  156.             fvault_clear( szVault );
  157.             fvault_clear( szDataVault );
  158.             fvault_clear( szMembersVault );
  159.         }
  160.     }
  161.    
  162.     return 1;
  163. }
  164.  
  165. /* Client Side */
  166.  
  167. public client_putinserver( client )
  168. {
  169.     static g_szAuthID[ 35 ]
  170.     static szKey[ 64 ], szData[ 8 ];
  171.    
  172.     get_user_authid( client, g_szAuthID, charsmax( g_szAuthID ) );
  173.    
  174.     if ( fvault_get_data( szMembersVault, g_szAuthID, szData, charsmax( szData ) ) )    // If authid was found in szMembersVault (has gang)
  175.     {
  176.         g_iGang[ client ]   = str_to_num( szData ); // Set gang
  177.        
  178.         // Get status
  179.         formatex( szKey, charsmax( szKey ), "%s-Status", g_szAuthID );
  180.        
  181.         fvault_get_data( szVault, szKey, szData, charsmax( szData ) );
  182.        
  183.         gIndex[ client ][ g_mPlayersStatus ]    = str_to_num( szData );
  184.     }
  185.    
  186.     else
  187.     {
  188.         g_iGang[ client ]   = -1;
  189.        
  190.         gIndex[ client ][ g_mPlayersStatus ]    = g_mStatusNone;
  191.     }
  192. }
  193.  
  194. /* Stocks */
  195.  
  196. stock ColorPrint( const index, const string[], any:... )
  197. {
  198.     new szMsg[ 512 ], Players[ 32 ], PNum = 1;
  199.    
  200.     static iLen; iLen = formatex( szMsg, charsmax( szMsg ), "^4[%s]^1 ", szPrefix );
  201.    
  202.     vformat( szMsg[ iLen ], charsmax( szMsg ) - iLen, string, 3 );
  203.    
  204.     if ( index )
  205.         Players[ 0 ] = index;
  206.    
  207.     else
  208.         get_players( Players, PNum, "ch" );
  209.    
  210.     for ( new i; i < PNum; i++ )
  211.     {
  212.         if( is_user_connected( Players[ i ] ) )
  213.         {
  214.             message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, Players[ i ] );
  215.            
  216.             write_byte( Players[ i ] );
  217.            
  218.             write_string( szMsg );
  219.            
  220.             message_end( );
  221.         }
  222.     }
  223.    
  224.     return 1;
  225. }
  226.  
  227. stock SaveGangData( const iGangID, SaveType = SAVE_TYPE )
  228. {
  229.     static szKey[ 64 ], szData[ 128 ];
  230.     static aData[ g_mGangsData ];
  231.     static iItem;
  232.    
  233.     iItem   = MatchGangIDtoArray( iGangID );
  234.    
  235.     if ( SaveType != SKILLS )
  236.         ArrayGetArray( g_aGangs, iItem, aData );
  237.    
  238.     if ( SaveType == ALL || SaveType == CREATOR )
  239.     {
  240.         formatex( szKey, charsmax( szKey ), "%i-Creator", iGangID );
  241.        
  242.         formatex( szData, charsmax( szData ), "%s#%s", aData[ g_mGangCreatorName ], aData[ g_mGangCreatorAuth ] );
  243.        
  244.         fvault_set_data( szDataVault, szKey, szData );
  245.     }
  246.    
  247.     if ( SaveType == ALL || SaveType == GENERAL )
  248.     {
  249.         formatex( szKey, charsmax( szKey ), "%i-General", iGangID );
  250.        
  251.         formatex( szData, charsmax( szData ), "%i#%i#%i#%i#%i#%i",
  252.             aData[ g_mGangGlow ],       aData[ g_mGangMembers ],
  253.             aData[ g_mGangDaysWon ],    aData[ g_mGangXP ],
  254.             aData[ g_mGangLevel ],      aData[ g_mGangCash ]
  255.         );
  256.        
  257.         fvault_set_data( szDataVault, szKey, szData );
  258.     }
  259.    
  260.     if ( SaveType == ALL || SaveType == SKILLS )
  261.     {
  262.         static aSkills[ g_mGangSkillsData ];
  263.        
  264.         ArrayGetArray( g_aSkills, iItem, aSkills );
  265.        
  266.         static i;
  267.         static szBuffer[ 8 ];
  268.        
  269.         formatex( szKey, charsmax( szKey ), "%i-Skills", iGangID );
  270.        
  271.         for ( i = 0; i < g_mGangSkillsData; i++ )
  272.         {
  273.             if ( i == 0 )
  274.             {
  275.                 formatex( szData, charsmax( szData ), "%i#", aSkills[ i ] );
  276.                
  277.                 continue;
  278.             }
  279.            
  280.             if ( i == ( g_mGangSkillsData - 1 ) )
  281.                 formatex( szBuffer, charsmax( szBuffer ), "%i", aSkills[ i ] );
  282.            
  283.             else
  284.                 formatex( szBuffer, charsmax( szBuffer ), "%i#", aSkills[ i ] );
  285.            
  286.             add( szData, charsmax( szData ), szBuffer );
  287.         }
  288.        
  289.         fvault_set_data( szDataVault, szKey, szData );
  290.     }
  291.    
  292.     return 1;
  293. }
  294.  
  295. stock LoadGangs( )
  296. {
  297.     /*
  298.     "NovaCorp"  "1" - Gangid                                            (in szVault)
  299.    
  300.     "1-Creator" "Name#SteamID"                                          (in szDataVault)
  301.     "1-General" "GlowID#Members#DaysWon#XP#Level#Cash"                              (in szDataVault)
  302.     "1-Skills"  "HealthBonus#HealthTimer#Punch#Damage#NextCash#GetCash#KillCash#BonusXP#BonusCash#ResetHP"  (in szDataVault)
  303.    
  304.     "STEAMID"   "1" - Gangid                                            (in szMembersVault)
  305.     "STEAMID-Status""3#Rejack" - Status leader                                  (in szMembersVault)
  306.     "STEAMID-Data"  "Donated#DaysWon#TsKilled"                                  (in szMembersVault)
  307.     */
  308.     if ( fvault_size( szVault ) < 1 )
  309.         return -1;
  310.    
  311.     static i;
  312.     new szKey[ 64 ], szData[ 128 ];
  313.     new szArgs[ 11 ][ 35 ];
  314.    
  315.     static aData[ g_mGangsData ];
  316.     static aSkills[ g_mGangSkillsData ];
  317.    
  318.     for ( i = 0; i < fvault_size( szVault ); i++ )
  319.     {
  320.         // Get gang id and name
  321.         fvault_get_keyname( szVault, i, szKey, charsmax( szKey ) ); // get key name to get data (also gang name)
  322.        
  323.         fvault_get_data( szVault, szKey, szData, charsmax( szData ) );
  324.        
  325.         aData[ g_mGangID ]  = str_to_num( szData );
  326.        
  327.         formatex( aData[ g_mGangName ], 31, szKey );
  328.        
  329.         // Get gang creator data (name and authid)
  330.         formatex( szKey, charsmax( szKey ), "%i-Creator", aData[ g_mGangID ] );
  331.        
  332.         fvault_get_data( szDataVault, szKey, szData, charsmax( szData ) );
  333.        
  334.         replace_all( szData, charsmax( szData ), "#", " " );
  335.        
  336.         parse( szData, szArgs[ 0 ], 31, szArgs[ 2 ], 34 );
  337.        
  338.         formatex( aData[ g_mGangCreatorName ], 31, szArgs[ 0 ] );
  339.        
  340.         formatex( aData[ g_mGangCreatorAuth ], 34, szArgs[ 1 ] );
  341.        
  342.         // Get gang general data (glowid, members, days won, xp, level and cash)
  343.         formatex( szKey, charsmax( szKey ), "%i-General", aData[ g_mGangID ] );
  344.        
  345.         fvault_get_data( szDataVault, szKey, szData, charsmax( szData ) );
  346.        
  347.         replace_all( szData, charsmax( szData ), "#", " " );
  348.        
  349.         parse( szData, szArgs[ 0 ], 7, szArgs[ 1 ], 7, szArgs[ 2 ], 7, szArgs[ 3 ], 15, szArgs[ 4 ], 7, szArgs[ 5 ], 15 );
  350.        
  351.         aData[ g_mGangGlow ]    = str_to_num( szArgs[ 0 ] );
  352.         aData[ g_mGangMembers ] = str_to_num( szArgs[ 1 ] );
  353.         aData[ g_mGangDaysWon ] = str_to_num( szArgs[ 2 ] );
  354.         aData[ g_mGangXP ]  = str_to_num( szArgs[ 3 ] );
  355.         aData[ g_mGangLevel ]   = str_to_num( szArgs[ 4 ] );
  356.         aData[ g_mGangCash ]    = str_to_num( szArgs[ 5 ] );
  357.        
  358.         /*
  359.             Get gang skills data
  360.             * HP Regen: Amount
  361.             * HP Regen: Intervals
  362.             * Punch Reduction
  363.             * Damage Bonus
  364.             * /nextcash Bonus
  365.             * /getcash
  366.             * Bonus Cash: Killing
  367.             * Bonus XP (On days, gang xp)
  368.             * Bonus Cash (On days, gang cash)
  369.             * Ability to reset hp (On days)
  370.             * Upgrade Gang Members
  371.         */
  372.            
  373.         formatex( szKey, charsmax( szKey ), "%i-Skills", aData[ g_mGangID ] );
  374.        
  375.         fvault_get_data( szDataVault, szKey, szData, charsmax( szData ) );
  376.        
  377.         replace_all( szData, charsmax( szData ), "#", " " );
  378.        
  379.         parse( szData,
  380.             szArgs[ 0 ], 4, szArgs[ 1 ], 4, szArgs[ 2 ], 4, szArgs[ 3 ], 4, szArgs[ 4 ], 4, szArgs[ 5 ], 4,
  381.             szArgs[ 6 ], 4, szArgs[ 7 ], 4, szArgs[ 8 ], 4, szArgs[ 9 ], 4, szArgs[ 10 ], 4
  382.         );
  383.        
  384.         static j;
  385.        
  386.         for ( j = 0; j < g_mGangSkillsData; j++ )
  387.             aSkills[ j ]    = str_to_num( szArgs[ j ] );
  388.        
  389.         ArrayPushArray( g_aGangs, aData );
  390.        
  391.         ArrayPushArray( g_aSkills, aSkills );
  392.     }
  393.    
  394.     return i;
  395. }
  396.  
  397. stock CreateGang( const index, const szGangName[ ], const iGangGlow )
  398. {
  399.     static szKey[ 64 ], szData[ 128 ];
  400.     static aData[ g_mGangsData ];
  401.    
  402.     // Create & Set - Gang id and name
  403.     if ( fvault_size( szVault ) < 1 )
  404.         aData[ g_mGangID ]  = 1;
  405.    
  406.     else
  407.     {
  408.         fvault_get_keyname( szVault, ( fvault_size( szVault ) - 1 ), szKey, charsmax( szKey ) );
  409.        
  410.         fvault_get_data( szVault, szKey, szData, charsmax( szData ) );
  411.        
  412.         aData[ g_mGangID ]  = str_to_num( szData ) + 1;
  413.     }
  414.    
  415.     formatex( szKey, charsmax( szKey ), szGangName );
  416.    
  417.     formatex( szData, charsmax( szData ), "%i", aData[ g_mGangID ] );
  418.    
  419.     fvault_set_data( szVault, szKey, szData );
  420.    
  421.     // Set the name and authid of the gangs creator
  422.     static g_szName[ 32 ], g_szAuthid[ 35 ];
  423.    
  424.     get_user_name( index, g_szName, charsmax( g_szName ) );
  425.    
  426.     get_user_authid( index, g_szAuthid, charsmax( g_szAuthid ) );
  427.    
  428.     formatex( aData[ g_mGangCreatorName ], 31, g_szName );
  429.    
  430.     formatex( aData[ g_mGangCreatorAuth ], 35, g_szAuthid );
  431.    
  432.     // Set general data
  433.     aData[ g_mGangGlow ]    = iGangGlow;
  434.     aData[ g_mGangMembers ] = 1;
  435.     aData[ g_mGangDaysWon ] = 0;
  436.     aData[ g_mGangXP ]  = 0;
  437.     aData[ g_mGangLevel ]   = 1;
  438.     aData[ g_mGangCash ]    = 0;
  439.    
  440.     static i;
  441.     static aSkills[ g_mGangSkillsData ];
  442.    
  443.     for ( i = 0; i < g_mGangSkillsData; i++ )
  444.         aSkills[ i ]    = 0;
  445.    
  446.     ArrayPushArray( g_aGangs, aData );
  447.     ArrayPushArray( g_aSkills, aSkills );
  448.    
  449.     SaveGangData( aData[ g_mGangID ], ALL );
  450.    
  451.     AddPlayerToGang( index, aData[ g_mGangID ], g_mStatusLeader, false );
  452. }
  453.  
  454. stock AddPlayerToGang( const index, const iGangID, const iStatus, bool: bSave = true )
  455. {
  456.     static szKey[ 64 ], szData[ 128 ];
  457.     static g_szName[ 32 ], g_szAuthid[ 32 ];
  458.    
  459.     get_user_name( index, g_szName, charsmax( g_szName ) );
  460.    
  461.     get_user_authid( index, g_szAuthid, charsmax( g_szAuthid ) );
  462.    
  463.     gIndex[ index ][ g_mPlayersGang ]   = iGangID;
  464.     gIndex[ index ][ g_mPlayersStatus ] = iStatus;
  465.    
  466.     formatex( szKey, charsmax( szKey ), "%s", g_szAuthid );
  467.    
  468.     formatex( szData, charsmax( szData ), "%i", iGangID );
  469.    
  470.     fvault_set_data( szMembersVault, szKey, szData );
  471.    
  472.     formatex( szKey, charsmax( szKey ), "%s-Status", g_szAuthid );
  473.    
  474.     formatex( szData, charsmax( szData ), "%i#%s", iStatus, g_szName );
  475.    
  476.     fvault_set_data( szMembersVault, szKey, szData );
  477.    
  478.     formatex( szKey, charsmax( szKey ), "%s-Data", g_szAuthid );
  479.    
  480.     szData  = "0#0#0";
  481.    
  482.     fvault_set_data( szMembersVault, szKey, szData );
  483.    
  484.     static aData[ g_mGangsData ], iItem;
  485.    
  486.     iItem   = MatchGangIDtoArray( iGangID );
  487.    
  488.     ArrayGetArray( g_aGangs, iItem, aData );
  489.    
  490.     aData[ g_mGangMembers ]++;
  491.    
  492.     ArraySetArray( g_aGangs, iItem, aData );
  493.    
  494.     if ( bSave )
  495.         SaveGangData( aData[ g_mGangID ], GENERAL );
  496. }
  497.  
  498. stock MatchGangIDtoArray( const iGangID )   // Returns -1 if didn't find a match
  499. {
  500.     static iSize;
  501.    
  502.     iSize   = fvault_size( szVault );
  503.    
  504.     if ( iSize < 1 )
  505.         return -1;
  506.        
  507.     static i;
  508.    
  509.     static szKey[ 64 ], szData[ 128 ];
  510.    
  511.     for ( i = 0; i < iSize; i++ )
  512.     {
  513.         fvault_get_keyname( szVault, i, szKey, charsmax( szKey ) );
  514.        
  515.         fvault_get_data( szVault, szKey, szData, charsmax( szData ) );
  516.        
  517.         if ( iGangID == str_to_num( szData ) )
  518.             return i;
  519.     }
  520.    
  521.     return -1;
  522. }
  523.  
  524. stock getStatus( const index )
  525.     return gIndex[ index ][ g_mPlayersStatus ];
Advertisement
Add Comment
Please, Sign In to add comment