Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
450
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.92 KB | None | 0 0
  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #include <amxmodx>
  4. #include <amxmisc>
  5. #include <fakemeta_util>
  6. #include <q3mod>
  7. //#include <license_manager>
  8.  
  9. #define PLUGIN "Rocket Launcher"
  10. #define VERSION "1.0"
  11. #define AUTHOR "Max! & Sneaky.amxx"
  12.  
  13. // Weapon Unique ID
  14. new g_iWeaponIndex
  15.  
  16. new Float:g_flCoolDown = 0.5
  17.  
  18. new g_szRocketSmoke
  19. new g_szExplosion
  20.  
  21. new g_iRocketSpeed
  22. new g_flRocketRadius
  23. new g_flRocketKnockBack
  24. new g_flRocketKnockBackEnemy
  25. new g_flRocketMaxDamage
  26.  
  27. static const g_szRocketModel[33] = "models/rpgrocket.mdl"
  28. static const g_szRocketLauncher[33] = "models/RocketLauncher.mdl"
  29. static const g_szRocketLauncherP[33] = "models/RocketLauncherP.mdl"
  30.  
  31. // Register Weapon Consts
  32. static const g_szWeaponName[33] = "Rocket Launcher"
  33. static const g_szWeaponConst[33] = "weapon_rocketlauncher"
  34. static const g_szWorldModel[33] = "models/RocketLauncherW.mdl"
  35. static const g_szWeaponReplacement[33] = "weapon_ak47"
  36. new g_iMaxAmmo = 20
  37.  
  38.  
  39. static const g_szRocketExplode[33] = "q3mod/rocket_explode.wav"
  40. static const g_szRocketLaunch[33] = "q3mod/rocket_launch.wav"
  41.  
  42. public plugin_precache()
  43. {
  44. g_iWeaponIndex = q3_register_weapon(g_szWeaponName, g_szWeaponConst, g_szWorldModel, g_szRocketLauncher, g_szRocketLauncherP, g_szWeaponReplacement, g_flCoolDown, CSW_AK47, g_iMaxAmmo, true)
  45.  
  46. precache_model(g_szRocketModel)
  47.  
  48. precache_sound(g_szRocketExplode)
  49. precache_sound(g_szRocketLaunch)
  50.  
  51. g_szExplosion = precache_model("sprites/zerogxplode.spr")
  52. g_szRocketSmoke = precache_model("sprites/smoke.spr")
  53. }
  54.  
  55. public plugin_init()
  56. {
  57.  
  58. register_plugin(PLUGIN, VERSION, AUTHOR)
  59.  
  60. g_flRocketRadius = register_cvar("q3_rocketradius", "100.0")
  61. g_flRocketKnockBack = register_cvar("q3_rocketknockback", "400.0")
  62. g_flRocketKnockBackEnemy = register_cvar("q3_rocketknockbackenemy", "50.0")
  63. g_flRocketMaxDamage = register_cvar("q3_rocketmaxdamage", "60.0")
  64. g_iRocketSpeed = register_cvar("q3_rocketspeed", "1000")
  65.  
  66. register_forward(FM_UpdateClientData, "UpdateClientData_Post", 1)
  67. register_forward(FM_CmdStart, "Forward_CmdStart")
  68. register_forward(FM_Touch, "Forward_Touch")
  69. }
  70.  
  71. public q3_weapon_shoot(iClient, iWeapon)
  72. {
  73. if(is_user_alive(iClient))
  74. {
  75. if(iWeapon == g_iWeaponIndex)
  76. {
  77. Rocket_Shoot(iClient)
  78. }
  79. }
  80. }
  81.  
  82. public Forward_Touch(iTouched, iToucher)
  83. {
  84. if(pev_valid(iToucher))
  85. {
  86. if(pev(iToucher, pev_iuser3) == ROCKET)
  87. {
  88. new szName[9]
  89. pev(iTouched, pev_classname, szName, 8)
  90.  
  91. if(!equal("trigger_", szName))
  92. {
  93. Rocket_Explode(iToucher)
  94. }
  95. }
  96. }
  97. }
  98.  
  99. public UpdateClientData_Post(iClient, sendweapons, cd_handle )
  100. {
  101. if(q3_current_weapon(iClient) == g_iWeaponIndex)
  102. {
  103. if(!is_user_alive(iClient))
  104. return FMRES_IGNORED
  105. set_cd(cd_handle, CD_ID, 0)
  106. return FMRES_HANDLED
  107. }
  108. return FMRES_HANDLED
  109. }
  110.  
  111. Rocket_Explode(iRocket)
  112. {
  113. new iEnt = -1;
  114. new Float:flOrigin[3]
  115.  
  116. pev(iRocket, pev_origin, flOrigin)
  117.  
  118. while((iEnt = engfunc(EngFunc_FindEntityInSphere, iEnt, flOrigin, get_pcvar_float(g_flRocketRadius))) != 0)
  119. {
  120. if(is_user_alive(iEnt))
  121. {
  122. Rocket_Bounce(iRocket, iEnt)
  123. new iAttacker = pev(iRocket, pev_owner), iTeam = get_user_team(iEnt), iTeam2 = get_user_team(iAttacker)
  124. if(q3_free_for_all() || iTeam != iTeam2)
  125. {
  126. Rocket_Damage(iEnt, iAttacker, flOrigin)
  127. }
  128. }
  129. }
  130.  
  131. message_begin( MSG_BROADCAST, SVC_TEMPENTITY) // Explosion
  132. write_byte(TE_EXPLOSION)
  133. write_coord(floatround(flOrigin[0]))
  134. write_coord(floatround(flOrigin[1]))
  135. write_coord(floatround(flOrigin[2])+5)
  136. write_short(g_szExplosion)
  137. write_byte(20)
  138. write_byte(12) // framerate
  139. write_byte(TE_EXPLFLAG_NOSOUND)
  140. message_end()
  141.  
  142. emit_sound(iRocket, CHAN_WEAPON, g_szRocketExplode, 1.0, ATTN_NORM, 0, PITCH_NORM)
  143.  
  144. engfunc(EngFunc_RemoveEntity, iRocket)
  145. }
  146.  
  147. Rocket_Damage(iClient, iAttacker, Float:flOrigin[3])
  148. {
  149. if(iAttacker != iClient)
  150. {
  151. new Float:flUserOrigin[3], Float:flDamage, Float:flDistance, Float:flHealth
  152.  
  153. pev(iClient, pev_origin, flUserOrigin)
  154. pev(iClient, pev_health, flHealth)
  155.  
  156. flDistance = get_distance_f(flOrigin, flUserOrigin)
  157.  
  158. flDamage = (get_pcvar_float(g_flRocketRadius) - flDistance) / get_pcvar_float(g_flRocketRadius) * get_pcvar_float(g_flRocketMaxDamage)
  159.  
  160. q3_create_damage(iClient, iAttacker, floatabs(flDamage), g_iWeaponIndex, DMG_ALWAYSGIB)
  161. }
  162. }
  163.  
  164. Rocket_Bounce(iRocket, iClient)
  165. {
  166. new Float:flOrigin[3], Float:flOrigin2[3], Float:flAngles[3], Float:flVelocity[3], Float:flUserVelocity[3], Float:flFullVelocity[3], Float:flAngle[3]
  167.  
  168. pev(iClient, pev_origin, flOrigin)
  169. //get_offset_origin(iClient, Float:{1.10, 0.0, 0.0}, flOrigin)
  170. pev(iRocket, pev_origin, flOrigin2)
  171.  
  172. flAngles[0] = flOrigin2[0] - flOrigin[0]
  173. flAngles[1] = flOrigin2[1] - flOrigin[1]
  174. flAngles[2] = flOrigin2[2] - flOrigin[2]
  175.  
  176. vector_to_angle(flAngles, flAngle)
  177.  
  178. if(pev(iRocket, pev_owner) == iClient)
  179. {
  180. flFullVelocity[0] = floatcos(flAngle[1] - 180, degrees) * get_pcvar_float(g_flRocketKnockBack)
  181. flFullVelocity[1] = floatsin(flAngle[1] - 180, degrees) * get_pcvar_float(g_flRocketKnockBack)
  182. flFullVelocity[2] = floatsin(-flAngle[0], degrees) * get_pcvar_float(g_flRocketKnockBack)
  183. }
  184. else
  185. {
  186. flFullVelocity[0] = floatcos(flAngle[1] - 180, degrees) * get_pcvar_float(g_flRocketKnockBackEnemy)
  187. flFullVelocity[1] = floatsin(flAngle[1] - 180, degrees) * get_pcvar_float(g_flRocketKnockBackEnemy)
  188. flFullVelocity[2] = floatsin(-flAngle[0], degrees) * get_pcvar_float(g_flRocketKnockBackEnemy)
  189. }
  190.  
  191. pev(iClient, pev_velocity, flUserVelocity)
  192.  
  193. flVelocity[0] = flFullVelocity[0] + (flUserVelocity[0] / 10)
  194. flVelocity[1] = flFullVelocity[1] + (flUserVelocity[1] / 10)
  195. flVelocity[2] = flFullVelocity[2] + (flUserVelocity[2] / 10)
  196.  
  197. set_pev(iClient, pev_velocity, flVelocity)
  198. }
  199.  
  200. Rocket_Shoot(iClient)
  201. {
  202. new Float:flOrigin[3], Float:flVelocity[3], Float:flAngle[3]
  203.  
  204. set_animation(iClient, 2)
  205.  
  206. pev(iClient, pev_origin, flOrigin)
  207. pev(iClient, pev_v_angle, flAngle)
  208.  
  209. flOrigin[2] += 15
  210.  
  211. flAngle[0] = flAngle[0] + 180
  212. flAngle[1] = flAngle[1] + 180
  213.  
  214. new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,"info_target"))
  215. engfunc(EngFunc_SetOrigin, iEnt, flOrigin)
  216. engfunc(EngFunc_SetModel, iEnt, g_szRocketModel)
  217. set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
  218. engfunc(EngFunc_SetSize, iEnt, Float:{-2.0,-2.0,-2.0},Float:{2.0,2.0,2.0})
  219. set_pev(iEnt, pev_solid, SOLID_BBOX)
  220. set_pev(iEnt, pev_owner, iClient)
  221. set_pev(iEnt, pev_angles, flAngle)
  222.  
  223. set_pev(iEnt, pev_iuser3, ROCKET)
  224.  
  225. velocity_by_aim(iClient, get_pcvar_num(g_iRocketSpeed), flVelocity)
  226.  
  227. set_pev(iEnt, pev_velocity, flVelocity)
  228.  
  229. if(q3_free_for_all())
  230. {
  231. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  232. write_byte(22)
  233. write_short(iEnt)
  234. write_short(g_szRocketSmoke)
  235. write_byte(3)
  236. write_byte(3)
  237. write_byte(255)
  238. write_byte(255)
  239. write_byte(255)
  240. write_byte(255)
  241. message_end()
  242. }
  243. else
  244. {
  245. new iTeam = get_user_team(iClient)
  246.  
  247. switch(iTeam)
  248. {
  249. case 1:
  250. {
  251. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  252. write_byte(22)
  253. write_short(iEnt)
  254. write_short(g_szRocketSmoke)
  255. write_byte(3)
  256. write_byte(3)
  257. write_byte(255)
  258. write_byte(0)
  259. write_byte(0)
  260. write_byte(255)
  261. message_end()
  262. }
  263. case 2:
  264. {
  265. message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  266. write_byte(22)
  267. write_short(iEnt)
  268. write_short(g_szRocketSmoke)
  269. write_byte(3)
  270. write_byte(3)
  271. write_byte(0)
  272. write_byte(0)
  273. write_byte(255)
  274. write_byte(255)
  275. message_end()
  276. }
  277. }
  278. }
  279.  
  280. emit_sound(iClient, CHAN_WEAPON, g_szRocketLaunch, 1.0, ATTN_NORM, 0, PITCH_NORM)
  281.  
  282. q3_set_user_ammo(iClient, g_iWeaponIndex, -1)
  283. }
  284.  
  285. stock get_offset_origin(ent,const Float:offset[3],Float:origin[3])
  286. {
  287. if(!pev_valid(ent))
  288. return 0;
  289.  
  290. new Float:angle[3]
  291. pev(ent,pev_origin,origin)
  292. pev(ent,pev_angles,angle)
  293.  
  294. origin[0] += floatcos(angle[1],degrees) * offset[0]
  295. origin[1] += floatsin(angle[1],degrees) * offset[0]
  296.  
  297. origin[2] += floatsin(angle[0],degrees) * offset[0]
  298. origin[0] += floatcos(angle[0],degrees) * offset[0]
  299.  
  300. origin[1] += floatcos(angle[1],degrees) * offset[1]
  301. origin[0] -= floatsin(angle[1],degrees) * offset[1]
  302.  
  303. origin[2] += floatsin(angle[2],degrees) * offset[1]
  304. origin[1] += floatcos(angle[2],degrees) * offset[1]
  305.  
  306. origin[2] += floatcos(angle[2],degrees) * offset[2]
  307. origin[1] -= floatsin(angle[2],degrees) * offset[2]
  308.  
  309. origin[2] += floatcos(angle[0],degrees) * offset[2]
  310. origin[0] -= floatsin(angle[0],degrees) * offset[2]
  311.  
  312. origin[0] -= offset[0]
  313. origin[1] -= offset[1]
  314. origin[2] -= offset[2]
  315.  
  316. return 1;
  317. }
  318.  
  319. stock set_animation(iClient, iSeq)
  320. {
  321. set_pev(iClient, pev_sequence, iSeq)
  322. message_begin(MSG_ONE, SVC_WEAPONANIM, {0,0,0}, iClient)
  323. write_byte(iSeq)
  324. write_byte(pev(iClient, pev_body))
  325. message_end()
  326. }
  327. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  328. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  329. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement