152 lines
5.6 KiB
C#
152 lines
5.6 KiB
C#
|
//-----------------------------------------------------------------------------
|
||
|
// Torque Game Engine
|
||
|
//
|
||
|
// Copyright (c) 2001 GarageGames.Com
|
||
|
// Portions Copyright (c) 2001 by Sierra Online, Inc.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Server side message commands
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
function messageClient(%client, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13)
|
||
|
{
|
||
|
commandToClient(%client, 'ServerMessage', %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13);
|
||
|
}
|
||
|
|
||
|
function messageTeam(%team, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13)
|
||
|
{
|
||
|
%count = ClientGroup.getCount();
|
||
|
for(%cl= 0; %cl < %count; %cl++)
|
||
|
{
|
||
|
%recipient = ClientGroup.getObject(%cl);
|
||
|
if(%recipient.team == %team)
|
||
|
messageClient(%recipient, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function messageTeamExcept(%client, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13)
|
||
|
{
|
||
|
%team = %client.team;
|
||
|
%count = ClientGroup.getCount();
|
||
|
for(%cl= 0; %cl < %count; %cl++)
|
||
|
{
|
||
|
%recipient = ClientGroup.getObject(%cl);
|
||
|
if((%recipient.team == %team) && (%recipient != %client))
|
||
|
messageClient(%recipient, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function messageAll(%msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13)
|
||
|
{
|
||
|
%count = ClientGroup.getCount();
|
||
|
for(%cl = 0; %cl < %count; %cl++)
|
||
|
{
|
||
|
%client = ClientGroup.getObject(%cl);
|
||
|
messageClient(%client, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function messageAllExcept(%client, %team, %msgtype, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13)
|
||
|
{
|
||
|
//can exclude a client, a team or both. A -1 value in either field will ignore that exclusion, so
|
||
|
//messageAllExcept(-1, -1, $Mesblah, 'Blah!'); will message everyone (since there shouldn't be a client -1 or client on team -1).
|
||
|
%count = ClientGroup.getCount();
|
||
|
for(%cl= 0; %cl < %count; %cl++)
|
||
|
{
|
||
|
%recipient = ClientGroup.getObject(%cl);
|
||
|
if((%recipient != %client) && (%recipient.team != %team))
|
||
|
messageClient(%recipient, %msgType, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10, %a11, %a12, %a13);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
// Server side client chat'n
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
// silly spam protection...
|
||
|
$SPAM_PROTECTION_PERIOD = 10000;
|
||
|
$SPAM_MESSAGE_THRESHOLD = 4;
|
||
|
$SPAM_PENALTY_PERIOD = 10000;
|
||
|
$SPAM_MESSAGE = '\c3FLOOD PROTECTION:\cr You must wait another %1 seconds.';
|
||
|
|
||
|
function GameConnection::spamMessageTimeout(%this)
|
||
|
{
|
||
|
if(%this.spamMessageCount > 0)
|
||
|
%this.spamMessageCount--;
|
||
|
}
|
||
|
|
||
|
function GameConnection::spamReset(%this)
|
||
|
{
|
||
|
%this.isSpamming = false;
|
||
|
}
|
||
|
|
||
|
function spamAlert(%client)
|
||
|
{
|
||
|
if($Pref::Server::FloodProtectionEnabled != true)
|
||
|
return(false);
|
||
|
|
||
|
if(!%client.isSpamming && (%client.spamMessageCount >= $SPAM_MESSAGE_THRESHOLD))
|
||
|
{
|
||
|
%client.spamProtectStart = getSimTime();
|
||
|
%client.isSpamming = true;
|
||
|
%client.schedule($SPAM_PENALTY_PERIOD, spamReset);
|
||
|
}
|
||
|
|
||
|
if(%client.isSpamming)
|
||
|
{
|
||
|
%wait = mFloor(($SPAM_PENALTY_PERIOD - (getSimTime() - %client.spamProtectStart)) / 1000);
|
||
|
messageClient(%client, "", $SPAM_MESSAGE, %wait);
|
||
|
return(true);
|
||
|
}
|
||
|
|
||
|
%client.spamMessageCount++;
|
||
|
%client.schedule($SPAM_PROTECTION_PERIOD, spamMessageTimeout);
|
||
|
return(false);
|
||
|
}
|
||
|
|
||
|
|
||
|
//---------------------------------------------------------------------------
|
||
|
|
||
|
function chatMessageClient( %client, %sender, %voiceTag, %voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 )
|
||
|
{
|
||
|
//see if the client has muted the sender
|
||
|
if ( !%client.muted[%sender] )
|
||
|
commandToClient( %client, 'ChatMessage', %sender, %voiceTag, %voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 );
|
||
|
}
|
||
|
|
||
|
function chatMessageTeam( %sender, %team, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 )
|
||
|
{
|
||
|
if ( ( %msgString $= "" ) || spamAlert( %sender ) )
|
||
|
return;
|
||
|
%count = ClientGroup.getCount();
|
||
|
for ( %i = 0; %i < %count; %i++ )
|
||
|
{
|
||
|
%obj = ClientGroup.getObject( %i );
|
||
|
if ( %obj.team == %sender.team )
|
||
|
chatMessageClient( %obj, %sender, %sender.voiceTag, %sender.voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function chatMessageAll( %sender, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 )
|
||
|
{
|
||
|
if ( ( %msgString $= "" ) || spamAlert( %sender ) )
|
||
|
return;
|
||
|
%count = ClientGroup.getCount();
|
||
|
for ( %i = 0; %i < %count; %i++ )
|
||
|
{
|
||
|
%obj = ClientGroup.getObject( %i );
|
||
|
if(%sender.team != 0)
|
||
|
chatMessageClient( %obj, %sender, %sender.voiceTag, %sender.voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 );
|
||
|
else
|
||
|
{
|
||
|
// message sender is an observer -- only send message to other observers
|
||
|
if(%obj.team == %sender.team)
|
||
|
chatMessageClient( %obj, %sender, %sender.voiceTag, %sender.voicePitch, %msgString, %a1, %a2, %a3, %a4, %a5, %a6, %a7, %a8, %a9, %a10 );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|