Advertisement
Scriptis

[E2] Self-Store Service

Jun 21st, 2014
450
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.93 KB | None | 0 0
  1. @name Scriptis' Self-Store Service
  2. @inputs Scr:wirelink Amount UserTrigger:entity
  3. @persist Menu User:entity Use Draw Rate Selection Credit:table
  4. @trigger all
  5.  
  6. Draw=changed(Menu) | first() | changed(Scr)
  7. Use=User:keyUse()
  8. Use=changed(Use) & Use
  9. UserID=User:steamID()
  10. Bank=gTable("sBank")
  11.  
  12. if (changed(Amount)) {
  13. if ($Amount>0) {
  14. Credit[UserID,number]=Credit[UserID,number]+$Amount
  15. hint("Added $"+$Amount+" to "+UserID,3)
  16. }
  17. }
  18. #gtable sBank
  19. #array Safelist
  20. #array Userlist
  21. #table GlobalData
  22. #table Vaults
  23. #table VaultObject
  24. # 1 - number Owned
  25. # 2 - array Owners
  26. # string Owner
  27. # 3 - entity Door
  28. #string SteamID32 - table UserObject
  29. #number Timeleft
  30. #array Owned
  31.  
  32. GlobalData=Bank["Global",table]
  33. Vaults=GlobalData["Vaults",table]
  34.  
  35. if (User) {
  36. UserData=Bank[UserID,table]
  37. if (!UserData) {Bank[UserID,table]=table()}
  38. }
  39.  
  40. if (first()) {
  41. Rate=100 # $/Minute
  42. timer("Bankcounter",1000)
  43. function number pIR(Num:number) {
  44. local O=Scr:egpCursor(User)
  45. local Diff=Scr:egpSize(Num)/2
  46. local Pos=Scr:egpPos(Num)
  47. return inrange(O,Pos-Diff,Pos+Diff)
  48. }
  49. function sexybg(Scr:wirelink) {
  50. Scr:egpClear()
  51. Scr:egpBox(300,vec2(256),vec2(512))
  52. Scr:egpColor(300,vec(64))
  53. local Lines=5
  54. local Dist=512/Lines
  55. CurSelection=0
  56. for (I=1, Lines+2) {
  57. Scr:egpLine(I+200,vec2(Dist*(I-2),-5),vec2(Dist*I,517))
  58. Scr:egpSize(I+200,30)
  59. Scr:egpMaterial(I+200,"gui/gradient_down")
  60. Scr:egpColor(I+200,vec(32))
  61. }
  62. }
  63. function string prettyInt(N:number) {
  64. #print(N)
  65. local Str=ceil(N):toString():reverse():explode("")
  66. local Count=Str:count()
  67. local Add=1
  68. for (I=0, Str:count(), 3) {
  69. if (I!=0 & I!=Count & Str[I+1,string]) {Str:insertString(I+Add,",") Add++}
  70. }
  71. return Str:concat():reverse()
  72. }
  73. function string getTime(Num:number) {
  74. Min=floor(Num/60)
  75. Sec=Num-(Min*60)
  76. if (Sec>=10) {
  77. return ""+Min+":"+Sec
  78. } else {
  79. return ""+Min+":0"+Sec
  80. }
  81. }
  82. }
  83.  
  84.  
  85.  
  86. if (Menu==0) {
  87. if (Draw) {
  88. sexybg(Scr)
  89. Scr:egpBox(1,vec2(256),vec2(512,70))
  90. Scr:egpColor(1,vec(128))
  91. Scr:egpText(2,"Scriptis' Self-Store Service",vec2(256))
  92. Scr:egpSize(2,40)
  93. Scr:egpAlign(2,1,2)
  94. Scr:egpText(3,"Press anywhere to begin",vec2(256))
  95. Scr:egpAlign(3,1,0)
  96. Scr:egpSize(3,30)
  97.  
  98. }
  99. if (~UserTrigger) {
  100. #print("Trig")
  101. findByClass("player")
  102. User=findClosest(Scr:entity():pos())
  103.  
  104. if (Use & User:aimEntity()==Scr:entity()) {Bank["Username",table][User:steamID(),string]=User:name() Menu=1}
  105. }
  106. }
  107.  
  108. if (User & User:pos():distance(Scr:entity():pos())>100) {User=noentity() Menu=0}
  109. if (Menu==1) {
  110. if (Draw) {
  111. Scr:egpBox(1,vec2(256,32),vec2(512,64))
  112. Scr:egpColor(1,vec(64))
  113. for (I=1, 33) {
  114. local X=(512/32)*(I-2)
  115. Scr:egpLine(2+I,vec2(X+34.5,-5),vec2(X,60))
  116. Scr:egpSize(2+I,5)
  117. Scr:egpColor(2+I,vec(32))
  118. Scr:egpMaterial(2+I,"gui/gradient_down")
  119. }
  120.  
  121. #tab_home
  122. local XOffset=0
  123. local ID=39
  124. Scr:egpRoundedBox(ID,vec2(96+XOffset,64),vec2(85,79))
  125. Scr:egpColor(ID,vec(110))
  126.  
  127. Scr:egpBox(38,vec2(256,256+65.5),vec2(512,512))
  128. Scr:egpColor(38,vec(96))
  129.  
  130. Scr:egpLine(2,vec2(0,64),vec2(512,64))
  131. Scr:egpSize(2,5)
  132. Scr:egpColor(2,vec(110))
  133.  
  134. Scr:egpRoundedBox(ID+1,vec2(96+XOffset,64),vec2(80,74))
  135. Scr:egpColor(ID+1,vec(96))
  136.  
  137. Scr:egpText(ID+2,"BANK",Scr:egpPos(ID))
  138. Scr:egpAlign(ID+2,1,2)
  139. Scr:egpSize(ID+2,30)
  140. Scr:egpColor(ID+2,vec(255))
  141. #gtable sBank
  142. #table GlobalData
  143. #table Vaults
  144. # 1 - number Owned
  145. # 2 - array Owners
  146. # string Owner
  147. #string Username
  148. #number Timeleft
  149. #array Owned
  150.  
  151. if (UserData["SafeID",string]) {
  152. Scr:egpText(50,"SUMMARY",vec2(30,98))
  153. Scr:egpAlign(50,0,1)
  154. Scr:egpSize(50,30)
  155.  
  156. Scr:egpText(51,User:name()+" ("+UserID+")",vec2(30,110))
  157. Scr:egpText(52,"Time remaining: "+getTime(UserData["TimeLeft",number]),vec2(30,125))
  158. Scr:egpText(53,"Safe ID: "+UserData["SafeID",string],vec2(30,140))
  159. } else {
  160. Scr:egpText(50,"BUY A SAFE",vec2(30,98))
  161. Scr:egpAlign(50,0,1)
  162. Scr:egpSize(50,30)
  163. Scr:egpText(51,"Rate: $"+prettyInt(Rate)+" per minute",vec2(30,110))
  164. Scr:egpText(52,"Insert money and select a vault:",vec2(30,125))
  165. #gtable sBank
  166. #array Safelist
  167. #table GlobalData
  168. #table Vaults
  169. #table VaultObject
  170. # 1 - number Owned
  171. # 2 - array Owners
  172. # string Owner
  173. # 3 - entity Door
  174. #string SteamID32 - table UserObject
  175. #number Timeleft
  176. #array Owned
  177.  
  178. local Iteration=0
  179. foreach (NULL,V:string=Bank["Safelist",array]) {
  180. local Safe=Bank["GlobalData",table]["Vaults",table][V,table]
  181. if (!Safe[1,number]) {
  182. Iteration++
  183. local ID=Iteration*3+52
  184. Scr:egpBox(ID,vec2(128-37,135+(Iteration*15)),vec2(128,15))
  185. Scr:egpAlpha(ID,0)
  186. Scr:egpText(ID+1,V,vec2(30,135+(Iteration*15)))
  187. Scr:egpAlign(ID+1,0,1)
  188. }
  189. }
  190. if (Iteration==0) {
  191. Scr:egpText(52,"No safes available!",vec2(30,125))
  192. }
  193. Scr:egpText(100,"YOUR ACCOUNT",vec2(512-30,98))
  194. Scr:egpAlign(100,2,1)
  195. Scr:egpSize(100,25)
  196. Scr:egpText(101,"$"+prettyInt(Credit[UserID,number]),vec2(512-30,110))
  197. Scr:egpSize(101,20)
  198. Scr:egpColor(101,vec(0,255,0))
  199. Scr:egpAlign(101,2,0)
  200. Scr:egpText(102,getTime(floor(Credit[UserID,number]/Rate)*60),vec2(512-30,130))
  201. Scr:egpAlign(102,2,0)
  202. }
  203.  
  204. }
  205. if (!UserData["SafeID",string]) {
  206. Scr:egpSetText(101,"$"+prettyInt(Credit[UserID,number]))
  207. Scr:egpSetText(102,getTime(floor(Credit[UserID,number]/Rate)*60))
  208. local Iteration=0
  209. foreach (NULL,V:string=Bank["Safelist",array]) {
  210. local Safe=Bank["GlobalData",table]["Vaults",table][V,table]
  211. if (!Safe[1,number]) {
  212. Iteration++
  213. local ID=Iteration*3+52
  214. if (pIR(ID)) {
  215. Scr:egpAlpha(ID,32)
  216. if (Use & Credit[UserID,number]>=Rate) {
  217. hint("User "+UserID+" bought safe "+V,3)
  218. UserData["SafeID",string]=V
  219. UserData["Timeleft",number]=floor(Credit[UserID,number]/Rate)*60
  220. Credit[UserID,number]=Credit[UserID,number]%Rate
  221. Bank["GlobalData",table]["Vaults",table][V,table][2,array]:pushString(UserID)
  222. Bank["GlobalData",table]["Vaults",table][V,table][1,number]=1
  223. Bank["Userlist",array]:pushString(UserID)
  224. printColor(vec(255,255,0),"[sBank] ",vec(255),"User "+Bank["Username",table][UserID,string]+" has purchased safe "+V)
  225. Menu=2
  226. }
  227. #print(ID)
  228. } else {
  229. Scr:egpAlpha(ID,0)
  230. }
  231. }
  232. }
  233. } else { #Countdown & Add time
  234. if (Credit[UserID,number]>=Rate) {
  235. UserData["Timeleft",number]=UserData["Timeleft",number]+floor(Credit[UserID,number]/Rate)*60
  236. Credit[UserID,number]=Credit[UserID,number]%Rate
  237. printColor(vec(255,255,0),"[sBank] ",vec(255),Bank["Username",table][UserID,string]+" has added time to their safe.")
  238. }
  239. Scr:egpSetText(52,"Time remaining: "+getTime(UserData["Timeleft",number]))
  240. }
  241. }
  242.  
  243. if (Menu==2) {
  244. if (Draw) {
  245. sexybg(Scr)
  246. Scr:egpText(1,"Purchase succeeded!",vec2(256,200))
  247. Scr:egpAlign(1,1,1)
  248. Scr:egpSize(1,40)
  249. Scr:egpText(2,"Safe: "+UserData["SafeID",string],vec2(256,240))
  250. Scr:egpAlign(2,1,1)
  251. Scr:egpSize(2,25)
  252. Scr:egpText(3,"You can open your safe by holding E.",vec2(256,265))
  253. Scr:egpAlign(3,1,1)
  254. timer("Summarize",10000)
  255. }
  256. if (clk("Summarize")) {Menu=1}
  257. }
  258.  
  259. if (User) {Bank[UserID,table]=UserData}
  260. interval(300)
  261.  
  262. Draw=0
  263. Use=0
  264.  
  265. if (clk("Bankcounter")) {
  266. foreach(I,V:string=Bank["Userlist",array]) {
  267. Bank[V,table]["Timeleft",number]=clamp(Bank[V,table]["Timeleft",number]-1,0,9e99)
  268.  
  269. if (Bank[V,table]["Timeleft",number]==0) {
  270. if (Bank[V,table]["SendRemoval",number]) {
  271. Bank[V,table]["SendRemoval",number]=0
  272. printColor(vec(255,255,0),"[sBank] ",vec(255),Bank["Username",table][V,string]+" has entered overtime.")
  273. }
  274. Bank[V,table]["Removal",number]=clamp(Bank[V,table]["Removal",number]-1,0,180)
  275. if (Bank[V,table]["Removal",number]<1) {
  276. printColor(vec(255,255,0),"[sBank] ",vec(255),Bank["Username",table][V,string]+" has lost safe access.")
  277. local SafeID=Bank[V,table]["SafeID",string]
  278. Bank["GlobalData",table]["Vaults",table][SafeID,table][1,number]=0
  279. foreach(I,User:string=Bank["GlobalData",table]["Vaults",table][SafeID,table][2,array]) {
  280. if (User==V) {
  281. Bank["GlobalData",table]["Vaults",table][SafeID,table][2,array]:removeString(I)
  282. printColor(vec(255,255,0),"[sBank] ",vec(255),"Removed "+Bank["Username",table][V,string]+" from safe "+SafeID)
  283. }
  284. }
  285. foreach(I,User:string=Bank["Userlist",array]) {
  286. if (V==User) {
  287. Bank["Userlist",array]:removeString(I)
  288. Bank[V,table]:removeString("SafeID")
  289. printColor(vec(255,255,0),"[sBank] ",vec(255),"Removed "+Bank["Username",table][V,string]+" from Userlist.")
  290. }
  291. }
  292. }
  293.  
  294. } else {
  295. Bank[V,table]["Removal",number]=180
  296. Bank[V,table]["SendRemoval",number]=1
  297. }
  298. }
  299. timer("Bankcounter",1000)
  300. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement