Welcome Soldier.



GabsHp[APORTE] FreezeTag - Sol & Hielo MOD

GabsHp Sin conexión
Lord Gabs
#1
[INTRODUCCIÓN]
Aquí les dejo un aporte en el que he estado trabajando hace algunos días. El mod es una modificación completa del mod original de Javivi "FreezeTag". Un mod algo viejo y en desuso, por lo que tuve que reemplazar gran parte de su código pues presentaba muchos problemas y fallas en la optimización.

[MODO DE JUEGO]

FreezeTag es un modo de juego basado en el juego de la infancia conocido como "Sol y Hielo" o "La mancha" dependiendo del país en el que te encuentres. Consta de 2 equipos, en este caso, CT y TT.
  • El objetivo del equipo [CT] es congelar a todos los del equipo contrario antes de que acabe el tiempo establecido.
  • El objetivo del equipo [TT] es evitar que los integrantes del otro equipo te toquen y te congelen.
Cuando un jugador del equipo [CT] toca a un jugador del equipo [TT], el jugador del equipo [TT] permanecerá estático sin poder moverse, hasta que otro compañero de su mismo equipo llegue y lo toque para así descongelarlo. 


El tiempo default por ronda son 3 minutos - 180 segundos. 
En caso de llegar a 0, si alguno de los [TT] sigue a salvo, la victoria se otorgará a su equipo.
Si todos los [TT] llegan a ser congelados antes de terminar el tiempo de ronda, la victoria será para el equipo [CT].

[ACLARACIONES]

  • Existe un cooldown al congelar o descongelar a un [TT]. Es decir, si un [CT] te congela, tu compañero deberá esperar 2 segundos para poder descongelarte. Pasa lo mismo si te descongelan, tendrás un tiempo de gracia de 2 segundos para que te puedan congelar.
  • Es un mod en el que quiero seguir trabajando, por lo tanto, lo iré actualizando para añadir cosas funcionales dentro del juego, como añadir más items extras para la tienda, modificaciones en cuanto a mecánicas del juego.
  • El mod ya es completamente funcional, sin errores de los que yo me haya dado cuenta.
  • Tiene un sistema de puntos, para comprar items dentro de la tienda.
  • Se añadió un sistema de clases para los players. Las clases se setean automáticamente cada ronda y son random. Cada clase tiene diferentes cualidades como gravedad, velocidad, etc..



[b][Changelog]
[/b]

Cita:[10-10-2020] Versión 1.3 - Añadido el sistema de clases automáticas y aleatorias con sus respectivas habilidades.
[05-10-2020] Versión 1.2 - Añadido el sistema de puntos y tiendas para ambos equipos. Fixeado el sistema de rondas. 
[02-10-2020] Versión 1.1 - Correción de errores y optimización del TouchPlayer.
[02-10-2020] Versión 1.0 - Publicación del código base.


Código del plugin:

Código PHP:
/* Sublime AMXX Editor v3.0.0-beta */
#include <amxmodx>
#include <cstrike>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>

//EDIT DEL MODO ORIGINAL FreezeTag DEL AUTOR Javivi

#define TASK_END 3210
#define TASKID_ROUNDEND 1338
#define TASK_HUD 2100


new g_Team[33], g_AliveTg_AliveCTg_FrozenT;
new 
g_Points[33];
new 
g_maxplayers;
new 
PrecacheSpawn;
new 
ScoreHud;
new 
g_msgScreenFade;
new 
g_HudSync;
new 
bool:isRoundEnd;
new const 
RemoveEntities[ ][ ] =
{
    
"func_hostage_rescue""info_hostage_rescue""func_bomb_target""info_bomb_target",
    
"hostage_entity""info_vip_start""func_vip_safetyzone""func_escapezone"
}

enum _:i_Items
{
    
Item[33],
    
Precio[10],
    
Descripcion[40]
}

new const 
i_ItemsCT[][i_Items] =
{
    {
"+30 HP"5"Aumenta tu vida +30 puntos"},
    {
"Velocidad"8"Aumenta tu velocidad 10s"},
    {
"Gravedad"12"Disminuye tu gravedad"},
    {
"Invisibilidad"16"Se invisible por 10s"}
};

new const 
i_ItemsT[][i_Items] = 
{
    {
"+30 HP"5"Aumenta tu vida +30 puntos"},
    {
"Velocidad"8"Aumenta tu velocidad 10s"},
    {
"Gravedad"12"Disminuye tu gravedad"},
    {
"Invisibilidad"16"Se invisible por 10s"},
    {
"Inmunidad"18"Se inmune durante 10s"},
    {
"Descongelarme"22"El nombre lo dice todo 8v"}
}

enum _:i_Clases
{
    
Nombre[33],
    
Dir[60],
    
Float:Velocidad,
    
Float:Gravedad,
    
Hp,
    
Chaleco}



new const 
i_ClasesCT[][i_Clases] =
{
    {
"Barney""models/player/Barney/Barney.mdl"250.01.114080},
    {
"Homero""models/player/Homero/Homero.mdl"260.01.013070},
    {
"Smithers""models/player/Smithers/Smithers.mdl"280.00.911040},
    {
"Apu""models/player/Apu/Apu.mdl"300.00.710015}
}

new const 
i_ClasesTT[][i_Clases] = 
{
    {
"Burns""models/player/Burns/Burns.mdl"270.00.79060},
    {
"Bart""models/player/Bart/Bart.mdl"310.00.610040},
    {
"Otto""models/player/Otto/Otto.mdl"280.00.912040},
    {
"Krusty""models/player/Krusty/Krusty.mdl"260.00.811080}
}


//CVARS
new cvar_pp_freezecvar_pp_unfreeze;
//CVARS TIENDA
new cvar_shop_maxhp;

//VARIABLES TIENDA
new bool:g_isUserSpeed[33], bool:g_isUserGravity[33], bool:g_isUserInv[33], bool:g_isUserInm[33];

public 
plugin_init()
{
    
register_plugin("Sol & Hielo""1.4""GabsHp");
    
unregister_forward(FM_SpawnPrecacheSpawn);

    
//HAM's
    
RegisterHam(Ham_Touch"player""fw_PlayerTouch");
    
RegisterHam(Ham_Spawn"player""fw_PlayerSpawn"1)
    
RegisterHam(Ham_Killed"player""fw_PlayerKilled"1);
    
RegisterHam(Ham_TakeDamage"player""Player_TakeDamage");

    
//HAM BLOCK KNIFE
    
RegisterHamHam_Weapon_PrimaryAttack"weapon_knife""OnPrimaryAttack" );
    
RegisterHamHam_Weapon_SecondaryAttack"weapon_knife""OnSecondaryAttack" );

    
register_event"HLTV""new_round""a""1=0""2=0" );
    
set_cvar_num"mp_freezetime")

    
//PUNTOS POR CONGELAR/DESCONGELAR
    
cvar_pp_freeze register_cvar("sh_pp_freeze""3");
    
cvar_pp_unfreeze register_cvar("sh_pp_unfreeze""2");

    
//TIENDA
    
cvar_shop_maxhp register_cvar("sh_shop_maxhp""150");
    
    
//HUD
    
ScoreHud CreateHudSyncObj();
    
g_HudSync CreateHudSyncObj();
    
g_maxplayers get_maxplayers();
    
g_msgScreenFade get_user_msgid("ScreenFade");
    
//BLOQUEAR BUY
    
register_message(get_user_msgid("StatusIcon"), "msg_statusicon");
    
// BLOQUEAR MSG Y SONIDO WIN
    
register_messageget_user_msgid("SendAudio"), "msg_sendaudio");
    
register_messageget_user_msgid("TextMsg"), "msg_textmsg");

    
//COMANDOS
    
register_clcmd("say /d""id_descongelar");
    
register_clcmd("say /shop""openShop");
    
register_clcmd("nightvision""openShop");

    
//TIENDA

}

public 
plugin_precache()
{
    
PrecacheSpawn register_forwardFM_Spawn"precache_spawn")
    for(new 
i=1sizeof i_ClasesCTi++)
    {
        
precache_model(i_ClasesCT[i][Dir])
    }
    for(new 
i=1sizeof i_ClasesTTi++)
    {
        
precache_model(i_ClasesTT[i][Dir])
    }
}
public 
precache_spawn(ent)
{
    if( 
is_valid_ent(ent))
    {
        static 
szClass[33]
        
entity_get_string(entEV_SZ_classnameszClasssizeof(szClass))
        for(new 
0sizeof(RemoveEntities); i++)
            if(
equal(szClassRemoveEntities[i]))
                
remove_entity(ent)
    }
}

public 
client_disconnected(id)
{
    if(
is_user_alive(id))
    {
        if(
g_Team[id] & 1)
        {
            
g_AliveCT--
        }
        if(
g_Team[id] & 2)
        {
            
g_AliveT--
            
CheckTerrorist()
        }
    }
    
g_Points[id] = 0;
}

public 
client_putinserver(id)
{
    
set_task(1.0"ShowHUD"id+TASK_HUD__"b")
    
g_Points[id]=15
}


public 
new_round()
{
    
g_FrozenT 0
    g_AliveT 
0
    g_AliveCT
0
    isRoundEnd 
false
    remove_task
TASKID_ROUNDEND )
    
set_task(180.0"Roundend"TASKID_ROUNDEND)
}

public 
Roundend(task)
{
    if(
isRoundEnd) return PLUGIN_HANDLED
    set_hudmessage
25500, -1.00.4016.05.0 )
    
ShowSyncHudMsg0g_HudSync"[TEAM SOL WINS]" )
    
client_cmd0"spk radio/terwin.wav" )
    for (new 
id 1id <= g_maxplayersid++)
    {
        if(!
is_user_connected(id))
            continue
            
        
Unfreeze(id)
        
        switch( 
g_Team[id])
        {
            case 
2
            {
                
cs_set_user_team(idCS_TEAM_CT)
            }
            case 
1
            {
                
user_silentkill(id)
                
cs_set_user_team(idCS_TEAM_T)
            }
        }
    }
    return 
PLUGIN_HANDLED
}

CheckTerrorist()
{
    if(
isRoundEnd) return PLUGIN_HANDLED
    
if(g_AliveT == 0)
    {
        
isRoundEnd true
        set_hudmessage
(00255, -1.00.3016.05.0)
        
ShowSyncHudMsg(0g_HudSync"[TEAM HIELO WINS]!")
        
client_cmd(0"spk radio/ctwin.wav")
        
        
// Swap teams
        
for (new id 1id <= g_maxplayersid++)
        {
            if(!
is_user_connected(id))
                continue
                
            
Unfreeze(id)
            
            switch(
g_Team[id])
            {
                case 
2
                {
                    
user_silentkill(id)
                    
cs_set_user_team(id CS_TEAM_CT)
                    
set_user_frags(idget_user_frags(id) + 1)
                }
                case 
1
                {
                    
user_silentkill(id)
                    
set_user_frags(idget_user_frags(id) + 2)
                    
cs_set_user_team(idCS_TEAM_T)
                    
g_Points[id]+=5
                    client_print_color
(idprint_team_default"^4[Sol&Hielo]^1 Has obtenido^4 5 puntos^1 por ganar la ronda!")
                }
            }
        }
        return 
PLUGIN_HANDLED
    
}
    return 
PLUGIN_HANDLED
}

CheckCT()
{
    if(
isRoundEnd) return PLUGIN_HANDLED
    
if(g_AliveCT == 0)
    {
        
isRoundEnd true
        set_hudmessage
(25500, -1.00.3016.05.0)
        
ShowSyncHudMsg(0g_HudSync"[TEAM SOL WINS]")
        
client_cmd(0"spk radio/terwin.wav")
        for(new 
id 1id <= g_maxplayersid++)
        {
            if(!
is_user_connected(id)) continue
            
Unfreeze(id)
            switch(
g_Team[id])
            {
                case 
2:
                {
                    
user_silentkill(id)
                    
cs_set_user_team(idCS_TEAM_CT)
                    
set_user_frags(idget_user_frags(id) + 2)
                    
g_Points[id]+=5
                    client_print_color
(idprint_team_default"^4[Sol&Hielo]^1 Has ganado^4 5 puntos^1 por ganar la ronda!")
                }
                case 
1:
                {
                    
set_user_frags(idget_user_frags(id) + 1)
                    
user_silentkill(id)
                    
cs_set_user_team(idCS_TEAM_T)
                }
            }
        }
        return 
PLUGIN_HANDLED
    
}
    return 
PLUGIN_HANDLED
}

public 
ShowHUD(taskid)
{
    new 
id taskid-TASK_HUD
    
if(!is_user_alive(id))
    {
        set_hudmessage(02550, -1.00.806.01.0)
        ShowSyncHudMsg(idScoreHud"[SOL & HIELO]^nDESCONGELADOS [%d] - [%d] CONGELADOS^nCT's [%d]"g_AliveTg_FrozenTg_AliveCT)
        return;
    }
    
set_hudmessage(02550, -1.00.806.01.0)
       ShowSyncHudMsg(idScoreHud"[SOL & HIELO]^nDESCONGELADOS [%d] - [%d] CONGELADOS^nCT's [%d] - TUS PUNTOS [%d]"g_AliveTg_FrozenTg_AliveCTg_Points[id])
}

public 
fw_PlayerKilled(id)
{
    if(
g_Team[id] == 2)
    {
        static 
FlagsFlags entity_get_int(idEV_INT_flags)
        if(
Flags FL_FROZEN)
        {
            
g_FrozenT--
            
Unfreeze(id)
            
CheckTerrorist()
            return 
PLUGIN_HANDLED
        
}
        
CheckTerrorist()
        
g_AliveT--
        return 
PLUGIN_HANDLED
    
}
    if(
g_Team[id] == 1)
    {
        
g_AliveCT--
        
CheckCT()
        return 
PLUGIN_HANDLED
    
}
    return 
PLUGIN_HANDLED
}

public 
fw_PlayerSpawn(id)
{
    if(
is_user_alive(id))
    {            
        
set_user_rendering(id)
        
GiveWeapons(id)
        static 
claseclase random_num(03)
        switch(
cs_get_user_team(id))
        {
            case 
CS_TEAM_CT:
            {
                
g_Team[id] = 1
                g_AliveCT
++
                
give_item(id"weapon_hegrenade")
                
give_item(id"weapon_knife")
                
client_print_color(idprint_team_default"^4[Sol&Hielo] ^3Tu personaje es ^4[%s]"i_ClasesCT[clase][Nombre])
                
client_print_color(idprint_team_default"^4[Sol&Hielo] ^3Velocidad^4 [%f] ^1-^3 Gravedad^4 [%f] ^1-^3 HP^4 [%d] ^1-^3 Chaleco^4 [%d]"i_ClasesCT[clase][Velocidad], i_ClasesCT[clase][Gravedad], i_ClasesCT[clase][Hp], i_ClasesCT[clase][Chaleco])
                
set_user_gravity(idi_ClasesCT[clase][Gravedad])
                
set_user_health(idi_ClasesCT[clase][Hp])
                
set_user_armor(idi_ClasesCT[clase][Chaleco])
                
cs_set_user_model(idi_ClasesCT[clase][Nombre])
                
set_user_rendering(idkRenderFxGlowShell00255kRenderNormal30)
                
set_user_maxspeed(idi_ClasesCT[clase][Velocidad])

            }
            case 
CS_TEAM_T:
            {
                
g_Team[id] = 2
                g_AliveT
++
                
give_item(id"weapon_flashbang")
                
give_item(id"weapon_knife")
                
client_print_color(idprint_team_default"^4[Sol&Hielo] ^3Tu personaje es ^4[%s]"i_ClasesTT[clase][Nombre])
                
client_print_color(idprint_team_default"^4[Sol&Hielo] ^3Velocidad^4 [%f] ^1-^3 Gravedad^4 [%f] ^1-^3 HP^4 [%d] ^1-^3 Chaleco^4 [%d]"i_ClasesTT[clase][Velocidad], i_ClasesTT[clase][Gravedad], i_ClasesTT[clase][Hp], i_ClasesTT[clase][Chaleco])
                
set_user_gravity(idi_ClasesTT[clase][Gravedad])
                
set_user_health(idi_ClasesTT[clase][Hp])
                
set_user_armor(idi_ClasesTT[clase][Chaleco])
                
cs_set_user_model(idi_ClasesTT[clase][Nombre])
                
set_user_maxspeed(idi_ClasesTT[clase][Velocidad])
            }
        }
        
//TIENDA
        
g_isUserGravity[id] = false
        g_isUserSpeed
[id] = false
        g_isUserInv
[id] = false
        
//TIENDA TT
        
g_isUserInm[id] = false

    
}
}

public 
fw_PlayerTouch(ToucherTouched)
{
    if(!
is_user_alive(Toucher) || !is_user_alive(Touched)) return PLUGIN_HANDLED
    
static FlagsFlags entity_get_int(TouchedEV_INT_flags)
    static 
rName[33]; get_user_name(ToucherrNamecharsmax(rName))
    static 
dName[33]; get_user_name(ToucheddNamecharsmax(dName))

    
//SI UN CT TOCA A UN TERRORISTA
    
if(g_Team[Toucher] == && g_Team[Touched] == 2)
    {
        if(
Flags FL_FROZEN || g_isUserInm[Touched]) return PLUGIN_HANDLED
        
if(entity_get_float(TouchedEV_FL_fuser1) < get_gametime())
        {
               client_print_color(Toucherprint_team_default"^4[Sol&Hielo] ^1Has ^4congelado ^1a %s! ^4+%d Puntos" dNameget_pcvar_num(cvar_pp_freeze))
            
client_print_color(Touchedprint_team_default"^4[Sol&Hielo] ^1Has sido ^4congelado^1 por ^4%s^1!"rName)
            
g_Points[Toucher]+=get_pcvar_num(cvar_pp_freeze)
            
entity_set_int(TouchedEV_INT_flagsFlags FL_FROZEN)
            
g_FrozenT++
            
g_AliveT--
            
set_user_rendering(TouchedkRenderFxGlowShell255255255kRenderNormal40)
            
ScreenFade(Toucher0255060)
            
ScreenFade(Touched025525560)
            
entity_set_float(TouchedEV_FL_fuser1get_gametime() + 2.0)
            
CheckTerrorist()
            return 
PLUGIN_HANDLED
        
}
        return 
PLUGIN_HANDLED
    
}
    
//SI UN TERRORISTA TOCA A OTRO TERRORISTA
    
if(g_Team[Toucher] == && g_Team[Touched] == 2)
    {
        if(
Flags FL_FROZEN)
        {
            if(
entity_get_float(TouchedEV_FL_fuser1) < get_gametime())
            {
                
client_print_color(Toucherprint_team_default"^4[Sol&Hielo] ^1Has descongelado a ^4%s^1! ^4+%d Puntos"dNameget_pcvar_num(cvar_pp_unfreeze))
                
client_print_color(Touchedprint_team_default"^4[Sol&Hielo] ^1Has sido ^4descongelado ^1por ^4%s^1!"rName)
                
g_Points[Toucher]+=get_pcvar_num(cvar_pp_unfreeze)
                
entity_set_int(TouchedEV_INT_flagsFlags &~ FL_FROZEN)
                
g_FrozenT--
                
g_AliveT++
                
set_user_rendering(Touched)
                
ScreenFade(Toucher0255060)
                
ScreenFade(Touched2550060)
                
entity_set_float(TouchedEV_FL_fuser1get_gametime() + 2.0);
                return 
PLUGIN_HANDLED
            
}
            return 
PLUGIN_HANDLED
        
}
        return 
PLUGIN_HANDLED
    
}
    return 
PLUGIN_HANDLED
}

public 
Player_TakeDamagevictiminflictorattackerFloat:damagedamagebits )
{
    if(
damagebits==DMG_FALL && g_Team[victim] == 2)
    {
        
SetHamParamFloat(4Float:0.0);
        return 
HAM_HANDLED;
    }
    if(
damage>get_user_health(victim) && g_Team[victim] == 2)
    {
        
Unfreeze(victim)
        if(
g_Team[attacker] == 1)
        {
            
g_Points[attacker]+=3
            client_print_color
(attackerprint_team_default"^4[Sol&Hielo]^1 Has obtenido ^4+3 puntos por matar a tu enemigo!")
        }
        return 
HAM_HANDLED;
    }
    return 
HAM_IGNORED;
}


public 
msg_statusiconmsgiddestid )
{
    static 
icon]
    
get_msg_arg_string2iconcharsmaxicon ) )
    
    if( 
icon] == 'b' && icon] == 'y' && icon] == 'z' )
    {
        
// Block buy
        
set_pdata_intid235get_pdata_intid235 ) &~ ( 1<<) )
        return 
PLUGIN_HANDLED
    
}

    return 
PLUGIN_CONTINUE
}

// Block win msg
public msg_textmsgmsg_idmsg_destmsg_entity )
{
    static 
message]
    
get_msg_arg_string2messagecharsmaxmessage ) )

    switch( 
message[1] )
    {
        case 
'C''T'
            return 
PLUGIN_HANDLED
    
}
        
    return 
PLUGIN_CONTINUE
}

// Block win sound
public msg_sendaudiomsg_idmsg_destmsg_entity )
{
    static 
message[10]
    
get_msg_arg_string2messagecharsmaxmessage ) )

    switch( 
message[7] )
    {
        case 
'c''t' 
            return 
PLUGIN_HANDLED
    
}

    return 
PLUGIN_CONTINUE
}

