Blockland Forums > Modification Help

Infinite Mining spawnbox collisions turned off completely?

Pages: (1/5) > >>

Homfrog:

So I've been making an infinite mining mod based off of Red_Guy's Unlimited Mining add-on. I've worked out most of the bugs, but for some reason, I keep gorramn falling through the floor. I can't touch anything spawned by the /startdig command. /stopdig works just fine. The pickaxe "hits" the bricks, but it doesn't make a noise and doesn't do anything. In fact, whenever I spawn, I immediately fall through the spawn area into the inky blackness. I think the problem is in the placeCement() functions and whatnot that create the spawn area. Screenshot included, relevant code included, but my ores are omitted so you don't stealz them.


--- Code: ---$Dig_PickaxeColor = "1.000000 0.500000 0.000000 1.000000";
$Dig_CementAxeColor = "0.000000 1.000000 0.100000 1.000000";
$Dig_lightCost=25;
$Dig_HeatSuitCost=200;
$Dig_CementColor=50;
$Dig_Data_DiscoveryColor=5;
$Dig_Data_DiscoveryPercent=10;

// need this here because the datablocks need PickaxeColor and CementAxeColor
exec("./miningDatablocks.cs");

--- End code ---

--- Code: ---$Dig_Data_NumOres=31;
$Dig_Data_Ore[0] ="Dirt";  // Dont change this one
$Dig_Data_Ore[1] ="Lava";  // Dont change this one

--- End code ---

--- Code: ---// Dirt types.  %name %depth %health %colorStart %colorSize
$Dig_Data_NumDirt=16;
$Dig_Data_Dirt[0]= "Space" TAB "5000 1 52 1";
$Dig_Data_Dirt[1]= "Moon" TAB "2500 120 45 1";
$Dig_Data_Dirt[2]= "Space" TAB "1000 1 52 1";
$Dig_Data_Dirt[3]= "Sky" TAB "700 5 7 1";
$Dig_Data_Dirt[4]= "Grass" TAB "605 20 4 1";
$Dig_Data_Dirt[5]= "Ground" TAB "600 25 43 2";
$Dig_Data_Dirt[6]= "Sand" TAB "300 25 30 1";
$Dig_Data_Dirt[7]= "Loose Dirt" TAB "150 10 44 1";
$Dig_Data_Dirt[8]= "Dirt" TAB "25 10 54 4";
$Dig_Data_Dirt[9]= "Dense Dirt" TAB "-150 50 57 4";
$Dig_Data_Dirt[10]= "Rock" TAB "-300 100 46 3";
$Dig_Data_Dirt[11]= "Hard Rock" TAB "-600 200 49 1";
$Dig_Data_Dirt[12]= "Seriously Hard Rock" TAB "-900 400 50 1";
$Dig_Data_Dirt[13]= "Metal Rock" TAB "-1200 800 51 1";
$Dig_Data_Dirt[14]= "Hard Metal Rock" TAB "-1800 1600 51 1";
$Dig_Data_Dirt[15]= "Seriously Hard Metal Rock" TAB "-2400 3200 51 1";
$Dig_Data_Dirt[16]= "Core" TAB "-5000 32000 2 1";

--- End code ---

--- Code: ---function servercmdstartDig(%client)
  {
   if (%client.bl_id != getNumKeyID() && findLocalClient() !$= %client)
     {
      messageClient(%client, '', "You are not the host so you cannot start dig mode");
      return;
     }

   $Dig_allowedMission["Slate"] = 1;
   $Dig_allowedMission["Slate Aurora"] = 1;
   $Dig_allowedMission["Destruct"] = 1;
   $Dig_allowedMission["DestructLight"] = 1;
   $Dig_groundID["Slate"] = 5;
   $Dig_groundID["Slate Aurora"] = 6;
   $Dig_groundID["Destruct"] = 5;
   $Dig_groundID["DestructLight"] = 5;

   if (!$Dig_allowedMission[missionInfo.name])
     {
      messageClient(%client, '', "Dig mode is only usable in Slate, Slate Aurora, Destruct, and DestructLight");
      return;
     }

   $Dig_host = %client;
   $Dig_host_brickgroup = %client.brickgroup;
   $Dig_host_id = %client.bl_id;
   deleteVariables("$Dig_placedDirt*");
   %ground = missionGroup.getobject($Dig_groundID[missionInfo.name]);
   if (missionInfo.name $= "Slate Aurora")
     %water = missionGroup.getobject(7);

   if (isObject(%ground))
     %ground.delete();

   if (isObject(%water))
     %water.delete();

   %spawnsphere = playerDropPoints.getobject(0);
   %spawnsphere.radius = 5;
   %spawnsphere.RayHeight = 3;

   messageAll('', "<color:00FF00>Dig mode is now enabled");

   for (%x = -5.5; %x <= 5.5; %x++)
      for (%y = -5.5; %y <= 5.5; %y++)
         {
          Dig_PlaceCement(%x*2 SPC %y*2 SPC 0, "brick4xCubeData");
          Dig_PlaceCement(%x*2 SPC %y*2 SPC 10, "brick4xCubeData");
         }

   %pos[0] = "10 10";
   %pos[1] = "10 -10";
   %pos[2] = "-10 10";
   %pos[3] = "-10 -10";

   for (%a = 0; %a < 4; %a++)
     {
      Dig_PlaceCement(%pos[%a] SPC 3, "brick8xCubeData");
      Dig_PlaceCement(%pos[%a] SPC 7, "brick8xCubeData");
     }

    for (%z = 0; %z <= 3; %z++)
      {
       for (%x = 0; %x < 8; %x++)
          Dig_PlaceDirt(-7 + %x*2 SPC 11 SPC 2+%z*2);

       for (%y = 0; %y < 8; %y++)
          Dig_PlaceDirt(11 SPC 7 - %y*2 SPC 2+%z*2);

       for (%x = 0; %x < 8; %x++)
          Dig_PlaceDirt(7 - %x*2 SPC -11 SPC 2+%z*2);

       for (%y = 0; %y < 8; %y++)
          Dig_PlaceDirt(-11 SPC -7 + %Y*2 SPC 2+%z*2);
      }

    %light = Dig_PlaceCement("0 0 8.75", "brick2x2FRoundData");
    %light.setLight(PlayerLight);

    activatepackage(Dig_package);
    exec("config/server/MiningStats.cs");
    exec("config/server/MiningData.cs");

    // respawn the active players
    for (%c = 0; %c < ClientGroup.getCount(); %c++)
       if (ClientGroup.getObject(%c).hasSpawnedOnce)
          ClientGroup.getObject(%c).instantRespawn();

    $Dig_on = 1;
    $Pref::Server::WelcomeMessage = "\\c2Welcome to Homfrog's Infinite Mining, %1 !  Type /help for information";

    // load mining stats for all clients
    for (%c = 0; %c < ClientGroup.getCount(); %c++)
      {
       %client = ClientGroup.getObject(%c);
       %client.LoadMiningStats();
      }

    // Start auto-save timer
    Dig_saveStats();
   }

function servercmdstopDig(%client)
  {
   if (%client.bl_id != getNumKeyID() && findLocalClient() !$= %client)
     {
      messageClient(%client, '', "You are not the host so you cannot stop dig mode");
      return;
     }

   servercmdclearallbricks(%client);
   cancel($Dig_announceSchedule);
   cancel($Dig_StatsTimer);
   messageAll('', "<color:00FF00>Dig mode is off");
   $Pref::Server::WelcomeMessage="";
   Dig_changeMapTry();
   deactivatepackage(Dig_package);
   export("$Dig_Data*", "config/server/miningData.cs");

   Dig_ChangeMapTry();
  }

function Dig_changeMapTry()
  {
   $Dig_changeMapSchedule = schedule(1000, 0, Dig_changeMapTry);
   if ($server::BrickCount < 1)
     {
        deactivatepackage(Dig_spawnPackage);
        schedule(1000, 0, changeMap, missionInfo.name);
        cancel($Dig_changeMapSchedule);
        $Dig_on = 0;

        // clear all players bottomBrint stuff
        for (%c = 0; %c < ClientGroup.getCount(); %c++)
          {
           %client = ClientGroup.getObject(%c);
           commandtoClient(%client, 'bottomPrint', "", 1);
          }
    }
  }

