Welcome Soldier.



[TTT] Item: Target Gun v1.2

SthoNy' Sin conexión
User
#1
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:
<?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_TargetGun, g_Glowing[33], g_Attacker[33], g_Count[33], g_pMsgScreeFade, g_pMsgScreeShake, g_MaxPlayers;
new
g_szFiles[4][TTT_FILELENGHT], Cvars[10];

public
plugin_precache()
{
const
cantCases = 4;
new
szTypeFile[11], szPath[28];
   
for( new i = 0; i < cantCases; i++ )
{
switch(
i)
{
case
0 :
{
szTypeFile = "MODEL_V";
szPath = "models/ttt/v_targetgun.mdl";
}
case
1 :
{
szTypeFile = "MODEL_P";
szPath = "models/ttt/p_targetgun.mdl";    
}
case
2 :
{
szTypeFile = "MODEL_W";
szPath = "models/ttt/w_targetgun.mdl";        
}
case
3 :
{
szTypeFile = "SOUND_BEEP";
szPath = "ttt/targetgun_beep.wav";        
}
}
   

if( !amx_load_setting_string(TTT_SETTINGSFILE, "TARGET GUN", szTypeFile, g_szFiles[i], charsmax(g_szFiles[])) )
{
g_szFiles[i] = szPath;
amx_save_setting_string(TTT_SETTINGSFILE, "TARGET GUN", szTypeFile, g_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(id) remove_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 i = 1; i <= g_MaxPlayers; i++ )
{
if(
g_Glowing[i])
{
g_Glowing[i] = false;
set_user_rendering(i);
}
remove_task(i);
g_Count[i] = 0;
}
}
}
public
ttt_item_selected(id, item, name[], price)
{
if(
g_TargetGun == item)
{
if(
g_Count[id] < get_pcvar_num(Cvars[8]))
{
if(
user_has_weapon(id, WEAPON_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(id, data);
       
client_print_color
(id, print_team_default, "%s Compraste una !gTarget Gun!", TTT_TAG);
g_Count[id]++;

return
PLUGIN_HANDLED;
}
else
{
client_print_color(id, print_team_default, "%s Limite maximo de !gTarget Guns !nalcanzado !g(!t%d!n por ronda!g)", TTT_TAG, get_pcvar_num(Cvars[8]));
}
}
return
PLUGIN_CONTINUE;
}

public
cswa_damage(weapon_id, victim, attacker, Float:damage)
{
   
if(get_weapon_edict(weapon_id, REPL_CSWA_ITEMID) == g_TargetGun)
{
client_print_color( victim, print_team_default, "%s Han introducido un !tProyectil Explosivo !nen ti, !gEXPLOTARAS!", TTT_TAG);
       
g_Glowing
[victim] = true;
g_Attacker[victim] = attacker;
       
set_user_rendering
(victim, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 30);
emit_sound(victim, CHAN_AUTO, g_szFiles[3], 1.0, ATTN_NORM, 0, PITCH_NORM);
set_task( get_pcvar_float(Cvars[9]), "targetgun_Explode", victim);
Set_user_screenfade(victim, 255, 0, 0, 2, 100);
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(id, EV_VEC_origin, origin);

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

while((
victim = find_ent_in_sphere(victim, origin, radius)) != 0)
{
if(
is_valid_ent(victim) && entity_get_float(victim, EV_FL_takedamage) != DAMAGE_NO)
{
damage = (dmg/radius)*(radius - entity_range(id, victim));
       
if(damage > 0.0 && is_user_alive(victim))
{
ttt_set_playerdata(victim, PD_KILLEDBYITEM, g_TargetGun);
ExecuteHam(Ham_TakeDamage, victim, g_Attacker[id], g_Attacker[id], damage, DMG_BLAST);
entity_set_vector(victim, EV_VEC_velocity, Float:{0.0, 0.0, 0.0});
}
}
}
ttt_set_playerdata(id, PD_KILLEDBYITEM, g_TargetGun);
ExecuteHam(Ham_TakeDamage, id, g_Attacker[id], g_Attacker[id], dmg, DMG_BLAST);
}

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

   message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
   write_byte(TE_TAREXPLOSION);
   write_coord(origin[0]);
   write_coord(origin[1]);
   write_coord(origin[2]);
   message_end();
}
public
Set_user_screenfade(index, rrr, ggg, bbb, duracion, alpha)
{
   message_begin( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_pMsgScreeFade, _, index );
   write_short( duracion * 4096 );
   write_short( duracion * 4096 );
   write_short( 0x0000 );
   write_byte( rrr );
   write_byte( ggg );
   write_byte( bbb );
   write_byte( alpha );
   message_end( );    
}
stock shake_user_screen(index)
{
   message_begin(MSG_ONE, g_pMsgScreeShake, {0,0,0}, index);
   write_short(1<<14);
   write_short(1<<14);
   write_short(1<<14);
   message_end();
}
[+] 1 user says Thank You to SthoNy' for this post
Responder



Mensajes en este tema
[TTT] Item: Target Gun v1.2 - por SthoNy' - 12-24-2018, 09:38 AM



Usuarios navegando en este tema:
1 invitado(s)



Sobre M X E M E X I C O

Comunidad MxE © 2020 - La mejorar comunidad de Counter Strike 1.6 .