Welcome Soldier.



[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:
<?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_AliveT, g_AliveCT, g_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.0, 1.1, 140, 80},
{
"Homero", "models/player/Homero/Homero.mdl", 260.0, 1.0, 130, 70},
{
"Smithers", "models/player/Smithers/Smithers.mdl", 280.0, 0.9, 110, 40},
{
"Apu", "models/player/Apu/Apu.mdl", 300.0, 0.7, 100, 15}
}

new const
i_ClasesTT[][i_Clases] =
{
{
"Burns", "models/player/Burns/Burns.mdl", 270.0, 0.7, 90, 60},
{
"Bart", "models/player/Bart/Bart.mdl", 310.0, 0.6, 100, 40},
{
"Otto", "models/player/Otto/Otto.mdl", 280.0, 0.9, 120, 40},
{
"Krusty", "models/player/Krusty/Krusty.mdl", 260.0, 0.8, 110, 80}
}


//CVARS
new cvar_pp_freeze, cvar_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_Spawn, PrecacheSpawn);

//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
RegisterHam( Ham_Weapon_PrimaryAttack, "weapon_knife", "OnPrimaryAttack" );
RegisterHam( Ham_Weapon_SecondaryAttack, "weapon_knife", "OnSecondaryAttack" );

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

//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_message( get_user_msgid("SendAudio"), "msg_sendaudio");
register_message( get_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_forward( FM_Spawn, "precache_spawn", 1 )
for(new
i=1; i < sizeof i_ClasesCT; i++)
{
precache_model(i_ClasesCT[i][Dir])
}
for(new
i=1; i < sizeof i_ClasesTT; i++)
{
precache_model(i_ClasesTT[i][Dir])
}
}
public
precache_spawn(ent)
{
if(
is_valid_ent(ent))
{
static
szClass[33]
entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass))
for(new
i = 0; i < sizeof(RemoveEntities); i++)
if(
equal(szClass, RemoveEntities[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
( 255, 0, 0, -1.0, 0.40, 1, 6.0, 5.0 )
ShowSyncHudMsg( 0, g_HudSync, "[TEAM SOL WINS]" )
client_cmd( 0, "spk radio/terwin.wav" )
for (new
id = 1; id <= g_maxplayers; id++)
{
if(!
is_user_connected(id))
continue

Unfreeze(id)

switch(
g_Team[id])
{
case
2:
{
cs_set_user_team(id, CS_TEAM_CT)
}
case
1:
{
user_silentkill(id)
cs_set_user_team(id, CS_TEAM_T)
}
}
}
return
PLUGIN_HANDLED
}

CheckTerrorist()
{
if(
isRoundEnd) return PLUGIN_HANDLED
if(g_AliveT == 0)
{
isRoundEnd = true
set_hudmessage
(0, 0, 255, -1.0, 0.30, 1, 6.0, 5.0)
ShowSyncHudMsg(0, g_HudSync, "[TEAM HIELO WINS]!")
client_cmd(0, "spk radio/ctwin.wav")

// Swap teams
for (new id = 1; id <= g_maxplayers; id++)
{
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(id, get_user_frags(id) + 1)
}
case
1:
{
user_silentkill(id)
set_user_frags(id, get_user_frags(id) + 2)
cs_set_user_team(id, CS_TEAM_T)
g_Points[id]+=5
client_print_color
(id, print_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
(255, 0, 0, -1.0, 0.30, 1, 6.0, 5.0)
ShowSyncHudMsg(0, g_HudSync, "[TEAM SOL WINS]")
client_cmd(0, "spk radio/terwin.wav")
for(new
id = 1; id <= g_maxplayers; id++)
{
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(id, get_user_frags(id) + 2)
g_Points[id]+=5
client_print_color
(id, print_team_default, "^4[Sol&Hielo]^1 Has ganado^4 5 puntos^1 por ganar la ronda!")
}
case
1:
{
set_user_frags(id, get_user_frags(id) + 1)
user_silentkill(id)
cs_set_user_team(id, CS_TEAM_T)
}
}
}
return
PLUGIN_HANDLED
}
return
PLUGIN_HANDLED
}

public
ShowHUD(taskid)
{
new
id = taskid-TASK_HUD
if(!is_user_alive(id))
    {
    set_hudmessage(0, 255, 0, -1.0, 0.8, 0, 6.0, 1.0)
    ShowSyncHudMsg(id, ScoreHud, "[SOL & HIELO]^nDESCONGELADOS [%d] - [%d] CONGELADOS^nCT's [%d]", g_AliveT, g_FrozenT, g_AliveCT)
    return;
    }
set_hudmessage(0, 255, 0, -1.0, 0.8, 0, 6.0, 1.0)
   ShowSyncHudMsg(id, ScoreHud, "[SOL & HIELO]^nDESCONGELADOS [%d] - [%d] CONGELADOS^nCT's [%d] - TUS PUNTOS [%d]", g_AliveT, g_FrozenT, g_AliveCT, g_Points[id])
}

public
fw_PlayerKilled(id)
{
if(
g_Team[id] == 2)
{
static
Flags; Flags = entity_get_int(id, EV_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
clase; clase = random_num(0, 3)
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(id, print_team_default, "^4[Sol&Hielo] ^3Tu personaje es ^4[%s]", i_ClasesCT[clase][Nombre])
client_print_color(id, print_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(id, i_ClasesCT[clase][Gravedad])
set_user_health(id, i_ClasesCT[clase][Hp])
set_user_armor(id, i_ClasesCT[clase][Chaleco])
cs_set_user_model(id, i_ClasesCT[clase][Nombre])
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 30)
set_user_maxspeed(id, i_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(id, print_team_default, "^4[Sol&Hielo] ^3Tu personaje es ^4[%s]", i_ClasesTT[clase][Nombre])
client_print_color(id, print_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(id, i_ClasesTT[clase][Gravedad])
set_user_health(id, i_ClasesTT[clase][Hp])
set_user_armor(id, i_ClasesTT[clase][Chaleco])
cs_set_user_model(id, i_ClasesTT[clase][Nombre])
set_user_maxspeed(id, i_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(Toucher, Touched)
{
if(!
is_user_alive(Toucher) || !is_user_alive(Touched)) return PLUGIN_HANDLED
static Flags; Flags = entity_get_int(Touched, EV_INT_flags)
static
rName[33]; get_user_name(Toucher, rName, charsmax(rName))
static
dName[33]; get_user_name(Touched, dName, charsmax(dName))

//SI UN CT TOCA A UN TERRORISTA
if(g_Team[Toucher] == 1 && g_Team[Touched] == 2)
{
if(
Flags & FL_FROZEN || g_isUserInm[Touched]) return PLUGIN_HANDLED
if(entity_get_float(Touched, EV_FL_fuser1) < get_gametime())
{
  client_print_color(Toucher, print_team_default, "^4[Sol&Hielo] ^1Has ^4congelado ^1a %s! ^4+%d Puntos" , dName, get_pcvar_num(cvar_pp_freeze))
client_print_color(Touched, print_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(Touched, EV_INT_flags, Flags | FL_FROZEN)
g_FrozenT++
g_AliveT--
set_user_rendering(Touched, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 40)
ScreenFade(Toucher, 0, 255, 0, 60)
ScreenFade(Touched, 0, 255, 255, 60)
entity_set_float(Touched, EV_FL_fuser1, get_gametime() + 2.0)
CheckTerrorist()
return
PLUGIN_HANDLED
}
return
PLUGIN_HANDLED
}
//SI UN TERRORISTA TOCA A OTRO TERRORISTA
if(g_Team[Toucher] == 2 && g_Team[Touched] == 2)
{
if(
Flags & FL_FROZEN)
{
if(
entity_get_float(Touched, EV_FL_fuser1) < get_gametime())
{
client_print_color(Toucher, print_team_default, "^4[Sol&Hielo] ^1Has descongelado a ^4%s^1! ^4+%d Puntos", dName, get_pcvar_num(cvar_pp_unfreeze))
client_print_color(Touched, print_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(Touched, EV_INT_flags, Flags &~ FL_FROZEN)
g_FrozenT--
g_AliveT++
set_user_rendering(Touched)
ScreenFade(Toucher, 0, 255, 0, 60)
ScreenFade(Touched, 255, 0, 0, 60)
entity_set_float(Touched, EV_FL_fuser1, get_gametime() + 2.0);
return
PLUGIN_HANDLED
}
return
PLUGIN_HANDLED
}
return
PLUGIN_HANDLED
}
return
PLUGIN_HANDLED
}

public
Player_TakeDamage( victim, inflictor, attacker, Float:damage, damagebits )
{
if(
damagebits==DMG_FALL && g_Team[victim] == 2)
{
SetHamParamFloat(4, Float: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
(attacker, print_team_default, "^4[Sol&Hielo]^1 Has obtenido ^4+3 puntos por matar a tu enemigo!")
}
return
HAM_HANDLED;
}
return
HAM_IGNORED;
}


public
msg_statusicon( msgid, dest, id )
{
static
icon[ 5 ]
get_msg_arg_string( 2, icon, charsmax( icon ) )

if(
icon[ 0 ] == 'b' && icon[ 2 ] == 'y' && icon[ 3 ] == 'z' )
{
// Block buy
set_pdata_int( id, 235, get_pdata_int( id, 235 ) &~ ( 1<<0 ) )
return
PLUGIN_HANDLED
}

return
PLUGIN_CONTINUE
}

// Block win msg
public msg_textmsg( msg_id, msg_dest, msg_entity )
{
static
message[ 3 ]
get_msg_arg_string( 2, message, charsmax( message ) )

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

return
PLUGIN_CONTINUE
}

// Block win sound
public msg_sendaudio( msg_id, msg_dest, msg_entity )
{
static
message[10]
get_msg_arg_string( 2, message, charsmax( message ) )

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

return
PLUGIN_CONTINUE
}

public
Unfreeze(id)
{
// Unfreeze player if it's frozen
static Flags; Flags = entity_get_int( id, EV_INT_flags )
if(
Flags & FL_FROZEN )
entity_set_int( id, EV_INT_flags, Flags &~ 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(id, print_team_default, "^4[Sol&Hielo] ^1Solo ^4ADMINS^1 pueden usar este comando!")
return
PLUGIN_HANDLED
}
if(!
is_user_alive(id)) return PLUGIN_HANDLED
static Flags; Flags = entity_get_int(id, EV_INT_flags)
if(
Flags & FL_FROZEN && g_Team[id] == 2)
{
static
szName[33]; get_user_name(id, szName, charsmax(szName))
entity_set_int(id, EV_INT_flags, Flags &~ FL_FROZEN)
ScreenFade(id, 255, 0, 0, 60)
client_print_color(id, print_team_default, "Equipo [%d]", g_Team[id])
client_print_color(0, print_team_default, "^4[Sol&Hielo] ^1El admin ^4%s ^1 se ha descongelado con comando!", szName)
g_FrozenT--
g_AliveT++
entity_set_float(id, EV_FL_fuser1, get_gametime() + 2.0);
return
PLUGIN_HANDLED
}
client_print_color(id, print_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(id, print_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(id, print_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(id, print_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(titulo, charsmax(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
i; i < sizeof i_ItemsCT; i++)
{
if(
g_Points[id]<i_ItemsCT[i][Precio])
{
formatex(szItem, charsmax(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(szItem, charsmax(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(i, Posicion, charsmax(Posicion))
menu_additem(ctMenu, szItem, Posicion)
}
menu_setprop(ctMenu, MPROP_PERPAGE, 5)
menu_setprop(ctMenu, MPROP_NEXTNAME, "Siguiente")
menu_setprop(ctMenu, MPROP_BACKNAME, "Atras")
menu_setprop(ctMenu, MPROP_EXITNAME, "Salir")
menu_display(id, ctMenu, 0)
return
PLUGIN_HANDLED
}

public
handlerCT(id, menu, item)
{
if(!
is_user_alive(id))
{
client_print_color(id, print_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(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 No puedes comprar este item, pues sobrepasa el limite de HP permitida!")
return
PLUGIN_HANDLED
}
set_user_health(id, get_user_health(id)+30)
g_Points[id]-= i_ItemsCT[item][Precio]
ScreenFade(id, 255, 255, 0, 60)
client_print_color(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 No tienes suficientes puntos!")
return
PLUGIN_HANDLED
}
if(
g_isUserSpeed[id])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 Ya has comprado este item!")
return
PLUGIN_HANDLED
}
set_user_maxspeed(id, get_user_maxspeed(id) + 70.0)
g_isUserSpeed[id] = true
set_task
(10.0, "r_Speed", id)
g_Points[id]-= i_ItemsCT[item][Precio]
ScreenFade(id, 255, 255, 0, 60)
client_print_color(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 No tienes suficientes puntos!")
return
PLUGIN_HANDLED
}
if(
g_isUserGravity[id])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 Ya has comprado este item!")
return
PLUGIN_HANDLED
}
set_user_gravity(id, get_user_gravity(id) - 0.4)
g_Points[id] -= i_ItemsCT[item][Precio]
ScreenFade(id, 255, 255, 0, 60)
client_print_color(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 No tienes suficientes puntos!")
return
PLUGIN_HANDLED
}
if(
g_isUserInv[id])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 Ya has comprado este item!")
return
PLUGIN_HANDLED
}
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20)
g_Points[id] -= i_ItemsCT[item][Precio]
ScreenFade(id, 255, 255, 0, 60)
client_print_color(id, print_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(titulo, charsmax(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
i; i < sizeof i_ItemsT; i++)
{
if(
g_Points[id]<i_ItemsT[i][Precio])
{
formatex(szItem, charsmax(szItem), "\d[%s] [%s] [%d puntos]", i_ItemsT[i][Item], i_ItemsT[i][Descripcion], i_ItemsT[i][Precio])
}
else
{
formatex(szItem, charsmax(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(i, Posicion, charsmax(Posicion))
menu_additem(ttMenu, szItem, Posicion)
}
menu_setprop(ttMenu, MPROP_PERPAGE, 5)
menu_setprop(ttMenu, MPROP_NEXTNAME, "Siguiente")
menu_setprop(ttMenu, MPROP_BACKNAME, "Atras")
menu_setprop(ttMenu, MPROP_EXITNAME, "Salir")
menu_display(id, ttMenu, 0)
return
PLUGIN_HANDLED
}

public
handlerTT(id, menu, item)
{
if(!
is_user_alive(id))
{
client_print_color(id, print_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(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 No puedes comprar este item, pues sobrepasa el limite de HP permitida!")
return
PLUGIN_HANDLED
}
set_user_health(id, get_user_health(id)+30)
g_Points[id]-= i_ItemsT[item][Precio]
ScreenFade(id, 255, 255, 0, 60)
client_print_color(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 No tienes suficientes puntos!")
return
PLUGIN_HANDLED
}
if(
g_isUserSpeed[id])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 Ya has comprado este item!")
return
PLUGIN_HANDLED
}
set_user_maxspeed(id, get_user_maxspeed(id) + 70.0)
g_isUserSpeed[id] = true
set_task
(10.0, "r_Speed", id)
g_Points[id]-= i_ItemsT[item][Precio]
ScreenFade(id, 255, 255, 0, 60)
client_print_color(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 No tienes suficientes puntos!")
return
PLUGIN_HANDLED
}
if(
g_isUserGravity[id])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 Ya has comprado este item!")
return
PLUGIN_HANDLED
}
set_user_gravity(id, get_user_gravity(id) - 0.4)
g_Points[id] -= i_ItemsT[item][Precio]
ScreenFade(id, 255, 255, 0, 60)
client_print_color(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 No tienes suficientes puntos!")
return
PLUGIN_HANDLED
}
if(
g_isUserInv[id])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 Ya has comprado este item!")
return
PLUGIN_HANDLED
}
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 20)
g_Points[id] -= i_ItemsT[item][Precio]
ScreenFade(id, 255, 255, 0, 60)
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 Has comprado^4 %s ^1!", i_ItemsT[item])
set_task(10.0, "r_Inv", id)
}
case
4:
{
static
Flags; Flags = entity_get_int(id, EV_INT_flags)
if(
g_Points[id]<i_ItemsT[item][Precio])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 No tienes suficientes puntos!")
return
PLUGIN_HANDLED
}
if(
g_isUserInm[id])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 Ya has comprado este item!")
return
PLUGIN_HANDLED
}
if(
Flags & FL_FROZEN)
{
client_print_color(id, print_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(id, 255, 255, 0, 60)
client_print_color(id, print_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
Flags; Flags = entity_get_int(id, EV_INT_flags)
if(
g_Points[id]<i_ItemsT[item][Precio])
{
client_print_color(id, print_team_default, "^4[Sol&Hielo]^1 No tienes suficientes puntos!")
return
PLUGIN_HANDLED
}
if(!(
Flags & FL_FROZEN))
{
client_print_color(id, print_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(id, print_team_default, "^4[Sol&Hielo]^1 Has comprado^4 %s ^1!", i_ItemsT[item])
ScreenFade(id, 255, 0, 0, 60)
entity_set_int(id, EV_INT_flags, Flags &~ FL_FROZEN)
entity_set_float(id, EV_FL_fuser1, get_gametime() + 2.0);
g_AliveT++
g_FrozenT--
}

}

return
PLUGIN_HANDLED
}

public
r_Speed(id)
{
if(!
g_isUserSpeed[id]) return PLUGIN_HANDLED
set_user_maxspeed
(id, get_user_maxspeed(id) - 70)
ScreenFade(id, 255, 128, 0, 60)
client_print_color(id, print_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(id, 255, 128, 0, 60)
client_print_color(id, print_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
(id, 255, 128, 0, 60)
client_print_color(id, print_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 iId, Red, Green, Blue, Alpha)
{
message_begin( iId ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_msgScreenFade, _, iId );
write_short(1 * 4096);
write_short(1 * 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



Mensajes en este tema
FreezeTag - Sol & Hielo MOD - por GabsHp - 10-02-2020, 06:19 PM
RE: FreezeTag - Sol & Hielo MOD - por Alan# - 10-02-2020, 08:45 PM
RE: FreezeTag - Sol & Hielo MOD - por GabsHp - 10-11-2020, 07:30 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 .