hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.08. 06:00



Jelenlévő felhasználók

Jelenleg 357 felhasználó van jelen :: 0 regisztrált, 0 rejtett és 357 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: nincs regisztrált felhasználó az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 6 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Zombie V.i.P
HozzászólásElküldve: 2015.01.04. 14:23 
Offline
Újonc
Avatar

Csatlakozott: 2014.12.29. 20:42
Hozzászólások: 9
sziasztok.
ebben tudnátok segíteni?
Mert nem értem..
SMA Forráskód: [ Mindet kijelol ]
  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_H
  17. #define MJACCES ADMIN_LEVEL_H
  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", "off")
  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", "off")
  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) {
  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
  1138.  


Csatolmányok:
de_inferno0000.JPG
de_inferno0000.JPG [ 557.58 KiB | Megtekintve 1464 alkalommal ]

_________________
2015* - Zm Szervere>>
Kép


A hozzászólást 1 alkalommal szerkesztették, utoljára jacsopapa111 2015.01.04. 14:34-kor.
Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Zombie V.i.P
HozzászólásElküldve: 2015.01.04. 14:24 
Offline
Beavatott

Csatlakozott: 2014.12.30. 14:09
Hozzászólások: 94
Megköszönt másnak: 1 alkalommal
Megköszönték neki: 16 alkalommal
Hát így nem lehet semmit ha nincs forráskód......

_________________
https://www.youtube.com/watch?v=UAg0wCTanbM


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Zombie V.i.P
HozzászólásElküldve: 2015.01.04. 14:36 
Offline
Nagyúr

Csatlakozott: 2014.05.10. 16:41
Hozzászólások: 721
Megköszönt másnak: 43 alkalommal
Megköszönték neki: 64 alkalommal
Azért mert nincs a VIP pluginhoz hozzá tartozó itemek..


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Zombie V.i.P
HozzászólásElküldve: 2015.01.04. 14:38 
Offline
Újonc
Avatar

Csatlakozott: 2014.12.29. 20:42
Hozzászólások: 9
És olyant honnan lehet szerezzni? :D

_________________
2015* - Zm Szervere>>
Kép


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Zombie V.i.P
HozzászólásElküldve: 2015.01.04. 14:41 
Offline
Nagyúr

Csatlakozott: 2014.05.10. 16:41
Hozzászólások: 721
Megköszönt másnak: 43 alkalommal
Megköszönték neki: 64 alkalommal
1:
SMA Forráskód: [ Mindet kijelol ]
  1. /*================================================================================
  2.  
  3. [ZP] Extra Item: Advanced Antidote Gun
  4. Copyright (C) 2010 by meTaLiCroSS, Vińa del Mar, Chile
  5.  
  6. This program is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation, either version 3 of the License, or
  9. (at your option) any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program. If not, see <http://www.gnu.org/licenses/>.
  18.  
  19. In addition, as a special exception, the author gives permission to
  20. link the code of this program with the Half-Life Game Engine ("HL
  21. Engine") and Modified Game Libraries ("MODs") developed by Valve,
  22. L.L.C ("Valve"). You must obey the GNU General Public License in all
  23. respects for all of the code used other than the HL Engine and MODs
  24. from Valve. If you modify this file, you may extend this exception
  25. to your version of the file, but you are not obligated to do so. If
  26. you do not wish to do so, delete this exception statement from your
  27. version.
  28.  
  29. ** Credits:
  30.  
  31. - ConnorMcLeod: His MaxClip and Reload Speed plugin
  32. - KCE: His "Blocking weapon fire" tutorial
  33. - XxAvalanchexX: His "Beampoints from a player's weapon tip" tutorial
  34.  
  35. =================================================================================*/
  36.  
  37. #include <amxmodx>
  38. #include <hamsandwich>
  39. #include <fun>
  40. #include <engine>
  41. #include <cstrike>
  42. #include <fakemeta>
  43. #include <xs>
  44. #include <zombieplague>
  45. #include <zmvip>
  46.  
  47. /*================================================================================
  48.  [Customizations]
  49. =================================================================================*/
  50.  
  51. // Item Cost
  52. const antidotegun_ap_cost = 30
  53.  
  54. // Sprites
  55. new const antidotegun_sprite_beam[] = "sprites/zbeam6.spr"
  56. new const antidotegun_sprite_ring[] = "sprites/shockwave.spr"
  57.  
  58. // Weapon Fire Sound, you can add more than 1
  59. new const antidotegun_firesound[][] = { "weapons/gauss2.wav" }
  60.  
  61. // Hit Sound, you can add more than 1
  62. new const antidotegun_hitsound[][] = { "warcraft3/frostnova.wav" }
  63.  
  64. // Ammo bought Sound, you can add more than 1
  65. new const antidotegun_ammopickupsound[][] = { "items/9mmclip1.wav" }
  66.  
  67. // Weaponbox Glow RGB Colors R G B
  68. new antidotegun_wb_color[] = { 0, 255, 255 }
  69.  
  70. // Uncomment this line if you want to add support to old ZP versions
  71. // Use if it's necessary, from version 4.2 to below
  72. // If you uncomment this line, this item can be buyed only in infection
  73. // rounds, because the main disinfect native in old versions works
  74. // only on infection rounds.
  75. //#define OLD_VERSION_SUPPORT
  76.  
  77. /*================================================================================
  78.  Customization ends here! Yes, that's it. Editing anything beyond
  79.  here is not officially supported. Proceed at your own risk...
  80. =================================================================================*/
  81.  
  82. // Booleans
  83. new bool:g_bHasAntidoteGun[33], bool:g_bIsConnected[33], bool:g_bIsAlive[33]
  84.  
  85. // Cvar pointers
  86. new cvar_enable, cvar_oneround, cvar_firerate, cvar_maxclip, cvar_maxbpammo, cvar_wboxglow,
  87. cvar_buyindelay, cvar_reloadspeed, cvar_hitslowdown
  88.  
  89. // Arrays
  90. new g_iCurrentWeapon[33], Float:g_flLastFireTime[33]
  91.  
  92. // Variables
  93. new g_iItemID, g_iMaxPlayers, g_msgSayText, g_msgDeathMsg, g_msgCurWeapon, g_msgAmmoX,
  94. g_msgAmmoPickup, g_msgScreenFade, g_sprBeam, g_sprRing, HamHook:g_iHhPostFrame_fw
  95.  
  96. // Offsets
  97. const m_pPlayer = 41
  98. const m_fInReload = 54
  99. const m_pActiveItem = 373
  100. const m_flNextAttack = 83
  101. const m_flTimeWeaponIdle = 48
  102. const m_flNextPrimaryAttack = 46
  103. const m_flNextSecondaryAttack = 47
  104.  
  105. // Some constants
  106. const FFADE_IN = 0x0000
  107. const ENG_NULLENT = -1
  108. const UNIT_SECOND = (1<<12)
  109. const AMMOID_GALIL = 4
  110. const GALIL_DFT_MAXCLIP = 35
  111. const V_GAUSS_ANIM_FIRE = 6
  112. const V_GAUSS_ANIM_DRAW = 8
  113. const V_GAUSS_ANIM_RELOAD = 2
  114. const EV_INT_WEAPONKEY = EV_INT_impulse
  115. const ANTIDOTEGUN_WPNKEY = 2816
  116.  
  117. // Buy in delay cvar it's disabled
  118. // for old versions
  119. #if defined OLD_VERSION_SUPPORT
  120. #pragma unused cvar_buyindelay
  121. #endif
  122.  
  123. // Cached cvars
  124. new bool:g_bCvar_Enabled, bool:g_bCvar_BuyUntilMode, Float:g_flCvar_FireRate,
  125. Float:g_flCvar_ReloadSpeed, Float:g_flCvar_HitSlowdown, g_iCvar_MaxClip, g_iCvar_MaxBPAmmo
  126.  
  127. // Plug info.
  128. #define PLUG_VERSION "0.6"
  129. #define PLUG_AUTH "meTaLiCroSS"
  130.  
  131. // Macros
  132. #define is_user_valid_alive(%1) (1 <= %1 <= g_iMaxPlayers && g_bIsAlive[%1])
  133. #define is_user_valid_connected(%1) (1 <= %1 <= g_iMaxPlayers && g_bIsConnected[%1])
  134.  
  135. /*================================================================================
  136.  [Init and Precache]
  137. =================================================================================*/
  138.  
  139. public plugin_init()
  140. {
  141. // Plugin info
  142. register_plugin("[ZP] Extra Item: Advanced Antidote Gun", PLUG_VERSION, PLUG_AUTH)
  143.  
  144. // Events
  145. register_event("CurWeapon", "event_CurWeapon", "b", "1=1")
  146. register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0")
  147.  
  148. // Fakemeta Forwards
  149. register_forward(FM_SetModel, "fw_SetModel")
  150. register_forward(FM_CmdStart, "fw_CmdStart")
  151. register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  152.  
  153. // Hamsandwich Forwards
  154. RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
  155. RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
  156. RegisterHam(Ham_Item_Deploy, "weapon_galil", "fw_Galil_Deploy_Post", 1)
  157. RegisterHam(Ham_Item_AddToPlayer, "weapon_galil", "fw_Galil_AddToPlayer")
  158. RegisterHam(Ham_Weapon_Reload, "weapon_galil", "fw_Galil_Reload_Post", 1)
  159. g_iHhPostFrame_fw = RegisterHam(Ham_Item_PostFrame, "weapon_galil", "fw_Galil_PostFrame")
  160.  
  161. // Cvars
  162. cvar_enable = register_cvar("zp_antidotegun_enable", "1")
  163. cvar_oneround = register_cvar("zp_antidotegun_oneround", "0")
  164. cvar_firerate = register_cvar("zp_antidotegun_fire_rate", "0.6")
  165. cvar_maxclip = register_cvar("zp_antidotegun_max_clip", "3")
  166. cvar_maxbpammo = register_cvar("zp_antidotegun_max_bpammo", "25")
  167. cvar_reloadspeed = register_cvar("zp_antidotegun_reload_speed", "2.5")
  168. cvar_wboxglow = register_cvar("zp_antidotegun_wbox_glow", "1")
  169. cvar_buyindelay = register_cvar("zp_antidotegun_buy_before_modestart", "0")
  170. cvar_hitslowdown = register_cvar("zp_antidotegun_hit_slowdown", "0.4")
  171.  
  172. static szCvar[30]
  173. formatex(szCvar, charsmax(szCvar), "v%s by %s", PLUG_VERSION, PLUG_AUTH)
  174. register_cvar("zp_extra_adv_antidotegun", szCvar, FCVAR_SERVER|FCVAR_SPONLY)
  175.  
  176. // Variables
  177. g_iMaxPlayers = get_maxplayers()
  178. g_msgAmmoX = get_user_msgid("AmmoX")
  179. g_msgSayText = get_user_msgid("SayText")
  180. g_msgDeathMsg = get_user_msgid("DeathMsg")
  181. g_msgCurWeapon = get_user_msgid("CurWeapon")
  182. g_msgAmmoPickup = get_user_msgid("AmmoPickup")
  183. g_msgScreenFade = get_user_msgid("ScreenFade")
  184. g_iItemID = zv_register_extra_item("Antidote Gun", "Desinfecting people", antidotegun_ap_cost, ZV_TEAM_HUMAN)
  185. }
  186.  
  187. public plugin_precache()
  188. {
  189. // Models
  190. precache_model("models/v_gauss.mdl")
  191. precache_model("models/p_gauss.mdl")
  192. precache_model("models/w_gauss.mdl")
  193.  
  194. // Sprites
  195. g_sprBeam = precache_model(antidotegun_sprite_beam)
  196. g_sprRing = precache_model(antidotegun_sprite_ring)
  197.  
  198. // Sounds
  199. static i
  200. for(i = 0; i < sizeof antidotegun_firesound; i++)
  201. precache_sound(antidotegun_firesound[i])
  202. for(i = 0; i < sizeof antidotegun_ammopickupsound; i++)
  203. precache_sound(antidotegun_ammopickupsound[i])
  204. for(i = 0; i < sizeof antidotegun_hitsound; i++)
  205. precache_sound(antidotegun_hitsound[i])
  206.  
  207.  
  208. }
  209.  
  210. public plugin_cfg()
  211. {
  212. // Cache some cvars after init is called
  213. cache_cvars()
  214.  
  215. // Check the max clip cvar
  216. if(g_iCvar_MaxClip && g_iCvar_MaxClip != GALIL_DFT_MAXCLIP)
  217. {
  218. EnableHamForward(g_iHhPostFrame_fw)
  219. }
  220. else
  221. {
  222. // Should disable it if isn't necesary to check
  223. DisableHamForward(g_iHhPostFrame_fw)
  224. }
  225. }
  226.  
  227. /*================================================================================
  228.  [Main Events]
  229. =================================================================================*/
  230.  
  231. public event_CurWeapon(id)
  232. {
  233. // Not alive...
  234. if(!g_bIsAlive[id])
  235. return PLUGIN_CONTINUE
  236.  
  237. // Updating weapon array
  238. g_iCurrentWeapon[id] = read_data(2)
  239.  
  240. // Zombie or Survivor
  241. if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
  242. return PLUGIN_CONTINUE
  243.  
  244. // Doesn't has an Antidote Gun and weapon isn't Galil
  245. if(!g_bHasAntidoteGun[id] || g_iCurrentWeapon[id] != CSW_GALIL)
  246. return PLUGIN_CONTINUE
  247.  
  248. // Change his models
  249. entity_set_string(id, EV_SZ_viewmodel, "models/v_gauss.mdl")
  250. entity_set_string(id, EV_SZ_weaponmodel, "models/p_gauss.mdl")
  251.  
  252. return PLUGIN_CONTINUE
  253. }
  254.  
  255. public event_RoundStart()
  256. {
  257. // Some cvars cache on round start
  258. cache_cvars()
  259. }
  260.  
  261. /*================================================================================
  262.  [Zombie Plague Forwards]
  263. =================================================================================*/
  264.  
  265. public zp_user_humanized_pre(id)
  266. {
  267. // Update bool when was buyed an antidote
  268. g_bHasAntidoteGun[id] = false
  269. }
  270.  
  271. public zp_user_infected_post(id)
  272. {
  273. // Update bool when was infected
  274. g_bHasAntidoteGun[id] = false
  275. }
  276.  
  277. public zv_extra_item_selected(id, itemid)
  278. {
  279. // It's an antidote gun itemid
  280. if(itemid == g_iItemID)
  281. {
  282. // Should be enabled
  283. if(g_bCvar_Enabled)
  284. {
  285. // Buy until round starts?
  286. if (!zp_has_round_started() && !g_bCvar_BuyUntilMode)
  287. {
  288. client_printcolor(id, "/g[ZP]/y You must wait until the round starts")
  289.  
  290. #if defined OLD_VERSION_SUPPORT
  291. zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
  292. return PLUGIN_CONTINUE
  293. #else
  294. return ZV_PLUGIN_HANDLED
  295. #endif
  296. }
  297.  
  298. #if defined OLD_VERSION_SUPPORT
  299. // Check actual mode id
  300. if(zp_is_plague_round() || zp_is_swarm_round() || zp_is_nemesis_round() || zp_is_survivor_round())
  301. {
  302. client_printcolor(id, "/g[ZP]/y You can't buy this gun in this round")
  303. zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
  304. return PLUGIN_CONTINUE
  305. }
  306. #endif
  307.  
  308. // Some vars with info
  309. new iWpnID, iAmmo, iBPAmmo, bool:bAlreadyHasGalil = bool:user_has_weapon(id, CSW_GALIL)
  310.  
  311. // Already has this gun
  312. if(g_bHasAntidoteGun[id] && bAlreadyHasGalil)
  313. {
  314. // Update the current backpack ammo
  315. iBPAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  316.  
  317. // We can't give more ammo
  318. if(iBPAmmo >= g_iCvar_MaxBPAmmo)
  319. {
  320. client_printcolor(id, "/g[ZP]/y Your Antidote Gun backpack ammo it's full")
  321.  
  322. #if defined OLD_VERSION_SUPPORT
  323. zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
  324. return PLUGIN_CONTINUE
  325. #else
  326. return ZV_PLUGIN_HANDLED
  327. #endif
  328. }
  329.  
  330. // Get the new ammo it are going to be used by the player
  331. static iNewAmmo
  332. iNewAmmo = g_iCvar_MaxBPAmmo - iBPAmmo
  333.  
  334. // Give the new amount of ammo
  335. cs_set_user_bpammo(id, CSW_GALIL, iBPAmmo + iNewAmmo)
  336.  
  337. // Flash ammo in hud
  338. message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id)
  339. write_byte(AMMOID_GALIL) // ammo id
  340. write_byte(iNewAmmo) // ammo amount
  341. message_end()
  342.  
  343. // Play clip purchase sound
  344. emit_sound(id, CHAN_ITEM, antidotegun_ammopickupsound[random_num(0, sizeof antidotegun_ammopickupsound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  345. }
  346. else
  347. {
  348. // We need to get if has an ordinary galil
  349. if(bAlreadyHasGalil)
  350. ham_strip_weapon(id, "weapon_galil")
  351.  
  352. // Update player bool
  353. g_bHasAntidoteGun[id] = true
  354.  
  355. // Give and store the weapon id
  356. iWpnID = give_item(id, "weapon_galil")
  357.  
  358. // Set the normal weapon ammo
  359. if(g_iCvar_MaxClip && g_iCvar_MaxClip != GALIL_DFT_MAXCLIP)
  360. cs_set_weapon_ammo(iWpnID, g_iCvar_MaxClip)
  361.  
  362. // Set the max bpammo
  363. cs_set_user_bpammo(id, CSW_GALIL, g_iCvar_MaxBPAmmo)
  364. }
  365.  
  366. // We should update this var if isn't info into.
  367. if(!iWpnID) iWpnID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", id)
  368.  
  369. // Yes or yes we need to update this vars with the current ammo amount
  370. iAmmo = cs_get_weapon_ammo(iWpnID)
  371. iBPAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  372.  
  373. // Force to change his gun
  374. engclient_cmd(id, "weapon_galil")
  375.  
  376. // Update the player ammo
  377. update_ammo_hud(id, iAmmo, iBPAmmo)
  378. }
  379. else
  380. {
  381. // A message
  382. client_printcolor(id, "/g[ZP]/y Antidote Gun item has been disabled. /gContact Admin")
  383.  
  384. #if defined OLD_VERSION_SUPPORT
  385. zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + antidotegun_ap_cost)
  386. return PLUGIN_CONTINUE
  387. #else
  388. return ZV_PLUGIN_HANDLED
  389. #endif
  390. }
  391. }
  392.  
  393. return PLUGIN_CONTINUE
  394. }
  395.  
  396. /*================================================================================
  397.  [Main Forwards]
  398. =================================================================================*/
  399.  
  400. public client_putinserver(id)
  401. {
  402. // Updating bools
  403. g_bIsConnected[id] = true
  404. g_bHasAntidoteGun[id] = false
  405. }
  406.  
  407. public client_disconnect(id)
  408. {
  409. // Updating bools
  410. g_bIsAlive[id] = false
  411. g_bIsConnected[id] = false
  412. g_bHasAntidoteGun[id] = false
  413. }
  414.  
  415. public fw_PlayerSpawn_Post(id)
  416. {
  417. // Not alive...
  418. if(!is_user_alive(id))
  419. return HAM_IGNORED
  420.  
  421. // Player is alive
  422. g_bIsAlive[id] = true
  423.  
  424. // Remove Weapon
  425. if(get_pcvar_num(cvar_oneround) || !g_bCvar_Enabled)
  426. {
  427. if(g_bHasAntidoteGun[id])
  428. {
  429. // Reset player vars
  430. g_bHasAntidoteGun[id] = false
  431.  
  432. // Strip his galil
  433. ham_strip_weapon(id, "weapon_galil")
  434. }
  435. }
  436.  
  437. return HAM_IGNORED
  438. }
  439.  
  440. public fw_PlayerKilled(victim, attacker, shouldgib)
  441. {
  442. // Player victim
  443. if(is_user_valid_connected(victim))
  444. {
  445. // Victim is not alive
  446. g_bIsAlive[victim] = false
  447.  
  448. // Reset player vars
  449. g_bHasAntidoteGun[victim] = false
  450.  
  451. return HAM_HANDLED
  452. }
  453.  
  454. return HAM_IGNORED
  455. }
  456.  
  457. public fw_CmdStart(id, handle, seed)
  458. {
  459. // Skip not alive users
  460. if(!is_user_valid_alive(id))
  461. return FMRES_IGNORED
  462.  
  463. // Without an antidote gun
  464. if(!g_bHasAntidoteGun[id])
  465. return FMRES_IGNORED
  466.  
  467. // Not human
  468. if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
  469. return FMRES_IGNORED
  470.  
  471. // Isn't holding a Galil
  472. if(g_iCurrentWeapon[id] != CSW_GALIL)
  473. return FMRES_IGNORED
  474.  
  475. // Get Buttons
  476. static iButton
  477. iButton = get_uc(handle, UC_Buttons)
  478.  
  479. // User pressing +attack Button
  480. if(iButton & IN_ATTACK)
  481. {
  482. // Buttons
  483. set_uc(handle, UC_Buttons, iButton & ~IN_ATTACK)
  484.  
  485. // Some vars
  486. static Float:flCurrentTime
  487. flCurrentTime = halflife_time()
  488.  
  489. // Fire rate not over yet
  490. if (flCurrentTime - g_flLastFireTime[id] < g_flCvar_FireRate)
  491. return FMRES_IGNORED
  492.  
  493. // Another vars with info
  494. static iWpnID, iClip
  495. iWpnID = get_pdata_cbase(id, m_pActiveItem, 5)
  496. iClip = cs_get_weapon_ammo(iWpnID)
  497.  
  498. // Skip if is in reload
  499. if(get_pdata_int(iWpnID, m_fInReload, 4))
  500. return FMRES_IGNORED
  501.  
  502. // To don't reload instantly (bugfix)
  503. set_pdata_float(iWpnID, m_flNextPrimaryAttack, g_flCvar_FireRate, 4)
  504. set_pdata_float(iWpnID, m_flNextSecondaryAttack, g_flCvar_FireRate, 4)
  505. set_pdata_float(iWpnID, m_flTimeWeaponIdle, g_flCvar_FireRate, 4)
  506.  
  507. // Update last fire time array
  508. g_flLastFireTime[id] = flCurrentTime
  509.  
  510. // 0 bullets
  511. if(iClip <= 0)
  512. {
  513. // Play empty clip sound
  514. ExecuteHamB(Ham_Weapon_PlayEmptySound, iWpnID)
  515.  
  516. return FMRES_IGNORED
  517. }
  518.  
  519. // Process fire
  520. primary_attack(id)
  521.  
  522. // Real fire push knockback
  523. launch_push(id, 40)
  524.  
  525. // Update Ammo
  526. cs_set_weapon_ammo(iWpnID, --iClip)
  527. update_ammo_hud(id, iClip, cs_get_user_bpammo(id, CSW_GALIL))
  528.  
  529. return FMRES_IGNORED
  530. }
  531.  
  532. return FMRES_IGNORED
  533. }
  534.  
  535. public fw_SetModel(entity, model[])
  536. {
  537. // Entity is not valid
  538. if(!is_valid_ent(entity))
  539. return FMRES_IGNORED;
  540.  
  541. // Entity model is not w_galil
  542. if(!equal(model, "models/w_galil.mdl"))
  543. return FMRES_IGNORED;
  544.  
  545. // Get classname
  546. static szClassName[33]
  547. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  548.  
  549. // Not a Weapon box
  550. if(!equal(szClassName, "weaponbox"))
  551. return FMRES_IGNORED
  552.  
  553. // Some vars
  554. static iOwner, iStoredGalilID
  555.  
  556. // Get owner
  557. iOwner = entity_get_edict(entity, EV_ENT_owner)
  558.  
  559. // Get drop weapon index (galil) to use in fw_Galil_AddToPlayer forward
  560. iStoredGalilID = find_ent_by_owner(ENG_NULLENT, "weapon_galil", entity)
  561.  
  562. // Entity classname is weaponbox, and galil has founded
  563. if(g_bHasAntidoteGun[iOwner] && is_valid_ent(iStoredGalilID))
  564. {
  565. // Setting weapon options
  566. entity_set_int(iStoredGalilID, EV_INT_WEAPONKEY, ANTIDOTEGUN_WPNKEY)
  567.  
  568. // Reset user vars
  569. g_bHasAntidoteGun[iOwner] = false
  570.  
  571. // Set weaponbox new model
  572. entity_set_model(entity, "models/w_gauss.mdl")
  573.  
  574. // Glow
  575. if(get_pcvar_num(cvar_wboxglow))
  576. set_rendering(entity, kRenderFxGlowShell, antidotegun_wb_color[0], antidotegun_wb_color[1], antidotegun_wb_color[2], kRenderNormal, 25)
  577.  
  578. return FMRES_SUPERCEDE
  579. }
  580.  
  581. return FMRES_IGNORED
  582. }
  583.  
  584. public fw_UpdateClientData_Post(id, sendweapons, handle)
  585. {
  586. // Skip not alive users
  587. if(!is_user_valid_alive(id))
  588. return FMRES_IGNORED
  589.  
  590. // Without an antidote gun
  591. if(!g_bHasAntidoteGun[id])
  592. return FMRES_IGNORED
  593.  
  594. // Not human
  595. if(zp_get_user_zombie(id) || zp_get_user_survivor(id))
  596. return FMRES_IGNORED
  597.  
  598. // Isn't holding a Galil
  599. if(g_iCurrentWeapon[id] != CSW_GALIL)
  600. return FMRES_IGNORED
  601.  
  602. // Player can't attack with the AG
  603. set_cd(handle, CD_flNextAttack, halflife_time() + 0.001)
  604.  
  605. return FMRES_HANDLED
  606. }
  607.  
  608. public fw_Galil_Deploy_Post(galil)
  609. {
  610. // Get galil owner
  611. static id
  612. id = get_pdata_cbase(galil, m_pPlayer, 4)
  613.  
  614. // The current galil owner has an antidote gun?
  615. if(is_user_valid_connected(id) && g_bHasAntidoteGun[id])
  616. {
  617. // Update the current ammo
  618. update_ammo_hud(id, cs_get_weapon_ammo(galil), cs_get_user_bpammo(id, CSW_GALIL))
  619.  
  620. // Send the draw animation
  621. set_user_weaponanim(id, V_GAUSS_ANIM_DRAW)
  622. }
  623.  
  624. return HAM_IGNORED
  625. }
  626.  
  627. public fw_Galil_AddToPlayer(galil, player)
  628. {
  629. // Is an antidote gun?
  630. if(is_valid_ent(galil) && is_user_valid_connected(player) && entity_get_int(galil, EV_INT_WEAPONKEY) == ANTIDOTEGUN_WPNKEY)
  631. {
  632. // Set vars
  633. g_bHasAntidoteGun[player] = true
  634.  
  635. // Reset weapon options
  636. entity_set_int(galil, EV_INT_WEAPONKEY, 0)
  637.  
  638. return HAM_HANDLED
  639. }
  640.  
  641. return HAM_IGNORED
  642. }
  643.  
  644. public fw_Galil_PostFrame(galil)
  645. {
  646. // Get galil owner
  647. static id
  648. id = get_pdata_cbase(galil, m_pPlayer, 4)
  649.  
  650. // His owner has an antidote gun?
  651. if(is_user_valid_alive(id) && g_bHasAntidoteGun[id])
  652. {
  653. // Some vars
  654. static Float:flNextAttack, iBpAmmo, iClip, iInReload
  655.  
  656. // Weapon is on middle reload
  657. iInReload = get_pdata_int(galil, m_fInReload, 4)
  658.  
  659. // Next player attack
  660. flNextAttack = get_pdata_float(id, m_flNextAttack, 5)
  661.  
  662. // Player back pack ammo
  663. iBpAmmo = cs_get_user_bpammo(id, CSW_GALIL)
  664.  
  665. // Current weapon clip
  666. iClip = cs_get_weapon_ammo(galil)
  667.  
  668. // End of reload
  669. if(iInReload && flNextAttack <= 0.0)
  670. {
  671. // Get the minimun amount between maxclip sub. current clip
  672. // and the player backpack ammo
  673. new j = min(g_iCvar_MaxClip - iClip, iBpAmmo)
  674.  
  675. // Set the new weapon clip
  676. cs_set_weapon_ammo(galil, iClip + j)
  677.  
  678. // Set the new player backpack ammo
  679. cs_set_user_bpammo(id, CSW_GALIL, iBpAmmo-j)
  680.  
  681. // Update the weapon offset "inreload" to 0 ("false")
  682. iInReload = 0
  683. set_pdata_int(galil, m_fInReload, 0, 4)
  684. }
  685.  
  686. // Get the current player buttons
  687. static iButton
  688. iButton = get_user_button(id)
  689.  
  690. // The player stills pressing the fire button
  691. if((iButton & IN_ATTACK2 && get_pdata_float(galil, m_flNextSecondaryAttack, 4) <= 0.0) || (iButton & IN_ATTACK && get_pdata_float(galil, m_flNextPrimaryAttack, 4) <= 0.0))
  692. return
  693.  
  694. // Trying to reload pressing the reload button when isn't it
  695. if(iButton & IN_RELOAD && !iInReload)
  696. {
  697. // The current weapon clip exceed the new max clip
  698. if(iClip >= g_iCvar_MaxClip)
  699. {
  700. // Retrieve player reload button
  701. entity_set_int(id, EV_INT_button, iButton & ~IN_RELOAD)
  702.  
  703. // Send idle animation
  704. set_user_weaponanim(id, 0)
  705. }
  706. // The current weapon clip it's the same like the old max weapon clip
  707. else if(iClip == GALIL_DFT_MAXCLIP)
  708. {
  709. // Has an amount of bpammo?
  710. if(iBpAmmo)
  711. {
  712. // Should make a reload
  713. antidotegun_reload(id, galil, 1)
  714. }
  715. }
  716. }
  717. }
  718.  
  719. // Credits and thanks to ConnorMcLeod for his Weapon MaxClip plugin!
  720. }
  721.  
  722. public fw_Galil_Reload_Post(galil)
  723. {
  724. // Get galil owner
  725. static id
  726. id = get_pdata_cbase(galil, m_pPlayer, 4)
  727.  
  728. // It's in reload and his owner has an antidote gun?
  729. if(is_user_valid_alive(id) && g_bHasAntidoteGun[id] && get_pdata_int(galil, m_fInReload, 4))
  730. {
  731. // Change normal reload options
  732. antidotegun_reload(id, galil)
  733. }
  734. }
  735.  
  736. /*================================================================================
  737.  [Internal Functions]
  738. =================================================================================*/
  739.  
  740. cache_cvars()
  741. {
  742. // Some cvars
  743. g_bCvar_Enabled = bool:get_pcvar_num(cvar_enable)
  744. g_flCvar_FireRate = get_pcvar_float(cvar_firerate)
  745. g_flCvar_ReloadSpeed = get_pcvar_float(cvar_reloadspeed)
  746. g_flCvar_HitSlowdown = get_pcvar_float(cvar_hitslowdown)
  747. g_iCvar_MaxClip = clamp(get_pcvar_num(cvar_maxclip), 0, 120)
  748. g_iCvar_MaxBPAmmo = clamp(get_pcvar_num(cvar_maxbpammo), 1, 90)
  749.  
  750. #if defined OLD_VERSION_SUPPORT
  751. g_bCvar_BuyUntilMode = false
  752. #else
  753. g_bCvar_BuyUntilMode = bool:get_pcvar_num(cvar_buyindelay)
  754. #endif
  755. }
  756.  
  757. primary_attack(id)
  758. {
  759. // Fire Effect
  760. set_user_weaponanim(id, V_GAUSS_ANIM_FIRE)
  761. entity_set_vector(id, EV_VEC_punchangle, Float:{ -1.5, 0.0, 0.0 })
  762. emit_sound(id, CHAN_WEAPON, antidotegun_firesound[random_num(0, sizeof antidotegun_firesound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  763.  
  764. // Some vars
  765. static iTarget, iBody, iEndOrigin[3]
  766.  
  767. // Get end origin from eyes
  768. get_user_origin(id, iEndOrigin, 3)
  769.  
  770. // Make gun beam
  771. beam_from_gun(id, iEndOrigin)
  772.  
  773. // Get user aiming
  774. get_user_aiming(id, iTarget, iBody)
  775.  
  776. // Do sound by a new entity
  777. new iEnt = create_entity("info_target")
  778.  
  779. // Integer vector into a Float vector
  780. static Float:flOrigin[3]
  781. IVecFVec(iEndOrigin, flOrigin)
  782.  
  783. // Set entity origin
  784. entity_set_origin(iEnt, flOrigin)
  785.  
  786. // Sound
  787. emit_sound(iEnt, CHAN_WEAPON, antidotegun_hitsound[random_num(0, sizeof antidotegun_firesound - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  788.  
  789. // Remove entity
  790. remove_entity(iEnt)
  791.  
  792. // Aim target it's a player
  793. if(is_user_valid_alive(iTarget))
  794. {
  795. // Hit slowdown, first should be enabled
  796. if(g_flCvar_HitSlowdown > 0.0)
  797. {
  798. // Get his current velocity vector
  799. static Float:flVelocity[3]
  800. get_user_velocity(iTarget, flVelocity)
  801.  
  802. // Multiply his velocity by a number
  803. xs_vec_mul_scalar(flVelocity, g_flCvar_HitSlowdown, flVelocity)
  804.  
  805. // Set his new velocity vector
  806. set_user_velocity(iTarget, flVelocity)
  807. }
  808.  
  809. // It's allowed to be disinfected
  810. if(zp_get_user_zombie(iTarget) && !zp_get_user_nemesis(iTarget) && !zp_get_user_last_zombie(iTarget))
  811. {
  812. // Disinfect user
  813. #if defined OLD_VERSION_SUPPORT
  814. zp_disinfect_user(iTarget)
  815. #else
  816. zp_disinfect_user(iTarget, 1)
  817. #endif
  818.  
  819. // Death message
  820. message_begin(MSG_BROADCAST, g_msgDeathMsg)
  821. write_byte(id) // killer
  822. write_byte(iTarget) // victim
  823. write_byte(iBody == HIT_HEAD ? 1 : 0) // headshot flag
  824. write_string("antidote gun") // killer's weapon
  825. message_end()
  826.  
  827. // Screen fade fx
  828. message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, iTarget)
  829. write_short(UNIT_SECOND*1) // duration
  830. write_short(UNIT_SECOND/2) // hold time
  831. write_short(FFADE_IN) // fade type
  832. write_byte(0) // r
  833. write_byte(255) // g
  834. write_byte(255) // b
  835. write_byte(227) // alpha
  836. message_end()
  837.  
  838. // Beam Cylinder fx
  839. message_begin(MSG_PVS, SVC_TEMPENTITY, iEndOrigin)
  840. write_byte(TE_BEAMCYLINDER) // TE id
  841. write_coord(iEndOrigin[0]) // position.x
  842. write_coord(iEndOrigin[1]) // position.y
  843. write_coord(iEndOrigin[2]) // position.z
  844. write_coord(iEndOrigin[0]) // x axis
  845. write_coord(iEndOrigin[1]) // y axis
  846. write_coord(iEndOrigin[2] + 385) // z axis
  847. write_short(g_sprRing) // sprite
  848. write_byte(0) // startframe
  849. write_byte(0) // framerate
  850. write_byte(4) // life
  851. write_byte(30) // width
  852. write_byte(0) // noise
  853. write_byte(0) // red
  854. write_byte(255) // green
  855. write_byte(255) // blue
  856. write_byte(200) // brightness
  857. write_byte(0) // speed
  858. message_end()
  859. }
  860. // Can't be disinfected
  861. else
  862. {
  863. // Faster particles
  864. message_begin(MSG_PVS, SVC_TEMPENTITY, iEndOrigin)
  865. write_byte(TE_PARTICLEBURST) // TE id
  866. write_coord(iEndOrigin[0]) // position.x
  867. write_coord(iEndOrigin[1]) // position.y
  868. write_coord(iEndOrigin[2]) // position.z
  869. write_short(45) // radius
  870. write_byte(208) // particle color
  871. write_byte(10) // duration * 10 will be randomized a bit
  872. message_end()
  873. }
  874. }
  875. else
  876. {
  877. // Aim target entity it's valid and isn't worldspawn?
  878. if((iTarget > 0) && is_valid_ent(iTarget))
  879. {
  880. // Get aim target classname
  881. static szClassname[32]
  882. entity_get_string(iTarget, EV_SZ_classname, szClassname, charsmax(szClassname))
  883.  
  884. // It's a breakable entity
  885. if(equal(szClassname, "func_breakable"))
  886. {
  887. // Get destroy this ent
  888. force_use(id, iTarget)
  889. }
  890. }
  891. }
  892. }
  893.  
  894. antidotegun_reload(id, galil, force_reload = 0)
  895. {
  896. // Next player attack time
  897. set_pdata_float(id, m_flNextAttack, g_flCvar_ReloadSpeed, 5)
  898.  
  899. // Send to the player the reload animation
  900. set_user_weaponanim(id, V_GAUSS_ANIM_RELOAD)
  901.  
  902. // Update the weapon offset "inreload" to 1 ("true")
  903. if(force_reload)
  904. set_pdata_int(galil, m_fInReload, 1, 4)
  905.  
  906. // Next idle weapon time, soonest time ItemPostFrame will call WeaponIdle.
  907. set_pdata_float(galil, m_flTimeWeaponIdle, g_flCvar_ReloadSpeed + 0.5, 4)
  908.  
  909. // I'll be honest, i don't know what do this.
  910. entity_set_float(id, EV_FL_frame, 200.0)
  911. }
  912.  
  913. update_ammo_hud(id, iAmmoAmount, iBPAmmoAmount)
  914. {
  915. // Display the new antidotegun bullets
  916. if(iAmmoAmount != -1)
  917. {
  918. message_begin(MSG_ONE_UNRELIABLE, g_msgCurWeapon, _, id)
  919. write_byte(1) // active
  920. write_byte(CSW_GALIL) // weapon
  921. write_byte(iAmmoAmount) // clip
  922. message_end()
  923. }
  924.  
  925. // Display the new amount of BPAmmo
  926. if(iBPAmmoAmount != -1)
  927. {
  928. message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoX, _, id)
  929. write_byte(AMMOID_GALIL) // ammoid
  930. write_byte(iBPAmmoAmount) // ammo amount
  931. message_end()
  932. }
  933. }
  934.  
  935. beam_from_gun(id, iEndOrigin[3])
  936. {
  937. // Make a cool beam
  938. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  939. write_byte(TE_BEAMENTPOINT) // TE id
  940. write_short(id | 0x1000) // start entity
  941. write_coord(iEndOrigin[0]) // endposition.x
  942. write_coord(iEndOrigin[1]) // endposition.y
  943. write_coord(iEndOrigin[2]) // endposition.z
  944. write_short(g_sprBeam) // sprite index
  945. write_byte(1) // framestart
  946. write_byte(1) // framerate
  947. write_byte(1) // life in 0.1's
  948. write_byte(10) // width
  949. write_byte(0) // noise
  950. write_byte(0) // r
  951. write_byte(255) // g
  952. write_byte(255) // b
  953. write_byte(200) // brightness
  954. write_byte(0) // speed
  955. message_end()
  956.  
  957. // Dynamic Light
  958. message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iEndOrigin)
  959. write_byte(TE_DLIGHT) // TE id
  960. write_coord(iEndOrigin[0]) // position.x
  961. write_coord(iEndOrigin[1]) // position.y
  962. write_coord(iEndOrigin[2]) // position.z
  963. write_byte(30) // radius
  964. write_byte(0) // red
  965. write_byte(255) // green
  966. write_byte(255) // blue
  967. write_byte(10) // life
  968. write_byte(45) // decay rate
  969. message_end()
  970.  
  971. // Sparks
  972. message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iEndOrigin)
  973. write_byte(TE_SPARKS) // TE id
  974. write_coord(iEndOrigin[0]) // position.x
  975. write_coord(iEndOrigin[1]) // position.y
  976. write_coord(iEndOrigin[2]) // position.z
  977. message_end()
  978. }
  979.  
  980. /*================================================================================
  981.  [Stocks]
  982. =================================================================================*/
  983.  
  984. stock set_user_weaponanim(id, anim)
  985. {
  986. entity_set_int(id, EV_INT_weaponanim, anim)
  987. message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
  988. write_byte(anim)
  989. write_byte(entity_get_int(id, EV_INT_body))
  990. message_end()
  991. }
  992.  
  993. stock launch_push(id, velamount) // from my Nemesis Rocket Launcher plugin.
  994. {
  995. static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
  996.  
  997. velocity_by_aim(id, -velamount, flNewVelocity)
  998.  
  999. get_user_velocity(id, flCurrentVelocity)
  1000. xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
  1001.  
  1002. set_user_velocity(id, flNewVelocity)
  1003. }
  1004.  
  1005. stock ham_strip_weapon(id, weapon[])
  1006. {
  1007. if(!equal(weapon,"weapon_",7))
  1008. return 0
  1009.  
  1010. new wId = get_weaponid(weapon)
  1011.  
  1012. if(!wId) return 0
  1013.  
  1014. new wEnt
  1015.  
  1016. while((wEnt = find_ent_by_class(wEnt, weapon)) && entity_get_edict(wEnt, EV_ENT_owner) != id) {}
  1017.  
  1018. if(!wEnt) return 0
  1019.  
  1020. if(get_user_weapon(id) == wId)
  1021. ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt);
  1022.  
  1023. if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt))
  1024. return 0
  1025.  
  1026. ExecuteHamB(Ham_Item_Kill, wEnt)
  1027.  
  1028. entity_set_int(id, EV_INT_weapons, entity_get_int(id, EV_INT_weapons) & ~(1<<wId))
  1029.  
  1030. return 1
  1031. }
  1032.  
  1033. stock client_printcolor(id, const input[], any:...)
  1034. {
  1035. static iPlayersNum[32], iCount; iCount = 1
  1036. static szMsg[191]
  1037.  
  1038. vformat(szMsg, charsmax(szMsg), input, 3)
  1039.  
  1040. replace_all(szMsg, 190, "/g", "^4") // green txt
  1041. replace_all(szMsg, 190, "/y", "^1") // orange txt
  1042. replace_all(szMsg, 190, "/ctr", "^3") // team txt
  1043. replace_all(szMsg, 190, "/w", "^0") // team txt
  1044.  
  1045. if(id) iPlayersNum[0] = id
  1046. else get_players(iPlayersNum, iCount, "ch")
  1047.  
  1048. for (new i = 0; i < iCount; i++)
  1049. {
  1050. if (g_bIsConnected[iPlayersNum[i]])
  1051. {
  1052. message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayersNum[i])
  1053. write_byte(iPlayersNum[i])
  1054. write_string(szMsg)
  1055. message_end()
  1056. }
  1057. }
  1058. }
  1059.  


