Advertisement
Guest User

Untitled

a guest
Mar 14th, 2015
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.30 KB | None | 0 0
  1. // ______________
  2. //| |
  3. //| Server Cmd's |
  4. //|______________|
  5.  
  6. function serverCmdSpeedDig(%client)
  7. {
  8. if(%client.isAdmin || %client.isSuperAdmin)
  9. {
  10. %client.player.updateArm(AdminShovelImage,0);
  11. %client.player.mountImage(AdminShovelImage,0);
  12. }
  13. }
  14. function serverCmdSpeedPlace(%client)
  15. {
  16. if(%client.isAdmin)
  17. {
  18. %client.player.updateArm(AdminDirtImage,0);
  19. %client.player.mountImage(AdminDirtImage,0);
  20. }
  21. }
  22. function serverCmdInfiniteDigging(%client)
  23. {
  24. if(%client.isAdmin)
  25. {
  26. if(%client.isInfiniteMiner)
  27. {
  28. %client.isInfiniteMiner = 0;
  29. %client.trenchDirt = %client.oldTrenchDirt;
  30. messageClient(%client,'',"\c3Infinite Digging is now \c6OFF");
  31. %client.updateDirt();
  32. }
  33. else
  34. {
  35. %client.isInfiniteMiner = 1;
  36. %client.oldTrenchDirt = %client.trenchDirt;
  37. %client.trenchDirt = "°";
  38. messageClient(%client,'',"\c3Infinite Digging is now \c6ON");
  39. %client.updateDirt();
  40. }
  41. }
  42. }
  43. function serverCmdDumpDirt(%client)
  44. {
  45. if(%client.isInfiniteMiner)
  46. {
  47. %client.centerPrint("\c3You have infinite digging mode on! Why would you want to dump infinite blocks?",2);
  48. return;
  49. }
  50. %client.dumpedDirt = 0;
  51. %eyePoint = %client.player.getEyePoint();
  52. %eyeVector = %client.player.getEyeVector();
  53. %raycast = containerRayCast(%eyePoint,vectorAdd(%eyePoint,vectorScale(%eyeVector,10)),$TypeMasks::fxBrickObjectType);
  54. %obj = firstWord(%raycast);
  55. if(isObject(%obj))
  56. {
  57. %rayPos = posFromRaycast(%raycast);
  58. %DBName = %obj.getDatablock().getName();
  59. if(%DBName $= "brick2xCubeDirtData" || %DBName $= "brick4xCubeDirtData" || %DBName $= "brick8xCubeDirtData" || %DBName $= "brick16xCubeDirtData" || %DBName $= "brick32xCubeDirtData" || %DBName $= "brick64xCubeDirtData")
  60. {
  61. %Pos = findSmallBrick(%obj,%rayPos,"brick2xCubeDirtData");
  62.  
  63. %Normal = normalFromRaycast(%raycast);
  64. %Scale = vectorScale(%Normal,1);
  65. %Pos = vectorSub(vectorAdd(%Pos,%Scale),"0 0 1");
  66.  
  67. if(%Pos !$= "")
  68. {
  69. for(%i=0;%i<4;%i++)
  70. {
  71. switch(%i)
  72. {
  73. case 0:
  74. %checkPos = vectorAdd(%Pos,"0.5 0.5 1.5");
  75. case 1:
  76. %checkPos = vectorAdd(%Pos,"0.5 -0.5 1.5");
  77. case 2:
  78. %checkPos = vectorAdd(%Pos,"-0.5 0.5 1.5");
  79. case 3:
  80. %checkPos = vectorAdd(%Pos,"-0.5 -0.5 1.5");
  81. }
  82. if(getBrickAtPos(%checkPos,"1.5 1.5 1.5") == 0)
  83. {
  84. %Add = %checkPos;
  85. break;
  86. }
  87. }
  88. }
  89. else
  90. {
  91. return;
  92. }
  93. %wholeBricks = mFloor(%client.trenchDirt / 8);
  94. %dumpDB = brick4xCubeDirtData;
  95. %dumpDiv = 8;
  96. %dumpAdd = 2;
  97. }
  98.  
  99. %leftOver = %client.trenchDirt - %wholeBricks;
  100. %newPos = %Add;
  101. for(%i=1;%i<=%wholeBricks;%i++)
  102. {
  103. %colorID = %client.trenchBrick[%client.trenchDirt - 1];
  104. %brick = new fxDtsBrick()
  105. {
  106. position = %newPos;
  107. datablock = %dumpDB;
  108. colorId = %colorID;
  109. colorFxId = 0;
  110. shapeFxId = 0;
  111. client = %obj.getGroup().client;
  112. };
  113. %brick.isPlanted = 1;
  114. %brick.setTrusted(1);
  115. %Error = %brick.plant();
  116. if(%Error && %Error != 2)
  117. {
  118. %brick.delete();
  119. %stop = 1;
  120. }
  121. if(%stop)
  122. {
  123. if(%client.dumpedDirt == 0)
  124. {
  125. %client.bottomPrint("\c3You can't dump dirt there!",2);
  126. %client.schedule(2000,updateDirt);
  127. }
  128. %client.dumpedDirt = 0;
  129. break;
  130. }
  131. %client.dumpedDirt++;
  132. %client.trenchDirt -= %dumpDiv;
  133. %obj.getGroup().add(%brick);
  134. %newPos = vectorAdd(%newPos,"0 0" SPC %dumpAdd);
  135. %client.updateDirt();
  136. }
  137. }
  138. }
  139.  
  140. // ________________
  141. //| |
  142. //| Main Functions |
  143. //|________________|
  144.  
  145. function TakeChunk(%client,%take)
  146. {
  147. %eyePoint = %client.player.getEyePoint();
  148. %eyeVector = %client.player.getEyeVector();
  149. %pos = %client.player.getPosition();
  150. %raycast = containerRayCast(%eyePoint,vectorAdd(%eyePoint,vectorScale(%eyeVector,10)),$TypeMasks::fxBrickObjectType);
  151. %obj = firstWord(%raycast);
  152. %rayPos = posFromRaycast(%raycast);
  153. if(isObject(%obj))
  154. {
  155. if(%client.trenchDirt < $TrenchDig::dirtCount)
  156. {
  157. if(%obj.getDatablock().isTrenchDirt)
  158. {
  159. // Fixing getting stuck within new bricks
  160. %raycast2 = containerRayCast(%pos,vectorAdd(%pos,"0 0 -0.1"),$TypeMasks::fxBrickObjectType,%client.player);
  161. %obj2 = firstWord(%raycast2);
  162. if(%obj2 == %obj)
  163. {
  164. %client.player.addVelocity("0 0 2");
  165. }
  166. %obj.refill(%client,%take,%rayPos);
  167. }
  168. }
  169. else
  170. {
  171. %client.centerPrint("\c3You do not have enough room for any more dirt!",1);
  172. }
  173. }
  174. }
  175. function ShootChunk(%client)
  176. {
  177. if(%client.trenchDirt <= 0 && !%client.isInfiniteMiner)
  178. {
  179. %client.centerPrint("\c3You have no dirt to release!",1);
  180. return;
  181. }
  182. else
  183. {
  184. %eyePoint = %client.player.getEyePoint();
  185. %eyeVector = %client.player.getEyeVector();
  186. %scale = vectorScale(%eyeVector,10);
  187. %add = vectorAdd(%eyePoint,%scale);
  188. %raycast = containerRaycast(%eyePoint,%add,$TypeMasks::FxBrickObjectType);
  189. %obj = firstWord(%raycast);
  190. if(isObject(%obj) && %obj.getDatablock().isTrenchDirt)
  191. {
  192. %rayPos = posFromRaycast(%raycast);
  193. %DBName = %obj.getDatablock().getName();
  194. //if(%DBName $= "brick2xCubeDirtData" || %DBName $= "brick4xCubeDirtData" || %DBName $= "brick8xCubeDirtData" || %DBName $= "brick16xCubeDirtData" || %DBName $= "brick32xCubeDirtData" || %DBName $= "brick64xCubeDirtData")
  195. if(stripos(%DBName,"CubeDirt") != -1)
  196. {
  197. %Pos = findSmallBrick(%obj,%rayPos,"brick2xCubeDirtData");
  198. %Diff = vectorSub(%Pos,%rayPos);
  199. %else = 1;
  200. if(getWord(%Diff,2) == 1)
  201. {
  202. %Add = vectorSub(%Pos,"0 0 1");
  203. %else = 0;
  204. }
  205. if(%else)
  206. {
  207. %Normal = normalFromRaycast(%raycast);
  208. %Scale = vectorScale(%Normal,1);
  209. %Add = vectorAdd(%Pos,%Scale);
  210. }
  211. %colorID = %client.trenchBrick[%client.trenchDirt];
  212. %brick = new fxDtsBrick()
  213. {
  214. position = %Add;
  215. datablock = brick2xCubeDirtData;
  216. colorId = %colorID;
  217. colorFxId = 0;
  218. shapeFxId = 0;
  219. client = %obj.getGroup().client;
  220. };
  221. %brick.isPlanted = 1;
  222. %brick.setTrusted(1);
  223. %Error = %brick.plant();
  224. if(%Error && %error != 2)
  225. {
  226. %brick.delete();
  227. return;
  228. }
  229. %obj.getGroup().add(%brick);
  230. if(!%client.isInfiniteMiner)
  231. {
  232. %client.trenchDirt--;
  233. %client.updateDirt();
  234. }
  235. %brick.checkBricks(%client);
  236. }
  237. }
  238. }
  239. }
  240.  
  241. // ___________________
  242. //| |
  243. //| Support Functions |
  244. //|___________________|
  245.  
  246. function fxDtsBrick::Refill(%this,%client,%take,%rayPos)
  247. {
  248. if(isObject(%this))
  249. {
  250. switch$(%this.getDatablock().getName())
  251. {
  252. case "brick64xCubeDirtData":
  253. %size = "64x";
  254. %wantSize = "brick32xCubeDirtData";
  255. case "brick32xCubeDirtData":
  256. %size = "32x";
  257. %wantSize = "brick16xCubeDirtData";
  258. case "brick16xCubeDirtData":
  259. %size = "16x";
  260. %wantSize = "brick8xCubeDirtData";
  261. case "brick8xCubeDirtData":
  262. %size = "8x";
  263. %wantSize = "brick4xCubeDirtData";
  264. case "brick4xCubeDirtData":
  265. %size = "4x";
  266. %wantSize = "brick2xCubeDirtData";
  267. case "brick2xCubeDirtData":
  268. if(%take)
  269. {
  270. onTrenchDig(%client,%pos,%this);
  271. }
  272. return;
  273. default:
  274. return;
  275. }
  276. %pos = %this.getPosition();
  277. %colorId = %this.getColorId();
  278. %colorFxId = %this.getColorFxId();
  279. %shapeFxId = %this.getShapeFxId();
  280. %rotation = %this.rotation;
  281. %smallPos = findSmallBrick(%this,%rayPos,%wantSize);
  282. %group = %this.getGroup();
  283. %this.delete();
  284. schedule(0,0,fillPos,%pos,%size,%client,%colorId,%colorFx,%shapeFx,%rotation,%group);
  285. schedule(7,0,continueRefill,%client,%take,%rayPos,%smallPos);
  286. }
  287. }
  288. function continueRefill(%client,%take,%rayPos,%smallPos)
  289. {
  290. %fillBrick = getBrickAtPos(%smallPos,"0 0 0");
  291. %fillBrick.Refill(%client,%take,%rayPos);
  292. }
  293. function getBrickAtPos(%pos,%box)
  294. {
  295. InitContainerBoxSearch(%pos,%box,$TypeMasks::fxBrickObjectType);
  296. %obj = containerSearchNext();
  297. if(isObject(%obj))
  298. {
  299. return %obj;
  300. }
  301. else
  302. {
  303. return 0;
  304. }
  305. }
  306. function fillPos(%pos,%size,%client,%colorId,%colorFx,%shapeFx,%rotation,%brickGroup)
  307. {
  308. if(%size $= "64x")
  309. {
  310. %DB = "brick32xCubeDirtData";
  311. for(%x=8;%x>=-8;%x-=16)
  312. {
  313. for(%y=8;%y>=-8;%y-=16)
  314. {
  315. for(%z=8;%z>=-8;%z-=16)
  316. {
  317. %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
  318. %brick = new fxDtsBrick()
  319. {
  320. position = %newPos;
  321. datablock = %DB;
  322. colorId = %colorId;
  323. colorFxId = %colorFxId;
  324. shapeFxId = %shapeFxId;
  325. client = %brickGroup.client;
  326. };
  327. %brick.isPlanted = 1;
  328. %brick.setTrusted(1);
  329. %error = %brick.plant();
  330. if(%error && %error != 2)
  331. {
  332. %brick.delete();
  333. }
  334. else
  335. {
  336. %brickGroup.add(%brick);
  337. }
  338. }
  339. }
  340. }
  341. }
  342. else if(%size $= "32x")
  343. {
  344. %DB = "brick16xCubeDirtData";
  345. for(%x=4;%x>=-4;%x-=8)
  346. {
  347. for(%y=4;%y>=-4;%y-=8)
  348. {
  349. for(%z=4;%z>=-4;%z-=8)
  350. {
  351. %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
  352. %brick = new fxDtsBrick()
  353. {
  354. position = %newPos;
  355. datablock = %DB;
  356. colorId = %colorId;
  357. colorFxId = %colorFxId;
  358. shapeFxId = %shapeFxId;
  359. client = %brickGroup.client;
  360. };
  361. %brick.isPlanted = 1;
  362. %brick.setTrusted(1);
  363. %error = %brick.plant();
  364. if(%error && %error != 2)
  365. {
  366. %brick.delete();
  367. }
  368. else
  369. {
  370. %brickGroup.add(%brick);
  371. }
  372. }
  373. }
  374. }
  375. }
  376. else if(%size $= "16x")
  377. {
  378. %DB = "brick8xCubeDirtData";
  379. for(%x=2;%x>=-2;%x-=4)
  380. {
  381. for(%y=2;%y>=-2;%y-=4)
  382. {
  383. for(%z=2;%z>=-2;%z-=4)
  384. {
  385. %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
  386. %brick = new fxDtsBrick()
  387. {
  388. position = %newPos;
  389. datablock = %DB;
  390. colorId = %colorId;
  391. colorFxId = %colorFxId;
  392. shapeFxId = %shapeFxId;
  393. client = %brickGroup.client;
  394. };
  395. %brick.isPlanted = 1;
  396. %brick.setTrusted(1);
  397. %error = %brick.plant();
  398. if(%error && %error != 2)
  399. {
  400. %brick.delete();
  401. }
  402. else
  403. {
  404. %brickGroup.add(%brick);
  405. }
  406. }
  407. }
  408. }
  409. }
  410. else if(%size $= "8x")
  411. {
  412. %DB = "brick4xCubeDirtData";
  413. for(%x=1;%x>=-1;%x-=2)
  414. {
  415. for(%y=1;%y>=-1;%y-=2)
  416. {
  417. for(%z=1;%z>=-1;%z-=2)
  418. {
  419. %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
  420. %brick = new fxDtsBrick()
  421. {
  422. position = %newPos;
  423. datablock = %DB;
  424. colorId = %colorId;
  425. colorFxId = %colorFxId;
  426. shapeFxId = %shapeFxId;
  427. client = %brickGroup.client;
  428. };
  429. %brick.isPlanted = 1;
  430. %brick.setTrusted(1);
  431. %error = %brick.plant();
  432. if(%error && %error != 2)
  433. {
  434. %brick.delete();
  435. }
  436. else
  437. {
  438. %brickGroup.add(%brick);
  439. }
  440. }
  441. }
  442. }
  443. }
  444. else if(%size $= "4x")
  445. {
  446. %DB = "brick2xCubeDirtData";
  447. for(%x=0.5;%x>=-0.5;%x--)
  448. {
  449. for(%y=0.5;%y>=-0.5;%y--)
  450. {
  451. for(%z=0.5;%z>=-0.5;%z--)
  452. {
  453. %newPos = vectorAdd(%pos,%x SPC %y SPC %z);
  454. %brick = new fxDtsBrick()
  455. {
  456. position = %newPos;
  457. datablock = %DB;
  458. colorId = %colorId;
  459. colorFxId = %colorFxId;
  460. shapeFxId = %shapeFxId;
  461. client = %brickGroup.client;
  462. };
  463. %brick.isPlanted = 1;
  464. %brick.setTrusted(1);
  465. %error = %brick.plant();
  466. if(%error && %error != 2)
  467. {
  468. %brick.delete();
  469. }
  470. else
  471. {
  472. %brickGroup.add(%brick);
  473. }
  474. }
  475. }
  476. }
  477. }
  478. // just stripped out bricks
  479. }
  480.  
  481. function onTrenchDig(%client,%pos,%brick)
  482. {
  483. if(%client.trenchDirt >= $TrenchDig::DirtCount)
  484. {
  485. %client.centerPrint("\c3You do not have enough room for any more dirt!",1);
  486. return 0;
  487. }
  488. else
  489. {
  490. if(!%client.isInfiniteMiner)
  491. {
  492. %client.trenchDirt++;
  493. %client.trenchBrick[%client.trenchDirt] = %brick.getColorID();
  494. }
  495. %brick.delete();
  496. %client.updateDirt();
  497. return 1;
  498. }
  499. }
  500.  
  501. function findSmallBrick(%brick,%Pos,%wantBrick)
  502. {
  503. %time = getRealTime();
  504. %DBName = %brick.getDatablock().getName();
  505. if(%wantBrick $= "brick2xCubeDirtData")
  506. {
  507. %increment = 1;
  508. switch$(%DBName)
  509. {
  510. case "brick64xCubeDirtData":
  511. %Min = -15.5;
  512. %Max = 15.5;
  513. case "brick32xCubeDirtData":
  514. %Min = -7.5;
  515. %Max = 7.5;
  516. case "brick16xCubeDirtData":
  517. %Min = -3.5;
  518. %Max = 3.5;
  519. case "brick8xCubeDirtData":
  520. %Min = -1.5;
  521. %Max = 1.5;
  522. case "brick4xCubeDirtData":
  523. %Min = -0.5;
  524. %Max = 0.5;
  525. case "brick2xCubeDirtData":
  526. return %brick.getPosition();
  527. default:
  528. return;
  529. }
  530. }
  531. else if(%wantBrick $= "brick4xCubeDirtData")
  532. {
  533. %increment = 2;
  534. switch$(%DBName)
  535. {
  536. case "brick64xCubeDirtData":
  537. %Min = -15;
  538. %Max = 15;
  539. case "brick32xCubeDirtData":
  540. %Min = -7;
  541. %Max = 7;
  542. case "brick16xCubeDirtData":
  543. %Min = -3;
  544. %Max = 3;
  545. case "brick8xCubeDirtData":
  546. %Min = -1;
  547. %Max = 1;
  548. case "brick4xCubeDirtData":
  549. return %brick.getPosition();
  550. case "brick2xCubeDirtData":
  551. return 0 TAB %brick.getPosition();
  552. default:
  553. return;
  554. }
  555. }
  556. else if(%wantBrick $= "brick8xCubeDirtData")
  557. {
  558. %increment = 4;
  559. switch$(%DBName)
  560. {
  561. case "brick64xCubeDirtData":
  562. %Min = -14;
  563. %Max = 14;
  564. case "brick32xCubeDirtData":
  565. %Min = -6;
  566. %Max = 6;
  567. case "brick16xCubeDirtData":
  568. %Min = -2;
  569. %Max = 2;
  570. case "brick8xCubeDirtData":
  571. return %brick.getPosition();
  572. default:
  573. return;
  574. }
  575. }
  576. else if(%wantBrick $= "brick16xCubeDirtData")
  577. {
  578. %increment = 8;
  579. switch$(%DBName)
  580. {
  581. case "brick64xCubeDirtData":
  582. %Min = -8;
  583. %Max = 8;
  584. case "brick32xCubeDirtData":
  585. %Min = -4;
  586. %Max = 4;
  587. case "brick16xCubeDirtData":
  588. return %brick.getPosition();
  589. default:
  590. return;
  591. }
  592. }
  593. else if(%wantBrick $= "brick32xCubeDirtData")
  594. {
  595. %increment = 16;
  596. switch$(%DBName)
  597. {
  598. case "brick64xCubeDirtData":
  599. %Min = -8;
  600. %Max = 8;
  601. case "brick32xCubeDirtData":
  602. return %brick.getPosition();
  603. default:
  604. return;
  605. }
  606. }
  607. for(%x = %Min;%x <= %Max;%x += %increment)
  608. {
  609. for(%y = %Min;%y <= %Max;%y += %increment)
  610. {
  611. for(%z = %Min;%z <= %Max;%z += %increment)
  612. {
  613. %rot = getWord(%brick.rotation,3);
  614. %smallPos = vectorAdd(%brick.getPosition(),%x SPC %y SPC %z);
  615. %Distance = vectorDist(%Pos,%smallPos);
  616. if(%Smallest $= "" || %Distance < %Smallest)
  617. {
  618. %SmallestPos = %smallPos;
  619. %Smallest = %Distance;
  620. }
  621. %count++;
  622. }
  623. }
  624. }
  625. talk("Task completed in" SPC getTimeString((getRealTime()-%time)/1000) SPC "with" SPC %count SPC "loops");
  626. return %SmallestPos;
  627. }
  628. function GameConnection::updateDirt(%this)
  629. {
  630. if(%this.isInfiniteMiner)
  631. {
  632. %Dirt = "°";
  633. }
  634. else
  635. {
  636. %Dirt = %this.trenchDirt;
  637. }
  638. %this.bottomPrint("\c3" @ %Dirt @ "\c6/\c3" @ $TrenchDig::dirtCount @ " dirt",-1);
  639. }
  640.  
  641.  
  642. // ______________________
  643. //| |
  644. //| Regrouping Functions |
  645. //|______________________|
  646.  
  647. function fxDtsBrick::checkBricks(%this,%client)
  648. {
  649. %pos1 = %this.getPosition();
  650. %DBName = %this.getDatablock().getName();
  651. %Data = %this.getDatablock();
  652. %rot=round(getWord(%this.rotation,3));
  653. if(%rot==90 || %rot == 270)
  654. {
  655. %sizeX= %Data.brickSizeY;
  656. %sizeY = %Data.brickSizeX;
  657. }
  658. else
  659. {
  660. %sizeX = %Data.brickSizeX;
  661. %sizeY = %Data.brickSizeY;
  662. }
  663. %sizeZ = %Data.brickSizeZ*0.2+0.3;
  664.  
  665. %box = (%sizeX*0.5+0.6) SPC (%sizeY*0.5+0.6) SPC %sizeZ;
  666. if(%DBName $= "brick2xCubeDirtData")
  667. {
  668. %size = 1;
  669. %stringSize = "1";
  670. %oppSize = -1;
  671. %div = 2;
  672. InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
  673. }
  674. else if(%DBName $= "brick4xCubeDirtData")
  675. {
  676. %size = 2;
  677. %stringSize = "2";
  678. %oppSize = "-2";
  679. %div = 1;
  680. InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
  681. }
  682. else if(%DBName $= "brick8xCubeDirtData")
  683. {
  684. %size = 4;
  685. %stringSize = "4";
  686. %oppSize = "-4";
  687. %div = 0.5;
  688. InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
  689. }
  690. else if(%DBName $= "brick16xCubeDirtData")
  691. {
  692. %size = 8;
  693. %stringSize = "8";
  694. %oppSize = "-8";
  695. %div = 0.25;
  696. %large = 1;
  697. InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
  698. }
  699. else if(%DBName $= "brick32xCubeDirtData")
  700. {
  701. %size = 16;
  702. %stringSize = "16";
  703. %oppSize = "-16";
  704. %div = 0.125;
  705. %large = 1;
  706. InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
  707. }
  708. // 64x wasn't here by default?
  709. else if(%DBName $= "brick64xCubeDirtData")
  710. {
  711. %size = 32;
  712. %stringSize = "32";
  713. %oppSize = "-32";
  714. %div = 0.0625;
  715. %large = 1;
  716. InitContainerBoxSearch(%pos1,%box,$TypeMasks::fxBrickObjectType);
  717. }
  718. else
  719. {
  720. return;
  721. }
  722.  
  723. %puzzleComplete = 0;
  724. %puzzlePos = "0 0 0";
  725. while(isObject(%next = containerSearchNext()))
  726. {
  727. if(%next.getDatablock().getName() $= %DBName && %next.isPlanted && %next.getDatablock().isTrenchDirt)
  728. {
  729. %pos2 = %next.getPosition();
  730. %Sub = vectorSub(%pos1,%pos2);
  731.  
  732. switch$(%Sub)
  733. {
  734. case %stringSize SPC "0 0":
  735. %puzzleComplete++;
  736. %smallBrick[1,0,0] = %next;
  737. %puzzleDir[1,-1,1] += 1;
  738. %puzzleDir[1,1,1] += 1;
  739. %puzzleDir[1,-1,-1] += 1;
  740. %puzzleDir[1,1,-1] += 1;
  741. case %oppSize SPC "0 0":
  742. %puzzleComplete++;
  743. %smallBrick[-1,0,0] = %next;
  744. %puzzleDir[-1,1,1] += 1;
  745. %puzzleDir[-1,-1,1] += 1;
  746. %puzzleDir[-1,1,-1] += 1;
  747. %puzzleDir[-1,-1,-1] += 1;
  748. case "0" SPC %stringSize SPC "0":
  749. %puzzleComplete++;
  750. %smallBrick[0,1,0] = %next;
  751. %puzzleDir[1,1,1] += 1;
  752. %puzzleDir[-1,1,1] += 1;
  753. %puzzleDir[1,1,-1] += 1;
  754. %puzzleDir[-1,1,-1] += 1;
  755. case "0" SPC %oppSize SPC "0":
  756. %puzzleComplete++;
  757. %smallBrick[0,-1,0] = %next;
  758. %puzzleDir[1,-1,1] += 1;
  759. %puzzleDir[-1,-1,1] += 1;
  760. %puzzleDir[1,-1,-1] += 1;
  761. %puzzleDir[-1,-1,-1] += 1;
  762. case %stringSize SPC %stringSize SPC "0":
  763. %puzzleComplete++;
  764. %smallBrick[1,1,0] = %next;
  765. %puzzleDir[1,1,-1] += 1;
  766. %puzzleDir[1,1,1] += 1;
  767. case %stringSize SPC %oppSize SPC "0":
  768. %puzzleComplete++;
  769. %smallBrick[1,-1,0] = %next;
  770. %puzzleDir[1,-1,1] += 1;
  771. %puzzleDir[1,-1,-1] += 1;
  772. case %oppSize SPC %stringSize SPC "0":
  773. %puzzleComplete++;
  774. %smallBrick[-1,1,0] = %next;
  775. %puzzleDir[-1,1,1] += 1;
  776. %puzzleDir[-1,1,-1] += 1;
  777. case %oppSize SPC %oppSize SPC "0":
  778. %puzzleComplete++;
  779. %smallBrick[-1,-1,0] = %next;
  780. %puzzleDir[-1,-1,1] += 1;
  781. %puzzleDir[-1,-1,-1] += 1;
  782.  
  783. case %stringSize SPC "0" SPC %stringSize:
  784. %puzzleComplete++;
  785. %smallBrick[1,0,1] = %next;
  786. %puzzleDir[1,-1,1] += 1;
  787. %puzzleDir[1,1,1] += 1;
  788. case %oppSize SPC "0" SPC %stringSize:
  789. %puzzleComplete++;
  790. %smallBrick[-1,0,1] = %next;
  791. %puzzleDir[-1,1,1] += 1;
  792. %puzzleDir[-1,-1,1] += 1;
  793. case "0" SPC %stringSize SPC %stringSize:
  794. %puzzleComplete++;
  795. %smallBrick[0,1,1] = %next;
  796. %puzzleDir[1,1,1] += 1;
  797. %puzzleDir[-1,1,1] += 1;
  798. case "0" SPC %oppSize SPC %stringSize:
  799. %puzzleComplete++;
  800. %smallBrick[0,-1,1] = %next;
  801. %puzzleDir[1,-1,1] += 1;
  802. %puzzleDir[-1,-1,1] += 1;
  803. case %stringSize SPC %stringSize SPC %stringSize:
  804. %puzzleComplete++;
  805. %smallBrick[1,1,1] = %next;
  806. %puzzleDir[1,1,1] += 1;
  807. case %stringSize SPC %oppSize SPC %stringSize:
  808. %puzzleComplete++;
  809. %smallBrick[1,-1,1] = %next;
  810. %puzzleDir[1,-1,1] += 1;
  811. case %oppSize SPC %stringSize SPC %stringSize:
  812. %puzzleComplete++;
  813. %smallBrick[-1,1,1] = %next;
  814. %puzzleDir[-1,1,1] += 1;
  815. case %oppSize SPC %oppSize SPC %stringSize:
  816. %puzzleComplete++;
  817. %smallBrick[-1,-1,1] = %next;
  818. %puzzleDir[-1,-1,1] += 1;
  819. case "0 0" SPC %stringSize:
  820. %puzzleComplete++;
  821. %smallBrick[0,0,1] = %next;
  822. %puzzleDir[1,1,1] += 1;
  823. %puzzleDir[-1,1,1] += 1;
  824. %puzzleDir[-1,-1,1] += 1;
  825. %puzzleDir[1,-1,1] += 1;
  826.  
  827. case %stringSize SPC "0" SPC %oppSize:
  828. %puzzleComplete++;
  829. %smallBrick[1,0,-1] = %next;
  830. %puzzleDir[1,-1,-1] += 1;
  831. %puzzleDir[1,1,-1] += 1;
  832. case %oppSize SPC "0" SPC %oppSize:
  833. %puzzleComplete++;
  834. %smallBrick[-1,0,-1] = %next;
  835. %puzzleDir[-1,1,-1] += 1;
  836. %puzzleDir[-1,-1,-1] += 1;
  837. case "0" SPC %stringSize SPC %oppSize:
  838. %puzzleComplete++;
  839. %smallBrick[0,1,-1] = %next;
  840. %puzzleDir[1,1,-1] += 1;
  841. %puzzleDir[-1,1,-1] += 1;
  842. case "0" SPC %oppSize SPC %oppSize:
  843. %puzzleComplete++;
  844. %smallBrick[0,-1,-1] = %next;
  845. %puzzleDir[1,-1,-1] += 1;
  846. %puzzleDir[-1,-1,-1] += 1;
  847. case %stringSize SPC %stringSize SPC %oppSize:
  848. %puzzleComplete++;
  849. %smallBrick[1,1,-1] = %next;
  850. %puzzleDir[1,1,-1] += 1;
  851. case %stringSize SPC %oppSize SPC %oppSize:
  852. %puzzleComplete++;
  853. %smallBrick[1,-1,-1] = %next;
  854. %puzzleDir[1,-1,-1] += 1;
  855. case %oppSize SPC %stringSize SPC %oppSize:
  856. %puzzleComplete++;
  857. %smallBrick[-1,1,-1] = %next;
  858. %puzzleDir[-1,1,-1] += 1;
  859. case %oppSize SPC %oppSize SPC %oppSize:
  860. %puzzleComplete++;
  861. %smallBrick[-1,-1,-1] = %next;
  862. %puzzleDir[-1,-1,-1] += 1;
  863. case "0 0" SPC %oppSize:
  864. %puzzleComplete++;
  865. %smallBrick[0,0,-1] = %next;
  866. %puzzleDir[1,1,-1] += 1;
  867. %puzzleDir[-1,1,-1] += 1;
  868. %puzzleDir[-1,-1,-1] += 1;
  869. %puzzleDir[1,-1,-1] += 1;
  870. }
  871. }
  872. }
  873. if(%puzzleComplete >= 7)
  874. {
  875. for(%a = -1;%a <= 1;%a++)
  876. {
  877. for(%b = -1;%b <= 1;%b++)
  878. {
  879. for(%c = -1;%c <= 1;%c++)
  880. {
  881. %cur = %puzzleDir[%a,%b,%c];
  882. if(%highest $= "" || %cur > %highest)
  883. {
  884. %highest = %cur;
  885. %highA = %a;
  886. %highB = %b;
  887. %highC = %c;
  888. }
  889. }
  890. }
  891. }
  892. if(%highest < 7)
  893. {
  894. return;
  895. }
  896. %pos = vectorAdd(%this.getPosition(),%highA/%div*-1 SPC %highB/%div*-1 SPC %highC/%div*-1);
  897. %BGClient = %this.getGroup().client;
  898. %BG = %this.getGroup();
  899.  
  900. %majorColor = 42;
  901.  
  902. %this.schedule(0,delete);
  903. %smallBrick[%highA,0,0].schedule(0,delete);
  904. %smallBrick[0,%highB,0].schedule(0,delete);
  905. %smallBrick[%highA,%highB,0].schedule(0,delete);
  906. %smallBrick[%highA,0,%highC].schedule(0,delete);
  907. %smallBrick[0,%highB,%highC].schedule(0,delete);
  908. %smallBrick[%highA,%highB,%highC].schedule(0,delete);
  909. %smallBrick[0,0,%highC].schedule(0,delete);
  910.  
  911. if(%large)
  912. {
  913. %sched = 100;
  914. }
  915. else
  916. {
  917. %sched = 1;
  918. }
  919.  
  920. schedule(%sched,0,finishRegrouping,%pos,%DBName,%majorColor,%BGclient,%BG,%client);
  921. }
  922. }
  923.  
  924. function finishRegrouping(%pos,%DBName,%colorID,%client,%BG,%difClient)
  925. {
  926. if(%DBName $= "brick2xCubeDirtData")
  927. {
  928. %DB = brick4xCubeDirtData;
  929. }
  930. else if(%DBName $= "brick4xCubeDirtData")
  931. {
  932. %DB = brick8xCubeDirtData;
  933. }
  934. else if(%DBName $= "brick8xCubeDirtData")
  935. {
  936. %DB = brick16xCubeDirtData;
  937. }
  938. else if(%DBName $= "brick16xCubeDirtData")
  939. {
  940. %DB = brick32xCubeDirtData;
  941. }
  942. else if(%DBName $= "brick32xCubeDirtData")
  943. {
  944. %DB = brick64xCubeDirtData;
  945. }
  946. %newBrick = new fxDtsBrick()
  947. {
  948. position = %pos;
  949. datablock = %DB;
  950. colorId = %colorId;
  951. client = %client;
  952. colorFxId = 0;
  953. shapeFxId = 0;
  954. };
  955. %newBrick.isPlanted=1;
  956. %newBrick.setTrusted(1);
  957. %error = %newBrick.plant();
  958. if(%error && %error != 2)
  959. {
  960. %newBrick.delete();
  961. return;
  962. }
  963. %BG.add(%newBrick);
  964.  
  965. // Fixing getting stuck within the brick
  966. if(isObject(%client.player))
  967. {
  968. %pos = %client.player.getPosition();
  969. %raycast = containerRayCast(%pos,vectorAdd(%pos,"0 0 -0.1"),$TypeMasks::fxBrickObjectType,%client.player);
  970. %obj = firstWord(%raycast);
  971. if(%obj == %newBrick)
  972. {
  973. %client.player.addVelocity("0 0 3");
  974. }
  975. }
  976.  
  977. if(%DBName !$= brick32xCubeDirtData)
  978. {
  979. %newBrick.schedule(2,checkBricks);
  980. }
  981. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement