Advertisement
Guest User

zm_vip.sma

a guest
Aug 13th, 2019
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.39 KB | None | 0 0
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5. #include <fakemeta>
  6. #include <engine>
  7. #include <fun>
  8. #include <hamsandwich>
  9. #include <zombieplague>
  10.  
  11. ////////// PLUGIN SETTINGS //////////
  12. #define MODE 2
  13. //#define CHAT_PREFIX "[VIP]"
  14.  
  15. // (Only if MODE 1 is turrned OFF. Otherwise set flags in vips.ini.) //
  16. #define VIPACCES ADMIN_LEVEL_G
  17. #define MJACCES ADMIN_LEVEL_G
  18. ////////// SETTINGS END //////////
  19.  
  20. // Flags
  21. #define FLAG_A (1<<0)
  22. #define FLAG_B (1<<1)
  23. #define FLAG_C (1<<2)
  24. #define FLAG_D (1<<3)
  25. #define FLAG_E (1<<4)
  26. #define FLAG_K (1<<10)
  27.  
  28. #define VERSION "1.7.2"
  29.  
  30. #if cellbits == 32
  31. const OFFSET_CLIPAMMO = 51
  32. #else
  33. const OFFSET_CLIPAMMO = 65
  34. #endif
  35. const OFFSET_LINUX_WEAPONS = 4
  36.  
  37. const DMG_HEGRENADE = (1<<24)
  38.  
  39. #define set_flood(%1,%2) (%1 |= (1<<(%2&31)))
  40. #define clear_flood(%1,%2) (%1 &= ~(1<<(%2&31)))
  41. #define get_flood(%1,%2) (%1 & (1<<(%2&31)))
  42.  
  43. #if MODE & (1<<0) || MODE & (1<<1)
  44. new amx_password_field_string[30]
  45. #endif
  46. #if MODE & (1<<0)
  47. new g_user_privileges[33]
  48. enum _:database_items
  49. {
  50. auth[50],
  51. password[50],
  52. accessflags,
  53. flags
  54. }
  55. new vips_database[database_items]
  56. new Array:database_holder
  57. new g_hour_flags
  58. new g_hour
  59. #endif
  60. #if MODE & (1<<1)
  61. const ZV_PLUGIN_HANDLED = 97
  62. enum _:items
  63. {
  64. i_name[31],
  65. i_description[31],
  66. i_cost,
  67. i_team
  68. }
  69. new g_register_in_zp_extra
  70. new g_zp_extra_item_number
  71. new g_nonvip_tease
  72. new g_menu_close
  73. new extra_items[items]
  74. new Array:items_database
  75. new g_registered_items_count
  76. new g_forward_return
  77. new g_extra_item_selected
  78. new g_team[33]
  79. #endif
  80. #if MODE == 3
  81. new g_vip_buy_time
  82. new g_vip_cost_ammo
  83. new g_vip_buy_flags
  84. #endif
  85. new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }
  86. static const CONTACT[] = ""
  87. new g_jumps, g_allow_jump, g_armor, g_killammo, g_infectammo, g_infecthealth, g_nemhealth, g_show_vips,
  88. g_unlimited_clip, g_fall_damage, g_damage_reward, g_damage_increase, g_happy_hour, g_happy_hour_frag, g_happy_hour_ammo
  89. new happy_hour_on
  90. new g_bit
  91. new chache_g_jumps
  92. new maxplayers, g_msgSayText
  93. new jumpnum[33]
  94. new bool:dojump[33]
  95. new Float:g_damage[33]
  96.  
  97. public plugin_init() {
  98.  
  99. register_plugin("ZM VIP", VERSION, "aaarnas")
  100. RegisterHam(Ham_Spawn, "player", "FwdHamPlayerSpawnPost", 1)
  101. RegisterHam(Ham_Killed, "player", "fw_PlayerKilled_Post", 1)
  102. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  103. register_event("ResetHUD", "HUDReset", "be")
  104. register_event("HLTV", "chache_cvars", "a", "1=0", "2=0")
  105.  
  106. maxplayers = get_maxplayers()
  107. g_msgSayText = get_user_msgid("SayText")
  108.  
  109. register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
  110.  
  111. g_jumps = register_cvar("zp_vip_jumps", "1")
  112. g_allow_jump = register_cvar("zp_vip_allow_jump", "ab")
  113. g_armor = register_cvar("zp_vip_armor", "65")
  114. g_killammo = register_cvar("zp_vip_killammo", "2")
  115. g_infectammo = register_cvar("zp_vip_infectammo", "2")
  116. g_infecthealth = register_cvar("zp_vip_infecthealth", "300")
  117. g_nemhealth = register_cvar("zp_vip_nemextra", "1")
  118. g_show_vips = register_cvar("zp_vip_show", "1")
  119. g_unlimited_clip = register_cvar("zp_vip_unlimited_ammo", "0")
  120. g_fall_damage = register_cvar("zp_vip_no_fall_damage", "1")
  121. g_damage_reward = register_cvar("zp_vip_damage_reward", "500")
  122. g_damage_increase = register_cvar("zp_vip_damage_increase", "1.5")
  123. g_happy_hour = register_cvar("zp_vip_happy_hour", "23-06")
  124. g_happy_hour_frag = register_cvar("zp_vip_happy_hour_frag", "1")
  125. g_happy_hour_ammo = register_cvar("zp_vip_happy_hour_ammo", "1")
  126. register_cvar("amx_contactinfo", CONTACT, FCVAR_SERVER)
  127. register_cvar("zp_vip_version", VERSION, FCVAR_SERVER|FCVAR_SPONLY)
  128. set_cvar_string("zp_vip_version", VERSION)
  129.  
  130. #if MODE & (1<<0) || MODE & (1<<1)
  131. get_cvar_string("amx_password_field", amx_password_field_string, charsmax(amx_password_field_string))
  132. register_dictionary("zm_vip.txt")
  133. #endif
  134. #if MODE & (1<<0) && MODE & (1<<1)
  135. g_vip_cost_ammo = register_cvar("zp_vip_cost_ammo", "0")
  136. g_vip_buy_time = register_cvar("zp_vip_buy_time", "7")
  137. g_vip_buy_flags = register_cvar("zp_vip_buy_flags", "abcd")
  138. set_task(5.0,"check_date",0)
  139. #endif
  140. #if MODE & (1<<0)
  141. register_concmd("amx_reloadvips", "reload_vips", ADMIN_CFG)
  142. g_hour = register_cvar("zp_vip_hour", "23-06")
  143. g_hour_flags = register_cvar("zp_vip_hour_flags", "abe")
  144. reload_vips()
  145. #endif
  146. #if MODE & (1<<1)
  147. register_clcmd("say /vm", "menu_open")
  148. g_nonvip_tease = register_cvar("zp_vip_nonvip_tease", "1")
  149. g_register_in_zp_extra = register_cvar("zp_vip_register_in_zp_extra", "1")
  150. g_menu_close = register_cvar("zp_vip_menu_close", "1")
  151.  
  152. new temp[31]
  153. formatex(temp, 30, "%L", LANG_SERVER, "VIP_EXTRA_NAME")
  154. if(get_pcvar_num(g_register_in_zp_extra)) g_zp_extra_item_number = zp_register_extra_item(temp, 0, 0)
  155. g_extra_item_selected = CreateMultiForward("zv_extra_item_selected", ET_CONTINUE, FP_CELL, FP_CELL)
  156. #endif
  157. register_clcmd("say /vips", "print_adminlist")
  158. register_clcmd("say /vip", "ShowMotd")
  159. }
  160. public plugin_cfg()
  161. {
  162. new directory[31]
  163. get_configsdir(directory, 30)
  164. server_cmd("exec %s/zm_vip.cfg", directory)
  165. }
  166.  
  167. public chache_cvars() {
  168.  
  169. static string[5]
  170. get_pcvar_string(g_allow_jump, string, charsmax(string))
  171. g_bit = read_flags(string)
  172. chache_g_jumps = get_pcvar_num(g_jumps)
  173.  
  174. static hours[6], hour1s[3], hour2s[3], hour1, hour2, h, m, s
  175. get_pcvar_string(g_happy_hour, hours, charsmax(hours))
  176.  
  177. if(equal(hours, "off")) {happy_hour_on = false; return; }
  178.  
  179. strtok(hours, hour1s, charsmax(hour1s), hour2s, charsmax(hour2s), '-')
  180. hour1 = str_to_num(hour1s)
  181. hour2 = str_to_num(hour2s)
  182.  
  183. time(h, m, s)
  184. if(hour1 <= h <= hour2) happy_hour_on = true
  185. else happy_hour_on = false
  186. }
  187. #if MODE & (1<<1) || MODE & (1<<0)
  188. public plugin_natives() {
  189. #if MODE & (1<<1)
  190. register_native("zv_register_extra_item", "native_zv_register_extra_item", 1)
  191. #endif
  192. #if MODE & (1<<0)
  193. register_native("zv_get_user_flags", "native_zv_get_user_flags", 1)
  194. #endif
  195. }
  196. #endif
  197. public FwdHamPlayerSpawnPost(id) {
  198.  
  199. if(!is_user_alive(id)) return HAM_IGNORED;
  200. #if MODE & (1<<0)
  201. if(!(g_user_privileges[id] & FLAG_A))
  202. #else
  203. if(!(get_user_flags(id) & VIPACCES))
  204. #endif
  205. return PLUGIN_HANDLED;
  206.  
  207. if(pev(id, pev_armorvalue) < get_pcvar_num(g_armor))
  208. set_pev(id, pev_armorvalue, float(get_pcvar_num(g_armor)))
  209. return HAM_IGNORED;
  210. }
  211.  
  212. public fw_PlayerKilled_Post(victim, attacker) {
  213. #if MODE & (1<<0)
  214. if(1 <= attacker <= maxplayers && g_user_privileges[attacker] & FLAG_A) {
  215. #else
  216. if(1 <= attacker <= maxplayers && get_user_flags(attacker) & VIPACCES) {
  217. #endif
  218. if(is_user_alive(attacker) && zp_get_user_zombie(attacker) && !(zp_get_user_nemesis(attacker) && get_pcvar_num(g_nemhealth))) set_user_health(attacker, (get_user_health(attacker) + get_pcvar_num(g_infecthealth)))
  219. zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + get_pcvar_num(g_killammo))
  220.  
  221. if(happy_hour_on) {
  222.  
  223. static frag, ammo
  224. frag = get_pcvar_num(g_happy_hour_frag)
  225. ammo = get_pcvar_num(g_happy_hour_ammo)
  226.  
  227. if(frag) set_user_frags(attacker, get_user_frags(attacker)+frag)
  228. if(ammo) zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker)+ammo)
  229. }
  230.  
  231. }
  232. }
  233.  
  234. public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) {
  235.  
  236. if(victim == attacker)
  237. return HAM_IGNORED
  238.  
  239. if(damage_type & DMG_HEGRENADE)
  240. return HAM_IGNORED
  241.  
  242. #if MODE & (1<<0)
  243. if(g_user_privileges[victim] & FLAG_A) {
  244. #else
  245. if(get_user_flags(victim) & VIPACCES) {
  246. #endif
  247. if(damage_type & DMG_FALL && get_pcvar_num(g_fall_damage))
  248. return HAM_SUPERCEDE;
  249. }
  250.  
  251. if(!is_user_connected(attacker))
  252. return HAM_IGNORED
  253.  
  254. if(zp_get_user_zombie(attacker) || zp_get_user_survivor(attacker))
  255. return HAM_IGNORED
  256.  
  257. #if MODE & (1<<0)
  258. if(g_user_privileges[attacker] & FLAG_D) {
  259. #else
  260. if(get_user_flags(attacker) & VIPACCES) {
  261. #endif
  262. damage *= get_pcvar_float(g_damage_increase)
  263. SetHamParamFloat(4, damage)
  264. }
  265.  
  266. #if MODE & (1<<0)
  267. if(g_user_privileges[attacker] & FLAG_D) {
  268. #else
  269. if(get_user_flags(attacker) & VIPACCES) {
  270. #endif
  271. if(get_pcvar_num(g_damage_reward) > 0) {
  272. g_damage[attacker]+=damage
  273. if(g_damage[attacker] > get_pcvar_float(g_damage_reward)) {
  274. zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker)+1)
  275. g_damage[attacker] -= get_pcvar_float(g_damage_reward)
  276. }
  277. }
  278. }
  279.  
  280. return HAM_IGNORED
  281. }
  282.  
  283. public zp_user_infected_post(id, infector, nemesis) {
  284.  
  285. setVip()
  286. if(!(1<=infector<=maxplayers)) return;
  287.  
  288. #if MODE & (1<<0)
  289. if(g_user_privileges[infector] & FLAG_A) {
  290. #else
  291. if(get_user_flags(infector) & VIPACCES) {
  292. #endif
  293. if(is_user_alive(infector)) set_user_health(infector, (get_user_health(infector) + get_pcvar_num(g_infecthealth)))
  294. zp_set_user_ammo_packs(infector, zp_get_user_ammo_packs(infector) + get_pcvar_num(g_infectammo))
  295.  
  296. if(happy_hour_on) {
  297.  
  298. static frag, ammo
  299. frag = get_pcvar_num(g_happy_hour_frag)
  300. ammo = get_pcvar_num(g_happy_hour_ammo)
  301.  
  302. if(frag) set_user_frags(infector, get_user_frags(infector)+frag)
  303. if(ammo) zp_set_user_ammo_packs(infector, zp_get_user_ammo_packs(infector)+ammo)
  304. }
  305. }
  306. }
  307.  
  308. public client_connect(id) {
  309.  
  310. jumpnum[id] = 0
  311. g_damage[id] = 0.0
  312. dojump[id] = false
  313. #if MODE & (1<<0)
  314. set_flags(id)
  315. if(get_pcvar_num(g_show_vips) == 1 && g_user_privileges[id] & FLAG_A) {
  316. #else
  317. if(get_pcvar_num(g_show_vips) == 1 && get_user_flags(id) & VIPACCES) {
  318. #endif
  319. new name[100]
  320. get_user_name(id, name, 100)
  321. client_printcolor(0, "/g%L", LANG_PLAYER, "VIP_CONNECTED", name)
  322. }
  323. #if MODE & (1<<0)
  324. else {
  325. static hours[6], hour1s[3], hour2s[3], hour1, hour2, h, m, s
  326. get_pcvar_string(g_hour, hours, charsmax(hours))
  327.  
  328. if(equal(hours, "off")) return;
  329.  
  330. strtok(hours, hour1s, charsmax(hour1s), hour2s, charsmax(hour2s), '-')
  331. hour1 = str_to_num(hour1s)
  332. hour2 = str_to_num(hour2s)
  333.  
  334. time(h, m, s)
  335. if((hour1 <= h <= hour2) || (hour1 >= h >= hour2)) {
  336.  
  337. new fflags[10]
  338. get_pcvar_string(g_hour_flags, fflags, charsmax(fflags))
  339. g_user_privileges[id] = read_flags(fflags)
  340. }
  341. }
  342. #endif
  343. }
  344. #if MODE & (1<<1)
  345. public zp_extra_item_selected(id, item_id)
  346. if(item_id == g_zp_extra_item_number)
  347. menu_open(id)
  348.  
  349. public menu_open(id) {
  350. #if MODE & (1<<0)
  351. if(g_user_privileges[id] & FLAG_E)
  352. vip_menu(id)
  353. #else
  354. if(get_user_flags(id) & VIPACCES)
  355. vip_menu(id)
  356. #endif
  357. #if MODE & (1<<0)
  358. else if(get_pcvar_num(g_vip_cost_ammo) != 0)
  359. get_pcvar_num(g_nonvip_tease) ? vip_menu(id) : buy_meniu(id)
  360. #endif
  361. else client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NOT_A_VIP")
  362. return ZP_PLUGIN_HANDLED
  363. }
  364.  
  365. public vip_menu(id)
  366. {
  367. if(g_registered_items_count == 0) {
  368. client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "OFF")
  369. return;
  370. }
  371. new holder[150], menu
  372. formatex(holder, charsmax(holder), "\r%L", id, "MENU_TOP")
  373. menu = menu_create(holder, "vip_menu_handler")
  374. new i, team_check, num[3], ammo_packs, check
  375. check = 0
  376. ammo_packs = zp_get_user_ammo_packs(id)
  377.  
  378. switch(zp_get_user_zombie(id)) {
  379.  
  380. case 0: {
  381. if(zp_get_user_survivor(id)) team_check = ZP_TEAM_SURVIVOR
  382. else team_check = ZP_TEAM_HUMAN
  383. }
  384. case 1: {
  385. if(zp_get_user_nemesis(id)) team_check = ZP_TEAM_NEMESIS
  386. else team_check = ZP_TEAM_ZOMBIE
  387. }
  388. }
  389.  
  390. if(zp_get_user_zombie(id) && !zp_get_user_nemesis(id)) team_check |= FLAG_A
  391. else if(!zp_get_user_zombie(id)) team_check |= FLAG_B
  392. else if(zp_get_user_nemesis(id)) team_check |= FLAG_C
  393. else if(zp_get_user_survivor(id)) team_check |= FLAG_D
  394. g_team[id] = team_check
  395. for(i=0; i < g_registered_items_count; i++) {
  396. ArrayGetArray(items_database, i, extra_items)
  397. if(extra_items[i_team] == 0 || g_team[id] & extra_items[i_team]) {
  398. formatex(holder, charsmax(holder), "%s \r[%s] %s[%d %L]", extra_items[i_name], extra_items[i_description], ammo_packs < extra_items[i_cost] ? "\r" : "\y", extra_items[i_cost], id, "AMMO")
  399. formatex(num, 2, "%d", i)
  400. menu_additem(menu, holder, num, 0)
  401. check++
  402. }
  403. }
  404. if(check == 0) {
  405. client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NO_ITEMS")
  406. return;
  407. }
  408. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  409. formatex(holder, charsmax(holder), "%L", id, "NEXT")
  410. menu_setprop(menu, MPROP_NEXTNAME, holder)
  411. formatex(holder, charsmax(holder), "%L", id, "BACK")
  412. menu_setprop(menu, MPROP_BACKNAME, holder)
  413. formatex(holder, charsmax(holder), "%L", id, "EXIT")
  414. menu_setprop(menu, MPROP_EXITNAME, holder)
  415. menu_display(id, menu, 0)
  416. }
  417.  
  418. public vip_menu_handler(id, menu, item)
  419. {
  420. if( item == MENU_EXIT )
  421. {
  422. menu_destroy(menu)
  423. return PLUGIN_HANDLED
  424. }
  425.  
  426. #if MODE & (1<<0)
  427. if(get_pcvar_num(g_nonvip_tease) && !(g_user_privileges[id] & FLAG_A)) {
  428. #if MODE & (1<<0)
  429. buy_meniu(id)
  430. #else
  431. client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NOT_A_VIP")
  432. #endif
  433. menu_destroy(menu)
  434. return PLUGIN_HANDLED;
  435. }
  436. #else
  437. if(get_pcvar_num(g_nonvip_tease) && !(get_user_flags(id) & VIPACCES)) {
  438. #if MODE & (1<<0)
  439. buy_meniu(id)
  440. #else
  441. client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "NOT_A_VIP")
  442. #endif
  443. menu_destroy(menu)
  444. return PLUGIN_HANDLED;
  445. }
  446. #endif
  447. new team_check
  448. switch(zp_get_user_zombie(id)) {
  449.  
  450. case 0: {
  451. if(zp_get_user_survivor(id)) team_check = ZP_TEAM_SURVIVOR
  452. else team_check = ZP_TEAM_HUMAN
  453. }
  454. case 1: {
  455. if(zp_get_user_nemesis(id)) team_check = ZP_TEAM_NEMESIS
  456. else team_check = ZP_TEAM_ZOMBIE
  457. }
  458. }
  459.  
  460. if(g_team[id] != team_check) {
  461.  
  462. menu_destroy(menu)
  463. vip_menu(id)
  464. return PLUGIN_HANDLED;
  465. }
  466.  
  467. new data[6], iName[64], item_id, ammo_packs
  468. new aaccess, callback
  469. menu_item_getinfo(menu, item, aaccess, data,5, iName, 63, callback)
  470. item_id = str_to_num(data)
  471. ammo_packs = zp_get_user_ammo_packs(id)
  472. ArrayGetArray(items_database, item_id, extra_items)
  473. if(ammo_packs >= extra_items[i_cost]) zp_set_user_ammo_packs(id, ammo_packs - extra_items[i_cost])
  474. else {
  475. client_printcolor(id, "/g%s %L", CHAT_PREFIX, id, "MISSING_AMMO", extra_items[i_cost]-ammo_packs)
  476. if(g_menu_close) menu_destroy(menu)
  477. else vip_menu(id)
  478. return PLUGIN_HANDLED
  479. }
  480. item_id++
  481. ExecuteForward(g_extra_item_selected, g_forward_return, id, item_id)
  482. if (g_forward_return >= ZV_PLUGIN_HANDLED)
  483. zp_set_user_ammo_packs(id, ammo_packs)
  484.  
  485. if(!g_menu_close) vip_menu(id)
  486.  
  487. menu_destroy(menu)
  488. return PLUGIN_HANDLED
  489. }
  490. #endif
  491. #if MODE & (1<<0) && MODE & (1<<1)
  492. public buy_meniu(id)
  493. {
  494. new holder[150], menu
  495. formatex(holder, charsmax(holder), "\r%L", id, "BUY_MENU_TOP", get_pcvar_num(g_vip_cost_ammo), get_pcvar_num(g_vip_buy_time))
  496. menu = menu_create(holder, "buy_menu_handler")
  497. new callback = menu_makecallback("_menu_callback")
  498. formatex(holder, charsmax(holder), "%L", id, "BUY_MENU_TYPE1")
  499. menu_additem(menu, holder)
  500. formatex(holder, charsmax(holder), "%L", id, "BUY_MENU_TYPE2")
  501. menu_additem(menu, holder, _, _, callback)
  502. formatex(holder, charsmax(holder), "%L", id, "BUY_MENU_TYPE3")
  503. menu_additem(menu, holder)
  504.  
  505. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  506. formatex(holder, charsmax(holder), "%L", id, "EXIT")
  507. menu_setprop(menu, MPROP_EXITNAME, holder)
  508. menu_display(id, menu, 0)
  509. }
  510.  
  511. public buy_menu_handler(id, menu, item)
  512. {
  513. if( item == MENU_EXIT )
  514. {
  515. menu_destroy(menu)
  516. return PLUGIN_HANDLED
  517. }
  518.  
  519. new ammo_packs = zp_get_user_ammo_packs(id)
  520. if(item > 0) {
  521. if(ammo_packs >= get_pcvar_num(g_vip_cost_ammo)) {
  522. amx_tempadmin(id, item)
  523. zp_set_user_ammo_packs(id, ammo_packs - get_pcvar_num(g_vip_cost_ammo))
  524. client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "BOUGHT_VIP", get_pcvar_num(g_vip_buy_time))
  525.  
  526. }
  527. else client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "MISSING_AMMO", get_pcvar_num(g_vip_cost_ammo)-ammo_packs)
  528. }
  529. else {
  530. nick_buy_meniu(id)
  531. return PLUGIN_HANDLED
  532. }
  533.  
  534. menu_destroy(menu)
  535. return PLUGIN_HANDLED
  536. }
  537.  
  538. public nick_buy_meniu(id)
  539. {
  540. new buttons_string[16], menu_string[151], menu_item[81], menu, client_password[20]
  541. get_user_info(id, amx_password_field_string, client_password, charsmax(client_password))
  542. formatex(menu_string, 150, "\r%L", id, "NICK_BUY_MENU_TOP", client_password)
  543. menu = menu_create(menu_string, "nick_buy_menu_handler")
  544.  
  545. formatex(menu_item, 80, "%L", id, "NICK_BUY_MENU_TYPE1")
  546. menu_additem(menu, menu_item)
  547. formatex(menu_item, 80, "%L", id, "NICK_BUY_MENU_TYPE2")
  548. menu_additem(menu, menu_item)
  549. formatex(menu_item, 80, "%L", id, "NICK_BUY_MENU_TYPE3", get_pcvar_num(g_vip_cost_ammo) ,get_pcvar_num(g_vip_buy_time))
  550. menu_additem(menu, menu_item)
  551.  
  552. menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
  553. formatex(buttons_string, 15, "%L", id, "BACK")
  554. menu_setprop(menu, MPROP_EXITNAME, buttons_string)
  555. menu_display(id, menu, 0)
  556.  
  557. }
  558.  
  559. public nick_buy_menu_handler(id, menu, item)
  560. {
  561. if( item == MENU_EXIT )
  562. {
  563. buy_meniu(id)
  564. return PLUGIN_HANDLED
  565. }
  566.  
  567. switch(item) {
  568. case 0: {
  569. generate_password(id)
  570. set_task(0.2, "menu_delay", id)
  571. }
  572. case 1: nick_buy_meniu_sec(id)
  573. case 2: {
  574.  
  575. new ammo_packs = zp_get_user_ammo_packs(id)
  576. if(ammo_packs >= get_pcvar_num(g_vip_cost_ammo)) {
  577. amx_tempadmin(id, 0)
  578. zp_set_user_ammo_packs(id, ammo_packs - get_pcvar_num(g_vip_cost_ammo))
  579. client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "BOUGHT_VIP", get_pcvar_num(g_vip_buy_time))
  580.  
  581. }
  582. else client_printcolor(id, "/g%s /y%L", CHAT_PREFIX, id, "MISSING_AMMO", get_pcvar_num(g_vip_cost_ammo)-ammo_packs)
  583.  
  584. menu_destroy(menu)
  585. return PLUGIN_HANDLED
  586. }
  587. }
  588.  
  589. menu_destroy(menu)
  590. return PLUGIN_HANDLED
  591. }
  592. public nick_buy_meniu_sec(id)
  593. {
  594. new holder[150], menu
  595. formatex(holder, charsmax(holder), "\r%L", id, "NICK_BUY_MENU_SEC_TOP")
  596. menu = menu_create(holder, "nick_buy_menu_sec_handler")
  597.  
  598. formatex(holder, charsmax(holder), "%L", id, "BACK")
  599. menu_additem(menu, holder)
  600.  
  601. menu_setprop(menu, MPROP_EXIT, MEXIT_NEVER)
  602. menu_display(id, menu, 0)
  603. }
  604.  
  605. public nick_buy_menu_sec_handler(id, menu, item)
  606. {
  607. nick_buy_meniu(id)
  608. menu_destroy(menu)
  609. return PLUGIN_HANDLED;
  610. }
  611.  
  612. public _menu_callback(id, menu, item) {
  613.  
  614. if(item == 1) {
  615. new authid[30]
  616. get_user_authid(id, authid, charsmax(authid))
  617. if(equal(authid, "STEAM_0", 7)) return ITEM_ENABLED
  618. else return ITEM_DISABLED
  619. }
  620.  
  621. return ITEM_ENABLED
  622. }
  623.  
  624. public menu_delay(id) nick_buy_meniu(id)
  625. #endif
  626. public message_cur_weapon(msg_id, msg_dest, msg_entity)
  627. {
  628. if (!get_pcvar_num(g_unlimited_clip)) return
  629. #if MODE & (1<<0)
  630. if (!(g_user_privileges[msg_entity] & FLAG_C)) return
  631. #else
  632. if (!(get_user_flags(msg_entity) & VIPACCES)) return
  633. #endif
  634. if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1) return
  635.  
  636. static weapon, clip
  637. weapon = get_msg_arg_int(2)
  638. clip = get_msg_arg_int(3)
  639.  
  640. if (MAXCLIP[weapon] > 2)
  641. {
  642. set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon])
  643.  
  644. if (clip < 2)
  645. {
  646. static wname[32], weapon_ent
  647. get_weaponname(weapon, wname, sizeof wname - 1)
  648. weapon_ent = find_ent_by_owner(-1, wname, msg_entity)
  649. fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon])
  650. }
  651. }
  652. }
  653.  
  654. public HUDReset()
  655. setVip()
  656.  
  657. public setVip()
  658. {
  659. new players[32], pNum
  660. get_players(players, pNum, "a")
  661.  
  662. for (new i = 0; i < pNum; i++)
  663. {
  664. new id = players[i]
  665. #if MODE & (1<<0)
  666. if (g_user_privileges[id] & FLAG_A)
  667. #else
  668. if (get_user_flags(id) & VIPACCES)
  669. #endif
  670. {
  671. message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
  672. write_byte(id)
  673. write_byte(4)
  674. message_end()
  675. }
  676. }
  677. return PLUGIN_HANDLED
  678. }
  679.  
  680. public print_adminlist(user)
  681. {
  682. new adminnames[33][32]
  683. new message[256]
  684. new contactinfo[256], contact[112]
  685. new id, count, x, len
  686.  
  687. for(id = 1 ; id <= maxplayers ; id++)
  688. if(is_user_connected(id))
  689. #if MODE & (1<<0)
  690. if(g_user_privileges[id] & FLAG_A)
  691. #else
  692. if(get_user_flags(id) & VIPACCES)
  693. #endif
  694. get_user_name(id, adminnames[count++], 31)
  695.  
  696. len = format(message, 255, "%L ", id, "VIP_STATUS")
  697. if(count > 0) {
  698. for(x = 0 ; x < count ; x++) {
  699. len += format(message[len], 255-len, "%s%s ", adminnames[x], x < (count-1) ? ", ":"")
  700. if(len > 96 ) {
  701. client_printcolor(user, "/g%s", message)
  702. len = format(message, 255, "")
  703. }
  704. }
  705. client_printcolor(user, "/g%s", message)
  706. }
  707. else {
  708. len += format(message[len], 255-len, "%L ", id, "VIP_STATUS_N")
  709. client_printcolor(user, "/g%s", message)
  710. }
  711.  
  712. get_cvar_string("amx_contactinfo", contact, 63)
  713. if(contact[0]) {
  714. format(contactinfo, 111, "%L ", id, "VIP_STATUS_CON", contact)
  715. client_printcolor(user, "/g%s", contactinfo)
  716. }
  717.  
  718. }
  719.  
  720. public client_disconnect(id)
  721. {
  722. jumpnum[id] = 0
  723. g_damage[id] = 0.0
  724. dojump[id] = false
  725. }
  726.  
  727. public client_PreThink(id)
  728. {
  729. #if MODE & (1<<0)
  730. if(!is_user_alive(id) || !g_jumps || (!(g_user_privileges[id] & FLAG_B))) return PLUGIN_CONTINUE
  731. #else
  732. if(!is_user_alive(id) || !g_jumps || (!(get_user_flags(id) & MJACCES))) return PLUGIN_CONTINUE
  733. #endif
  734. static nbut, obut, fflags
  735. nbut= get_user_button(id)
  736. obut = get_user_oldbutton(id)
  737. fflags = get_entity_flags(id)
  738.  
  739. if((nbut & IN_JUMP) && !(fflags & FL_ONGROUND) && !(obut & IN_JUMP))
  740. {
  741. if(jumpnum[id] < chache_g_jumps &&
  742. ((g_bit & FLAG_D && zp_get_user_nemesis(id)) ||
  743. (g_bit & FLAG_C && zp_get_user_survivor(id)) ||
  744. (g_bit & FLAG_A && !zp_get_user_zombie(id)) ||
  745. (g_bit & FLAG_B && zp_get_user_zombie(id) && !zp_get_user_nemesis(id))))
  746. {
  747. dojump[id] = true
  748. jumpnum[id]++
  749. return PLUGIN_CONTINUE
  750. }
  751. }
  752. if((nbut & IN_JUMP) && (fflags & FL_ONGROUND))
  753. {
  754. jumpnum[id] = 0
  755. return PLUGIN_CONTINUE
  756. }
  757.  
  758. return PLUGIN_CONTINUE
  759. }
  760.  
  761. public client_PostThink(id)
  762. {
  763. #if MODE & (1<<0)
  764. if(!is_user_alive(id) || !get_pcvar_num(g_jumps) || (!(g_user_privileges[id] & FLAG_B))) return PLUGIN_CONTINUE
  765. #else
  766. if(!is_user_alive(id) || !get_pcvar_num(g_jumps) || (!(get_user_flags(id) & MJACCES))) return PLUGIN_CONTINUE
  767. #endif
  768. if(dojump[id] == true)
  769. {
  770. static Float:velocity[3]
  771. entity_get_vector(id,EV_VEC_velocity,velocity)
  772. velocity[2] = random_float(265.0,285.0)
  773. entity_set_vector(id,EV_VEC_velocity,velocity)
  774. dojump[id] = false
  775. return PLUGIN_CONTINUE
  776. }
  777. return PLUGIN_CONTINUE
  778. }
  779.  
  780. public ShowMotd(id)
  781. show_motd(id, "vip.txt")
  782. #if MODE & (1<<0)
  783. public reload_vips() {
  784.  
  785. if(database_holder) ArrayDestroy(database_holder)
  786. database_holder = ArrayCreate(database_items)
  787. new configsDir[64]
  788. get_configsdir(configsDir, 63)
  789. format(configsDir, 63, "%s/vips.ini", configsDir)
  790.  
  791. new File=fopen(configsDir,"r");
  792.  
  793. if (File)
  794. {
  795. static Text[512], Flags[32], AuthData[50], Privileges_Flags[32], Password[50]
  796. while (!feof(File))
  797. {
  798. fgets(File,Text,sizeof(Text)-1);
  799.  
  800. trim(Text);
  801.  
  802. // comment
  803. if (Text[0]==';')
  804. {
  805. continue;
  806. }
  807.  
  808. Flags[0]=0;
  809. AuthData[0]=0;
  810. Privileges_Flags[0]=0;
  811. Password[0]=0;
  812.  
  813. // not enough parameters
  814. if (parse(Text,AuthData,sizeof(AuthData)-1,Password,sizeof(Password)-1,Privileges_Flags,sizeof(Privileges_Flags)-1,Flags,sizeof(Flags)-1) < 2)
  815. {
  816. continue;
  817. }
  818.  
  819. vips_database[auth] = AuthData
  820. vips_database[password] = Password
  821. vips_database[accessflags] = read_flags(Privileges_Flags)
  822. vips_database[flags] = read_flags(Flags)
  823. ArrayPushArray(database_holder, vips_database)
  824. }
  825.  
  826. fclose(File);
  827. }
  828. else log_amx("Error: vips.ini file doesn't exist")
  829. }
  830. #endif
  831. #if MODE & (1<<0) && MODE & (1<<1)
  832. public check_date()
  833. {
  834. new holder[20]
  835. new y, m ,d
  836. date(y, m, d)
  837. format(holder, charsmax(holder), "m%dd%dy%d", m, d, y)
  838.  
  839. new configdir[200]
  840. get_configsdir(configdir,199)
  841.  
  842. new configfile1[200]
  843.  
  844. format(configfile1,199,"%s/vips.ini",configdir)
  845.  
  846. new text[512], len
  847. new pnum = file_size(configfile1,1)
  848. for(new i = 1; i < pnum; i++)
  849. {
  850. read_file(configfile1, i, text, 511, len)
  851. if ( contain(text, holder) != -1 )
  852. {
  853. DeleteLine(configfile1, i)
  854. }
  855. }
  856. return PLUGIN_HANDLED
  857. }
  858.  
  859. public amx_tempadmin(id, type)
  860. {
  861. new authid[31], ip[31], name[51], client_password[20], p_flags[21], sdate[20]
  862. get_pcvar_string(g_vip_buy_flags, p_flags, charsmax(p_flags))
  863. get_user_authid(id, authid, charsmax(authid))
  864. get_user_ip(id, ip, charsmax(ip), 1)
  865. get_user_name(id, name, charsmax(name))
  866. get_user_info(id, amx_password_field_string, client_password, charsmax(client_password))
  867.  
  868. get_date(get_pcvar_num(g_vip_buy_time), sdate, charsmax(sdate))
  869.  
  870. new holder[200]
  871. switch(type) {
  872. case 0: formatex(holder, charsmax(holder), "^"%s^" ^"%s^" ^"%s^" ^"b^"; Exp: %s", name, client_password, p_flags, sdate)
  873. case 1: formatex(holder, charsmax(holder), "^"%s^" ^"^" ^"%s^" ^"ce^"; Exp: %s", authid, p_flags, sdate)
  874. case 2: formatex(holder, charsmax(holder), "^"%s^" ^"^" ^"%s^" ^"de^"; Exp: %s", ip, p_flags, sdate)
  875. }
  876.  
  877. new configdir[200]
  878. get_configsdir(configdir, 199)
  879. new configfile1[200]
  880. format(configfile1,199,"%s/vips.ini",configdir)
  881. write_file(configfile1, holder, -1)
  882. server_cmd("amx_reloadvips")
  883. set_task(1.0, "set_flags", id)
  884.  
  885. }
  886.  
  887. DeleteLine( const szFilename[ ], const iLine )
  888. {
  889. new iFile = fopen( szFilename, "rt" );
  890. if( !iFile )
  891. {
  892. return;
  893. }
  894. static const szTempFilename[ ] = "delete_line.txt";
  895. new iTempFile = fopen( szTempFilename, "wt" );
  896.  
  897. new szData[ 256 ], iLineCount, bool:bReplaced = false;
  898. while( !feof( iFile ) )
  899. {
  900. fgets( iFile, szData, 255 );
  901.  
  902. if( iLineCount++ == iLine )
  903. {
  904. bReplaced = true;
  905. }
  906. else
  907. {
  908. fputs( iTempFile, szData );
  909. }
  910. }
  911.  
  912. fclose( iFile );
  913. fclose( iTempFile );
  914.  
  915. if( bReplaced )
  916. {
  917. delete_file( szFilename );
  918.  
  919. while( !rename_file( szTempFilename, szFilename, 1 ) ) { }
  920. }
  921. else
  922. {
  923. delete_file( szTempFilename );
  924. }
  925. }
  926.  
  927. stock get_date(days, string[], chars) {
  928.  
  929. new y, m, d
  930. date(y, m ,d)
  931.  
  932. d+=days
  933.  
  934. new go = true
  935. while(go) {
  936. switch(m) {
  937. case 1,3, 5, 7, 8, 10: {
  938. if(d>31) { d=d-31; m++; }
  939. else go = false
  940. }
  941. case 2: {
  942. if(d>28) { d=d-28; m++; }
  943. else go = false
  944. }
  945. case 4, 6, 9, 11: {
  946. if(d>30) { d=d-30; m++; }
  947. else go = false
  948. }
  949. case 12: {
  950. if(d>31) { d=d-31; y++; m=1; }
  951. else go = false
  952. }
  953. }
  954. }
  955. formatex(string, chars, "m%dd%dy%d", m, d ,y)
  956. }
  957. #endif
  958.  
  959. stock client_printcolor(id, const message[], any:...)
  960. {
  961. static buffer[512], argscount
  962. argscount = numargs()
  963.  
  964. if (!id) {
  965.  
  966. static players[32], num, player, i, i2
  967. get_players(players, num , "ch")
  968.  
  969. for (i = 0; i < num; i++) {
  970.  
  971. player = players[i]
  972.  
  973. static changed[5], changedcount
  974. changedcount = 0
  975.  
  976. for (i2 = 2; i2 < argscount; i2++)
  977. {
  978. if (getarg(i2) == LANG_PLAYER)
  979. {
  980. setarg(i2, 0, player)
  981. changed[changedcount] = i2
  982. changedcount++
  983. }
  984. }
  985.  
  986. vformat(buffer, charsmax(buffer), message, 3)
  987.  
  988. replace_all(buffer, charsmax(buffer), "/g", "^4")
  989. replace_all(buffer, charsmax(buffer), "/y", "^1")
  990.  
  991. message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
  992. write_byte(player)
  993. write_string(buffer)
  994. message_end()
  995.  
  996. for (i2 = 0; i2 < changedcount; i2++)
  997. setarg(changed[i2], 0, LANG_PLAYER)
  998. }
  999. }
  1000. else {
  1001.  
  1002. vformat(buffer, charsmax(buffer), message, 3)
  1003.  
  1004. replace_all(buffer, charsmax(buffer), "/g", "^4")
  1005. replace_all(buffer, charsmax(buffer), "/y", "^1")
  1006.  
  1007. message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, id)
  1008. write_byte(id)
  1009. write_string(buffer)
  1010. message_end()
  1011. }
  1012. }
  1013.  
  1014. stock fm_find_ent_by_owner(entity, const classname[], owner)
  1015. {
  1016. while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && pev(entity, pev_owner) != owner) {}
  1017.  
  1018. return entity;
  1019. }
  1020.  
  1021. stock fm_set_weapon_ammo(entity, amount)
  1022. {
  1023. set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
  1024. }
  1025. #if MODE & (1<<0)
  1026. public set_flags(id) {
  1027.  
  1028. static authid[31], ip[31], name[51], index, client_password[30], size, log_flags[11]
  1029. get_user_authid(id, authid, 30)
  1030. get_user_ip(id, ip, 30, 1)
  1031. get_user_name(id, name, 50)
  1032. get_user_info(id, amx_password_field_string, client_password, charsmax(client_password))
  1033.  
  1034. g_user_privileges[id] = 0
  1035. size = ArraySize(database_holder)
  1036. for(index=0; index < size ; index++) {
  1037. ArrayGetArray(database_holder, index, vips_database)
  1038. if(vips_database[flags] & FLAG_D) {
  1039. if(equal(ip, vips_database[auth])) {
  1040. if(!(vips_database[flags] & FLAG_E)) {
  1041. if(equal(client_password, vips_database[password]))
  1042. g_user_privileges[id] = vips_database[accessflags]
  1043. else if(vips_database[flags] & FLAG_A) {
  1044. server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
  1045. break
  1046. }
  1047. }
  1048. else g_user_privileges[id] = vips_database[accessflags]
  1049. get_flags(vips_database[accessflags], log_flags, 10)
  1050. log_amx("%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
  1051. break
  1052. }
  1053. }
  1054. else if(vips_database[flags] & FLAG_C) {
  1055. if(equal(authid, vips_database[auth])) {
  1056. if(!(vips_database[flags] & FLAG_E)) {
  1057. if(equal(client_password, vips_database[password]))
  1058. g_user_privileges[id] = vips_database[accessflags]
  1059. else if(vips_database[flags] & FLAG_A) {
  1060. server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
  1061. break
  1062. }
  1063. }
  1064. else g_user_privileges[id] = vips_database[accessflags]
  1065. get_flags(vips_database[accessflags], log_flags, 10)
  1066. log_amx("%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
  1067. break
  1068. }
  1069. }
  1070. else {
  1071. if(vips_database[flags] & FLAG_K) {
  1072. if((vips_database[flags] & FLAG_B && contain(name, vips_database[auth]) != -1) || equal(name, vips_database[auth])) {
  1073. if(!(vips_database[flags] & FLAG_E)) {
  1074. if(equal(client_password, vips_database[password]))
  1075. g_user_privileges[id] = vips_database[accessflags]
  1076. else if(vips_database[flags] & FLAG_A) {
  1077. server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
  1078. break
  1079. }
  1080. }
  1081. else g_user_privileges[id] = vips_database[accessflags]
  1082. get_flags(vips_database[accessflags], log_flags, 10)
  1083. log_amx("%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
  1084. break
  1085. }
  1086. }
  1087. else {
  1088. if((vips_database[flags] & FLAG_B && containi(name, vips_database[auth]) != -1) || equali(name, vips_database[auth])) {
  1089. if(!(vips_database[flags] & FLAG_E)) {
  1090. if(equal(client_password, vips_database[password]))
  1091. g_user_privileges[id] = vips_database[accessflags]
  1092. else if(vips_database[flags] & FLAG_A) {
  1093. server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "INV_PAS")
  1094. break
  1095. }
  1096. }
  1097. else g_user_privileges[id] = vips_database[accessflags]
  1098. get_flags(vips_database[accessflags], log_flags, 10)
  1099. log_amx("%L",LANG_PLAYER, "AUTHORISED", name, authid, ip, log_flags)
  1100. break
  1101. }
  1102. }
  1103. }
  1104. }
  1105. }
  1106. #endif
  1107. #if MODE & (1<<0) && MODE & (1<<1)
  1108. stock generate_password(id) {
  1109.  
  1110. new password_holder[30]
  1111. formatex(password_holder, charsmax(password_holder), "%d%d%d%d%d", random(10), random(10), random(10), random(10), random(10))
  1112. client_cmd(id, "setinfo %s %s", amx_password_field_string, password_holder)
  1113. }
  1114. #endif
  1115. #if MODE & (1<<0)
  1116. public native_zv_get_user_flags(id)
  1117. return g_user_privileges[id]
  1118. #endif
  1119. #if MODE & (1<<1)
  1120. public native_zv_register_extra_item(const item_name[], const item_discription[], item_cost, item_team)
  1121. {
  1122. if(!items_database) items_database = ArrayCreate(items)
  1123.  
  1124. param_convert(1)
  1125. param_convert(2)
  1126. copy(extra_items[i_name], 30, item_name)
  1127. copy(extra_items[i_description], 30, item_discription)
  1128. extra_items[i_cost] = item_cost
  1129. extra_items[i_team] = item_team
  1130. ArrayPushArray(items_database, extra_items)
  1131. g_registered_items_count++
  1132.  
  1133. return g_registered_items_count
  1134. }
  1135.  
  1136. public plugin_end() if(items_database) ArrayDestroy(items_database)
  1137. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement