Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name Mi Casa BJ 2
- @inputs E:wirelink
- @persist [CardList Deck RandDeck Colors DealerHand PlayerHand DealerHidden Empty]:array
- @persist [Red Blue Green Yellow GrayBG White LGrey DGrey]:vector
- @persist [PlayerScore DealerScore PlayerCards DealerCards Bet R DnoAce PnoAce PlayerIn]:number
- @persist [PU NULL]:entity
- @persist [DealerHiddenHand]:string
- @persist Stand CDSTAND:vector SSTAND
- if(first()) {
- ## INFO ###########################################################################
- # ID 1 - 7 Drawing Text & BG ## ID 8 - 12 DEALER CARDS ## ID 13 - 17 PLAYER CARDS #
- # ID 18 Dealer Total ## ID 19 Player Total ##
- #
- ## START ##
- SSTAND = 1
- E:egpClear()
- E:egpDrawTopLeft(1)
- CDSTAND=vec(255,0,0)
- ## SET CARDS ##
- 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",
- "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",
- "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",
- "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",
- "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",
- "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",
- "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",
- "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")
- ## COLORS ##
- Colors = array(
- vec(38,38,44), #Grey (BG)
- vec(199,53,77), #Red
- vec(69,181,217), #Blue
- vec(55,175,119), #Green
- vec(255,200,112), #Yellow
- vec(204,204,204), #White
- vec(64,64,69), #DarkerGrey
- vec(84,84,89) #LighterGrey
- )
- Red = Colors[2,vector]
- Blue = Colors[3,vector]
- Green = Colors[4,vector]
- Yellow = Colors[5,vector]
- BGGrey = Colors[1,vector]
- White = Colors[6,vector]
- DGrey = Colors[7,vector]
- LGrey = Colors[8,vector]
- Bet = 1
- ## FUNCTIONS ##
- function entity:msg(STRING:string) {
- concmd("sam pm \"" + This:name() + "\" " + STRING)
- }
- function randomizeDeck() {
- Deck = CardList
- for(I = 1,112) {
- RAND = ceil(random(0,Deck:count()))
- RandDeck:unshiftString(Deck[RAND,string])
- Deck:remove(RAND)
- }
- }
- function drawText(ID,STR:string,POS:vector2,SIZ,COL:vector) {
- E:egpText(ID,STR,POS)
- E:egpAlign(ID,1,1)
- E:egpFont(ID,"Roboto",SIZ)
- E:egpColor(ID,COL)
- }
- function drawPlayer(MODE) {
- R = ceil(random(0,RandDeck:count()))
- PlayerHand:unshiftString(RandDeck:removeString(R))
- }
- function drawDealer(MODE) {
- R = ceil(random(0,RandDeck:count()))
- if( MODE == 1 ) { DealerHiddenHand = RandDeck:removeString(R) E:egpColor(9,LGrey)} else {
- DealerHand:unshiftString(RandDeck:removeString(R))
- }
- }
- function updatePlayer() {
- for(I = 1,PlayerHand:count()) {
- TEMP = PlayerHand[I,string]:explode("|")
- switch( TEMP[1,string] ) {
- case "R",
- E:egpColor(I+12,Red)
- break
- case "Y",
- E:egpColor(I+12,Yellow)
- break
- case "G",
- E:egpColor(I+12,Green)
- break
- case "B",
- E:egpColor(I+12,Blue)
- break
- }
- switch(TEMP[2,string]) {
- case "1",
- E:egpSetText(I+24,"A")
- break
- case "2",
- E:egpSetText(I+24,"2")
- break
- case "3",
- E:egpSetText(I+24,"3")
- break
- case "4",
- E:egpSetText(I+24,"4")
- break
- case "5",
- E:egpSetText(I+24,"5")
- break
- case "6",
- E:egpSetText(I+24,"6")
- break
- case "7",
- E:egpSetText(I+24,"7")
- break
- case "8",
- E:egpSetText(I+24,"8")
- break
- case "9",
- E:egpSetText(I+24,"9")
- break
- case "10",
- E:egpSetText(I+24,"10")
- break
- case "11",
- E:egpSetText(I+24,"J")
- break
- case "12",
- E:egpSetText(I+24,"6")
- break
- case "13",
- E:egpSetText(I+24,"K")
- break
- case "14",
- E:egpSetText(I+24,"6")
- break
- }
- }
- }
- function updateDealer() {
- for(I = 1,DealerHand:count()) {
- TEMP = DealerHand[I,string]:explode("|")
- switch( TEMP[1,string] ) {
- case "R",
- E:egpColor(I+7,Red)
- break
- case "Y",
- E:egpColor(I+7,Yellow)
- break
- case "G",
- E:egpColor(I+7,Green)
- break
- case "B",
- E:egpColor(I+7,Blue)
- break
- }
- switch(TEMP[2,string]) {
- case "1",
- E:egpSetText(I+19,"A")
- break
- case "2",
- E:egpSetText(I+19,"2")
- break
- case "3",
- E:egpSetText(I+19,"3")
- break
- case "4",
- E:egpSetText(I+19,"4")
- break
- case "5",
- E:egpSetText(I+19,"5")
- break
- case "6",
- E:egpSetText(I+19,"6")
- break
- case "7",
- E:egpSetText(I+19,"7")
- break
- case "8",
- E:egpSetText(I+19,"8")
- break
- case "9",
- E:egpSetText(I+19,"9")
- break
- case "10",
- E:egpSetText(I+19,"10")
- break
- case "11",
- E:egpSetText(I+19,"J")
- break
- case "12",
- E:egpSetText(I+19,"Q")
- break
- case "13",
- E:egpSetText(I+19,"K")
- break
- case "14",
- E:egpSetText(I+19,"K")
- break
- }
- }
- }
- function countScorePlayer() {
- PnoAce = 0
- PlayerScore = 0
- for(I = 1,PlayerHand:count()) {
- TEMP = PlayerHand[I,string]:explode("|")
- switch(TEMP[2,string]) {
- case "1",
- PnoAce++
- PlayerScore += 11
- break
- case "2",
- PlayerScore += 2
- break
- case "3",
- PlayerScore += 3
- break
- case "4",
- PlayerScore += 4
- break
- case "5",
- PlayerScore += 5
- break
- case "6",
- PlayerScore += 6
- break
- case "7",
- PlayerScore += 7
- break
- case "8",
- PlayerScore += 8
- break
- case "9",
- PlayerScore += 9
- break
- case "10",
- PlayerScore += 10
- break
- case "11",
- PlayerScore += 10
- break
- case "12",
- PlayerScore += 6
- break
- case "13",
- PlayerScore += 10
- break
- case "14",
- PlayerScore += 6
- break
- }
- }
- while(PlayerScore > 21 && PnoAce > 0) {
- if(PlayerScore > 21 && PnoAce > 0) {
- PnoAce--
- PlayerScore -= 10
- }
- }
- E:egpSetText(19,PlayerScore+"")
- if(PlayerScore > 21) {
- E:egpColor(19,Red)
- PlayerIn = 0
- timer("dealerPlay",750)
- }
- }
- function countScoreDealer() {
- DnoAce = 0
- DealerScore = 0
- for(I = 1,DealerHand:count()) {
- TEMP = DealerHand[I,string]:explode("|")
- switch(TEMP[2,string]) {
- case "1",
- DnoAce++
- DealerScore += 11
- break
- case "2",
- DealerScore += 2
- break
- case "3",
- DealerScore += 3
- break
- case "4",
- DealerScore += 4
- break
- case "5",
- DealerScore += 5
- break
- case "6",
- DealerScore += 6
- break
- case "7",
- DealerScore += 7
- break
- case "8",
- DealerScore += 8
- break
- case "9",
- DealerScore += 9
- break
- case "10",
- DealerScore += 10
- break
- case "11",
- DealerScore += 10
- break
- case "12",
- DealerScore += 10
- break
- case "13",
- DealerScore += 10
- break
- case "14",
- DealerScore += 10
- break
- }
- }
- while(DealerScore > 21 && DnoAce > 0) {
- if(DealerScore > 21 && DnoAce > 0) {
- DnoAce--
- DealerScore -= 10
- }
- }
- if(DealerScore > 21) {
- E:egpColor(18,Red)
- }
- E:egpSetText(18,DealerScore+"")
- }
- function showHidden() {
- DealerHand:unshiftString(DealerHiddenHand)
- updateDealer()
- countScoreDealer()
- }
- ## DRAW GAME ##
- E:egpBox(1,vec2(0),vec2(512))
- E:egpColor(1,BGGrey)
- drawText(2,"DEALER'S CARDS",vec2(104,16),30,White)
- drawText(3,"BLACKJACK",vec2(256,256),48,Yellow)
- drawText(4,"PLAYER AND DEALER STOP ON 5 CARDS",vec2(256,224),22,White)
- drawText(5,"DEALER STOPS ON OR ABOVE 17",vec2(256,288),22,White)
- drawText(6,"PLAYER'S CARDS",vec2(406,496),30,White)
- drawText(7,"Game uses 2 deck of cards and is shuffled each round.",vec2(128,504),12,LGrey)
- drawText(35,"'!CLAIM' TO CLAIM AND PLAY.",vec2(256,304),18,White)
- for(I = 0,4) {
- E:egpBox(I+8,vec2(32+(I*96),32),vec2(64,96))
- E:egpColor(I+8,DGrey)
- }
- for(I = 0,4) {
- E:egpBox(I+13,vec2(32+(I*96),384),vec2(64,96))
- E:egpColor(I+13,DGrey)
- }
- drawText(18,DealerScore+"",vec2(256,168),64,White)
- drawText(19,PlayerScore+"",vec2(256,350),64,White)
- timer("loadSecond",1500)
- }
- if(clk("loadSecond")) {
- for(I = 0,4) {
- drawText(I+20,"",vec2(64+(I*96),80),48,LGrey)
- }
- for(I = 0,4) {
- drawText(I+25,"",vec2(64+(I*96),432),48,LGrey)
- }
- runOnChat(1)
- }
- if(chatClk()) {
- LS = lastSaid():lower():explode(" ")
- if(LS[1,string] == "!claim") {
- if(PU == NULL) {
- lastSpoke():msg("Type '!draw <bet>' to play. '!leave' to leave (Refunds not given).")
- PU = lastSpoke()
- E:egpSetText(35,"USE '!DRAW <BET>' TO PLACE A BET.")
- timer("DistanceCheck", 2000)
- } else {
- lastSpoke():msg("This has already been claimed. Wait for the player to finish.")
- }
- }
- if(LS[1,string] == "!leave" && PU == lastSpoke()) {
- if(LS:count() == 1) {
- lastSpoke():msg("Are you sure you want to leave? Type '!leave confirm' to leave.")
- }
- elseif(PU == lastSpoke() && LS[2,string] == "confirm") {
- lastSpoke():msg("You have left and unclaimed Souk Blackjack.")
- reset()
- }
- }
- if(LS[1,string] == "!draw" && PU == lastSpoke() && PlayerIn != 1) {
- if(LS[2,string]:toNumber() < owner():money()/10 && LS[2,string]:toNumber() >= 1) {
- Bet = LS[2,string]:toNumber()
- randomizeDeck()
- moneyRequest(PU,Bet)
- E:egpSetText(35,"'!HIT' TO GET ANOHER CARD. '!STAND' TO GO TO DEALER")
- } else { lastSpoke():msg("You need to change your bet. (Under:$" + owner():money()/10 +", over $1000)")}
- }
- if(LS[1,string] == "!hit" && PlayerIn == 1 && PU == lastSpoke()) {
- timer("drawPlayerS",500)
- if(PlayerCards == 5) {
- }
- }
- if(LS[1,string] == "!stand" && PlayerIn == 1 && PU == lastSpoke() && Stand != 1) {
- if(Stand == 0){
- if (SSTAND) {
- Stand = 1
- showHidden()
- timer("dealerPlay",500)
- SSTAND=0
- timer("SSTAND",5000)
- }
- }
- }
- }
- if(moneyClk()) {
- PlayerIn = 1
- PU:msg("Use '!hit' to draw an extra card. Or use '!stand' to move onto dealers turn.")
- timer("startGame",1000)
- }
- if(clk("drawPlayerS")) {
- drawPlayer(0)
- updatePlayer()
- PlayerCards++
- countScorePlayer()
- }
- if(clk("drawPlayerH")) {
- drawPlayer(0)
- updatePlayer()
- PlayerCards++
- countScorePlayer()
- }
- if(clk("drawDealerS")) {
- drawDealer(0)
- DealerCards++
- updateDealer()
- countScoreDealer()
- }
- if(clk("drawDealerH")) {
- drawDealer(1)
- DealerCards++
- updateDealer()
- countScoreDealer()
- if(PlayerScore == 21) {
- showHidden()
- countScoreDealer()
- timer("doWinner",500)
- }
- }
- if(clk("dealerPlay")) {
- if(DealerScore < 17 && DealerCards != 5 && PlayerScore <= 21) {
- drawDealer(0)
- DealerCards++
- updateDealer()
- countScoreDealer()
- timer("dealerPlay",750)
- } else {
- timer("doWinner",500)
- }
- }
- if(clk("doWinner")) {
- if((PlayerScore > DealerScore && PlayerScore <= 21) || (DealerScore > 21 && PlayerScore < 22)) {
- if(PlayerScore == 21 && PlayerCards == 2) {
- if(Stand == 0){
- Stand = 1
- PU:msg("You win with Blackjack. Enjoy your 2.5x payout!")
- moneyGive(PU,Bet*2.5)
- }
- } else {
- moneyGive(PU,Bet*2)
- PU:msg("You win with "+PlayerScore+". Enjoy your 2x payout!")
- }
- }
- elseif(PlayerScore == DealerScore) {
- if(PlayerScore == 21 && PlayerCards == 2 && DealerCards != 2) {
- if(Stand == 0){
- Stand = 1
- PU:msg("You win with Blackjack. Enjoy your 2.5x payout!")
- moneyGive(PU,Bet*2.5)
- }
- } else {
- moneyGive(PU,Bet*1)
- PU:msg("You pushed. Getting the same as the dealer with no 2 card 21. You get half your bet back :D")
- }
- }
- else {
- PU:msg("You have lost. Please try again.")
- }
- timer("reset",2500)
- }
- if(clk("startGame")) {
- timer("drawPlayerS",10)
- timer("drawDealerS",750)
- timer("drawPlayerH",1500)
- timer("drawDealerH",2250)
- }
- if(clk("reset")) {
- reset()
- }
- if(clk("DistanceCheck"))
- {
- if(PU:pos():distance(entity():pos()) > 600)
- {
- reset()
- }
- timer("DistanceCheck", 2000)
- }
- runOnTick(1)
- if(clk("SSTAND")) {SSTAND=1}
- E:egpBoxOutline(200,vec2(60,330),vec2(140,40))
- E:egpColor(200,vec(64,64,69))
- E:egpBoxOutline(201,vec2(316,330),vec2(140,40))
- E:egpColor(201,vec(64,64,69))
- E:egpText(202,"There is a !stand security",vec2(64,335))
- E:egpSize(202,12)
- E:egpColor(202,vec(204,204,204))
- E:egpText(203,"don't !stand if it's red",vec2(74,350))
- E:egpSize(203,12)
- E:egpColor(203,vec(204,204,204))
- if (SSTAND==1) {CDSTAND=vec(0,255,0)}
- if (SSTAND==0) {CDSTAND=vec(255,0,0)}
- E:egpText(204,"!stand",vec2(358,338))
- E:egpSize(204,22)
- E:egpFont(204,"arial")
- E:egpColor(204,CDSTAND)
Add Comment
Please, Sign In to add comment