Advertisement
Guest User

Untitled

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