Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Plugin generated by AMXX-Studio */
- #include <amxmodx>
- #include <amxmisc>
- #include <cstrike>
- #include <fakemeta_util>
- #include <q3mod>
- //#include <license_manager>
- #define PLUGIN "Grenade Launcher"
- #define VERSION "1.2"
- #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
- new const g_Classname[] = "ent_classname";
- static const g_szRocketModel[33] = "models/w_hegrenade.mdl"
- static const g_szRocketLauncher[33] = "models/GrenadeLauncher2.mdl"
- static const g_szRocketLauncherP[33] = "models/GrenadeLauncherP.mdl"
- // Register Weapon Consts
- static const g_szWeaponName[33] = "Grenade Launcher"
- static const g_szWeaponConst[33] = "weapon_grenadelauncher"
- static const g_szWorldModel[33] = "models/GrenadeLauncherW.mdl"
- static const g_szWeaponReplacement[33] = "weapon_flashbang"
- 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_FLASHBANG, 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")
- register_forward(FM_Think, "Forward_Think");
- }
- public q3_weapon_shoot(iClient, iWeapon)
- {
- if(is_user_alive(iClient))
- {
- if(iWeapon == g_iWeaponIndex)
- {
- Rocket_Shoot(iClient)
- }
- }
- }
- public Forward_Think(iEnt)
- {
- if(!pev_valid(iEnt))
- return FMRES_IGNORED;
- static classname[33];
- pev(iEnt, pev_classname, classname, charsmax(classname));
- if(!equal(classname, g_Classname))
- return FMRES_IGNORED;
- Rocket_Explode(iEnt);
- //client_print(0, print_chat, "[DEBUG] THINK EXPLODE GL");
- return FMRES_IGNORED;
- }
- public Forward_Touch(iEntIndex, iPlayerIndex)
- {
- if ( pev_valid(iEntIndex))
- {
- static sz_ClassName_Toucher[32], sz_ClassName_Touched[32];
- pev(iEntIndex, pev_classname, sz_ClassName_Toucher, charsmax(sz_ClassName_Toucher));
- if ( pev_valid(iPlayerIndex))
- pev(iPlayerIndex, pev_classname, sz_ClassName_Touched, charsmax(sz_ClassName_Touched));
- if ( equal(sz_ClassName_Toucher, g_Classname))
- {
- static attacker ; attacker = pev(iEntIndex, pev_owner);
- if ( pev_valid(iPlayerIndex))
- {
- if ( equal(sz_ClassName_Touched, "player") && is_user_connected(iPlayerIndex))
- {
- static vOrigin[3];
- get_user_origin(iPlayerIndex, vOrigin);
- static CsTeams:team[2];
- team[0] = cs_get_user_team(iPlayerIndex), team[1] = cs_get_user_team(attacker);
- //if (attacker == iPlayerIndex)
- //return FMRES_SUPERCEDE;
- if (!get_cvar_num("mp_friendlyfire") && team[0] == team[1])
- return FMRES_SUPERCEDE;
- Rocket_Explode(iEntIndex);
- //client_print(0, print_chat, "[DEBUG] TOUCH PLAYER");
- }
- }
- }
- }
- return FMRES_IGNORED;
- }
- 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))
- {
- 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_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"))
- set_pev(iEnt, pev_classname, g_Classname);
- engfunc(EngFunc_SetModel, iEnt, g_szRocketModel)
- engfunc(EngFunc_SetSize, iEnt, Float:{-2.0,-2.0,-2.0},Float:{2.0,2.0,2.0})
- engfunc(EngFunc_SetOrigin, iEnt, flOrigin)
- set_pev(iEnt, pev_movetype, MOVETYPE_BOUNCE)
- set_pev(iEnt, pev_solid, SOLID_BBOX)
- set_pev(iEnt, pev_gravity, 1.0);
- 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)
- set_pev(iEnt, pev_nextthink, get_gametime() + 1.0);
- //client_print(0, print_chat, "[DEBUG] FIRED GL");
- 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()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement