|
Veteran Member
Join Date: Jul 2006
Location: France (95)
|

12-21-2008
, 16:38
Re: Infinite roundtime, remove bombsites
|
#7
|
You can try this, it's not fully tested.
PHP Code:
/* Copyright © 2008, ConnorMcLeod
No Objectives is free software;
you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with No Objectives; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#pragma semicolon 1
#define PLUGIN "Block Round End"
#define AUTHOR "ConnorMcLeod"
#define VERSION "0.0.3"
#define MAX_PLAYERS 32
#define HITGROUP_HEAD 1
#define MAX_OBJECTIVES 9
#define HIDE_TIMER (1<<4)
#define fm_get_user_team(%1) get_pdata_int(%1,114,5)
#define OFFSET_CSDEATHS 444
#define cs_get_user_deaths(%1) get_pdata_int(%1,OFFSET_CSDEATHS)
#define fm_set_user_deaths(%1,%2) set_pdata_int(%1,OFFSET_CSDEATHS,%2)
new const g_szObjectivesClasses[MAX_OBJECTIVES][] = {
"func_bomb_target",
"info_bomb_target",
"hostage_entity",
"monster_scientist",
"func_hostage_rescue",
"info_hostage_rescue",
"info_vip_start",
"func_vip_safetyzone",
"func_escapezone"
};
new const g__szObjectivesClasses[MAX_OBJECTIVES][] = {
"_func_bomb_target",
"_info_bomb_target",
"_hostage_entity",
"_monster_scientist",
"_func_hostage_rescue",
"_info_hostage_rescue",
"_info_vip_start",
"_func_vip_safetyzone",
"_func_escapezone"
};
new sv_restartround;
new gmsgHideWeapon, gmsgCrosshair, gmsgDeathMsg, gmsgScoreInfo;
new g_iHideWeapon;
new g_iMaxPlayers;
new bool:g_bBlockRoundEnd;
new bool:g_bAlive[MAX_PLAYERS+1];
new bool:g_bHeadShot[MAX_PLAYERS+1][MAX_PLAYERS+1];
public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR );
register_event("ResetHUD", "Event_ResetHUD", "b");
register_concmd("roundend_block", "ConsoleCommand_Block", ADMIN_CFG);
register_concmd("roundend_allow", "ConsoleCommand_Allow", ADMIN_CFG);
RegisterHam(Ham_Spawn, "player", "Player_Spawn");
RegisterHam(Ham_Killed, "player", "Player_Killed");
RegisterHam(Ham_TraceAttack, "player", "Player_TraceAttack", 1);
sv_restartround = get_cvar_pointer("sv_restartround");
gmsgHideWeapon = get_user_msgid("HideWeapon");
gmsgCrosshair = get_user_msgid("Crosshair");
gmsgDeathMsg = get_user_msgid("DeathMsg");
gmsgScoreInfo = get_user_msgid("ScoreInfo");
g_iMaxPlayers = get_maxplayers();
}
public ConsoleCommand_Block(id, level, cid)
{
if( !cmd_access(id, level, cid, 1) )
{
return PLUGIN_HANDLED;
}
if( g_bBlockRoundEnd )
{
return PLUGIN_HANDLED;
}
g_bBlockRoundEnd = true;
for(new i; i<MAX_OBJECTIVES; i++)
{
Change_Classname(g_szObjectivesClasses[i], g__szObjectivesClasses[i]);
}
if(!g_iHideWeapon)
{
g_iHideWeapon = register_message(gmsgHideWeapon, "Message_HideWeapon");
}
set_pcvar_float(sv_restartround, 1.0);
return PLUGIN_HANDLED;
}
public ConsoleCommand_Allow(id, level, cid)
{
if( !cmd_access(id, level, cid, 1) )
{
return PLUGIN_HANDLED;
}
if( !g_bBlockRoundEnd )
{
return PLUGIN_HANDLED;
}
g_bBlockRoundEnd = false;
for(new i; i<MAX_OBJECTIVES; i++)
{
Change_Classname(g__szObjectivesClasses[i], g_szObjectivesClasses[i]);
}
if( g_iHideWeapon )
{
unregister_message(gmsgHideWeapon, g_iHideWeapon);
g_iHideWeapon = 0;
}
set_pcvar_float(sv_restartround, 1.0);
return PLUGIN_HANDLED;
}
Change_Classname(szOldClassName[], szNewClassname[])
{
new iEnt, szClassname[] = "classname";
while( ( iEnt = engfunc(EngFunc_FindEntityByString, iEnt, szClassname, szOldClassName) ) )
{
set_pev(iEnt, pev_classname, szNewClassname);
}
}
public Message_HideWeapon(iMsgId, MSG_DEST, id)
{
set_msg_arg_int(1, ARG_BYTE, get_msg_arg_int(1) | HIDE_TIMER);
}
public Event_ResetHUD(id)
{
if(g_bBlockRoundEnd)
{
Hide_Timer(id);
set_task(0.01, "Hide_Timer_Full", id);
}
}
public Hide_Timer_Full(id)
{
Hide_Timer(id);
message_begin(MSG_ONE_UNRELIABLE, gmsgCrosshair, _, id);
write_byte(0);
message_end();
}
Hide_Timer(id)
{
message_begin(MSG_ONE_UNRELIABLE, gmsgHideWeapon, _, id);
write_byte(HIDE_TIMER);
message_end();
}
public Player_Spawn( id )
{
if( is_user_alive(id) )
{
g_bAlive[id] = true;
}
}
public Player_TraceAttack(id, idattacker, Float:damage, Float:fDirection[3], trace_handle, damagebits)
{
if( (1 <= idattacker <= g_iMaxPlayers) )
{
g_bHeadShot[idattacker][id] = bool:(get_tr2(trace_handle,TR_iHitgroup) == HITGROUP_HEAD);
}
}
public Player_Killed(iVictim, iKiller)
{
g_bAlive[iVictim] = false;
if( !get_alives(fm_get_user_team(iVictim)) )
{
// fake death msg + log_message + score update
fake_death(iVictim, iKiller);
ExecuteHamB( Ham_Spawn, iVictim );
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public client_disconnect(id)
{
g_bAlive[id] = false;
}
get_alives(iTeam)
{
new iCount;
for(new id = 1; id <= g_iMaxPlayers; id++)
{
if( g_bAlive[id] && fm_get_user_team(id) == iTeam )
iCount++;
}
return iCount;
}
fake_death(iVictim, iKiller)
{
new iEnt = pev(iVictim, pev_dmg_inflictor);
new szWeaponName[32];
if( (1 <= iKiller <= g_iMaxPlayers) && iKiller == iEnt)
{
get_weaponname(get_user_weapon(iKiller), szWeaponName, charsmax(szWeaponName));
MakeDeathMsg(iKiller, iVictim, g_bHeadShot[iKiller][iVictim], szWeaponName[7]);
if(iKiller != iVictim)
{
new Float:flFrags;
pev(iKiller, pev_frags, flFrags);
set_pev(iKiller, pev_frags, ++flFrags);
Make_ScoreInfo(iKiller, floatround(flFrags), cs_get_user_deaths(iKiller), fm_get_user_team(iKiller));
}
}
else
{
pev(iEnt, pev_classname, szWeaponName, charsmax(szWeaponName));
MakeDeathMsg(iKiller, iVictim, 0, szWeaponName);
}
new iDeaths = cs_get_user_deaths(iVictim);
fm_set_user_deaths(iVictim, iDeaths);
Make_ScoreInfo(iVictim, get_user_frags(iVictim), iDeaths, fm_get_user_team(iVictim));
}
MakeDeathMsg(killer, victim, headshot, const weapon[], log=1)
{
emessage_begin(MSG_BROADCAST, gmsgDeathMsg);
ewrite_byte(killer);
ewrite_byte(victim);
ewrite_byte(headshot);
ewrite_string(weapon);
emessage_end();
if( !log )
return;
new kname[32], kid[20], kteam[10], vname[32], vid[20], vteam[10];
get_user_name(killer, kname, charsmax(kname));
get_user_authid(killer, kid, charsmax(kid));
get_user_team(killer, kteam, charsmax(kteam));
get_user_name(victim, vname, charsmax(vname));
get_user_authid(victim, vid, charsmax(vid));
get_user_team(victim, vteam, charsmax(vteam));
log_message("^"%s<%d><%s><%s>^" killed ^"[P*D]Eliza (100)<5><BOT><CT>^" with ^"deagle^"",
kname, get_user_userid(killer), kid, kteam,
vname, get_user_userid(victim), vid, vteam, weapon);
}
Make_ScoreInfo(id, frags, deaths, team)
{
message_begin(MSG_BROADCAST, gmsgScoreInfo);
write_byte(id);
write_short(frags);
write_short(deaths);
write_short(0);
write_short(team);
message_end();
}
__________________
|
|