function serverCmdStats(%client)
 {
  for ( %x=0; %x < $Dig_Data_NumOres; %x++)
    {
     messageClient(%client, '', "<color:FFFFFF>" @ $Dig_Data_Ore[%x] SPC %client.dig_[%x] );
    }
  messageClient(%client, '', "<color:FFFFFF>pick level: " @ %client.PickAxeNum);
 }

// not used - but left in the file incase somebody wants to turn it on
function Dig_announceStats()
  {
    for (%c = 0; %c < ClientGroup.getCount(); %c++)
     {
      %client = ClientGroup.getObject(%c);

      for ( %x=0; %x <= $Dig_Data_NumOres; %x++)
        {
         %count[%x] = %client.dig_[%x];
         if ( %client.dig_[%x] > %highCount[%x])
           {
            %highClient[%x] = %client;
            %highCount[%x] = %client.dig_[%x];
           }
        }
     }

    if (ClientGroup.getCount())
      {
       for ( %x=0; %x < $Dig_Data_NumOres; %x++)
         {
          if ( %highClient[%x])
            {
             schedule(0,0, BottomPrintAll, "Most " @ $Dig_Data_Ore[%x] @ " <color:FFFFFF>"@ %highClient[%x].getPlayerName() @"<color:FF0000>("@ %highClient[%x].dig_[%x] @")", 5);
            }
         }
       $Dig_announceSchedule = schedule(30000, 0, "Dig_announceStats");
    }
}

function servercmdPowerMode(%client)
{
    if(!%client.isAdmin)
        return;

    if(%client.dig_powermode)
    {
        messageClient(%client, '', "Power mode is now off");
        %client.dig_powermode = 0;
    }

    else
    {
        messageClient(%client, '', "Power mode is now on");
        %client.dig_powermode = 1;
    }
}

// place cement bricks for the spawn area
function Dig_PlaceCement(%pos, %db)
  {
   %brick = new fxDTSBrick()
    {
        client = $Dig_host;
        datablock = %db;
        position = %pos;
        rotation = "0 0 0 0";
        colorID = $Dig_CementColor;
        scale = "1 1 1";
        angleID = "0";
        colorfxID = "0";
        shapefxID = "0";
        isPlanted = 1;
        stackBL_ID = $Dig_host_id;
    };
   $Dig_host_brickgroup.add(%brick);

   if (mAbs(getWord(%pos, 0)) == 5 && mAbs(getWord(%pos, 1)) == 5 && getWord(%pos, 2) == 0)
        %brick.setItem("DiggingPickaxeItem");

   //%brick.setTrusted(1);  // not a good idea - but left in just in case
   $server::BrickCount++;
   return %brick;
  }

// place a 'dirt' brick.  can be regular dirt, or an ore brick depending on random percent
function Dig_PlaceDirt(%pos)
  {
   %x = getWord(%pos, 0);
   %y = getWord(%pos, 1);
   %z = getWord(%pos, 2);

   if (!(mAbs(%x) <= 11 && mAbs(%y) <= 11 && %z <= 10 && %z >= 0))
     {
      %type = -1;
      %random = getRandom() * 100;
      for ( %x=0; %x <= $Dig_Data_NumOres; %x++)
        {
         %low = getWord($Dig_Data_Percent[%x], 0);
         %high = getWord($Dig_Data_Percent[%x], 1);
         %depth = getWord($Dig_Data_Percent[%x], 2);
         if ( %x==1 && %z < 0) // lava
           {
            //the deeper you go, the higher chance to find a lava brick.
            %low -= mfloor(mabs(%z / 100));
           }

          // some ore is only available below a certian depth
          if ( %depth==0)
            {
             %depth=%z;   // depth 0 means available anywhere
            }

          if ( %depth < 0)
            {
             if ( %z <= %depth)
               {
                if ( (%random <= %high) && (%random >= %low) )
                  {
                   %type = %x;
                  }
               }
            }
          else
            {
             if ( %z >= %depth)
               {
                if ( (%random <= %high) && (%random >= %low) )
                  {
                   %type = %x;
                  }
               }
            }

         }
     }

   $Dig_placedDirt[%pos] = 1;

   if ( %type == 0)
     {
      return setDirtBlock(%pos, %type);
     }

   return setOreBlock(%pos, %type);
  }

// place a dirt block.
// adjust the color and health acording to what dirt types are defined
function setDirtBlock(%pos, %type)
  {
   %color = $Dig_Data_Color[%type];
   %z = getWord(%pos, 2);

   %dirtType=-1; %x=0;
   while ( %dirtType == -1)
     {
      %rec = getField($Dig_Data_Dirt[%x], 1);
      %depth = getWord(%rec, 0);
      %rec1 = getField($Dig_Data_Dirt[%x+1], 1);
      %depth1 = getWord(%rec1, 0);
      if ( %x+1 > $Dig_Data_NumDirt)
        {
         %depth1= mFloor(%depth*2);
        }
      if ( %z >= %depth1 && %z <= %depth)
        {
         %dirtType=%x;
        }
      %x++;
     }

   //%rec = getField($Dig_Data_Dirt[%dirtType], 1);
   %health = getWord(%rec, 1);
   %color = getWord(%rec, 2);
   %colorSize = getWord(%rec, 3);
   if ( %colorSize > 1)
     {
      // adjust color depending on how far we are into the current layer of dirt
      %currDepth = getWord(getField($Dig_Data_Dirt[%dirtType], 1), 0);
      %diff = getWord(getField($Dig_Data_Dirt[%dirtType+1], 1), 0) - %currDepth;
      %change = mabs(mFloor( ( (%z - %currDepth) / %diff)* %colorSize));
      if ( %change > %colorSize)
        {
         %change=%colorSize;
        }
      %color += %change;
     }


   %brick = new fxDTSBrick()
    {
        client = $Dig_host;
        datablock = "brick4xCubeData";
        position = %pos;
        rotation = "0 0 0 0";
        colorID = %color;
        scale = "1 1 1";
        angleID = 0;
        colorfxID = %colorfx;
        shapefxID = 0;
        isPlanted = 1;
        stackBL_ID = $Dig_host_id;
        type = %type;
        dirtType = %dirtType;
        isMineable = 1;
        health = %health;
    };

   $Dig_host_brickgroup.add(%brick);
   $server::BrickCount++;
   return %brick;
  }

--- End code ---

--- Code: ---function DiggingPickaxeProjectile::onCollision(%this, %obj, %col, %fade, %pos, %normal)
{
    Dig_mineBrick(%obj, %col, %pos);
}


function DiggingPickaxeImage::onFire(%this, %obj, %slot)
{
    parent::onFire(%this, %obj, %slot);
    %obj.playThread(2, "armAttack");
}

function DiggingPickaxeImage::onStopFire(%this, %obj, %slot)
  {
   %obj.playThread(2, "root");
  }

function DiggingCementImage::onHitObject(%this, %obj, %col, %brick, %pos, %normal)
  {
   Dig_DropCement(%obj, %brick, %pos, %normal);
  }

// "hack" into the print gun's onFire code to use the cement placer
function DiggingCementImage::onFire(%this, %arga, %argb)
  {
   PrintGunImage::onFire(%this, %arga, %argb);
  }

--- End code ---


goz3rr:

Wrench the bricks, Is collision enabled? D:

Red_Guy:


--- Quote from: goz3rr on May 27, 2010, 01:35:18 AM ---Wrench the bricks, Is collision enabled? D:

--- End quote ---
you cant wrench them... theres no collision.

I already posted on the v15 thread... waiting for an answer

Jaydee:

Haha, it already has been mentioned in the previous threads that Kalph forgot to add a tiny code about planting bricks correctly. Also, use the original code instead. This mod is unbearably inferior and messed up.

Red_Guy:

problem found & fixed.
i'll be postng an update that includes some bugfixes.

Pages: (1/5) > >>

Go to full version