2.
SMA Forráskód: [ Mindet kijelol ]
  1. /*================================================================================
  2.  
  3. -------------------------------------------
  4. -*- [ZP] Extra Item: Unlimited Clip 1.0 -*-
  5. -------------------------------------------
  6.  
  7. ~~~~~~~~~~~~~~~
  8. - Description -
  9. ~~~~~~~~~~~~~~~
  10.  
  11. This item/upgrade gives players unlimited clip ammo for a single round.
  12.  
  13. ================================================================================*/
  14.  
  15. #include <amxmodx>
  16. #include <fakemeta>
  17. #include <zombieplague>
  18. #include <zmvip>
  19.  
  20. /*================================================================================
  21.  [Plugin Customization]
  22. =================================================================================*/
  23.  
  24. new const g_item_name[] = { "Unlimited Clip" } // Item name
  25. new const g_item_descritpion[] = { "(single round)" } // Item descritpion
  26. const g_item_cost = 10 // Price (ammo)
  27.  
  28. /*============================================================================*/
  29.  
  30. // CS Offsets
  31. #if cellbits == 32
  32. const OFFSET_CLIPAMMO = 51
  33. #else
  34. const OFFSET_CLIPAMMO = 65
  35. #endif
  36. const OFFSET_LINUX_WEAPONS = 4
  37.  
  38. // Max Clip for weapons
  39. new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
  40. 10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }
  41.  
  42. new g_itemid_infammo, g_has_unlimited_clip[33]
  43.  
  44. public plugin_init()
  45. {
  46. register_plugin("[ZP] Extra: Unlimited Clip", "1.0", "MeRcyLeZZ")
  47.  
  48. g_itemid_infammo = zv_register_extra_item(g_item_name, g_item_descritpion, g_item_cost, ZV_TEAM_HUMAN)
  49.  
  50. register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
  51. register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
  52. set_cvar_num("zp_vip_unlimited_ammo", 0)
  53. }
  54.  
  55. // Player buys our upgrade, set the unlimited ammo flag
  56. public zv_extra_item_selected(player, itemid)
  57. {
  58. if (itemid == g_itemid_infammo)
  59. g_has_unlimited_clip[player] = true
  60. }
  61.  
  62. // Reset flags for all players on newround
  63. public event_round_start()
  64. {
  65. for (new id; id <= 32; id++) g_has_unlimited_clip[id] = false;
  66. }
  67.  
  68. // Unlimited clip code
  69. public message_cur_weapon(msg_id, msg_dest, msg_entity)
  70. {
  71. // Player doesn't have the unlimited clip upgrade
  72. if (!g_has_unlimited_clip[msg_entity])
  73. return;
  74.  
  75. // Player not alive or not an active weapon
  76. if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
  77. return;
  78.  
  79. static weapon, clip
  80. weapon = get_msg_arg_int(2) // get weapon ID
  81. clip = get_msg_arg_int(3) // get weapon clip
  82.  
  83. // Unlimited Clip Ammo
  84. if (MAXCLIP[weapon] > 2) // skip grenades
  85. {
  86. set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]) // HUD should show full clip all the time
  87.  
  88. if (clip < 2) // refill when clip is nearly empty
  89. {
  90. // Get the weapon entity
  91. static wname[32], weapon_ent
  92. get_weaponname(weapon, wname, sizeof wname - 1)
  93. weapon_ent = fm_find_ent_by_owner(-1, wname, msg_entity)
  94.  
  95. // Set max clip on weapon
  96. fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon])
  97. }
  98. }
  99. }
  100.  
  101. // Find entity by its owner (from fakemeta_util)
  102. stock fm_find_ent_by_owner(entity, const classname[], owner)
  103. {
  104. while ((entity = engfunc(EngFunc_FindEntityByString, entity, "classname", classname)) && pev(entity, pev_owner) != owner) {}
  105.  
  106. return entity;
  107. }
  108.  
  109. // Set Weapon Clip Ammo
  110. stock fm_set_weapon_ammo(entity, amount)
  111. {
  112. set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
  113. }
  114.  

Írj rám PM-ben és adok 1 csomót!.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: Zombie V.i.P
HozzászólásElküldve: 2015.01.04. 18:45 
Offline
Újonc
Avatar

Csatlakozott: 2014.12.29. 20:42
Hozzászólások: 9
nem jó így sem.

_________________
2015* - Zm Szervere>>
Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése:  Rendezés  
Új téma nyitása  Hozzászólás a témához  [ 6 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 66 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole