1153
1153
double time = tSysTimeFloat();
1155
// get the oldest player from the sending client
1156
double timeCreated = time;
1157
for ( int i = se_PlayerNetIDs.Len()-1; i>=0; --i )
1159
ePlayerNetID * senderPlayer = se_PlayerNetIDs(i);
1160
if( senderPlayer->Owner() == senderID && senderPlayer->GetTimeCreated() < timeCreated )
1162
timeCreated = senderPlayer->GetTimeCreated();
1166
// don't let the player call a vote if s/he is silenced.
1167
if ( player_->IsSilenced() )
1169
tOutput message("$vote_silenced");
1170
sn_ConsoleOut( message, player_->Owner() );
1155
1174
// check whether the issuer is allowed to start a vote
1156
if ( sender && player_ && player_->GetTimeCreated() + se_votingMaturity > time )
1175
if ( sender && player_ && timeCreated + se_votingMaturity > time )
1158
REAL timeLeft = player_->GetTimeCreated() + se_votingMaturity - time;
1177
REAL timeLeft = timeCreated + se_votingMaturity - time;
1159
1178
tOutput message( "$vote_maturity", timeLeft );
1160
1179
sn_ConsoleOut( message, senderID );
1201
1220
return eVoteItem::DoCheckValid( senderID );
1223
virtual void DoExecute()
1225
// Don't prevent name changes if the vote passes
1226
eVoter *suggestor = GetSuggestor();
1229
suggestor->lastNameChangePreventor_ = -1E30;
1204
1234
virtual void DoFillToMessage( nMessage& m ) const
1310
1342
return eVoteItemHarm::DoCheckValid( senderID );
1313
virtual void DoExecute() // called when the voting was successful
1345
virtual void DoExecuteHarm() // called when the voting was successful
1315
1347
ePlayerNetID * player = GetPlayer();
1316
1348
nMachine * machine = GetMachine();
1452
1489
virtual bool DoCheckValid( int senderID )
1454
1492
// check whether enough harmful votes were collected already
1455
1493
ePlayerNetID * p = GetPlayer();
1456
if ( p && !p->GetVoter() )
1461
if ( fromMenu_ && p && p->GetVoter() && p->GetVoter()->HarmCount() < se_kickMinHarm )
1463
// try to transfor the vote to a suspension
1464
eVoteItem * item = tNEW ( eVoteItemSuspend )( p );
1494
if ( fromMenu_ && p )
1496
eVoter *voter = eVoter::GetVoter( p->Owner() );
1497
if ( voter && voter->HarmCount() < se_kickMinHarm )
1499
// try to transfor the vote to a suspension
1500
eVoteItem * item = tNEW ( eVoteItemSuspend )( p );
1466
// let item check its validity
1467
if ( !item->CheckValid( senderID ) )
1473
// no objection? Broadcast it to everyone.
1475
item->ReBroadcast( senderID );
1502
// let item check its validity
1503
if ( !item->CheckValid( senderID ) )
1509
// no objection? Broadcast it to everyone.
1511
item->ReBroadcast( senderID );
1478
// and cancel this item here.
1514
// and cancel this item here.
1482
1519
// no transformation needed or transformation failed. Proceed as usual.
1483
1520
return eVoteItemHarm::DoCheckValid( senderID );
1486
virtual void DoExecute() // called when the voting was successful
1523
virtual void DoExecuteHarm() // called when the voting was successful
1488
eVoteItemKick::DoExecute();
1525
eVoteItemKick::DoExecuteHarm();
1491
1528
bool fromMenu_; // flag set if the vote came from the menu
1720
1757
// **************************************************************************************
1723
// menu item to silence selected players
1760
// menu item to kick selected players
1724
1761
class eMenuItemKick: public uMenuItemAction
1959
1996
return eVoteItem::GetItems().Len() > 0;
1962
eVoter* eVoter::GetVoter( int ID, bool complain ) // find or create the voter for the specified ID
1999
eVoter* eVoter::GetVoter( int ID, bool complain )
1964
2001
// the server has no voter
1965
2002
#ifdef DEDICATED
2028
return GetPersistentVoter( ID );
2031
eVoter* eVoter::GetPersistentVoter( int ID )
1991
2033
// get machine from network subsystem
1992
2034
nMachine & machine = nMachine::GetMachine( ID );
1994
return GetVoter( machine );
2035
return GetPersistentVoter( machine );
1997
eVoter* eVoter::GetVoter( nMachine & machine ) // find or create the voter for the specified machine
2038
eVoter* eVoter::GetPersistentVoter( nMachine & machine )
1999
2040
// iterate through the machine's decorators, find a voter
2000
2041
nMachineDecorator * run = machine.GetDecorators();
2198
// don't let the player call a vote if s/he is silenced.
2199
if ( p->IsSilenced() )
2201
tOutput message("$vote_silenced");
2202
sn_ConsoleOut( message, p->Owner() );
2157
2206
// read command part (kick, remove, include)
2158
2207
tString command;
2159
2208
message >> command;