Advertisement
Guest User

rifles

a guest
Apr 25th, 2017
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 29.77 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4. #include <fakemeta_util>
  5. #include <fun>
  6. #include <hamsandwich>
  7. #include <cstrike>
  8. #include <engine>
  9. #include <nst_wpn>
  10.  
  11. #include <zombieplague>
  12.  
  13. #define PLUGIN "NST Wpn Mod"
  14. #define VERSION "1.0"
  15. #define AUTHOR "NST"
  16.  
  17.  
  18. // Var main
  19. const TYPE_WPN = 1
  20. const MAX_WPN = 40
  21. new HAS_WEAPON[33]
  22. new g_wpn_name[MAX_WPN][32]
  23. new g_wpn_model[MAX_WPN][32]
  24. new g_wpn_change[MAX_WPN]
  25. new g_wpn_cmdbuy[MAX_WPN][32]
  26. new name_class_weapon[MAX_WPN][32]
  27. new Name_WpnChange[MAX_WPN][32]
  28.  
  29. new current_select[33]
  30. new user_clip[33][MAX_WPN], user_ammo[33][MAX_WPN]
  31. new g_hasZoom[33]
  32. new cost_by_ammo = 60
  33. new Float:cl_pushangle[33][3]
  34.  
  35. // Models
  36. new P_MODEL[MAX_WPN][64]
  37. new V_MODEL[MAX_WPN][64]
  38. new W_MODEL[MAX_WPN][64]
  39.  
  40.  
  41. // Cvar
  42. new cvar_dmg_name[MAX_WPN][64]
  43. new cvar_uclip_name[MAX_WPN][64]
  44. new cvar_speed_name[MAX_WPN][64]
  45. new cvar_zoom_name[MAX_WPN][64]
  46. new cvar_clip_name[MAX_WPN][64]
  47. new cvar_ammo_name[MAX_WPN][64]
  48. new cvar_recoil_name[MAX_WPN][64]
  49. new cvar_cost_name[MAX_WPN][64]
  50.  
  51. new cvar_dmgmultiplier[MAX_WPN]
  52. new cvar_uclip[MAX_WPN]
  53. new cvar_speed[MAX_WPN]
  54. new cvar_zoom[MAX_WPN]
  55. new cvar_clip[MAX_WPN]
  56. new cvar_ammo[MAX_WPN]
  57. new cvar_recoil[MAX_WPN]
  58. new cvar_cost[MAX_WPN]
  59. new cvar_buy
  60.  
  61. // Cvar of Public Set Ammo
  62. enum {
  63. idle,
  64. shoot1,
  65. shoot2,
  66. insert,
  67. after_reload,
  68. start_reload,
  69. draw
  70. }
  71.  
  72. enum {
  73. m3,
  74. xm1014
  75. }
  76.  
  77. const NOCLIP_WPN_BS = ((1<<2)|(1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
  78. const SHOTGUNS_BS = ((1<<CSW_M3)|(1<<CSW_XM1014))
  79. const SILENT_BS = ((1<<CSW_USP)|(1<<CSW_M4A1))
  80.  
  81. const m_pPlayer = 41
  82. const m_iId = 43
  83. const m_fKnown = 44
  84. const m_flNextPrimaryAttack = 46
  85. const m_flNextSecondaryAttack = 47
  86. const m_flTimeWeaponIdle = 48
  87. const m_iPrimaryAmmoType = 49
  88. const m_iClip = 51
  89. const m_fInReload = 54
  90. const m_fInSpecialReload = 55
  91. const m_fSilent = 74
  92. const m_flNextAttack = 83
  93. const m_rgAmmo_player_Slot0 = 376
  94. new HamHook:g_iHhPostFrame[CSW_P90+1]
  95. new HamHook:g_iHhWeapon_WeaponIdle[2]
  96. stock const g_iDftMaxClip[CSW_P90+1] = {
  97. -1, 13, -1, 10, 1, 7, 1, 30, 30, 1, 30,
  98. 20, 25, 30, 35, 25, 12, 20, 10, 30, 100,
  99. 8 , 30, 30, 20, 2, 7, 30, 30, -1, 50}
  100.  
  101. stock const g_iReloadAnims[CSW_P90+1] = {
  102. -1, 5, -1, 3, -1, 6, -1, 1, 1, -1, 14,
  103. 4, 2, 3, 1, 1, 13, 7, 4, 1, 3,
  104. 6, 11, 1, 3, -1, 4, 1, 1, -1, 1}
  105.  
  106. stock const Float:g_fDelay[CSW_P90+1] = {
  107. 0.00, 2.70, 0.00, 2.00, 0.00, 0.55, 0.00, 3.15, 3.30, 0.00, 4.50,
  108. 2.70, 3.50, 3.35, 2.45, 3.30, 2.70, 2.20, 2.50, 2.63, 4.70,
  109. 0.55, 3.05, 2.12, 3.50, 0.00, 2.20, 3.00, 2.45, 0.00, 3.40
  110. }
  111. new const AMMOID[] = { -1, 9, -1, 2, 12, 5, 14, 6, 4, 13, 10, 7, 6, 4, 4, 4, 6, 10,
  112. 1, 10, 3, 5, 4, 10, 2, 11, 8, 4, 2, -1, 7}
  113. #define is_valid_player(%1) (1 <= %1 <= 32)
  114.  
  115.  
  116.  
  117. public plugin_init() {
  118. register_plugin(PLUGIN, VERSION, AUTHOR)
  119.  
  120. // Reg Public
  121. register_event("CurWeapon","checkWeapon","be","1=1")
  122. register_event("DeathMsg", "Death", "a")
  123. register_event("HLTV", "event_start_freezetime", "a", "1=0", "2=0")
  124. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  125. register_forward( FM_CmdStart, "fw_CmdStart" )
  126.  
  127. // Reg Cmd
  128. register_clcmd("drop","cmd_drop")
  129. register_clcmd("buyammo1","buy_ammo")
  130. register_clcmd("primammo","buy_ammo")
  131. register_clcmd("nst_wpn_1", "menu_wpn")
  132. register_clcmd("nst_wpn_1_rebuy", "rebuy_wpn")
  133. cvar_buy = register_cvar("nst_buy_model1", "nst")
  134. register_clcmd("nst_buy_wpn1", "buy_weapon_cvar")
  135.  
  136. new i = 1, check_value = 1
  137. while(check_value && i<MAX_WPN)
  138. {
  139. if (g_wpn_change[i] <= 0) check_value = 0
  140. if (check_value)
  141. {
  142. new szWpnName[32]
  143. get_weaponname(g_wpn_change[i], szWpnName, 31)
  144. format(Name_WpnChange[i], 31, "%s", szWpnName)
  145. register_clcmd(g_wpn_cmdbuy[i],"buy_weapon", i)
  146. }
  147. i++
  148. }
  149.  
  150. // Ammo Clip
  151. new szWeapon[17]
  152. for(new i=1; i<=CSW_P90; i++)
  153. {
  154. if( !(NOCLIP_WPN_BS & (1<<i)) && get_weaponname(i, szWeapon, charsmax(szWeapon)) )
  155. {
  156.  
  157. RegisterHam(Ham_Weapon_PrimaryAttack, szWeapon, "fw_primary_attack")
  158. RegisterHam(Ham_Weapon_PrimaryAttack, szWeapon, "fw_primary_attack_post",1)
  159.  
  160. if( SHOTGUNS_BS & (1<<i) )
  161. {
  162. g_iHhWeapon_WeaponIdle[ i == CSW_M3 ? m3 : xm1014 ] =
  163. RegisterHam(Ham_Weapon_WeaponIdle, szWeapon, "Shotgun_WeaponIdle")
  164. g_iHhPostFrame[i] = RegisterHam(Ham_Item_PostFrame, szWeapon, "Shotgun_PostFrame")
  165. }
  166. else
  167. {
  168. g_iHhPostFrame[i] = RegisterHam(Ham_Item_PostFrame, szWeapon, "Item_PostFrame")
  169. }
  170. }
  171. }
  172. }
  173.  
  174. public plugin_precache()
  175. {
  176. new configfile[200]
  177. get_configsdir(configfile,199)
  178. format(configfile,199,"%s/nst_wpn.ini",configfile)
  179. if(file_exists(configfile))
  180. {
  181. new row[200], left[64], trash, right[64], idwpn = 1
  182. new size=file_size(configfile,1)
  183. for(new i=0;i<size;i++)
  184. {
  185.  
  186. new name[64], model[64], wpn_change, damage[32], uclip[32], speed[32], zoom[32], clip[32], ammo[32], recoil[32], cost[32]
  187. read_file(configfile,i,row,200,trash)
  188. if( (contain(row,";")!=0) && strlen(row) && idwpn<MAX_WPN)
  189. {
  190.  
  191. // Create Value
  192. replace(row, 199, " ", "_")
  193. replace(row, 199, "[name]", "")
  194. replace(row, 199, "[model]", " ")
  195. replace(row, 199, "[wpn_change]", " ")
  196. replace(row, 199, "[damage]", " ")
  197. replace(row, 199, "[uclip]", " ")
  198. replace(row, 199, "[speed]", " ")
  199. replace(row, 199, "[zoom]", " ")
  200. replace(row, 199, "[clip]", " ")
  201. replace(row, 199, "[ammo]", " ")
  202. replace(row, 199, "[recoil]", " ")
  203. replace(row, 199, "[cost]", " ")
  204.  
  205. strbreak(row,left,63,right,63)
  206. format(row, 199, "%s", right)
  207. format(name, 63, "%s", left)
  208. replace(name, 63, "_", " ")
  209.  
  210. strbreak(row,left,63,right,63)
  211. format(row, 199, "%s", right)
  212. format(model, 63, "%s", left)
  213.  
  214. strbreak(row,left,63,right,63)
  215. format(row, 199, "%s", right)
  216. wpn_change = str_to_num(left)
  217.  
  218. strbreak(row,left,63,right,63)
  219. format(row, 199, "%s", right)
  220. format(damage, 31, "%s", left)
  221.  
  222. strbreak(row,left,63,right,63)
  223. format(row, 199, "%s", right)
  224. format(uclip, 31, "%s", left)
  225.  
  226. strbreak(row,left,63,right,63)
  227. format(row, 199, "%s", right)
  228. format(speed, 31, "%s", left)
  229.  
  230. strbreak(row,left,63,right,63)
  231. format(row, 199, "%s", right)
  232. format(zoom, 31, "%s", left)
  233.  
  234. strbreak(row,left,63,right,63)
  235. format(row, 199, "%s", right)
  236. format(clip, 31, "%s", left)
  237.  
  238. strbreak(row,left,63,right,63)
  239. format(row, 199, "%s", right)
  240. format(ammo, 31, "%s", left)
  241.  
  242. strbreak(row,left,63,right,63)
  243. format(row, 199, "%s", right)
  244. format(recoil, 31, "%s", left)
  245.  
  246. strbreak(row,left,63,right,63)
  247. format(row, 199, "%s", right)
  248. format(cost, 31, "%s", left)
  249.  
  250. if (nst_get_weapon_type(wpn_change) == TYPE_WPN)
  251. {
  252. // Set Value
  253. format(g_wpn_name[idwpn], 31, "%s", name)
  254. format(g_wpn_model[idwpn], 31, "%s", model)
  255. format(g_wpn_cmdbuy[idwpn], 31, "nst_buywpn %s", model)
  256. format(name_class_weapon[idwpn], 31, "nst_%s", model)
  257. g_wpn_change[idwpn] = wpn_change
  258.  
  259.  
  260. // Create Vvar
  261. format(cvar_dmg_name[idwpn], 63, "nst_%s_dmg", model)
  262. format(cvar_uclip_name[idwpn], 63, "nst_%s_uclip", model)
  263. format(cvar_speed_name[idwpn], 63, "nst_%s_speed", model)
  264. format(cvar_zoom_name[idwpn], 63, "nst_%s_zoom", model)
  265. format(cvar_clip_name[idwpn], 63, "nst_%s_clip", model)
  266. format(cvar_ammo_name[idwpn], 63, "nst_%s_ammo", model)
  267. format(cvar_recoil_name[idwpn], 63, "nst_%s_recoil", model)
  268. format(cvar_cost_name[idwpn], 63, "nst_%s_cost", model)
  269. cvar_dmgmultiplier[idwpn] = register_cvar(cvar_dmg_name[idwpn], damage)
  270. cvar_uclip[idwpn] = register_cvar(cvar_uclip_name[idwpn], uclip)
  271. cvar_speed[idwpn] = register_cvar(cvar_speed_name[idwpn], speed)
  272. cvar_zoom[idwpn] = register_cvar(cvar_zoom_name[idwpn], zoom)
  273. cvar_clip[idwpn] = register_cvar(cvar_clip_name[idwpn], clip)
  274. cvar_ammo[idwpn] = register_cvar(cvar_ammo_name[idwpn], ammo)
  275. cvar_recoil[idwpn] = register_cvar(cvar_recoil_name[idwpn], recoil)
  276. cvar_cost[idwpn] = register_cvar(cvar_cost_name[idwpn], cost)
  277.  
  278.  
  279. // Create Models
  280. format(P_MODEL[idwpn], 63, "models/nst_wpn/p_%s.mdl", model)
  281. format(V_MODEL[idwpn], 63, "models/nst_wpn/v_%s.mdl", model)
  282. format(W_MODEL[idwpn], 63, "models/nst_wpn/w_%s.mdl", model)
  283. precache_model(P_MODEL[idwpn])
  284. precache_model(V_MODEL[idwpn])
  285. precache_model(W_MODEL[idwpn])
  286.  
  287. idwpn++
  288. }
  289. }
  290. }
  291.  
  292. }
  293.  
  294. }
  295.  
  296. // Human Death
  297. public zp_user_infected_post(id)
  298. {
  299. if (zp_get_user_zombie(id) && HAS_WEAPON[id])
  300. {
  301. new CURENT_WEAPON = HAS_WEAPON[id]
  302. create_w_class(id, user_clip[id][CURENT_WEAPON], user_ammo[id][CURENT_WEAPON], 0)
  303. HAS_WEAPON[id] = 0
  304. }
  305. }
  306. public Death()
  307. {
  308. new id = read_data(2)
  309. new CURENT_WEAPON = HAS_WEAPON[id]
  310. if(HAS_WEAPON[id])
  311. {
  312. create_w_class(id, user_clip[id][CURENT_WEAPON], user_ammo[id][CURENT_WEAPON], 0)
  313. HAS_WEAPON[id] = 0
  314. return PLUGIN_HANDLED
  315. }
  316.  
  317. return PLUGIN_CONTINUE
  318. }
  319. // End Human Death
  320.  
  321.  
  322. // Menu Wpn
  323. public menu_wpn(id)
  324. {
  325. if (!g_wpn_change[1]) return PLUGIN_HANDLED
  326.  
  327.  
  328. new mHandleID = menu_create("[NST Wpn] Menu Weapon:", "menu_wpn_handler")
  329. new i = 1, check_value = 1
  330. while(check_value && i<MAX_WPN)
  331. {
  332. if (g_wpn_change[i] <= 0) check_value = 0
  333. if (check_value)
  334. {
  335. new wpn_cost = get_pcvar_num(cvar_cost[i])
  336. new item_name[150], idwpn[32]
  337. format(item_name, 149, "%s: %i$", g_wpn_name[i], wpn_cost)
  338. format(idwpn, 31, "%i", i)
  339.  
  340. new check_money[33], user_money = cs_get_user_money(id)
  341. if(user_money < wpn_cost) check_money[id] = 1
  342. else check_money[id] = 0
  343.  
  344. menu_additem(mHandleID, item_name, idwpn, check_money[id])
  345. }
  346. i++
  347. }
  348.  
  349. menu_addblank(mHandleID, 1) // add blank got problem
  350. menu_setprop(mHandleID, MPROP_PERPAGE, 7)
  351. menu_display(id, mHandleID, 0)
  352.  
  353.  
  354. return PLUGIN_HANDLED
  355. }
  356. public menu_wpn_handler(id, menu, item)
  357. {
  358. if (item == MENU_EXIT)
  359. {
  360. menu_destroy(menu)
  361. return PLUGIN_HANDLED
  362. }
  363. new idwpn[32], name[32], access
  364. menu_item_getinfo(menu, item, access, idwpn, 31, name, 31, access)
  365. //client_print(id, print_chat, "item: %i - id: %s", item, idwpn);
  366.  
  367. new idweapon = str_to_num(idwpn)
  368. buy_weapon(id, idweapon)
  369. //client_cmd(id, g_wpn_cmdbuy[idweapon])
  370.  
  371.  
  372. menu_destroy(menu)
  373. return PLUGIN_HANDLED
  374. }
  375. public rebuy_wpn(id)
  376. {
  377. new idwpn = current_select[id]
  378. if (idwpn>0) buy_weapon(id, idwpn)
  379.  
  380. return PLUGIN_HANDLED
  381. }
  382. // End Menu Wpn
  383.  
  384.  
  385. // Control Damage
  386. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  387. {
  388. new CURENT_WEAPON = HAS_WEAPON[attacker]
  389. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  390.  
  391. if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CHANGE_WEAPON && HAS_WEAPON[attacker] )
  392. {
  393. SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier[CURENT_WEAPON] ) )
  394. }
  395. }
  396. // End Control Damage
  397.  
  398.  
  399. // Buy Weapon
  400. public buy_weapon_cvar(id)
  401. {
  402. new models[62]
  403. get_pcvar_string(cvar_buy, models, 61)
  404.  
  405. for(new i=1; i<MAX_WPN; i++)
  406. {
  407. if (g_wpn_change[i] > 0)
  408. {
  409. if (equali(g_wpn_model[i],models))
  410. {
  411. buy_weapon(id, i)
  412. return PLUGIN_HANDLED
  413. }
  414. }
  415. }
  416. return PLUGIN_HANDLED
  417. }
  418. public buy_weapon(id, idwpn)
  419. {
  420. //client_print(id, print_chat, "Mua %i", idwpn)
  421.  
  422. new buyzone = cs_get_user_buyzone(id)
  423. new mod_runing = nst_get_mod_runing()
  424. if (mod_runing == 1 || mod_runing == 2 || mod_runing == 3) buyzone = 1
  425.  
  426. if (buyzone == 0) client_print(id, print_chat, "[NST Wpn] Ban khong the mua Vu khi o vi tri nay")
  427. else
  428. {
  429. new plrClip, plrAmmo
  430. get_user_weapon(id, plrClip , plrAmmo)
  431.  
  432. new user_money = cs_get_user_money(id)
  433. new wp_cost = get_pcvar_num(cvar_cost[idwpn])
  434. new clip_max = get_pcvar_num(cvar_clip[idwpn])
  435. new ammo_max = get_pcvar_num(cvar_ammo[idwpn])
  436.  
  437. if (zp_get_user_zombie(id))
  438. {
  439. client_print(id, print_chat, "[NST Wpn] Ban dang la Zombie nen khong the mua %s", g_wpn_name[idwpn])
  440. }
  441. else if(!is_user_alive(id))
  442. {
  443. client_print(id, print_chat, "[NST Wpn] Ban chi co the mua duoc %s khi con song", g_wpn_name[idwpn]);
  444. }
  445. else if(user_money < wp_cost)
  446. {
  447. client_print(id, print_chat, "[NST Wpn] Ban khong du tien de mua");
  448. }
  449. else if(HAS_WEAPON[id] == idwpn)
  450. {
  451. new CURENT_WEAPON = HAS_WEAPON[id]
  452. if (user_ammo[id][CURENT_WEAPON] != ammo_max && user_money >= cost_by_ammo) buy_ammo(id)
  453. else client_print(id, print_chat, "[NST Wpn] Ban da co %s roi", g_wpn_name[idwpn])
  454. }
  455. else
  456. {
  457. current_select[id] = idwpn
  458. drop_prim(id)
  459. HAS_WEAPON[id] = idwpn
  460. show_hud_ammo(id, ammo_max)
  461. give_weapon(id, clip_max, ammo_max)
  462. cs_set_user_money(id, user_money-wp_cost)
  463. client_print(id, print_chat, "[NST Wpn] Ban da mua %s", g_wpn_name[idwpn])
  464. }
  465. }
  466.  
  467. }
  468. // End Buy Weapon
  469.  
  470. // Buy Ammo
  471. public buy_ammo(id)
  472. {
  473. new buyzone = cs_get_user_buyzone(id)
  474. new mod_runing = nst_get_mod_runing()
  475. if (mod_runing == 1 || mod_runing == 2 || mod_runing == 3) buyzone = 1
  476.  
  477. if (buyzone == 0) client_print(id, print_chat, "[NST Wpn] Ban khong the mua dan o vi tri nay")
  478. else
  479. {
  480. new CURENT_WEAPON = HAS_WEAPON[id]
  481. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  482.  
  483. new plrClip, plrAmmo, plrWeapId
  484. plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
  485. new ammo_max = get_cvar_num(cvar_ammo_name[CURENT_WEAPON])
  486. new curent_ammo = user_ammo[id][CURENT_WEAPON]
  487. new ammo_show = ammo_max - curent_ammo
  488. new user_money = cs_get_user_money(id)
  489.  
  490. if (zp_get_user_zombie(id))
  491. {
  492. client_print(id, print_chat, "[NST Wpn] Ban dang la Zombie nen khong the dan", g_wpn_name[CURENT_WEAPON])
  493. }
  494. else if(plrWeapId == CHANGE_WEAPON && HAS_WEAPON[id] && user_money >= cost_by_ammo && curent_ammo != ammo_max)
  495. {
  496. user_ammo[id][CURENT_WEAPON] = ammo_max
  497. show_hud_ammo(id, ammo_show)
  498. cs_set_user_money(id, user_money-cost_by_ammo)
  499. give_weapon(id, user_clip[id][CURENT_WEAPON], ammo_max)
  500. }
  501. }
  502. }
  503. // End Buy Ammo
  504.  
  505.  
  506. // Show Hud Ammo
  507. public show_hud_ammo(id,ammo)
  508. {
  509. new CURENT_WEAPON = HAS_WEAPON[id]
  510.  
  511. new clip_max = get_pcvar_num(cvar_clip[CURENT_WEAPON])
  512. if (ammo<=clip_max) fun_show_ammo(id, ammo)
  513. else
  514. {
  515. new ammo_a = ammo % clip_max
  516. new num_for = (ammo-ammo_a)/clip_max
  517. for (new i = 1; i <= num_for; i++)
  518. {
  519. fun_show_ammo(id, clip_max)
  520. }
  521. if (ammo_a>0) fun_show_ammo(id, ammo_a)
  522. }
  523.  
  524. return PLUGIN_HANDLED
  525. }
  526. fun_show_ammo(id, ammo)
  527. {
  528. new CURENT_WEAPON = HAS_WEAPON[id]
  529. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  530.  
  531. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoPickup"), _, id)
  532. write_byte(AMMOID[CHANGE_WEAPON]) // ammo id
  533. write_byte(ammo) // ammo amount
  534. message_end()
  535. }
  536. // End Show Hud Ammo
  537.  
  538.  
  539. // Check Weapon
  540. public checkModel(id)
  541. {
  542. if (zp_get_user_zombie(id)) return PLUGIN_HANDLED
  543.  
  544.  
  545. new CURENT_WEAPON = HAS_WEAPON[id]
  546. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  547.  
  548. new szWeapID = read_data(2)
  549. if ( szWeapID == CHANGE_WEAPON && HAS_WEAPON[id])
  550. {
  551. set_pev(id, pev_viewmodel2, V_MODEL[CURENT_WEAPON])
  552. set_pev(id, pev_weaponmodel2, P_MODEL[CURENT_WEAPON])
  553. }
  554. return PLUGIN_HANDLED
  555. }
  556.  
  557. public checkWeapon(id)
  558. {
  559. new CURENT_WEAPON = HAS_WEAPON[id]
  560. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  561.  
  562. new plrClip, plrAmmo, plrWeapId
  563. plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
  564.  
  565. if (plrWeapId == CHANGE_WEAPON && HAS_WEAPON[id])
  566. {
  567. checkModel(id)
  568.  
  569. // Speed
  570. new Ent = get_weapon_ent(id,plrWeapId)
  571. new Float:N_Speed
  572. if(Ent)
  573. {
  574. N_Speed = get_pcvar_float(cvar_speed[CURENT_WEAPON])
  575. new Float:Delay = get_pdata_float( Ent, 46, 4) * N_Speed
  576. if (Delay > 0.0) {
  577. set_pdata_float( Ent, 46, Delay, 4)
  578. }
  579. }
  580.  
  581. // Update Clip Ammo
  582. user_clip[id][CURENT_WEAPON] = plrClip
  583. user_ammo[id][CURENT_WEAPON] = plrAmmo
  584. }
  585. //client_print(id, print_chat, "[%i]", HAS_WEAPON[id])
  586.  
  587. return PLUGIN_HANDLED
  588. }
  589. // End Check Weapon
  590.  
  591.  
  592. // Zoom Wepaon
  593. public fw_CmdStart( id, uc_handle, seed )
  594. {
  595. if( !is_user_alive( id ) )
  596. {
  597. g_hasZoom[id] = false
  598. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  599. return PLUGIN_HANDLED
  600. }
  601.  
  602.  
  603. new CURENT_WEAPON = HAS_WEAPON[id]
  604. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  605.  
  606. new szClip, szAmmo
  607. new szWeapID = get_user_weapon( id, szClip, szAmmo )
  608.  
  609. if(szWeapID == CHANGE_WEAPON && HAS_WEAPON[id])
  610. {
  611. // Zoom Weapon
  612. if (get_pcvar_num(cvar_zoom[CURENT_WEAPON]))
  613. {
  614. if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
  615. {
  616. if(!g_hasZoom[id] == true)
  617. {
  618. g_hasZoom[id] = true
  619. cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
  620. client_cmd(id,"spk weapons/zoom")
  621. }
  622. else if (g_hasZoom[id])
  623. {
  624. g_hasZoom[ id ] = false
  625. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  626. }
  627. }
  628. }
  629. // UClip
  630. if (get_pcvar_num(cvar_uclip[CURENT_WEAPON]) == 1)
  631. {
  632. new ent = get_weapon_ent(id,CHANGE_WEAPON)
  633. cs_set_weapon_ammo(ent, get_pcvar_num(cvar_clip[CURENT_WEAPON]))
  634. }
  635. // Update Ammo
  636. if( !(SHOTGUNS_BS & (1<<CHANGE_WEAPON)) ) cs_set_user_bpammo(id, CHANGE_WEAPON, user_ammo[id][CURENT_WEAPON])
  637.  
  638.  
  639. //client_print(id, print_chat, "[%i] [%i]", get_pcvar_num(cvar_uclip[CURENT_WEAPON]), get_pcvar_num(cvar_zoom[CURENT_WEAPON]))
  640. }
  641.  
  642.  
  643. if ( (g_hasZoom[ id ] && (pev(id, pev_button) & IN_RELOAD)) || (g_hasZoom[id] && szWeapID != CHANGE_WEAPON) )
  644. {
  645. g_hasZoom[id] = false
  646. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  647. }
  648.  
  649.  
  650. return PLUGIN_HANDLED
  651. }
  652. // End Zoom Wepaon
  653.  
  654.  
  655. //Give wpn
  656. public give_weapon(id, clip, ammo)
  657. {
  658. if (zp_get_user_zombie(id)) return PLUGIN_HANDLED
  659.  
  660. new CURENT_WEAPON = HAS_WEAPON[id]
  661. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  662.  
  663. give_item(id,Name_WpnChange[CURENT_WEAPON])
  664. cs_set_user_bpammo(id, CHANGE_WEAPON, ammo)
  665. new ent = get_weapon_ent(id,CHANGE_WEAPON)
  666. cs_set_weapon_ammo(ent, clip)
  667.  
  668. return PLUGIN_HANDLED
  669. }
  670.  
  671.  
  672.  
  673. // Other Public
  674. public client_connect(id)
  675. {
  676. HAS_WEAPON[id] = 0
  677. }
  678. public client_disconnect(id)
  679. {
  680. HAS_WEAPON[id] = 0
  681. }
  682. public event_start_freezetime()
  683. {
  684. remove_class_wpn()
  685. }
  686. // End Other Public
  687.  
  688.  
  689.  
  690. // Drop Weapon
  691. public cmd_drop(id)
  692. {
  693. new CURENT_WEAPON = HAS_WEAPON[id]
  694. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  695.  
  696. new plrClip, plrAmmo
  697. new plrWeapId
  698. plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
  699.  
  700. if(plrWeapId == CHANGE_WEAPON && HAS_WEAPON[id] && is_user_alive(id)) {
  701. create_w_class(id, plrClip, plrAmmo, 1)
  702. HAS_WEAPON[id] = 0
  703. return PLUGIN_HANDLED
  704. }
  705. return PLUGIN_CONTINUE
  706. }
  707.  
  708. public create_w_class(id, clip, ammo, type)
  709. {
  710. new CURENT_WEAPON = HAS_WEAPON[id]
  711. //new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  712.  
  713. new Float:Aim[3],Float:origin[3]
  714. VelocityByAim(id, 64, Aim)
  715. entity_get_vector(id,EV_VEC_origin,origin)
  716.  
  717. if (type == 1) {
  718. origin[0] += 2*Aim[0]
  719. origin[1] += 2*Aim[1]
  720. }
  721.  
  722. new nst_cre_class = create_entity("info_target")
  723. entity_set_string(nst_cre_class,EV_SZ_classname,name_class_weapon[CURENT_WEAPON])
  724. entity_set_model(nst_cre_class,W_MODEL[CURENT_WEAPON])
  725.  
  726. entity_set_size(nst_cre_class,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
  727. entity_set_int(nst_cre_class,EV_INT_solid,1)
  728.  
  729. entity_set_int(nst_cre_class,EV_INT_movetype,6)
  730. entity_set_int(nst_cre_class, EV_INT_iuser1, clip)
  731. entity_set_int(nst_cre_class, EV_INT_iuser2, ammo)
  732. entity_set_vector(nst_cre_class,EV_VEC_origin,origin)
  733. remowegun(id)
  734. }
  735. public remowegun(id)
  736. {
  737. new CURENT_WEAPON = HAS_WEAPON[id]
  738. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  739. new wpnList[32]
  740. new number
  741. get_user_weapons(id,wpnList,number)
  742. for (new i = 0;i < number ;i++) {
  743. if (wpnList[i] == CHANGE_WEAPON) {
  744. fm_strip_user_gun(id, wpnList[i])
  745. }
  746. }
  747. }
  748. // End Drop Weapon
  749.  
  750.  
  751. // Remove Class Wepaons in new round
  752. public remove_class_wpn()
  753. {
  754. new i = 1, check_value = 1
  755. while(check_value && i<MAX_WPN)
  756. {
  757. if (g_wpn_change[i] <= 0) check_value = 0
  758. new nextitem = find_ent_by_class(-1,name_class_weapon[i])
  759. while(nextitem)
  760. {
  761. remove_entity(nextitem)
  762. nextitem = find_ent_by_class(-1,name_class_weapon[i])
  763. }
  764. i++
  765. }
  766. return PLUGIN_CONTINUE
  767. }
  768. // End Remove Class Wepaons in new round
  769.  
  770.  
  771. // Weapon Pickup
  772. public pfn_touch(ptr, ptd) {
  773.  
  774. new i = 1, check_value = 1
  775. while(check_value && i<MAX_WPN)
  776. {
  777. if (g_wpn_change[i] <= 0) check_value = 0
  778. if(is_valid_ent(ptr)) {
  779. new classname[32]
  780. entity_get_string(ptr,EV_SZ_classname,classname,31)
  781. if(equal(classname, name_class_weapon[i])) {
  782. if(is_valid_ent(ptd)) {
  783. new id = ptd
  784. if(id > 0 && id < 34) {
  785. if (!check_has_wpn(id) && is_user_alive(id) && !(zp_get_user_zombie(id))) {
  786. HAS_WEAPON[id] = i
  787. give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), entity_get_int(ptr, EV_INT_iuser2))
  788. remove_entity(ptr)
  789. }
  790. }
  791. }
  792. }
  793. }
  794. i++
  795. }
  796. }
  797.  
  798. check_has_wpn(id)
  799. {
  800. new weapons[32], num, has_wpn = 0
  801. get_user_weapons(id, weapons, num)
  802. new type_wpn_cr = TYPE_WPN
  803.  
  804. for (new i = 0; i < num; i++)
  805. {
  806. new type_wpn = nst_get_weapon_type(weapons[i])
  807. if (type_wpn == type_wpn_cr) has_wpn = 1
  808.  
  809. }
  810.  
  811. return has_wpn
  812. }
  813. // End Weapon Pickup
  814.  
  815.  
  816.  
  817. // Recoil of Weapon
  818. public fw_primary_attack(ent)
  819. {
  820. new id = pev(ent,pev_owner)
  821. pev(id,pev_punchangle,cl_pushangle[id])
  822.  
  823. return HAM_IGNORED
  824. }
  825. public fw_primary_attack_post(ent)
  826. {
  827. new id = pev(ent,pev_owner)
  828. new CURENT_WEAPON = HAS_WEAPON[id]
  829. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  830. new szClip, szAmmo
  831. new szWeapID = get_user_weapon( id, szClip, szAmmo )
  832.  
  833. if( szWeapID == CHANGE_WEAPON && HAS_WEAPON[id])
  834. {
  835. new Float:push[3]
  836. pev(id,pev_punchangle,push)
  837. xs_vec_sub(push,cl_pushangle[id],push)
  838.  
  839. xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil[CURENT_WEAPON]),push)
  840. xs_vec_add(push,cl_pushangle[id],push)
  841. set_pev(id,pev_punchangle,push)
  842. }
  843.  
  844. return HAM_IGNORED
  845. }
  846. // End Recoil of Weapon
  847.  
  848.  
  849.  
  850. // Give Ammo Clip
  851. public Item_PostFrame(iEnt)
  852. {
  853. static id ; id = get_pdata_cbase(iEnt, m_pPlayer, 4)
  854. new CURENT_WEAPON = HAS_WEAPON[id]
  855. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  856. new plrClip, plrAmmo, plrWeapId
  857. plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
  858.  
  859. if (plrWeapId == CHANGE_WEAPON && HAS_WEAPON[id])
  860. {
  861.  
  862. static iId ; iId = get_pdata_int(iEnt, m_iId, 4)
  863. static iMaxClip ; iMaxClip = get_pcvar_num(cvar_clip[CURENT_WEAPON])
  864. static fInReload ; fInReload = get_pdata_int(iEnt, m_fInReload, 4)
  865. static Float:flNextAttack ; flNextAttack = get_pdata_float(id, m_flNextAttack, 5)
  866.  
  867. static iAmmoType ; iAmmoType = m_rgAmmo_player_Slot0 + get_pdata_int(iEnt, m_iPrimaryAmmoType, 4)
  868. static iBpAmmo ; iBpAmmo = get_pdata_int(id, iAmmoType, 5)
  869. static iClip ; iClip = get_pdata_int(iEnt, m_iClip, 4)
  870.  
  871.  
  872. if( fInReload && flNextAttack <= 0.0 )
  873. {
  874. new j = min(iMaxClip - iClip, iBpAmmo)
  875. set_pdata_int(iEnt, m_iClip, iClip + j, 4)
  876. set_pdata_int(id, iAmmoType, iBpAmmo-j, 5)
  877. set_pdata_int(iEnt, m_fInReload, 0, 4)
  878. user_ammo[id][CURENT_WEAPON] = iBpAmmo-j
  879. fInReload = 0
  880. }
  881.  
  882. static iButton ; iButton = pev(id, pev_button)
  883. if( (iButton & IN_ATTACK2 && get_pdata_float(iEnt, m_flNextSecondaryAttack, 4) <= 0.0)
  884. || (iButton & IN_ATTACK && get_pdata_float(iEnt, m_flNextPrimaryAttack, 4) <= 0.0) )
  885. {
  886. return
  887. }
  888.  
  889. if( iButton & IN_RELOAD && !fInReload )
  890. {
  891. if( iClip >= iMaxClip )
  892. {
  893. set_pev(id, pev_button, iButton & ~IN_RELOAD)
  894. if( SILENT_BS & (1<<iId) && !get_pdata_int(iEnt, m_fSilent, 4) )
  895. {
  896. SendWeaponAnim( id, iId == CSW_USP ? 8 : 7 )
  897. }
  898. else
  899. {
  900. SendWeaponAnim(id, 0)
  901. }
  902. }
  903. else if( iClip == g_iDftMaxClip[iId] )
  904. {
  905. if( iBpAmmo )
  906. {
  907. set_pdata_float(id, m_flNextAttack, g_fDelay[iId], 5)
  908.  
  909. if( SILENT_BS & (1<<iId) && get_pdata_int(iEnt, m_fSilent, 4) )
  910. {
  911. SendWeaponAnim( id, iId == CSW_USP ? 5 : 4 )
  912. }
  913. else
  914. {
  915. SendWeaponAnim(id, g_iReloadAnims[iId])
  916. }
  917. set_pdata_int(iEnt, m_fInReload, 1, 4)
  918.  
  919. set_pdata_float(iEnt, m_flTimeWeaponIdle, g_fDelay[iId] + 0.5, 4)
  920. }
  921. }
  922. }
  923. }
  924. }
  925. SendWeaponAnim(id, iAnim)
  926. {
  927. set_pev(id, pev_weaponanim, iAnim)
  928.  
  929. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
  930. write_byte(iAnim)
  931. write_byte(pev(id,pev_body))
  932. message_end()
  933. }
  934.  
  935. public Shotgun_WeaponIdle( iEnt )
  936. {
  937. if( get_pdata_float(iEnt, m_flTimeWeaponIdle, 4) > 0.0 )
  938. {
  939. return
  940. }
  941.  
  942.  
  943. static id ; id = get_pdata_cbase(iEnt, m_pPlayer, 4)
  944. new CURENT_WEAPON = HAS_WEAPON[id]
  945. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  946. new plrClip, plrAmmo, plrWeapId
  947. plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
  948.  
  949. if (plrWeapId == CHANGE_WEAPON && HAS_WEAPON[id])
  950. {
  951.  
  952. static iId ; iId = get_pdata_int(iEnt, m_iId, 4)
  953. static iMaxClip ; iMaxClip = get_pcvar_num(cvar_clip[CURENT_WEAPON])
  954.  
  955. static iClip ; iClip = get_pdata_int(iEnt, m_iClip, 4)
  956. static fInSpecialReload ; fInSpecialReload = get_pdata_int(iEnt, m_fInSpecialReload, 4)
  957.  
  958. if( !iClip && !fInSpecialReload )
  959. {
  960. return
  961. }
  962.  
  963. if( fInSpecialReload )
  964. {
  965. static id ; id = get_pdata_cbase(iEnt, m_pPlayer, 4)
  966. static iBpAmmo ; iBpAmmo = get_pdata_int(id, 381, 5)
  967. static iDftMaxClip ; iDftMaxClip = g_iDftMaxClip[iId]
  968.  
  969. if( iClip < iMaxClip && iClip == iDftMaxClip && iBpAmmo )
  970. {
  971. Shotgun_Reload(iEnt, iId, iMaxClip, iClip, iBpAmmo, id)
  972. return
  973. }
  974. else if( iClip == iMaxClip && iClip != iDftMaxClip )
  975. {
  976. SendWeaponAnim( id, after_reload )
  977.  
  978. set_pdata_int(iEnt, m_fInSpecialReload, 0, 4)
  979. set_pdata_float(iEnt, m_flTimeWeaponIdle, 1.5, 4)
  980. }
  981. }
  982. return
  983. }
  984. }
  985.  
  986. public Shotgun_PostFrame( iEnt )
  987. {
  988. static id ; id = get_pdata_cbase(iEnt, m_pPlayer, 4)
  989. new CURENT_WEAPON = HAS_WEAPON[id]
  990. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  991. new plrClip, plrAmmo, plrWeapId
  992. plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
  993.  
  994. if (plrWeapId == CHANGE_WEAPON && HAS_WEAPON[id])
  995. {
  996.  
  997. static iBpAmmo ; iBpAmmo = get_pdata_int(id, 381, 5)
  998. static iClip ; iClip = get_pdata_int(iEnt, m_iClip, 4)
  999. static iId ; iId = get_pdata_int(iEnt, m_iId, 4)
  1000. static iMaxClip ; iMaxClip = get_pcvar_num(cvar_clip[CURENT_WEAPON])
  1001.  
  1002. // Support for instant reload (used for example in my plugin "Reloaded Weapons On New Round")
  1003. if( get_pdata_int(iEnt, m_fInReload, 4) && get_pdata_float(id, m_flNextAttack, 5) <= 0.0 )
  1004. {
  1005. new j = min(iMaxClip - iClip, iBpAmmo)
  1006. set_pdata_int(iEnt, m_iClip, iClip + j, 4)
  1007. set_pdata_int(id, 381, iBpAmmo-j, 5)
  1008. set_pdata_int(iEnt, m_fInReload, 0, 4)
  1009. user_ammo[id][CURENT_WEAPON] = iBpAmmo-j
  1010. return
  1011. }
  1012.  
  1013. static iButton ; iButton = pev(id, pev_button)
  1014. if( iButton & IN_ATTACK && get_pdata_float(iEnt, m_flNextPrimaryAttack, 4) <= 0.0 )
  1015. {
  1016. return
  1017. }
  1018.  
  1019. if( iButton & IN_RELOAD )
  1020. {
  1021. if( iClip >= iMaxClip )
  1022. {
  1023. set_pev(id, pev_button, iButton & ~IN_RELOAD) // still this fucking animation
  1024. set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.5, 4) // Tip ?
  1025. }
  1026.  
  1027. else if( iClip == g_iDftMaxClip[iId] )
  1028. {
  1029. if( iBpAmmo )
  1030. {
  1031. Shotgun_Reload(iEnt, iId, iMaxClip, iClip, iBpAmmo, id)
  1032. }
  1033. }
  1034. }
  1035. }
  1036. }
  1037.  
  1038. Shotgun_Reload(iEnt, iId, iMaxClip, iClip, iBpAmmo, id)
  1039. {
  1040. static id ; id = get_pdata_cbase(iEnt, m_pPlayer, 4)
  1041. new CURENT_WEAPON = HAS_WEAPON[id]
  1042. new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  1043. new plrClip, plrAmmo, plrWeapId
  1044. plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
  1045. if (plrWeapId == CHANGE_WEAPON && HAS_WEAPON[id])
  1046. {
  1047.  
  1048. if(iBpAmmo <= 0 || iClip == iMaxClip)
  1049. return
  1050.  
  1051. if(get_pdata_int(iEnt, m_flNextPrimaryAttack, 4) > 0.0)
  1052. return
  1053.  
  1054. switch( get_pdata_int(iEnt, m_fInSpecialReload, 4) )
  1055. {
  1056. case 0:
  1057. {
  1058. SendWeaponAnim( id , start_reload )
  1059. set_pdata_int(iEnt, m_fInSpecialReload, 1, 4)
  1060. set_pdata_float(id, m_flNextAttack, 0.55, 4)
  1061. set_pdata_float(iEnt, m_flTimeWeaponIdle, 0.55, 4)
  1062. set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.55, 4)
  1063. set_pdata_float(iEnt, m_flNextSecondaryAttack, 0.55, 4)
  1064. return
  1065. }
  1066. case 1:
  1067. {
  1068. if( get_pdata_float(iEnt, m_flTimeWeaponIdle, 4) > 0.0 )
  1069. {
  1070. return
  1071. }
  1072. set_pdata_int(iEnt, m_fInSpecialReload, 2, 4)
  1073. emit_sound(id, CHAN_ITEM, random_num(0,1) ? "weapons/reload1.wav" : "weapons/reload3.wav", 1.0, ATTN_NORM, 0, 85 + random_num(0,0x1f))
  1074. SendWeaponAnim( id, insert )
  1075.  
  1076. set_pdata_float(iEnt, m_flTimeWeaponIdle, iId == CSW_XM1014 ? 0.30 : 0.45, 4)
  1077. }
  1078. default:
  1079. {
  1080. set_pdata_int(iEnt, m_iClip, iClip + 1, 4)
  1081. set_pdata_int(id, 381, iBpAmmo-1, 5)
  1082. set_pdata_int(iEnt, m_fInSpecialReload, 1, 4)
  1083. user_ammo[id][CURENT_WEAPON] = iBpAmmo-1
  1084. }
  1085. }
  1086. }
  1087. }
  1088.  
  1089. // End Give Ammo Clip
  1090.  
  1091. // Stock
  1092. stock drop_prim(id)
  1093. {
  1094. //new CURENT_WEAPON = HAS_WEAPON[id]
  1095. ///new CHANGE_WEAPON = g_wpn_change[CURENT_WEAPON]
  1096.  
  1097. new weapons[32], num
  1098. get_user_weapons(id, weapons, num)
  1099. for (new i = 0; i < num; i++)
  1100. {
  1101. new type_wpn = nst_get_weapon_type(weapons[i])
  1102. new type_wpn_cr = TYPE_WPN
  1103. if (type_wpn == type_wpn_cr)
  1104. {
  1105. if (!HAS_WEAPON[id])
  1106. {
  1107. static wname[32]
  1108. get_weaponname(weapons[i], wname, sizeof wname - 1)
  1109. engclient_cmd(id, "drop", wname)
  1110. }
  1111. else
  1112. {
  1113. new CURENT_WEAPON = HAS_WEAPON[id]
  1114. remowegun(id)
  1115. create_w_class(id, user_clip[id][CURENT_WEAPON], user_ammo[id][CURENT_WEAPON], 1)
  1116. HAS_WEAPON[id] = 0
  1117. }
  1118. }
  1119. }
  1120. }
  1121. //get weapon id
  1122. stock get_weapon_ent(id,wpnid=0,wpnName[]="")
  1123. {
  1124. // who knows what wpnName will be
  1125. static newName[24];
  1126.  
  1127. // need to find the name
  1128. if(wpnid) get_weaponname(wpnid,newName,23);
  1129.  
  1130. // go with what we were told
  1131. else formatex(newName,23,"%s",wpnName);
  1132.  
  1133. // prefix it if we need to
  1134. if(!equal(newName,"weapon_",7))
  1135. format(newName,23,"weapon_%s",newName);
  1136.  
  1137. return fm_find_ent_by_owner(get_maxplayers(),newName,id);
  1138. }
  1139. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  1140. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1034\\ f0\\ fs16 \n\\ par }
  1141. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement