Again, all feedback is welcome!
Here goes nothin'...
Bet Command:
1) Name : Blackjack Bet Cmd
2) Intended for : Mobiles
3) Trigger types: Command
4) Numeric Arg : 1
5) Arguments : bet
6) Commands:
eval deck[01] Ace 11 Diamonds
eval deck[02] Two 2 Diamonds
eval deck[03] Three 3 Diamonds
eval deck[04] Four 4 Diamonds
eval deck[05] Five 5 Diamonds
eval deck[06] Six 6 Diamonds
eval deck[07] Seven 7 Diamonds
eval deck[08] Eight 8 Diamonds
eval deck[09] Nine 9 Diamonds
eval deck[10] Ten 10 Diamonds
eval deck[11] Jack 10 Diamonds
eval deck[12] Queen 10 Diamonds
eval deck[13] King 10 Diamonds
eval deck[14] Ace 11 Hearts
eval deck[15] Two 2 Hearts
eval deck[16] Three 3 Hearts
eval deck[17] Four 4 Hearts
eval deck[18] Five 5 Hearts
eval deck[19] Six 6 Hearts
eval deck[20] Seven 7 Hearts
eval deck[21] Eight 8 Hearts
eval deck[22] Nine 9 Hearts
eval deck[23] Ten 10 Hearts
eval deck[24] Jack 10 Hearts
eval deck[25] Queen 10 Hearts
eval deck[26] King 10 Hearts
eval deck[27] Ace 11 Spades
eval deck[28] Two 2 Spades
eval deck[29] Three 3 Spades
eval deck[30] Four 4 Spades
eval deck[31] Five 5 Spades
eval deck[32] Six 6 Spades
eval deck[33] Seven 7 Spades
eval deck[34] Eight 8 Spades
eval deck[35] Nine 9 Spades
eval deck[36] Ten 10 Spades
eval deck[37] Jack 10 Spades
eval deck[38] Queen 10 Spades
eval deck[39] King 10 Spades
eval deck[40] Ace 11 Clubs
eval deck[41] Two 2 Clubs
eval deck[42] Three 3 Clubs
eval deck[43] Four 4 Clubs
eval deck[44] Five 5 Clubs
eval deck[45] Six 6 Clubs
eval deck[46] Seven 7 Clubs
eval deck[47] Eight 8 Clubs
eval deck[48] Nine 9 Clubs
eval deck[49] Ten 10 Clubs
eval deck[50] Jack 10 Clubs
eval deck[51] Queen 10 Clubs
eval deck[52] King 10 Clubs
eval nam 1
eval val 2
eval suit 3
eval plr %actor.id%
if bet == %cmd%
if %actor.varexists(playing_blackjack)%
%send% %actor% You're already playing! Finish your current game first.
halt
end
if %arg% < 100 || %arg% > 100000 || !%arg%
%send% %actor% You must bet an amount from 100 to 100,000.
halt
else
eval betamt %arg%
if %actor.gold% < %betamt%
%send% %actor% You don't have that much gold!
halt
else
nop %actor.gold(-%betamt%)%
%echo% %self.name% shuffles the deck.
**********************************************************
* New Game - Draw first card
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Get the card from the deck
eval pcard1 %%deck[%i%]%%
* Add the card to the used string. Since this is the
* first card, simply eval it
eval used %i%
* Extract the values from the array and say to player
extract pnam1 %nam% %pcard1%
extract pval1 %val% %pcard1%
extract psuit1 %suit% %pcard1%
%echoaround% %actor% %self.name% deals %actor.name% a card face-down.
%send% %actor% %self.name% deals you a %pnam1% of %psuit1%, worth %pval1% points.
* Done with first player card
**********************************************************
* Draw first dealer card
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Get the card from the deck
eval dcard1 %%deck[%i%]%%
* Add the card to the used string. Since this is the
* first card, simply eval it
eval used %used% %
* Extract the values from the array and say to player
extract dnam1 %nam% %dcard1%
extract dval1 %val% %dcard1%
extract dsuit1 %suit% %dcard1%
%echo% %self.name% deals %self.himher%self a card face-down.
* Done with first dealer card
**********************************************************
* Draw second player card
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Check the used string to see if this card is already used
eval test 0
while %test% == 0
* If the card # is a substring of the used string, pick another
if %used% /= %i%
eval i %random.52%
if %i% < 10
eval i 0%i%
end
else
* Card has not been used, add to used string
eval pcard2 %%deck[%i%]%%
eval used %used% %i%
eval test 1
end
done
* Extract the values from the array and say to player
extract pnam2 %nam% %pcard2%
extract pval2 %val% %pcard2%
extract psuit2 %suit% %pcard2%
if %pval1% == 11 && %pval2% == 11
eval pval1 1
end
%echoaround% %actor% %self.name% deals %actor.name% a %pnam2% of %psuit2%, worth %pval2% points.
%send% %actor% %self.name% deals you a %pnam2% of %psuit2%, worth %pval2% points.
**********************************************************
* Draw second dealer card
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Check the used string to see if this card is already used
eval test 0
while %test% == 0
* If the card # is a substring of the used string, pick another
if %used% /= %i%
eval i %random.52%
if %i% < 10
eval i 0%i%
end
else
* Card has not been used, add to used string
eval dcard2 %%deck[%i%]%%
eval used %used% %i%
eval test 1
end
done
* Extract the values from the array and say to player
extract dnam2 %nam% %dcard2%
extract dval2 %val% %dcard2%
extract dsuit2 %suit% %dcard2%
if %dval1% == 11 && %dval2% == 11
eval dval1 1
end
eval cards 2
%echo% %self.name% deals %self.himher%self a %dnam2% of %dsuit2%, worth %dval2% points.
eval ptotal %pval1% + %pval2%
%send% %actor% Your %cards% cards total %ptotal%.
eval dtotal %dval1% + %dval2%
%echo% %self.name% checks %self.hisher% cards.
* If we have blackjack, check for dealer blackjack tie, quit
if %ptotal% == 21
* Did dealer also get blackjack? Return bet if so
if %dtotal% == 21
%echo% %self.name% looks boggled.
%echo% %self.name% reveals their hand showing %dnam1% of %dsuit1% and %dnam2% of %dsuit2%.
say Well, I guess we tie on this one, %actor.name%.
%send% %actor% %self.name% hands you back your %betamt% coins.
nop %actor.gold(%betamt%)%
halt
end
if %psuit1% == %psuit2%
* Same-suit blackjack pays out 6:1
say Same-suit Blackjack! You win the big payout, %actor.name%!
eval prize %betamt% * 6
nop %actor.gold(%prize%)%
%send% %actor% You win %prize% coins!
halt
else
* Regular blackjack pays out 3:1
say Blackjack! You win, %actor.name%!
eval prize %betamt% * 3
nop %actor.gold(%prize%)%
%send% %actor% You win %prize% coins!
halt
end
end
if %dtotal% == 21
say Woohoo! Blackjack! Sorry, %actor.name%, you lose!
halt
end
* No blackjack, assign variables to player
eval playing_blackjack 1
remote playing_blackjack %plr%
remote pval1 %plr%
remote pnam1 %plr%
remote psuit1 %plr%
remote pval2 %plr%
remote pnam2 %plr%
remote psuit2 %plr%
remote dval1 %plr%
remote dnam1 %plr%
remote dsuit1 %plr%
remote dval2 %plr%
remote dnam2 %plr%
remote dsuit2 %plr%
remote used %plr%
remote betamt %plr%
say Ok, no blackjacks. Would you like to hit, stand, or know your total, %actor.name%?
halt
* Done with second card
**********************************************************
end
end
else
return 0
end
Hit Command:
1) Name : Blackjack Hit Cmd
2) Intended for : Mobiles
3) Trigger types: Command
4) Numeric Arg : 1
5) Arguments : hit
6) Commands:
eval deck[01] Ace 11 Diamonds
eval deck[02] Two 2 Diamonds
eval deck[03] Three 3 Diamonds
eval deck[04] Four 4 Diamonds
eval deck[05] Five 5 Diamonds
eval deck[06] Six 6 Diamonds
eval deck[07] Seven 7 Diamonds
eval deck[08] Eight 8 Diamonds
eval deck[09] Nine 9 Diamonds
eval deck[10] Ten 10 Diamonds
eval deck[11] Jack 10 Diamonds
eval deck[12] Queen 10 Diamonds
eval deck[13] King 10 Diamonds
eval deck[14] Ace 11 Hearts
eval deck[15] Two 2 Hearts
eval deck[16] Three 3 Hearts
eval deck[17] Four 4 Hearts
eval deck[18] Five 5 Hearts
eval deck[19] Six 6 Hearts
eval deck[20] Seven 7 Hearts
eval deck[21] Eight 8 Hearts
eval deck[22] Nine 9 Hearts
eval deck[23] Ten 10 Hearts
eval deck[24] Jack 10 Hearts
eval deck[25] Queen 10 Hearts
eval deck[26] King 10 Hearts
eval deck[27] Ace 11 Spades
eval deck[28] Two 2 Spades
eval deck[29] Three 3 Spades
eval deck[30] Four 4 Spades
eval deck[31] Five 5 Spades
eval deck[32] Six 6 Spades
eval deck[33] Seven 7 Spades
eval deck[34] Eight 8 Spades
eval deck[35] Nine 9 Spades
eval deck[36] Ten 10 Spades
eval deck[37] Jack 10 Spades
eval deck[38] Queen 10 Spades
eval deck[39] King 10 Spades
eval deck[40] Ace 11 Clubs
eval deck[41] Two 2 Clubs
eval deck[42] Three 3 Clubs
eval deck[43] Four 4 Clubs
eval deck[44] Five 5 Clubs
eval deck[45] Six 6 Clubs
eval deck[46] Seven 7 Clubs
eval deck[47] Eight 8 Clubs
eval deck[48] Nine 9 Clubs
eval deck[49] Ten 10 Clubs
eval deck[50] Jack 10 Clubs
eval deck[51] Queen 10 Clubs
eval deck[52] King 10 Clubs
eval nam 1
eval val 2
eval suit 3
eval plr %actor.id%
if hit == %cmd%
if !%actor.varexists(playing_blackjack)%
%send% %actor% You must place a bet first!
halt
else
* Already playing, get existing cards
if %actor.varexists(pval4)%
eval pval4 %actor.pval4%
eval pnam4 %actor.pnam4%
eval psuit4 %actor.psuit4%
end
if %actor.varexists(pval3)%
eval pval3 %actor.pval3%
eval pnam3 %actor.pnam3%
eval psuit3 %actor.psuit3%
end
eval pval2 %actor.pval2%
eval pnam2 %actor.pnam2%
eval psuit2 %actor.psuit2%
eval pval1 %actor.pval1%
eval pnam1 %actor.pnam1%
eval psuit1 %actor.psuit1%
eval dval2 %actor.dval2%
eval dnam2 %actor.dnam2%
eval dsuit2 %actor.dsuit2%
eval dval1 %actor.dval1%
eval dnam1 %actor.dnam1%
eval dsuit1 %actor.dsuit1%
eval used %actor.used%
eval betamt %actor.betamt%
if %pval4%
eval cards 4
elseif %pval3%
eval cards 3
else
eval cards 2
end
* Done initializing
************************************************
* Deal hit cards
if %cards% == 2
* Draw third player card
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Check the used string to see if this card is already used
eval test 0
while %test% == 0
* If the card # is a substring of the used string, pick another
if %used% /= %i%
eval i %random.52%
if %i% < 10
eval i 0%i%
end
else
* Card has not been used, add to used string
eval pcard3 %%deck[%i%]%%
eval used %used% %i%
eval test 1
end
done
* Extract the values from the array
extract pnam3 %nam% %pcard3%
extract pval3 %val% %pcard3%
extract psuit3 %suit% %pcard3%
* Calc total and check if Ace value is too high
eval ptotal %pval1% + %pval2%
if %pval3% == 11
if %ptotal% < 11
eval pval3 11
else
eval pval3 1
end
end
eval ptotal %pval1% + %pval2% + %pval3%
if %ptotal% > 21
if %pval1% == 11
eval pval1 1
remote pval1 %plr%
elseif %pval2% == 11
eval pval2 1
remote pval2 %plr%
end
end
eval cards 3
%echoaround% %actor% %self.name% deals %actor.name% a card.
%send% %actor% %self.name% deals you a %pnam3% of %psuit3%, worth %pval3% points.
eval ptotal %pval1% + %pval2% + %pval3%
* If bust, quit and delete player vars, else add card3 to player
if %ptotal% > 21
say Sorry, %actor.name%, you bust with %ptotal%!
rdelete pval1 %plr%
rdelete pnam1 %plr%
rdelete psuit1 %plr%
rdelete pval2 %plr%
rdelete pnam2 %plr%
rdelete psuit2 %plr%
rdelete dval1 %plr%
rdelete dnam1 %plr%
rdelete dsuit1 %plr%
rdelete dval2 %plr%
rdelete dnam2 %plr%
rdelete dsuit2 %plr%
rdelete used %plr%
rdelete betamt %plr%
rdelete playing_blackjack %plr%
halt
else
remote pval3 %plr%
remote pnam3 %plr%
remote psuit3 %plr%
remote used %plr%
%send% %actor% Your %cards% cards total %ptotal%.
say Would you like to hit, stand, or know your total, %actor.name%?
halt
end
* Done with third card
elseif %cards% == 3
* Draw fourth player card
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Check the used string to see if this card is already used
eval test 0
while %test% == 0
* If the card # is a substring of the used string, pick another
if %used% /= %i%
eval i %random.52%
if %i% < 10
eval i 0%i%
end
else
* Card has not been used, add to used string
eval pcard4 %%deck[%i%]%%
eval used %used% %i%
eval test 1
end
done
* Extract the values from the array
extract pnam4 %nam% %pcard4%
extract pval4 %val% %pcard4%
extract psuit4 %suit% %pcard4%
* Calc total and check if Ace value is too high
eval ptotal %pval1% + %pval2% + %pval3%
if %pval4% == 11
if %ptotal% < 11
eval pval4 11
else
eval pval4 1
end
end
eval ptotal %pval1% + %pval2% + %pval3% + %pval4%
if %ptotal% > 21
if %pval1% == 11
eval pval1 1
remote pval1 %plr%
elseif %pval2% == 11
eval pval2 1
remote pval2 %plr%
elseif %pval3% == 11
eval pval3 1
remote pval3 %plr%
end
end
eval cards 4
%echoaround% %actor% %self.name% deals %actor.name% a card.
%send% %actor% %self.name% deals you a %pnam4% of %psuit4%, worth %pval4% points.
eval ptotal %pval1% + %pval2% + %pval3% + %pval4%
* If bust, quit and delete player vars, else add card3 to player
if %ptotal% > 21
say Sorry, %actor.name%, you bust with %ptotal%!
rdelete pval1 %plr%
rdelete pnam1 %plr%
rdelete psuit1 %plr%
rdelete pval2 %plr%
rdelete pnam2 %plr%
rdelete psuit2 %plr%
rdelete pval3 %plr%
rdelete pnam3 %plr%
rdelete psuit3 %plr%
rdelete dval1 %plr%
rdelete dnam1 %plr%
rdelete dsuit1 %plr%
rdelete dval2 %plr%
rdelete dnam2 %plr%
rdelete dsuit2 %plr%
rdelete used %plr%
rdelete betamt %plr%
rdelete playing_blackjack %plr%
halt
else
remote pval4 %plr%
remote pnam4 %plr%
remote psuit4 %plr%
remote used %plr%
%send% %actor% Your %cards% cards total %ptotal%.
say Would you like to hit, stand, or know your total, %actor.name%?
halt
end
* Done with fourth card
elseif %cards% == 4
* Draw fifth card
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Check the used string to see if this card is already used
eval test 0
while %test% == 0
* If the card # is a substring of the used string, pick another
if %used% /= %i%
eval i %random.52%
if %i% < 10
eval i 0%i%
end
else
* Card has not been used, add to used string
eval pcard5 %%deck[%i%]%%
eval used %used% %i%
eval test 1
end
done
* Extract the values from the array and say to player
extract pnam5 %nam% %pcard5%
extract pval5 %val% %pcard5%
extract psuit5 %suit% %pcard5%
* Calc total and check if Ace value is too high
eval ptotal %pval1% + %pval2% + %pval3% + %pval4%
if %pval5% == 11
if %ptotal% < 11
eval pval5 11
else
eval pval5 1
end
end
%echoaround% %actor% %self.name% deals %actor.name% a card.
%send% %actor% %self.name% deals you a %pnam5% of %psuit5%, worth %pval5% points.
eval ptotal %pval1% + %pval2% + %pval3% + %pval4% + %pval5%
* Last card, don't need to update remotes
if %ptotal% > 21
if %pval1% == 11
eval pval1 1
elseif %pval2% == 11
eval pval2 1
elseif %pval3% == 11
eval pval3 1
elseif %pval4% == 11
eval pval4 1
end
end
eval ptotal %pval1% + %pval2% + %pval3% + %pval4% + %pval5%
eval cards 5
%send% %actor% Your %cards% cards total %ptotal%.
* Check for bust or 5-card charlie. Delete player vars.
if %ptotal% > 21
say Sorry, %actor.name%, you bust with %ptotal%!
else
say 5-Card Charlie! You win, %actor.name%!
eval prize %betamt% * 5
nop %actor.gold(%betamt%)%
%send% %actor% You win %prize% coins!
end
rdelete pval1 %plr%
rdelete pnam1 %plr%
rdelete psuit1 %plr%
rdelete pval2 %plr%
rdelete pnam2 %plr%
rdelete psuit2 %plr%
rdelete pval3 %plr%
rdelete pnam3 %plr%
rdelete psuit3 %plr%
rdelete pval4 %plr%
rdelete pnam4 %plr%
rdelete psuit4 %plr%
rdelete dval1 %plr%
rdelete dnam1 %plr%
rdelete dsuit1 %plr%
rdelete dval2 %plr%
rdelete dnam2 %plr%
rdelete dsuit2 %plr%
rdelete used %plr%
rdelete betamt %plr%
rdelete playing_blackjack %plr%
halt
end
* Done with fifth card
end
else
return 0
end
Stand Command:
1) Name : Blackjack Stand Cmd
2) Intended for : Mobiles
3) Trigger types: Command
4) Numeric Arg : 1
5) Arguments : stand
6) Commands:
eval deck[01] Ace 11 Diamonds
eval deck[02] Two 2 Diamonds
eval deck[03] Three 3 Diamonds
eval deck[04] Four 4 Diamonds
eval deck[05] Five 5 Diamonds
eval deck[06] Six 6 Diamonds
eval deck[07] Seven 7 Diamonds
eval deck[08] Eight 8 Diamonds
eval deck[09] Nine 9 Diamonds
eval deck[10] Ten 10 Diamonds
eval deck[11] Jack 10 Diamonds
eval deck[12] Queen 10 Diamonds
eval deck[13] King 10 Diamonds
eval deck[14] Ace 11 Hearts
eval deck[15] Two 2 Hearts
eval deck[16] Three 3 Hearts
eval deck[17] Four 4 Hearts
eval deck[18] Five 5 Hearts
eval deck[19] Six 6 Hearts
eval deck[20] Seven 7 Hearts
eval deck[21] Eight 8 Hearts
eval deck[22] Nine 9 Hearts
eval deck[23] Ten 10 Hearts
eval deck[24] Jack 10 Hearts
eval deck[25] Queen 10 Hearts
eval deck[26] King 10 Hearts
eval deck[27] Ace 11 Spades
eval deck[28] Two 2 Spades
eval deck[29] Three 3 Spades
eval deck[30] Four 4 Spades
eval deck[31] Five 5 Spades
eval deck[32] Six 6 Spades
eval deck[33] Seven 7 Spades
eval deck[34] Eight 8 Spades
eval deck[35] Nine 9 Spades
eval deck[36] Ten 10 Spades
eval deck[37] Jack 10 Spades
eval deck[38] Queen 10 Spades
eval deck[39] King 10 Spades
eval deck[40] Ace 11 Clubs
eval deck[41] Two 2 Clubs
eval deck[42] Three 3 Clubs
eval deck[43] Four 4 Clubs
eval deck[44] Five 5 Clubs
eval deck[45] Six 6 Clubs
eval deck[46] Seven 7 Clubs
eval deck[47] Eight 8 Clubs
eval deck[48] Nine 9 Clubs
eval deck[49] Ten 10 Clubs
eval deck[50] Jack 10 Clubs
eval deck[51] Queen 10 Clubs
eval deck[52] King 10 Clubs
eval nam 1
eval val 2
eval suit 3
eval plr %actor.id%
if stand == %cmd%
if !%actor.varexists(playing_blackjack)%
return 0
else
* Already playing, get existing cards
if %actor.varexists(pval4)%
eval pval4 %actor.pval4%
eval pnam4 %actor.pnam4%
eval psuit4 %actor.psuit4%
end
if %actor.varexists(pval3)%
eval pval3 %actor.pval3%
eval pnam3 %actor.pnam3%
eval psuit3 %actor.psuit3%
end
eval pval2 %actor.pval2%
eval pnam2 %actor.pnam2%
eval psuit2 %actor.psuit2%
eval pval1 %actor.pval1%
eval pnam1 %actor.pnam1%
eval psuit1 %actor.psuit1%
eval dval2 %actor.dval2%
eval dnam2 %actor.dnam2%
eval dsuit2 %actor.dsuit2%
eval dval1 %actor.dval1%
eval dnam1 %actor.dnam1%
eval dsuit1 %actor.dsuit1%
eval used %actor.used%
eval betamt %actor.betamt%
if %pval4%
eval ptotal %pval1% + %pval2% + %pval3% + %pval4%
elseif %pval3%
eval ptotal %pval1% + %pval2% + %pval3%
else
eval ptotal %pval1% + %pval2%
end
%send% %actor% You stand with %ptotal%.
%echoaround% %actor% %actor.name% stands with %ptotal%.
* Done initializing
************************************************
* Now deal cards to dealer until dtotal >= 17, bust,
* or 5-card charlie.
*
* First check to see if dealer total >= 17
eval dtotal %dval1% + %dval2%
if %dtotal% >= 17
%echo% %self.name% reveals a %dnam1% of %dsuit1%, worth %dval1% points.
%echo% %self.name% reveals a %dnam2% of %dsuit2%, worth %dval2% points.
%echo% %self.name% stands with %dtotal%.
if %ptotal% > %dtotal%
say You beat my %dtotal% with %ptotal%. You win, %actor.name%!
eval prize %betamt% * 2
nop %actor.gold(%prize%)%
%send% %actor% You win %prize% coins!
elseif %ptotal% == %dtotal%
say It's a push, %actor.name%. Here's your coins back.
nop %actor.gold(%betamt%)%
%send% %actor% %self.name% gives you %betamt% coins.
elseif %ptotal% < %dtotal%
say Sorry %actor.name%, but my %dtotal% beats your %ptotal%. You lose!
end
eval endgame 1
end
if !%endgame%
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Check the used string to see if this card is already used
eval test 0
while %test% == 0
* If the card # is a substring of the used string, pick another
if %used% /= %i%
eval i %random.52%
if %i% < 10
eval i 0%i%
end
else
* Card has not been used, add to used string
eval dcard3 %%deck[%i%]%%
eval used %used% %i%
eval test 1
end
done
* Extract the values from the array
extract dnam3 %nam% %dcard3%
extract dval3 %val% %dcard3%
extract dsuit3 %suit% %dcard3%
* Calc total and check if Ace value is too high
eval dtotal %dval1% + %dval2%
if %dval3% == 11
if %dtotal% < 11
eval dval3 11
else
eval dval3 1
end
end
eval dtotal %dval1% + %dval2% + %dval3%
if %dtotal% > 21
if %dval1% == 11
eval dval1 1
elseif %dval2% == 11
eval dval2 1
end
end
%echo% %self.name% deals %self.himher%self a %dnam3% of %dsuit3%, worth %dval3% points.
eval dtotal %dval1% + %dval2% + %dval3%
if %dtotal% > 21
say Whoops, I bust! You win, %actor.name%!
eval prize %betamt% * 2
nop %actor.gold(%prize%)%
%send% %actor% You win %prize% coins!
eval endgame 1
end
if %dtotal% >= 17 && !%endgame%
%echo% %self.name% reveals a %dnam1% of %dsuit1%, worth %dval1% points.
%echo% %self.name% reveals a %dnam2% of %dsuit2%, worth %dval2% points.
%echo% %self.name% reveals a %dnam3% of %dsuit3%, worth %dval3% points.
%echo% %self.name% stands with %dtotal%.
if %ptotal% > %dtotal%
say You beat my %dtotal% with %ptotal%. You win, %actor.name%!
eval prize %betamt% * 2
nop %actor.gold(%prize%)%
%send% %actor% You win %prize% coins!
elseif %ptotal% == %dtotal%
say It's a push, %actor.name%. Here's your coins back.
nop %actor.gold(%betamt%)%
%send% %actor% %self.name% gives you %betamt% coins.
elseif %ptotal% < %dtotal%
say Sorry %actor.name%, but my %dtotal% beats your %ptotal%. You lose!
end
eval endgame 1
end
end
* Done with dealer third card
********************************************************
if !%endgame%
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Check the used string to see if this card is already used
eval test 0
while %test% == 0
* If the card # is a substring of the used string, pick another
if %used% /= %i%
eval i %random.52%
if %i% < 10
eval i 0%i%
end
else
* Card has not been used, add to used string
eval dcard4 %%deck[%i%]%%
eval used %used% %i%
eval test 1
end
done
* Extract the values from the array
extract dnam4 %nam% %dcard4%
extract dval4 %val% %dcard4%
extract dsuit4 %suit% %dcard4%
* Calc total and check if Ace value is too high
eval dtotal %dval1% + %dval2% + %dval3%
if %dval4% == 11
if %dtotal% < 11
eval dval4 11
else
eval dval4 1
end
end
eval dtotal %dval1% + %dval2% + %dval3% + %dval4%
if %dtotal% > 21
if %dval1% == 11
eval dval1 1
elseif %dval2% == 11
eval dval2 1
elseif %dval3% == 11
eval dval3 1
end
end
%echo% %self.name% deals %self.himher%self a %dnam4% of %dsuit4%, worth %dval4% points.
eval dtotal %dval1% + %dval2% + %dval3% + %dval4%
if %dtotal% > 21
say Whoops, I bust! You win, %actor.name%!
eval prize %betamt% * 2
nop %actor.gold(%prize%)%
%send% %actor% You win %prize% coins!
eval endgame 1
end
if %dtotal% >= 17 && !%endgame%
%echo% %self.name% reveals a %dnam1% of %dsuit1%, worth %dval1% points.
%echo% %self.name% reveals a %dnam2% of %dsuit2%, worth %dval2% points.
%echo% %self.name% reveals a %dnam3% of %dsuit3%, worth %dval3% points.
%echo% %self.name% reveals a %dnam4% of %dsuit4%, worth %dval4% points.
%echo% %self.name% stands with %dtotal%.
if %ptotal% > %dtotal%
say You beat my %dtotal% with %ptotal%. You win, %actor.name%!
eval prize %betamt% * 2
nop %actor.gold(%prize%)%
%send% %actor% You win %prize% coins!
elseif %ptotal% == %dtotal%
say It's a push, %actor.name%. Here's your coins back.
nop %actor.gold(%betamt%)%
%send% %actor% %self.name% gives you %betamt% coins.
elseif %ptotal% < %dtotal%
say Sorry %actor.name%, but my %dtotal% beats your %ptotal%. You lose!
end
eval endgame 1
end
end
* Done with dealer fourth card
********************************************************
* Dealer fifth card
if !%endgame%
eval i %random.52%
* This makes i = 01 or 08, etc instead of 1 or 8
if %i% < 10
eval i 0%i%
end
* Check the used string to see if this card is already used
eval test 0
while %test% == 0
* If the card # is a substring of the used string, pick another
if %used% /= %i%
eval i %random.52%
if %i% < 10
eval i 0%i%
end
else
* Card has not been used, add to used string
eval dcard5 %%deck[%i%]%%
eval used %used% %i%
eval test 1
end
done
* Extract the values from the array
extract dnam5 %nam% %dcard5%
extract dval5 %val% %dcard5%
extract dsuit5 %suit% %dcard5%
* Calc total and check if Ace value is too high
eval dtotal %dval1% + %dval2% + %dval3% + %dval4%
if %dval5% == 11
if %dtotal% < 11
eval dval5 11
else
eval dval5 1
end
end
eval dtotal %dval1% + %dval2% + %dval3% + %dval4% + %dval5%
if %dtotal% > 21
if %dval1% == 11
eval dval1 1
elseif %dval2% == 11
eval dval2 1
elseif %dval3% == 11
eval dval3 1
elseif %dval4% == 11
eval dval4 1
end
end
%echo% %self.name% deals %self.himher%self a %dnam5% of %dsuit5%, worth %dval5% points.
eval dtotal %dval1% + %dval2% + %dval3% + %dval4% + %dval5%
if %dtotal% > 21
say Whoops, I bust! You win, %actor.name%!
eval prize %betamt% * 2
nop %actor.gold(%prize%)%
%send% %actor% You win %prize% coins!
eval endgame 1
end
if %dtotal% >= 17 && !%endgame%
say Woohoo! 5-Card Charlie! Sorry, %actor.name%, but I win!
end
end
rdelete pval1 %plr%
rdelete pnam1 %plr%
rdelete psuit1 %plr%
rdelete pval2 %plr%
rdelete pnam2 %plr%
rdelete psuit2 %plr%
if %actor.varexists(pval3)%
rdelete pval3 %plr%
rdelete pnam3 %plr%
rdelete psuit3 %plr%
end
if %actor.varexists(pval4)%
rdelete pval4 %plr%
rdelete pnam4 %plr%
rdelete psuit4 %plr%
end
rdelete dval1 %plr%
rdelete dnam1 %plr%
rdelete dsuit1 %plr%
rdelete dval2 %plr%
rdelete dnam2 %plr%
rdelete dsuit2 %plr%
rdelete used %plr%
rdelete betamt %plr%
rdelete playing_blackjack %plr%
halt
end
else
return 0
end
Enjoy!





