Advertisement
electronic_steve

ocs : test

Mar 14th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 8.12 KB | None | 0 0
  1.  
  2. mapX=9
  3. mapY=9
  4. mapZ=9
  5. map={}
  6. drawz=1
  7. winloop=0
  8. drawscale=10
  9. htime=0
  10. groups={}
  11. dim={}
  12. dims={}
  13. drawx=0
  14. drawy=0
  15. npower=0
  16. GroupPower={}
  17. SumOfDimensions={}
  18. GroupSumPower=0
  19. maps={}
  20. TotalNumberOfBlocksInAllGroups=0
  21. failstep=0
  22. maxloop=0
  23. loop=0
  24. drawblocks=0
  25. test=0
  26. --bush
  27. bush={}
  28. start=1
  29. draw=true
  30. blocksmap={}
  31. component=require("component")
  32.  component.hologram.setScale(10)
  33. font={}
  34. font[0]={
  35. {0,1,1,1,0},
  36. {1,0,0,0,1},
  37. {1,0,0,0,1},
  38. {1,0,0,0,1},
  39. {0,1,1,1,0}
  40. }
  41. font[1]=
  42. {
  43. {0,0,1,0,0},
  44. {0,1,1,0,0},
  45. {0,0,1,0,0},
  46. {0,0,1,0,0},
  47. {1,1,1,1,1}
  48. }
  49. font[2]=
  50. {
  51. {0,1,1,1,0},
  52. {1,0,0,0,1},
  53. {0,0,0,1,0},
  54. {0,0,1,0,0},
  55. {1,1,1,1,1}
  56. }
  57. font[3]=
  58. {
  59. {0,1,1,1,0},
  60. {1,0,0,0,1},
  61. {0,0,0,1,0},
  62. {1,0,0,0,1},
  63. {0,1,1,1,0}
  64. }
  65. font[4]=
  66. {
  67. {0,0,0,1,0},
  68. {0,0,1,1,0},
  69. {0,1,0,1,0},
  70. {0,1,1,1,1},
  71. {0,0,0,1,0}
  72. }
  73. font[5]=
  74. {
  75. {1,1,1,1,1},
  76. {1,0,0,0,0},
  77. {0,1,1,1,0},
  78. {0,0,0,0,1},
  79. {1,1,1,1,0}
  80. }
  81. font[6]=
  82. {
  83. {0,1,1,1,0},
  84. {1,0,0,0,0},
  85. {1,1,1,1,0},
  86. {1,0,0,0,1},
  87. {0,1,1,1,0}
  88. }
  89. font[7]=
  90. {
  91. {1,1,1,1,1},
  92. {0,0,0,0,1},
  93. {0,0,0,1,0},
  94. {0,0,1,0,0},
  95. {0,0,1,0,0}
  96. }
  97. font[8]=
  98. {
  99. {0,1,1,1,0},
  100. {1,0,0,0,1},
  101. {0,1,1,1,0},
  102. {1,0,0,0,1},
  103. {0,1,1,1,0}
  104. }
  105. font[9]=
  106. {
  107. {0,1,1,1,0},
  108. {1,0,0,0,1},
  109. {0,1,1,1,1},
  110. {0,0,0,0,1},
  111. {1,1,1,1,0}
  112. }
  113.  
  114.  
  115. function saveinblocksmap(x,y,z)
  116. blocksmap[#blocksmap+1]={x,y,z,map[x][y][z]}
  117.  
  118. end
  119. function getblockmap(i)
  120. return blocksmap[i][1],blocksmap[i][2],blocksmap[i][3],blocksmap[i][4]
  121.  
  122. end
  123. bush[1]= function(x,y,z)
  124. local radius=math.random(1,math.floor((mapX+mapY+mapZ)/3))
  125. for nx=-radius,radius do
  126.  for ny=-radius,radius do
  127.   for nz=-radius,radius do
  128.   local x2=limit(x+nx,mapX)
  129.   local y2=limit(y+ny,mapY)
  130.   local z2=limit(z+nz,mapZ)
  131.   --print(x2,y2,z2)
  132.    if map[x2][y2][z2]==-1
  133.    then map[x2][y2][z2]=-2 else
  134.    map[x2][y2][z2]=-1 end
  135.   end
  136.  end
  137.  end
  138. end
  139. bush[2]= function(x2,y,z)
  140.  for x=1,mapX do
  141.   if map[x][y][z]==-1
  142.   then map[x][y][z]=-2 else
  143.   map[x][y][z]=-1 end
  144.  end
  145.  
  146. end
  147. bush[3]= function(x,y2,z)
  148.  for y=1,mapY do
  149.   if map[x][y][z]==-1
  150.   then map[x][y][z]=-2 else
  151.   map[x][y][z]=-1 end
  152.  end
  153. end
  154. bush[4]= function(x,y,z2)
  155.  for z=1,mapZ do
  156.   if map[x][y][z]==-1
  157.   then map[x][y][z]=-2 else
  158.   map[x][y][z]=-1 end
  159.  end
  160. end
  161. bush[5]= function(x2,y2,z)
  162.  for x=1,x2 do
  163.   for y=1,y2 do
  164.    if math.random(1,2)==1 then
  165.     if map[x][y][z]==-1
  166.     then map[x][y][z]=-2 else
  167.     map[x][y][z]=-1 end
  168.    end
  169.   end
  170.  end
  171. end
  172.  
  173. bush[6]= function(x,y2,z2)
  174.  for z=1,z2 do
  175.   for y=1,y2 do
  176.    if math.random(1,2)==1 then
  177.     if map[x][y][z]==-1
  178.     then map[x][y][z]=-2 else
  179.     map[x][y][z]=-1 end
  180.  
  181.  end
  182.  end
  183.  end
  184.  end
  185. bush[7]= function(x2,y,z2)
  186. for x=1,x2 do
  187.  for z=1,z2 do
  188.  if math.random(1,2)==1 then
  189.   if map[x][y][z]==-1
  190. then map[x][y][z]=-2 else
  191.  map[x][y][z]=-1 end
  192.  
  193.  end
  194.  end
  195.  end
  196.  end
  197.  bush[8]= function(x2,y2,z)
  198. x=math.random(1,mapX)
  199. y=math.random(1,mapY)
  200. map[x][y][z]=-2
  201.  end
  202.  
  203.  
  204.  function generatemap()
  205.  local I=-1
  206.  local O=-2
  207. for x=1,mapX do
  208. map[x]={}
  209. maps[x]={}
  210. for y=1,mapY do
  211. map[x][y]={}
  212. maps[x][y]={}
  213. for z=1,mapZ do
  214. map[x][y][z]=-2
  215. maps[x][y][z]=-2
  216. end end end
  217. --[[
  218. for x=1,mapX,2 do
  219. for y=1,mapY,2 do
  220. for z=1,mapZ do
  221. map[x][y][z]=-1
  222. end end end
  223. ]]
  224.  
  225.  
  226.  
  227. for x=1,mapX do
  228. for y=1,mapY do
  229. for z=1,mapZ do
  230. maps[x][y][z]=map[x][y][z] end end end
  231.  
  232. end
  233. generatemap()  
  234.  
  235. function resetall()
  236. drawblocks=TotalNumberOfBlocksInAllGroups
  237. TotalNumberOfBlocksInAllGroups=0
  238. SumOfDimensions=nil
  239. SumOfDimensions={}
  240. SizePower=0
  241.  
  242. GroupPower=nil
  243. GroupPower={}
  244. GroupSumPower=0
  245.  
  246. end
  247. function mima(mi,n,ma)
  248. local x=math.min(n,ma)
  249.  
  250. local nx=math.max(mi,x)
  251.  
  252. return nx
  253. end  
  254.  
  255.  
  256. function resetmap()
  257. for I=1,#blocksmap do
  258. x,y,z,name=getblockmap(I)
  259.   if map[x][y][z]==-2 then else map[x][y][z]=-1 end
  260.    
  261.  
  262. end
  263.    groups=nil
  264. groups={}
  265.    dim=nil
  266. dim={}
  267. dims=nil
  268. dims={}
  269. blocksmap=nil
  270. blocksmap={}
  271. end
  272.  
  273. function limit(n,n1) -- 1=<n=<n1
  274. local x=math.min(n,n1)
  275. local nx=math.max(1,x)
  276. return nx
  277. end
  278.  
  279.  
  280. function updateall()
  281.  
  282. loop=loop+1
  283. if loop==maxloop then else
  284.  if loop==1 then  else
  285.  
  286. bush[math.random(1,#bush)](math.random(1,mapX),math.random(1,mapY),math.random(1,mapZ))
  287.  
  288.  end
  289.  
  290.  for x=1,mapX do
  291.  for y=1,mapY do
  292.   for z=1,mapZ do
  293.    
  294.   saveinblocksmap(x,y,z,map[x][y][z])
  295.  
  296.   end end end
  297.  
  298.  
  299.  
  300.  
  301.  
  302. local fail=0
  303. for I=1,#blocksmap do
  304. x,y,z,name=getblockmap(I)
  305.    if map[x][y][z]==-1 then
  306.     groups[#groups+1]={}
  307.     map[x][y][z]=#groups
  308.     dim[#groups]={}
  309.     dims[#groups]={}
  310.     for i=1,(mapX+mapY+mapZ)/3 do
  311.     for I2=1,#blocksmap do
  312. x2,y2,z2,name=getblockmap(I2)
  313.         if map[x2][y2][z2]==#groups then
  314.         reactorupdate(x2,y2,z2,-1,#groups) else fail=fail+1
  315.        
  316.        
  317.        
  318.       end
  319.    
  320.      
  321.    end
  322.   end
  323.  end
  324. end
  325. if #groups>0 then
  326. dim[#dim]={}
  327.  
  328.  for i=1, #dim do
  329.     for I2=1,#blocksmap do
  330. x,y,z,name=getblockmap(I2)
  331.      if map[x][y][z]==i then dim[i][#dim[i]+1]={x,y,z}
  332.    
  333.    
  334.    end
  335.   end
  336.  end
  337. end
  338.  
  339. for i=1, #groups do
  340. for n=1, #dim[i] do
  341.  
  342.    
  343.    
  344.    
  345.     if n==1 then
  346. minx=dim[i][n][1]
  347. maxx=dim[i][n][1]
  348. miny=dim[i][n][2]
  349. maxy=dim[i][n][2]
  350. minz=dim[i][n][3]
  351. maxz=dim[i][n][3]
  352.  else
  353. minx=math.min (dim[i][n][1],minx)
  354. maxx=math.max (dim[i][n][1],maxx)
  355. miny=math.min (dim[i][n][2],miny)
  356. maxy=math.max (dim[i][n][2],maxy)
  357. minz=math.min (dim[i][n][3],minz)
  358. maxz=math.max (dim[i][n][3],maxz)
  359.  
  360.  end
  361.  
  362.  
  363.  end
  364.  
  365.  dims[i]={maxx-(minx-1),maxy-(miny-1),maxz-(minz-1)}
  366.  
  367.  
  368.  
  369.  end
  370.  
  371.  for i=1, #groups do
  372.  SumOfDimensions[i]=dims[i][1]+dims[i][2]+dims[i][3]
  373.  SizePower = 2000000 / ( 1 + 1.000696^(-0.333*(SumOfDimensions[i]/3)^1.7)) - 1000000
  374.  
  375.  BlockPower = 25 * #dim[i]
  376.  SizePower =math.min(SizePower,1000000 )
  377.  GroupPower[i] = BlockPower + SizePower
  378.  
  379.   GroupSumPower=GroupSumPower+(SumOfDimensions[i]/3)^1.7
  380.  
  381.  
  382.  
  383.   TotalNumberOfBlocksInAllGroups = TotalNumberOfBlocksInAllGroups+#dim[i]
  384.   end
  385.   GroupSumSizePower = 2000000 / ( 1 + 1.000696^(-0.333 * GroupSumPower)) - 1000000
  386.   BlockPower = 25 * TotalNumberOfBlocksInAllGroups
  387.  TotalPower = math.floor(BlockPower + GroupSumSizePower)
  388.  
  389.  
  390.  
  391. if npower<TotalPower then    npower=TotalPower
  392.  
  393. savemap() else loadmap()
  394.  
  395.  failstep=failstep+1  end
  396. resetall()
  397. end
  398.  
  399. --[[
  400. winloop=winloop+1
  401. oldfile=reader(getmaxpowersave())
  402. local N=0
  403. local N2=1
  404. local N3=1
  405. local N4=1
  406. local table={}
  407.  for n in string.gmatch(oldfile, ".") do
  408.  if n=="&"then table[#table+1]=0
  409.  table[#table]=n
  410.  
  411. end end
  412. for i=1,#table do
  413. N=N+1
  414. if N==1 then mapX=table[i]
  415. elseif N==2 then mapY=table[i]
  416. elseif N==3 then mapZ=table[i]
  417. else
  418. if N2>mapX then N2=1 N3=N3+1 end
  419. if N3<mapY then N3=1 N4=N4+1 end
  420. map[N2][N3][N4]=table[i]
  421.  
  422.  
  423.  N2=N2+1
  424. end
  425.  
  426.  
  427. end
  428.  ]]
  429. end
  430.  
  431. function reactorupdate(x,y,z,d,d2)
  432.  
  433.  
  434.  
  435.     if  map[x][y][z]==d then map[x][y][z]=d2 end
  436.     if  map[limit(x+1,mapX)][y][z]==d then map[limit(x+1,mapX)][y][z]=d2 end
  437.     if  map[limit(x-1,mapX)][y][z]==d then map[limit(x-1,mapX)][y][z]=d2 end
  438.     if  map[x][limit(y+1,mapY)][z]==d then map[x][limit(y+1,mapY)][z]=d2 end
  439.     if  map[x][limit(y-1,mapY)][z]==d then map[x][limit(y-1,mapY)][z]=d2 end
  440.     if  map[x][y][limit(z+1,mapZ)]==d then map[x][y][limit(z+1,mapZ)]=d2 end
  441.     if  map[x][y][limit(z-1,mapZ)]==d then map[x][y][limit(z-1,mapZ)]=d2 end
  442.    
  443. end
  444.  
  445. function savemap()
  446.   for x=1,mapX do
  447.    for y=1,mapY do
  448.     for z=1,mapZ do
  449. maps[x][y][z]=map[x][y][z]
  450.  end end
  451. end end
  452. function loadmap()
  453.   for x=1,mapX do
  454.    for y=1,mapY do
  455.     for z=1,mapZ do
  456. map[x][y][z]=maps[x][y][z]
  457. end end
  458. end end  
  459. function mimat(mi,n,ma)
  460. if n<mi or n>ma then return false else return true end
  461.  
  462.  
  463. end
  464.  
  465. function update()
  466. math.randomseed(os.time()+math.random(-100000,1000000000))
  467. if start==1 then
  468.  updateall() end
  469. end
  470. function drawtext(text)
  471. text=tostring(text)
  472.  for w in string.gmatch(text, ".") do
  473.   for x=5,1,-1  do
  474.   for y=5,1,-1 do
  475.  
  476.  
  477.  
  478.  if font[tonumber(w)][y][x]==1 then
  479.  component.hologram.set(w*x,y , math.floor((48-mapZ)/2)+mapZ,true) end
  480.  
  481.  end end
  482.  end
  483. end
  484. function draw()
  485.  
  486.  
  487. for z=1,mapZ do
  488.  
  489. for x=1,mapY do
  490. for y=1,mapX do
  491. if  map[x][y][z]==-2 then
  492.  
  493.  else
  494. component.hologram.set(math.floor((48-mapX)/2)+x,y,math.floor((48-mapZ)/2)+z,true)
  495.  
  496. end
  497. end
  498. end
  499.  
  500.  
  501.  
  502.  
  503. end
  504. drawtext(1)
  505.  resetmap()
  506. end
  507.  
  508. while true do
  509. update()
  510. draw()
  511.  
  512. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement