Hi, im trying to get the good old autoroad fixed, because when you place two of em next to each other, they make the straight road brick, but dont rotate to meet the ends of the roads. How could I fix that?
Heres the whole thing minus the RTB prefs.
//Main Script
package ExclamationPoint_AutoRoad
{
//Default Script Overwrite
function FXDtsBrick::OnAdd(%this)
{
parent::OnAdd(%this);
%this.schedule(1,AutoRoad_Eval);
}
function FXDtsBrick::onDeath(%this)
{
InitContainerBoxSearch(%this.getPosition(),"16 1 0.1",$TypeMasks::FXBrickObjectType);
while(isObject(%brick = containerSearchNext()))
{
if(!%brick.isDead() && %brick.isAutoRoad && %brick.isPlanted() && getSubStr(%brick.getDatablock().getName(),0,15) $= "Brick32x32FRoad")
{
%x1 = mFloatLength(getWord(%this.getPosition(),0),1);
%y1 = mFloatLength(getWord(%this.getPosition(),1),1);
%z1 = mFloatLength(getWord(%this.getPosition(),2),1);
%x2 = mFloatLength(getWord(%brick.getPosition(),0),1);
%y2 = mFloatLength(getWord(%brick.getPosition(),1),1);
%z2 = mFloatLength(getWord(%brick.getPosition(),2),1);
if(%z1 == %z2 && %y1 == %y2 && %x1 != %x2)
%brick.schedule(1,AutoRoad_Check);
}
}
InitContainerBoxSearch(%this.getPosition(),"1 16 0.1",$TypeMasks::FXBrickObjectType);
while(isObject(%brick = containerSearchNext()))
{
if(!%brick.isDead() && %brick.isAutoRoad &&%brick.isPlanted() && getSubStr(%brick.getDatablock().getName(),0,15) $= "Brick32x32FRoad")
{
%x1 = mFloatLength(getWord(%this.getPosition(),0),1);
%y1 = mFloatLength(getWord(%this.getPosition(),1),1);
%z1 = mFloatLength(getWord(%this.getPosition(),2),1);
%x2 = mFloatLength(getWord(%brick.getPosition(),0),1);
%y2 = mFloatLength(getWord(%brick.getPosition(),1),1);
%z2 = mFloatLength(getWord(%brick.getPosition(),2),1);
if(%z1 == %z2 && %x1 == %x2 && %y1 != %y2)
%brick.schedule(1,AutoRoad_Check);
}
}
parent::onDeath(%this);
}
//Script Base
function AutoRoad_ChangeRoad(%this,%type,%dir,%ctrlz)
{
if(!isObject(%this))
return;
if(%this.numEvents > 0)
for(%i = 0; %i < %this.numEvents; %i++)
{
%EventEnabled[%i] = %this.eventEnabled[%i];
%EventInputIDx[%i] = %this.eventInputIDx[%i];
%EventInput[%i] = %this.eventInput[%i];
%EventDelay[%i] = %this.eventDelay[%i];
%EventTargetIDx[%i] = %this.eventTargetIDx[%i];
%EventTarget[%i] = %this.eventTarget[%i];
%EventNT[%i] = %this.eventNT[%i];
%EventOutputIDx[%i] = %this.eventOutputIDx[%i];
%EventOutput[%i] = %this.eventOutput[%i];
%EventOutputAppendClient[%i] = %this.eventOutputAppendClient[%i];
%EventOutputParameter[%i,1] = %this.eventOutputParameter[%i,1];
%EventOutputParameter[%i,2] = %this.eventOutputParameter[%i,2];
%EventOutputParameter[%i,3] = %this.eventOutputParameter[%i,3];
%EventOutputParameter[%i,4] = %this.eventOutputParameter[%i,4];
%EventOutputParameter[%i,5] = %this.eventOutputParameter[%i,5];
%EventOutputParameter[%i,6] = %this.eventOutputParameter[%i,6];
}
if(%this.Item > 0)
{
%Item = %this.Item.getDatablock();
%ItemPosition = %this.ItemPosition;
%ItemDirection = %this.ItemDirection;
%ItemRespawnTime = %this.ItemRespawnTime;
}
if(getSubStr(%this.getName(),"_",1)$="_")
%NTObjectName = %this.getName();
if(%this.Light > 0)
%Light = %this.light.getDatablock();
if(%this.Emitter > 0)
{
%EmitterDatablock = %this.Emitter.getEmitterDatablock();
%EmitterDirection = %this.EmitterDirection;
}
%AngleID = %dir;
%Position = %this.getPosition();
%Rotation = IDtoRot(%AngleID);
%ColorID = %this.getColorID();
%ColorFXID = %this.getColorFXID();
%ShapeFXID = %this.getShapeFXID();
%Raycasting = %this.isRayCasting();
%Colliding = %this.isColliding();
%Rendering = %this.isRendering();
if(!%RayCasting && !%Colliding && !%Rendering)
return;
%datablock = "Brick32x32FRoadAuto" @ %type @ "Data";
%brick = new fxDtsBrick()
{
datablock = %dataBlock.getID();
isPlanted = 1;
isBaseplate = 0;
};
%brick.setRayCasting(%Raycasting);
%brick.setColliding(%Colliding);
%brick.setRendering(%Rendering);
%brick.setColor(%ColorID);
%brick.setColorFX(%ColorFXID);
%brick.setPrint(%PrintID);
%brick.setShapeFX(%ShapeFXID);
%client = %this.getGroup().client;
%this.getGroup().add(%brick);
%brick.stackBL_ID = %this.getGroup().bl_ID;
%brick.setNTOBjectName("");
%null = %this.getID();
%brick.setTrusted(1);
%this.explode();
%brick.setTransform(%Position SPC %Rotation);
if(%i > 0)
for(%j = 0; %j < %i; %j++)
{
%brick.EventInputIDx[%j] = %EventInputIDx[%j];
%brick.EventInput[%j] = %EventInput[%j];
%brick.EventDelay[%j] = %EventDelay[%j];
%brick.EventTargetIDx[%j] = %EventTargetIDx[%j];
%brick.EventTarget[%j] = %EventTarget[%j];
%brick.EventNT[%j] = %EventNT[%j];
%brick.EventOutputIDx[%j] = %EventOutputIDx[%j];
%brick.EventOutput[%j] = %EventOutput[%j];
%brick.EventOutputAppendClient[%j] = %EventOutputAppendClient[%j];
%brick.EventOutputParameter[%j,1] = %EventOutputParameter[%j,1];
%brick.EventOutputParameter[%j,2] = %EventOutputParameter[%j,2];
%brick.EventOutputParameter[%j,3] = %EventOutputParameter[%j,3];
%brick.EventOutputParameter[%j,4] = %EventOutputParameter[%j,4];
%brick.EventOutputParameter[%j,5] = %EventOutputParameter[%j,5];
%brick.EventOutputParameter[%j,6] = %EventOutputParameter[%j,6];
%brick.numEvents++;
%brick.setEventEnabled(%j,%EventEnabled[%j]);
}
if(%Item)
{
%brick.setItem(%Item);
%brick.setItemPosition(%ItemPosition);
%brick.setItemDirection(%ItemDirection);
%brick.setItemRespawnTime(%ItemRespawnTime);
}
if(strLen(%NTObjectName))
%brick.setNTObjecTName(%NTObjectName);
if(%Light)
%brick.setLight(%Light);
if(%EmitterDatablock)
{
%brick.setEmitter(%EmitterDatablock);
%brick.setEmitterDirection(%EmitterDirection);
}
if(%NTObjectName)
%brick.setNTObjecTName(%NTObjectName);
%brick.plant();
if(isObject(%client))
if(%ctrlz)
{ %client.undoStack.head--;
%client.undoStack.val[%client.undoStack.head] = %brick TAB "PLANT";
%client.undoStack.head++;
}
else
{
for(%j = 0; %j < %client.undoStack.size; %j++)
if(getField(%client.undoStack.val[%j],0) $= %null)
%client.undoStack.val[%j] = %brick TAB "PLANT";
}
%brick.schedule(3,AutoRoad_Set,1);
}
function AutoRoad_UpdateAll()
{
centerPrintAll("\c3!\c2AutoRoad\c6: Updating AutoRoads...",5,2);
for(%i = 0; %i < MainBrickGroup.getCount(); %i++)
{
%subBrickGroup = MainBrickGroup.getObject(%i);
for(%j = 0; %j < %subBrickGroup.getCount(); %j++)
if(getSubStr(%subBrickGroup.getObject(%j).getDatablock().getName(),0,19) $= "Brick32x32FRoadAuto")
if($ExclamationPoint::AutoRoad::AdminOnly)
{
if(%subBrickGroup.client.isAdmin || %subBrickGroup.client.isSuperAdmin)
%subBrickGroup.getObject(%j).AutoRoad_Check();
}
else
%subBrickGroup.getObject(%j).AutoRoad_Check();
}
}
function FXDtsBrick::AutoRoad_Check(%this,%lvl)
{
if(getSubStr(%this.getDatablock().getName(),0,15) $= "Brick32x32FRoad")
{
if(%this.isPlanted() && !%this.beingDuped)
{
InitContainerBoxSearch(%this.getPosition(),"1 16 0.1",$TypeMasks::FXBrickObjectType);
while(isObject(%brick = containerSearchNext()))
{
if(!%brick.isDead() && %brick != %this && %brick.isPlanted() && getTrustLevel(%brick,%this) >= $ExclamationPoint::AutoRoad::TrustRequirement && getSubStr(%brick.getDatablock().getName(),0,15) $= "Brick32x32FRoad")
{
%x1 = mFloatLength(getWord(%this.getPosition(),0),1);
%y1 = mFloatLength(getWord(%this.getPosition(),1),1);
%z1 = mFloatLength(getWord(%this.getPosition(),2),1);
%x2 = mFloatLength(getWord(%brick.getPosition(),0),1);
%y2 = mFloatLength(getWord(%brick.getPosition(),1),1);
%z2 = mFloatLength(getWord(%brick.getPosition(),2),1);
if(%z1 == %z2 && %x1 == %x2 && %y1 != %y2)
{
if(%y1 < %y2)
%brick0 = %brick;
else if(%y1 > %y2)
%brick2 = %brick;
}
}
}
%pos = "";
InitContainerBoxSearch(%this.getPosition(),"16 1 0.1",$TypeMasks::FXBrickObjectType);
while(isObject(%brick = containerSearchNext()))
{
if(!%brick.isDead() && %brick != %this && %brick.isPlanted() && getTrustLevel(%brick,%this) >= $ExclamationPoint::AutoRoad::TrustRequirement && getSubStr(%brick.getDatablock().getName(),0,15) $= "Brick32x32FRoad")
{
%x1 = mFloatLength(getWord(%this.getPosition(),0),1);
%y1 = mFloatLength(getWord(%this.getPosition(),1),1);
%z1 = mFloatLength(getWord(%this.getPosition(),2),1);
%x2 = mFloatLength(getWord(%brick.getPosition(),0),1);
%y2 = mFloatLength(getWord(%brick.getPosition(),1),1);
%z2 = mFloatLength(getWord(%brick.getPosition(),2),1);
if(%z1 == %z2 && %x1 != %x2 && %y1 == %y2)
{
if(%x1 < %x2)
%brick1 = %brick;
else if(%x1 > %x2)
%brick3 = %brick;
}
}
}
for(%i = 0; %i <= 3;%i++)
{
%k++;
%k[%i] = 0;
if(isObject(%brick[%i]))
{
if(getSubStr(%brick[%i].getDatablock().getName(),0,19) $= "Brick32x32FRoadAuto" && %lvl)
%brick[%i].schedule(3,AutoRoad_Check);
switch$(%brick[%i].getDatablock().getName())
{
case "Brick32x32FRoadTData":
if(%i != %brick[%i].getAngleID() + 1 && %i != %brick[%i].getAngleID() - 3)
{
%k--;
%k[%i] = 1;
}
case "Brick32x32FRoadCData":
if(%i != %brick[%i].getAngleID() + 1 && %i != %brick[%i].getAngleID() + 2 && %i != %brick[%i].getAngleID() - 2 && %i != %brick[%i].getAngleID() - 3)
{
%k--;
%k[%i] = 1;
}
case "Brick32x32FRoadSData":
if(%i != %brick[%i].getAngleID() + 1 && %i != %brick[%i].getAngleID() - 1 && %i != %brick[%i].getAngleID() + 3 && %i != %brick[%i].getAngleID() - 3)
{
%k--;
%k[%i] = 1;
}
default:
%k--;
%k[%i] = 1;
}
}
}
switch(%k)
{
case 1:
%Type = "T";
for(%i = 0; %i <= 3;%i++)
if(!%k[%i])
break;
%Dir = %i + 1;
if(%Dir == 4)
%Dir = 0;
case 2:
for(%i = 0; %i <= 3;%i++)
if(!%k[%i])
%a[%b++] = %i;
if(%a1 + 2 == %a2 || %a1 - 2 == %a2 || %a1 == %a2)
{
%Type = "S";
%Dir = %a1 + 1;
if(%Dir == 4)
%Dir = 0;
}
else
{
%Type = "C";
%Dir = %a1 + 1;
if(%a1 == 0 && %a2 == 3)
%Dir = 0;
}
case 3:
if($ExclamationPoint::AutoRoad::EndPoints)
%Type = "";
else
%Type = "S";
for(%i = 0; %i <= 3;%i++)
if(%k[%i])
break;
%Dir = %i;
case 4:
%Type = "";
%Dir = 0;
default:
%Type = "X";
%Dir = 0;
}
if(%lvl)
%CtrlZ = 1;
if(getSubStr(%this.getDatablock().getName(),0,19) $= "Brick32x32FRoadAuto")
AutoRoad_ChangeRoad(%this,%Type,%Dir,%CtrlZ);
}
if(%this.beingDuped)
%this.schedule(100,AutoRoad_Check,0);
}
}
function FXDtsBrick::AutoRoad_Eval(%this)
{
if(!%this.getGroup().client.isAdmin && !%this.getGroup().client.isSuperAdmin && $ExclamationPoint::AutoRoad::AdminOnly)
return;
if(getSubStr(%this.getDatablock().getName(),0,19) $= "Brick32x32FRoadAuto")
%this.isAutoRoad = 1;
if(isObject(%this.client))
%this.schedule(1,AutoRoad_Check,1);
}
function FXDtsBrick::AutoRoad_Set(%this,%val)
{
%this.isAutoRoad = %val;
}
};
ActivatePackage(ExclamationPoint_AutoRoad);
//AutoRoad Bricks
datablock fxDTSBrickData(Brick32x32FRoadAutoData : Brick32x32FData)
{
subCategory = "Road";
uiName = "32x32 Road Auto";
};
datablock fxDTSBrickData(Brick32x32FRoadAutoSData : Brick32x32FRoadSData)
{
Category = "";
subCategory = "";
uiName = "32x32F Road Auto S";
};
datablock fxDTSBrickData(Brick32x32FRoadAutoCData : Brick32x32FRoadCData)
{
Category = "";
subCategory = "";
uiName = "32x32F Road Auto C";
};
datablock fxDTSBrickData(Brick32x32FRoadAutoXData : Brick32x32FRoadXData)
{
Category = "";
subCategory = "";
uiName = "32x32F Road Auto X";
};
datablock fxDTSBrickData(Brick32x32FRoadAutoTData : Brick32x32FRoadTData)
{
Category = "";
subCategory = "";
uiName = "32x32F Road Auto T";
};
Anyone's help would be appreciated.
Please include the area that needs to be changed, and what to change it to.
