Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ______________
- //| |
- //| Server Cmd's |
- //|______________|
- function serverCmdSpeedDig(%client)
- {
- if(%client.isAdmin || %client.isSuperAdmin)
- {
- %client.player.updateArm(AdminShovelImage,0);
- %client.player.mountImage(AdminShovelImage,0);
- }
- }
- function serverCmdSpeedPlace(%client)
- {
- if(%client.isAdmin)
- {
- %client.player.updateArm(AdminDirtImage,0);
- %client.player.mountImage(AdminDirtImage,0);
- }
- }
- function serverCmdInfiniteDigging(%client)
- {
- if(%client.isAdmin)
- {
- if(%client.isInfiniteMiner)
- {
- %client.isInfiniteMiner = 0;
- %client.trenchDirt = %client.oldTrenchDirt;
- messageClient(%client,'',"\c3Infinite Digging is now \c6OFF");
- %client.updateDirt();
- }
- else
- {
- %client.isInfiniteMiner = 1;
- %client.oldTrenchDirt = %client.trenchDirt;
- %client.trenchDirt = "°";
- messageClient(%client,'',"\c3Infinite Digging is now \c6ON");
- %client.updateDirt();
- }
- }
- }
- function serverCmdDumpDirt(%client)
- {
- if(%client.isInfiniteMiner)
- {
- %client.centerPrint("\c3You have infinite digging mode on! Why would you want to dump infinite blocks?",2);
- return;
- }
- %client.dumpedDirt = 0;
- %eyePoint = %client.player.getEyePoint();
- %eyeVector = %client.player.getEyeVector();
- %raycast = containerRayCast(%eyePoint,vectorAdd(%eyePoint,vectorScale(%eyeVector,10)),$TypeMasks::fxBrickObjectType);
- %obj = firstWord(%raycast);
- if(isObject(%obj))
- {
- %rayPos = posFromRaycast(%raycast);
- %DBName = %obj.getDatablock().getName();
- if(%DBName $= "brick2xCubeDirtData" || %DBName $= "brick4xCubeDirtData" || %DBName $= "brick8xCubeDirtData" || %DBName $= "brick16xCubeDirtData" || %DBName $= "brick32xCubeDirtData" || %DBName $= "brick64xCubeDirtData")
- {
- %Pos = findSmallBrick(%obj,%rayPos,"brick2xCubeDirtData");
- %Normal = normalFromRaycast(%raycast);
- %Scale = vectorScale(%Normal,1);
- %Pos = vectorSub(vectorAdd(%Pos,%Scale),"0 0 1");
- if(%Pos !$= "")
- {
- for(%i=0;%i<4;%i++)
- {
- switch(%i)
- {
- case 0:
- %checkPos = vectorAdd(%Pos,"0.5 0.5 1.5");
- case 1:
- %checkPos = vectorAdd(%Pos,"0.5 -0.5 1.5");
- case 2:
- %checkPos = vectorAdd(%Pos,"-0.5 0.5 1.5");
- case 3:
- %checkPos = vectorAdd(%Pos,"-0.5 -0.5 1.5");
- }
- if(getBrickAtPos(%checkPos,"1.5 1.5 1.5") == 0)
- {
- %Add = %checkPos;
- break;
- }
- }
- }
- else
- {
- return;
- }
- %wholeBricks = mFloor(%client.trenchDirt / 8);
- %dumpDB = brick4xCubeDirtData;
- %dumpDiv = 8;
- %dumpAdd = 2;
- }
- %leftOver = %client.trenchDirt - %wholeBricks;
- %newPos = %Add;
- for(%i=1;%i<=%wholeBricks;%i++)
- {
- %colorID = %client.trenchBrick[%client.trenchDirt - 1];
- %brick = new fxDtsBrick()
- {
- position = %newPos;
- datablock = %dumpDB;
- colorId = %colorID;
- colorFxId = 0;
- shapeFxId = 0;
- client = %obj.getGroup().client;
- };
- %brick.isPlanted = 1;
- %brick.setTrusted(1);
- %Error = %brick.plant();
- if(%Error && %Error != 2)
- {
- %brick.delete();
- %stop = 1;
- }
- if(%stop)
- {
- if(%client.dumpedDirt == 0)
- {
- %client.bottomPrint("\c3You can't dump dirt there!",2);
- %client.schedule(2000,updateDirt);
- }
- %client.dumpedDirt = 0;
- break;
- }
- %client.dumpedDirt++;
- %client.trenchDirt -= %dumpDiv;
- %obj.getGroup().add(%brick);
- %newPos = vectorAdd(%newPos,"0 0" SPC %dumpAdd);
- %client.updateDirt();
- }
- }
- }
- // ________________
- //| |
- //| Main Functions |
- //|________________|
- function TakeChunk(%client,%take)
- {
- %eyePoint = %client.player.getEyePoint();
- %eyeVector = %client.player.getEyeVector();
- %pos = %client.player.getPosition();
- %raycast = containerRayCast(%eyePoint,vectorAdd(%eyePoint,vectorScale(%eyeVector,10)),$TypeMasks::fxBrickObjectType);
- %obj = firstWord(%raycast);
- %rayPos = posFromRaycast(%raycast);
- if(isObject(%obj))
- {
- if(%client.trenchDirt < $TrenchDig::dirtCount)
- {
- if(%obj.getDatablock().isTrenchDirt)
- {
- // Fixing getting stuck within new bricks
- %raycast2 = containerRayCast(%pos,vectorAdd(%pos,"0 0 -0.1"),$TypeMasks::fxBrickObjectType,%client.player);
- %obj2 = firstWord(%raycast2);
- if(%obj2 == %obj)
- {
- %client.player.addVelocity("0 0 2");
- }
- %obj.refill(%client,%take,%rayPos);
- }
- }
- else
- {
- %client.centerPrint("\c3You do not have enough room for any more dirt!",1);
- }
- }
- }
- function ShootChunk(%client)
- {
- if(%client.trenchDirt <= 0 && !%client.isInfiniteMiner)
- {
- %client.centerPrint("\c3You have no dirt to release!",1);
- return;
- }
- else
- {
- %eyePoint = %client.player.getEyePoint();
- %eyeVector = %client.player.getEyeVector();
- %scale = vectorScale(%eyeVector,10);
- %add = vectorAdd(%eyePoint,%scale);
- %raycast = containerRaycast(%eyePoint,%add,$TypeMasks::FxBrickObjectType);
- %obj = firstWord(%raycast);
- if(isObject(%obj) && %obj.getDatablock().isTrenchDirt)
- {
- %rayPos = posFromRaycast(%raycast);
- %DBName = %obj.getDatablock().getName();
- //if(%DBName $= "brick2xCubeDirtData" || %DBName $= "brick4xCubeDirtData" || %DBName $= "brick8xCubeDirtData" || %DBName $= "brick16xCubeDirtData" || %DBName $= "brick32xCubeDirtData" || %DBName $= "brick64xCubeDirtData")
- if(stripos(%DBName,"CubeDirt") != -1)
- {
- %Pos = findSmallBrick(%obj,%rayPos,"brick2xCubeDirtData");
- %Diff = vectorSub(%Pos,%rayPos);
- %else = 1;
- if(getWord(%Diff,2) == 1)
- {
- %Add = vectorSub(%Pos,"0 0 1");
- %else = 0;
- }
- if(%else)
- {
- %Normal = normalFromRaycast(%raycast);
- %Scale = vectorScale(%Normal,1);
- %Add = vectorAdd(%Pos,%Scale);
- }
- %colorID = %client.trenchBrick[%client.trenchDirt];
- %brick = new fxDtsBrick()
- {
- position = %Add;
- datablock = brick2xCubeDirtData;
- colorId = %colorID;
- colorFxId = 0;
- shapeFxId = 0;
- client = %obj.getGroup().client;
- };
- %brick.isPlanted = 1;
- %brick.setTrusted(1);
- %Error = %brick.plant();
- if(%Error && %error != 2)
- {
- %brick.delete();
- return;
- }
- %obj.getGroup().add(%brick);
- if(!%client.isInfiniteMiner)
- {
- %client.trenchDirt--;
- %client.updateDirt();
- }
- %brick.checkBricks(%client);
- }
- }
- }
- }
- // ___________________
- //| |
- //| Support Functions |
- //|___________________|
- function fxDtsBrick::Refill(%this,%client,%take,%rayPos)
- {
- if(isObject(%this))
- {
- switch$(%this.getDatablock().getName())
- {
- case "brick64xCubeDirtData":
- %size = "64x";
- %wantSize = "brick32xCubeDirtData";
- case "brick32xCubeDirtData":
- %size = "32x";
- %wantSize = "brick16xCubeDirtData";
- case "brick16xCubeDirtData":
- %size = "16x";
- %wantSize = "brick8xCubeDirtData";
- case "brick8xCubeDirtData":
- %size = "8x";
- %wantSize = "brick4xCubeDirtData";
- case "brick4xCubeDirtData":
- %size = "4x";
- %wantSize = "brick2xCubeDirtData";
- case "brick2xCubeDirtData":
- if(%take)
- {
- onTrenchDig(%client,%pos,%this);
- }
- return;
- default:
- return;
- }
- %pos = %this.getPosition();
- %colorId = %this.getColorId();
- %colorFxId = %this.getColorFxId();
- %shapeFxId = %this.getShapeFxId();
- %rotation = %this.rotation;
- %smallPos = findSmallBrick(%this,%rayPos,%wantSize);
- %group = %this.getGroup();
- %this.delete();
- schedule(0,0,fillPos,%pos,%size,%client,%colorId,%colorFx,%shapeFx,%rotation,%group);
- schedule(7,0,continueRefill,%client,%take,%rayPos,%smallPos);
- }
- }
- function continueRefill(%client,%take,%rayPos,%smallPos)
- {
- %fillBrick = getBrickAtPos(%smallPos,"0 0 0");
- %fillBrick.Refill(%client,%take,%rayPos);
- }
- function getBrickAtPos(%pos,%box)
- {
- InitContainerBoxSearch(%pos,%box,$TypeMasks::fxBrickObjectType);
- %obj = containerSearchNext();
- if(isObject(%obj))
- {
- return %obj;
- }
- else
- {
- return 0;
- }
- }
- function fillPos(%pos,%size,%client,%colorId,%colorFx,%shapeFx,%rotation,%brickGroup)
- {
- if(%size $= "64x")
- {
- %DB = "brick32xCubeDirtData";
- for(%x=8;%x>=-8;%x-=16)
- {
- for(%y=8;%y>=-8;%y-=16)
- {
- for(%z=8;%z>=-8;%z-=16)
- {
- %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
- %brick = new fxDtsBrick()
- {
- position = %newPos;
- datablock = %DB;
- colorId = %colorId;
- colorFxId = %colorFxId;
- shapeFxId = %shapeFxId;
- client = %brickGroup.client;
- };
- %brick.isPlanted = 1;
- %brick.setTrusted(1);
- %error = %brick.plant();
- if(%error && %error != 2)
- {
- %brick.delete();
- }
- else
- {
- %brickGroup.add(%brick);
- }
- }
- }
- }
- }
- else if(%size $= "32x")
- {
- %DB = "brick16xCubeDirtData";
- for(%x=4;%x>=-4;%x-=8)
- {
- for(%y=4;%y>=-4;%y-=8)
- {
- for(%z=4;%z>=-4;%z-=8)
- {
- %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
- %brick = new fxDtsBrick()
- {
- position = %newPos;
- datablock = %DB;
- colorId = %colorId;
- colorFxId = %colorFxId;
- shapeFxId = %shapeFxId;
- client = %brickGroup.client;
- };
- %brick.isPlanted = 1;
- %brick.setTrusted(1);
- %error = %brick.plant();
- if(%error && %error != 2)
- {
- %brick.delete();
- }
- else
- {
- %brickGroup.add(%brick);
- }
- }
- }
- }
- }
- else if(%size $= "16x")
- {
- %DB = "brick8xCubeDirtData";
- for(%x=2;%x>=-2;%x-=4)
- {
- for(%y=2;%y>=-2;%y-=4)
- {
- for(%z=2;%z>=-2;%z-=4)
- {
- %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
- %brick = new fxDtsBrick()
- {
- position = %newPos;
- datablock = %DB;
- colorId = %colorId;
- colorFxId = %colorFxId;
- shapeFxId = %shapeFxId;
- client = %brickGroup.client;
- };
- %brick.isPlanted = 1;
- %brick.setTrusted(1);
- %error = %brick.plant();
- if(%error && %error != 2)
- {
- %brick.delete();
- }
- else
- {
- %brickGroup.add(%brick);
- }
- }
- }
- }
- }
- else if(%size $= "8x")
- {
- %DB = "brick4xCubeDirtData";
- for(%x=1;%x>=-1;%x-=2)
- {
- for(%y=1;%y>=-1;%y-=2)
- {
- for(%z=1;%z>=-1;%z-=2)
- {
- %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
- %brick = new fxDtsBrick()
- {
- position = %newPos;
- datablock = %DB;
- colorId = %colorId;
- colorFxId = %colorFxId;
- shapeFxId = %shapeFxId;
- client = %brickGroup.client;
- };
- %brick.isPlanted = 1;
- %brick.setTrusted(1);
- %error = %brick.plant();
- if(%error && %error != 2)
- {
- %brick.delete();
- }
- else
- {
- %brickGroup.add(%brick);
- }
- }
- }
- }
- }
- else if(%size $= "4x")
- {
- %DB = "brick2xCubeDirtData";
- for(%x=0.5;%x>=-0.5;%x--)
- {
- for(%y=0.5;%y>=-0.5;%y--)
- {
- for(%z=0.5;%z>=-0.5;%z--)
- {
- %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
- %brick = new fxDtsBrick()
- {
- position = %newPos;
- datablock = %DB;
- colorId = %colorId;
- colorFxId = %colorFxId;
- shapeFxId = %shapeFxId;
- client = %brickGroup.client;
- };
- %brick.isPlanted = 1;
- %brick.setTrusted(1);
- %error = %brick.plant();
- if(%error && %error != 2)
- {
- %brick.delete();
- }
- else
- {
- %brickGroup.add(%brick);
- }
- }
- }
- }
- }
- // just stripped out bricks
- }
- function onTrenchDig(%client,%pos,%brick)
- {
- if(%client.trenchDirt >= $TrenchDig::DirtCount)
- {
- %client.centerPrint("\c3You do not have enough room for any more dirt!",1);
- return 0;
- }
- else
- {
- if(!%client.isInfiniteMiner)
- {
- %client.trenchDirt++;
- %client.trenchBrick[%client.trenchDirt] = %brick.getColorID();
- }
- %brick.delete();
- %client.updateDirt();
- return 1;
- }
- }
- function findSmallBrick(%brick,%Pos,%wantBrick)
- {
- %time = getRealTime();
- %DBName = %brick.getDatablock().getName();
- if(%wantBrick $= "brick2xCubeDirtData")
- {
- %increment = 1;
- switch$(%DBName)
- {
- case "brick64xCubeDirtData":
- %Min = -15.5;
- %Max = 15.5;
- case "brick32xCubeDirtData":
- %Min = -7.5;
- %Max = 7.5;
- case "brick16xCubeDirtData":
- %Min = -3.5;
- %Max = 3.5;
- case "brick8xCubeDirtData":
- %Min = -1.5;
- %Max = 1.5;
- case "brick4xCubeDirtData":
- %Min = -0.5;
- %Max = 0.5;
- case "brick2xCubeDirtData":
- return %brick.getPosition();
- default:
- return;
- }
- }
- else if(%wantBrick $= "brick4xCubeDirtData")
- {
- %increment = 2;
- switch$(%DBName)
- {
- case "brick64xCubeDirtData":
- %Min = -15;
- %Max = 15;
- case "brick32xCubeDirtData":
- %Min = -7;
- %Max = 7;
- case "brick16xCubeDirtData":
- %Min = -3;
- %Max = 3;
- case "brick8xCubeDirtData":
- %Min = -1;
- %Max = 1;
- case "brick4xCubeDirtData":
- return %brick.getPosition();
- case "brick2xCubeDirtData":
- return 0 TAB %brick.getPosition();
- default:
- return;
- }
- }
- else if(%wantBrick $= "brick8xCubeDirtData")
- {
- %increment = 4;
- switch$(%DBName)
- {
- case "brick64xCubeDirtData":
- %Min = -14;
- %Max = 14;
- case "brick32xCubeDirtData":
- %Min = -6;
- %Max = 6;
- case "brick16xCubeDirtData":
- %Min = -2;
- %Max = 2;
- case "brick8xCubeDirtData":
- return %brick.getPosition();
- default:
- return;
- }
- }
- else if(%wantBrick $= "brick16xCubeDirtData")
- {
- %increment = 8;
- switch$(%DBName)
- {
- case "brick64xCubeDirtData":
- %Min = -8;
- %Max = 8;
- case "brick32xCubeDirtData":
- %Min = -4;
- %Max = 4;
- case "brick16xCubeDirtData":
- return %brick.getPosition();
- default:
- return;
- }
- }
- else if(%wantBrick $= "brick32xCubeDirtData")
- {
- %increment = 16;
- switch$(%DBName)
- {
- case "brick64xCubeDirtData":
- %Min = -8;
- %Max = 8;
- case "brick32xCubeDirtData":
- return %brick.getPosition();
- default:
- return;
- }
- }
- for(%x = %Min;%x <= %Max;%x += %increment)
- {
- for(%y = %Min;%y <= %Max;%y += %increment)
- {
- for(%z = %Min;%z <= %Max;%z += %increment)
- {
- %rot = getWord(%brick.rotation,3);
- %smallPos = vectorAdd(%brick.getPosition(),%x SPC %y SPC %z);
- %Distance = vectorDist(%Pos,%smallPos);
- if(%Smallest $= "" || %Distance < %Smallest)
- {
- %SmallestPos = %smallPos;
- %Smallest = %Distance;
- }
- %count++;
- }
- }
- }
- talk("Task completed in" SPC getTimeString((getRealTime()-%time)/1000) SPC "with" SPC %count SPC "loops");
- return %SmallestPos;
- }
- function GameConnection::updateDirt(%this)
- {
- if(%this.isInfiniteMiner)
- {
- %Dirt = "°";
- }
- else
- {
- %Dirt = %this.trenchDirt;
- }
- %this.bottomPrint("\c3" @ %Dirt @ "\c6/\c3" @ $TrenchDig::dirtCount @ " dirt",-1);
- }
- // ______________________
- //| |
- //| Regrouping Functions |
- //|______________________|
- function fxDtsBrick::checkBricks(%this,%client)
- {
- %pos1 = %this.getPosition();
- %DBName = %this.getDatablock().getName();
- %Data = %this.getDatablock();
- %rot=round(getWord(%this.rotation,3));
- if(%rot==90 || %rot == 270)
- {
- %sizeX= %Data.brickSizeY;
- %sizeY = %Data.brickSizeX;
- }
- else
- {
- %sizeX = %Data.brickSizeX;
- %sizeY = %Data.brickSizeY;
- }
- %sizeZ = %Data.brickSizeZ*0.2+0.3;
- %box = (%sizeX*0.5+0.6) SPC (%sizeY*0.5+0.6) SPC %sizeZ;
- if(%DBName $= "brick2xCubeDirtData")
- {
- %size = 1;
- %stringSize = "1";
- %oppSize = -1;
- %div = 2;
- InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
- }
- else if(%DBName $= "brick4xCubeDirtData")
- {
- %size = 2;
- %stringSize = "2";
- %oppSize = "-2";
- %div = 1;
- InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
- }
- else if(%DBName $= "brick8xCubeDirtData")
- {
- %size = 4;
- %stringSize = "4";
- %oppSize = "-4";
- %div = 0.5;
- InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
- }
- else if(%DBName $= "brick16xCubeDirtData")
- {
- %size = 8;
- %stringSize = "8";
- %oppSize = "-8";
- %div = 0.25;
- %large = 1;
- InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
- }
- else if(%DBName $= "brick32xCubeDirtData")
- {
- %size = 16;
- %stringSize = "16";
- %oppSize = "-16";
- %div = 0.125;
- %large = 1;
- InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
- }
- // 64x wasn't here by default?
- else if(%DBName $= "brick64xCubeDirtData")
- {
- %size = 32;
- %stringSize = "32";
- %oppSize = "-32";
- %div = 0.0625;
- %large = 1;
- InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
- }
- else
- {
- return;
- }
- %puzzleComplete = 0;
- %puzzlePos = "0 0 0";
- while(isObject(%next = containerSearchNext()))
- {
- if(%next.getDatablock().getName() $= %DBName && %next.isPlanted && %next.getDatablock().isTrenchDirt)
- {
- %pos2 = %next.getPosition();
- %Sub = vectorSub(%pos1,%pos2);
- switch$(%Sub)
- {
- case %stringSize SPC "0 0":
- %puzzleComplete++;
- %smallBrick[1,0,0] = %next;
- %puzzleDir[1,-1,1] += 1;
- %puzzleDir[1,1,1] += 1;
- %puzzleDir[1,-1,-1] += 1;
- %puzzleDir[1,1,-1] += 1;
- case %oppSize SPC "0 0":
- %puzzleComplete++;
- %smallBrick[-1,0,0] = %next;
- %puzzleDir[-1,1,1] += 1;
- %puzzleDir[-1,-1,1] += 1;
- %puzzleDir[-1,1,-1] += 1;
- %puzzleDir[-1,-1,-1] += 1;
- case "0" SPC %stringSize SPC "0":
- %puzzleComplete++;
- %smallBrick[0,1,0] = %next;
- %puzzleDir[1,1,1] += 1;
- %puzzleDir[-1,1,1] += 1;
- %puzzleDir[1,1,-1] += 1;
- %puzzleDir[-1,1,-1] += 1;
- case "0" SPC %oppSize SPC "0":
- %puzzleComplete++;
- %smallBrick[0,-1,0] = %next;
- %puzzleDir[1,-1,1] += 1;
- %puzzleDir[-1,-1,1] += 1;
- %puzzleDir[1,-1,-1] += 1;
- %puzzleDir[-1,-1,-1] += 1;
- case %stringSize SPC %stringSize SPC "0":
- %puzzleComplete++;
- %smallBrick[1,1,0] = %next;
- %puzzleDir[1,1,-1] += 1;
- %puzzleDir[1,1,1] += 1;
- case %stringSize SPC %oppSize SPC "0":
- %puzzleComplete++;
- %smallBrick[1,-1,0] = %next;
- %puzzleDir[1,-1,1] += 1;
- %puzzleDir[1,-1,-1] += 1;
- case %oppSize SPC %stringSize SPC "0":
- %puzzleComplete++;
- %smallBrick[-1,1,0] = %next;
- %puzzleDir[-1,1,1] += 1;
- %puzzleDir[-1,1,-1] += 1;
- case %oppSize SPC %oppSize SPC "0":
- %puzzleComplete++;
- %smallBrick[-1,-1,0] = %next;
- %puzzleDir[-1,-1,1] += 1;
- %puzzleDir[-1,-1,-1] += 1;
- case %stringSize SPC "0" SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[1,0,1] = %next;
- %puzzleDir[1,-1,1] += 1;
- %puzzleDir[1,1,1] += 1;
- case %oppSize SPC "0" SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[-1,0,1] = %next;
- %puzzleDir[-1,1,1] += 1;
- %puzzleDir[-1,-1,1] += 1;
- case "0" SPC %stringSize SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[0,1,1] = %next;
- %puzzleDir[1,1,1] += 1;
- %puzzleDir[-1,1,1] += 1;
- case "0" SPC %oppSize SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[0,-1,1] = %next;
- %puzzleDir[1,-1,1] += 1;
- %puzzleDir[-1,-1,1] += 1;
- case %stringSize SPC %stringSize SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[1,1,1] = %next;
- %puzzleDir[1,1,1] += 1;
- case %stringSize SPC %oppSize SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[1,-1,1] = %next;
- %puzzleDir[1,-1,1] += 1;
- case %oppSize SPC %stringSize SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[-1,1,1] = %next;
- %puzzleDir[-1,1,1] += 1;
- case %oppSize SPC %oppSize SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[-1,-1,1] = %next;
- %puzzleDir[-1,-1,1] += 1;
- case "0 0" SPC %stringSize:
- %puzzleComplete++;
- %smallBrick[0,0,1] = %next;
- %puzzleDir[1,1,1] += 1;
- %puzzleDir[-1,1,1] += 1;
- %puzzleDir[-1,-1,1] += 1;
- %puzzleDir[1,-1,1] += 1;
- case %stringSize SPC "0" SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[1,0,-1] = %next;
- %puzzleDir[1,-1,-1] += 1;
- %puzzleDir[1,1,-1] += 1;
- case %oppSize SPC "0" SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[-1,0,-1] = %next;
- %puzzleDir[-1,1,-1] += 1;
- %puzzleDir[-1,-1,-1] += 1;
- case "0" SPC %stringSize SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[0,1,-1] = %next;
- %puzzleDir[1,1,-1] += 1;
- %puzzleDir[-1,1,-1] += 1;
- case "0" SPC %oppSize SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[0,-1,-1] = %next;
- %puzzleDir[1,-1,-1] += 1;
- %puzzleDir[-1,-1,-1] += 1;
- case %stringSize SPC %stringSize SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[1,1,-1] = %next;
- %puzzleDir[1,1,-1] += 1;
- case %stringSize SPC %oppSize SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[1,-1,-1] = %next;
- %puzzleDir[1,-1,-1] += 1;
- case %oppSize SPC %stringSize SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[-1,1,-1] = %next;
- %puzzleDir[-1,1,-1] += 1;
- case %oppSize SPC %oppSize SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[-1,-1,-1] = %next;
- %puzzleDir[-1,-1,-1] += 1;
- case "0 0" SPC %oppSize:
- %puzzleComplete++;
- %smallBrick[0,0,-1] = %next;
- %puzzleDir[1,1,-1] += 1;
- %puzzleDir[-1,1,-1] += 1;
- %puzzleDir[-1,-1,-1] += 1;
- %puzzleDir[1,-1,-1] += 1;
- }
- }
- }
- if(%puzzleComplete >= 7)
- {
- for(%a = -1;%a <= 1;%a++)
- {
- for(%b = -1;%b <= 1;%b++)
- {
- for(%c = -1;%c <= 1;%c++)
- {
- %cur = %puzzleDir[%a,%b,%c];
- if(%highest $= "" || %cur > %highest)
- {
- %highest = %cur;
- %highA = %a;
- %highB = %b;
- %highC = %c;
- }
- }
- }
- }
- if(%highest < 7)
- {
- return;
- }
- %pos = vectorAdd(%this.getPosition(),%highA/%div*-1 SPC %highB/%div*-1 SPC %highC/%div*-1);
- %BGClient = %this.getGroup().client;
- %BG = %this.getGroup();
- %majorColor = 42;
- %this.schedule(0,delete);
- %smallBrick[%highA,0,0].schedule(0,delete);
- %smallBrick[0,%highB,0].schedule(0,delete);
- %smallBrick[%highA,%highB,0].schedule(0,delete);
- %smallBrick[%highA,0,%highC].schedule(0,delete);
- %smallBrick[0,%highB,%highC].schedule(0,delete);
- %smallBrick[%highA,%highB,%highC].schedule(0,delete);
- %smallBrick[0,0,%highC].schedule(0,delete);
- if(%large)
- {
- %sched = 100;
- }
- else
- {
- %sched = 1;
- }
- schedule(%sched,0,finishRegrouping,%pos,%DBName,%majorColor,%BGclient,%BG,%client);
- }
- }
- function finishRegrouping(%pos,%DBName,%colorID,%client,%BG,%difClient)
- {
- if(%DBName $= "brick2xCubeDirtData")
- {
- %DB = brick4xCubeDirtData;
- }
- else if(%DBName $= "brick4xCubeDirtData")
- {
- %DB = brick8xCubeDirtData;
- }
- else if(%DBName $= "brick8xCubeDirtData")
- {
- %DB = brick16xCubeDirtData;
- }
- else if(%DBName $= "brick16xCubeDirtData")
- {
- %DB = brick32xCubeDirtData;
- }
- else if(%DBName $= "brick32xCubeDirtData")
- {
- %DB = brick64xCubeDirtData;
- }
- %newBrick = new fxDtsBrick()
- {
- position = %pos;
- datablock = %DB;
- colorId = %colorId;
- client = %client;
- colorFxId = 0;
- shapeFxId = 0;
- };
- %newBrick.isPlanted=1;
- %newBrick.setTrusted(1);
- %error = %newBrick.plant();
- if(%error && %error != 2)
- {
- %newBrick.delete();
- return;
- }
- %BG.add(%newBrick);
- // Fixing getting stuck within the brick
- if(isObject(%client.player))
- {
- %pos = %client.player.getPosition();
- %raycast = containerRayCast(%pos,vectorAdd(%pos,"0 0 -0.1"),$TypeMasks::fxBrickObjectType,%client.player);
- %obj = firstWord(%raycast);
- if(%obj == %newBrick)
- {
- %client.player.addVelocity("0 0 3");
- }
- }
- if(%DBName !$= brick32xCubeDirtData)
- {
- %newBrick.schedule(2,checkBricks);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement