| FromTheFuture |
05-10-2013 09:18 |
Fix plugin which use RoundEnd LogEvent
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <work>
#include <client_data>
#include <cstrike>
#define PLUGIN "OptimizeTeams"
#define VERSION "1.0"
#define AUTHOR "FromTheFuture"
#define MAXLIMIT 40.0
#define MINLIMIT 30.0
#define PLLIMIT 1
#define PLMAXLIMIT 2
#define MAXPLS 32
#define CT 2
#define T 1
new bool: g_iWasTransfered[33];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("EvREnd", 2, "1=Round_End")
set_cvar_num("mp_autoteambalance", 0);
}
public EvREnd()
{
new
iWinnerTeam, iTFrags, iTDeaths, iCTFrags, iCTDeaths,
Float: fTPercent, Float: fCTPercent, Float: fCalcLimit,
iTCount, iCTCount, Float: flLimit = MINLIMIT;
for (new id = 1; id <= MAXPLS; id++)
{
if(is_user_connected(id))
{
if(cd_get_user_team(id) == 1)
{
iTFrags += get_real_frags(id);
iTDeaths += get_real_deaths(id);
iTCount++;
}
else
if(cd_get_user_team(id) == 2)
{
iCTFrags += get_real_frags(id);
iCTDeaths += get_real_deaths(id);
iCTCount++;
}
}
}
iCTFrags = Invert(iCTFrags);
iTFrags = Invert(iTFrags);
iTDeaths = Invert(iTDeaths);
iCTDeaths = Invert(iCTDeaths);
fTPercent = float( iTDeaths / iTFrags ) * 100;
fCTPercent = float( iCTDeaths / iCTFrags ) * 100;
if ( fTPercent > fCTPercent )
{
fCalcLimit = fTPercent - fCTPercent;
iWinnerTeam = CT;
}
else
if ( fTPercent < fCTPercent)
{
fCalcLimit = fCTPercent - fTPercent;
iWinnerTeam = T;
}
else
return;
if( iCTCount - iTCount >= PLLIMIT)
{
if( iWinnerTeam == T )
{ if( iCTCount - iTCount >= PLMAXLIMIT)
return;
else
flLimit = MAXLIMIT;
}
}
else
if( iTCount - iCTCount >= PLLIMIT)
{
if( iWinnerTeam == CT )
{
if( iTCount - iCTCount >= PLMAXLIMIT)
return;
else
flLimit = MAXLIMIT;
}
}
if (fCalcLimit >= flLimit)
TransferFromTeam(iWinnerTeam);
}
public client_disconnect(id)
{
g_iWasTransfered[id] = false;
}
TransferFromTeam(iWinnerTeam)
{
new iMaxFrags, iIDplayer, iIDPrev;
for (new id = 1; id <= MAXPLS; id++)
{
if(is_user_connected(id))
{
if(cd_get_user_team(id) == iWinnerTeam && !g_iWasTransfered[id])
{
if(iMaxFrags < get_real_frags(id))
{
iMaxFrags = get_real_frags(id);
iIDPrev = iIDplayer;
iIDplayer = id;
}
}
}
}
if(iIDPrev)
iIDplayer = iIDPrev;
if(is_user_connected(iIDplayer))
{
if(is_user_alive(iIDplayer))
user_silentkill(iIDplayer);
cs_set_user_team(iIDplayer, iWinnerTeam == 1 ? CS_TEAM_CT : CS_TEAM_T);
g_iWasTransfered[iIDplayer] = true;
ShowMessage(iIDplayer);
}
}
ShowMessage(id)
{
new szName[32];
cd_get_user_name(id, szName, 31);
client_print(0, print_chat, "%s was transferred to different team.", szName )
}
/* 0/0 = Error. */
Invert(value)
{
return value <= 0 ? 1 : value;
}
This plugin for team balance.
I don't know why, but sometimes in RoundEnd, function "TransferFromTeam" called many many times and lot of players was transfer to spectators.
Help me to fix it, please.
It's problem can be called because of pausecfg.amxx?
|