PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#include <frozentag/frozentag_const>
#include <frozentag/frozentag_stocks>
/*! Plugin Init */
public plugin_init() {
/*! Remove entities */
unregister_forward(FM_Spawn, g_removeEntities);
/*! Register Plugin */
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
register_dictionary("frozentag.txt");
/*! Forwards */
RegisterHam(Ham_Spawn, "player", "fwPlayerSpawned", 1);
RegisterHam(Ham_Killed, "player", "fwPlayerKilled", 1);
RegisterHam(Ham_Touch, "player", "fwPlayerTouch");
RegisterHam(Ham_Item_Deploy, "weapon_knife", "fwHamKnifeDeploy", 1);
// Round start
register_event("HLTV", "fwRoundStart", "a", "1=0", "2=0");
register_forward(FM_PlayerPreThink , "fwPlayerPreThink");
/*! Blocking buy */
register_message(get_user_msgid("StatusIcon"), "msgStatusIcon");
g_iStatusIcon = get_user_msgid("StatusIcon");
/*! Block win sound & win msg */
register_message(get_user_msgid("SendAudio"), "msgSendAudio");
register_message(get_user_msgid("TextMsg"), "msgText");
/*! Cvars */
g_pUnfreezeTime = register_cvar("ft_unfreeze_time", "3.0");
g_pGameRoundTime = register_cvar("ft_roundtime", "180.0");
g_pUnfreezeRange = register_cvar("ft_unfreeze_range", "50");
g_pShowKnife = register_cvar("ft_show_knife", "1");
g_pBlockMouseview = register_cvar("ft_block_mouseview", "1");
g_pAutoUnfreeze = register_cvar("ft_auto_unfreeze", "1");
g_pAutoUnfreezeTime = register_cvar("ft_auto_unfreeze_time", "120.0");
g_pShowBar = register_cvar("ft_show_bar", "1");
g_pRoundTime = get_cvar_pointer("mp_roundtime");
/*! Remove weapons on the ground */
new iArmouryEnt = -1, iEnt;
while ((iArmouryEnt = find_ent_by_class(iArmouryEnt, "armoury_entity" )))
remove_entity(iArmouryEnt);
/*! Smart Hud Message */
register_forward(FM_Think,"fwThinkEntity")
iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString , "info_target"))
set_pev(iEnt, pev_classname, "tm_playersthink")
set_pev(iEnt, pev_nextthink, get_gametime() + 1.0)
/*! MaxPlayers */
g_iMaxPlayers = get_maxplayers();
/*! Unfreeze Bar */
g_iBarTime = get_user_msgid("BarTime");
}
public plugin_cfg() {
new iCvarFiles[100], iPath[64];
getConfigsDir(iPath, 63);
formatex(iCvarFiles, 99, "%s/%s", iPath, FT_CVARFILE);
if(file_exists(iCvarFiles)) {
server_cmd("exec %s", iCvarFiles);
server_exec();
} else {
makeConfigFile(iCvarFiles);
}
}
public plugin_precache() {
g_removeEntities = register_forward( FM_Spawn, "fwRemoveEnts", 1 )
precache_model(ice_model);
}
public fwRemoveEnts(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)
}
}
/*! Forwards */
public fwThinkEntity(iEnt) {
if(pev_valid(iEnt)) {
static ClassName[32]
pev(iEnt, pev_classname, ClassName, 31)
if(equal(ClassName, "tm_playersthink")) {
fwPlayersThink()
set_pev(iEnt, pev_nextthink, get_gametime() + 0.08)
}
}
}
public fwPlayersThink() {
new iAlive[32], iFrozenPlayers, iNum;
get_players(iAlive, iNum, "ache", "TERRORIST")
for(new i=0; i < iNum; i++) {
if(g_isPlayerFrozen[iAlive[i]])
iFrozenPlayers++;
}
set_hudmessage(200, 200, 200, 0.465, 0.02, 0, 0.0, 0.2, 0.0, 0.0, 4)
show_hudmessage(0, "%L", LANG_SERVER, "HUD_STATUS", iFrozenPlayers, iNum);
}
public fwRoundStart() {
g_iFrozenRunners = 0
g_iAliveRunners = 0
static Float:iRoundTime;
iRoundTime = get_pcvar_float(g_pGameRoundTime);
set_pcvar_float(g_pRoundTime, iRoundTime / 60);
remove_task(TASKID_ROUNDEND);
set_task(iRoundTime, "tskRoundEnd", TASKID_ROUNDEND);
}
public tskRoundEnd(iTask) {
client_cmd( 0, "spk radio/terwin.wav" )
g_iAliveRunners = 0
for (new id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_connected(id))
continue;
fwUnfreezePlayer(id);
switch(g_iTeams[id])
{
case CS_TEAM_CT: user_silentkill(id);
case CS_TEAM_T: set_user_frags(id, get_user_frags(id) + 1);
}
}
}
public fwPlayerPreThink(id) {
if(!is_user_alive(id))
return;
static iButton, iOldButtons;
iButton = pev(id, pev_button);
iOldButtons = pev( id, pev_oldbuttons );
get_user_aiming(id, g_iTarget[id], g_iTarget[0], get_pcvar_num(g_pUnfreezeRange));
if(iButton & IN_USE && !(iOldButtons & IN_USE)) {
if(!g_iTarget[id] || !is_user_alive(g_iTarget[id]) || g_iTargetOf[g_iTarget[id]] || cs_get_user_team(id) != cs_get_user_team(g_iTarget[id]))
return;
if(!g_isPlayerFrozen[g_iTarget[id]])
return;
g_iTargetOf[g_iTarget[id]] = id;
new iTime = get_pcvar_num(g_pUnfreezeTime);
if(get_pcvar_num(g_pShowBar))
makeBar(id, iTime);
set_task(float(iTime), "fwUnfreezePlayer", g_iTarget[id]);
} else if( iOldButtons & IN_USE && !(iButton & IN_USE)) {
if (!g_iTarget[id])
return;
remove_task(g_iTarget[id]);
g_iTargetOf[g_iTarget[id]] = 0;
g_iTarget[id] = 0;
if(get_pcvar_num(g_pShowBar))
makeBar(id);
}
/*! Block Mouse View while frozen */
if(g_isPlayerFrozen[id] && get_pcvar_num(g_pBlockMouseview)) {
if(is_user_alive(id)) {
set_pev(id, pev_v_angle, g_iPlayerAngles[id] );
set_pev(id, pev_fixangle, 1);
}
}
}
public fwPlayerKilled(id) {
if(g_iTeams[id] == CS_TEAM_T && is_user_alive(id)) {
g_iAliveRunners--
// Check if all the terrorist are frozen
checkTerms();
}
if (g_iTargetOf[id]) {
if(get_pcvar_num(g_pShowBar))
makeBar(g_iTargetOf[id]);
remove_task(g_iTargetOf[id]);
}
g_iTarget[id] = 0;
g_iTargetOf[id] = 0;
remove_task(id);
}
public fwPlayerSpawned(id) {
if(is_user_alive(id)) {
strip_user_weapons(id);
if(get_pcvar_num(g_pShowKnife))
give_item(id, "weapon_knife");
g_iTeams[id] = cs_get_user_team(id);
if(g_iTeams[ id ] == CS_TEAM_T)
g_iAliveRunners++
}
}
public fwPlayerTouch(iTouched, iToucher) {
if((1 <= iToucher <= g_iMaxPlayers)) {
if(g_iTeams[iToucher] == CS_TEAM_CT && g_iTeams[iTouched] == CS_TEAM_T) {
if(g_isPlayerFrozen[iTouched])
return;
fwFreezePlayer(iTouched);
}
}
checkTerms();
}
public fwHamKnifeDeploy(iEnt) {
set_pdata_float(iEnt, g_cNextPAttack, 9999.0, g_cWepOffset);
set_pdata_float(iEnt, g_cNextSAttack, 9999.0, g_cWepOffset);
}
/*! Blocking */
public msgStatusIcon(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 msgText(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 msgSendAudio(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;
}
/*! Disconnect */
public client_disconnected(id) {
if(g_iTeams[id] == CS_TEAM_T && is_user_alive(id)) {
g_iAliveRunners--
// Check if all the terrorist are frozen
checkTerms();
}
if (g_iTargetOf[id]) {
if(get_pcvar_num(g_pShowBar))
makeBar(g_iTargetOf[id]);
remove_task(g_iTargetOf[id]);
}
g_iTarget[id] = 0;
g_iTargetOf[id] = 0;
remove_task(id);
}