Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Mocha

Pages: 1 2 3 4 [5]
61
-snip-

62
Modification Help / Re: [CODE/REFERENCE] serverCmdMessageSent
« on: February 07, 2017, 05:42:12 AM »

registerInputEvent + registerOutputEvent

function registerOutputEvent(%class, %name, %parameterList, %appendClient)
{
if (%appendClient $= "")
{
%appendClient = 1;
}
$OutputEvent_Count[%class] = mFloor($OutputEvent_Count[%class]);
%i = 0;
while(%i < $OutputEvent_Count[%class])
{
if ($OutputEvent_Name[%class,%i] $= %name)
{
echo("registerOutputEvent() - Output event " @ %name @ " already registered on class " @ %class @ " - overwriting.");
$OutputEvent_Name[%class,%i] = %name;
$OutputEvent_parameterList[%class,%i] = %parameterList;
verifyOutputParameterList(%class, %i);
$OutputEvent_AppendClient[%class,%i] = mFloor(%appendClient);
return;
}
%i = %i + 1.0;
}
%i = mFloor($OutputEvent_Count[%class]);
$OutputEvent_Name[%class,%i] = %name;
$OutputEvent_parameterList[%class,%i] = %parameterList;
verifyOutputParameterList(%class, %i);
$OutputEvent_AppendClient[%class,%i] = mFloor(%appendClient);
$OutputEvent_Count[%class] = $OutputEvent_Count[%class] + 1.0;
if (strstr($OutputEvent_ClassList, %class) == -1.0)
{
if ($OutputEvent_ClassList $= "")
{
$OutputEvent_ClassList = %class;
}
else
{
$OutputEvent_ClassList = $OutputEvent_ClassList @ %class;
}
}
}

function registerInputEvent(%class, %name, %targetList, %adminOnly)
{
%adminOnly = mFloor(%adminOnly);
$InputEvent_Count[%class] = mFloor($InputEvent_Count[%class]);
%i = 0;
while(%i < $InputEvent_Count[%class])
{
if ($InputEvent_Name[%class,%i] $= %name)
{
$InputEvent_Name[%class,%i] = %name;
$InputEvent_TargetList[%class,%i] = %targetList;
$InputEvent_AdminOnly[%class,%i] = %adminOnly;
return;
}
%i = %i + 1.0;
}
%i = mFloor($InputEvent_Count[%class]);
$InputEvent_Name[%class,%i] = %name;
$InputEvent_TargetList[%class,%i] = %targetList;
$InputEvent_AdminOnly[%class,%i] = %adminOnly;
$InputEvent_Count[%class] = $InputEvent_Count[%class] + 1.0;
if (strstr($InputEvent_ClassList, %class) == -1.0)
{
if ($InputEvent_ClassList $= "")
{
$InputEvent_ClassList = %class;
}
else
{
$InputEvent_ClassList = $InputEvent_ClassList @ %class;
}
}
}



serverCmdMessageSent

function serverCmdMessageSent(%client, %text)
{
   %trimText = trim(%text);
   if (%client.lastChatText $= %trimText)
   {
      %chatDelta = (getSimTime() - %client.lastChatTime) / getTimeScale();
      if (%chatDelta < 15000.0)
      {
         %client.spamMessageCount = $SPAM_MESSAGE_THRESHOLD;
         messageClient(%client, '', '\c4Do not repeat yourself.');
      }
   }
   %client.lastChatTime = getSimTime();
   %client.lastChatText = %trimText;
   %player = %client.Player;
   if (isObject(%player))
   {
      %player.playThread(3, talk);
      %player.schedule(strlen(%text) * 50.0, playThread, 3, root);
   }
   %text = chatWhiteListFilter(%text);
   %text = StripMLControlChars(%text);
   %text = trim(%text);
   if (strlen(%text) <= 0.0)
   {
      return;
   }
   if ($Pref::Server::MaxChatLen > 0.0)
   {
      if (strlen(%text) >= $Pref::Server::MaxChatLen)
      {
         %text = getSubStr(%text, 0, $Pref::Server::MaxChatLen);
      }
   }
   %protocol = "http://";
   %protocolLen = strlen(%protocol);
   %urlStart = strpos(%text, %protocol);
   if (%urlStart == -1.0)
   {
      %protocol = "https://";
      %protocolLen = strlen(%protocol);
      %urlStart = strpos(%text, %protocol);
   }
   if (%urlStart == -1.0)
   {
      %protocol = "ftp://";
      %protocolLen = strlen(%protocol);
      %urlStart = strpos(%text, %protocol);
   }
   if (%urlStart != -1.0)
   {
      %urlEnd = strpos(%text, " ", %urlStart + 1.0);
      %skipProtocol = 0;
      if (%protocol $= "http://")
      {
         %skipProtocol = 1;
      }
      if (%urlEnd == -1.0)
      {
         %fullUrl = getSubStr(%text, %urlStart, strlen(%text) - %urlStart);
         %url = getSubStr(%text, %urlStart + %protocolLen, strlen(%text) - %urlStart - %protocolLen);
      }
      else
      {
         %fullUrl = getSubStr(%text, %urlStart, %urlEnd - %urlStart);
         %url = getSubStr(%text, %urlStart + %protocolLen, %urlEnd - %urlStart - %protocolLen);
      }
      if (strlen(%url) > 0.0)
      {
         %url = strreplace(%url, "<", "");
         %url = strreplace(%url, ">", "");
         if (%skipProtocol)
         {
            %newText = strreplace(%text, %fullUrl, "<a:" @ %url @ ">" @ %url @ "</a>\c6");
         }
         else
         {
            %newText = strreplace(%text, %fullUrl, "<a:" @ %protocol @ %url @ ">" @ %url @ "</a>\c6");
         }
         echo(%newText);
         %text = %newText;
      }
   }
   if ($Pref::Server::ETardFilter)
   {
      if (!chatFilter(%client, %text, $Pref::Server::ETardList, '\c4This is a civilized game.  Please use full words.'))
      {
         return;
      }
   }
   chatMessageAll(%client, '\c7%1\c3%2\c7%3\c6: %4', %client.clanPrefix, %client.getPlayerName(), %client.clanSuffix, %text);
   echo(%client.getSimpleName(), ": ", %text);
}


QueueSO (Fixed)
function New_QueueSO(%size)
{
if (%size <= 1.0 || %size > 10000.0)
{
error("ERROR: New_QueueSO() - invalid size \'" @ %size @ "\'");
return;
}
%ret = new ScriptObject(""){
class = QueueSO;
size = %size;
head = 0;
tail = 0;
};
MissionCleanup.add(%ret);
%i = 0;
while(%i < %size)
{
%ret.val[%i] = 0;
%i = %i + 1.0;
}
return %ret;
}

function QueueSO::push(%obj, %val)
{
%obj.val[%obj.head] = %val;
%obj.head = (%obj.size % (%obj.head + 1.0));
%obj.val[%obj.head] = 0;
if (%obj.head == %obj.tail)
{
%obj.tail = (%obj.size % (%obj.tail + 1.0));
return;
}
}

function QueueSO::pop(%obj)
{
if (%obj.head != %obj.tail)
{
%obj.head = %obj.head - 1.0;
if (%obj.head < 0.0)
{
%obj.head = %obj.size - 1.0;
}
%ret = %obj.val[%obj.head];
%obj.val[%obj.head] = 0;
return %ret;
}
else
{
return 0;
}
}

function QueueSO::dumpVals(%obj)
{
%i = 0;
while(%i < %obj.size)
{
%line = %i @ ": " @ %obj.val[%i];
if (%obj.head == %i)
{
%line = %line @ " <Head";
}
if (%obj.tail == %i)
{
%line = %line @ " <Tail";
}
echo(%line);
%i = %i + 1.0;
}
}


BanManagerSO + getCurrentYear + getCurrentMinuteOfYear + getLongNumberString



function CreateBanManager()
{
   if (isObject($BanManagerSO))
   {
      $BanManagerSO.delete();
   }
   $BanManagerSO = new ScriptObject(BanManagerSO){
   numBans = 0;
   };
   $BanManagerSO.loadBans();
}

function BanManagerSO::addBan(%this, %adminID, %victimID, %victimBL_ID, %reason, %banTime)
{
   if (%victimBL_ID == 0.0)
   {
      return;
   }
   %this.RemoveBanBL_ID(%victimBL_ID);
   if (isObject(%adminID))
   {
      %adminName = %adminID.getPlayerName();
      %adminBL_ID = %adminID.getBLID();
   }
   else
   {
      %adminName = "CONSOLE";
      %adminBL_ID = -1.0;
   }
   if (isObject(%victimID))
   {
      %victimName = %victimID.getPlayerName();
   }
   else
   {
      %brickGroup = "BrickGroup_" @ %victimBL_ID;
      if (isObject(%brickGroup))
      {
         %victimName = %brickGroup.name;
      }
   }
   if (isObject(%victimID))
   {
      %victimIP = %victimID.getRawIP();
   }
   else
   {
      %victimIP = "";
   }
   %banOverYear = 0;
   %banOverTime = 0;
   if (%banTime == -1.0)
   {
      %banOverYear = -1.0;
      %banOverTime = -1.0;
   }
   else
   {
      %currTime = getCurrentMinuteOfYear();
      %banOverYear = getCurrentYear();
      %banOverTime = %currTime + %banTime;
      if (%banOverTime > 525600.0)
      {
         %banOverYear = %banOverYear + 1.0;
         %banOverTime = %banOverTime - 525600.0;
      }
   }
   %i = %this.numBans;
   %this.adminName[%i] = %adminName;
   %this.adminBL_ID[%i] = %adminBL_ID;
   %this.victimName[%i] = %victimName;
   %this.victimBL_ID[%i] = %victimBL_ID;
   %this.victimIP[%i] = %victimIP;
   %this.Reason[%i] = %reason;
   %this.expirationYear[%i] = %banOverYear;
   %this.expirationMinute[%i] = %banOverTime;
   %this.numBans = %this.numBans + 1.0;
}

function BanManagerSO::RemoveBanBL_ID(%this, %testBL_ID)
{
   %i = 0;
   while(%i < %this.numBans)
   {
      if (%this.victimBL_ID[%i] == %testBL_ID)
      {
         %this.removeBan(%i);
         return;
      }
      %i = %i + 1.0;
   }
}

function BanManagerSO::removeBan(%this, %idx)
{
   if (%this.numBans <= %idx)
   {
      error("ERROR: BanManagerSO::RemoveBan() - ban index " @ %idx @ " does not exist. (there are only " @ %this.numBans @ " bans)");
      return;
   }
   %i = %idx + 1.0;
   while(%i < %this.numBans)
   {
      %this.adminName[%i - 1.0] = %this.adminName[%i];
      %this.adminBL_ID[%i - 1.0] = %this.adminBL_ID[%i];
      %this.victimName[%i - 1.0] = %this.victimName[%i];
      %this.victimBL_ID[%i - 1.0] = %this.victimBL_ID[%i];
      %this.victimIP[%i - 1.0] = %this.victimIP[%i];
      %this.Reason[%i - 1.0] = %this.Reason[%i];
      %this.expirationYear[%i - 1.0] = %this.expirationYear[%i];
      %this.expirationMinute[%i - 1.0] = %this.expirationMinute[%i];
      %i = %i + 1.0;
   }
   %i = %this.numBans;
   %this.adminName[%i] = "";
   %this.adminBL_ID[%i] = "";
   %this.victimName[%i] = "";
   %this.victimBL_ID[%i] = "";
   %this.victimIP[%i] = "";
   %this.Reason[%i] = "";
   %this.expirationYear[%i] = "";
   %this.expirationMinute[%i] = "";
   %this.numBans = %this.numBans - 1.0;
}

function BanManagerSO::saveBans(%this)
{
   %file = new FileObject(""){
   };
   %file.openForWrite("config/server/BANLIST.txt");
   %i = 0;
   while(%i < %this.numBans)
   {
      %doLine = 1;
      if (%this.expirationMinute > 0.0)
      {
         %timeLeft = %this.expirationMinute[%i] - getCurrentMinuteOfYear();
         %timeLeft = %timeLeft + (%this.expirationYear[%i] - getCurrentYear()) * 525600.0;
         if (%timeLeft <= 0.0)
         {
            %doLine = 0;
         }
      }
      if (%doLine)
      {
         %line = %this.adminName[%i];
         %line = %line TAB %this.adminBL_ID[%i];
         %line = %line TAB %this.victimName[%i];
         %line = %line TAB %this.victimBL_ID[%i];
         %line = %line TAB %this.victimIP[%i];
         %line = %line TAB %this.Reason[%i];
         %line = %line TAB %this.expirationYear[%i];
         %line = %line TAB %this.expirationMinute[%i];
         %file.writeLine(%line);
      }
      %i = %i + 1.0;
   }
   %file.close();
   %file.delete();
}

function BanManagerSO::loadBans(%this)
{
   %this.numBans = 0;
   %file = new FileObject(""){
   };
   %file.openForRead("config/server/BANLIST.txt");
   while(!%file.isEOF())
   {
      %line = %file.readLine();
      %i = %this.numBans;
      %this.adminName[%i] = getField(%line, 0);
      %this.adminBL_ID[%i] = getField(%line, 1);
      %this.victimName[%i] = getField(%line, 2);
      %this.victimBL_ID[%i] = getField(%line, 3);
      %this.victimIP[%i] = getField(%line, 4);
      %this.Reason[%i] = getField(%line, 5);
      %this.expirationYear[%i] = getField(%line, 6);
      %this.expirationMinute[%i] = getField(%line, 7);
      %this.numBans = %this.numBans + 1.0;
   }
   %file.close();
   %file.delete();
}

function BanManagerSO::dumpBans(%this)
{
   echo(%this.numBans @ " Bans:");
   echo("-----------------------------------------------------------------");
   %i = 0;
   while(%i < %this.numBans)
   {
      %line = %this.adminName[%i];
      %line = %line TAB %this.adminBL_ID[%i];
      %line = %line TAB %this.victimName[%i];
      %line = %line TAB %this.victimBL_ID[%i];
      %line = %line TAB %this.victimIP[%i];
      %line = %line TAB %this.Reason[%i];
      %line = %line TAB %this.expirationYear[%i];
      %line = %line TAB %this.expirationMinute[%i];
      echo(%line);
      %i = %i + 1.0;
   }
   echo("-----------------------------------------------------------------");
}

function BanManagerSO::sendBanList(%this, %client)
{
   %i = 0;
   while(%i < %this.numBans)
   {
      %line = %this.adminName[%i];
      %line = %line TAB %this.victimName[%i];
      %line = %line TAB %this.victimBL_ID[%i];
      %line = %line TAB %this.victimIP[%i];
      %line = %line TAB %this.Reason[%i];
      if (%this.expirationMinute[%i] == -1.0)
      {
         %line = %line TAB -1.0;
         commandToClient(%client, 'AddUnBanLine', %line, %i);
      }
      else
      {
         %timeLeft = %this.expirationMinute[%i] - getCurrentMinuteOfYear();
         %timeLeft = %timeLeft + (%this.expirationYear[%i] - getCurrentYear()) * 525600.0;
         %line = %line TAB %timeLeft;
         if (%timeLeft > 0.0)
         {
            commandToClient(%client, 'AddUnBanLine', %line, %i);
         }
      }
      %i = %i + 1.0;
   }
}

function BanManagerSO::isBanned(%this, %testBL_ID)
{
   if (%testBL_ID == 0.0)
   {
      return;
   }
   %i = 0;
   while(%i < %this.numBans)
   {
      if (%this.victimBL_ID[%i] == %testBL_ID)
      {
         if (%this.expirationYear[%i] == -1.0)
         {
            return 1 TAB %this.Reason[%i];
         }
         else
         {
            if (%this.expirationYear[%i] < getCurrentYear())
            {
               echo("BanManagerSO::isBanned() - ban expired last year, removing");
               %this.removeBan(%i);
               %i = %i - 1.0;
            }
            else
            {
               if (%this.expirationYear[%i] == getCurrentYear())
               {
                  if (%this.expirationMinute[%i] < getCurrentMinuteOfYear())
                  {
                     echo("BanManagerSO::isBanned() - ban expired, removing");
                     %this.removeBan(%i);
                     %i = %i - 1.0;
                  }
                  else
                  {
                     return 1 TAB %this.Reason[%i];
                  }
               }
               else
               {
                  return 1 TAB %this.Reason[%i];
               }
            }
         }
      }
      %i = %i + 1.0;
   }
   return 0;
}

function getCurrentYear()
{
   return mFloor(getSubStr(getDateTime(), 6, 2));
}

function getCurrentMinuteOfYear()
{
   %time = getDateTime();
   %month = mFloor(getSubStr(%time, 0, 2));
   %day = mFloor(getSubStr(%time, 3, 2));
   %year = mFloor(getSubStr(%time, 6, 2));
   %hour = mFloor(getSubStr(%time, 9, 2));
   %minute = mFloor(getSubStr(%time, 12, 2));
   %dayOfYear = getDayOfYear(%month, %day);
   %currTime = %minute;
   %currTime = %currTime + %hour * 60.0;
   %currTime = %currTime + %dayOfYear * 60.0 * 24.0;
   return %currTime;
}

function getLongNumberString(%val)
{
   %val = 1000003;
   echo("  val = ", (10 % %val));
   %ret = "";
   %i = 0;
   while(%i < 100.0)
   {
      %ret = (10 % %val) @ %ret;
      %val = mFloor(%val / 10.0);
      if (%val <= 0.0)
      {
      }
      else
      {
         %i = %i + 1.0;
      }
   }
   return %ret;
}

63
All code here is BL source code, decompiled from the various DSO's in base/. I am posting these for reference for modders, one at a time to make sure I don't expose anything too sensitive.



ServerLoadSaveFile_Start, _Tick, _End, _ProcessColorData

https://puu.sh/voLGP/62d10ad1af.txt

Pages: 1 2 3 4 [5]