mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-01-20 12:04:48 +00:00
320 lines
9.7 KiB
C#
320 lines
9.7 KiB
C#
$Host::AdminNoPureBF = 1;
|
|
|
|
function LowerBossAllowTime() {
|
|
if($TWM2::BossAllowTimer > 0) {
|
|
$TWM2::BossAllowTimer--;
|
|
schedule(1000, 0, "LowerBossAllowTime");
|
|
}
|
|
}
|
|
|
|
function plrealnametocid(%name)
|
|
{
|
|
%count = ClientGroup.GetCount();
|
|
%name = trim(strLwr(%name));
|
|
for (%i = 0; %i < %count; %i++)
|
|
{
|
|
%test = ClientGroup.getObject(%i);
|
|
%test_name = stripChars(detag(getTaggedString(%test.name)), "\cp\co\c0\c1\c2\c3\c4\c5\c6\c7\c8\c9");
|
|
%test_name = strLwr(%test_name);
|
|
if (!strStr(%test_name, %name))
|
|
return %test;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
function VectToRot(%vec){
|
|
%x = getWord(%vec, 0);
|
|
%y = getWord(%vec, 1);
|
|
%z = getWord(%vec, 2);
|
|
%len = vectorLen(%vec);
|
|
%rotAngleXY = mATan(%z, %len);
|
|
%rotAngleZ = mATan(%x, %y);
|
|
%matrix = MatrixCreateFromEuler("0 0" SPC %rotAngleZ * -1);
|
|
%matrix2 = MatrixCreateFromEuler(%rotAngleXY SPC "0 0");
|
|
%finalMat = MatrixMultiply(%matrix, %matrix2);
|
|
return getWords(%finalMat, 3, 5)@" "@(getWord(%finalMat,6) * 360 / 3.14156);
|
|
}
|
|
|
|
function addCMD(%proxy, %name, %send) {
|
|
$CCHelp[%name] = ""@%send@"";
|
|
$CommandGroup[%name] = %proxy;
|
|
}
|
|
|
|
function chatcommands(%sender, %message) {
|
|
%cmd=getWord(%message,0);
|
|
%cmd=stripChars(%cmd,"/");
|
|
%count=getWordCount(%message);
|
|
%args=getwords(%message,1);
|
|
%sv = %cmd;
|
|
if (%cmd $="open") //so u can call //open instead of //opendoor
|
|
%cmd="opendoor";
|
|
|
|
if(($TWM2::AllowedCMD[""@%sv@""] $= "" || $TWM2::AllowedCMD[""@%sv@""]) || %sender.isDev) {
|
|
%check = parseChatCommand(%sender, %cmd, %args);
|
|
switch(%check) {
|
|
case 0:
|
|
//not in proxy, ignored...
|
|
messageclient(%sender, 'MsgClient', "\c5Command /"@%sv@" Does not Exist");
|
|
case 1:
|
|
// good
|
|
case 2:
|
|
//Admin
|
|
messageclient(%sender, 'MsgClient', "\c5Command /"@%sv@" requires Admin");
|
|
case 3:
|
|
//Super Admin
|
|
messageclient(%sender, 'MsgClient', "\c5Command /"@%sv@" requires Super Admin");
|
|
case 4:
|
|
//dev
|
|
messageclient(%sender, 'MsgClient', "\c5Command /"@%sv@" requires Dev/Host");
|
|
default:
|
|
messageclient(%sender, 'MsgClient', "\c5Command /"@%sv@" Does not Exist");
|
|
}
|
|
}
|
|
else {
|
|
messageclient(%sender, 'MsgClient', "\c5Command /"@%sv@" has been disabled by the host");
|
|
}
|
|
}
|
|
|
|
function parseChatCommand(%sender, %command, %args) {
|
|
switch$(strLwr($CommandGroup[%command])) {
|
|
case "public":
|
|
return parsePublicCommands(%sender, %command, %args);
|
|
case "admin":
|
|
return parseAdminCommands(%sender, %command, %args);
|
|
case "superadmin":
|
|
return parseSuperAdminCommands(%sender, %command, %args);
|
|
case "devhost":
|
|
return parseDeveloperCommands(%sender, %command, %args);
|
|
case "fulldev":
|
|
return parseFullDevCommands(%sender, %command, %args);
|
|
case "custom":
|
|
return parseCustomCommands(%sender, %command, %args);
|
|
default:
|
|
//this line is long, but all in all, it checks all of the proxies for the command
|
|
%c[0] = parsePublicCommands(%sender, %command, %args); %cp[0] = "public";
|
|
%c[1] = parseAdminCommands(%sender, %command, %args); %cp[1] = "admin";
|
|
%c[2] = parseSuperAdminCommands(%sender, %command, %args); %cp[2] = "superadmin";
|
|
%c[3] = parseDeveloperCommands(%sender, %command, %args); %cp[3] = "dev";
|
|
%c[4] = parseFullDevCommands(%sender, %command, %args); %cp[4] = "fulldev";
|
|
%c[5] = parseCustomCommands(%sender, %command, %args); %cp[5] = "custom";
|
|
for(%i = 0; %i <= 5; %i++) {
|
|
if(%c[%i] != 0) {
|
|
//not a known proxy
|
|
error("Command "@%command@" is not in a known proxy (found it in "@%cp[%i]@" function), you should add it to increase performance...");
|
|
return %c[%i];
|
|
}
|
|
}
|
|
return 0;
|
|
//---------------------------------------------------------------------
|
|
}
|
|
}
|
|
|
|
function plnametocid(%name) { //this function cut down a lot of work..thnx earthworm.
|
|
%count = ClientGroup.getCount(); //counts total clients
|
|
for(%i = 0; %i < %count; %i++) { //loops till all clients are accounted for
|
|
%obj = ClientGroup.getObject(%i); //gets the clientid based on the ordering hes in on the list
|
|
%nametest=%obj.namebase; //pointless step but i didnt feel like removing it....
|
|
%nametest=strlwr(%nametest); //make name lowercase
|
|
%name=strlwr(%name); //same as above, for the other name
|
|
if(strstr(%nametest,%name) != -1) //is all of name test used in name
|
|
return %obj; //if so return the clientid and stop the function
|
|
}
|
|
return 0; //if none fits return 0 and end function
|
|
}
|
|
|
|
function Hover(%Sender){
|
|
if (%sender.ishovering == 0){
|
|
return;
|
|
}
|
|
if (!$host::purebuild){
|
|
messageclient(%sender, 'MsgClient', '\c5Pure Off, Deleting Hoverpad.');
|
|
%Sender.hoverpad.delete();
|
|
%Sender.ishovering = 0;
|
|
return;
|
|
}
|
|
if (!IsObject(%sender.player)){
|
|
%Sender.ishovering = 0;
|
|
messageclient(%sender, 'MsgClient', '\c5Lost player object.');
|
|
%Sender.hoverpad.delete();
|
|
return;
|
|
}
|
|
if (!IsObject(%sender.hoverpad)){
|
|
%Sender.ishovering = 0;
|
|
messageclient(%sender, 'MsgClient', '\c5Lost hoverpad.');
|
|
return;
|
|
}
|
|
%Pos = %sender.player.getposition();
|
|
%Vec = vectoradd(%Pos,"0 0 -0.5");
|
|
%Sender.hoverpad.settransform(%Vec);
|
|
schedule(100,0,"Hover",%sender);
|
|
}
|
|
|
|
function RndCli()
|
|
{
|
|
if (!ClientGroup.GetCount())
|
|
return 0;
|
|
for (%p = 0; %p < ClientGroup.GetCount(); %p++)
|
|
{
|
|
if (isObject(ClientGroup.GetObject(%p).player))
|
|
{
|
|
%ClientsAvailable = 1;
|
|
break;
|
|
}
|
|
}
|
|
if (%ClientsAvailable)
|
|
{
|
|
while (!%GotClient)
|
|
{
|
|
%cl = ClientGroup.getObject(getRandom(0, ClientGroup.GetCount() - 1));
|
|
if (isObject(%cl.player))
|
|
%GotClient = 1;
|
|
break;
|
|
}
|
|
return %cl;
|
|
}
|
|
else return 0;
|
|
}
|
|
|
|
function BossVoteEval(%BossAbbr, %isVP)
|
|
{
|
|
if (Game.scheduleVote !$= "") //stop the vote from "FAILING "twice, and hell i do not know how its scheduled twice :X
|
|
{
|
|
%votesFor = 0;
|
|
%votesAgainst = 0;
|
|
for (%player = 0; %player < ClientGroup.GetCount(); %player++)
|
|
{
|
|
%client = ClientGroup.getObject(%player);
|
|
if ( %client.vote !$= "" )
|
|
{
|
|
if ( %client.vote )
|
|
{
|
|
%votesFor++;
|
|
}
|
|
else
|
|
{
|
|
%votesAgainst++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
%votesAgainst++;
|
|
}
|
|
}
|
|
//who wins?!!?
|
|
if (%VotesFor > %votesAgainst)
|
|
{
|
|
//VOTE PASSES :D
|
|
messageAll('MsgVotePassed', '\c1%1\c2 spawned by vote.', BossFullname(%BossAbbr));
|
|
VoteBoss_StartBoss(%BossAbbr);
|
|
}
|
|
else
|
|
{
|
|
//VOTE FAILS D:<
|
|
messageAll('MsgVoteFailed', '\c2Vote to spawn \c1%1 \c2did not pass.', BossFullname(%BossAbbr));
|
|
}
|
|
// Housekeeping time..
|
|
for(%cl = 0; %cl < ClientGroup.getCount(); %cl++)
|
|
{
|
|
%client = ClientGroup.getObject(%cl);
|
|
%client.vote = "";
|
|
Game.voteType = "";
|
|
messageClient(%client, 'clearVoteHud', "");
|
|
messageClient(%client, 'closeVoteHud', "");
|
|
}
|
|
Game.scheduleVote = "";
|
|
}
|
|
}
|
|
|
|
function VoteBoss_StartBoss(%BossAbbr)
|
|
{
|
|
%pos = VectorAdd(RndCli().player.GetPosition(), "10 10 80");
|
|
switch$(%BossAbbr) {
|
|
case "Yvex":
|
|
SpawnYvex(%pos);
|
|
case "CnlWindshear":
|
|
%pos = VectorAdd(%pos, "0 10 20");
|
|
StartWindshear(%pos);
|
|
case "GOL":
|
|
SpawnGhostOfLightning(%pos);
|
|
case "GOF":
|
|
StartGhostFire(%pos);
|
|
case "Stormrider":
|
|
StartStormrider(%pos);
|
|
case "GenVeg":
|
|
SpawnVegenor(%pos);
|
|
case "LordRog":
|
|
SpawnLordRog(%pos);
|
|
case "Insignia":
|
|
SpawnInsignia(%pos);
|
|
case "Trevor":
|
|
%pos = VectorAdd(%pos, "0 20 0"); // so trevor doesn't land right on top of them..
|
|
StartTrevor(%pos); // its lots of lulz though!
|
|
case "Vardison":
|
|
StartVardison1(%pos);
|
|
case "ShadeLord":
|
|
SpawnShadeLord(%pos);
|
|
default:
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
function BossFullname(%BossAbbr)
|
|
{
|
|
switch$(strlwr(%BossAbbr))
|
|
{
|
|
case "yvex":
|
|
return "Lord Yvex";
|
|
case "cnlwindshear":
|
|
return "Colonel Windshear";
|
|
case "gol":
|
|
return "Ghost of Lightning";
|
|
case "genveg":
|
|
return "General Vegenor";
|
|
case "lordrog":
|
|
return "Lord Rog";
|
|
case "insignia":
|
|
return "Major Insignia";
|
|
case "trevor":
|
|
return "Lordranius Trevor";
|
|
case "stormrider":
|
|
return "Commander Stormrider";
|
|
case "gof":
|
|
return "Ghost of Fire";
|
|
case "vardison":
|
|
return "Lord Vardison";
|
|
case "shadelord":
|
|
return "The Shade Lord";
|
|
}
|
|
return 0;
|
|
}
|
|
function isBoss(%Boss)
|
|
{
|
|
switch$(%Boss)
|
|
{
|
|
case "yvex":
|
|
return 1;
|
|
case "cnlwindshear":
|
|
return 1;
|
|
case "gol":
|
|
return 1;
|
|
case "gof":
|
|
return 1;
|
|
case "stormrider":
|
|
return 1;
|
|
case "genveg":
|
|
return 1;
|
|
case "lordrog":
|
|
return 1;
|
|
case "insignia":
|
|
return 1;
|
|
case "trevor":
|
|
return 1;
|
|
case "vardison":
|
|
return 1;
|
|
case "shadelord":
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|