Advertisement
Guest User

Untitled

a guest
Mar 24th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.50 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <zombieplague>
  4. #include <sqlx>
  5. #include <hamsandwich>
  6.  
  7.  
  8. new c_SqlHost
  9. new c_SqlUser
  10. new c_SqlPass
  11. new c_SqlDB
  12. new c_SqlType
  13.  
  14. enum _: UserStats {
  15. g_zh_kill,
  16. g_ms_round,
  17. g_zt_infect,
  18. g_nh_kill,
  19. g_hh_kill,
  20. g_total_dmg,
  21. g_grenade,
  22. };
  23. new User [ 33 ] [ UserStats ];
  24. new g_Error[512]
  25.  
  26. #define ZH_MAX_KILL 500
  27. #define MS_MAX_ROUND 500
  28. #define ZT_MAX_INFECT 500
  29. #define NH_MAX_KILL 100
  30. #define HH_MAX_KILL 100
  31. #define TOTAL_DAMAGE 9999999
  32. #define GRENADE 100
  33.  
  34. new Handle:g_SqlTuple
  35.  
  36. public plugin_init()
  37. {
  38. register_plugin("ZP Ammo Saving", "1.0.5", "wbyokomo")
  39.  
  40. register_event("DeathMsg", "event_death", "a")
  41. register_logevent("event_round_end", 2, "1=Round_End")
  42. register_event("TextMsg","event_round_end","a","2=#Game_Commencing","2=#Game_will_restart_in")
  43.  
  44. register_clcmd("say /achievement", "show_medal")
  45. register_clcmd("ach", "show_medal")
  46. RegisterHam(Ham_TakeDamage, "player", "HAM_TakeDamage", 1);
  47. c_SqlHost = register_cvar( "zp_ammo_bank_host", "linuxclub.ro" )
  48. c_SqlUser = register_cvar( "zp_ammo_bank_user", "darkcs_zm" )
  49. c_SqlPass = register_cvar( "zp_ammo_bank_pass", "s" )
  50. c_SqlDB = register_cvar( "zp_ammo_bank_db", "darkcs_zm" )
  51. c_SqlType = register_cvar( "zp_ammo_bank_type", "mysql" )
  52.  
  53. if( !_PrepareSQL() )
  54. {
  55. set_fail_state( "[ZP Ammo Bank] Fail to prepare SQL" )
  56. return;
  57. }
  58. }
  59. public show_medal(id)
  60. {
  61. static menu
  62. menu = menu_create("Achievement", "medal_menu_handle1")
  63.  
  64. add_zombie_hunter(id, menu)
  65. add_master_survival(id, menu)
  66. add_zombie_terminator(id, menu)
  67. add_nemesis_hunter(id, menu)
  68. add_hero_hunter(id, menu)
  69. add_total_damage(id, menu)
  70. add_grenade(id, menu)
  71.  
  72. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  73. menu_display(id, menu, 0)
  74. }
  75. public zp_user_infected_post(victim, attacker)
  76. {
  77. if(is_user_alive(attacker) && zp_get_user_zombie(attacker))
  78. {
  79. if(User [ attacker ] [ g_zt_infect ] < ZT_MAX_INFECT)
  80. {
  81. User [ attacker ] [ g_zt_infect ]++
  82.  
  83. if(User [ attacker ] [ g_zt_infect ] >= ZT_MAX_INFECT)
  84. {
  85. static Name[64]
  86. get_user_name(attacker, Name, sizeof(Name))
  87. client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari ! !g%s!n ai deblocat realizarea !gZombie Terminator", Name)
  88. }
  89. }
  90. }
  91. }
  92. public event_death()
  93. {
  94. static attacker, victim
  95. attacker = read_data(1)
  96. victim = read_data(2)
  97. static Name[64]
  98. get_user_name(attacker, Name, sizeof(Name))
  99. if(zp_get_user_zombie(victim) && !zp_get_user_zombie(attacker))
  100. {
  101. if(User [ attacker ] [ g_zh_kill ] < ZH_MAX_KILL)
  102. {
  103. User [ attacker ] [ g_zh_kill ]++
  104.  
  105. if(User [ attacker ] [ g_zh_kill ] >= ZH_MAX_KILL)
  106. {
  107. client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari! !g%s!n ai deblocat realizarea !gZombie Hunter", Name)
  108. }
  109.  
  110. }
  111. } else if(zp_get_user_nemesis(victim) && !zp_get_user_zombie(attacker) && !zp_get_user_nemesis(attacker)) {
  112. if(User [ attacker ] [ g_nh_kill ] < NH_MAX_KILL)
  113. {
  114. User [ attacker ] [ g_nh_kill ]++
  115.  
  116. if(User [ attacker ] [ g_nh_kill ] >= NH_MAX_KILL)
  117. {
  118. client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari! !g%s!n ai deblocat realizarea !gNemesis Hunter", Name)
  119. }
  120.  
  121. }
  122. } else if(zp_get_user_survivor(victim) && zp_get_user_zombie(attacker) || zp_get_user_nemesis(attacker)) {
  123. if(User [ attacker ] [ g_hh_kill ] < HH_MAX_KILL)
  124. {
  125. User [ attacker ] [ g_hh_kill ]++
  126.  
  127. if(User [ attacker ] [ g_hh_kill ] >= HH_MAX_KILL)
  128. {
  129. client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari! !g%s!n ai deblocat realizarea !gHero Hunter", Name)
  130. }
  131. }
  132. }
  133. if( (get_user_weapon( attacker ) == CSW_HEGRENADE ) && !zp_get_user_zombie(victim))
  134. {
  135. if(User [ attacker ] [ g_grenade ] < GRENADE )
  136. {
  137. User [ attacker ] [ g_grenade ]++
  138.  
  139. if(User [ attacker ] [ g_grenade ] >= GRENADE)
  140. {
  141. client_printcolor(attacker, "!g[ZP Achievement]!n Felicitari! !g%s!n ai deblocat realizarea !gDeadly Grenade", Name)
  142. }
  143.  
  144. }
  145. }
  146. }
  147. public event_round_end(id)
  148. {
  149. static attacker, victim
  150. attacker = read_data(1)
  151. victim = read_data(2)
  152. if(is_user_alive(attacker) && !zp_get_user_zombie(attacker))
  153. {
  154. if(User [ attacker ][g_ms_round] < MS_MAX_ROUND)
  155. {
  156. User [ attacker ][g_ms_round]++
  157.  
  158. if(User [ attacker ][g_ms_round] >= MS_MAX_ROUND)
  159. {
  160. static Name[64]
  161. get_user_name(id, Name, sizeof(Name))
  162.  
  163. client_printcolor(0, "[ZP Achievement] Felicitari! %s ai deblocat realizarea !gMaster Of Survival", Name)
  164. }
  165. }
  166. }
  167. }
  168. public add_zombie_hunter(id, menu)
  169. {
  170. static temp_string[128]
  171.  
  172. if(User [ id ] [ g_zh_kill ] < ZH_MAX_KILL)
  173. formatex(temp_string, sizeof(temp_string), "\wZombie Hunter \r%i/%i", User [ id ] [ g_zh_kill ], ZH_MAX_KILL)
  174. else
  175. formatex(temp_string, sizeof(temp_string), "\wZombie Hunter \dComplete")
  176. menu_additem(menu, temp_string, "\y0")
  177. }
  178.  
  179. public add_master_survival(id, menu)
  180. {
  181. static temp_string[128]
  182.  
  183. if(User [ id ] [ g_ms_round ] < MS_MAX_ROUND)
  184. formatex(temp_string, sizeof(temp_string), "\wMaster Of Survival \r%i/%i", User [ id ] [ g_ms_round ] , MS_MAX_ROUND)
  185. else
  186. formatex(temp_string, sizeof(temp_string), "\wMaster Of Survival \dComplete")
  187. menu_additem(menu, temp_string, "\y1")
  188. }
  189.  
  190. public add_zombie_terminator(id, menu)
  191. {
  192. static temp_string[128]
  193.  
  194. if(User [ id ] [ g_zt_infect] < ZT_MAX_INFECT)
  195. formatex(temp_string, sizeof(temp_string), "\wZombie Terminator \r%i/%i", User [ id ] [ g_zt_infect], ZT_MAX_INFECT)
  196. else
  197. formatex(temp_string, sizeof(temp_string), "\wZombie Terminator \dComplete")
  198. menu_additem(menu, temp_string, "\y2")
  199. }
  200. public add_nemesis_hunter(id, menu)
  201. {
  202. static temp_string[128]
  203.  
  204. if(User [ id ] [ g_nh_kill] < NH_MAX_KILL)
  205. formatex(temp_string, sizeof(temp_string), "\wNemesis Hunter \r%i/%i", User [ id ] [ g_nh_kill], NH_MAX_KILL)
  206. else
  207. formatex(temp_string, sizeof(temp_string), "\wNemesis Hunter \dComplete")
  208. menu_additem(menu, temp_string, "\y3")
  209. }
  210. public add_hero_hunter(id, menu)
  211. {
  212. static temp_string[128]
  213.  
  214. if(User [ id ] [ g_hh_kill] < HH_MAX_KILL)
  215. formatex(temp_string, sizeof(temp_string), "\wHero Hunter \r%i/%i", User [ id ] [ g_hh_kill], HH_MAX_KILL)
  216. else
  217. formatex(temp_string, sizeof(temp_string), "\wHero Hunter \dComplete")
  218. menu_additem(menu, temp_string, "\y4")
  219. }
  220.  
  221. public add_total_damage(id, menu)
  222. {
  223. static temp_string[128]
  224.  
  225. if(User [ id ] [ g_total_dmg] < TOTAL_DAMAGE)
  226. formatex(temp_string, sizeof(temp_string), "\wAgresive Hunter \r%i/%i", User [ id ] [ g_total_dmg], TOTAL_DAMAGE)
  227. else
  228. formatex(temp_string, sizeof(temp_string), "\wAgresive Hunter \dComplete")
  229. menu_additem(menu, temp_string, "\y5")
  230. }
  231. public add_grenade(id, menu)
  232. {
  233. static temp_string[128]
  234.  
  235. if(User [ id ] [ g_grenade] < GRENADE )
  236. formatex(temp_string, sizeof(temp_string), "\wDeadly Grenade \r%i/%i", User [ id ] [ g_grenade], GRENADE)
  237. else
  238. formatex(temp_string, sizeof(temp_string), "\wDeadly Grenade \dComplete")
  239. menu_additem(menu, temp_string, "\y6")
  240. }
  241. public medal_menu_handle1(id, menu, item)
  242. {
  243. if(item == MENU_EXIT)
  244. {
  245. menu_destroy(menu)
  246. return PLUGIN_HANDLED
  247. }
  248.  
  249. static data[6], szName[64], access1, callback
  250.  
  251. menu_item_getinfo(menu, item, access1, data,charsmax(data), szName,charsmax(szName), callback)
  252.  
  253. static key_number
  254. key_number = str_to_num(data)
  255.  
  256. switch(key_number)
  257. {
  258. case 0:
  259. {
  260. if(User [ id ] [ g_zh_kill] < ZH_MAX_KILL)
  261. client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n zombi pentru a debloca realizarea !gZombie Hunter!", ZH_MAX_KILL)
  262. else
  263. client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gZombie Hunter!")
  264. }
  265. case 1:
  266. {
  267. if(User [ id ] [ g_ms_round] < MS_MAX_ROUND)
  268. client_printcolor(id, "!g[ZP Achievement!n Trebuie sa supravietuiesti !g%i!n runde pentru a debloca realizarea!gMaster Of Survival!", MS_MAX_ROUND)
  269. else
  270. client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gMaster Of Survival!")
  271. }
  272. case 2:
  273. {
  274. if(User [ id ] [ g_zt_infect] < ZT_MAX_INFECT)
  275. client_printcolor(id, "!g[ZP Achievement!n Trebuie sa infectezi !g%i!n oameni pentru a debloca realizarea !gZombie Terminator!", ZT_MAX_INFECT)
  276. else
  277. client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gZombie Terminator!")
  278. }
  279. case 3:
  280. {
  281. if(User [ id ] [ g_nh_kill] < NH_MAX_KILL)
  282. client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n nemesis pentru a debloca realizarea !gNemesis Hunter!", NH_MAX_KILL)
  283. else
  284. client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gNemesis Hunter!")
  285. }
  286. case 4:
  287. {
  288. if(User [ id ] [ g_hh_kill] < HH_MAX_KILL)
  289. client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n eroi pentru a debloca realizarea !gHero Hunter!", HH_MAX_KILL)
  290. else
  291. client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gHero Hunter!")
  292. }
  293. case 5:
  294. {
  295. if(User [ id ] [ g_total_dmg] < TOTAL_DAMAGE)
  296. client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n eroi pentru a debloca realizarea !gHero Hunter!", HH_MAX_KILL)
  297. else
  298. client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gAgresive Hunter!")
  299. }
  300. case 6:
  301. {
  302. if(User [ id ] [ g_grenade] < GRENADE)
  303. client_printcolor(id, "!g[ZP Achievement!n Trebuie sa omori !g%i!n eroi pentru a debloca realizarea !gDeadly Grenade!", HH_MAX_KILL)
  304. else
  305. client_printcolor(id, "!g[ZP Achievement!n Ai deblocat realizarea !gDeadly Grenade!")
  306. }
  307. }
  308.  
  309. return PLUGIN_HANDLED
  310. }
  311. public client_putinserver(id)
  312. {
  313. _LoadSQL(id)
  314. }
  315.  
  316. public client_disconnect(id)
  317. {
  318. _SaveSQL(id)
  319. }
  320.  
  321. public HAM_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) {
  322. if (victim == attacker || !is_user_alive(attacker) || !is_user_connected(victim))
  323. return HAM_IGNORED;
  324.  
  325. if ( User[ attacker ] [ g_total_dmg ] < TOTAL_DAMAGE ) User[ attacker ] [ g_total_dmg ] +=floatround(damage)
  326.  
  327. return HAM_HANDLED;
  328. }
  329. _PrepareSQL() {
  330.  
  331. new host[32], user[32], pass[32], db[32], type[12]
  332. get_pcvar_string( c_SqlHost, host, charsmax(host) )
  333. get_pcvar_string( c_SqlUser, user, charsmax(user) )
  334. get_pcvar_string( c_SqlPass, pass, charsmax(pass) )
  335. get_pcvar_string( c_SqlDB, db, charsmax(db) )
  336. get_pcvar_string( c_SqlType, type, charsmax(type) )
  337.  
  338. new get_type[12]
  339. SQL_GetAffinity( get_type, charsmax(get_type) )
  340.  
  341. log_amx( "[ZP Ammo Bank] SQL affinity type is %s", get_type )
  342.  
  343. if( !equali(get_type, type) )
  344. {
  345. if( !SQL_SetAffinity(type) )
  346. {
  347. log_amx( "[ZP Ammo Bank] Failed to set affinity from %s to %s", get_type, type )
  348. }
  349. }
  350.  
  351. g_SqlTuple = SQL_MakeDbTuple( host, user, pass, db )
  352.  
  353. if( g_SqlTuple == Empty_Handle )
  354. {
  355. log_amx( "[ZP Ammo Bank] Failed to create SQL tuple." )
  356. return 0;
  357. }
  358.  
  359. new const queryString[] = "CREATE TABLE IF NOT EXISTS `achievement` (\
  360. `auth` VARCHAR(64) NOT NULL,\
  361. `ZHunter` INT UNSIGNED NOT NULL,\
  362. `MOSurvival` INT UNSIGNED NOT NULL,\
  363. `ZTerminator` INT UNSIGNED NOT NULL,\
  364. `NHunter` INT UNSIGNED NOT NULL,\
  365. `HHunter` INT UNSIGNED NOT NULL,\
  366. `TDamage` INT UNSIGNED NOT NULL,\
  367. `Grenade` INT UNSIGNED NOT NULL,\
  368. `last_save` INT UNSIGNED NOT NULL,\
  369. PRIMARY KEY (`auth`) );"
  370.  
  371. new errcode, error[128];
  372. new Handle:link = SQL_Connect( g_SqlTuple, errcode, error, charsmax(error) )
  373.  
  374. if( link == Empty_Handle )
  375. {
  376. log_amx( "[ZP Ammo Bank] Failed to connect to database (%d): %s", errcode, error )
  377. return 0;
  378. }
  379.  
  380. new Handle:query = SQL_PrepareQuery( link, "%s", queryString )
  381.  
  382. if( !SQL_Execute(query) )
  383. {
  384. SQL_QueryError( query, error, charsmax(error) )
  385. log_amx( "[ZP Ammo Bank] Error creating table: %s", error )
  386.  
  387. return 0;
  388. }
  389. else
  390. {
  391. server_print( "[ZP Ammo Bank] SQL table successful create!" )
  392. }
  393.  
  394. SQL_FreeHandle(query)
  395. SQL_FreeHandle(link)
  396.  
  397. return 1;
  398. }
  399.  
  400. _MakeStringSQLSafe( output[], len ) {
  401.  
  402. replace_all( output, len, "'", "*" )
  403. replace_all( output, len, "^"", "*" ) //" - fix Sublime Text syntax highlight
  404. replace_all( output, len, "`", "*" )
  405. }
  406.  
  407. _LoadSQL(id) {
  408. new Name[64]
  409. get_user_name( id, Name, charsmax(Name) )
  410.  
  411. _MakeStringSQLSafe( Name, charsmax(Name) )
  412.  
  413. new queryString[512]
  414.  
  415. new data[2]
  416. data[0] = id
  417.  
  418. new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
  419. if(SqlConnection == Empty_Handle)
  420. set_fail_state(g_Error)
  421.  
  422. formatex( queryString, charsmax(queryString), "SELECT ZHunter, MOSurvival, ZTerminator, NHunter, HHunter, TDamage, Grenade FROM achievement WHERE auth = '%s'", Name )
  423. new Handle:Query = SQL_PrepareQuery(SqlConnection,queryString)
  424.  
  425. if(!SQL_Execute(Query))
  426. {
  427. SQL_QueryError(Query,g_Error,511)
  428. }
  429.  
  430. while(SQL_MoreResults(Query))
  431. {
  432.  
  433. User [ id ] [ g_zh_kill ] = SQL_ReadResult(Query,0);
  434. User [ id ] [ g_ms_round ] = SQL_ReadResult(Query,1);
  435. User [ id ] [ g_zt_infect ] = SQL_ReadResult(Query,2);
  436. User [ id ] [ g_nh_kill ] = SQL_ReadResult(Query,3);
  437. User [ id ] [ g_hh_kill ] = SQL_ReadResult(Query,4);
  438. User [ id ] [ g_total_dmg ] = SQL_ReadResult(Query,5);
  439. User [ id ] [ g_grenade ] = SQL_ReadResult(Query,6);
  440. SQL_NextRow(Query)
  441. }
  442.  
  443. SQL_FreeHandle(Query)
  444.  
  445. SQL_FreeHandle(SqlConnection)
  446. }
  447.  
  448. _SaveSQL(id) {
  449. new data[2]
  450. data[0] = id
  451.  
  452. new Name[64]
  453. get_user_name( id, Name, charsmax(Name) )
  454.  
  455. _MakeStringSQLSafe( Name, charsmax(Name) )
  456.  
  457. new ErrorCode,Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
  458. if(SqlConnection == Empty_Handle)
  459. set_fail_state(g_Error)
  460.  
  461. new queryString[ 1024 ];
  462.  
  463. formatex( queryString, charsmax(queryString),
  464. "INSERT INTO achievement(auth, ZHunter, MOSurvival, ZTerminator, NHunter, HHunter, last_save, TDamage, Grenade) VALUES ('%s',%d,%d,%d,%d,%d,%d,%d,%d) ON DUPLICATE KEY UPDATE auth = VALUES(auth), ZHunter = VALUES(ZHunter), MOSurvival = VALUES(MOSurvival), ZTerminator = VALUES(ZTerminator), NHunter = VALUES(NHunter), HHunter = VALUES(HHunter), last_save = VALUES(last_save), TDamage = VALUES(TDamage), Grenade = VALUES(Grenade)",
  465. Name, User [ id ] [ g_zh_kill ], User [ id ] [ g_ms_round ], User [ id ] [ g_zt_infect ], User [ id ] [ g_nh_kill ], User [ id ] [ g_hh_kill ], get_systime(), User [ id ] [ g_total_dmg ], User [ id ] [ g_grenade ]);
  466.  
  467. new Handle:Query = SQL_PrepareQuery(SqlConnection,queryString)
  468. if(!SQL_Execute(Query))
  469. {
  470. SQL_QueryError(Query,g_Error,511)
  471. set_fail_state(g_Error)
  472. }
  473. SQL_FreeHandle(Query)
  474.  
  475. SQL_FreeHandle(SqlConnection)
  476. }
  477. public QuerySaveData( failstate, Handle:query, error[], errcode, data[], size, Float:queueTime )
  478. {
  479. if( failstate == TQUERY_CONNECT_FAILED )
  480. {
  481. log_amx( "[ZP Achievement] Failed connecting to save data (%d): %s", errcode, error )
  482. }
  483. else if( failstate == TQUERY_QUERY_FAILED )
  484. {
  485. log_amx( "[ZP Achievement] Failed query on save data (%d): %s", errcode, error )
  486. }
  487. else
  488. {
  489. }
  490. }
  491. stock client_printcolor(const id, const input[], any:...)
  492. {
  493. new iCount = 1, iPlayers[32]
  494. static szMsg[191]
  495.  
  496. vformat(szMsg, charsmax(szMsg), input, 3)
  497. replace_all(szMsg, 190, "!g", "^4")
  498. replace_all(szMsg, 190, "!y", "^1")
  499. replace_all(szMsg, 190, "!t", "^3")
  500.  
  501. if(id) iPlayers[0] = id
  502. else get_players(iPlayers, iCount, "ch")
  503.  
  504. for (new i = 0; i < iCount; i++)
  505. {
  506. if(is_user_connected(iPlayers[i]))
  507. {
  508. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
  509. write_byte(iPlayers[i])
  510. write_string(szMsg)
  511. message_end()
  512. }
  513. }
  514. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement