Han ocurrido los siguientes errores:
Warning [2] Undefined variable $unreadreports - Line: 119 - File: global.php(961) : eval()'d code PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/global.php(961) : eval()'d code 119 errorHandler->error_callback
/global.php 961 eval
/printthread.php 16 require_once
Warning [2] Undefined array key "fragment" - Line: 1494 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1494 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key "query" - Line: 1505 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1505 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key 1 - Line: 1510 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1510 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key 0 - Line: 1587 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1587 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key "v" - Line: 1591 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1591 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key "fragment" - Line: 1494 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1494 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key "query" - Line: 1505 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1505 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key 1 - Line: 1510 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1510 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key 0 - Line: 1587 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1587 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message
Warning [2] Undefined array key "v" - Line: 1591 - File: inc/class_parser.php PHP 8.4.6 (Linux)
File Line Function
/inc/class_error.php 153 errorHandler->error
/inc/class_parser.php 1591 errorHandler->error_callback
/inc/class_parser.php 1640 postParser->mycode_parse_video
[PHP] postParser->mycode_parse_video_callback
/inc/class_parser.php 513 preg_replace_callback
/inc/class_parser.php 228 postParser->parse_mycode
/printthread.php 203 postParser->parse_message



MxEMexico
[Aporte] FreezeTag - Sol & Hielo MOD - Versión para impresión

+- MxEMexico (https://www.mxemexico.com)
+-- Foro: Extras (https://www.mxemexico.com/forumdisplay.php?fid=162)
+--- Foro: Pawn/Scripting. (https://www.mxemexico.com/forumdisplay.php?fid=100)
+--- Tema: [Aporte] FreezeTag - Sol & Hielo MOD (/showthread.php?tid=12163)



FreezeTag - Sol & Hielo MOD - GabsHp - 10-02-2020

[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();
}



RE: FreezeTag - Sol & Hielo MOD - Alan# - 10-02-2020

Está muy interesante el concepto, me parece un modo de juego sencillo y bastante entretenido, excelente aporte +1.


RE: FreezeTag - Sol & Hielo MOD - GabsHp - 10-11-2020

[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