public 
Unfreeze(id)
{
    
// Unfreeze player if it's frozen
    
static FlagsFlags entity_get_intidEV_INT_flags )
    if( 
Flags FL_FROZEN )
    
entity_set_intidEV_INT_flagsFlags &~ FL_FROZEN )
}

public 
OnPrimaryAttack( const entity )
{
    return 
HAM_SUPERCEDE;
}

public 
OnSecondaryAttack( const entity )
{
    return 
HAM_SUPERCEDE;
}

public 
id_descongelar(id)
{
    if(!(
get_user_flags(id) & ADMIN_KICK))
    {
        
client_print_color(idprint_team_default"^4[Sol&Hielo] ^1Solo ^4ADMINS^1 pueden usar este comando!")
        return 
PLUGIN_HANDLED
    
}
    if(!
is_user_alive(id)) return PLUGIN_HANDLED
    
static FlagsFlags entity_get_int(idEV_INT_flags)
    if(
Flags FL_FROZEN && g_Team[id] == 2)
    {
        static 
szName[33]; get_user_name(idszNamecharsmax(szName))
        
entity_set_int(idEV_INT_flagsFlags &~ FL_FROZEN)
        
ScreenFade(id2550060)
        
client_print_color(idprint_team_default"Equipo [%d]"g_Team[id])
        
client_print_color(0print_team_default"^4[Sol&Hielo] ^1El admin ^4%s ^1 se ha descongelado con comando!"szName)
        
g_FrozenT--
        
g_AliveT++
        
entity_set_float(idEV_FL_fuser1get_gametime() + 2.0);
        return 
PLUGIN_HANDLED
    
}
    
client_print_color(idprint_center"No estas congelado - Equipo [%d]"g_Team[id])
    return 
PLUGIN_HANDLED
}

//TIENDA Y HABILIDADES
public openShop(id)

    if(!
is_user_alive(id))
    {
        
client_print_color(idprint_team_default"^4[Sol&Hielo] ^1No puedes usar la tienda mientras estás muerto!")
        return 
PLUGIN_HANDLED
    
}
    if(
g_Team[id] == 1)
    {
        
//ABRIR TIENDA CT
        
ctShop(id)
        
client_print_color(idprint_team_default"^4[TiendaCT]^1 Tus puntos: ^4%d"g_Points[id])
    }
    if(
g_Team[id] == 2)
    {
        
//ABRIR TIENDA TT
        
ttShop(id)
        
client_print_color(idprint_team_default"^4[TiendaTT]^1 Tus puntos: ^4%d"g_Points[id])
    }
    return 
PLUGIN_HANDLED
}

public 
ctShop(id)
{
    new 
szItem[240], Posicion[2];
    new 
titulo[100];
    
formatex(titulocharsmax(titulo), "\r[\ySol&Hielo\r] \wTienda CT^n\w[\yTus Puntos: \r%d\w]"g_Points[id])
    new 
ctMenu menu_create(titulo"handlerCT")
    for(new 
isizeof i_ItemsCTi++)
    {
        if(
g_Points[id]<i_ItemsCT[i][Precio])
        {
            
formatex(szItemcharsmax(szItem), "\y[\d%s\y] [\d%s\y] [\d%d puntos\y]"i_ItemsCT[i][Item], i_ItemsCT[i][Descripcion], i_ItemsCT[i][Precio])
        }
        else
        {
            
formatex(szItemcharsmax(szItem), "\y[\w%s\y] [\w%s\y] [\r%d\w puntos\y]"i_ItemsCT[i][Item], i_ItemsCT[i][Descripcion], i_ItemsCT[i][Precio])
        }
        
num_to_str(iPosicioncharsmax(Posicion))
        
menu_additem(ctMenuszItemPosicion)
    }
    
menu_setprop(ctMenuMPROP_PERPAGE5)
    
menu_setprop(ctMenuMPROP_NEXTNAME"Siguiente")
    
menu_setprop(ctMenuMPROP_BACKNAME"Atras")
    
menu_setprop(ctMenuMPROP_EXITNAME"Salir")
    
menu_display(idctMenu0)
    return 
PLUGIN_HANDLED
}

public 
handlerCT(idmenuitem)
{
    if(!
is_user_alive(id))
    {
        
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No puedes usar esto ahora!")
    }
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    switch(
item)
    {
        
//30HP
        
case 0:
        {
            if(
g_Points[id]<i_ItemsCT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
get_user_health(id)+30 get_pcvar_num(cvar_shop_maxhp))
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No puedes comprar este item, pues sobrepasa el limite de HP permitida!")
                return 
PLUGIN_HANDLED
            
}
            
set_user_health(idget_user_health(id)+30)
            
g_Points[id]-= i_ItemsCT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s^1!"i_ItemsCT[item])
        }
        case 
1:
        {
            if(
g_Points[id]<i_ItemsCT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
g_isUserSpeed[id])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya has comprado este item!")
                return 
PLUGIN_HANDLED
            
}
            
set_user_maxspeed(idget_user_maxspeed(id) + 70.0)
            
g_isUserSpeed[id] = true
            set_task
(10.0"r_Speed"id)
            
g_Points[id]-= i_ItemsCT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s ^1!"i_ItemsCT[item])
        }
        case 
2:
        {
            if(
g_Points[id]<i_ItemsCT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
g_isUserGravity[id])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya has comprado este item!")
                return 
PLUGIN_HANDLED
            
}
            
set_user_gravity(idget_user_gravity(id) - 0.4)
            
g_Points[id] -= i_ItemsCT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s ^1!"i_ItemsCT[item])
        }
        case 
3:
        {
            if(
g_Points[id]<i_ItemsCT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
g_isUserInv[id])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya has comprado este item!")
                return 
PLUGIN_HANDLED
            
}
            
set_user_rendering(idkRenderFxNone000kRenderTransAlpha20)
            
g_Points[id] -= i_ItemsCT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s ^1!"i_ItemsCT[item])
            
set_task(10.0"r_Inv"id)
        }

    }

    return 
PLUGIN_HANDLED
}

public 
ttShop(id)
{
    new 
szItem[240], Posicion[2];
    new 
titulo[100];
    
formatex(titulocharsmax(titulo), "\r[\ySol&Hielo\r] \wTienda TT^n\w[\yTus Puntos: \r%d\w]"g_Points[id])
    new 
ttMenu menu_create(titulo"handlerTT")
    for(new 
isizeof i_ItemsTi++)
    {
        if(
g_Points[id]<i_ItemsT[i][Precio])
        {
            
formatex(szItemcharsmax(szItem), "\d[%s] [%s] [%d puntos]"i_ItemsT[i][Item], i_ItemsT[i][Descripcion], i_ItemsT[i][Precio])
        }
        else
        {
            
formatex(szItemcharsmax(szItem), "\r[\w%s\r] [\w%s\r] [\w%d\y puntos\r]"i_ItemsT[i][Item], i_ItemsT[i][Descripcion], i_ItemsT[i][Precio])
        }
        
num_to_str(iPosicioncharsmax(Posicion))
        
menu_additem(ttMenuszItemPosicion)
    }
    
menu_setprop(ttMenuMPROP_PERPAGE5)
    
menu_setprop(ttMenuMPROP_NEXTNAME"Siguiente")
    
menu_setprop(ttMenuMPROP_BACKNAME"Atras")
    
menu_setprop(ttMenuMPROP_EXITNAME"Salir")
    
menu_display(idttMenu0)
    return 
PLUGIN_HANDLED
}

public 
handlerTT(idmenuitem)
{
    if(!
is_user_alive(id))
    {
        
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No puedes usar esto ahora!")
    }
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    switch(
item)
    {
        
//30HP
        
case 0:
        {
            if(
g_Points[id]<i_ItemsT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
get_user_health(id)+30 get_pcvar_num(cvar_shop_maxhp))
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No puedes comprar este item, pues sobrepasa el limite de HP permitida!")
                return 
PLUGIN_HANDLED
            
}
            
set_user_health(idget_user_health(id)+30)
            
g_Points[id]-= i_ItemsT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s^1!"i_ItemsT[item])
        }
        case 
1:
        {
            if(
g_Points[id]<i_ItemsT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
g_isUserSpeed[id])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya has comprado este item!")
                return 
PLUGIN_HANDLED
            
}
            
set_user_maxspeed(idget_user_maxspeed(id) + 70.0)
            
g_isUserSpeed[id] = true
            set_task
(10.0"r_Speed"id)
            
g_Points[id]-= i_ItemsT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s ^1!"i_ItemsT[item])
        }
        case 
2:
        {
            if(
g_Points[id]<i_ItemsT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
g_isUserGravity[id])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya has comprado este item!")
                return 
PLUGIN_HANDLED
            
}
            
set_user_gravity(idget_user_gravity(id) - 0.4)
            
