HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2. [ZP] Extra Item: Golden XM1014
  3. Team: Humans
  4.  
  5. Description: This plugin adds a new weapon for Human Teams.
  6. Weapon Cost: 20
  7.  
  8. Features:
  9. - This weapon do more damage
  10. - This weapon has zoom
  11. - Launch Lasers
  12. - This weapon has unlimited bullets
  13.  
  14.  
  15. Cvars:
  16.  
  17.  
  18. - zp_goldenxm_dmg_multiplier <5> - Damage Multiplier for Golden XM1014
  19. - zp_goldenxm_gold_bullets <1|0> - Golden bullets effect ?
  20. - zp_goldenxm_custom_model <1|0> - Golden XM1014 Custom Model
  21. - zp_goldenxm_unlimited_clip <1|0> - Golden XM1014 Unlimited Clip
  22. - zp_goldenxm_enabled <1|0> - Golden XM1014 enable buy
  23. */
  24.  
  25.  
  26.  
  27. #include <amxmodx>
  28. #include <engine> // Added by Shidla
  29. #include <fakemeta>
  30. #include <fakemeta_util>
  31. #include <fun>
  32. #include <hamsandwich>
  33. #include <cstrike>
  34. #include <zombieplague>
  35.  
  36. #define PLUGIN "[ZP] Weapon: Golden XM1014"
  37. #define VERSION "1.1"
  38. #define AUTHOR "Wisam187 / Shidla / Furion"
  39.  
  40.  
  41.  
  42. #define is_valid_player(%1) (1 <= %1 <= 32)
  43. #define ENG_NULLENT -1 // Added by Shidla
  44. #define EV_INT_WEAPONKEY EV_INT_impulse // Added by Shidla
  45. #define GXM1014_WEAPONKEY 5222 // Added by Shidla
  46. new const g_GXM1014Ent[] = "weapon_xm1014"
  47.  
  48. new xm1014_V_MODEL[64] = "models/weapons_gold/v_xm1014.mdl"
  49. new xm1014_P_MODEL[64] = "models/weapons_gold/p_xm1014.mdl"
  50. new xm1014_W_MODEL[64] = "models/weapons_gold/w_xm1014.mdl"
  51.  
  52. /* Pcvars */
  53. new cvar_dmgmultiplier, cvar_goldbullets, cvar_custommodel, cvar_uclip, cvar_enabled
  54. new g_cvar_dmgmultiplier, g_cvar_goldbullets, g_cvar_custommodel, g_cvar_uclip, g_cvar_enabled
  55. // Item ID
  56. new g_itemid
  57.  
  58. new bool:g_Hasxm1014[33]
  59.  
  60. new g_hasZoom[ 33 ]
  61. new bullets[ 33 ]
  62.  
  63. // Sprite
  64. new m_spriteTexture
  65. //new SayText
  66.  
  67. const Wep_xm1014 = ((1<<CSW_XM1014))
  68. const m_pPlayer = 41
  69.  
  70. public plugin_precache()
  71. {
  72. precache_model(xm1014_V_MODEL)
  73. precache_model(xm1014_P_MODEL)
  74. precache_model(xm1014_W_MODEL)
  75. m_spriteTexture = precache_model("sprites/dot.spr")
  76. precache_sound("weapons/zoom.wav")
  77.  
  78. /* CVARS */
  79. cvar_dmgmultiplier = register_cvar("zp_goldenxm_dmg_multiplier", "3")
  80. cvar_custommodel = register_cvar("zp_goldenxm_custom_model", "1")
  81. cvar_goldbullets = register_cvar("zp_goldenxm_gold_bullets", "0")
  82. cvar_uclip = register_cvar("zp_goldenxm_unlimited_clip", "0")
  83.  
  84. cvar_enabled = register_cvar("zp_goldenxm_enabled", "1")
  85. }
  86.  
  87.  
  88. public plugin_init()
  89. {
  90.  
  91. // Register The Plugin
  92. register_plugin(PLUGIN, VERSION, AUTHOR)
  93. //register_cvar("Shidla", "[ZP] Golden XM1014 [w_ model added]", FCVAR_SERVER|FCVAR_SPONLY)
  94.  
  95. g_cvar_dmgmultiplier = get_pcvar_num(cvar_dmgmultiplier)
  96. g_cvar_goldbullets = get_pcvar_num(cvar_goldbullets)
  97. g_cvar_custommodel = get_pcvar_num(cvar_custommodel)
  98. g_cvar_uclip = get_pcvar_num(cvar_uclip)
  99. g_cvar_enabled = get_pcvar_num(cvar_enabled)
  100.  
  101.  
  102. // Death Msg
  103. register_event("DeathMsg", "Death", "a")
  104. // Weapon Pick Up
  105. register_event("WeapPickup","checkModel","b","1=19")
  106. // Current Weapon Event
  107. register_event("CurWeapon","checkWeapon","be","1=1")
  108. register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
  109. // Ham TakeDamage
  110. RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
  111. register_forward( FM_CmdStart, "fw_CmdStart" )
  112. RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
  113. RegisterHam(Ham_Item_AddToPlayer, g_GXM1014Ent, "fw_GXM1014AddToPlayer") // Added by Shidla
  114. //SayText = get_user_msgid("SayText")
  115. //register_dictionary("zp_xm1014_w_model.txt")
  116. RegisterHam(Ham_Item_Holster,g_GXM1014Ent, "fw_Holster_Post", 1)
  117. RegisterHam(Ham_Item_Deploy, g_GXM1014Ent, "fw_Item_Deploy_Post", 1)
  118. register_forward(FM_SetModel, "fw_SetModel") // Added by Shidla
  119. // Register Zombie Plague extra item
  120. g_itemid = zp_register_extra_item("Golden XM1014", 100, ZP_TEAM_HUMAN)
  121.  
  122. }
  123.  
  124.  
  125.  
  126. public zp_extra_item_selected(player, itemid)
  127. {
  128. if ( itemid == g_itemid )
  129. {
  130.  
  131. if (!g_cvar_enabled) return ZP_PLUGIN_HANDLED
  132. else
  133. {
  134.  
  135. if ( user_has_weapon(player, CSW_XM1014 ) )
  136. {
  137. drop_prim(player)
  138. }
  139. give_item(player, "weapon_xm1014")
  140. cs_set_user_bpammo(player, CSW_XM1014, 35);
  141. //print_col_chat( player, "^4[ZP] ^1%L ^3[%L]", LANG_PLAYER, "BUY_XM1014", LANG_PLAYER, "GXM-1014")
  142. g_Hasxm1014[player] = true;
  143. }
  144. }
  145. return PLUGIN_HANDLED
  146. }
  147.  
  148.  
  149. /*
  150. CSW_P228 || CSW_GLOCK18 || CSW_ELITE || CSW_FIVESEVEN || CSW_USP || CSW_DEAGLE
  151. CSW_MAC10 || CSW_UMP45 || CSW_MP5NAVY || CSW_TMP || CSW_P90
  152. CSW_XM1014 || CSW_M3
  153. CSW_GALIL || CSW_FAMAS || CSW_M4A1 || CSW_AK47
  154. CSW_AWP ||CSW_SCOUT || CSW_AUG || CSW_SG550 || CSW_G3SG1 || CSW_SG552 || CSW_M249
  155. CSW_KNIFE
  156. CSW_HEGRENADE || CSW_C4 || CSW_SMOKEGRENADE || CSW_FLASHBANG
  157.  
  158. */
  159.  
  160.  
  161.  
  162. public client_connect(id)
  163. {
  164. g_Hasxm1014[id] = false
  165. }
  166.  
  167. public client_disconnected(id)
  168. {
  169. g_Hasxm1014[id] = false
  170. }
  171.  
  172. public Death()
  173. {
  174. g_Hasxm1014[read_data(2)] = false
  175. }
  176.  
  177. public fwHamPlayerSpawnPost(id)
  178. {
  179. g_Hasxm1014[id] = false
  180. remove_removexm1014(id)
  181. }
  182.  
  183. // remove gun and save all guns
  184. public remove_removexm1014(id) {
  185. new wpnList[32]
  186. new number
  187. get_user_weapons(id,wpnList,number)
  188. for (new i = 0;i < number ;i++) {
  189. if (wpnList[i] == CSW_XM1014) {
  190. fm_strip_user_gun(id, wpnList[i])
  191. }
  192. }
  193. }
  194.  
  195.  
  196. public zp_user_infected_post(id)
  197. {
  198. if (zp_get_user_zombie(id))
  199. {
  200. g_Hasxm1014[id] = false
  201. }
  202. }
  203.  
  204. public checkModel(id)
  205. {
  206. if ( zp_get_user_zombie(id) )
  207. return PLUGIN_HANDLED
  208.  
  209. new szWeapID = read_data(2)
  210.  
  211. if ( szWeapID == CSW_XM1014 && g_Hasxm1014[id] == true && g_cvar_custommodel )
  212. {
  213. set_pev(id, pev_viewmodel2, xm1014_V_MODEL)
  214. set_pev(id, pev_weaponmodel2, xm1014_P_MODEL)
  215. }
  216. return PLUGIN_HANDLED
  217. }
  218.  
  219. public checkWeapon(id)
  220. {
  221. new plrClip, plrAmmo, plrWeap[32]
  222. new plrWeapId
  223.  
  224. plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
  225.  
  226. if (plrWeapId == CSW_XM1014 && g_Hasxm1014[id])
  227. {
  228. checkModel(id)
  229. }
  230. else
  231. {
  232. return PLUGIN_CONTINUE
  233. }
  234.  
  235. if (plrClip == 0 && g_cvar_uclip)
  236. {
  237. // If the user is out of ammo..
  238. get_weaponname(plrWeapId, plrWeap, 31)
  239. // Get the name of their weapon
  240. give_item(id, plrWeap)
  241. engclient_cmd(id, plrWeap)
  242. engclient_cmd(id, plrWeap)
  243. engclient_cmd(id, plrWeap)
  244. }
  245. return PLUGIN_HANDLED
  246. }
  247.  
  248. public fw_Holster_Post(wpn)
  249. {
  250. static id
  251. id = get_pdata_cbase(wpn, m_pPlayer, 4)
  252.  
  253. if(is_valid_player( id ) && is_user_alive(id) && get_user_weapon(id) == CSW_XM1014 && g_Hasxm1014[id] )
  254. {
  255. g_hasZoom[ id ] = false
  256. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  257. }
  258. return HAM_IGNORED
  259. }
  260.  
  261.  
  262. public fw_Item_Deploy_Post(weapon_ent)
  263. {
  264. new owner
  265. owner = pev(weapon_ent,pev_owner)
  266. if(is_valid_player( owner ) && is_user_alive(owner) && get_user_weapon(owner) == CSW_XM1014 && g_Hasxm1014[owner] && g_cvar_custommodel )
  267. {
  268.  
  269.  
  270. set_pev(owner, pev_viewmodel2, xm1014_V_MODEL)
  271. set_pev(owner, pev_weaponmodel2, xm1014_P_MODEL)
  272. }
  273.  
  274. }
  275.  
  276.  
  277. public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
  278. {
  279. if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_XM1014 && g_Hasxm1014[attacker] )
  280. {
  281. SetHamParamFloat(4, damage * float( g_cvar_dmgmultiplier ) )
  282. }
  283. return HAM_IGNORED
  284. }
  285.  
  286. public fw_CmdStart( id, uc_handle, seed )
  287. {
  288. if( !is_user_alive( id ) )
  289. return FMRES_IGNORED
  290.  
  291. new szClip, szAmmo
  292. new szWeapID = get_user_weapon( id, szClip, szAmmo )
  293.  
  294. if( szWeapID != CSW_XM1014|| g_Hasxm1014[id] == false)
  295. return FMRES_IGNORED
  296.  
  297. if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
  298. {
  299.  
  300.  
  301. if( szWeapID == CSW_XM1014 && g_Hasxm1014[id] == true && !g_hasZoom[id] == true)
  302. {
  303. g_hasZoom[id] = true
  304. cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
  305. emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
  306. }
  307.  
  308. else if ( szWeapID == CSW_XM1014 && g_Hasxm1014[id] == true && g_hasZoom[id])
  309. {
  310. g_hasZoom[ id ] = false
  311. cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
  312.  
  313. }
  314.  
  315. }
  316. return FMRES_IGNORED
  317. }
  318.  
  319.  
  320. public make_tracer(id)
  321. {
  322. if (g_cvar_goldbullets)
  323. {
  324. new clip,ammo
  325. new wpnid = get_user_weapon(id,clip,ammo)
  326. new pteam[16]
  327.  
  328. get_user_team(id, pteam, 15)
  329.  
  330. if ((bullets[id] > clip) && (wpnid == CSW_XM1014) && g_Hasxm1014[id])
  331. {
  332. new vec1[3], vec2[3]
  333. get_user_origin(id, vec1, 1) // origin; your camera point.
  334. get_user_origin(id, vec2, 4) // termina; where your bullet goes (4 is cs-only)
  335.  
  336.  
  337. //BEAMENTPOINTS
  338. message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
  339. write_byte (0) //TE_BEAMENTPOINTS 0
  340. write_coord(vec1[0])
  341. write_coord(vec1[1])
  342. write_coord(vec1[2])
  343. write_coord(vec2[0])
  344. write_coord(vec2[1])
  345. write_coord(vec2[2])
  346. write_short( m_spriteTexture )
  347. write_byte(1) // framestart
  348. write_byte(5) // framerate
  349. write_byte(2) // life
  350. write_byte(10) // width
  351. write_byte(0) // noise
  352. write_byte( 255 ) // r, g, b
  353. write_byte( 215 ) // r, g, b
  354. write_byte( 0 ) // r, g, b
  355. write_byte(200) // brightness
  356. write_byte(150) // speed
  357. message_end()
  358. }
  359.  
  360. bullets[id] = clip
  361. }
  362.  
  363. }
  364.  
  365.  
  366.  
  367. // Added by Shidla
  368. public fw_SetModel(entity, model[])
  369. {
  370. // Entity is not valid
  371. if(!is_valid_ent(entity))
  372. return FMRES_IGNORED;
  373.  
  374. // Entity model is not w_xm1014
  375. if(!equal(model, "models/w_xm1014.mdl"))
  376. return FMRES_IGNORED;
  377.  
  378. // Get classname
  379. static szClassName[33]
  380. entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  381.  
  382. // Not a Weapon box
  383. if(!equal(szClassName, "weaponbox"))
  384. return FMRES_IGNORED
  385.  
  386. // Some vars
  387. static iOwner, iStoredxM1014ID
  388.  
  389. // Get owner
  390. iOwner = entity_get_edict(entity, EV_ENT_owner)
  391.  
  392. // Get drop weapon index (galil) to use in fw_Galil_AddToPlayer forward
  393. iStoredxM1014ID = find_ent_by_owner(ENG_NULLENT, "weapon_xm1014", entity)
  394.  
  395. // Entity classname is weaponbox, and galil has founded
  396. if(g_Hasxm1014[iOwner] && is_valid_ent(iStoredxM1014ID))
  397. {
  398. // Setting weapon options
  399. entity_set_int(iStoredxM1014ID, EV_INT_WEAPONKEY, GXM1014_WEAPONKEY)
  400.  
  401. // Reset user vars
  402. g_Hasxm1014[iOwner] = false
  403.  
  404. // Set weaponbox new model
  405. entity_set_model(entity, xm1014_W_MODEL)
  406.  
  407. return FMRES_SUPERCEDE
  408. }
  409.  
  410. return FMRES_IGNORED
  411. }
  412.  
  413. // Added by Shidla
  414. public fw_GXM1014AddToPlayer (GXM1014, id)
  415. {
  416. // Make sure that this is M79
  417. if( is_valid_ent(GXM1014) && is_user_connected(id) && entity_get_int(GXM1014, EV_INT_WEAPONKEY) == GXM1014_WEAPONKEY)
  418. {
  419. // Update
  420. g_Hasxm1014[id] = true
  421.  
  422. // Reset weapon options
  423. entity_set_int(GXM1014, EV_INT_WEAPONKEY, 0)
  424.  
  425. return HAM_HANDLED
  426. }
  427.  
  428. return HAM_IGNORED
  429. }
  430.  
  431. stock drop_prim(id)
  432. {
  433. new weapons[32], num
  434. get_user_weapons(id, weapons, num)
  435. for (new i = 0; i < num; i++) {
  436. if (Wep_xm1014 & (1<<weapons[i]))
  437. {
  438. static wname[32]
  439. get_weaponname(weapons[i], wname, sizeof wname - 1)
  440. engclient_cmd(id, "drop", wname)
  441. }
  442. }
  443. }
  444. /*
  445. stock print_col_chat(const id, const input[], any:...)
  446. {
  447.   new count = 1, players[32];
  448.   static msg[191];
  449.   vformat(msg, 190, input, 3);
  450.   replace_all(msg, 190, "!g", "^4"); // Green Color
  451.   replace_all(msg, 190, "!y", "^1"); // Default Color
  452.   replace_all(msg, 190, "!t", "^3"); // Team Color
  453.   if (id) players[0] = id; else get_players(players, count, "ch");
  454.   {
  455.   for ( new i = 0; i < count; i++ )
  456.   {
  457.   if ( is_user_connected(players[i]) )
  458.   {
  459.   message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
  460.   write_byte(players[i]);
  461.   write_string(msg);
  462.   message_end();
  463.   }
  464.   }
  465.   }
  466. } */
  467. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  468. *{\\ rtf1\\ fbidis\\ ansi\\ ansicpg1252\\ deff0{\\ fonttbl{\\ f0\\ fnil\\ fcharset0 Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ ltrpar\\ lang1034\\ f0\\ fs16 \n\\ par }
  469. */
  470.