Guest User

The E2 in question

a guest
Nov 11th, 2023
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.69 KB | None | 0 0
  1. @name Mi Casa BJ 2
  2. @inputs E:wirelink
  3. @persist [CardList Deck RandDeck Colors DealerHand PlayerHand DealerHidden Empty]:array
  4. @persist [Red Blue Green Yellow GrayBG White LGrey DGrey]:vector
  5. @persist [PlayerScore DealerScore PlayerCards DealerCards Bet R DnoAce PnoAce PlayerIn]:number
  6. @persist [PU NULL]:entity
  7. @persist [DealerHiddenHand]:string
  8. @persist Stand CDSTAND:vector SSTAND
  9.  
  10. if(first()) {
  11. ## INFO ###########################################################################
  12. # ID 1 - 7 Drawing Text & BG ## ID 8 - 12 DEALER CARDS ## ID 13 - 17 PLAYER CARDS #
  13. # ID 18 Dealer Total ## ID 19 Player Total ##
  14. #
  15. ## START ##
  16. SSTAND = 1
  17. E:egpClear()
  18. E:egpDrawTopLeft(1)
  19. CDSTAND=vec(255,0,0)
  20. ## SET CARDS ##
  21. CardList =array("R|1","R|2","R|3","R|4","R|5","R|6","R|7","R|8","R|9","R|10","R|11","R|12","R|13","R|14",
  22. "B|1","B|2","B|3","B|4","B|5","B|6","B|7","B|8","B|9","B|10","B|11","B|12","B|13","B|14",
  23. "Y|1","Y|2","Y|3","Y|4","Y|5","Y|6","Y|7","Y|8","Y|9","Y|10","Y|11","Y|12","Y|13","Y|14",
  24. "G|1","G|2","G|3","G|4","G|5","G|6","G|7","G|8","G|9","G|10","G|11","G|12","G|13","G|14",
  25. "R|1","R|2","R|3","R|4","R|5","R|6","R|7","R|8","R|9","R|10","R|11","R|12","R|13","R|14",
  26. "B|1","B|2","B|3","B|4","B|5","B|6","B|7","B|8","B|9","B|10","B|11","B|12","B|13","B|14",
  27. "Y|1","Y|2","Y|3","Y|4","Y|5","Y|6","Y|7","Y|8","Y|9","Y|10","Y|11","Y|12","Y|13","Y|14",
  28. "G|1","G|2","G|3","G|4","G|5","G|6","G|7","G|8","G|9","G|10","G|11","G|12","G|13","G|14")
  29. ## COLORS ##
  30. Colors = array(
  31. vec(38,38,44), #Grey (BG)
  32. vec(199,53,77), #Red
  33. vec(69,181,217), #Blue
  34. vec(55,175,119), #Green
  35. vec(255,200,112), #Yellow
  36. vec(204,204,204), #White
  37. vec(64,64,69), #DarkerGrey
  38. vec(84,84,89) #LighterGrey
  39. )
  40.  
  41. Red = Colors[2,vector]
  42. Blue = Colors[3,vector]
  43. Green = Colors[4,vector]
  44. Yellow = Colors[5,vector]
  45. BGGrey = Colors[1,vector]
  46. White = Colors[6,vector]
  47. DGrey = Colors[7,vector]
  48. LGrey = Colors[8,vector]
  49.  
  50. Bet = 1
  51. ## FUNCTIONS ##
  52. function entity:msg(STRING:string) {
  53. concmd("sam pm \"" + This:name() + "\" " + STRING)
  54. }
  55.  
  56. function randomizeDeck() {
  57. Deck = CardList
  58. for(I = 1,112) {
  59. RAND = ceil(random(0,Deck:count()))
  60. RandDeck:unshiftString(Deck[RAND,string])
  61. Deck:remove(RAND)
  62. }
  63. }
  64. function drawText(ID,STR:string,POS:vector2,SIZ,COL:vector) {
  65. E:egpText(ID,STR,POS)
  66. E:egpAlign(ID,1,1)
  67. E:egpFont(ID,"Roboto",SIZ)
  68. E:egpColor(ID,COL)
  69. }
  70. function drawPlayer(MODE) {
  71. R = ceil(random(0,RandDeck:count()))
  72. PlayerHand:unshiftString(RandDeck:removeString(R))
  73. }
  74. function drawDealer(MODE) {
  75. R = ceil(random(0,RandDeck:count()))
  76. if( MODE == 1 ) { DealerHiddenHand = RandDeck:removeString(R) E:egpColor(9,LGrey)} else {
  77. DealerHand:unshiftString(RandDeck:removeString(R))
  78. }
  79. }
  80. function updatePlayer() {
  81. for(I = 1,PlayerHand:count()) {
  82. TEMP = PlayerHand[I,string]:explode("|")
  83. switch( TEMP[1,string] ) {
  84. case "R",
  85. E:egpColor(I+12,Red)
  86. break
  87. case "Y",
  88. E:egpColor(I+12,Yellow)
  89. break
  90. case "G",
  91. E:egpColor(I+12,Green)
  92. break
  93. case "B",
  94. E:egpColor(I+12,Blue)
  95. break
  96. }
  97. switch(TEMP[2,string]) {
  98. case "1",
  99. E:egpSetText(I+24,"A")
  100. break
  101. case "2",
  102. E:egpSetText(I+24,"2")
  103. break
  104. case "3",
  105. E:egpSetText(I+24,"3")
  106. break
  107. case "4",
  108. E:egpSetText(I+24,"4")
  109. break
  110. case "5",
  111. E:egpSetText(I+24,"5")
  112. break
  113. case "6",
  114. E:egpSetText(I+24,"6")
  115. break
  116. case "7",
  117. E:egpSetText(I+24,"7")
  118. break
  119. case "8",
  120. E:egpSetText(I+24,"8")
  121. break
  122. case "9",
  123. E:egpSetText(I+24,"9")
  124. break
  125. case "10",
  126. E:egpSetText(I+24,"10")
  127. break
  128. case "11",
  129. E:egpSetText(I+24,"J")
  130. break
  131. case "12",
  132. E:egpSetText(I+24,"6")
  133. break
  134. case "13",
  135. E:egpSetText(I+24,"K")
  136. break
  137. case "14",
  138. E:egpSetText(I+24,"6")
  139. break
  140. }
  141. }
  142. }
  143.  
  144. function updateDealer() {
  145. for(I = 1,DealerHand:count()) {
  146. TEMP = DealerHand[I,string]:explode("|")
  147. switch( TEMP[1,string] ) {
  148. case "R",
  149. E:egpColor(I+7,Red)
  150. break
  151. case "Y",
  152. E:egpColor(I+7,Yellow)
  153. break
  154. case "G",
  155. E:egpColor(I+7,Green)
  156. break
  157. case "B",
  158. E:egpColor(I+7,Blue)
  159. break
  160. }
  161. switch(TEMP[2,string]) {
  162. case "1",
  163. E:egpSetText(I+19,"A")
  164. break
  165. case "2",
  166. E:egpSetText(I+19,"2")
  167. break
  168. case "3",
  169. E:egpSetText(I+19,"3")
  170. break
  171. case "4",
  172. E:egpSetText(I+19,"4")
  173. break
  174. case "5",
  175. E:egpSetText(I+19,"5")
  176. break
  177. case "6",
  178. E:egpSetText(I+19,"6")
  179. break
  180. case "7",
  181. E:egpSetText(I+19,"7")
  182. break
  183. case "8",
  184. E:egpSetText(I+19,"8")
  185. break
  186. case "9",
  187. E:egpSetText(I+19,"9")
  188. break
  189. case "10",
  190. E:egpSetText(I+19,"10")
  191. break
  192. case "11",
  193. E:egpSetText(I+19,"J")
  194. break
  195. case "12",
  196. E:egpSetText(I+19,"Q")
  197. break
  198. case "13",
  199. E:egpSetText(I+19,"K")
  200. break
  201. case "14",
  202. E:egpSetText(I+19,"K")
  203. break
  204. }
  205. }
  206. }
  207. function countScorePlayer() {
  208. PnoAce = 0
  209. PlayerScore = 0
  210. for(I = 1,PlayerHand:count()) {
  211. TEMP = PlayerHand[I,string]:explode("|")
  212. switch(TEMP[2,string]) {
  213. case "1",
  214. PnoAce++
  215. PlayerScore += 11
  216. break
  217. case "2",
  218. PlayerScore += 2
  219. break
  220. case "3",
  221. PlayerScore += 3
  222. break
  223. case "4",
  224. PlayerScore += 4
  225. break
  226. case "5",
  227. PlayerScore += 5
  228. break
  229. case "6",
  230. PlayerScore += 6
  231. break
  232. case "7",
  233. PlayerScore += 7
  234. break
  235. case "8",
  236. PlayerScore += 8
  237. break
  238. case "9",
  239. PlayerScore += 9
  240. break
  241. case "10",
  242. PlayerScore += 10
  243. break
  244. case "11",
  245. PlayerScore += 10
  246. break
  247. case "12",
  248. PlayerScore += 6
  249. break
  250. case "13",
  251. PlayerScore += 10
  252. break
  253. case "14",
  254. PlayerScore += 6
  255. break
  256. }
  257. }
  258. while(PlayerScore > 21 && PnoAce > 0) {
  259. if(PlayerScore > 21 && PnoAce > 0) {
  260. PnoAce--
  261. PlayerScore -= 10
  262. }
  263. }
  264.  
  265. E:egpSetText(19,PlayerScore+"")
  266. if(PlayerScore > 21) {
  267. E:egpColor(19,Red)
  268. PlayerIn = 0
  269. timer("dealerPlay",750)
  270. }
  271. }
  272. function countScoreDealer() {
  273. DnoAce = 0
  274. DealerScore = 0
  275. for(I = 1,DealerHand:count()) {
  276. TEMP = DealerHand[I,string]:explode("|")
  277. switch(TEMP[2,string]) {
  278. case "1",
  279. DnoAce++
  280. DealerScore += 11
  281. break
  282. case "2",
  283. DealerScore += 2
  284. break
  285. case "3",
  286. DealerScore += 3
  287. break
  288. case "4",
  289. DealerScore += 4
  290. break
  291. case "5",
  292. DealerScore += 5
  293. break
  294. case "6",
  295. DealerScore += 6
  296. break
  297. case "7",
  298. DealerScore += 7
  299. break
  300. case "8",
  301. DealerScore += 8
  302. break
  303. case "9",
  304. DealerScore += 9
  305. break
  306. case "10",
  307. DealerScore += 10
  308. break
  309. case "11",
  310. DealerScore += 10
  311. break
  312. case "12",
  313. DealerScore += 10
  314. break
  315. case "13",
  316. DealerScore += 10
  317. break
  318. case "14",
  319. DealerScore += 10
  320. break
  321. }
  322. }
  323. while(DealerScore > 21 && DnoAce > 0) {
  324. if(DealerScore > 21 && DnoAce > 0) {
  325. DnoAce--
  326. DealerScore -= 10
  327. }
  328. }
  329. if(DealerScore > 21) {
  330. E:egpColor(18,Red)
  331. }
  332. E:egpSetText(18,DealerScore+"")
  333. }
  334. function showHidden() {
  335. DealerHand:unshiftString(DealerHiddenHand)
  336. updateDealer()
  337. countScoreDealer()
  338. }
  339. ## DRAW GAME ##
  340. E:egpBox(1,vec2(0),vec2(512))
  341. E:egpColor(1,BGGrey)
  342.  
  343. drawText(2,"DEALER'S CARDS",vec2(104,16),30,White)
  344. drawText(3,"BLACKJACK",vec2(256,256),48,Yellow)
  345. drawText(4,"PLAYER AND DEALER STOP ON 5 CARDS",vec2(256,224),22,White)
  346. drawText(5,"DEALER STOPS ON OR ABOVE 17",vec2(256,288),22,White)
  347. drawText(6,"PLAYER'S CARDS",vec2(406,496),30,White)
  348. drawText(7,"Game uses 2 deck of cards and is shuffled each round.",vec2(128,504),12,LGrey)
  349. drawText(35,"'!CLAIM' TO CLAIM AND PLAY.",vec2(256,304),18,White)
  350.  
  351. for(I = 0,4) {
  352. E:egpBox(I+8,vec2(32+(I*96),32),vec2(64,96))
  353. E:egpColor(I+8,DGrey)
  354. }
  355.  
  356. for(I = 0,4) {
  357. E:egpBox(I+13,vec2(32+(I*96),384),vec2(64,96))
  358. E:egpColor(I+13,DGrey)
  359. }
  360.  
  361. drawText(18,DealerScore+"",vec2(256,168),64,White)
  362. drawText(19,PlayerScore+"",vec2(256,350),64,White)
  363.  
  364. timer("loadSecond",1500)
  365. }
  366. if(clk("loadSecond")) {
  367. for(I = 0,4) {
  368. drawText(I+20,"",vec2(64+(I*96),80),48,LGrey)
  369. }
  370.  
  371. for(I = 0,4) {
  372. drawText(I+25,"",vec2(64+(I*96),432),48,LGrey)
  373. }
  374. runOnChat(1)
  375. }
  376. if(chatClk()) {
  377. LS = lastSaid():lower():explode(" ")
  378. if(LS[1,string] == "!claim") {
  379. if(PU == NULL) {
  380. lastSpoke():msg("Type '!draw <bet>' to play. '!leave' to leave (Refunds not given).")
  381. PU = lastSpoke()
  382. E:egpSetText(35,"USE '!DRAW <BET>' TO PLACE A BET.")
  383. timer("DistanceCheck", 2000)
  384. } else {
  385. lastSpoke():msg("This has already been claimed. Wait for the player to finish.")
  386. }
  387. }
  388. if(LS[1,string] == "!leave" && PU == lastSpoke()) {
  389. if(LS:count() == 1) {
  390. lastSpoke():msg("Are you sure you want to leave? Type '!leave confirm' to leave.")
  391. }
  392. elseif(PU == lastSpoke() && LS[2,string] == "confirm") {
  393. lastSpoke():msg("You have left and unclaimed Souk Blackjack.")
  394. reset()
  395. }
  396. }
  397. if(LS[1,string] == "!draw" && PU == lastSpoke() && PlayerIn != 1) {
  398. if(LS[2,string]:toNumber() < owner():money()/10 && LS[2,string]:toNumber() >= 1) {
  399. Bet = LS[2,string]:toNumber()
  400. randomizeDeck()
  401. moneyRequest(PU,Bet)
  402. E:egpSetText(35,"'!HIT' TO GET ANOHER CARD. '!STAND' TO GO TO DEALER")
  403. } else { lastSpoke():msg("You need to change your bet. (Under:$" + owner():money()/10 +", over $1000)")}
  404. }
  405. if(LS[1,string] == "!hit" && PlayerIn == 1 && PU == lastSpoke()) {
  406. timer("drawPlayerS",500)
  407. if(PlayerCards == 5) {
  408.  
  409. }
  410. }
  411. if(LS[1,string] == "!stand" && PlayerIn == 1 && PU == lastSpoke() && Stand != 1) {
  412. if(Stand == 0){
  413. if (SSTAND) {
  414. Stand = 1
  415. showHidden()
  416. timer("dealerPlay",500)
  417. SSTAND=0
  418. timer("SSTAND",5000)
  419. }
  420. }
  421. }
  422. }
  423. if(moneyClk()) {
  424. PlayerIn = 1
  425. PU:msg("Use '!hit' to draw an extra card. Or use '!stand' to move onto dealers turn.")
  426. timer("startGame",1000)
  427. }
  428. if(clk("drawPlayerS")) {
  429. drawPlayer(0)
  430. updatePlayer()
  431. PlayerCards++
  432. countScorePlayer()
  433. }
  434. if(clk("drawPlayerH")) {
  435. drawPlayer(0)
  436. updatePlayer()
  437. PlayerCards++
  438. countScorePlayer()
  439. }
  440. if(clk("drawDealerS")) {
  441. drawDealer(0)
  442. DealerCards++
  443. updateDealer()
  444. countScoreDealer()
  445. }
  446. if(clk("drawDealerH")) {
  447. drawDealer(1)
  448. DealerCards++
  449. updateDealer()
  450. countScoreDealer()
  451. if(PlayerScore == 21) {
  452. showHidden()
  453. countScoreDealer()
  454. timer("doWinner",500)
  455. }
  456. }
  457. if(clk("dealerPlay")) {
  458. if(DealerScore < 17 && DealerCards != 5 && PlayerScore <= 21) {
  459. drawDealer(0)
  460. DealerCards++
  461. updateDealer()
  462. countScoreDealer()
  463. timer("dealerPlay",750)
  464. } else {
  465. timer("doWinner",500)
  466. }
  467. }
  468. if(clk("doWinner")) {
  469. if((PlayerScore > DealerScore && PlayerScore <= 21) || (DealerScore > 21 && PlayerScore < 22)) {
  470. if(PlayerScore == 21 && PlayerCards == 2) {
  471. if(Stand == 0){
  472. Stand = 1
  473. PU:msg("You win with Blackjack. Enjoy your 2.5x payout!")
  474. moneyGive(PU,Bet*2.5)
  475. }
  476. } else {
  477. moneyGive(PU,Bet*2)
  478. PU:msg("You win with "+PlayerScore+". Enjoy your 2x payout!")
  479. }
  480. }
  481. elseif(PlayerScore == DealerScore) {
  482. if(PlayerScore == 21 && PlayerCards == 2 && DealerCards != 2) {
  483. if(Stand == 0){
  484. Stand = 1
  485. PU:msg("You win with Blackjack. Enjoy your 2.5x payout!")
  486. moneyGive(PU,Bet*2.5)
  487. }
  488. } else {
  489. moneyGive(PU,Bet*1)
  490. PU:msg("You pushed. Getting the same as the dealer with no 2 card 21. You get half your bet back :D")
  491. }
  492. }
  493. else {
  494. PU:msg("You have lost. Please try again.")
  495. }
  496. timer("reset",2500)
  497. }
  498. if(clk("startGame")) {
  499. timer("drawPlayerS",10)
  500. timer("drawDealerS",750)
  501. timer("drawPlayerH",1500)
  502. timer("drawDealerH",2250)
  503.  
  504. }
  505. if(clk("reset")) {
  506. reset()
  507. }
  508. if(clk("DistanceCheck"))
  509. {
  510. if(PU:pos():distance(entity():pos()) > 600)
  511. {
  512. reset()
  513. }
  514. timer("DistanceCheck", 2000)
  515. }
  516.  
  517. runOnTick(1)
  518.  
  519. if(clk("SSTAND")) {SSTAND=1}
  520.  
  521. E:egpBoxOutline(200,vec2(60,330),vec2(140,40))
  522. E:egpColor(200,vec(64,64,69))
  523. E:egpBoxOutline(201,vec2(316,330),vec2(140,40))
  524. E:egpColor(201,vec(64,64,69))
  525.  
  526. E:egpText(202,"There is a !stand security",vec2(64,335))
  527. E:egpSize(202,12)
  528. E:egpColor(202,vec(204,204,204))
  529. E:egpText(203,"don't !stand if it's red",vec2(74,350))
  530. E:egpSize(203,12)
  531. E:egpColor(203,vec(204,204,204))
  532.  
  533. if (SSTAND==1) {CDSTAND=vec(0,255,0)}
  534. if (SSTAND==0) {CDSTAND=vec(255,0,0)}
  535.  
  536. E:egpText(204,"!stand",vec2(358,338))
  537. E:egpSize(204,22)
  538. E:egpFont(204,"arial")
  539. E:egpColor(204,CDSTAND)
  540.  
Add Comment
Please, Sign In to add comment