Advertisement
Guest User

Infinibox

a guest
May 4th, 2015
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.10 KB | None | 0 0
  1. @name InfiniBlox
  2. @inputs
  3. @outputs
  4. @persist [Loc BoxSize]:vector [AE C O New Vtx]:entity X [LSLExp Resources BlockNames Mats Sounds Bedrock InTNTRange]:array
  5. @persist [BlockModel]:string BaseL BaseW BBB BB B Row BBY BreakInt Exp Q
  6. @persist BuildInt Num Pick Axe BBT
  7.  
  8. interval(30)
  9.  
  10. if(first() | dupefinished()){
  11. runOnChat(1)
  12. Axe=1
  13. Pick=1
  14. BBB=1
  15. BaseL=5
  16. BaseW=6
  17. BlockModel="models/hunter/blocks/cube1x1x1.mdl"
  18. AE=propSpawn(BlockModel,1)
  19. C=propSpawn(BlockModel,entity():toWorld(vec(0,0,AE:boxSize():z()/2)),entity():angles():setPitch(0),1)
  20. BoxSize=C:boxSize()
  21. propSpawn(BlockModel,C:toWorld(vec(BoxSize:x()*((B/20)-0.025*(B/20)),0,BoxSize:z())),C:angles(),1):setMaterial("models/props_wasteland/rockcliff02b")
  22. AE:propDelete()
  23. O=owner()
  24. holoCreate(1,O:toWorld(vec(25,10,40)))
  25. holoAng(1,O:eyeAngles())
  26. holoParentAttachment(1,O,"chest")
  27. holoAlpha(1,0)
  28. X=1
  29. Mats[1,string]="models/props_canal/metalwall005b",BlockNames[1,string]="Metal"
  30. Mats[2,string]="models/props_wasteland/rockcliff02b",BlockNames[2,string]="Rock"
  31. Mats[3,string]="models/props_combine/health_charger_glass",BlockNames[3,string]="Glass"
  32. Mats[4,string]="models/props/CS_militia/roofbeams01",BlockNames[4,string]="Wood"
  33. Mats[5,string]="models/props_foliage/tree_deciduous_01a_trunk",BlockNames[5,string]="Tree"
  34. Mats[6,string]="brick/brick_model",BlockNames[6,string]="Brick"
  35. Mats[7,string]="models/props_wasteland/dirtwall001a",BlockNames[7,string]="Dirt"
  36. Mats[8,string]="phoenix_storms/barrel_fps",BlockNames[8,string]="TNT"
  37. Mats[9,string]="models/props_c17/furnituremetal001a",BlockNames[9,string]="Sand"
  38. Sounds[1,string]="physics/metal/metal_barrel_impact_soft4.wav"
  39. Sounds[2,string]="physics/concrete/concrete_impact_hard3.wav"
  40. Sounds[3,string]="physics/glass/glass_impact_soft3.wav"
  41. Sounds[4,string]="physics/wood/wood_crate_impact_soft2.wav"
  42. Sounds[5,string]="physics/wood/wood_crate_impact_soft2.wav"
  43. Sounds[6,string]="physics/concrete/rock_impact_hard1.wav"
  44. Sounds[7,string]="physics/concrete/rock_impact_soft1.wav"
  45. Sounds[8,string]="physics/metal/metal_barrel_impact_soft4.wav"
  46. Sounds[9,string]="physics/surfaces/sand_impact_bullet3.wav"
  47. C:setMaterial("models/props_debris/plasterwall009d")
  48. print("Welcome To InfiniBlox, made by Chicken. :D Take out your crowbar once your world has been created and use Mouse 1, Mouse 2, Use and Reload key to create and remove blocks and to change their materials! Type /conversions to see material conversions.")
  49. }
  50.  
  51. if(BBB){
  52. BB+=0.5
  53. if(BB/20<=max(BaseL,BaseW)){
  54. for(B=0,max(BaseL,BaseW)*20,20){
  55. if(BB==B){
  56. if(BB/20<=BaseL-1){
  57. propSpawn(BlockModel,entity():toWorld(vec(BoxSize:x()*((B/20)-0.025*(B/20)),0,BoxSize:z()/2)),C:angles(),1):setMaterial("models/props_debris/plasterwall009d")
  58. propSpawn(BlockModel,entity():toWorld(vec(BoxSize:x()*((B/20)-0.025*(B/20)),0,BoxSize:z()*1.499)),C:angles(),1):setMaterial("models/props_wasteland/rockcliff02b")
  59. }
  60. if(BB/20<=BaseW-1){
  61. Bedrock[BB/20,entity]=propSpawn(BlockModel,entity():toWorld(vec(0,BoxSize:y()*((B/20)-0.025*(B/20)),BoxSize:z()/2)),C:angles(),1)
  62. Bedrock[BB/20,entity]:setMaterial("models/props_debris/plasterwall009d")
  63. propSpawn(BlockModel,Bedrock[BB/20,entity]:toWorld(vec(0,0,BoxSize:z())),C:angles(),1):setMaterial("models/props_wasteland/rockcliff02b")
  64. }
  65. }
  66. }
  67. }else{
  68. if(BaseW>1){
  69. BBY=1
  70. Row=1
  71. }
  72. BBB=0
  73. BB=0
  74. }
  75. }elseif(BBY){
  76. if(BaseW>Row & BB/20>=BaseL-1){
  77. Row++
  78. BB=0
  79. }
  80. BB+=0.5
  81. if(BB/20<=BaseL-1){
  82. for(B=0,BaseL*20,20){
  83. if(BB==B & Bedrock[Row,entity]){
  84. propSpawn(BlockModel,Bedrock[Row,entity]:toWorld(vec(BoxSize:x()*((B/20)-0.025*(B/20)),0,0)),Bedrock[Row,entity]:angles(),1):setMaterial("models/props_debris/plasterwall009d")
  85. propSpawn(BlockModel,Bedrock[Row,entity]:toWorld(vec(BoxSize:x()*((B/20)-0.025*(B/20)),0,BoxSize:z())),Bedrock[Row,entity]:angles(),1):setMaterial("models/props_wasteland/rockcliff02b")
  86. }
  87. }
  88. }
  89. if(Row>Bedrock:count()){
  90. BBY=0
  91. BBT=1
  92. BB=0
  93. Row=1
  94. }
  95. }elseif(BBT){
  96. BB+=0.5
  97. if(BB/20>=BaseL & BaseW+1>Row){
  98. propSpawn(BlockModel, Bedrock[Row,entity]:toWorld(vec(0,0,BoxSize:z()*2)),C:angles(),1):setMaterial("models/props_wasteland/dirtwall001a")
  99. Row++
  100. BB=0
  101. }
  102. for(B=0,BaseL*20,20){
  103. if(BB==B & Bedrock[Row,entity]){
  104. propSpawn(BlockModel, Bedrock[Row,entity]:toWorld(vec(BoxSize:x()*((B/20)-0.025*(B/20)),0,BoxSize:z()*2)),Bedrock[Row,entity]:angles(),1):setMaterial("models/props_wasteland/dirtwall001a")
  105. if(Row==BaseW-1){
  106. propSpawn(BlockModel, Bedrock[Row,entity]:toWorld(vec(BoxSize:x()*((B/20)-0.025*(B/20)),-(BoxSize:y()*(BaseW-1))+(0.025*(BaseW-1)*BoxSize:y()),BoxSize:z()*2)),Bedrock[Row,entity]:angles(),1):setMaterial("models/props_wasteland/dirtwall001a")
  107. }
  108. }
  109. }
  110. if(Row==BaseW-1 & BB/20==BaseL-1){
  111. BBT=0
  112. propSpawn("models/props_foliage/tree_deciduous_03a.mdl",C:toWorld(vec(0,0,BoxSize:z())*2.5),C:angles(),1)
  113. propSpawn("models/props_wasteland/rockgranite02b.mdl",Bedrock[1,entity]:toWorld(vec(0,0,BoxSize:z()*3)),C:angles(),1)
  114. }
  115. }else{
  116.  
  117. if(!C){selfDestruct()}
  118.  
  119. if(O:weapon():type()=="weapon_crowbar"){
  120. AE=O:aimEntity()
  121.  
  122. Loc=round(AE:toLocal(O:aimPos()))
  123.  
  124. if(AE:model()==BlockModel){
  125. if(O:shootPos():distance(AE:pos())<300){
  126. if(O:keyAttack2() & Resources[X,number]>0){
  127. BuildInt++
  128. if(changed(O:keyAttack2())|BuildInt>7){
  129. propSpawnEffect(0)
  130. if(abs(Loc:x())==round((BoxSize/2):x()) & AE:getMaterial()!="models/props_debris/plasterwall009d"){
  131. New=propSpawn(BlockModel,AE:toWorld(Loc:setY(0):setZ(0)*1.975),AE:angles(),1)
  132. }elseif(abs(Loc:y())==round((BoxSize/2):y())&AE:getMaterial()!="models/props_debris/plasterwall009d"){
  133. New=propSpawn(BlockModel,AE:toWorld(Loc:setX(0):setZ(0)*1.975),AE:angles(),1)
  134. }elseif(abs(Loc:z())==round((BoxSize/2):z())){
  135. New=propSpawn(BlockModel,AE:toWorld(Loc:setX(0):setY(0)*1.975),AE:angles(),1)
  136. }
  137.  
  138. New:setMaterial(Mats[X,string])
  139. soundPurge()
  140. if((owner():shootPos()-vec(0,0,BoxSize:z()-35)):distance(New:pos())<BoxSize:z()){
  141. New:propDelete()
  142. }else{
  143. Resources[X,number]=Resources[X,number]-1
  144. if(Resources[X,number]<0){Resources[X,number]=0}
  145. New:soundPlay(1,0,Sounds[X,string])
  146. }
  147. BuildInt=0
  148. }
  149. }
  150.  
  151. if(O:keyAttack1()){
  152. BreakInt++
  153. if(BreakInt>25){
  154. if(AE:getMaterial()!="models/props_debris/plasterwall009d"){
  155. if(AE:getMaterial()=="phoenix_storms/barrel_fps"){
  156. propSpawn("models/props_c17/oildrum001_explosive.mdl",AE:pos(),AE:angles(),1):propBreak()
  157. findInSphere(AE:pos(),50)
  158. findIncludeModel(BlockModel)
  159. InTNTRange=findToArray()
  160. for(Exp=1,InTNTRange:count()){
  161. if(InTNTRange[Exp,entity]:getMaterial()!="models/props_debris/plasterwall009d" & InTNTRange[Exp,entity]:model()==BlockModel){
  162. InTNTRange[Exp,entity]:propDelete()
  163. }
  164. }
  165. }
  166. soundStop(0)
  167. AE:soundPlay(0,3,"physics/concrete/concrete_break3.wav")
  168. AE:propDelete()
  169. BreakInt=0
  170. }
  171. }
  172. }else{BreakInt=0}
  173. }
  174. }elseif(O:pos():distance(AE:pos())<300 & O:keyAttack1()){
  175. if(AE:model()=="models/props_foliage/tree_deciduous_03a.mdl"){
  176. Resources[5,number]=Resources[5,number]+0.25*Axe
  177. }
  178. if(AE:model()=="models/props_wasteland/rockgranite02b.mdl"){
  179. Random=randint(10)
  180. if(Random<5){
  181. Resources[2,number]=Resources[2,number]+0.5*Pick
  182. }elseif(Random<8){
  183. Resources[9,number]=Resources[9,number]+0.5*Pick
  184. }elseif(Random<10){
  185. Resources[7,number]=Resources[7,number]+0.5*Pick
  186. }
  187. }
  188. }
  189.  
  190. if(changed(O:keyReload()) & O:keyReload()){
  191. X++
  192. if(X>Mats:count()){
  193. X=1
  194. }
  195. }
  196.  
  197. if(changed(O:keyUse()) & O:keyUse()){
  198. X--
  199. if(X<1){
  200. X=Mats:count()
  201. }
  202. }
  203.  
  204. print(4,BlockNames[X,string]+": "+round(Resources[X,number]):toString())
  205.  
  206. holoAlpha(1,255)
  207. holoMaterial(1,Mats[X,string])
  208.  
  209. if(chatClk(O)){
  210. LSLExp=O:lastSaid():lower():explode(" ")
  211.  
  212. if(LSLExp[1,string]=="/craft"){
  213. hideChat(1)
  214. Num=LSLExp[2,string]:toNumber()
  215.  
  216. if(LSLExp[3,string]=="wood"){
  217. Resources[4,number]=Resources[4,number]+clamp(Num,0,Resources[5,number])
  218. Resources[5,number]=Resources[5,number]-clamp(Num,0,Resources[5,number])
  219. }
  220.  
  221. if(LSLExp[3,string]=="metal"){
  222. Resources[1,number]=Resources[1,number]+clamp(Num,0,Resources[2,number]/4)
  223. Resources[2,number]=Resources[2,number]-clamp(Num*4,0,Resources[2,number])
  224. }
  225.  
  226. if(LSLExp[3,string]=="glass"){
  227. Resources[3,number]=Resources[3,number]+clamp(Num,0,Resources[9,number])
  228. Resources[9,number]=Resources[9,number]-clamp(Num,0,Resources[9,number])
  229. }
  230.  
  231. if(LSLExp[3,string]=="brick"){
  232. Resources[6,number]=Resources[6,number]+clamp(Num,0,Resources[2,number]/3)
  233. Resources[2,number]=Resources[2,number]-clamp(Num*3,0,Resources[2,number])
  234. }
  235.  
  236. if(LSLExp[3,string]=="tnt"){
  237. Resources[8,number]=Resources[8,number]+clamp(Num,0,Resources[1,number]/10)
  238. Resources[1,number]=Resources[1,number]-clamp(Num*10,0,Resources[1,number])
  239. }
  240.  
  241. if(LSLExp[2,string]=="pick"){
  242. if(Resources[4,number]>=25 & Resources[1,number]>=15){
  243. Resources[4,number]=Resources[4,number]-25
  244. Resources[1,number]=Resources[1,number]-15
  245. print("Crafted! Rock-mining time lowered.")
  246. Pick=2
  247. }else{
  248. print("Insufficient Materials.")
  249. }
  250. }
  251.  
  252. if(LSLExp[2,string]=="axe"){
  253. if(Resources[4,number]>=20 & Resources[1,number]>=10){
  254. Resources[4,number]=Resources[4,number]-20
  255. Resources[1,number]=Resources[1,number]-10
  256. print("Crafted! Tree-Chopping time lowered.")
  257. Axe=2
  258. }else{
  259. print("Insufficient Materials.")
  260. }
  261. }
  262. }elseif(LSLExp[1,string]=="/conversions"){
  263. hideChat(1)
  264. if(concmd("echo __CONVERSIONS__")){
  265. hint("Conversions Printed To Console",10)
  266. concmd("echo To Convert, type /craft quantityNum blockType")
  267. concmd("echo 1 Tree -> 1 Wood")
  268. concmd("echo 4 Rock -> 1 Metal")
  269. concmd("echo 1 Sand -> 1 Glass")
  270. concmd("echo 3 Rock -> 1 Brick")
  271. concmd("echo 10 Metal -> 1 TNT")
  272. concmd("echo 25 Wood & 15 Metal -> Mining Pick")
  273. concmd("echo 20 Wood & 10 Metal -> Axe")
  274. }else{
  275. print("Type 'wire_expression2_concmd 1' in console and try again.")
  276. }
  277. }
  278. }
  279. }else{
  280. holoAlpha(1,0)
  281. }
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement