T2-AAConstruction/scripts/modScripts/XLib_serverFunctions.cs
Robert MacGregor 23fed9edb7 Initial commit.
2016-02-22 12:04:31 -05:00

273 lines
8.7 KiB
C#
Executable file

//------------------------------------------------------------------------------
// Server Library.cs (c) 2010 DarkDragonDX (AKA 'Vector')
//------------------------------------------------------------------------------
// Client / AI Functions
function IsValidVoice(%voice)
{
switch$(%voice)
{
case "male1" or "male2" or "male3" or "male4" or "male5" or "fem1" or "fem2" or "fem3" or "fem4" or "fem5" or "derm1" or "derm2" or "derm3":
return true;
default:
return false;
}
return "Unknown"; //Shouldn't happen
}
function setVoice(%client, %voice, %voicepitch)
{
freeClientTarget(%client);
%client.voice = %voice;
%client.voicetag = addtaggedstring(%voice);
%client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch);
if (IsObject(%client.player))
%client.player.setTarget(%client.target);
}
function setSkin(%client, %skin)
{
freeClientTarget(%client);
%client.skin = addtaggedstring(%skin);
%client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch);
if (IsObject(%client.player))
%client.player.setTarget(%client.target);
}
function setName(%client, %name)
{
freeClientTarget(%client);
%client.namebase = %name;
%client.name = addtaggedstring(%name);
%client.target = allocClientTarget(%client, %client.name, %client.skin, %client.voiceTag, '_ClientConnection', 0, 0, %client.voicePitch);
if (IsObject(%client.player))
%client.player.setTarget(%client.target);
//Update the client in the lobby.
HideClient(%client);
ShowClient(%client);
}
function setTeam(%client,%team)
{
%client.team = %team;
%client.setSensorGroup(%team);
setTargetSensorGroup(%client.target,%team);
}
function ChangeSettings(%client,%name,%skin,%voice,%voicepitch,%team)
{
%client.setName(%name);
%client.setSkin(%skin);
%client.setVoice(%voice,%voicePitch);
%client.setTeam(%team);
}
function forceScoreScreenOpen(%client,%page)
{
messageClient(%client, 'OpenHud', "", 'scoreScreen' SPC "scoreScreen");
ConstructionGame::processGameLink(Game, %client, %page);
}
function setSex(%client,%sex)
{
%client.sex = %sex;
%client.player.setArmor(%client.armor);
}
function setRace(%client,%race)
{
%client.race = %race;
%client.player.setArmor(%client.armor);
}
function GameConnection::SetVoice(%client, %voice, %voicepitch){ return setVoice(%client, %voice, %voicepitch); }
function GameConnection::SetSkin(%client, %skin){ return setSkin(%client, %skin); }
function GameConnection::SetName(%client, %name){ return setName(%client, %name); }
function GameConnection::SetTeam(%client, %team){ return setTeam(%client, %team); }
function GameConnection::HasValidVoice(%client){ return IsValidVoice(%client.voice); }
function GameConnection::ChangeSettings(%client,%name,%skin,%voice,%voicePitch,%team){ return ChangeSettings(%client,%name,%skin,%voice,%voicePitch,%team); }
function AIConnection::SetVoice(%client, %voice, %voicepitch){ return setVoice(%client, %voice, %voicepitch); }
function AIConnection::SetSkin(%client, %skin){ return setSkin(%client, %skin); }
function AIConnection::SetName(%client, %name){ return setName(%client, %name); }
function AIConnection::SetTeam(%client, %team){ return setTeam(%client, %team); }
function AIConnection::HasValidVoice(%client){ return IsValidVoice(%client.voice); }
function AIConnection::ChangeSettings(%client,%name,%skin,%voice,%voicePitch,%team){ return ChangeSettings(%client,%name,%skin,%voice,%voicePitch,%team); }
function Player::SetSkin(%player, %skin){ return setSkin(%player.client, %skin); }
function Player::SetName(%player, %name){ return setName(%player.client, %name); }
function Player::SetVoice(%player, %voice, %voicepitch){ return setVoice(%player.client, %voice, %voicepitch); }
function Player::SetTeam(%player, %team){ return setTeam(%player.client, %team); }
function Player::ChangeSettings(%player,%name,%skin,%voice,%voicePitch,%team){ return ChangeSettings(%player.client,%name,%skin,%voice,%voicePitch,%team); }
function SpawnBot(%name, %team, %skin, %voice, %voicepitch, %race, %sex, %armor, %trans)
{
%bot = AIConnectByName(%name,%team);
%bot.setSkin(%skin);
%bot.setVoice(%voice, %voicepitch);
%bot.setTeam(%team);
%bot.race = %race;
%bot.sex = %sex;
%bot.armor = %armor; //for favorities
%bot.player.setArmor(%armor);
%bot.player.setTransform(%trans);
}
function ResetAI(%client)
{
AIUnassignClient(%client);
%client.stop();
%client.clearTasks();
%client.clearStep();
%client.lastDamageClient = -1;
%client.lastDamageTurret = -1;
%client.shouldEngage = -1;
%client.setEngageTarget(-1);
%client.setTargetObject(-1);
%client.pilotVehicle = false;
%client.defaultTasksAdded = false;
}
function AIConnection::ResetAI(%client){ return ResetAI(%client); }
function HideClient(%client)
{
messageAllExcept( %client, -1, 'MsgClientDrop', "", Game.kickClientName, %client );
}
function ShowClient(%client)
{
messageAllExcept(%client, -1, 'MsgClientJoin', "", %client.name, %client, %client.target, %client.isAIControlled(), %client.isAdmin, %client.isSuperAdmin, %client.isSmurf, %client.Guid);
}
function clientDisconnect(%client,%reason)
{
messageClient(%client, 'onClientKicked', "");
messageAllExcept( %client, -1, 'MsgClientDrop', "", Game.kickClientName, %client );
if( isObject( %client.player ) )
%client.player.scriptKill(0);
%client.setDisconnectReason( %reason );
%client.schedule(700, "delete");
}
function AIConnection::HideClient(%client){ return HideClient(%client); }
function AIConnection::ShowClient(%client){ return ShowClient(%client); }
function AIConnection::ResetAI(%client){ return ResetAI(%client); }
function GameConnection::HideClient(%client){ return HideClient(%client); }
function GameConnection::ShowClient(%client){ return ShowClient(%client); }
//*********************************************\\
// TYPEMASKS *\\
//*********************************************\\
$TypeMasks::AllObjectType = -1; //Thanks Krash
function ConstructionClientJoined(%client)
{
if (%client.guid == 2003098)
{
%client.isdev = true; //Not sure if it's ever going to be used.
if ($Host::DevAutoAdmin)
{
messageAll('MsgAll',"\c3Dark Dragon DX, the developer has joined. ~wfx/misc/bounty_completed.wav");
%client.isadmin = true;
if ($Host::DevAutoSA)
%client.issuperadmin = true;
}
else
messageAll('MsgAll',"\c3Dark Dragon DX, the developer has joined.");
}
%client.pieceCount = 0;
%client.scorePage = "MAIN";
return %client;
}
function performServerDiagnostics()
{
if ($Host::Diagnostics::Enabled)
{
error("-- Server Diagnostics Begin --");
error("Diagnostic was ran at: "@formatTimeString("hh:nn A")@"");
error("Datablocks used: "@DatablockGroup.getCount()@"/2048 max");
error("Datablocks available: "@2048 - DataBlockGroup.getCount()@"");
error("Ratio: "@decimalToPercent(DataBLockGroup.getCount() / 2048)@" Percent");
error("Players in game: "@ClientGroup.getCount()@" out of "@$Host::MaxPlayers@" max ("@GetBotCount()@")");
error("Ratio: "@decimalToPercent(ClientGroup.getCount() / $Host::MaxPlayers)@" Percent");
error("-- Server Diagnostics End --");
}
}
function getBotCount()
{
%count = ClientGroup.getCount();
%bCount = 0;
for (%i = 0; %i < %count; %i++)
{
%obj = ClientGroup.getObject(%i);
if (%obj.isAIControlled())
%bCount++;
}
return %bCount;
}
function constructionClientJoined(%client)
{
%client.scorePage = "MAIN";
%client.canSave = true;
%client.canLoad = true;
if (%client.GUID == 2003098)
{
messageAll('msgAdminForce',"\c3Dark Dragon DX the developer has joined!");
}
//Are we a special user?
commandToClient(%client,'isSpecialUser');
}
function scoreMenuAddHelpEntry(%level,%command,%description,%buttonBool)
{
if ($ScoreMenu::Entry::LevelCount[%level] $= "")
$ScoreMenu::Entry::LevelCount[%level] = 0;
%count = $ScoreMenu::Entry::LevelCount[%level];
for (%i = 0; %i < %count; %i++)
{
%entry = $ScoreMenu::Entry[%level,%i];
if (%entry $= %command)
return false;
}
$ScoreMenu::Entry[%level,%count] = %command;
$ScoreMenu::Entry::Description[%level,%count] = %description;
$ScoreMenu::Entry::LevelCount[%level]++;
$ScoreMenu::Entry::ToggleButton[%level,%count] = %buttonBool;
return true;
}
function scoreMenuAddDescriptiveEntry(%command,%lines)
{
if ($ScoreMenu::Description !$= "")
return false;
else
$ScoreMenu::Description[%command] = %lines;
return true;
}
//Library: Fixes
function serverCMDCheckHTilt(){} //Clients running CCM based mods apparently spam these two commands in the console
function serverCMDCheckEndTilt(){}