Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name Scriptis' Self-Store Service
- @inputs Scr:wirelink Amount UserTrigger:entity
- @persist Menu User:entity Use Draw Rate Selection Credit:table
- @trigger all
- Draw=changed(Menu) | first() | changed(Scr)
- Use=User:keyUse()
- Use=changed(Use) & Use
- UserID=User:steamID()
- Bank=gTable("sBank")
- if (changed(Amount)) {
- if ($Amount>0) {
- Credit[UserID,number]=Credit[UserID,number]+$Amount
- hint("Added $"+$Amount+" to "+UserID,3)
- }
- }
- #gtable sBank
- #array Safelist
- #array Userlist
- #table GlobalData
- #table Vaults
- #table VaultObject
- # 1 - number Owned
- # 2 - array Owners
- # string Owner
- # 3 - entity Door
- #string SteamID32 - table UserObject
- #number Timeleft
- #array Owned
- GlobalData=Bank["Global",table]
- Vaults=GlobalData["Vaults",table]
- if (User) {
- UserData=Bank[UserID,table]
- if (!UserData) {Bank[UserID,table]=table()}
- }
- if (first()) {
- Rate=100 # $/Minute
- timer("Bankcounter",1000)
- function number pIR(Num:number) {
- local O=Scr:egpCursor(User)
- local Diff=Scr:egpSize(Num)/2
- local Pos=Scr:egpPos(Num)
- return inrange(O,Pos-Diff,Pos+Diff)
- }
- function sexybg(Scr:wirelink) {
- Scr:egpClear()
- Scr:egpBox(300,vec2(256),vec2(512))
- Scr:egpColor(300,vec(64))
- local Lines=5
- local Dist=512/Lines
- CurSelection=0
- for (I=1, Lines+2) {
- Scr:egpLine(I+200,vec2(Dist*(I-2),-5),vec2(Dist*I,517))
- Scr:egpSize(I+200,30)
- Scr:egpMaterial(I+200,"gui/gradient_down")
- Scr:egpColor(I+200,vec(32))
- }
- }
- function string prettyInt(N:number) {
- #print(N)
- local Str=ceil(N):toString():reverse():explode("")
- local Count=Str:count()
- local Add=1
- for (I=0, Str:count(), 3) {
- if (I!=0 & I!=Count & Str[I+1,string]) {Str:insertString(I+Add,",") Add++}
- }
- return Str:concat():reverse()
- }
- function string getTime(Num:number) {
- Min=floor(Num/60)
- Sec=Num-(Min*60)
- if (Sec>=10) {
- return ""+Min+":"+Sec
- } else {
- return ""+Min+":0"+Sec
- }
- }
- }
- if (Menu==0) {
- if (Draw) {
- sexybg(Scr)
- Scr:egpBox(1,vec2(256),vec2(512,70))
- Scr:egpColor(1,vec(128))
- Scr:egpText(2,"Scriptis' Self-Store Service",vec2(256))
- Scr:egpSize(2,40)
- Scr:egpAlign(2,1,2)
- Scr:egpText(3,"Press anywhere to begin",vec2(256))
- Scr:egpAlign(3,1,0)
- Scr:egpSize(3,30)
- }
- if (~UserTrigger) {
- #print("Trig")
- findByClass("player")
- User=findClosest(Scr:entity():pos())
- if (Use & User:aimEntity()==Scr:entity()) {Bank["Username",table][User:steamID(),string]=User:name() Menu=1}
- }
- }
- if (User & User:pos():distance(Scr:entity():pos())>100) {User=noentity() Menu=0}
- if (Menu==1) {
- if (Draw) {
- Scr:egpBox(1,vec2(256,32),vec2(512,64))
- Scr:egpColor(1,vec(64))
- for (I=1, 33) {
- local X=(512/32)*(I-2)
- Scr:egpLine(2+I,vec2(X+34.5,-5),vec2(X,60))
- Scr:egpSize(2+I,5)
- Scr:egpColor(2+I,vec(32))
- Scr:egpMaterial(2+I,"gui/gradient_down")
- }
- #tab_home
- local XOffset=0
- local ID=39
- Scr:egpRoundedBox(ID,vec2(96+XOffset,64),vec2(85,79))
- Scr:egpColor(ID,vec(110))
- Scr:egpBox(38,vec2(256,256+65.5),vec2(512,512))
- Scr:egpColor(38,vec(96))
- Scr:egpLine(2,vec2(0,64),vec2(512,64))
- Scr:egpSize(2,5)
- Scr:egpColor(2,vec(110))
- Scr:egpRoundedBox(ID+1,vec2(96+XOffset,64),vec2(80,74))
- Scr:egpColor(ID+1,vec(96))
- Scr:egpText(ID+2,"BANK",Scr:egpPos(ID))
- Scr:egpAlign(ID+2,1,2)
- Scr:egpSize(ID+2,30)
- Scr:egpColor(ID+2,vec(255))
- #gtable sBank
- #table GlobalData
- #table Vaults
- # 1 - number Owned
- # 2 - array Owners
- # string Owner
- #string Username
- #number Timeleft
- #array Owned
- if (UserData["SafeID",string]) {
- Scr:egpText(50,"SUMMARY",vec2(30,98))
- Scr:egpAlign(50,0,1)
- Scr:egpSize(50,30)
- Scr:egpText(51,User:name()+" ("+UserID+")",vec2(30,110))
- Scr:egpText(52,"Time remaining: "+getTime(UserData["TimeLeft",number]),vec2(30,125))
- Scr:egpText(53,"Safe ID: "+UserData["SafeID",string],vec2(30,140))
- } else {
- Scr:egpText(50,"BUY A SAFE",vec2(30,98))
- Scr:egpAlign(50,0,1)
- Scr:egpSize(50,30)
- Scr:egpText(51,"Rate: $"+prettyInt(Rate)+" per minute",vec2(30,110))
- Scr:egpText(52,"Insert money and select a vault:",vec2(30,125))
- #gtable sBank
- #array Safelist
- #table GlobalData
- #table Vaults
- #table VaultObject
- # 1 - number Owned
- # 2 - array Owners
- # string Owner
- # 3 - entity Door
- #string SteamID32 - table UserObject
- #number Timeleft
- #array Owned
- local Iteration=0
- foreach (NULL,V:string=Bank["Safelist",array]) {
- local Safe=Bank["GlobalData",table]["Vaults",table][V,table]
- if (!Safe[1,number]) {
- Iteration++
- local ID=Iteration*3+52
- Scr:egpBox(ID,vec2(128-37,135+(Iteration*15)),vec2(128,15))
- Scr:egpAlpha(ID,0)
- Scr:egpText(ID+1,V,vec2(30,135+(Iteration*15)))
- Scr:egpAlign(ID+1,0,1)
- }
- }
- if (Iteration==0) {
- Scr:egpText(52,"No safes available!",vec2(30,125))
- }
- Scr:egpText(100,"YOUR ACCOUNT",vec2(512-30,98))
- Scr:egpAlign(100,2,1)
- Scr:egpSize(100,25)
- Scr:egpText(101,"$"+prettyInt(Credit[UserID,number]),vec2(512-30,110))
- Scr:egpSize(101,20)
- Scr:egpColor(101,vec(0,255,0))
- Scr:egpAlign(101,2,0)
- Scr:egpText(102,getTime(floor(Credit[UserID,number]/Rate)*60),vec2(512-30,130))
- Scr:egpAlign(102,2,0)
- }
- }
- if (!UserData["SafeID",string]) {
- Scr:egpSetText(101,"$"+prettyInt(Credit[UserID,number]))
- Scr:egpSetText(102,getTime(floor(Credit[UserID,number]/Rate)*60))
- local Iteration=0
- foreach (NULL,V:string=Bank["Safelist",array]) {
- local Safe=Bank["GlobalData",table]["Vaults",table][V,table]
- if (!Safe[1,number]) {
- Iteration++
- local ID=Iteration*3+52
- if (pIR(ID)) {
- Scr:egpAlpha(ID,32)
- if (Use & Credit[UserID,number]>=Rate) {
- hint("User "+UserID+" bought safe "+V,3)
- UserData["SafeID",string]=V
- UserData["Timeleft",number]=floor(Credit[UserID,number]/Rate)*60
- Credit[UserID,number]=Credit[UserID,number]%Rate
- Bank["GlobalData",table]["Vaults",table][V,table][2,array]:pushString(UserID)
- Bank["GlobalData",table]["Vaults",table][V,table][1,number]=1
- Bank["Userlist",array]:pushString(UserID)
- printColor(vec(255,255,0),"[sBank] ",vec(255),"User "+Bank["Username",table][UserID,string]+" has purchased safe "+V)
- Menu=2
- }
- #print(ID)
- } else {
- Scr:egpAlpha(ID,0)
- }
- }
- }
- } else { #Countdown & Add time
- if (Credit[UserID,number]>=Rate) {
- UserData["Timeleft",number]=UserData["Timeleft",number]+floor(Credit[UserID,number]/Rate)*60
- Credit[UserID,number]=Credit[UserID,number]%Rate
- printColor(vec(255,255,0),"[sBank] ",vec(255),Bank["Username",table][UserID,string]+" has added time to their safe.")
- }
- Scr:egpSetText(52,"Time remaining: "+getTime(UserData["Timeleft",number]))
- }
- }
- if (Menu==2) {
- if (Draw) {
- sexybg(Scr)
- Scr:egpText(1,"Purchase succeeded!",vec2(256,200))
- Scr:egpAlign(1,1,1)
- Scr:egpSize(1,40)
- Scr:egpText(2,"Safe: "+UserData["SafeID",string],vec2(256,240))
- Scr:egpAlign(2,1,1)
- Scr:egpSize(2,25)
- Scr:egpText(3,"You can open your safe by holding E.",vec2(256,265))
- Scr:egpAlign(3,1,1)
- timer("Summarize",10000)
- }
- if (clk("Summarize")) {Menu=1}
- }
- if (User) {Bank[UserID,table]=UserData}
- interval(300)
- Draw=0
- Use=0
- if (clk("Bankcounter")) {
- foreach(I,V:string=Bank["Userlist",array]) {
- Bank[V,table]["Timeleft",number]=clamp(Bank[V,table]["Timeleft",number]-1,0,9e99)
- if (Bank[V,table]["Timeleft",number]==0) {
- if (Bank[V,table]["SendRemoval",number]) {
- Bank[V,table]["SendRemoval",number]=0
- printColor(vec(255,255,0),"[sBank] ",vec(255),Bank["Username",table][V,string]+" has entered overtime.")
- }
- Bank[V,table]["Removal",number]=clamp(Bank[V,table]["Removal",number]-1,0,180)
- if (Bank[V,table]["Removal",number]<1) {
- printColor(vec(255,255,0),"[sBank] ",vec(255),Bank["Username",table][V,string]+" has lost safe access.")
- local SafeID=Bank[V,table]["SafeID",string]
- Bank["GlobalData",table]["Vaults",table][SafeID,table][1,number]=0
- foreach(I,User:string=Bank["GlobalData",table]["Vaults",table][SafeID,table][2,array]) {
- if (User==V) {
- Bank["GlobalData",table]["Vaults",table][SafeID,table][2,array]:removeString(I)
- printColor(vec(255,255,0),"[sBank] ",vec(255),"Removed "+Bank["Username",table][V,string]+" from safe "+SafeID)
- }
- }
- foreach(I,User:string=Bank["Userlist",array]) {
- if (V==User) {
- Bank["Userlist",array]:removeString(I)
- Bank[V,table]:removeString("SafeID")
- printColor(vec(255,255,0),"[sBank] ",vec(255),"Removed "+Bank["Username",table][V,string]+" from Userlist.")
- }
- }
- }
- } else {
- Bank[V,table]["Removal",number]=180
- Bank[V,table]["SendRemoval",number]=1
- }
- }
- timer("Bankcounter",1000)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement