| Blockland Forums > Help |
| AutoRoad Fix: Help Wanted |
| (1/1) |
| Mr. Wheehaw:
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. --- Quote ---//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"; }; --- End quote --- Anyone's help would be appreciated. Please include the area that needs to be changed, and what to change it to. :cookieMonster: |
| phflack:
coding help? and when fixed, i need to reDL for my new laptop (i forgot to transfer it :o) |
| pitfall:
Works fine for me. |
| Navigation |
| Message Index |