Advertisement
Guest User

Untitled

a guest
Oct 3rd, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.26 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <zombieplague>
  5.  
  6. #include <nvault_util>
  7. #include <nvault>
  8. #include <sqlx>
  9.  
  10. #define TAG "ZP" // Change the tag from here ... MUST BE BETWEEN ""
  11. #define MAXPLAYERS 32
  12. #define MAXLEVELS 30 // EDIT MAX LEVELS
  13. #define DUARATION 1
  14. #define HOLD 3
  15. #define FFADE_IN 0x0000
  16. #define FFADE_OUT 0x0001
  17. #define DENSITY 150
  18. new const level_up [] = "zombie_plague/zp_LEVEL_UP.mp3" // EDIT SOUND
  19. new Level[33], XP[33]
  20. new savexp, g_Vault
  21. new g_msgSayText, g_MsgScreenFade
  22. new Handle:g_hTuple;
  23. new mysqlx_host, mysqlx_user, mysqlx_db, mysqlx_pass
  24. new save_type
  25. new const szTables[][] =
  26. {
  27. "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;"
  28. }
  29.  
  30. public plugin_natives()
  31. {
  32. register_native("zp_get_user_level", "GET_LEVEL", 1)
  33. register_native("zp_set_user_level", "SET_LEVEL", 1)
  34. register_native("zp_get_user_xp", "GET_XP", 1)
  35. register_native("zp_set_user_xp", "SET_XP", 1)
  36. }
  37. public GET_LEVEL(id)
  38. {
  39. return Level[id];
  40. }
  41. public SET_XP(id, amount)
  42. {
  43. return XP[id] = amount
  44. }
  45. public GET_XP(id)
  46. {
  47. return XP[id];
  48. }
  49. public SET_LEVEL(id, amount)
  50. {
  51. return Level[id] = amount
  52. }
  53. public fw_PlayerPreThink(id)
  54. {
  55. if(XP[id] >= 100)
  56. {
  57. XP[id] = 0
  58. Level[id] += 1
  59. }
  60. }
  61. public client_death(killer,victim,weapon,hitplace,TK)
  62. {
  63. XP[killer] += 1
  64. }
  65. public plugin_init()
  66. {
  67. register_plugin("[ZP] Best Level & XP System Ever", "1.0", "JaCk")
  68.  
  69. register_clcmd("say /info", "show_xp")
  70.  
  71. register_event("DeathMsg", "event_DeathMsg", "a")
  72. register_event("Damage", "on_damage", "b", "2!0", "3=0", "4!0")
  73.  
  74. save_type = register_cvar("levels_savetype","0") // 0= Nvault .. 1= MySql
  75. savexp = register_cvar("levels_save", "1") // 0= IP..1= Steamid..2= Name
  76.  
  77. g_msgSayText = get_user_msgid("SayText")
  78. g_MsgScreenFade = get_user_msgid( "ScreenFade" )
  79.  
  80. register_clcmd("say", "custom_say")
  81. register_clcmd("say_team", "custom_say_team")
  82. g_msgSayText = get_user_msgid("SayText")
  83. register_message(g_msgSayText, "message_SayText")
  84.  
  85. mysqlx_host = register_cvar ("levels_host", ""); // The host from the db
  86. mysqlx_user = register_cvar ("levels_user", ""); // The username from the db login
  87. mysqlx_pass = register_cvar ("levels_pass", ""); // The password from the db login
  88. mysqlx_db = register_cvar ("levels_dbname", ""); // The database name
  89. }
  90.  
  91. public plugin_cfg()
  92. {
  93. g_Vault = nvault_open( "levels" ); // Ncault file name
  94.  
  95. if ( g_Vault == INVALID_HANDLE )
  96. set_fail_state( "Error opening levels nVault, file does not exist!" );
  97. }
  98.  
  99. public plugin_precache()
  100. {
  101. precache_sound(level_up)
  102. }
  103.  
  104. public plugin_end()
  105. {
  106. nvault_close( g_Vault );
  107. }
  108.  
  109. public client_connect(id)
  110. {
  111. LoadLevel(id)
  112.  
  113. new szName[32]
  114. get_user_name(id, szName, charsmax(szName))
  115.  
  116. client_print_color(0, "!y[!g%s!y] !t%s !gwhose level !t%i !gconnected!y.", TAG, szName, Level[id]) // EDIT CONNECT MESSAGE
  117. }
  118.  
  119. public client_disconnect(id)
  120. {
  121. SaveLevel(id)
  122.  
  123. XP[id] = 0
  124. Level[id] = 0
  125. }
  126. /*=========SCREEN FADE EFFECT=========*/
  127. public Screen_Fade(id)
  128. {
  129. message_begin(MSG_ONE_UNRELIABLE, g_MsgScreenFade, {0,0,0}, id)
  130. write_short(DUARATION * 4096) // Duration
  131. write_short(HOLD * 4096) // Hold time
  132. write_short(FFADE_OUT) // Fade type
  133. write_byte (random(256)) // Red
  134. write_byte (random(256)) // Green
  135. write_byte (random(256)) // Blue
  136. write_byte (DENSITY) // Alpha
  137. message_end()
  138. }
  139. /*==========LEVEL TAG !!!!!!!!!=================*/
  140. public custom_say(id)
  141. {
  142. new szMessage[192], szName[32]
  143.  
  144. read_args(szMessage, charsmax(szMessage))
  145. remove_quotes(szMessage)
  146. get_user_name(id, szName, charsmax(szName))
  147.  
  148. if(equali(szMessage[0], " ") || equali(szMessage[0], "") || !is_valid_msg(szMessage))
  149. return PLUGIN_HANDLED_MAIN
  150.  
  151. if(is_user_alive(id))
  152. {
  153. format(szMessage, charsmax(szMessage), "^1[^4LEVEL ^3%i^1] ^3%s ^1: %s", Level[id], szName, szMessage)
  154. }
  155. else
  156. {
  157. format(szMessage, charsmax(szMessage), "^1*DEAD* [^4LEVEL ^3%i^1] ^3%s ^1: %s", Level[id], szName, szMessage)
  158. }
  159.  
  160. new iPlayers[MAXPLAYERS], iPlayerCount, i, player
  161. get_players(iPlayers, iPlayerCount, "ch")
  162. for(i = 0; i < iPlayerCount; i++)
  163. {
  164. player = iPlayers[i]
  165. if(is_user_alive(id) && is_user_alive(player) || !is_user_alive(id) && !is_user_alive(player))
  166. {
  167. message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
  168. write_byte(id)
  169. write_string(szMessage)
  170. message_end()
  171. }
  172. }
  173.  
  174. return PLUGIN_CONTINUE
  175. }
  176.  
  177. public custom_say_team(id)
  178. {
  179. new szMessage[192], szName[32]
  180.  
  181. read_args(szMessage, charsmax(szMessage))
  182. remove_quotes(szMessage)
  183. get_user_name(id, szName, charsmax(szName))
  184.  
  185. if(equali(szMessage[0], " ") || equali(szMessage[0], "") || !is_valid_msg(szMessage))
  186. return PLUGIN_HANDLED_MAIN
  187.  
  188. if(is_user_alive(id))
  189. {
  190. format(szMessage, charsmax(szMessage), "^1[^4LEVEL ^3%i^1] ^3%s ^1: %s", Level[id], szName, szMessage)
  191. }
  192. else
  193. {
  194. format(szMessage, charsmax(szMessage), "^1*DEAD* [^4LEVEL ^3%i^1] ^3%s ^1: %s", Level[id], szName, szMessage)
  195. }
  196.  
  197. new iPlayers[MAXPLAYERS], iPlayerCount, i, player
  198. get_players(iPlayers, iPlayerCount, "ch")
  199. for(i = 0; i < iPlayerCount; i++)
  200. {
  201. player = iPlayers[i]
  202. if(is_user_alive(id) && is_user_alive(player) && get_user_team(id) == get_user_team(player) || !is_user_alive(id) && !is_user_alive(player) && get_user_team(id) == get_user_team(player))
  203. {
  204. message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
  205. write_byte(id)
  206. write_string(szMessage)
  207. message_end()
  208. }
  209. }
  210.  
  211. return PLUGIN_CONTINUE
  212. }
  213.  
  214. public message_SayText(id)
  215. {
  216. return PLUGIN_HANDLED
  217. }
  218.  
  219. bool:is_valid_msg(const szMessage[])
  220. {
  221. if(szMessage[0] == '@' || szMessage[0] == '/' || szMessage[0] == '!' || !strlen(szMessage))
  222. return false
  223.  
  224. return true
  225. }
  226. /*===============STOCKS !!!===========*/
  227. /*=========SAVES THE LEVEL OF THE PLAYER=========*/
  228. SaveLevel(id)
  229. {
  230. new szAuth[33];
  231. new szKey[64];
  232.  
  233. if ( get_pcvar_num(savexp) == 0 )
  234. {
  235. get_user_ip( id, szAuth , charsmax(szAuth), 1);
  236. formatex( szKey , 63 , "%s-IP" , szAuth);
  237. }
  238. else if ( get_pcvar_num(savexp) == 1 )
  239. {
  240. get_user_authid( id , szAuth , charsmax(szAuth) );
  241. formatex( szKey , 63 , "%s-ID" , szAuth);
  242. }
  243. else if ( get_pcvar_num(savexp) == 2 )
  244. {
  245. get_user_name( id, szAuth , charsmax(szAuth) );
  246. formatex( szKey , 63 , "%s-NAME" , szAuth);
  247. }
  248.  
  249. if ( !get_pcvar_num(save_type) )
  250. {
  251. new szData[256];
  252.  
  253. formatex( szData , 255 , "%i#%i#" , Level[id], XP[id] );
  254.  
  255. nvault_set( g_Vault , szKey , szData );
  256. }
  257. else
  258. {
  259. static szQuery[ 128 ];
  260.  
  261. formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", szAuth , Level[id], XP[id] );
  262.  
  263. SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
  264. }
  265. }
  266. /*======LOAD LEVEL OF THE PLAYERS========*/
  267. LoadLevel(id)
  268. {
  269. new szAuth[33];
  270. new szKey[40];
  271.  
  272. if ( get_pcvar_num(savexp) == 0 )
  273. {
  274. get_user_ip( id, szAuth , charsmax(szAuth), 1);
  275. formatex( szKey , 63 , "%s-IP" , szAuth);
  276. }
  277. else if ( get_pcvar_num(savexp) == 1 )
  278. {
  279. get_user_authid( id , szAuth , charsmax(szAuth) );
  280. formatex( szKey , 63 , "%s-ID" , szAuth);
  281. }
  282. else if ( get_pcvar_num(savexp) == 2 )
  283. {
  284. get_user_name( id, szAuth , charsmax(szAuth) );
  285. formatex( szKey , 63 , "%s-NAME" , szAuth);
  286. }
  287.  
  288. if ( !get_pcvar_num(save_type) )
  289. {
  290. new szData[256];
  291.  
  292. formatex(szData , 255, "%i#%i#", Level[id], XP[id])
  293.  
  294. nvault_get(g_Vault, szKey, szData, 255)
  295.  
  296. replace_all(szData , 255, "#", " ")
  297. new xp[32], level[32]
  298. parse(szData, level, 31, xp, 31)
  299. Level[id] = str_to_num(level)
  300. XP[id] = str_to_num(xp)
  301. }
  302. else
  303. {
  304. static szQuery[ 128 ], iData[ 1 ];
  305. formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", szAuth );
  306.  
  307. iData[ 0 ] = id;
  308. SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
  309. }
  310. }
  311.  
  312. public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  313. {
  314. if( iFailState == TQUERY_CONNECT_FAILED
  315. || iFailState == TQUERY_QUERY_FAILED )
  316. {
  317. log_amx( "%s", szError );
  318.  
  319. return;
  320. }
  321. else
  322. {
  323. new id = iData[ 0 ];
  324.  
  325. new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
  326. new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
  327.  
  328. while (SQL_MoreResults(hQuery))
  329. {
  330. Level[id] = SQL_ReadResult(hQuery, ColLevel);
  331. XP[id] = SQL_ReadResult(hQuery, ColXp);
  332.  
  333. SQL_NextRow(hQuery)
  334. }
  335. }
  336. }
  337.  
  338. public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  339. {
  340. if( iFailState == TQUERY_CONNECT_FAILED
  341. || iFailState == TQUERY_QUERY_FAILED )
  342. {
  343. log_amx( "%s", szError );
  344.  
  345. return;
  346. }
  347. }
  348.  
  349. public MySQLx_Init()
  350. {
  351. if (!get_pcvar_num(save_type))
  352. return;
  353.  
  354. new szHost[64], szUser[32], szPass[32], szDB[128];
  355.  
  356. get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
  357. get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
  358. get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
  359. get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
  360.  
  361. g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
  362.  
  363. for ( new i = 0; i < sizeof szTables; i++ )
  364. {
  365. SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
  366. }
  367. }
  368.  
  369. public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  370. {
  371. if( iFailState == TQUERY_CONNECT_FAILED
  372. || iFailState == TQUERY_QUERY_FAILED )
  373. {
  374. log_amx( "%s", szError );
  375.  
  376. return;
  377. }
  378. }
  379.  
  380. stock client_print_color(const id, const input[], any:...)
  381. {
  382. new count = 1, players[32];
  383. static msg[191];
  384. vformat(msg, 190, input, 3);
  385.  
  386. replace_all(msg, 190, "!g", "^x04"); // Green Color
  387. replace_all(msg, 190, "!y", "^x01"); // Default Color
  388. replace_all(msg, 190, "!t", "^x03"); // Team Color
  389.  
  390. if (id) players[0] = id; else get_players(players, count, "ch");
  391. {
  392. for (new i = 0; i < count; i++)
  393. {
  394. if (is_user_connected(players[i]))
  395. {
  396. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  397. write_byte(players[i]);
  398. write_string(msg);
  399. message_end();
  400. }
  401. }
  402. }
  403. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement