Advertisement
Guest User

Untitled

a guest
Dec 10th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.82 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <fakemeta>
  3. #include <hamsandwich>
  4. #include <zombieplague>
  5. #include <zmvip>
  6.  
  7. new const ClassnameJetPack[] = "n4d_jetpack"
  8. new const ClassnameRocket[] = "n4d_bazooka"
  9. new const ModelVJetPack[] = "models/premium_zombie/v_jetpack_T.mdl"
  10. new const ModelPJetPack[] = "models/premium_zombie/p_jetpack_T.mdl"
  11. new const ModelWJetPack[] = "models/premium_zombie/w_jetpack_T.mdl"
  12. new const ModelRocket[] = "models/premium_zombie/s_spjet.mdl"
  13. new const SoundPickup[] = "items/gunpickup2.wav"
  14. new const SoundShoot[] = "premium_zombie/at4-1.wav"
  15. new const SoundTravel[] = "premium_zombie/bfuu.wav"
  16. new const SoundFly[] = "premium_zombie/fly.wav"
  17. new const SoundBlow[] = "premium_zombie/blow.wav"
  18.  
  19. new bool:bHasJetPack[33]
  20. new Float:fJetpackFuel[33]
  21. new Float:fLastShoot[33]
  22. new SprExp, SprTrail, iAllocInfoTarget, iMaxClients, MsgSayText
  23. new CvarMaxFuel, CvarRadius, CvarDamage, CvarSpeed, CvarCooldown, CvarRegen, CvarRocketSpeed
  24. new Float:CMaxFuel, Float:CRadius, Float:CDamage, CSpeed, Float:CCooldown, Float:CRegen, CRocketSpeed
  25. #define IsPlayer(%0) (1<=%0<=iMaxClients)
  26. #define ZP_TEAM_HUMAN (1<<1)
  27. #define ZP_PLUGIN_HANDLED 97
  28. #define PevEntType pev_flSwimTime
  29. #define EntTypeJetPack 3904
  30. #define EntTypeRocket 9340
  31.  
  32. // Uncomment this to draw ring effect
  33. #define DrawRing
  34.  
  35. // Uncomment this to draw flame effect
  36. // #define DrawFlame
  37.  
  38. new ItemJetPack
  39.  
  40. #if defined DrawRing
  41. new SprRing
  42. #endif
  43.  
  44. #if defined DrawFlame
  45. new SprFlame
  46. #endif
  47.  
  48. public plugin_precache()
  49. {
  50. precache_sound(SoundPickup)
  51. precache_sound(SoundShoot)
  52. precache_sound(SoundTravel)
  53. precache_sound(SoundFly)
  54. precache_sound(SoundBlow)
  55.  
  56. SprExp = precache_model("sprites/premium_zombie/jp_unicorn_exp.spr")
  57. SprTrail = precache_model("sprites/premium_zombie/thanatos_smoke.spr")
  58.  
  59. #if defined DrawFlame
  60. SprFlame = precache_model("sprites/xfireball3.spr")
  61. #endif
  62.  
  63. #if defined DrawRing
  64. SprRing = precache_model("sprites/shockwave.spr")
  65. #endif
  66.  
  67. precache_model(ModelVJetPack)
  68. precache_model(ModelPJetPack)
  69. precache_model(ModelWJetPack)
  70. precache_model(ModelRocket)
  71. }
  72.  
  73. public plugin_init()
  74. {
  75. register_plugin("New Jetpack", "0.0.2", "Bad_Bud,ZmOutStanding,Connor,wbyokomo")
  76.  
  77. register_event("HLTV", "OnNewRound", "a", "1=0", "2=0")
  78. register_logevent("OnRoundEnd", 2, "1=Round_End")
  79.  
  80. RegisterHam(Ham_Killed, "player", "OnPlayerKilled")
  81. RegisterHam(Ham_Player_Jump, "player", "OnPlayerJump")
  82. RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "OnKnifeSecAtkPost", 1)
  83. RegisterHam(Ham_Item_Deploy, "weapon_knife", "OnKnifeDeployPost", 1)
  84.  
  85. register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
  86. register_forward(FM_Touch, "OnTouch")
  87.  
  88. CvarMaxFuel = register_cvar("jp_maxfuel", "250.0")
  89. CvarRadius = register_cvar("jp_radius", "450.0")
  90. CvarDamage = register_cvar("jp_damage", "1800.0")
  91. CvarSpeed = register_cvar("jp_speed", "550")
  92. CvarCooldown = register_cvar("jp_cooldown", "12.0")
  93. CvarRegen = register_cvar("jp_regen", "0.5")
  94. CvarRocketSpeed = register_cvar("jp_rocket_speed", "1500")
  95.  
  96. iMaxClients = get_maxplayers()
  97. MsgSayText = get_user_msgid("SayText")
  98. ItemJetPack = zv_register_extra_item("\rJetpack + Bazooka Unicorn", "\d**CSO**", 50, ZP_TEAM_HUMAN)
  99.  
  100. // register_clcmd("drop", "CmdDropJP")
  101. }
  102. public zv_extra_item_selected(id, itemid)
  103. {
  104. if(itemid != ItemJetPack)
  105. return PLUGIN_HANDLED
  106.  
  107. give_jetpack(id)
  108.  
  109. return PLUGIN_CONTINUE
  110. }
  111.  
  112. public plugin_cfg()
  113. {
  114. iAllocInfoTarget = engfunc(EngFunc_AllocString, "info_target")
  115. }
  116.  
  117. public client_putinserver(id)
  118. {
  119. ResetValues(id)
  120. }
  121.  
  122. public client_disconnect(id)
  123. {
  124. ResetValues(id)
  125. }
  126.  
  127. public OnNewRound()
  128. {
  129. RemoveAllJetPack()
  130. CMaxFuel = get_pcvar_float(CvarMaxFuel)
  131. CRadius = get_pcvar_float(CvarRadius)
  132. CDamage = get_pcvar_float(CvarDamage)
  133. CSpeed = get_pcvar_num(CvarSpeed)
  134. CCooldown = get_pcvar_float(CvarCooldown)
  135. CRegen = get_pcvar_float(CvarRegen)
  136. CRocketSpeed = get_pcvar_num(CvarRocketSpeed)
  137. }
  138.  
  139. public OnRoundEnd()
  140. {
  141. RemoveAllJetPack()
  142. }
  143.  
  144. public OnPlayerKilled(id)
  145. {
  146. if(bHasJetPack[id])
  147. DropJetPack(id);
  148.  
  149. ResetValues(id)
  150. }
  151.  
  152. public OnPlayerJump(id)
  153. {
  154. if(bHasJetPack[id] && fJetpackFuel[id] > 0.0 && get_user_weapon(id) == CSW_KNIFE && pev(id, pev_button) & IN_DUCK && ~pev(id, pev_flags) & FL_ONGROUND)
  155. {
  156. static Float:vVelocity[3], Float:upSpeed
  157. pev(id, pev_velocity, vVelocity)
  158. upSpeed = vVelocity[2] + 35.0
  159. velocity_by_aim(id, CSpeed, vVelocity)
  160. vVelocity[2] = upSpeed > 300.0 ? 300.0 : upSpeed
  161. set_pev(id, pev_velocity, vVelocity)
  162.  
  163. #if defined DrawFlame
  164. pev(id, pev_origin, vVelocity)
  165. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vVelocity, 0)
  166. write_byte(TE_SPRITE)
  167. engfunc(EngFunc_WriteCoord, vVelocity[0])
  168. engfunc(EngFunc_WriteCoord, vVelocity[1])
  169. engfunc(EngFunc_WriteCoord, vVelocity[2])
  170. write_short(SprFlame)
  171. write_byte(8)
  172. write_byte(128)
  173. message_end()
  174. #endif
  175.  
  176. fJetpackFuel[id] > 80.0 ? emit_sound(id, CHAN_STREAM, SoundFly, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) : emit_sound(id, CHAN_STREAM, SoundBlow, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  177. fJetpackFuel[id] -= 1.0
  178. }
  179. }
  180.  
  181. public plugin_natives ()
  182. {
  183. register_native("give_jet_pack", "native_give_weapon_add", 1)
  184. }
  185.  
  186. public native_give_weapon_add(id)
  187. {
  188. give_jetpack(id)
  189. }
  190.  
  191. public zp_user_infected_pre(id)
  192. {
  193. if(bHasJetPack[id])
  194. DropJetPack(id);
  195.  
  196. ResetValues(id)
  197. }
  198.  
  199. public give_jetpack(id)
  200. {
  201. if(bHasJetPack[id])
  202. {
  203. zp_colored_print(id, "^x04[V.I.P]^x01 You already have this item!")
  204. return ZP_PLUGIN_HANDLED;
  205. }
  206.  
  207. bHasJetPack[id] = true
  208. zp_colored_print(id, "^x04[V.I.P]^x01 JetPack usage:^x04 JUMP+DUCK^x01 -- fly |^x04 SECATTACK^x01 -- shoot rocket.")
  209. engclient_cmd(id, "weapon_knife")
  210. ReplaceModel(id)
  211.  
  212. return PLUGIN_CONTINUE;
  213. }
  214.  
  215. public OnKnifeSecAtkPost(ent2)
  216. {
  217. if(pev_valid(ent2) == 2)
  218. {
  219. static id, Float:ctime
  220. id = get_pdata_cbase(ent2, 41, 4)
  221. ctime = get_gametime()
  222. if(is_user_alive(id) && bHasJetPack[id] && fLastShoot[id] < ctime)
  223. {
  224. new ent = engfunc(EngFunc_CreateNamedEntity, iAllocInfoTarget)
  225. if(ent)
  226. {
  227. engfunc(EngFunc_SetModel, ent, ModelRocket)
  228. engfunc(EngFunc_SetSize, ent, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0})
  229. new Float:fOrigin[3]
  230. pev(id, pev_origin, fOrigin)
  231. fOrigin[2] += 16.0
  232. engfunc(EngFunc_SetOrigin, ent, fOrigin)
  233. set_pev(ent, pev_classname, ClassnameRocket)
  234. set_pev(ent, pev_dmg, 100.0)
  235. set_pev(ent, pev_owner, id)
  236. velocity_by_aim(id, CRocketSpeed, fOrigin)
  237. set_pev(ent, pev_velocity, fOrigin)
  238. new Float:vecAngles[3]
  239. engfunc(EngFunc_VecToAngles, fOrigin, vecAngles)
  240. set_pev(ent, pev_angles, vecAngles)
  241. set_pev(ent, PevEntType, EntTypeRocket)
  242. set_pev(ent, pev_movetype, MOVETYPE_FLY)
  243. set_pev(ent, pev_effects, EF_LIGHT)
  244. set_pev(ent, pev_solid, SOLID_BBOX)
  245.  
  246. emit_sound(id, CHAN_STATIC, SoundShoot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  247. emit_sound(ent, CHAN_WEAPON, SoundTravel, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  248.  
  249. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  250. write_byte(TE_BEAMFOLLOW)
  251. write_short(ent)
  252. write_short(SprTrail)
  253. write_byte(40)
  254. write_byte(5)
  255. write_byte(0)
  256. write_byte(255)
  257. write_byte(0)
  258. write_byte(192)
  259. message_end()
  260.  
  261. fLastShoot[id] = ctime+CCooldown
  262. }
  263. else
  264. {
  265. client_print(id, print_chat, "[JpDebug] Failed to create rocket!")
  266. fLastShoot[id] = ctime+1.5
  267. }
  268. }
  269. }
  270. }
  271.  
  272. public OnKnifeDeployPost(ent)
  273. {
  274. if(pev_valid(ent) == 2)
  275. {
  276. static id; id = get_pdata_cbase(ent, 41, 4)
  277. if(is_user_alive(id) && bHasJetPack[id]) ReplaceModel(id);
  278. }
  279. }
  280.  
  281. public OnPlayerPreThink(id)
  282. {
  283. if(bHasJetPack[id] && fJetpackFuel[id] < CMaxFuel)
  284. {
  285. static button; button = pev(id, pev_button)
  286. if(!(button & IN_DUCK) && !(button & IN_JUMP)) fJetpackFuel[id] += CRegen;
  287. }
  288. }
  289.  
  290. public OnTouch(ent, id)
  291. {
  292. if(pev_valid(ent))
  293. {
  294. if(pev(ent, PevEntType) == EntTypeJetPack)
  295. {
  296. if(IsPlayer(id) && is_user_alive(id) && !zp_get_user_zombie(id) && !bHasJetPack[id])
  297. {
  298. engfunc(EngFunc_RemoveEntity, ent)
  299. bHasJetPack[id] = true
  300. emit_sound(id, CHAN_STATIC, SoundPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  301. engclient_cmd(id,"weapon_knife")
  302. ReplaceModel(id)
  303. }
  304. }
  305. else if(pev(ent, PevEntType) == EntTypeRocket)
  306. {
  307. static Float:fOrigin[3]
  308. pev(ent, pev_origin, fOrigin)
  309.  
  310. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  311. write_byte(TE_EXPLOSION)
  312. engfunc(EngFunc_WriteCoord, fOrigin[0])
  313. engfunc(EngFunc_WriteCoord, fOrigin[1])
  314. engfunc(EngFunc_WriteCoord, fOrigin[2])
  315. write_short(SprExp)
  316. write_byte(40)
  317. write_byte(30)
  318. write_byte(10)
  319. message_end()
  320.  
  321. #if defined DrawRing
  322. engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0)
  323. write_byte(TE_BEAMCYLINDER)
  324. engfunc(EngFunc_WriteCoord, fOrigin[0])
  325. engfunc(EngFunc_WriteCoord, fOrigin[1])
  326. engfunc(EngFunc_WriteCoord, fOrigin[2])
  327. engfunc(EngFunc_WriteCoord, fOrigin[0])
  328. engfunc(EngFunc_WriteCoord, fOrigin[1])
  329. engfunc(EngFunc_WriteCoord, fOrigin[2]+555.0)
  330. write_short(SprRing)
  331. write_byte(0)
  332. write_byte(1)
  333. write_byte(6)
  334. write_byte(8)
  335. write_byte(10)
  336. write_byte(0)
  337. write_byte(255)
  338. write_byte(0)
  339. write_byte(192)
  340. write_byte(5)
  341. message_end()
  342. #endif
  343.  
  344. static attacker; attacker = pev(ent, pev_owner)
  345. if(!is_user_connected(attacker))
  346. {
  347. engfunc(EngFunc_RemoveEntity, ent)
  348. return FMRES_IGNORED;
  349. }
  350.  
  351. if(pev_valid(id) && !is_user_connected(id))
  352. {
  353. static szClassname[32]
  354. pev(id, pev_classname, szClassname, 31)
  355. if(equal(szClassname, "func_breakable") && (pev(id, pev_solid) != SOLID_NOT))
  356. {
  357. dllfunc(DLLFunc_Use, id, ent)
  358. }
  359. }
  360.  
  361. static victim; victim = -1
  362. while((victim = engfunc(EngFunc_FindEntityInSphere, victim, fOrigin, CRadius)) != 0)
  363. {
  364. if(is_user_alive(victim) && zp_get_user_zombie(victim))
  365. {
  366. static Float:originV[3], Float:dist, Float:damage
  367. pev(victim, pev_origin, originV)
  368. dist = get_distance_f(fOrigin, originV)
  369. damage = CDamage-(CDamage/CRadius)*dist
  370. if(damage > 0.0)
  371. {
  372. ExecuteHam(Ham_TakeDamage, victim, ent, attacker, damage, DMG_BULLET)
  373. // client_print(attacker, print_chat, "[JpDebug] Rocket damage: %.1f", damage)
  374. }
  375. }
  376. }
  377.  
  378. engfunc(EngFunc_RemoveEntity, ent)
  379. }
  380. }
  381.  
  382. return FMRES_IGNORED;
  383. }
  384.  
  385. public CmdDropJP(id)
  386. {
  387. if(is_user_alive(id) && bHasJetPack[id] && get_user_weapon(id) == CSW_KNIFE)
  388. {
  389. DropJetPack(id)
  390. ResetValues(id)
  391. set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
  392. set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
  393. return PLUGIN_HANDLED;
  394. }
  395.  
  396. return PLUGIN_CONTINUE;
  397. }
  398.  
  399. ReplaceModel(id)
  400. {
  401. set_pev(id, pev_viewmodel2, ModelVJetPack)
  402. set_pev(id, pev_weaponmodel2, ModelPJetPack)
  403. }
  404.  
  405. DropJetPack(id)
  406. {
  407. new Float:fAim[3], Float:fOrigin[3]
  408. velocity_by_aim(id, 64, fAim)
  409. pev(id, pev_origin, fOrigin)
  410. fOrigin[0] += fAim[0]
  411. fOrigin[1] += fAim[1]
  412.  
  413. new ent = engfunc(EngFunc_CreateNamedEntity, iAllocInfoTarget)
  414. if(ent)
  415. {
  416. engfunc(EngFunc_SetModel, ent, ModelWJetPack)
  417. engfunc(EngFunc_SetSize, ent, Float:{-4.0,-4.0,-4.0}, Float:{4.0,4.0,4.0})
  418. engfunc(EngFunc_SetOrigin, ent, fOrigin)
  419. set_pev(ent, pev_classname, ClassnameJetPack)
  420. set_pev(ent, pev_dmg, 100.0)
  421. set_pev(ent, PevEntType, EntTypeJetPack)
  422. set_pev(ent, pev_movetype, MOVETYPE_TOSS)
  423. set_pev(ent, pev_solid, SOLID_TRIGGER)
  424. }
  425. }
  426.  
  427. RemoveAllJetPack()
  428. {
  429. new ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  430. while(ent > 0)
  431. {
  432. engfunc(EngFunc_RemoveEntity, ent)
  433. ent = engfunc(EngFunc_FindEntityByString, -1, "classname", ClassnameJetPack)
  434. }
  435. }
  436.  
  437. ResetValues(id)
  438. {
  439. bHasJetPack[id] = false
  440. fJetpackFuel[id] = get_pcvar_float(CvarMaxFuel)
  441. }
  442.  
  443. zp_colored_print(target, const message[], any:...)
  444. {
  445. static buffer[512], i, argscount
  446. argscount = numargs()
  447.  
  448. if (!target)
  449. {
  450. static iPlayers[32], iNum, j, player
  451. get_players(iPlayers, iNum, "ch")
  452. for (j = 0; j < iNum; j++)
  453. {
  454. player = iPlayers[j]
  455. static changed[5], changedcount
  456. changedcount = 0
  457.  
  458. for (i = 2; i < argscount; i++)
  459. {
  460. if (getarg(i) == LANG_PLAYER)
  461. {
  462. setarg(i, 0, player)
  463. changed[changedcount] = i
  464. changedcount++
  465. }
  466. }
  467.  
  468. vformat(buffer, charsmax(buffer), message, 3)
  469. message_begin(MSG_ONE_UNRELIABLE, MsgSayText, _, player)
  470. write_byte(player)
  471. write_string(buffer)
  472. message_end()
  473.  
  474. for (i = 0; i < changedcount; i++) setarg(changed[i], 0, LANG_PLAYER);
  475. }
  476. }
  477. else
  478. {
  479. vformat(buffer, charsmax(buffer), message, 3)
  480. message_begin(MSG_ONE, MsgSayText, _, target)
  481. write_byte(target)
  482. write_string(buffer)
  483. message_end()
  484. }
  485. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement