VadaVaka

Full Version: It's fixed...
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
i am pleased to anounce that i have taken care of the reconnecting problem in ricochet. the solution was very simple, so painfully obvious that i'm ashamed i didn't take care of it a helluva lot sooner.

you can replace the AddClientToArena function in your DiscArena.cpp file w/ this one below and recompile...or pm me and i will e-mail you my modified DiscArena.cpp file. remeber that this function is
a global and not part of the Arena class.

i didn't really write any new code...i just swaped some things around (man, i feel dumb...lol). now about that white-disc...hmm...

// MODIFIED FUNCTION //////////////////////////////////////////////////////////////////////////////
void AddClientToArena( CBasePlayer *pPlayer )
{

// This is the HAX!!!
// remember ...we don't have any arena objects yet...so when do we
// initialize?
// here's the plan...we need to tell the
// computer to try and place the client in a full arena first...that will make him/her spectate...
for (int i = 0; i < MAX_ARENAS; i++)
{
if ( g_pArenaList[i]->IsFull() == FALSE )
{
int iArenaNumber = i;

g_pArenaList[iArenaNumber]->AddClient( pPlayer, TRUE );

bool bFoundOne = TRUE;

/*
// Now, if this arena's not full, try to find one more player to join her
while ( (g_pArenaList[iArenaNumber]->IsFull() == FALSE) && bFoundOne )
{
bFoundOne = FALSE;

// Cycle through all the arenas and find a spare player
for (int j = 0; j < MAX_ARENAS; j++)
{
CBasePlayer *pSparePlayer = g_pArenaList[j]->GetFirstSparePlayer();
if (pSparePlayer && pSparePlayer != pPlayer)
{
g_pArenaList[j]->RemoveClient( pSparePlayer );
g_pArenaList[iArenaNumber]->AddClient( pSparePlayer, TRUE );
bFoundOne = TRUE;
break;
}
}
} */

// If we couldn't find another player for this arena, just add them to an existing arena
if ( g_pArenaList[iArenaNumber]->IsFull() == FALSE )
{
// Add to the first full arena
for (int j = 0; j < MAX_ARENAS; j++)
{
if ( g_pArenaList[j]->IsFull() )
{
// Remove from current
g_pArenaList[iArenaNumber]->RemoveClient( pPlayer );

// Add to full one
iArenaNumber = j;
g_pArenaList[iArenaNumber]->AddClient( pPlayer, TRUE );
break;
}
}
}

//while ( (g_pArenaList[iArenaNumber]->IsFull() == FALSE) && bFoundOne )
else
{
bFoundOne = FALSE;

// Cycle through all the arenas and find a spare player
for (int j = 0; j < MAX_ARENAS; j++)
{
CBasePlayer *pSparePlayer = g_pArenaList[j]->GetFirstSparePlayer();
if (pSparePlayer && pSparePlayer != pPlayer)
{
g_pArenaList[j]->RemoveClient( pSparePlayer );
g_pArenaList[iArenaNumber]->AddClient( pSparePlayer, TRUE );
bFoundOne = TRUE;
break;
}
}
} // */



//ALERT( at_console, "ADDED %s to Arena %d\n", STRING(pPlayer->pev->netname), iArenaNumber );
return;
}
}
}
// END ///////////////////////////////////////////////////////////////////////////////////////////
:thumb:.
Wow I actually understood all of that! Awesome!!!
I have copied the source and will incorporate it into my
latest version. I am in the middle of changing servers
but once it starts showing up I will set it for rc_arena
so we can test it out.

Way to go .asm!!!!
great...sounds like a man w/ some experience. yeah, i wouldn't technically call the reconnecting situation a bug because it was probably valve's intent to get a client playing as soon as possible, but it's damn annoying for everyone when someone exploits it.

Quote:It seems to me unorthodox to edit the function which does exactly what it is supposed to do, when it is called at the wrong occassions.

i'm unorthodox...^_^