g_Points[id] -= i_ItemsT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s ^1!"i_ItemsT[item])
        }
        case 
3:
        {
            if(
g_Points[id]<i_ItemsT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
g_isUserInv[id])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya has comprado este item!")
                return 
PLUGIN_HANDLED
            
}
            
set_user_rendering(idkRenderFxNone000kRenderTransAlpha20)
            
g_Points[id] -= i_ItemsT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s ^1!"i_ItemsT[item])
            
set_task(10.0"r_Inv"id)
        }
        case 
4:
        {
            static 
FlagsFlags entity_get_int(idEV_INT_flags)
            if(
g_Points[id]<i_ItemsT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(
g_isUserInm[id])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya has comprado este item!")
                return 
PLUGIN_HANDLED
            
}
            if(
Flags FL_FROZEN)
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No puedes comprar este item mientras estás congelado!")
                return 
PLUGIN_HANDLED
            
}
            
g_Points[id] -= i_ItemsT[item][Precio]
            
ScreenFade(id255255060)
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s ^1!"i_ItemsT[item])
            
g_isUserInm[id] = true
            set_task
(10.0"r_Inm"id)

        }
        case 
5:
        {
            static 
FlagsFlags entity_get_int(idEV_INT_flags)
            if(
g_Points[id]<i_ItemsT[item][Precio])
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No tienes suficientes puntos!")
                return 
PLUGIN_HANDLED
            
}
            if(!(
Flags FL_FROZEN))
            {
                
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 No puedes usar esto si no estás congelado!")
                return 
PLUGIN_HANDLED
            
}
            
g_Points[id] -= i_ItemsT[item][Precio]
            
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Has comprado^4 %s ^1!"i_ItemsT[item])
            
ScreenFade(id2550060)
            
entity_set_int(idEV_INT_flagsFlags &~ FL_FROZEN)
            
entity_set_float(idEV_FL_fuser1get_gametime() + 2.0);
            
g_AliveT++
            
g_FrozenT--
        }

    }

    return 
PLUGIN_HANDLED
}

public 
r_Speed(id)
{
    if(!
g_isUserSpeed[id]) return PLUGIN_HANDLED
    set_user_maxspeed
(idget_user_maxspeed(id) - 70)
    
ScreenFade(id255128060)
    
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Tu ^4velocidad^1 se ha restaurado!")
    
g_isUserSpeed[id] = false
    
return PLUGIN_HANDLED
}
public 
r_Inv(id)
{
    if(!
g_isUserInv[id]) return PLUGIN_HANDLED
    set_user_rendering
(id)
    
ScreenFade(id255128060)
    
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya no eres ^4Invisible^1!")
    return 
PLUGIN_HANDLED
}
public 
r_Inm(id)
{
    if(!
g_isUserInm[id]) return PLUGIN_HANDLED
    ScreenFade
(id255128060)
    
client_print_color(idprint_team_default"^4[Sol&Hielo]^1 Ya no eres ^4Inmune^1!")
    
g_isUserInm[id] = false
    
return PLUGIN_HANDLED
}

GiveWeapons(const id)
{
    strip_user_weapons(id)
}

stock ScreenFade(const iIdRedGreenBlueAlpha)
{
    
message_beginiId MSG_ONE_UNRELIABLE MSG_BROADCASTg_msgScreenFade_iId );
    
write_short(4096);
    
write_short(4096);
    
write_short(0x0000);
    
write_byte(Red);
    
write_byte(Green);
    
write_byte(Blue);
    
write_byte(Alpha);
    
message_end();


[+] 1 user says Thank You to GabsHp for this post
Responder

Alan# Sin conexión
Vip servidor
#2
Está muy interesante el concepto, me parece un modo de juego sencillo y bastante entretenido, excelente aporte +1.
Responder

GabsHp Sin conexión
Lord Gabs
#3
[ACTUALIZACIÓN v.- 1.3]

  • Se añadieron algunos items a la tienda del equipo Terrorista.
  • Se añadió un sistema de clases aleatorias, con diferentes características como HP, Gravedad, Velocidad, etc...

* Las clases están ambientadas en la caricatura de Los Simpsons, pues esa era la temática que se usaba en un servidor muy antiguo el cuál quedó en el olvido, donde conocí dicho mod.
Añadido un pequeño video de demostración del mod.
Una disculpa por la calidad, se tiene que renderizar en camtasia para que pase de pesar 2gb a 170mb Xd


Responder





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 .