Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Plugin generated by AMXX-Studio */
- #include <amxmodx>
- #include <amxmisc>
- #include <fakemeta_util>
- #include <q3mod>
- //#include <license_manager>
- #define PLUGIN "Rocket Launcher"
- #define VERSION "1.0"
- #define AUTHOR "Max! & Sneaky.amxx"
- // Weapon Unique ID
- new g_iWeaponIndex
- new Float:g_flCoolDown = 0.5
- new g_szRocketSmoke
- new g_szExplosion
- new g_iRocketSpeed
- new g_flRocketRadius
- new g_flRocketKnockBack
- new g_flRocketKnockBackEnemy
- new g_flRocketMaxDamage
- static const g_szRocketModel[33] = "models/rpgrocket.mdl"
- static const g_szRocketLauncher[33] = "models/RocketLauncher.mdl"
- static const g_szRocketLauncherP[33] = "models/RocketLauncherP.mdl"
- // Register Weapon Consts
- static const g_szWeaponName[33] = "Rocket Launcher"
- static const g_szWeaponConst[33] = "weapon_rocketlauncher"
- static const g_szWorldModel[33] = "models/RocketLauncherW.mdl"
- static const g_szWeaponReplacement[33] = "weapon_ak47"
- new g_iMaxAmmo = 20
- static const g_szRocketExplode[33] = "q3mod/rocket_explode.wav"
- static const g_szRocketLaunch[33] = "q3mod/rocket_launch.wav"
- public plugin_precache()
- {
- g_iWeaponIndex = q3_register_weapon(g_szWeaponName, g_szWeaponConst, g_szWorldModel, g_szRocketLauncher, g_szRocketLauncherP, g_szWeaponReplacement, g_flCoolDown, CSW_AK47, g_iMaxAmmo, true)
- precache_model(g_szRocketModel)
- precache_sound(g_szRocketExplode)
- precache_sound(g_szRocketLaunch)
- g_szExplosion = precache_model("sprites/zerogxplode.spr")
- g_szRocketSmoke = precache_model("sprites/smoke.spr")
- }
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- g_flRocketRadius = register_cvar("q3_rocketradius", "100.0")
- g_flRocketKnockBack = register_cvar("q3_rocketknockback", "400.0")
- g_flRocketKnockBackEnemy = register_cvar("q3_rocketknockbackenemy", "50.0")
- g_flRocketMaxDamage = register_cvar("q3_rocketmaxdamage", "60.0")
- g_iRocketSpeed = register_cvar("q3_rocketspeed", "1000")
- register_forward(FM_UpdateClientData, "UpdateClientData_Post", 1)
- register_forward(FM_CmdStart, "Forward_CmdStart")
- register_forward(FM_Touch, "Forward_Touch")
- }
- public q3_weapon_shoot(iClient, iWeapon)
- {
- if(is_user_alive(iClient))
- {
- if(iWeapon == g_iWeaponIndex)
- {
- Rocket_Shoot(iClient)
- }
- }
- }
- public Forward_Touch(iTouched, iToucher)
- {
- if(pev_valid(iToucher))
- {
- if(pev(iToucher, pev_iuser3) == ROCKET)
- {
- new szName[9]
- pev(iTouched, pev_classname, szName, 8)
- if(!equal("trigger_", szName))
- {
- Rocket_Explode(iToucher)
- }
- }
- }
- }
- public UpdateClientData_Post(iClient, sendweapons, cd_handle )
- {
- if(q3_current_weapon(iClient) == g_iWeaponIndex)
- {
- if(!is_user_alive(iClient))
- return FMRES_IGNORED
- set_cd(cd_handle, CD_ID, 0)
- return FMRES_HANDLED
- }
- return FMRES_HANDLED
- }
- Rocket_Explode(iRocket)
- {
- new iEnt = -1;
- new Float:flOrigin[3]
- pev(iRocket, pev_origin, flOrigin)
- while((iEnt = engfunc(EngFunc_FindEntityInSphere, iEnt, flOrigin, get_pcvar_float(g_flRocketRadius))) != 0)
- {
- if(is_user_alive(iEnt))
- {
- Rocket_Bounce(iRocket, iEnt)
- new iAttacker = pev(iRocket, pev_owner), iTeam = get_user_team(iEnt), iTeam2 = get_user_team(iAttacker)
- if(q3_free_for_all() || iTeam != iTeam2)
- {
- Rocket_Damage(iEnt, iAttacker, flOrigin)
- }
- }
- }
- message_begin( MSG_BROADCAST, SVC_TEMPENTITY) // Explosion
- write_byte(TE_EXPLOSION)
- write_coord(floatround(flOrigin[0]))
- write_coord(floatround(flOrigin[1]))
- write_coord(floatround(flOrigin[2])+5)
- write_short(g_szExplosion)
- write_byte(20)
- write_byte(12) // framerate
- write_byte(TE_EXPLFLAG_NOSOUND)
- message_end()
- emit_sound(iRocket, CHAN_WEAPON, g_szRocketExplode, 1.0, ATTN_NORM, 0, PITCH_NORM)
- engfunc(EngFunc_RemoveEntity, iRocket)
- }
- Rocket_Damage(iClient, iAttacker, Float:flOrigin[3])
- {
- if(iAttacker != iClient)
- {
- new Float:flUserOrigin[3], Float:flDamage, Float:flDistance, Float:flHealth
- pev(iClient, pev_origin, flUserOrigin)
- pev(iClient, pev_health, flHealth)
- flDistance = get_distance_f(flOrigin, flUserOrigin)
- flDamage = (get_pcvar_float(g_flRocketRadius) - flDistance) / get_pcvar_float(g_flRocketRadius) * get_pcvar_float(g_flRocketMaxDamage)
- q3_create_damage(iClient, iAttacker, floatabs(flDamage), g_iWeaponIndex, DMG_ALWAYSGIB)
- }
- }
- Rocket_Bounce(iRocket, iClient)
- {
- new Float:flOrigin[3], Float:flOrigin2[3], Float:flAngles[3], Float:flVelocity[3], Float:flUserVelocity[3], Float:flFullVelocity[3], Float:flAngle[3]
- pev(iClient, pev_origin, flOrigin)
- //get_offset_origin(iClient, Float:{1.10, 0.0, 0.0}, flOrigin)
- pev(iRocket, pev_origin, flOrigin2)
- flAngles[0] = flOrigin2[0] - flOrigin[0]
- flAngles[1] = flOrigin2[1] - flOrigin[1]
- flAngles[2] = flOrigin2[2] - flOrigin[2]
- vector_to_angle(flAngles, flAngle)
- if(pev(iRocket, pev_owner) == iClient)
- {
- flFullVelocity[0] = floatcos(flAngle[1] - 180, degrees) * get_pcvar_float(g_flRocketKnockBack)
- flFullVelocity[1] = floatsin(flAngle[1] - 180, degrees) * get_pcvar_float(g_flRocketKnockBack)
- flFullVelocity[2] = floatsin(-flAngle[0], degrees) * get_pcvar_float(g_flRocketKnockBack)
- }
- else
- {
- flFullVelocity[0] = floatcos(flAngle[1] - 180, degrees) * get_pcvar_float(g_flRocketKnockBackEnemy)
- flFullVelocity[1] = floatsin(flAngle[1] - 180, degrees) * get_pcvar_float(g_flRocketKnockBackEnemy)
- flFullVelocity[2] = floatsin(-flAngle[0], degrees) * get_pcvar_float(g_flRocketKnockBackEnemy)
- }
- pev(iClient, pev_velocity, flUserVelocity)
- flVelocity[0] = flFullVelocity[0] + (flUserVelocity[0] / 10)
- flVelocity[1] = flFullVelocity[1] + (flUserVelocity[1] / 10)
- flVelocity[2] = flFullVelocity[2] + (flUserVelocity[2] / 10)
- set_pev(iClient, pev_velocity, flVelocity)
- }
- Rocket_Shoot(iClient)
- {
- new Float:flOrigin[3], Float:flVelocity[3], Float:flAngle[3]
- set_animation(iClient, 2)
- pev(iClient, pev_origin, flOrigin)
- pev(iClient, pev_v_angle, flAngle)
- flOrigin[2] += 15
- flAngle[0] = flAngle[0] + 180
- flAngle[1] = flAngle[1] + 180
- new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString,"info_target"))
- engfunc(EngFunc_SetOrigin, iEnt, flOrigin)
- engfunc(EngFunc_SetModel, iEnt, g_szRocketModel)
- set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
- engfunc(EngFunc_SetSize, iEnt, Float:{-2.0,-2.0,-2.0},Float:{2.0,2.0,2.0})
- set_pev(iEnt, pev_solid, SOLID_BBOX)
- set_pev(iEnt, pev_owner, iClient)
- set_pev(iEnt, pev_angles, flAngle)
- set_pev(iEnt, pev_iuser3, ROCKET)
- velocity_by_aim(iClient, get_pcvar_num(g_iRocketSpeed), flVelocity)
- set_pev(iEnt, pev_velocity, flVelocity)
- if(q3_free_for_all())
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(22)
- write_short(iEnt)
- write_short(g_szRocketSmoke)
- write_byte(3)
- write_byte(3)
- write_byte(255)
- write_byte(255)
- write_byte(255)
- write_byte(255)
- message_end()
- }
- else
- {
- new iTeam = get_user_team(iClient)
- switch(iTeam)
- {
- case 1:
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(22)
- write_short(iEnt)
- write_short(g_szRocketSmoke)
- write_byte(3)
- write_byte(3)
- write_byte(255)
- write_byte(0)
- write_byte(0)
- write_byte(255)
- message_end()
- }
- case 2:
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
- write_byte(22)
- write_short(iEnt)
- write_short(g_szRocketSmoke)
- write_byte(3)
- write_byte(3)
- write_byte(0)
- write_byte(0)
- write_byte(255)
- write_byte(255)
- message_end()
- }
- }
- }
- emit_sound(iClient, CHAN_WEAPON, g_szRocketLaunch, 1.0, ATTN_NORM, 0, PITCH_NORM)
- q3_set_user_ammo(iClient, g_iWeaponIndex, -1)
- }
- stock get_offset_origin(ent,const Float:offset[3],Float:origin[3])
- {
- if(!pev_valid(ent))
- return 0;
- new Float:angle[3]
- pev(ent,pev_origin,origin)
- pev(ent,pev_angles,angle)
- origin[0] += floatcos(angle[1],degrees) * offset[0]
- origin[1] += floatsin(angle[1],degrees) * offset[0]
- origin[2] += floatsin(angle[0],degrees) * offset[0]
- origin[0] += floatcos(angle[0],degrees) * offset[0]
- origin[1] += floatcos(angle[1],degrees) * offset[1]
- origin[0] -= floatsin(angle[1],degrees) * offset[1]
- origin[2] += floatsin(angle[2],degrees) * offset[1]
- origin[1] += floatcos(angle[2],degrees) * offset[1]
- origin[2] += floatcos(angle[2],degrees) * offset[2]
- origin[1] -= floatsin(angle[2],degrees) * offset[2]
- origin[2] += floatcos(angle[0],degrees) * offset[2]
- origin[0] -= floatsin(angle[0],degrees) * offset[2]
- origin[0] -= offset[0]
- origin[1] -= offset[1]
- origin[2] -= offset[2]
- return 1;
- }
- stock set_animation(iClient, iSeq)
- {
- set_pev(iClient, pev_sequence, iSeq)
- message_begin(MSG_ONE, SVC_WEAPONANIM, {0,0,0}, iClient)
- write_byte(iSeq)
- write_byte(pev(iClient, pev_body))
- message_end()
- }
- /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
- *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement