MxEMexico

Versión completa: [TTT] Item: Target Gun v1.2
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Pues, es la misma target gun con que postee anteriormente (No aquí) pero con un codigo un poco mejorado y optimizado, además de una limite de compras de Target's definido por cvar (ttt_max_targets).

Espero que puedan disfrutar de ella, es super más recomendable ésta versión obviamente.

Code:
Código PHP:
#include <amxmodx>
#include <hamsandwich>
#include <engine>
#include <cs_weapons_api>
#include <fun>
#include <amx_settings_api>
#include <ttt>

#define WEAPON_CSWID CSW_DEAGLE
#define WEAPON_NAME "weapon_deagle"

new g_TargetGung_Glowing[33], g_Attacker[33], g_Count[33], g_pMsgScreeFadeg_pMsgScreeShakeg_MaxPlayers;
new 
g_szFiles[4][TTT_FILELENGHT], Cvars[10];

public 
plugin_precache()
{
    const 
cantCases 4;
    new 
szTypeFile[11], szPath[28];
 
   
    
for( new 0cantCasesi++ )
    {
        switch(
i)
        {
            case 

            {
                
szTypeFile "MODEL_V";
                
szPath "models/ttt/v_targetgun.mdl";
            }
            case 
:
            {
                
szTypeFile "MODEL_P";
                
szPath "models/ttt/p_targetgun.mdl"   
            
}
            case 
:
            {
                
szTypeFile "MODEL_W";
                
szPath "models/ttt/w_targetgun.mdl"       
            
}
            case 
:
            {
                
szTypeFile "SOUND_BEEP";
                
szPath "ttt/targetgun_beep.wav"       
            
}
        } 
   

        
if( !amx_load_setting_string(TTT_SETTINGSFILE"TARGET GUN"szTypeFileg_szFiles[i], charsmax(g_szFiles[])) )
        {
            
g_szFiles[i] = szPath;
            
amx_save_setting_string(TTT_SETTINGSFILE"TARGET GUN"szTypeFileg_szFiles[i]);
        }
 
       
        
if( szTypeFile[0] == 'M')
            
precache_model(g_szFiles[i]);   
        
else
            
precache_sound(g_szFiles[i]);
    }


public 
plugin_init()
{
    
register_plugin("[TTT] Item: Target Gun"TTT_VERSION"SthoNy'");
 
   
    Cvars
[0   my_register_cvar("ttt_target_damage"   "300.0"   "Target gun explosion damage. (Default: 300.0)");
    
Cvars[1   my_register_cvar("ttt_target_radius"   "420.0"   "Target gun radius. (Default: 420.0)");
    
Cvars[2   my_register_cvar("ttt_target_clip"       "1"   "Target gun clip ammo. (Default: 1)");
    
Cvars[3   my_register_cvar("ttt_target_ammo"       "0"   "Target gun backpack ammo. (Default: 0)");
    
Cvars[4   my_register_cvar("ttt_target_speed"       "10.0"   "Target gun attack speed delay. (Default: 10.0)");
    
Cvars[5   my_register_cvar("ttt_target_reload"   "0.0"   "Target gun reload speed. (Default: 0.0)");
    
Cvars[6   my_register_cvar("ttt_target_recoil"   "0.0"   "Target gun recoil. (Default: 0.0)");
    
Cvars[7   my_register_cvar("ttt_price_target"       "2"   "Target gun price. (Default: 3)");
    
Cvars[8   my_register_cvar("ttt_max_targets""1""Maximum Target Gun per round. (Default: 1)");
    
Cvars[9   my_register_cvar("ttt_time_explode""3.0""Target gun time to explode (Default: 3.0)");
 
   
    g_MaxPlayers 
get_maxplayers();
    
g_pMsgScreeFade                                get_user_msgid("ScreenFade");
    
g_pMsgScreeShake                                get_user_msgid("ScreenShake");
}

public 
client_disconnect(idremove_task(id);

public 
ttt_plugin_cfg() g_TargetGun ttt_buymenu_add"Target Gun"get_pcvar_num(Cvars[7]), PC_TRAITOR);

public 
ttt_gamemode(gamemode)
   
    
if(gamemode == GAME_ENDED || gamemode == GAME_RESTARTING || gamemode == GAME_PREPARING)
    { 
   
        
for( new 1<= g_MaxPlayersi++ )
        {
            if(
g_Glowing[i])
            {
                
g_Glowing[i] = false;
                
set_user_rendering(i);
            }
            
remove_task(i);
            
g_Count[i] = 0;
        }
    }
}
public 
ttt_item_selected(iditemname[], price)
{
    if(
g_TargetGun == item)
    {
        if(
g_Count[id] < get_pcvar_num(Cvars[8]))
        {
            if(
user_has_weapon(idWEAPON_CSWID))
                
engclient_cmd(id"drop"WEAPON_NAME);
 
       
            
static data[STOREABLE_STRUCTURE];
            if(!
data[STRUCT_CSWA_CSW])
            {
                
data[STRUCT_CSWA_ITEMID] = g_TargetGun;
                
data[STRUCT_CSWA_CSW] = WEAPON_CSWID;
                
data[STRUCT_CSWA_CLIP] = get_pcvar_num(Cvars[2]);
                
data[STRUCT_CSWA_MAXCLIP] = get_pcvar_num(Cvars[2]);
                
data[STRUCT_CSWA_AMMO] = get_pcvar_num(Cvars[3]);
                
data[STRUCT_CSWA_STACKABLE] = true;
                
data[STRUCT_CSWA_SILENCED] = -1;
                
data[STRUCT_CSWA_SPEEDDELAY] = _:get_pcvar_float(Cvars[4]);
                
data[STRUCT_CSWA_DAMAGE] = _:0;
                
data[STRUCT_CSWA_RELOADTIME] = _:get_pcvar_float(Cvars[5]);
                
data[STRUCT_CSWA_RECOIL] = _:get_pcvar_float(Cvars[6]);
                
data[STRUCT_CSWA_MODEL_V] = g_szFiles[0];
                
data[STRUCT_CSWA_MODEL_P] = g_szFiles[1];
                
data[STRUCT_CSWA_MODEL_W] = g_szFiles[2];
            }
            
cswa_give_specific(iddata);
 
       
            client_print_color
(idprint_team_default"%s Compraste una !gTarget Gun!"TTT_TAG);
            
g_Count[id]++;
        
            return 
PLUGIN_HANDLED;
        }
        else
        {
            
client_print_color(idprint_team_default"%s Limite maximo de !gTarget Guns !nalcanzado !g(!t%d!n por ronda!g)"TTT_TAGget_pcvar_num(Cvars[8]));
        }
    }
    return 
PLUGIN_CONTINUE;
}

public 
cswa_damage(weapon_idvictimattackerFloat:damage)
   
    
if(get_weapon_edict(weapon_idREPL_CSWA_ITEMID) == g_TargetGun)
    {
        
client_print_colorvictimprint_team_default"%s Han introducido un !tProyectil Explosivo !nen ti, !gEXPLOTARAS!"TTT_TAG);
 
       
        g_Glowing
[victim] = true;
        
g_Attacker[victim] = attacker;
 
       
        set_user_rendering
(victimkRenderFxGlowShell25500kRenderNormal30);
        
emit_sound(victimCHAN_AUTOg_szFiles[3], 1.0ATTN_NORM0PITCH_NORM);
        
set_taskget_pcvar_float(Cvars[9]), "targetgun_Explode"victim); 
        
Set_user_screenfade(victim255002100);
        
shake_user_screen(victim);
    }
}
public 
targetgun_Explode(id)
{
    
    if( !
is_user_alive(id) || ttt_get_gamemode() != GAME_STARTED || !is_user_connected(g_Attacker[id]) )
    {
        
remove_task(id);
        return 
PLUGIN_HANDLED;
    }
    
    
strip_user_weapons(id);
    
Explode(id);
    
CreateExplosion(id);
    
remove_task(id);
 
   
    
return PLUGIN_HANDLED;
}

CreateExplosion(id)
{
    static 
Float:origin[3];
    
entity_get_vector(idEV_VEC_originorigin);

    new 
victim = -1Float:damage;
    new 
Float:radius get_pcvar_float(Cvars[1]);
    new 
Float:dmg get_pcvar_float(Cvars[0]);

    while((
victim find_ent_in_sphere(victimoriginradius)) != 0)
    {
        if(
is_valid_ent(victim) && entity_get_float(victimEV_FL_takedamage) != DAMAGE_NO)
        {
            
damage = (dmg/radius)*(radius entity_range(idvictim));
 
       
            
if(damage 0.0 && is_user_alive(victim))
            {
                
ttt_set_playerdata(victimPD_KILLEDBYITEMg_TargetGun);
                
ExecuteHam(Ham_TakeDamagevictimg_Attacker[id], g_Attacker[id], damageDMG_BLAST);
                
entity_set_vector(victimEV_VEC_velocityFloat:{0.00.00.0});
            }
        }
    }
    
ttt_set_playerdata(idPD_KILLEDBYITEMg_TargetGun);
    
ExecuteHam(Ham_TakeDamageidg_Attacker[id], g_Attacker[id], dmgDMG_BLAST);
}

Explode(id)
{
 
   static origin[3];
 
   get_user_origin(idorigin0);

 
   message_begin(MSG_BROADCASTSVC_TEMPENTITY);
 
   write_byte(TE_TAREXPLOSION);
 
   write_coord(origin[0]);
 
   write_coord(origin[1]);
 
   write_coord(origin[2]);
 
   message_end();
}
public 
Set_user_screenfade(indexrrrgggbbbduracionalpha)
{
 
   message_beginindex MSG_ONE_UNRELIABLE MSG_BROADCASTg_pMsgScreeFade_index );
 
   write_shortduracion 4096 );
 
   write_shortduracion 4096 );
 
   write_short0x0000 );
 
   write_byterrr ); 
 
   write_byteggg );
 
   write_bytebbb ); 
 
   write_bytealpha );
 
   message_end( );    
}
stock shake_user_screen(index)
{
 
   message_begin(MSG_ONEg_pMsgScreeShake, {0,0,0}, index);
 
   write_short(1<<14);
 
   write_short(1<<14);
 
   write_short(1<<14);
 
   message_end();