Advertisement
Guest User

Untitled

a guest
Jun 21st, 2014
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.25 KB | None | 0 0
  1. @persist [Safes Players Guards]:array Zoom Count Money Used Rate Menu ButtonCD
  2. @inputs EGP:wirelink EGPUser:entity MoneyPot:wirelink User:entity
  3. @outputs [Safes Players Guards]:array ScreenTarget:entity Ops
  4. @trigger all
  5. interval(450)
  6. MoneyPot["SpawnAmount",number]=0
  7. #[findByClass("player")
  8. findSortByDistance(EGP:entity():pos())
  9. if(EGP:entity():pos():distance(findResult(1):pos())<100) { ScreenTarget=findResult(1) }else{ ScreenTarget=noentity() }]#
  10. findInSphere(EGP:entity():pos(),50)
  11. findClipToClass("player")
  12. ScreenTarget=findResult(1)
  13. if(first()) {
  14. Rate=1.4
  15. timer("scansafes",1)
  16. timer("scanguard",1)
  17. function number wirelink:egpIsHovering(Entity:entity, Index:number) {
  18. local BisectedObject = This:egpSize(Index) / 2
  19. return (inrange(This:egpCursor(Entity),EGP:egpPos(Index) - BisectedObject,EGP:egpPos(Index) + BisectedObject) ? 1 : 0)
  20. }
  21. function array names(Safe) {
  22. return Players[Safe,string]:explode("`")[2,string]:explode("#")
  23. }
  24. function number safeTimeCreated(Safe) {
  25. return Players[Safe,string]:explode("`")[1,string]:toNumber()
  26. }
  27. function number getSafe(String:string) {
  28. Allowed=0
  29. for(I=1,Players:count()) {
  30. for(X=1,names(I):count()) {
  31. if(String==names(I)[X,string]) {
  32. Allowed=I
  33. #break
  34. }
  35. }
  36. }
  37. return Allowed
  38. }
  39. function number emptySafe() {
  40. ToReturn=0
  41. for(I=1,Safes:count()) {
  42. Names=Players[I,string]:explode("`")[2,string]:explode("#")
  43. if(Names[1,string]=="empty") {
  44. ToReturn=I
  45. break
  46. }
  47. }
  48. return ToReturn
  49. }
  50. function number addSafe(Name:string,Safe) {
  51. Players[Safe,string]=round(realtime())+"`"+Name
  52. }
  53. function number getTime(Safe) {
  54. return Players[Safe,string]:explode("`")[1,string]:toNumber()
  55. }
  56.  
  57. function number getCredits(Safe) {
  58. return Players[Safe,string]:explode("`")[3,string]:toNumber()
  59. }
  60. function number canOpen(Safe) {
  61. Credits=getCredits(Safe)
  62. Time=realtime()-getTime(Safe)
  63. Time=round(getCredits(Safe)-Time)/120
  64. if(Time<=0) {
  65. return 0
  66. }else{
  67. return round(Time,2)
  68. }
  69. }
  70. function number shareSafe(Name:string,Safe) {
  71. Names=names(Safe)
  72. Names:pushString(Name)
  73. Players[Safe,string]=getTime(Safe)+"`"+Names:concat("#")+"`"+getCredits(Safe)
  74.  
  75. }
  76. function number unshareSafe(Name:string) {
  77. Safe=getSafe(Name)
  78. CreditsPrev=Players[Safe,string]:explode("`")[3,string]:toNumber()
  79. if(Safe!=0) {
  80.  
  81. Owner=Players[Safe,string]:explode("`")[2,string]:explode("#")[1,string]
  82. Str=safeTimeCreated(Safe)+"`"+Owner+"`"+CreditsPrev
  83. Players[Safe,string]=Str
  84. }
  85. }
  86. function void addTime(Safe,Credits) {
  87. if(Safe!=0) {
  88. local CreditsPrev=getCredits(Safe)
  89. local Str=safeTimeCreated(Safe)+"`"+names(Safe):concat("#",1)+"`"+(CreditsPrev+Credits):toString()
  90. Players[Safe,string]=Str
  91. print("Added "+Credits+" credits to safe "+Safe+" ("+names(Safe):concat(",",1)+") (Total: "+canOpen(Safe)+" mins)")
  92. }
  93. }
  94. function sexybg(Scr:wirelink) {
  95. Scr:egpClear()
  96. Scr:egpBox(300,vec2(256),vec2(512))
  97. Scr:egpColor(300,vec(64))
  98. local Lines=5
  99. local Dist=512/Lines
  100. CurSelection=0
  101. for (I=1, Lines+2) {
  102. Scr:egpLine(I+200,vec2(Dist*(I-2),-5),vec2(Dist*I,517))
  103. Scr:egpSize(I+200,30)
  104. Scr:egpMaterial(I+200,"gui/gradient_down")
  105. Scr:egpColor(I+200,vec(32))
  106.  
  107. }
  108. }
  109. function number pIR(Num:number) {
  110. local O=EGP:egpCursor(ScreenTarget)
  111. local Diff=EGP:egpSize(Num)/2
  112. local Pos=EGP:egpPos(Num)
  113. return inrange(O,Pos-Diff,Pos+Diff)
  114. }
  115. function void wirelink:egpHideMinMax(Minimum:number, Maximum:number)
  116. {
  117. for(I = Minimum, Maximum)
  118. {
  119. EGP:egpAlpha(I,0)
  120. }
  121. }
  122.  
  123. function void wirelink:egpShowMinMax(Minimum:number, Maximum:number)
  124. {
  125. for(I = Minimum, Maximum)
  126. {
  127. EGP:egpAlpha(I,255)
  128. }
  129. }
  130. runOnChat(1)
  131. EGP:egpClear()
  132. EGP:egpResolution(vec2(0,0),vec2(512,512))
  133. sexybg(EGP)
  134.  
  135. EGP:egpText(2,"Kgwilson's Bank",vec2(256,40))
  136. EGP:egpAlign(2,1,1)
  137. EGP:egpColor(2,vec(150,150,150))
  138. EGP:egpSize(2,28)
  139.  
  140. EGP:egpText(3,"Time until lock:",vec2(256,100))
  141. EGP:egpAlign(3,1,1)
  142. EGP:egpAlpha(3,0)
  143.  
  144. EGP:egpText(4,"500",vec2(256,130))
  145. EGP:egpAlpha(4,0)
  146. EGP:egpAlign(4,1,1)
  147. EGP:egpSize(4,30)
  148.  
  149. EGP:egpText(5,"Safe shared with:",vec2(256,170))
  150. EGP:egpAlign(5,1,1)
  151. EGP:egpAlpha(5,0)
  152.  
  153. EGP:egpText(6,"",vec2(256,200))
  154. EGP:egpAlpha(6,0)
  155. EGP:egpAlign(6,1,1)
  156. EGP:egpSize(6,20)
  157.  
  158. EGP:egpBox(22,vec2(256,206 + (34 * 1.5)),vec2(194,34))
  159. EGP:egpColor(21,vec(35,35,35))
  160. EGP:egpBox(23,vec2(256,206 + (34 * 1.5)),vec2(192,32))
  161. EGP:egpColor(22,vec(0,0,0))
  162. EGP:egpBox(24,vec2(256,206 + (34 * 1.5)),vec2(192,32))
  163. EGP:egpColor(23,vec(35,35,35))
  164. EGP:egpMaterial(23,"gui/center_gradient")
  165. EGP:egpTextLayout(24,"Deposit Credits",vec2(256-(192/2),206+(34*1.5)-16),vec2(192,32))
  166. EGP:egpAlign(24,1,1)
  167.  
  168. EGP:egpBox(27,vec2(256, 250 + (34 * 1.5)),vec2(194,34))
  169. EGP:egpColor(26,vec(35,35,35))
  170. EGP:egpBox(28,vec2(256,250 + (34 * 1.5)),vec2(192,32))
  171. EGP:egpColor(27,vec(0,0,0))
  172. EGP:egpBox(29,vec2(256,250+ (34 * 1.5)),vec2(192,32))
  173. EGP:egpColor(28,vec(35,35,35))
  174. EGP:egpMaterial(28,"gui/center_gradient")
  175. EGP:egpTextLayout(29,"Unshare Safe",vec2(256-(192/2),206+(34*1.5)-16),vec2(192,120))
  176. EGP:egpAlign(29,1,1)
  177. EGP:egpBox(37,vec2(256, 100 + (34 * 1.5)),vec2(194,94))
  178. EGP:egpColor(36,vec(35,35,35))
  179.  
  180. EGP:egpBox(38,vec2(256,100 + (34 * 1.5)),vec2(192,92))
  181. EGP:egpColor(37,vec(0,0,0))
  182.  
  183. EGP:egpBox(39,vec2(256,100+ (34 * 1.5)),vec2(192,92))
  184. EGP:egpColor(38,vec(35,35,35))
  185.  
  186. EGP:egpMaterial(38,"gui/center_gradient")
  187. EGP:egpTextLayout(39,"Purchase Safe",vec2(256-(192/2),100+(34*1.5)-16),vec2(192,20))
  188. EGP:egpTextLayout(40,"ifmoney",vec2(256-(192/2),100+(34*1.5)-16),vec2(192,55))
  189. EGP:egpAlign(39,1,1)
  190. EGP:egpAlign(40,1,1)
  191. EGP:egpHideMinMax(22,29)
  192. }
  193. User=EGPUser
  194. Use=User:keyUse()
  195. Use=changed(Use) & Use
  196. Zoom=owner():keyZoom()
  197. Used=User:keyUse()
  198. Count=Safes:count()
  199. Money=MoneyPot["StoredAmount",number]
  200. for(I=1,Safes:count()) {
  201. if(Players[I,string]!="0`empty`0") {
  202. # Names=names(I)
  203. WL=Safes[I,entity]:wirelink()
  204. findInSphere(Safes[I,entity]:pos(),11)
  205. findClipToClass("player")
  206. Target=findResult(1)
  207. if(Target:isPlayer()&Target:isAlive()) {
  208. Safe=getSafe(Target:name())
  209. if((getSafe(Target:name())==I&canOpen(Safe))|Target==owner()) {
  210. WL["Fade",number]=1
  211. break
  212. }else{
  213. WL["Fade",number]=0
  214. }
  215. }else{
  216. WL["Fade",number]=0
  217. }
  218. }
  219.  
  220. }
  221. if(($Zoom&Zoom)==1) {
  222. if(owner():aimEntity():type()=="prop_physics") {
  223. for(I=1,Safes:count()) {
  224. Already=0
  225. if(owner():aimEntity()==Safes[I,entity]) {
  226. print("Already found")
  227. Already=1
  228. break
  229. }
  230. }
  231. if(Already==0) {
  232. print("Added")
  233. Safes:pushEntity(owner():aimEntity())
  234. Players:pushString("0`empty`0")
  235.  
  236. }
  237. }else{
  238. print("Aim at a prop")
  239. }
  240. }
  241. if(chatClk(owner())) {
  242. A=owner():lastSaid():explode(" ")
  243. if(A[1,string]=="!add") {
  244. hideChat(1)
  245. if(findPlayerByName(A[2,string]):isPlayer()) {
  246. if(A[3,string]&A[3,string]:toNumber()<=Players:count()) {
  247. addSafe(findPlayerByName(A[2,string]):name(),A[3,string]:toNumber())
  248. print("Added "+A[2,string]+" to safe "+A[3,string])
  249. }else{
  250. print("Added "+A[2,string]+" to free safe "+emptySafe())
  251. addSafe(findPlayerByName(A[2,string]):name(),emptySafe())
  252.  
  253. }
  254. }
  255. }
  256. if(A[1,string]=="!rem") {
  257. hideChat(1)
  258. Players[A[2,string]:toNumber(),string]="0`empty`0"
  259. print("Removed safe "+A[2,string])
  260. }
  261. if(A[1,string]=="!credit") {
  262. hideChat(1)
  263. Ply=findPlayerByName(A[2,string])
  264. if(Ply:isValid()) {
  265. if(getSafe(Ply:name())!=0|A[2,string]:toNumber()<=Safes:count()) {
  266. if(A[3,string]) {
  267. addTime(getSafe(Ply:name()),(A[3,string]:toNumber()/Rate))
  268. }else{
  269. print("!credit Name Time(mins)")
  270. }
  271. }else{
  272. print("Player has no safe here.")
  273. }
  274. }
  275. }
  276. if(A[1,string]=="!guard") {
  277. hideChat(1)
  278. Already=0
  279. Ply=findPlayerByName(A[2,string])
  280. for(I=1,Guards:count()) {
  281. if(Ply==Guards[I,entity]) {
  282. Already=1
  283. break
  284. }
  285. }
  286. if(Already==0) {
  287. print("Added guard to list")
  288. Guards:pushEntity(findPlayerByName(A[2,string]))
  289. }else{
  290. print("Guard already exists. ("+Guards:concat(",",1)+")")
  291. }
  292. }
  293. if(A[1,string]=="!remguard") {
  294. hideChat(1)
  295. Guards:clear()
  296. print("Cleared guards.")
  297. }
  298. if(A[1,string]=="!share") {
  299. hideChat(1)
  300. if(A[3,string]) {
  301. Num=A[3,string]:toNumber()
  302. Ply=findPlayerByName(A[2,string])
  303. shareSafe(Ply:name(),Num)
  304. }
  305. }
  306. }
  307. if(ScreenTarget:isPlayer()&ScreenTarget:isAlive()) {
  308. if(getSafe(ScreenTarget:name())!=0) {
  309. Menu=1
  310. }elseif(emptySafe()!=0){
  311. Menu=2
  312. }else{
  313. Menu=4
  314. }
  315. }else{
  316. Menu=3
  317. }
  318. if(ops()<1000) {
  319. if($Menu|clk("screen")|Use==1|changed(Money)) {
  320. EGP:egpSetText(2,"Kgwilson's Bank")
  321. if(Menu==1) {
  322. Safe=getSafe(ScreenTarget:name())
  323. EGP:egpSetText(2,"Welcome, "+ScreenTarget:name()+" (Safe #"+Safe+")")
  324. EGP:egpColor(2,vec(255))
  325. EGP:egpPos(2,vec2(256,20))
  326. EGP:egpAlpha(3,255)
  327. EGP:egpAlpha(4,255)
  328. EGP:egpShowMinMax(4,29)
  329. EGP:egpHideMinMax(37,40)
  330. EGP:egpSetText(4,canOpen(Safe):toString()+" minutes")
  331. EGP:egpColor(22,pIR(22)? Money? vec(0,255,0) : vec(255,0,0) : vec(0))
  332. if(!Money) {
  333. EGP:egpSetText(24,"Deposit $ for more credits")
  334.  
  335. }else{
  336. EGP:egpSetText(24,"Purchase "+round(((Money/Rate)/120),2)+" mins")
  337. }
  338. if(pIR(22)&Use==1&ScreenTarget==User&ButtonCD==0) {
  339. if(Money) {
  340. ButtonCD=1
  341. timer("buttoncd",2000)
  342. addTime(Safe,(Money/Rate))
  343. MoneyPot["SpawnAmount",number]=Money
  344. }
  345. }
  346. if(names(Safe):count()==1) {
  347. EGP:egpSetText(5,"PM KG to share your safe with a friend.")
  348. EGP:egpSetText(6,"")
  349. EGP:egpHideMinMax(27,29)
  350. }else{
  351. EGP:egpSetText(5,"Safe shared with:")
  352. EGP:egpSetText(6,names(Safe):concat(", ",1))
  353. EGP:egpColor(27,pIR(27)? vec(0,255,0) : vec(0))
  354. if(pIR(27)&Use==1) {
  355. unshareSafe(User:name())
  356. }
  357. }
  358. }
  359. if(Menu==2) {
  360. EGP:egpHideMinMax(22,36)
  361. EGP:egpShowMinMax(37,40)
  362. EGP:egpPos(2,vec2(256,20))
  363. EGP:egpSetText(39,Money:toString()=="0"? "Insert Money" : "Confirm")
  364. EGP:egpSetText(40,Money:toString()=="0"? "to Purchase Credits" : "("+(round((Money/Rate)/120,2)+" minutes)"))
  365. EGP:egpColor(37,pIR(37)&Money? vec(0,255,0) : vec(0))
  366. if(Use&Money&pIR(37)&ScreenTarget==User&ButtonCD==0) {
  367. ButtonCD=1
  368. timer("buttoncd",2000)
  369. print("Adding account "+User:name()+" to safe "+emptySafe())
  370. addSafe(User:name(),emptySafe())
  371. addTime(getSafe(User:name()),(Money/Rate))
  372. MoneyPot["SpawnAmount",number]=Money
  373. }
  374. }
  375. if(Menu==3) {
  376. EGP:egpPos(2,vec2(256,256))
  377. EGP:egpHideMinMax(3,40)
  378.  
  379. }
  380. if(Menu==4) {
  381. EGP:egpHideMinMax(4,40)
  382. EGP:egpSetText(2,"No empty safes!")
  383. }
  384. if(ScreenTarget) { timer("screen",1300) }
  385. }
  386. if(clk("buttoncd")) {
  387. ButtonCD=0
  388. }
  389. if(clk("scanguard")) {
  390. for(I=1,Guards:count()) {if(!Guards[I,entity]:isPlayer()) { Guards:remove(I) print("Guard removed.") } }
  391. timer("scanguard",10000)
  392. }
  393. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement