Files
abysmal-isle/Scripts/SubSystem/blackjack/gambler.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

1144 lines
27 KiB
C#

// PlayingCards by zulu updated February 2004
// some bug fixes/updates XxSP1DERxX
using System;
using Server;
using Server.Items;
using Server.Network;
using Server.Gumps;
using System.Collections;
using Server.Mobiles;
namespace Server.Mobiles
{
public class Gambler : BaseCreature
{
public static bool NewCards = false;
private int m_current_card = 53;
private int [] Cardz = new int[53];
private int [] dealercards = new int[5];
private int [] playercards = new int[5];
private int [] gamestats = new int[6]; // win-loss-tie
private bool pbj = false;
private bool dbj = false;
private int playerbet = 100;
private bool roundend;
private bool dealercardhidden;
private bool busy;
private string pokermsg ="";
private int dwin = 0;
private int pwin = 0;
private Mobile m_player;
[Constructable]
public Gambler() : base( AIType.AI_Melee, FightMode.None, 10, 1, 0.8, 3.0 )
{
SetStr( 10, 30 );
SetDex( 10, 30 );
SetInt( 10, 30 );
Fame = 50;
Karma = 50;
SpeechHue = Utility.RandomDyedHue();
Title = "the gambler";
Hue = Utility.RandomSkinHue();
Blessed = true;
NameHue = 0x35;
if ( this.Female = Utility.RandomBool() )
{
this.Body = 0x191;
this.Name = NameList.RandomName( "female" );
Item hair = new Item( Utility.RandomList( 0x203B, 0x203C, 0x203D, 0x2045, 0x204A, 0x2046 , 0x2049 ) );
hair.Hue = Utility.RandomHairHue();
hair.Layer = Layer.Hair;
hair.Movable = false;
AddItem( hair );
Item hat = null;
switch ( Utility.Random( 5 ) )
{
case 0: hat = new FloppyHat( Utility.RandomNeutralHue() ); break;
case 1: hat = new FeatheredHat( Utility.RandomNeutralHue() ); break;
case 2: hat = new Bonnet(); break;
case 3: hat = new Cap( Utility.RandomNeutralHue() ); break;
}
AddItem( hat );
}
else
{
this.Body = 0x190;
this.Name = NameList.RandomName( "male" );
Item hair = new Item( Utility.RandomList( 0x203B, 0x203C, 0x203D, 0x2044, 0x2045, 0x2047, 0x2048 ) );
hair.Hue = Utility.RandomHairHue();
hair.Layer = Layer.Hair;
hair.Movable = false;
AddItem( hair );
Item beard = new Item( Utility.RandomList( 0x0000, 0x203E, 0x203F, 0x2040, 0x2041, 0x2067, 0x2068, 0x2069 ) );
beard.Hue = hair.Hue;
beard.Layer = Layer.FacialHair;
beard.Movable = false;
AddItem( beard );
Item hat = null;
switch ( Utility.Random( 7 ) )
{
case 0: hat = new SkullCap( GetRandomHue() ); break;
case 1: hat = new Bandana( GetRandomHue() ); break;
case 2: hat = new WideBrimHat(); break;
case 3: hat = new TallStrawHat( Utility.RandomNeutralHue() ); break;
case 4: hat = new StrawHat( Utility.RandomNeutralHue() ); break;
case 5: hat = new TricorneHat( Utility.RandomNeutralHue() ); break;
}
AddItem( hat );
}
AddItem( new LongPants( GetRandomHue() ) );
AddItem( new FancyShirt( GetRandomHue() ) );
AddItem( new Boots( Utility.RandomNeutralHue() ) );
AddItem( new Cloak( GetRandomHue() ) );
AddItem( new BodySash( GetRandomHue() ) );
Container pack = new Backpack();
pack.DropItem( new Gold( 5, 500 ) );
pack.Movable = false;
pack.Visible = false;
AddItem( pack );
//reset stats
for ( int i = 0; i <= 5; ++i )
gamestats[i]=0;
}
public override bool ClickTitle{ get{ return false; } }
public override bool HandlesOnSpeech( Mobile from )
{
if ( from.InRange( this.Location, 4 ) )
return true;
return base.HandlesOnSpeech( from );
}
public override void OnSpeech( SpeechEventArgs e )
{
base.OnSpeech( e );
Mobile from = e.Mobile;
string message;
if ( from.InRange( this, 4 ))
{
if (m_player != null)
{
if ( m_player.NetState == null )
busy = false;
}
if (e.Speech.ToLower() == "hello" || e.Speech.ToLower() == "hi" || e.Speech.ToLower() == "gambler")
{
message = "Let's play blackjack or poker.";
this.Say( message );
}
else if (e.Speech.ToLower() == "play")
{
message = "Would you like to play blackjack or poker?";
this.Say( message );
}
else if (e.Speech.ToLower() == "reset")
{
if ( from.AccessLevel >= AccessLevel.Seer )
{
busy = false;
message = "I am no longer busy.";
this.Say( message );
}
}
else if (e.Speech.ToLower() == "blackjack" || e.Speech.ToLower() == "play Blackjack")
{
if (!busy)
{
playerbet = 100;
busy = true;
roundend = true;
m_current_card = 53;
dealercardhidden = false;
dwin = 0;
pwin = 0;
dealercards[0]=12;
playercards[0]=13;
dealercards[1]=11;
playercards[1]=26;
for ( int i = 2; i <= 4; ++i )
{
dealercards[i]=0;
playercards[i]=0;
}
pokermsg = "ATA- rules";
message = "So, you want to try your luck.";
this.Say( message );
m_player = from;
playblackjack( from );
}
else if ( m_player.NetState == from.NetState )
{
message = "We are already playing cards.";
this.Say( message );
}
else
{
message = "I am busy playing cards.";
this.Say( message );
}
}
else if (e.Speech.ToLower() == "poker" || e.Speech.ToLower() == "play Poker")
{
if (!busy)
{
playerbet = 100;
busy = true;
roundend = true;
m_current_card = 53;
pwin = 0;
dwin = 0;
for ( int i = 0; i <= 4; ++i )
playercards[i]=35+i;
pokermsg = "ATA- rules";
m_player = from;
playpoker( from );
message = "So, you want to try your luck.";
this.Say( message );
}
else if ( m_player.NetState == from.NetState )
{
message = "We are already playing cards.";
this.Say( message );
}
else
{
message = "I am busy playing cards.";
this.Say( message );
}
}
}
} //OnSpeech
public void payplayer( Mobile from, int quantity)
{
from.AddToBackpack( new Gold( quantity ) );
}
public bool paydealer( Mobile from, int quantity)
{
return from.Backpack.ConsumeTotal( typeof( Gold ), quantity );
}
public string CardSuit( int card )
{
if (card>=1 && card<=13)
return "C";
else if (card>=14 && card <=26)
return "D";
else if (card>=27 && card <=39)
return "H";
else
return "S";
}
public string CardName( int card )
{
while (card>13)
card -= 13;
if(card==1)
return "A";
else if(card == 11)
return "J";
else if(card == 12)
return "Q";
else if(card == 13)
return "K";
else
return "" + card;
}
public int CardValue( int card )
{
while (card>13)
card -= 13;
if(card==1)
return 11;
if(card>10)
return 10;
return card;
}
public int cardcolor( string cardtemp )
{
if ( cardtemp == "D" || cardtemp == "H" )
return 32;
return 0;
}
public int CardValue2( int card )
{
while (card>13)
card -= 13;
if(card==1)
return 14;
return card;
}
public void ShuffleCards( )
{
int i, tempcard , tempcard2;
for ( i = 1; i < 53; ++i )
Cardz[i]=i;
for ( i = 52; i >= 1; --i )
{
tempcard = Utility.Random( i )+1;
tempcard2 = Cardz[tempcard];
Cardz[tempcard] = Cardz[i];
Cardz[i] = tempcard2;
}
m_current_card = 1;
}
public int pickcard(Mobile from)
{
if (m_current_card == 53)
{
Effects.PlaySound( from.Location, from.Map, 0x3D );
ShuffleCards( );
}
return Cardz[m_current_card++];
}
public void playblackjack( Mobile from )
{
from.SendGump( new BlackjackGump( this, this ) );
}
public void playpoker( Mobile from )
{
from.SendGump( new PokerGump( this, this ) );
}
public override bool DisallowAllMoves
{
get { return true; }
}
public override void OnDoubleClick( Mobile from )
{
if ( from.AccessLevel >= AccessLevel.Seer )
from.SendGump( new GamblerStatsGump( this ) );
else
base.OnDoubleClick( from );
}
public Gambler( Serial serial ) : base( serial )
{
}
private int GetRandomHue()
{
switch ( Utility.Random( 6 ) )
{
default:
case 0: return 0;
case 1: return Utility.RandomBlueHue();
case 2: return Utility.RandomGreenHue();
case 3: return Utility.RandomRedHue();
case 4: return Utility.RandomYellowHue();
case 5: return Utility.RandomNeutralHue();
}
}
public class GamblerStatsGump : Gump
{
private Gambler m_From;
public GamblerStatsGump( Gambler gambler ) : base( 10, 10 )
{
m_From = gambler;
AddPage( 0 );
AddBackground( 30, 100, 90, 160, 5120 );
AddLabel( 45, 100, 70, "Blackjack" );
AddLabel( 45, 115, 600, "Wins: "+m_From.gamestats[0] );
AddLabel( 45, 130, 600, "Loss: "+m_From.gamestats[1] );
AddLabel( 45, 145, 600, "Tied: "+m_From.gamestats[2] );
AddLabel( 45, 165, 70, "Poker" );
AddLabel( 45, 180, 600, "Wins: "+m_From.gamestats[3] );
AddLabel( 45, 195, 600, "Loss: "+m_From.gamestats[4] );
AddLabel( 45, 210, 600, "Tied: "+m_From.gamestats[5] );
AddLabel( 45, 230, 1500, "Reset" );
AddButton( 85, 235, 2117, 2118, 101, GumpButtonType.Reply, 0 );
}
public override void OnResponse( NetState sender, RelayInfo info )
{
switch ( info.ButtonID )
{
case 101:
{ // reset
for ( int i = 0; i <= 5; ++i )
m_From.gamestats[i]=0;
break;
}
}
}
}
public class PokerGump : Gump
{
private Gambler m_From;
public PokerGump( Mobile mobile, Gambler gambler ) : base( 10, 10 )
{
m_From = gambler;
int i,temp=0;
string cardtemp="Player:";
Closable = false;
AddPage( 0 );
AddImageTiled( 30, 100, 460, 160, 2624 );
AddAlphaRegion( 90, 100, 460, 105 );
if (m_From.dwin==2||m_From.dwin==1)
cardtemp="Player: 1";
AddLabel( 35, 109, 600, cardtemp );
AddButton( 33, 243, 3, 4, 666, GumpButtonType.Reply, 0 );
if (m_From.pwin>0)
AddLabel( 45, 129, 70, ""+m_From.pwin );
//show player cards
for ( i = 0; i <= 4; ++i )
{
if (m_From.dwin==1)
m_From.playercards[i]=m_From.pickcard(mobile);
temp = m_From.playercards[i];
if (temp>0)
{
if (!NewCards)
{
AddBackground( 65 + ((i+1)*40), 108, 35, 50, 2171 );
cardtemp = m_From.CardSuit( temp );
AddLabel( 80 + ((i+1)*40), 134, m_From.cardcolor( cardtemp ), cardtemp );
AddLabel( 72 + ((i+1)*40), 113, 600, m_From.CardName( temp ) );
AddLabel( 65 + ((i+1)*40), 180, 500, "redeal" );
}
if (m_From.dwin==1||m_From.dwin==2)
{
if (NewCards)
AddCheck( 25 + ((i+1)*75), 105, 4095+temp, 4154, false, (i+1) );
else
AddCheck( 74 + ((i+1)*40), 162, 210, 211, false, (i+1) );
}
else
{
if (NewCards)
AddImage ( 25 + ((i+1)*75), 105, 4095+temp);
else
AddImage( 74 + ((i+1)*40), 162, 210 );
}
}
}
AddLabel( 240, 205, 800, "Deal" );
AddButton( 220, 208, 2117, 2118, 101, GumpButtonType.Reply, 0 );
AddLabel( 160, 205, 800, ""+m_From.playerbet );
AddButton( 140, 208, 2117, 2118, 105, GumpButtonType.Reply, 0 );
AddLabel( 130, 230, 64, m_From.pokermsg );
if (m_From.dwin==1)
m_From.dwin=2;
if (m_From.dwin==3)
{
m_From.dwin=0;
m_From.roundend = true;
}
}
public override void OnResponse( NetState sender, RelayInfo info )
{
Mobile from = sender.Mobile;
int i;
switch ( info.ButtonID )
{
case 101:
{ //deal
m_From.pokermsg = "ATA- rules";
if (!from.InRange( m_From.Location, 4 ))
{
m_From.roundend = true;
m_From.busy = false;
}
else
{
if (m_From.dwin==0)
{
if (m_From.paydealer( from, m_From.playerbet))
{
if ((m_From.m_current_card + 10) > 52)
{
Effects.PlaySound( from.Location, from.Map, 0x3D );
m_From.ShuffleCards();
}
for ( i = 0; i <= 4; ++i )
m_From.playercards[i]=0;
m_From.dwin=1;
m_From.roundend = false;
m_From.pokermsg = "Click on the cards you want re-dealt.";
}
else
{
m_From.pokermsg = "You need more money!";
}
}
else if (m_From.dwin==2)
{
m_From.dwin=3;
ArrayList Selections = new ArrayList( info.Switches );
for ( i = 0; i <= 4; ++i )
{
if (Selections.Contains( i+1 ) != false )
m_From.playercards[i]=m_From.pickcard(from);
}
finishpokergame(from);
}
}
from.SendGump( new PokerGump( from, m_From ) );
break;
}
case 105:
{ // bet
if (m_From.roundend)
{
m_From.playerbet += 100;
if (m_From.playerbet > 500)
m_From.playerbet = 100;
}
from.SendGump( new PokerGump( from, m_From ) );
break;
}
case 666:
{ // quit
m_From.roundend = true;
m_From.busy = false;
Effects.PlaySound( from.Location, from.Map, 0x1e9 );
break;
}
}
}
public void finishpokergame(Mobile from)
{
int i,match1=0,match2=0,match3=0,match4=0,match5=0,temp=0;
bool isStrt=true,isFlush=false;
string Temp;
for ( i = 0; i <= 4; i++ )
m_From.dealercards[i] = m_From.playercards[i];
for(int j=4;j>=0;j--)
{
for ( i = 0; i < 4; i++ )
{
if (m_From.CardValue2(m_From.dealercards[i])>=m_From.CardValue2(m_From.dealercards[i+1]))
{
temp = m_From.dealercards[i];
m_From.dealercards[i] = m_From.dealercards[i+1];
m_From.dealercards[i+1] = temp;
}
}
}
for(i=4;i>0;i--)
{
if(m_From.CardValue2(m_From.dealercards[i])!=(m_From.CardValue2(m_From.dealercards[0])+i))
{
isStrt=false;
m_From.pokermsg = "Game Over.";
m_From.pwin = 0;
}
}
if((m_From.CardValue2(m_From.dealercards[0])==2) && (m_From.CardValue2(m_From.dealercards[1])==3) && (m_From.CardValue2(m_From.dealercards[2])==4) && (m_From.CardValue2(m_From.dealercards[3])==5) && (m_From.CardValue2(m_From.dealercards[4])==14))
isStrt=true;
if (isStrt)
{
m_From.pokermsg = "Straight.";
m_From.pwin = m_From.playerbet * 4;
}
Temp = m_From.CardSuit(m_From.dealercards[0]);
if(Temp==m_From.CardSuit(m_From.dealercards[1]) && Temp==m_From.CardSuit(m_From.dealercards[2]) && Temp==m_From.CardSuit(m_From.dealercards[3]) && Temp==m_From.CardSuit(m_From.dealercards[4]))
{
isFlush=true;
m_From.pokermsg = "Flush.";
m_From.pwin = m_From.playerbet * 5;
}
if(!isStrt && !isFlush)
{
for ( i = 0; i <= 4; i++ )
{
temp = m_From.CardValue2(m_From.dealercards[i]);
if ((m_From.CardValue2(m_From.dealercards[0])==temp) && i!=0)
match1++;
if ((m_From.CardValue2(m_From.dealercards[1])==temp) && i!=1)
match2++;
if ((m_From.CardValue2(m_From.dealercards[2])==temp) && i!=2)
match3++;
if ((m_From.CardValue2(m_From.dealercards[3])==temp) && i!=3)
match4++;
if ((m_From.CardValue2(m_From.dealercards[4])==temp) && i!=4)
match5++;
}
if((match1==3)||(match2==3)||(match3==3)||(match4==3)||(match5==3))
{
m_From.pokermsg = "4 of a Kind";
m_From.pwin = m_From.playerbet * 8;
}
if((match1==2)||(match2==2)||(match3==2)||(match4==2)||(match5==2))
{
m_From.pokermsg = "3 of a Kind";
m_From.pwin = m_From.playerbet * 3;
}
if((match1+match2+match3+match4+match5)==8)
{
m_From.pokermsg = "Full House.";
m_From.pwin = m_From.playerbet * 6;
}
if((match1+match2+match3+match4+match5)==4)
{
m_From.pokermsg = "Two Pair.";
m_From.pwin = m_From.playerbet * 2;
}
temp = 0;
if((match1+match2+match3+match4+match5)==2)
{
if(match1==1){temp=m_From.CardValue2(m_From.dealercards[0]);} if(match2==1){temp=m_From.CardValue2(m_From.dealercards[1]);}
if(match3==1){temp=m_From.CardValue2(m_From.dealercards[2]);} if(match4==1){temp=m_From.CardValue2(m_From.dealercards[3]);}
if(temp>=10)
{
m_From.pokermsg = "Pair 10's +";
m_From.pwin = m_From.playerbet;
}
}
} //end if(isStrt && isFlush)
if(isFlush && isStrt)
{
if(m_From.dealercards[0]==10)
{
m_From.pokermsg = "Royal Straight Flush";
m_From.pwin = m_From.playerbet * 12;
}
else
{
m_From.pokermsg = "Straight Flush";
m_From.pwin = m_From.playerbet * 10;
}
}
if (m_From.pwin>0)
{
m_From.payplayer(from,m_From.pwin);
Effects.PlaySound( from.Location, from.Map, 0x36 );
m_From.gamestats[4] += 1;
}
else if (m_From.pwin==m_From.playerbet)
{ m_From.gamestats[5] += 1; }
else
{ m_From.gamestats[3] += 1; }
}
} //class PokerGump
public class BlackjackGump : Gump
{
private Gambler m_From;
public BlackjackGump( Mobile mobile, Gambler gambler ) : base( 10, 10 )
{
m_From = gambler;
int i,dealervalue=0,temp=0;
string cardtemp, scoredmsg, scorepmsg;
Closable = false;
AddPage( 0 );
AddImageTiled( 30, 100, 460, 280, 2624 );
AddAlphaRegion( 90, 100, 460, 230 );
AddLabel( 35, 109, 1500, "Dealer:" );
AddLabel( 35, 229, 600, "Player:" );
if (m_From.dwin>0)
AddLabel( 45, 129, 70, ""+m_From.dwin );
if (m_From.pwin>0)
AddLabel( 45, 249, 70, ""+m_From.pwin );
AddButton( 40, 333, 2117, 2118, 101, GumpButtonType.Reply, 0 );
AddLabel( 60, 330, 800, "Deal" );
AddButton( 150, 333, 2117, 2118, 102, GumpButtonType.Reply, 0 );
AddLabel( 170, 330, 800, "Hit" );
AddButton( 200, 333, 2117, 2118, 103, GumpButtonType.Reply, 0 );
AddLabel( 220, 330, 800, "Stand" );
AddButton( 280, 333, 2117, 2118, 104, GumpButtonType.Reply, 0 );
AddLabel( 300, 330, 800, "Double Down" );
AddButton( 90, 333, 2117, 2118, 105, GumpButtonType.Reply, 0 );
AddButton( 33, 363, 3, 4, 666, GumpButtonType.Reply, 0 );
//show dealer cards
for ( i = 0; i <= 4; ++i )
{
temp = m_From.dealercards[i];
if (temp>0)
{
if (!m_From.dealercardhidden || (m_From.dealercardhidden && i>0))
{
if (NewCards)
AddImage ( 25 + ((i+1)*75), 110, 4095+temp);
else
{
cardtemp = m_From.CardSuit( temp ); //129
AddBackground( 65 + ((i+1)*40), 110, 35, 50, 2171 );
AddLabel( 80 + ((i+1)*40), 136, m_From.cardcolor( cardtemp ), cardtemp );
AddLabel( 72 + ((i+1)*40), 115, 1500, m_From.CardName( temp ) );
}
dealervalue += m_From.CardValue( temp );
}
else
{
if (NewCards)
AddImage ( 25 + ((i+1)*75), 110, 4154);
else
AddBackground( 65 + ((i+1)*40), 110, 35, 50, 2171 );
}
}
}
//show player cards
for ( i = 0; i <= 4; ++i )
{
temp = m_From.playercards[i];
if (temp>0)
{
if (NewCards)
AddImage ( 25 + ((i+1)*75), 230, 4095+temp);
else
{
cardtemp = m_From.CardSuit( temp );
AddBackground( 65 + ((i+1)*40), 230, 35, 50, 2171 );
AddLabel( 80 + ((i+1)*40), 256, m_From.cardcolor( cardtemp ), cardtemp );
AddLabel( 72 + ((i+1)*40), 235, 600, m_From.CardName( temp ) );
}
}
}
AddLabel( 110, 330, 800, ""+m_From.playerbet );
if (!m_From.dealercardhidden)
dealervalue = dealercardvalue();
if (m_From.CardValue(m_From.dealercards[0]) + m_From.CardValue(m_From.dealercards[1]) == 21 && !m_From.dealercardhidden)
scoredmsg = "BJ";
else
scoredmsg = dealervalue.ToString();
if (m_From.CardValue(m_From.playercards[1]) + m_From.CardValue(m_From.playercards[1]) == 21)
scorepmsg = "BJ";
else
scorepmsg = playercardvalue().ToString();
AddLabel( 63, 155, 1500, ""+scoredmsg );
AddLabel( 63, 274, 600, ""+scorepmsg );
AddLabel( 100, 350, 64, m_From.pokermsg );
}
public override void OnResponse( NetState sender, RelayInfo info )
{
Mobile from = sender.Mobile;
int i=0,temp=0;
switch ( info.ButtonID )
{
case 101:
{ // deal
m_From.pokermsg = "ATA- rules";
if (!from.InRange( m_From.Location, 4 ))
{
m_From.roundend = true;
m_From.busy = false;
}
else
{
if (m_From.roundend)
{
if (m_From.playerbet>1000)
m_From.playerbet = 1000;
if (m_From.paydealer( from, m_From.playerbet))
{
m_From.dwin = 0;
m_From.pwin = 0;
m_From.roundend = false;
m_From.dealercardhidden = true;
// clear dealer and player cards
for ( i = 2; i <= 4; ++i )
{
m_From.dealercards[i]=0;
m_From.playercards[i]=0;
}
//pick card
m_From.dealercards[0]=m_From.pickcard(from);
m_From.playercards[0]=m_From.pickcard(from);
m_From.dealercards[1]=m_From.pickcard(from);
m_From.playercards[1]=m_From.pickcard(from);
if (m_From.CardValue(m_From.dealercards[0]) + m_From.CardValue(m_From.dealercards[1]) == 21)
m_From.dbj = true;
else if (m_From.CardValue(m_From.playercards[1]) + m_From.CardValue(m_From.playercards[1]) == 21)
m_From.pbj = true;
if (m_From.pbj)
finishgame(from);
}
else
m_From.pokermsg = "You need more money!";
}
from.SendGump( new BlackjackGump( from, m_From ) );
}
break;
}
case 102:
{ // hit
if (!m_From.roundend)
{
temp=0;
for ( i = 2; i <= 4; ++i )
{
if (m_From.playercards[i]==0 && temp==0)
{
m_From.playercards[i]=m_From.pickcard(from);
temp = i;
i=6;
}
}
if ((temp>0 && playercardvalue()<=21) && i!=5)
from.SendGump( new BlackjackGump( from, m_From ) );
else
finishgame( from );
}
else
from.SendGump( new BlackjackGump( from, m_From ) );
break;
}
case 103:
{ //stand
if (!m_From.roundend)
finishgame(from );
else
from.SendGump( new BlackjackGump( from, m_From ) );
break;
}
case 104:
{ //double down
if (!m_From.roundend)
{
temp=0;
for ( i = 0; i <= 4; ++i )
{
if (m_From.playercards[i]>0)
temp++;
}
if (temp==2 && m_From.paydealer( from, m_From.playerbet))
m_From.playerbet *= 2;
m_From.playercards[2]=m_From.pickcard(from);
finishgame(from );
}
else
from.SendGump( new BlackjackGump( from, m_From ) );
break;
}
case 105:
{ // bet
if (m_From.roundend)
{
m_From.playerbet += 100;
if (m_From.playerbet > 1000)
m_From.playerbet = 100;
}
from.SendGump( new BlackjackGump( from, m_From ) );
break;
}
case 666:
{ // quit
m_From.roundend = true;
m_From.busy = false;
Effects.PlaySound( from.Location, from.Map, 0x1e9 );
break;
}
}
}
public void finishgame(Mobile from)
{
int i,temp,dealervalue=dealercardvalue(),playervalue=playercardvalue();
temp = (m_From.playerbet/2);
if (m_From.dbj && m_From.pbj)
{
m_From.dwin = temp;
m_From.pwin = m_From.playerbet+temp;
m_From.payplayer(from,m_From.pwin);
m_From.gamestats[2] += 1;
m_From.pokermsg = "We have a push.";
}
else if (m_From.dbj)
{
m_From.gamestats[0] += 1;
m_From.pokermsg = "Looks like I won.";
m_From.dwin = m_From.playerbet;
m_From.pwin = 0;
}
else if (m_From.pbj)
{
m_From.dwin = 0;
m_From.pwin = (m_From.playerbet*2)+temp;
m_From.payplayer(from,m_From.pwin);
m_From.gamestats[1] += 1;
m_From.pokermsg = "You won this one.";
}
else
{
if (playervalue>21 || (dealervalue>playervalue && dealervalue<=21))
{// dealer won
m_From.gamestats[0] += 1;
m_From.pokermsg = "Looks like I won.";
m_From.dwin = m_From.playerbet;
m_From.pwin = 0;
}
else
{
if (dealervalue<17)
{
for ( i = 2; i <= 4; ++i )
{
if (m_From.dealercards[i]==0)
{
m_From.dealercards[i]=m_From.pickcard(from);
dealervalue=dealercardvalue();
}
if (dealervalue>=17)
i=6;
}
}
if (playervalue>21 || (dealervalue>playervalue && dealervalue<=21))
{// dealer won
m_From.gamestats[0] += 1;
m_From.pokermsg = "I won this round.";
m_From.dwin = m_From.playerbet;
m_From.pwin = 0;
}
else if (dealervalue==playervalue)
{ // tie
m_From.dwin = temp;
m_From.pwin = m_From.playerbet+temp;
m_From.payplayer(from,m_From.pwin);
m_From.gamestats[2] += 1;
m_From.pokermsg = "We have a push.";
}
else
{ // count players card
if (playervalue==21)
{ // player won
m_From.dwin = 0;
m_From.pwin = (m_From.playerbet*2);
m_From.payplayer(from,m_From.pwin);
m_From.gamestats[1] += 1;
m_From.pokermsg = "You have won another round.";
}
else
{ // player won
m_From.dwin = 0;
m_From.pwin = (m_From.playerbet*2);
m_From.payplayer(from,m_From.pwin);
m_From.gamestats[1] += 1;
m_From.pokermsg = "You won this one.";
}
}
} // end of else
}
m_From.dbj = false;
m_From.pbj = false;
m_From.pwin = (m_From.pwin-m_From.playerbet);
m_From.dealercardhidden = false;
m_From.roundend = true;
Effects.PlaySound( from.Location, from.Map, 0x36 );
from.SendGump( new BlackjackGump( from, m_From ) );
}
public int dealercardvalue()
{
int i,tempcard=0,gotace=0,dealervalue=0;
for ( i = 0; i <= 4; ++i )
{
tempcard = m_From.CardValue( m_From.dealercards[i] );
if (tempcard==11)
gotace++;
dealervalue += tempcard;
}
while (dealervalue>21 && gotace>0)
{
dealervalue -= 10;
gotace--;
}
return dealervalue;
}
public int playercardvalue()
{
int i,tempcard=0,gotace=0,playervalue=0;
for ( i = 0; i <= 4; ++i )
{
tempcard = m_From.CardValue( m_From.playercards[i] );
if (tempcard==11)
gotace++;
playervalue += tempcard;
}
while (playervalue>21 && gotace>0)
{
playervalue -= 10;
gotace--;
}
return playervalue;
}
}//class BlackjackGump
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( (bool) true );
writer.Write( (bool) false );
for ( int i = 0; i <= 5; ++i )
writer.Write( gamestats[i] );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
roundend = reader.ReadBool();
busy = reader.ReadBool();
for ( int i = 0; i <= 5; ++i )
gamestats[i]=reader.ReadInt();
}
public override bool OnGoldGiven( Mobile from, Gold dropped )
{
string message = "Are you trying to bribe me to win?";
this.Say( message );
return false;
}
}
}