AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   Fix plugin which use RoundEnd LogEvent (https://forums.alliedmods.net/showthread.php?t=215615)

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 boolg_iWasTransfered[33];

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_logevent("EvREnd"2"1=Round_End")
    
set_cvar_num("mp_autoteambalance"0);
}

public 
EvREnd()
{
    new 
    
iWinnerTeamiTFragsiTDeathsiCTFragsiCTDeaths
    
FloatfTPercentFloatfCTPercentFloatfCalcLimit,
    
iTCountiCTCountFloatflLimit MINLIMIT;

    for (new 
id 1id <= MAXPLSid++)
    {
        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 floatiTDeaths iTFrags ) * 100;
    
fCTPercent floatiCTDeaths 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 == )
            {    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 
iMaxFragsiIDplayeriIDPrev
    
    for (new 
id 1id <= MAXPLSid++)
    {
        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(iIDplayeriWinnerTeam == CS_TEAM_CT CS_TEAM_T);
            
g_iWasTransfered[iIDplayer] = true;
            
ShowMessage(iIDplayer);
    }
}

ShowMessage(id)
{
    new 
szName[32];
    
cd_get_user_name(idszName31);
    
client_print(0print_chat"%s was transferred to different team."szName )
}

/* 0/0 = Error. */
Invert(value)
{
    return 
value <= 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?


All times are GMT -4. The time now is 10:49.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.