Guest User

Untitled

a guest
Jan 28th, 2017
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.21 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <hamsandwich>
  5. #include <zombieplague>
  6. #include <nvault_util>
  7. #include <nvault>
  8. #include <sqlx>
  9.  
  10. #define TAG "Premium-ZM" // Change the tag from here ... MUST BE BETWEEN ""
  11. #define MAXPLAYERS 32
  12. #define MAXLEVEL 60
  13. #define DUARATION 1
  14. #define HOLD 3
  15. #define FFADE_IN 0x0000
  16. #define FFADE_OUT 0x0001
  17. #define DENSITY 150
  18.  
  19. new const level_up [] = "premium_zombie/level_up.wav" // EDIT SOUND
  20. new bool:g_bKilledZombie[MAXPLAYERS+1][33]
  21. new Level[33], XP[33]
  22. new savexp, g_Vault, save_type, mysqlx_host, mysqlx_user, mysqlx_db, mysqlx_pass
  23. new Handle:g_hTuple
  24. new const szTables[][] =
  25. {
  26.     "CREATE TABLE IF NOT EXISTS `mytable` ( `player_id` varchar(32) NOT NULL,`player_level` int(8) default NULL,`player_xp` int(16) default NULL,PRIMARY KEY (`player_id`) ) TYPE=MyISAM;"
  27. }
  28.  
  29. new const LEVELS[MAXLEVEL] = {
  30. 90, // Needed on level 1
  31. 180, // Needed on level 2
  32. 300, // Needed on level 3
  33. 450, // Needed on level 4
  34. 700, // Needed on level 5
  35. 1200, // Needed on level 6
  36. 1800, // Needed on level 7
  37. 2800, // Needed on level 8
  38. 4100, // Needed on level 9
  39. 5200, // Needed on level 10
  40. 6000, // Needed on level 11
  41. 6800, // Needed on level 12
  42. 8200, // Needed on level 13
  43. 10200, // Needed on level 14
  44. 12000, // Needed on level 15
  45. 15000, // Needed on level 16
  46. 17500, // Needed on level 17
  47. 20500, // Needed on level 18
  48. 25500, // Needed on level 19
  49. 29000, // Needed on level 20
  50. 35000, // Needed on level 21
  51. 46000, // Needed on level 22
  52. 58000, // Needed on level 23
  53. 150000, // Needed on level 24
  54. 180000, // Needed on level 25
  55. 200000, // Needed on level 26
  56. 225000, // Needed on level 27
  57. 250000, // Needed on level 28
  58. 270000, // Needed on level 29
  59. 300000, // Needed on level 30
  60. 325000, // Needed on level 31
  61. 350000, // Needed on level 32
  62. 370000, // Needed on level 33
  63. 400000, // Needed on level 34
  64. 425000, // Needed on level 35
  65. 450000, // Needed on level 36
  66. 470000, // Needed on level 37
  67. 500000, // Needed on level 38
  68. 525000, // Needed on level 39
  69. 550000, // Needed on level 40
  70. 575000, // Needed on level 41
  71. 600000, // Needed on level 42
  72. 625000, // Needed on level 43
  73. 650000, // Needed on level 44
  74. 670000, // Needed on level 45
  75. 700000, // Needed on level 46
  76. 725000, // Needed on level 47
  77. 750000, // Needed on level 48
  78. 770000, // Needed on level 49
  79. 800000, // Needed on level 50
  80. 825000, // Needed on level 51
  81. 850000, // Needed on level 52
  82. 875000, // Needed on level 53
  83. 900000, // Needed on level 54
  84. 925000, // Needed on level 55
  85. 950000, // Needed on level 56
  86. 975000, // Needed on level 57
  87. 1000000, // Needed on level 58
  88. 1500000, // Needed on level 59
  89. 2000000, // Needed on level 60
  90. }; // Needed Xp on each Levels
  91.  
  92. public plugin_natives()
  93. {
  94.     register_native("zp_get_user_level", "GET_LEVEL", 1)
  95.     register_native("zp_set_user_level", "SET_LEVEL", 1)
  96.     register_native("zp_get_user_xp", "GET_XP", 1)
  97.     register_native("zp_set_user_xp", "SET_XP", 1)
  98. }
  99.  
  100. public GET_LEVEL(id)
  101. {
  102.     return Level[id];
  103. }
  104.  
  105. public SET_XP(id, amount)
  106. {
  107.     XP[id] = amount
  108. }
  109.  
  110. public GET_XP(id)
  111. {
  112.     return XP[id];
  113. }
  114.  
  115. public SET_LEVEL(id, amount)
  116. {
  117.     Level[id] = amount
  118. }
  119.  
  120. public fw_PlayerPreThink(id)
  121. {
  122.     if(Level[id] < MAXLEVEL-1)
  123.     {
  124.         while(XP[id] >= LEVELS[Level[id]])
  125.         {
  126.             XP[id] = 0
  127.             Level[id]++
  128.             message_begin(MSG_ONE_UNRELIABLE, get_user_msgid( "ScreenFade" ), {0,0,0}, id)
  129.             write_short(DUARATION * 4096)    // Duration
  130.             write_short(HOLD * 4096)    // Hold time
  131.             write_short(FFADE_OUT)    // Fade type
  132.             write_byte (random(256))        // Red
  133.             write_byte (random(256))    // Green
  134.             write_byte (random(256))        // Blue
  135.             write_byte (DENSITY)    // Alpha
  136.             message_end()
  137.         }
  138.     }
  139. }
  140. public plugin_init()
  141. {
  142.     register_plugin("[ZP] Addons: Level & XP System", "5.0", "JaCk")
  143.     register_event("DeathMsg", "event_DeathMsg", "a")
  144.     save_type = register_cvar("levels_savetype","0") // 0= Nvault .. 1= MySql
  145.     savexp = register_cvar("levels_save", "1") // 0= IP..1= Steamid..2= Name
  146.     mysqlx_host = register_cvar ("levels_host", ""); // The host from the db
  147.     mysqlx_user = register_cvar ("levels_user", ""); // The username from the db login
  148.     mysqlx_pass = register_cvar ("levels_pass", ""); // The password from the db login
  149.     mysqlx_db = register_cvar ("levels_dbname", ""); // The database name
  150. }
  151.  
  152. public plugin_cfg()
  153. {
  154.     g_Vault = nvault_open( "ZR_levels" ); // Nvault file name
  155.    
  156.     if ( g_Vault == INVALID_HANDLE )
  157.         set_fail_state( "Error opening levels nVault, file does not exist!" );
  158. }
  159.  
  160. public plugin_precache()
  161. {
  162.     precache_sound(level_up)
  163. }
  164.  
  165. public plugin_end()
  166. {
  167.     nvault_close( g_Vault );
  168. }
  169.  
  170. public client_connect(id)
  171. {
  172.     LoadLevel(id)
  173. }
  174.  
  175. public client_disconnect(id)
  176. {
  177.     SaveLevel(id)
  178.    
  179.     XP[id] = 0
  180.     Level[id] = 0
  181. }
  182.  
  183. public on_damage(id)
  184. {
  185.     static attacker,damage;
  186.    
  187.     if ((damage >= 1400) && is_user_connected(attacker) && (!(zp_get_user_zombie(attacker))) && (attacker != id))
  188.     {
  189.         XP[attacker] += 2
  190.         set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.7, 0, 3.0, 8.0, 0.5, 0.5)
  191.         show_hudmessage(attacker, "+2 XP")
  192.         fw_PlayerPreThink(id)
  193.     }
  194. }
  195.  
  196. public zp_user_infected_post(id, infector)
  197. {
  198.     if(is_user_alive(infector) && infector != id)
  199.     {
  200.         XP[infector] += 2
  201.         fw_PlayerPreThink(infector)
  202.     }
  203. }
  204.  
  205. public zp_round_ended(iTeam)
  206. {
  207.     new iPlayers[MAXPLAYERS], iPlayerCount, i, player
  208.     get_players(iPlayers, iPlayerCount, "ac")
  209.     player = iPlayers[i]
  210.     switch(iTeam)
  211.     {
  212.         case WIN_ZOMBIES:
  213.         {
  214.             for(i = 0; i < iPlayerCount; i++)
  215.             {
  216.                 if(zp_get_user_zombie(player))
  217.                 {
  218.                     XP[player] += 4
  219.                     fw_PlayerPreThink(player)
  220.                 }
  221.             }
  222.         }
  223.         case WIN_HUMANS:
  224.         {
  225.             for(i = 0; i < iPlayerCount; i++)
  226.             {
  227.                 if(!zp_get_user_zombie(player))
  228.                 {
  229.                     XP[player] += 4
  230.                     fw_PlayerPreThink(player)
  231.                 }
  232.             }
  233.         }
  234.         case WIN_NO_ONE:
  235.         {
  236.             for(i = 0; i < iPlayerCount; i++)
  237.             {
  238.                 if((zp_get_user_zombie(player)) || (!(zp_get_user_zombie(player))))
  239.                 {
  240.                     XP[player] += 2
  241.                     fw_PlayerPreThink(player)
  242.                 }
  243.             }
  244.         }
  245.     }
  246. }
  247.  
  248. public event_DeathMsg()
  249. {
  250.     new iKiller; iKiller = read_data(1)
  251.     new iVictim; iVictim = read_data(2)
  252.     new iIsHeadshot; iIsHeadshot = read_data(3)
  253.    
  254.     if(iVictim == iKiller || !is_user_alive(iKiller))
  255.         return
  256.    
  257.     if(!zp_get_user_zombie(iKiller) || zp_get_user_survivor(iKiller))
  258.     {
  259.         if(zp_get_user_nemesis(iVictim))
  260.         {
  261.             XP[iKiller] += 30
  262.             fw_PlayerPreThink(iKiller)
  263.             fw_PlayerPreThink(iVictim)
  264.         }
  265.         else
  266.         {
  267.             if(iIsHeadshot)
  268.             {
  269.                 g_bKilledZombie[iKiller][iVictim] = true
  270.                 XP[iKiller] += 5
  271.                 fw_PlayerPreThink(iKiller)
  272.             }
  273.             else
  274.             {
  275.                 g_bKilledZombie[iKiller][iVictim] = true
  276.                 XP[iKiller] += 2
  277.                 fw_PlayerPreThink(iKiller)
  278.             }
  279.         }
  280.     }
  281.    
  282.     else if(zp_get_user_zombie(iKiller) || zp_get_user_nemesis(iKiller))
  283.     {
  284.         if(zp_get_user_survivor(iVictim))
  285.         {
  286.             XP[iKiller] += 30
  287.             fw_PlayerPreThink(iKiller)
  288.         }
  289.         else
  290.         {
  291.             XP[iKiller] += 2
  292.             fw_PlayerPreThink(iKiller)
  293.         }
  294.     }
  295. }
  296.  
  297. SaveLevel(id)
  298. {
  299.     new szAuth[33];
  300.     new szKey[64];
  301.  
  302.     if ( get_pcvar_num(savexp) == 0 )
  303.     {
  304.         get_user_ip( id, szAuth , charsmax(szAuth), 1);
  305.         formatex( szKey , 63 , "%s-IP" , szAuth);
  306.     }
  307.     else if ( get_pcvar_num(savexp) == 1 )
  308.     {
  309.         get_user_authid( id , szAuth , charsmax(szAuth) );
  310.         formatex( szKey , 63 , "%s-ID" , szAuth);
  311.     }
  312.     else if ( get_pcvar_num(savexp) == 2 )
  313.     {
  314.         get_user_name( id, szAuth , charsmax(szAuth) );
  315.         formatex( szKey , 63 , "%s-NAME" , szAuth);
  316.     }
  317.  
  318.     if ( !get_pcvar_num(save_type) )
  319.     {
  320.         new szData[256];
  321.    
  322.         formatex( szData , 255 , "%i#%i#" , Level[id], XP[id] );
  323.        
  324.         nvault_set( g_Vault , szKey , szData );
  325.     }
  326.     else
  327.     {  
  328.         static szQuery[ 128 ];
  329.  
  330.         formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", szAuth , Level[id], XP[id] );
  331.        
  332.         SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
  333.     }
  334. }
  335.  
  336. LoadLevel(id)
  337. {
  338.     new szAuth[33];
  339.     new szKey[40];
  340.  
  341.     if ( get_pcvar_num(savexp) == 0 )
  342.     {
  343.         get_user_ip( id, szAuth , charsmax(szAuth), 1);
  344.         formatex( szKey , 63 , "%s-IP" , szAuth);
  345.     }
  346.     else if ( get_pcvar_num(savexp) == 1 )
  347.     {
  348.         get_user_authid( id , szAuth , charsmax(szAuth) );
  349.         formatex( szKey , 63 , "%s-ID" , szAuth);
  350.     }
  351.     else if ( get_pcvar_num(savexp) == 2 )
  352.     {
  353.         get_user_name( id, szAuth , charsmax(szAuth) );
  354.         formatex( szKey , 63 , "%s-NAME" , szAuth);
  355.     }
  356.  
  357.     if ( !get_pcvar_num(save_type) )
  358.     {
  359.         new szData[256];
  360.  
  361.         formatex(szData , 255, "%i#%i#", Level[id], XP[id])
  362.            
  363.         nvault_get(g_Vault, szKey, szData, 255)
  364.  
  365.         replace_all(szData , 255, "#", " ")
  366.         new xp[32], level[32]
  367.         parse(szData, level, 31, xp, 31)
  368.         Level[id] = str_to_num(level)
  369.         XP[id] = str_to_num(xp)  
  370.     }
  371.     else
  372.     {
  373.         static szQuery[ 128 ], iData[ 1 ];
  374.         formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", szAuth );
  375.      
  376.         iData[ 0 ] = id;
  377.         SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
  378.     }
  379. }
  380.  
  381. public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  382. {
  383.     if( iFailState == TQUERY_CONNECT_FAILED
  384.     || iFailState == TQUERY_QUERY_FAILED )
  385.     {
  386.         log_amx( "%s", szError );
  387.        
  388.         return;
  389.     }
  390.     else
  391.     {
  392.         new id = iData[ 0 ];
  393.        
  394.         new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
  395.         new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
  396.        
  397.         while (SQL_MoreResults(hQuery))
  398.         {
  399.             Level[id] = SQL_ReadResult(hQuery, ColLevel);
  400.             XP[id] = SQL_ReadResult(hQuery, ColXp);
  401.                    
  402.             SQL_NextRow(hQuery)
  403.         }
  404.     }
  405. }
  406.  
  407. public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  408. {
  409.     if( iFailState == TQUERY_CONNECT_FAILED
  410.     || iFailState == TQUERY_QUERY_FAILED )
  411.     {
  412.         log_amx( "%s", szError );
  413.        
  414.         return;
  415.     }
  416. }
  417.  
  418. public MySQLx_Init()
  419. {
  420.     if (!get_pcvar_num(save_type))
  421.         return;
  422.    
  423.     new szHost[64], szUser[32], szPass[32], szDB[128];
  424.    
  425.     get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
  426.     get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
  427.     get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
  428.     get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
  429.    
  430.     g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
  431.    
  432.     for ( new i = 0; i < sizeof szTables; i++ )
  433.     {
  434.         SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
  435.     }
  436. }
  437.  
  438. public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  439. {
  440.     if( iFailState == TQUERY_CONNECT_FAILED
  441.     || iFailState == TQUERY_QUERY_FAILED )
  442.     {
  443.         log_amx( "%s", szError );
  444.        
  445.         return;
  446.     }
  447. }
  448.        
  449. stock client_print_color(const id, const input[], any:...)  
  450. {  
  451.     new count = 1, players[32];  
  452.     static msg[191];  
  453.     vformat(msg, 190, input, 3);  
  454.  
  455.     replace_all(msg, 190, "!g", "^x04"); // Green Color  
  456.     replace_all(msg, 190, "!y", "^x01"); // Default Color  
  457.     replace_all(msg, 190, "!t", "^x03"); // Team Color  
  458.  
  459.     if (id) players[0] = id; else get_players(players, count, "ch");  
  460.     {  
  461.         for (new i = 0; i < count; i++)  
  462.         {  
  463.             if (is_user_connected(players[i]))  
  464.             {  
  465.                 message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);  
  466.                 write_byte(players[i]);  
  467.                 write_string(msg);  
  468.                 message_end();  
  469.             }  
  470.         }  
  471.     }  
  472. }
Add Comment
Please, Sign In to add comment