mirror of
https://github.com/Ragora/T2-ACCM.git
synced 2026-01-20 03:14:44 +00:00
843 lines
28 KiB
C#
843 lines
28 KiB
C#
//--------------------------------------------------
|
|
//RANKS
|
|
//--------------------------------------------------
|
|
|
|
$Ranks::MinPoints[0] = 0;
|
|
$Ranks::NewRank[0] = "Private";
|
|
$Ranks::MinPoints[1] = 250;
|
|
$Ranks::NewRank[1] = "Private First Class";
|
|
$Ranks::MinPoints[2] = 500;
|
|
$Ranks::NewRank[2] = "Corporal";
|
|
$Ranks::MinPoints[3] = 1250;
|
|
$Ranks::NewRank[3] = "Specialist";
|
|
$Ranks::MinPoints[4] = 1800;
|
|
$Ranks::NewRank[4] = "Sergeant";
|
|
$Ranks::MinPoints[5] = 2550;
|
|
$Ranks::NewRank[5] = "Staff Sergeant";
|
|
$Ranks::MinPoints[6] = 3600;
|
|
$Ranks::NewRank[6] = "Sergeant First Class";
|
|
$Ranks::MinPoints[7] = 4800;
|
|
$Ranks::NewRank[7] = "Master Sergeant";
|
|
$Ranks::MinPoints[8] = 6000;
|
|
$Ranks::NewRank[8] = "Second Lieutenant";
|
|
$Ranks::MinPoints[9] = 8500;
|
|
$Ranks::NewRank[9] = "First Lieutenant";
|
|
$Ranks::MinPoints[10] = 9750;
|
|
$Ranks::NewRank[10] = "Captain";
|
|
$Ranks::MinPoints[11] = 11000;
|
|
$Ranks::NewRank[11] = "Major";
|
|
$Ranks::MinPoints[12] = 15500;
|
|
$Ranks::NewRank[12] = "Lieutenant Colonel";
|
|
$Ranks::MinPoints[13] = 18500;
|
|
$Ranks::NewRank[13] = "Colonel";
|
|
$Ranks::MinPoints[14] = 22500;
|
|
$Ranks::NewRank[14] = "Brigadier General";
|
|
$Ranks::MinPoints[15] = 30000;
|
|
$Ranks::NewRank[15] = "Major General";
|
|
$Ranks::MinPoints[16] = 50000;
|
|
$Ranks::NewRank[16] = "Lieutenant General";
|
|
$Ranks::MinPoints[17] = 75000;
|
|
$Ranks::NewRank[17] = "General";
|
|
$Ranks::MinPoints[18] = 90000;
|
|
$Ranks::NewRank[18] = "General Of The Army";
|
|
exec( "prefs/Ranks.cs" );
|
|
exec( "prefs/Squads.cs" );
|
|
$canRecalcTop5 = 1;
|
|
|
|
function updateRankScores(%shouldloop,%clearLS){
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++){
|
|
if($Rank::numplayers $= "")
|
|
$Rank::numplayers=0;
|
|
%cl = ClientGroup.getObject(%i);
|
|
%name = %cl.NameBase;
|
|
if(%cl.lastscore $= "")
|
|
%cl.lastscore = 0;
|
|
if(%cl.ranknum $= ""){
|
|
for(%k = 0; %k < $Rank::numplayers; %k++){
|
|
if(%name $= $Rank::Name[%k]){
|
|
%cl.ranknum = %k;
|
|
%k = $Rank::numplayers - 1;
|
|
}
|
|
else if(%k >= ($Rank::numplayers - 1)){
|
|
$Rank::Name[$Rank::numplayers] = %name;
|
|
$Rank::Rank[$Rank::numplayers] = "Private";
|
|
$Rank::Score[$Rank::numplayers] = 0;
|
|
$Rank::numplayers++;
|
|
}
|
|
}
|
|
if(%k == 0 && %k == $Rank::numplayers){
|
|
$Rank::Name[$Rank::numplayers] = %name;
|
|
$Rank::Rank[$Rank::numplayers] = "Private";
|
|
$Rank::Score[$Rank::numplayers] = 0;
|
|
$Rank::numplayers++;
|
|
}
|
|
}
|
|
if($Rank::Squad[%cl.ranknum] !$= ""){
|
|
%squad = getWord($Rank::Squad[%cl.ranknum],1);
|
|
$squad::Score[%squad] = $squad::Score[%squad] + (%cl.score - %cl.lastscore);
|
|
%mem = 0;
|
|
%num = getWord($Rank::squad[%cl.ranknum],1)@%mem;
|
|
while($squad::member[%num] !$= ""){
|
|
%player = $squad::member[%num];
|
|
for(%l = 0; %l < %count; %l++){
|
|
%clt = ClientGroup.getObject(%l);
|
|
if(%clt.ranknum == %player){
|
|
$Rank::Squadscore[%player] = $Rank::Squadscore[%player] + ((%cl.score - %cl.lastscore) / 2);
|
|
$Rank::Score[%player] = $Rank::Score[%player] + ((%cl.score - %cl.lastscore) / 2);
|
|
%l = %count;
|
|
}
|
|
}
|
|
%mem++;
|
|
%num = %squad@%mem;
|
|
}
|
|
}
|
|
$Rank::Score[%cl.ranknum] = $Rank::Score[%cl.ranknum] + (%cl.score - %cl.lastscore);
|
|
%stat = $Rank::Score[%cl.ranknum];
|
|
%cl.lastscore = %cl.score;
|
|
for(%j = 18; %j > 0; %j--){
|
|
if($Rank::Score[%cl.ranknum] >= $Ranks::MinPoints[%j]){
|
|
if($Rank::Rank[%cl.ranknum] !$= $Ranks::NewRank[%j]){
|
|
$Rank::Rank[%cl.ranknum] = $Ranks::NewRank[%j];
|
|
messageAll('msgClient',"\c3"@%name@" \c2has become a\c3 "@$Ranks::NewRank[%j]@" \c2with a score of\c3 "@$Rank::Score[%cl.ranknum]@"\c2!");
|
|
bottomPrint(%cl, "Congratulations "@%name@" you have been promoted to the rank of: "@$Ranks::NewRank[%j]@"!", 5, 2 );
|
|
}
|
|
%j = 1;
|
|
}
|
|
}
|
|
if(%clearLS == 1){
|
|
%cl.lastscore = 0;
|
|
%cl.Zkills = 0;
|
|
}
|
|
}
|
|
export( "$squad::*", "prefs/Squads.cs", false );
|
|
export( "$Rank::*", "prefs/Ranks.cs", false );
|
|
if(%shouldloop == 1)
|
|
$RankUpdate = schedule(60000,0,"updateRankScores",1);
|
|
}
|
|
|
|
function ccCheckStats(%client, %args){
|
|
if(%args $= ""){
|
|
if(%client.ranknum $= ""){
|
|
messageClient(%client, 'MsgClient', "\c2Please wait a minute for your stats to load");
|
|
return;
|
|
}
|
|
%name = %client.NameBase;
|
|
%Rank = $Rank::Rank[%client.ranknum];
|
|
%Stats = $Rank::Score[%client.ranknum];
|
|
for(%i = 18; %i >= 0; %i--){
|
|
if($Rank::Score[%client.ranknum] >= $Ranks::MinPoints[%i]){
|
|
%nextrank = $Ranks::NewRank[(%i + 1)];
|
|
%nextrankscore = $Ranks::MinPoints[(%i + 1)];
|
|
%i = 0;
|
|
}
|
|
}
|
|
messageClient(%client, 'MsgClient', "\c2Your current rank is a\c3 "@%Rank@" \c2and you have a total of\c3 "@%stats@" \c2points. Your next rank is a\c3 "@%nextrank@" \c2and you need\c3 "@(%nextrankscore - %stats)@" \c2points.");
|
|
}
|
|
else{
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.nameBase $= %args){
|
|
if(%cl.ranknum $= ""){
|
|
messageClient(%client, 'MsgClient', "\c2Please wait a minute for this persons stats to load");
|
|
return;
|
|
}
|
|
%Rank = $Rank::Rank[%cl.ranknum];
|
|
%Stats = $Rank::Score[%cl.ranknum];
|
|
messageClient(%client, 'MsgClient', "\c3"@%args@"\'s \c2rank is a\c3 "@%Rank@"\c2 and his total score is: \c3"@%stats@"\c2 points.");
|
|
%i = %count;
|
|
}
|
|
else if(%i == (%count - 1))
|
|
messageClient(%client, 'MsgClient', "\c3"@%args@" \c2is not a valid player.");
|
|
}
|
|
}
|
|
}
|
|
|
|
function FindTopRanks()
|
|
{
|
|
%noabove = 1000000;
|
|
for (%i = 1; %i <= 5; %i++)
|
|
{
|
|
for (%j = 0; %j < $Rank::numplayers; %j++)
|
|
{
|
|
if (($Rank::Score[%j] >= %highest || %highest $= "") && $Rank::Score[%j] < %noabove)
|
|
{
|
|
%highest = $Rank::Score[%j];
|
|
%player = %j;
|
|
}
|
|
}
|
|
|
|
$Rank::Top[%i] = $Rank::Name[%player];
|
|
$Rank::TopScore[%i] = %highest;
|
|
%noabove = %highest;
|
|
%highest = "";
|
|
}
|
|
}
|
|
|
|
function ccTop5(%client,%args)
|
|
{
|
|
if($canrecalcTop5 == 1)
|
|
{
|
|
FindTopRanks();
|
|
$canrecalcTop5 = 0;
|
|
schedule(30000, 0, "restorerecalc");
|
|
}
|
|
messageClient(%client, 'MsgClient', "\c2Top five players are:");
|
|
|
|
if ($Rank::numplayers > 5)
|
|
{
|
|
%num = 5;
|
|
} else if ($Rank::numplayers <= 5)
|
|
%num = $Rank::numplayers;
|
|
|
|
for(%i = 1; %i <= %num; %i++)
|
|
{
|
|
messageClient(%client, 'MsgClient', "\c2"@%i@". "@$Rank::Top[%i]@" - Score: "@$Rank::TopScore[%i]@"");
|
|
}
|
|
}
|
|
|
|
function restorerecalc(){
|
|
$canreclacTop5 = 1;
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
//SQUADS
|
|
//--------------------------------------------------
|
|
|
|
function cccreatesquad(%sender, %args){
|
|
if(%sender.ranknum $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2Please wait a minute for your stats to load.');
|
|
return;
|
|
}
|
|
if($Rank::Score[%sender.ranknum] < $Rank::MinPoints[4]){
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a Sergeant rank or higher to make a squad.');
|
|
return;
|
|
}
|
|
if(%args $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2Please specify the name of new squad.');
|
|
return;
|
|
}
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(getWord(%args,0) $= $squad::Name[%i]){
|
|
messageclient(%sender, 'MsgClient', '\c2This squad already exists.');
|
|
return;
|
|
}
|
|
}
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(%sender.namebase $= $squad::Leader[%i]){
|
|
messageclient(%sender, 'MsgClient', '\c2You already have a squad, you may not create a new one.');
|
|
return;
|
|
}
|
|
if($squad::Leader[%i] $= "")
|
|
%replacable = %i;
|
|
}
|
|
if($squad::numsquads $= "")
|
|
$squad::numsquads = 0;
|
|
if(%replacable !$= ""){
|
|
$squad::Name[%replacable] = getWord(%args,0);
|
|
$squad::Leader[%replacable] = %sender.namebase;
|
|
$squad::Score[%replacable] = 0;
|
|
} else{
|
|
$squad::Name[$squad::numsquads] = getWord(%args,0);
|
|
$squad::Leader[$squad::numsquads] = %sender.namebase;
|
|
$squad::Score[$squad::numsquads] = 0;
|
|
$squad::numsquads++;
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c2Squad\c3 "@getWord(%args,0)@" \c2has been created.");
|
|
ccJoin(%sender,getWord(%args,0));
|
|
}
|
|
|
|
function ccJoin(%sender,%name){
|
|
if(%sender.ranknum $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2Please wait a minute for your stats to load.');
|
|
return;
|
|
}
|
|
if($Rank::Squad[%sender.ranknum] !$= ""){
|
|
messageClient(%client, 'MsgClient', "\c2You are already in a squad.");
|
|
return;
|
|
}
|
|
if(%name $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2You have not been invited to a squad yet.');
|
|
return;
|
|
}
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(%name $= $squad::Name[%i]){
|
|
%mem = 0;
|
|
%num = %i@%mem;
|
|
while($squad::member[%num] !$= ""){
|
|
%mem++;
|
|
%num = %i@%mem;
|
|
}
|
|
$squad::member[%num] = %sender.ranknum;
|
|
$Rank::Squad[%sender.ranknum] = %name@" "@%i;
|
|
$Rank::SquadScore[%sender.ranknum] = 0;
|
|
messageclient(%sender, 'MsgClient', "\c2You are now a part of squad\c3 "@%name@"\c2.");
|
|
return;
|
|
}
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c2Squad\c3 "@%name@" \c2dosent exist.");
|
|
}
|
|
|
|
function ccLeaveSquad(%sender,%args){
|
|
if(%sender.ranknum $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2Please wait a minute for your stats to load.');
|
|
return;
|
|
}
|
|
if($Rank::Squad[%sender.ranknum] $= ""){
|
|
messageClient(%sender, 'MsgClient', "\c2You are not currently in a squad.");
|
|
return;
|
|
}
|
|
%squad = getWord($Rank::Squad[%sender.ranknum],1);
|
|
if($squad::Leader[%squad] $= %sender.namebase){
|
|
$squad::Leader[%squad] = "";
|
|
$squad::Name[%squad] = "";
|
|
$squad::Score[%squad] = "";
|
|
%mem = 1;
|
|
%num = %squad@%mem;
|
|
while($squad::member[%num] !$= ""){
|
|
$Rank::Squad[$squad::member[%num]] = "";
|
|
$Rank::SquadScore[$squad::member[%num]] = "";
|
|
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.ranknum == $squad::member[%num])
|
|
%i = %count;
|
|
}
|
|
|
|
messageClient(%cl, 'MsgClient', "\c2Your squad has disbanned.");
|
|
$squad::member[%num] = "";
|
|
|
|
%mem++;
|
|
%num = %squad@%mem;
|
|
}
|
|
$Rank::Squad[%sender.ranknum] = "";
|
|
$Rank::SquadScore[%sender.ranknum] = "";
|
|
$squad::member[%squad@"0"] = "";
|
|
messageClient(%sender, 'MsgClient', "\c2You have disbanned your squad.");
|
|
} else {
|
|
%mem = 0;
|
|
%num = %squad@%mem;
|
|
while($squad::member[%num] !$= ""){
|
|
if(%sender.ranknum == $squad::member[%num])
|
|
%plrnum = %num;
|
|
%mem++;
|
|
%num = %squad@%mem;
|
|
}
|
|
%last = %squad@(%mem - 1);
|
|
$Rank::Squad[%sender.ranknum] = "";
|
|
$Rank::SquadScore[%sender.ranknum] = "";
|
|
if(%plrnum != %last){
|
|
$squad::member[%plrnum] = $squad::member[%last];
|
|
$squad::member[%last] = "";
|
|
}
|
|
messageClient(%sender, 'MsgClient', "\c2You have left the Squad.");
|
|
}
|
|
}
|
|
|
|
function ccInvite(%sender, %args){
|
|
if(%args $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2You must specify a player.');
|
|
return;
|
|
}
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.nameBase $= %args)
|
|
%i = %count;
|
|
else if(%i == (%count - 1)){
|
|
messageClient(%sender, 'MsgClient', "\c3"@%args@" \c2is not a valid player.");
|
|
return;
|
|
}
|
|
}
|
|
if($Rank::Squad[%cl.ranknum] !$= ""){
|
|
messageClient(%sender, 'MsgClient', "\c3"@%args@" \c2is already in a squad.");
|
|
return;
|
|
}
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(%sender.namebase $= $squad::Leader[%i]){
|
|
%cl.sqinv = $squad::Name[%i];
|
|
messageclient(%sender, 'MsgClient', "\c3"@%args@" \c2as been invited to your squad.");
|
|
messageclient(%cl, 'MsgClient', "\c2You have been invited to squad\c3 "@$squad::Name[%i]@" \c2to join, type:\c3 /Join\c2.");
|
|
return;
|
|
}
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c2You are not a squad leader and cannot invite.");
|
|
}
|
|
|
|
function ccS(%sender, %args){
|
|
if($squad::Name[getWord($Rank::Squad[%sender.ranknum],1)] $= ""){
|
|
messageclient(%sender, 'MsgClient', "\c2You are not in a squad.");
|
|
return;
|
|
}
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
%mem = 0;
|
|
%num = getWord($Rank::Squad[%sender.ranknum],1)@%mem;
|
|
while($squad::member[%num] !$= ""){
|
|
if(%cl.ranknum == $squad::member[%num] && %cl.team == %sender.team)
|
|
messageclient(%cl, 'MsgClient', "\c0[Squad Chat] \c2"@%sender.namebase@": \c3"@%args);
|
|
%mem++;
|
|
%num = getWord($Rank::Squad[%sender.ranknum],1)@%mem;
|
|
}
|
|
}
|
|
}
|
|
|
|
function ccListSquads(%client, %args){
|
|
for(%i = 0; %i < $Squad::numsquads; %i++){
|
|
messageClient(%client, 'MsgClient', "\c2SQUAD "@(%i + 1)@": \c3"@$squad::Name[%i]@" \c2SCORE: \c3"@$squad::score[%i]@"");
|
|
%temp = 0;
|
|
%num = %i@%temp;
|
|
while($squad::member[%num] !$= ""){
|
|
if(%temp == 0)
|
|
%prefix = "Leader:";
|
|
else
|
|
%prefix = "member"@(%temp + 1)@":";
|
|
messageClient(%client, 'MsgClient', "\c2"@%prefix@" \c3"@$rank::Name[$squad::member[%num]]@" \c2teamscore: \c3"@$rank::squadscore[$squad::member[%num]]@"");
|
|
%temp++;
|
|
%num = %i@%temp;
|
|
}
|
|
if((%i + 1) < $squad::numsquads)
|
|
messageClient(%client, 'MsgClient', "\c2 ");
|
|
}
|
|
}
|
|
|
|
function ccRequestInvite(%client, %args){
|
|
if(%client.ranknum $= ""){
|
|
messageClient(%client, 'MsgClient', "\c2Please wait a minute for your stats to load");
|
|
return;
|
|
}
|
|
if($rank::squad[%client.ranknum] !$= ""){
|
|
messageClient(%client, 'MsgClient', "\c2You are already in a squad.");
|
|
return;
|
|
}
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(%args $= $squad::Name[%i]){
|
|
messageclient(%sender, 'MsgClient', "\c2Request was sent to squa\c3 "@%args@"\c2.");
|
|
for(%j = 0; %j < %count; %j++){
|
|
%cl = ClientGroup.getObject(%j);
|
|
if(%cl.namebase $= $squad::Leader[%i])
|
|
messageclient(%cl, 'MsgClient', "\c3"@%client.namebase@"\c2 has requested to join your squad.");
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c2Squad\c3 "@%args@" \c2dosent exist.");
|
|
}
|
|
|
|
//--------------------------------------------------
|
|
//COMMANDS
|
|
//--------------------------------------------------
|
|
|
|
function ccO(%sender,%args){
|
|
if(%sender.ranknum $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2Please wait a minute for your stats to load.');
|
|
return;
|
|
}
|
|
if($Rank::Score[%sender.ranknum] < $Ranks::MinPoints[12]){
|
|
messageclient(%sender, 'MsgClient', '\c2You must have a General or Commander rank to give orders.');
|
|
return;
|
|
}
|
|
if(%args $= "" || getWord(%args,1) $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2You must specify the order and then the target squad.');
|
|
return;
|
|
}
|
|
if(getWord(%args,0) !$= "attack" && getWord(%args,0) !$= "defend"){
|
|
messageclient(%sender, 'MsgClient', '\c2Order must be either "attack" or "defend".');
|
|
return;
|
|
}
|
|
%order = getWord(%args,0);
|
|
%name = getWord(%args,1);
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(%name $= $squad::Name[%i]){
|
|
%check = 1;
|
|
%j = %i;
|
|
}
|
|
}
|
|
if(%check != 1){
|
|
messageclient(%sender, 'MsgClient', "\c2Squad\c3 "@%name@" \c2dosent exist.");
|
|
return;
|
|
}
|
|
%obj = %sender.getControlObject();
|
|
%eyeTrans = %obj.getEyeTransform();
|
|
%eyePos = posFromTransform(%eyeTrans);
|
|
%eyeVec = vectorScale(%obj.getEyeVector(),1000);
|
|
%searchResult = containerRayCast(%eyePos, vectorAdd(%eyeVec,%eyePos), $TypeMasks::TerrainObjectType | $TypeMasks::StaticShapeObjectType | $TypeMasks::InteriorObjectType | $TypeMasks::ForceFieldObjectType | $TypeMasks::VehicleObjectType, %obj);
|
|
if(%searchResult){
|
|
%mem = 0;
|
|
%num = %j@%mem;
|
|
while($squad::member[%num] !$= ""){
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.ranknum == $squad::member[%num] && %cl.team == %sender.team)
|
|
messageclient(%cl, 'MsgClient', "\c2A general has ordered your squad to\c3 "@%order@" \c2this location.");
|
|
}
|
|
%mem++;
|
|
%num = %j@%mem;
|
|
}
|
|
|
|
%pos = posFromRaycast(%searchResult);
|
|
%wa=new Waypoint() {
|
|
position = %pos;
|
|
rotation = "1 0 0 0";
|
|
dataBlock = "WayPointMarker";
|
|
team = %sender.team;
|
|
name = %name@" "@%order@" this position";
|
|
};
|
|
MissionCleanup.add(%wa);
|
|
|
|
%nveh = 0;
|
|
%nplr = 0;
|
|
%nTrt = 0;
|
|
%ndep = 0;
|
|
InitContainerRadiusSearch(%pos, 100, $TypeMasks::PlayerObjectType | $TypeMasks::StaticShapeObjectType | $TypeMasks::TurretObjectType | $TypeMasks::VehicleObjectType);
|
|
while ((%targetObject = containerSearchNext()) != 0){
|
|
%target = getWord(%targetObject,0);
|
|
if(%order $= "attack" && %target.team != %sender.team){
|
|
if(%target.getType() & $TypeMasks::PlayerObjectType)
|
|
%nplr++;
|
|
if(%target.getType() & $TypeMasks::StaticShapeObjectType){
|
|
%Ttype = %target.getDataBlock().className ;
|
|
if(!(%Ttype $= "wall" || %Ttype $= "wWall" || %Ttype $= "spine" || %Ttype $= "mSpine" || %Ttype $= "floor" || %Ttype$= "forcefield"))
|
|
%ndep++;
|
|
}
|
|
if(%target.getType() & $TypeMasks::TurretObjectType)
|
|
%ntrt++;
|
|
if(%target.getType() & $TypeMasks::VehicleObjectType)
|
|
%nveh++;
|
|
}
|
|
else if(%order $= "defend" && %target.team == %sender.team){
|
|
if(%target.getType() & $TypeMasks::PlayerObjectType)
|
|
%nplr++;
|
|
if(%target.getType() & $TypeMasks::StaticShapeObjectType){
|
|
%Ttype = %target.getDataBlock().className ;
|
|
if(!(%Ttype $= "wall" || %Ttype $= "wWall" || %Ttype $= "spine" || %Ttype $= "mSpine" || %Ttype $= "floor" || %Ttype$= "forcefield"))
|
|
%ndep++;
|
|
}
|
|
if(%target.getType() & $TypeMasks::TurretObjectType)
|
|
%ntrt++;
|
|
if(%target.getType() & $TypeMasks::VehicleObjectType)
|
|
%nveh++;
|
|
}
|
|
}
|
|
%numtrg = %ntrt@" "@%nplr@" "@%nveh@" "@%ndep;
|
|
%numtrgs = %ntrt + %nplr + %nveh + %ndep;
|
|
if(%numtrgs >= 3){
|
|
schedule(%numtrgs * 20000, 0, "completeCommand", %order, %name, %numtrg, %pos, %sender);
|
|
schedule(10000, 0, "commandCheckupLoop", %name, %pos, %sender, (%numtrgs * 2) - 1);
|
|
%wa.schedule(%numtrgs * 20000, "delete");
|
|
}
|
|
else{
|
|
messageclient(%sender, 'MsgClient', "\c2Please specify a location with more targets.");
|
|
%wa.schedule(100, "delete");
|
|
}
|
|
}
|
|
else
|
|
messageclient(%sender, 'MsgClient', "\c2Please specify a valid target position.");
|
|
}
|
|
|
|
function commandCheckupLoop(%name, %pos, %issuer, %LCount){
|
|
if(%LCount < 1)
|
|
return;
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(%name $= $squad::Name[%i]){
|
|
%j = %i;
|
|
}
|
|
}
|
|
%mem = 0;
|
|
%num = %j@%mem;
|
|
while($squad::member[%num] !$= ""){
|
|
%count = ClientGroup.getCount();
|
|
%player = $squad::member[%num];
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.ranknum == %player && %cl.team == %issuer.team){
|
|
%clpos = %cl.player.getPosition();
|
|
if(vectorDist(%clpos,%pos) <= 100){
|
|
bottomPrint(%cl, "\c2"@(%LCount * 10)@" seconds remain until objective is complete.", 5);
|
|
if(%cl.objectivecount $= "")
|
|
%cl.objectivecount = 0;
|
|
%cl.objectivecount++;
|
|
}
|
|
else
|
|
bottomPrint(%cl, "\c2You are to far away from the objective zone, you have "@(%LCount * 10)@" seconds left.", 5);
|
|
}
|
|
}
|
|
%mem++;
|
|
%num = %j@%mem;
|
|
}
|
|
%LCount--;
|
|
schedule(10000, 0, "commandCheckupLoop", %name, %pos, %issuer, %LCount);
|
|
}
|
|
|
|
function completeCommand(%order, %name, %numtrg, %pos, %issuer){
|
|
%oTrt = getWord(%numtrg,0);
|
|
%oplr = getWord(%numtrg,1);
|
|
%oveh = getWord(%numtrg,2);
|
|
%odep = getWord(%numtrg,3);
|
|
%nTrt = 0;
|
|
%nplr = 0;
|
|
%nveh = 0;
|
|
%ndep = 0;
|
|
InitContainerRadiusSearch(%pos, 100, $TypeMasks::PlayerObjectType | $TypeMasks::StaticShapeObjectType | $TypeMasks::TurretObjectType | $TypeMasks::VehicleObjectType);
|
|
while ((%targetObject = containerSearchNext()) != 0){
|
|
%target = getWord(%targetObject,0);
|
|
if(%order $= "attack" && %target.team != %issuer.team){
|
|
if(%target.getType() & $TypeMasks::PlayerObjectType)
|
|
%nplr++;
|
|
if(%target.getType() & $TypeMasks::StaticShapeObjectType){
|
|
%Ttype = %target.getDataBlock().className ;
|
|
if(!(%Ttype $= "wall" || %Ttype $= "wWall" || %Ttype $= "spine" || %Ttype $= "mSpine" || %Ttype $= "floor" || %Ttype$= "forcefield"))
|
|
%ndep++;
|
|
}
|
|
if(%target.getType() & $TypeMasks::TurretObjectType)
|
|
%ntrt++;
|
|
if(%target.getType() & $TypeMasks::VehicleObjectType)
|
|
%nveh++;
|
|
}
|
|
else if(%order $= "defend" && %target.team == %issuer.team){
|
|
if(%target.getType() & $TypeMasks::PlayerObjectType)
|
|
%nplr++;
|
|
if(%target.getType() & $TypeMasks::StaticShapeObjectType){
|
|
%Ttype = %target.getDataBlock().className ;
|
|
if(!(%Ttype $= "wall" || %Ttype $= "wWall" || %Ttype $= "spine" || %Ttype $= "mSpine" || %Ttype $= "floor" || %Ttype$= "forcefield"))
|
|
%ndep++;
|
|
}
|
|
if(%target.getType() & $TypeMasks::TurretObjectType)
|
|
%ntrt++;
|
|
if(%target.getType() & $TypeMasks::VehicleObjectType)
|
|
%nveh++;
|
|
}
|
|
}
|
|
%numtrg = %ntrt@" "@%nplr@" "@%nveh@" "@%ndep;
|
|
%numtrgs = %otrt + %oplr + %oveh + %odep;
|
|
%points = ((%otrt - %ntrt) * 4) +
|
|
((%oplr - %nplr) * 3) +
|
|
((%oveh - %nveh) * 2) +
|
|
((%odep - %ndep) * 2);
|
|
if(%order $= "defend"){
|
|
%startpoints = (%otrt * 8) + (%oplr * 6) + (%oveh * 4) + (%odep * 4);
|
|
%points = %startpoints - %points;
|
|
%percentRemaining = ((%ntrt + %nplr + %nveh + %ndep) / (%otrt + %oplr + %oveh + %odep)) * 100;
|
|
if(%percentRemaining >= 75){
|
|
%status = "success";
|
|
%points = %points + (15 * (%percentRemaining / 100) * %numtrgs);
|
|
%recomend = "keep up the good work!";
|
|
}
|
|
else{
|
|
%status = "failure";
|
|
%points = %points - (7.5 * ((100 - %percentRemaining) / 100) * %numtrgs);
|
|
%recomend = "try harder next time.";
|
|
}
|
|
}
|
|
else{
|
|
%percentRemaining = ((%ntrt + %nplr + %nveh + %ndep) / (%otrt + %oplr + %oveh + %odep)) * 100;
|
|
if(%percentRemaining <= 50){
|
|
%status = "success";
|
|
%points = %points + (20 * ((100 - %percentRemaining) / 100) * %numtrgs);
|
|
%recomend = "keep up the good work!";
|
|
}
|
|
else{
|
|
%status = "failure";
|
|
%points = %points - (10 * (%percentRemaining / 100) * %numtrgs);
|
|
%recomend = "try harder next time.";
|
|
}
|
|
}
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(%name $= $squad::Name[%i]){
|
|
%j = %i;
|
|
}
|
|
}
|
|
%mem = 0;
|
|
%num = %j@%mem;
|
|
while($squad::member[%num] !$= ""){
|
|
%count = ClientGroup.getCount();
|
|
%player = $squad::member[%num];
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.ranknum == %player && %cl.team == %issuer.team){
|
|
%clpos = %cl.player.getPosition();
|
|
if((vectorDist(%clpos,%pos) <= 50 && %order $= "attack") || %cl.objectivecount >= (%numtrgs - 1) * 1.5){
|
|
messageclient(%cl, 'MsgClient', "\c2Your Objective was deemed a "@%status@" and you were given "@%points@" for this objective. You should "@%recomend);
|
|
$Rank::Squadscore[%player] = $Rank::Squadscore[%player] + %points;
|
|
$Rank::Score[%player] = $Rank::Score[%player] + %points;
|
|
}
|
|
else{
|
|
messageclient(%cl, 'MsgClient', "\c2You were to far away from the objective marker. "@(3 * %numtrgs)@" points were deducted from your score.");
|
|
$Rank::Squadscore[%player] = $Rank::Squadscore[%player] - (4 * %numtrgs);
|
|
$Rank::Score[%player] = $Rank::Score[%player] - (3 * %numtrgs);
|
|
}
|
|
%cl.objectivecount = 0;
|
|
}
|
|
}
|
|
%mem++;
|
|
%num = %j@%mem;
|
|
}
|
|
}
|
|
|
|
//--------------------------------------
|
|
//Force Capabilitys
|
|
//--------------------------------------
|
|
|
|
function ccforce(%sender, %args){
|
|
if(%sender.ranknum $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2Please wait a minute for your stats to load.');
|
|
return;
|
|
}
|
|
if($Rank::Score[%sender.ranknum] < $Ranks::MinPoints[8]){
|
|
messageclient(%sender, 'MsgClient', '\c2You are not high enough rank to force players.');
|
|
return;
|
|
}
|
|
if(%args $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2You must specify what you are forcing, "join" or "leave".');
|
|
return;
|
|
}
|
|
%cmd = getWord(%args, 0);
|
|
if(%cmd $= "join"){
|
|
%squad = getWord(%args, 1);
|
|
%target = getWords(%args, 2, 1 + getNumberOfWords(%args));
|
|
if(%squad $= "" || %target $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2You must specify the squad name and then player name for this to work.');
|
|
return;
|
|
}
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.namebase $= %target)
|
|
%i = %count;
|
|
else if(%i == (%count - 1)){
|
|
messageClient(%sender, 'MsgClient', "\c2"@%target@" is not a valid player.");
|
|
return;
|
|
}
|
|
}
|
|
if($Rank::Score[%cl.ranknum] >= $Ranks::MinPoints[8] && !($Rank::Score[%cl.ranknum] < $Ranks::MinPoints[14] && $Rank::Score[%sender.ranknum] >= $Ranks::MinPoints[14])){
|
|
messageclient(%sender, 'MsgClient', '\c2You may not force this player, he has too high of a rank.');
|
|
return;
|
|
}
|
|
for(%i = 0; %i < $squad::numsquads; %i++){
|
|
if(%squad $= $squad::Name[%i]){
|
|
if($Rank::Squad[%cl.ranknum] !$= ""){
|
|
messageclient(%cl, 'MsgClient', '\c2Higher Rank forced:');
|
|
ccLeaveSquad(%cl,"");
|
|
messageclient(%cl, 'MsgClient', '\c2 ');
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c3"@%target@" \c2has joined squad\c3 "@%squad@"\c2.");
|
|
messageclient(%cl, 'MsgClient', '\c2Higher Rank forced:');
|
|
ccJoin(%cl, %squad);
|
|
return;
|
|
}
|
|
if($squad::Leader[%i] $= "")
|
|
%replacable = %i;
|
|
}
|
|
|
|
if($squad::numsquads $= "")
|
|
$squad::numsquads = 0;
|
|
if(%replacable !$= ""){
|
|
$squad::Name[%replacable] = %squad;
|
|
$squad::Leader[%replacable] = %cl.namebase;
|
|
$squad::Score[%replacable] = 0;
|
|
} else{
|
|
$squad::Name[$squad::numsquads] = %squad;
|
|
$squad::Leader[$squad::numsquads] = %cl.namebase;
|
|
$squad::Score[$squad::numsquads] = 0;
|
|
$squad::numsquads++;
|
|
}
|
|
messageclient(%sender, 'MsgClient', "\c2Squad\c3 "@%squad@" \c2has been created with\c3 "@%target@" \c2as leader.");
|
|
if($Rank::Squad[%cl.ranknum] !$= ""){
|
|
messageclient(%cl, 'MsgClient', '\c2Higher Rank forced:');
|
|
ccLeaveSquad(%cl,"");
|
|
messageclient(%cl, 'MsgClient', '\c2 ');
|
|
}
|
|
messageclient(%cl, 'MsgClient', '\c2Higher Rank forced:');
|
|
ccJoin(%cl, %squad);
|
|
|
|
}
|
|
else if(%cmd $= "leave"){
|
|
%target = getWords(%args, 1, getNumberOfWords(%args) - 1);
|
|
echo(getNumberOfWords(%args));
|
|
echo(%target);
|
|
if(%target $= ""){
|
|
messageclient(%sender, 'MsgClient', '\c2You must specify the person you are forcing.');
|
|
return;
|
|
}
|
|
%count = ClientGroup.getCount();
|
|
for(%i = 0; %i < %count; %i++){
|
|
%cl = ClientGroup.getObject(%i);
|
|
if(%cl.namebase $= %target)
|
|
%i = %count;
|
|
else if(%i == (%count - 1)){
|
|
messageClient(%client, 'MsgClient', "\c3"@%target@" \c2is not a valid player.");
|
|
return;
|
|
}
|
|
}
|
|
if($Rank::Score[%cl.ranknum] >= $Ranks::MinPoints[8] && !($Rank::Score[%cl.ranknum] < $Ranks::MinPoints[14] && $Rank::Score[%sender.ranknum] >= $Ranks::MinPoints[14])){
|
|
messageclient(%sender, 'MsgClient', '\c2You may not force this player, he has too high of a rank.');
|
|
return;
|
|
}
|
|
if($Rank::Squad[%cl.ranknum] !$= ""){
|
|
messageclient(%cl, 'MsgClient', '\c2Higher Rank forced:');
|
|
ccLeaveSquad(%cl,"");
|
|
messageclient(%sender, 'MsgClient', '\c3'@%target@' \c2has been forced out of his squad.');
|
|
}
|
|
else
|
|
messageclient(%sender, 'MsgClient', '\c2This person does not have a squad to leave.');
|
|
}
|
|
else
|
|
messageclient(%sender, 'MsgClient', '\c2Please use "Join" or "leave" as command.');
|
|
}
|
|
|
|
//--------------------------------------
|
|
//Misc
|
|
//--------------------------------------
|
|
|
|
function cleanRanks(){
|
|
for(%i = 0; %i < $Rank::numplayers; %i++){
|
|
if($Rank::Score[%i] <= 10){
|
|
$Rank::Score[%i] = "";
|
|
$Rank::Name[%i] = "";
|
|
$Rank::Rank[%i] = "";
|
|
}
|
|
}
|
|
for(%i = 0; %i < $Rank::numplayers; %i++){
|
|
if($Rank::Score[%i] $= ""){
|
|
%replacenum = $Rank::numplayers;
|
|
while($Rank::Score[%replacenum] $= ""){
|
|
%replacenum--;
|
|
}
|
|
if(%i > %replacenum){
|
|
$Rank::numplayers = %i;
|
|
return;
|
|
}
|
|
$Rank::Score[%i] = $Rank::Score[%replacenum];
|
|
$Rank::Name[%i] = $Rank::Name[%replacenum];
|
|
$Rank::Rank[%i] = $Rank::Rank[%replacenum];
|
|
$Rank::Score[%replacenum] = "";
|
|
$Rank::Name[%replacenum] = "";
|
|
$Rank::Rank[%replacenum] = "";
|
|
}
|
|
}
|
|
}
|
|
|
|
function ccSOL(%sender, %args){
|
|
if(%sender.spawnOnLead $= "" || %sender.spawnOnLead == 0){
|
|
%sender.spawnOnLead = 1;
|
|
messageclient(%sender, 'MsgClient', '\c2You will now spawn on your squad leader.');
|
|
} else {
|
|
%sender.spawnOnLead = 0;
|
|
messageclient(%sender, 'MsgClient', '\c2You will no longer spawn on your squad leader.');
|
|
}
|
|
}
|
|
|
|
function getNumberOfWords(%path){
|
|
%number = 0;
|
|
for(%i = 0; %i < 1000; %i++){
|
|
if(getWord(%path,%i) !$= "")
|
|
%number++;
|
|
else
|
|
return %number;
|
|
}
|
|
}
|