/**************************************************************************/
// roulette.cpp
/***************************************************************************
* The Dawn of Time v1.69q (c)1997-2002 Michael Garratt *
* >> A number of people have contributed to the Dawn codebase, with the *
* majority of code written by Michael Garratt - www.dawnoftime.org *
* >> To use this source code, you must fully comply with the dawn license *
* in licenses.txt... In particular, you may not remove this copyright *
* notice. *
***************************************************************************
* This file contributed and made by Mark Fall aka Grimnard Drand *
* *
**************************************************************************/
#include "include.h"
#include "global.h"
#include "gameset.h"
//local functions
void do_save_gamesettings(char_data *ch, char *);
void show_roulette_table(char_data *ch, OBJ_DATA *obj);
void remove_roulette(char_data *ch);
void roulette_win(char_data *ch, OBJ_DATA *obj);
/**************************************************************************/
void do_roulette(char_data *ch, char *argument)
{
char arg1[MIL];
char arg2[MIL];
char arg3[MIL];
OBJ_DATA *obj;
argument = one_argument(argument,arg1);
argument = one_argument(argument,arg2);
argument = one_argument(argument,arg3);
if(IS_NPC(ch))
{
do_huh(ch,"");
return;
}
/* if(!IS_LETGAINED(ch))
{
ch->println("This is set up for RP porpose. You must be letgained to play.");
return;
}*/
if(IS_NULLSTR(arg1) || IS_NULLSTR(arg2))
{
ch->println("Roulete Commands,");
ch->println(" <table name> <bet amount(all bets in gold)> <bet placement> - Places your bet on the table(only one bet per player).");
ch->println(" <table name> show - show's you the table.");
ch->println(" <table name> clear - clear your bet before wheel is spun.");
ch->println(" <table name> win - show's the odd's chart for the table.");
return;
}
if((obj=get_obj_here(ch,arg1))==NULL)
{
act("I see no $T here.",ch,NULL,arg1,TO_CHAR);
return;
}
if(!IS_ROULETTE_TABLE(obj))
{
ch->println("You must be at a roulette table.");
return;
}
if(!str_cmp(arg2, "show"))
{
show_roulette_table(ch,obj);
return;
}
if(!str_cmp(arg2, "win"))
{
ch->println("All win's are subject to the house's fund's");
ch->println("Payouts are calculated like this <bet>*<rate shown below>");
ch->println("Bottom table(1-9,10-18,19-27,`Rred`x,`Sblack`x,`Yyellow`x) = 2");
ch->println("Rows(1,2,3) = 3");
ch->println("Center table(1-27) = 10");
ch->println("Zero's(0, D0) = 15");
return;
}
if(is_number(arg2))
{
int bet=atoi(arg2);
if(ch->gold < bet)
{
ch->println("You don't have enough gold!!");
return;
}
if(!IS_IMMORTAL(ch) && bet > 10000)
{ch->printlnf("The house limit on this table is 10,000 gold!");return;}
int bid=-1;
if(is_number(arg3))
{
bid=atoi(arg3);
if(bid < 0 || bid > 27)
{
ch->println("Please look at Help Roulette for more info on bet placement.");
return;
}
}
if(bid==0)
{
bid=29;
}
if(!str_cmp(arg3,"d0") || !str_cmp(arg3, "D0"))
{
bid=28;
}
if(!str_cmp(arg3, "row1"))
{
bid=30;
}
if(!str_cmp(arg3,"row2"))
{
bid=31;
}
if(!str_cmp(arg3,"row3"))
{
bid=32;
}
if(!str_cmp(arg3,"thru9"))
{
bid=33;
}
if(!str_cmp(arg3,"thru18"))
{
bid=34;
}
if(!str_cmp(arg3,"thru27"))
{
bid=35;
}
if(!str_cmp(arg3,"red"))
{
bid=36;
}
if(!str_cmp(arg3,"black"))
{
bid=37;
}
if(!str_cmp(arg3,"yellow"))
{
bid=38;
}
if(bid < 0 || bid > 38)
{
ch->println("Please look at Help Roulette for more info on bet placement.");
return;
}
if(!TABLE_FULL(obj))
{
if(TABLE_PLAYER1(obj) == NULL)
{
SET_TABLE_P1(ch,obj);
ch->roulette_tp=1;
}
else if(TABLE_PLAYER2(obj) == NULL)
{
SET_TABLE_P2(ch,obj);
ch->roulette_tp=2;
}
else if(TABLE_PLAYER3(obj) == NULL)
{
SET_TABLE_P3(ch,obj);
ch->roulette_tp=3;
}
R_MARK = bid;
R_PULSE=PULSE_ROULETTE;
ch->gold -= bet;
switch(ch->roulette_tp)
{
case 1:
obj->roulette_bet_1_1=bet;
break;
case 2:
obj->roulette_bet_1_2=bet;
break;
case 3:
obj->roulette_bet_1_2=bet;
break;
default:
ch->gold +=bet;
ch->println("This table is experiancing problems please see an imm and report this.");
return;
}
SET_CURRENT_TABLE(ch,obj);
show_roulette_table(ch,obj);
return;
}
ch->println("Sorry but i have to many players at this table already please wait for someone to leave.");
return;
}
if(!str_cmp(arg2,"clear"))
{
if(!IS_CURRENT_TABLE(ch,obj))
{
ch->println("Your not playing at this table.");
return;
}
if(roulette->play >= 8)
{
ch->println("Sorry but after the wheel is spinning all bets are final.");
return;
}
R_MARK=0;
REMOVE_CURRENT_TABLE(ch);
switch(ch->roulette_tp)
{
case 1:
ch->gold += obj->roulette_bet_1_1;
obj->roulette_bet_1_1=0;
SET_TABLE_P1(NULL,obj);
break;
case 2:
ch->gold += obj->roulette_bet_1_2;
obj->roulette_bet_1_2=0;
SET_TABLE_P2(NULL,obj);
break;
case 3:
ch->gold += obj->roulette_bet_1_3;
obj->roulette_bet_1_3=0;
SET_TABLE_P3(NULL,obj);
break;
case 0:
ch->println("Your bet's have been cleared");
return;
default:
ch->println("This table is experiancing problems please see an imm and report this.");
return;
}
ch->roulette_tp=0;
ch->println("All bets removed");
return;
}
ch->println("Roulete Commands,");
ch->println(" <table name> <bet amount(all bets in gold)> <bet placement> - Places your bet on the table(only one bet per player).");
ch->println(" <table name> show - show's you the table.");
ch->println(" <table name> clear - clear your bet before wheel is spun.");
ch->println(" <table name> win - show's the odd's chart for the table.");
return;
}
/**************************************************************************/
void show_roulette_table(char_data *ch, OBJ_DATA *obj)
{
char row1[MSL];
char row2[MSL];
char row3[MSL];
char row4[MSL];
char row5[MSL];
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|____|____|____|____|____|____|____|_________|`c@`x");
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|____|____|____|____|____|____|____|_________|`c@`x");
strcpy(row3,"`c@`s_________|___|____|____|____|____|____|____|____|____|____|_________|`c@`x");
strcpy(row4,"`c@@@@@@@`s|`c@@`s| |______________|______________|______________| `c@`x");
strcpy(row5,"`c@@@@@@@`s|`c@@`s| |______________|______________|______________| `c@`x");
if(IS_CURRENT_TABLE(ch,obj))
{
int place=R_MARK;
switch(place)
{
case 29:
strcpy(row3,"`c@`s_________|`?X`s__|____|____|____|____|____|____|____|____|____|_________|`c@`x");
break;
case 1:
strcpy(row3,"`c@`s_________|___|`?X`s___|____|____|____|____|____|____|____|____|_________|`c@`x");
break;
case 2:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|`?X`s___|____|____|____|____|____|____|____|____|_________|`c@`x");
break;
case 3:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |`?X`s___|____|____|____|____|____|____|____|____|_________|`c@`x");
break;
case 4:
strcpy(row3,"`c@`s_________|___|____|`?X`s___|____|____|____|____|____|____|____|_________|`c@`x");
break;
case 5:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|`?X`s___|____|____|____|____|____|____|____|_________|`c@`x");
break;
case 6:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|`?X`s___|____|____|____|____|____|____|____|_________|`c@`x");
break;
case 7:
strcpy(row3,"`c@`s_________|___|____|____|`?X`s___|____|____|____|____|____|____|_________|`c@`x");
break;
case 8:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|`?X`s___|____|____|____|____|____|____|_________|`c@`x");
break;
case 9:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|`?X`s___|____|____|____|____|____|____|_________|`c@`x");
break;
case 10:
strcpy(row3,"`c@`s_________|___|____|____|____|`?X`s___|____|____|____|____|____|_________|`c@`x");
break;
case 11:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|____|`?X`s___|____|____|____|____|____|_________|`c@`x");
break;
case 12:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|____|`?X`s___|____|____|____|____|____|_________|`c@`x");
break;
case 13:
strcpy(row3,"`c@`s_________|___|____|____|____|____|`?X`s___|____|____|____|____|_________|`c@`x");
break;
case 14:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|____|____|`?X`s___|____|____|____|____|_________|`c@`x");
break;
case 15:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|____|____|`?X`s___|____|____|____|____|_________|`c@`x");
break;
case 16:
strcpy(row3,"`c@`s_________|___|____|____|____|____|____|____|`?X`s___|____|____|_________|`c@`x");
break;
case 17:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|____|____|____|____|`?X`s___|____|____|_________|`c@`x");
break;
case 18:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|____|____|____||`?X`s_______|____|____|_________|`c@`x");
break;
case 19:
strcpy(row3,"`c@`s_________|___|____|____|____|____|`?X`s___|____|____|____|____|_________|`c@`x");
break;
case 20:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|____|____|`?X`s___|____|____|____|____|_________|`c@`x");
break;
case 21:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|____|____|____|____|`?X`s___|____|____|_________|`c@`x");
break;
case 22:
strcpy(row3,"`c@`s_________|___|____|____|____|____|____|____|`?X`s___|____|____|_________|`c@`x");
break;
case 23:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|____|____|____|____|`?X`s___|____|____|_________|`c@`x");
break;
case 24:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|____|____|____|____|____|`?X`s___|____|_________|`c@`x");
break;
case 25:
strcpy(row3,"`c@`s_________|___|____|____|____|____|____|____|____|____|`?X`s___|_________|`c@`x");
break;
case 26:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|____|____|____|____|____|____|`?X`s___|_________|`c@`x");
break;
case 27:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|____|____|____|____|____|____|`?X`s___|_________|`c@`x");
break;
case 28:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s|`?X`s |____|____|____|____|____|____|____|____|____|_________|`c@`x");
break;
case 30:
strcpy(row1,"`c@`m&`s---`y*`s---`m&`s| |____|____|____|____|____|____|____|____|____|`?X`s________|`c@`x");
break;
case 31:
strcpy(row2,"`c@ `m & `s| `m& `s| `G0`s|____|____|____|____|____|____|____|____|____|`?X`s________|`c@`x");
break;
case 32:
strcpy(row3,"`c@`s_________|___|____|____|____|____|____|____|____|____|____|`?X`s________|`c@`x");
break;
case 33:
strcpy(row4,"`c@@@@@@@`s|`c@@`s| |__`?X`#`s__`^X`s__`^X`s__`^X`s__|______________|______________| `c@`x");
break;
case 34:
strcpy(row4,"`c@@@@@@@`s|`c@@`s| |______________|__`?X`#`s__`^X`s__`^X`s__`^X`s__|______________| `c@`x");
break;
case 35:
strcpy(row4,"`c@@@@@@@`s|`c@@`s| |______________|______________|__`?X`#`s__`^X`s__`^X`s__`^X`s__| `c@`x");
break;
case 36:
strcpy(row5,"`c@@@@@@@`s|`c@@`s| |__`?X`#`s__`^X`s__`^X`s__`^X`s__|______________|______________| `c@`x");
break;
case 37:
strcpy(row5,"`c@@@@@@@`s|`c@@`s| |______________|__`?X`#`s__`^X`s__`^X`s__`^X`s__|______________| `c@`x");
break;
case 38:
strcpy(row5,"`c@@@@@@@`s|`c@@`s| |______________|______________|__`?X`#`s__`^X`s__`^X`s__`^X`s__| `c@`x");
break;
default:
break;
}
}
ch->println("\r\n`c@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`x");
ch->println("`c@ `m&&&& `s| | `c@`x");
ch->println("`c@ `m& `s| `m/& `s|___|______________________________________________________ `c@`x");
ch->println("`c@`m & `s\\ / `m&`s| `GD0`s| `Y3`s| `Y6`s| `Y9`s| `S12`s| `S15`s| `S18`s| `R21`s| `R24`s| `R27`s| `xall row1`s|`c@`x");
ch->printlnf("%s",row1);
ch->println("`c@ `m& `s/ \\ `m& `s|___| `R2`s| `R5`s| `S8`s| `S11`s| `Y14`s| `Y17`s| `R20`s| `S23`s| `Y26`s| `xall row2`s|`c@`x");
ch->printlnf("%s",row2);
ch->println("`c@ `m &&& `s| | `S1`s| `Y4`s| `R7`s| `S10`s| `Y13`s| `R16`s| `S19`s| `Y22`s| `R25`s| `xall row3`s|`c@`x");
ch->printlnf("%s",row3);
ch->println("`c@@@@@@@`s|`c@@`s| | `x1 thru 9`s | `x10 thru 18`s | `x19 thru 27`s | `c@`x");
ch->printlnf("%s",row4);
ch->println("`c@@@@@@@`s|`c@@`s| | `RRED `s| `SBLACK `s| `YYellow `s| `c@`x");
ch->printlnf("%s",row5);
ch->println("`c@@@@@@@`s|`c@@`s| `c@`x");
ch->println("`c@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@`x");
return;
}
/**************************************************************************/
void update_roulette(void)
{
if(--roulette->pulse <= 0)
{
roulette->pulse = PULSE_ROULETTE;
connection_data *d;
for ( d = connection_list; d != NULL; d = d->next )
{
if ( d->connected_state == CON_PLAYING )
{
char_data *ch=d->character;
bool found;
found = false;
if(ch->roulette_table != NULL)
{
OBJ_DATA *obj;
for ( obj = ch->in_room->contents; obj != NULL; obj = obj->next_content )
{
if(obj==ch->roulette_table)
{
found = true;
}
}
if(!found)
{
remove_roulette(ch);
}
ch->roulette_play+=1;
OBJ_DATA *table=ch->roulette_table;
switch(ch->roulette_play)
{
case 1:case 5:
ch->println("The Croupier says 'Place Your bet's.... Place Your bet's'");
ch->println("Rember walking away from table forfits bet's");
break;
case 8:
ch->println("The Croupier says 'Spining the wheel all bets are final'");
ch->println("The Croupier says 'No more bets please'");
ch->println("The Croupier spins the wheel and drops in the ball with a pinch.");
break;
case 10:
roulette_win(ch,table);
ch->roulette_play=0;
break;
default:
break;
}
}
}
}
}
}
/**************************************************************************/
void remove_roulette(char_data *ch)
{
OBJ_DATA *obj;
obj=ch->roulette_table;
R_MARK=0;
REMOVE_CURRENT_TABLE(ch);
if(ch->roulette_tp >=1)
{
switch(ch->roulette_tp)
{
case 1:
ch->gold += obj->roulette_bet_1_1;
obj->roulette_bet_1_1=0;
SET_TABLE_P1(NULL,obj);
break;
case 2:
ch->gold += obj->roulette_bet_1_2;
obj->roulette_bet_1_2=0;
SET_TABLE_P2(NULL,obj);
break;
case 3:
ch->gold += obj->roulette_bet_1_3;
obj->roulette_bet_1_3=0;
SET_TABLE_P3(NULL,obj);
break;
default:
return;
}
}
ch->roulette_tp=0;
ch->roulette_play=0;
ch->println("You walked away from table all bets cleared.");
return;
}
/**************************************************************************/
void roulette_win(char_data *ch, OBJ_DATA *obj)
{
int bid;
int bet;
int ball;
if(R_MARK==0)
{
ch->println("This table is broke please notify an imm!!");
return;
}
bid=R_MARK;
switch(ch->roulette_tp)
{
case 1: bet=obj->roulette_bet_1_1;break;
case 2: bet=obj->roulette_bet_1_2;break;
case 3: bet=obj->roulette_bet_1_3;break;
default:ch->println("This table is broke please notify an imm!!");return;
}
ball=number_range(1,29);
char win[MIL];
switch(ball)
{
case 29:
strcpy(win,"`GGreen Zero`x.");
break;
case 1:
strcpy(win,"`SBlack One`x.");
break;
case 2:
strcpy(win,"`RRed Two`x.");
break;
case 3:
strcpy(win,"`YYellow Three`x.");
break;
case 4:
strcpy(win,"`YYellow Four`x.");
break;
case 5:
strcpy(win,"`RRed Five`x.");
break;
case 6:
strcpy(win,"`YYellow Six`x.");
break;
case 7:
strcpy(win,"`RRed Seven`x.");
break;
case 8:
strcpy(win,"`SBlack Eight`x.");
break;
case 9:
strcpy(win,"`YYellow Nine`x.");
break;
case 10:
strcpy(win,"`SBlack Ten`x.");
break;
case 11:
strcpy(win,"`SBlack Eleven`x.");
break;
case 12:
strcpy(win,"`SBlack Twelve`x.");
break;
case 13:
strcpy(win,"`YYellow Thirteen`x.");
break;
case 14:
strcpy(win,"`YYellow Fourteen`x.");
break;
case 15:
strcpy(win,"`SBlack Fifteen`x.");
break;
case 16:
strcpy(win,"`RRed Sixteen`x.");
break;
case 17:
strcpy(win,"`YYellow Seventeen`x.");
break;
case 18:
strcpy(win,"`SBlack Eighteen`x.");
break;
case 19:
strcpy(win,"`SBlack Nineteen`x.");
break;
case 20:
strcpy(win,"`RRed Twenty`x.");
break;
case 21:
strcpy(win,"`RRed Twenty-One`x.");
break;
case 22:
strcpy(win,"`YYellow Twenty-Two`x.");
break;
case 23:
strcpy(win,"`SBlack Twenty-Three`x.");
break;
case 24:
strcpy(win,"`RRed Twenty-Four`x.");
break;
case 25:
strcpy(win,"`RRed Twenty-Five`x.");
break;
case 26:
strcpy(win,"`YYellow Twenty-Six`x.");
break;
case 27:
strcpy(win,"`RRed Twenty-Seven`x.");
break;
case 28:
strcpy(win,"`GGreen Double Zero`x.");
break;
default:
ch->println("This machine has broke please contact an imm!!");
return;
}
int payout;
if(bid==ball)
{
if(ball==29 || ball==28)
{
payout= bet*15;
}
else
{
payout= bet*10;
}
}else
{
payout=0;
}
if(R_WIN_ALL_1(ball) && bid == 30)
{
payout = (payout + bet*3);
}
if(R_WIN_ALL_2(ball) && bid == 31)
{
payout = (payout + bet*3);
}
if(R_WIN_ALL_3(ball) && bid == 32)
{
payout = (payout + bet*3);
}
if(R_WIN_1_9(ball) && bid == 33)
{
payout = (payout + bet*2);
}
if(R_WIN_10_18(ball) && bid == 34)
{
payout = (payout + bet*2);
}
if(R_WIN_19_27(ball) && bid == 35)
{
payout = (payout + bet*2);
}
if(R_WIN_RED(ball) && bid == 36)
{
payout = (payout + bet*2);
}
if(R_WIN_BLACK(ball) && bid == 37)
{
payout = (payout + bet*2);
}
if(R_WIN_YELLOW(ball) && bid == 38)
{
payout = (payout + bet*2);
}
ch->printlnf("%s",win);
ch->printlnf("paying out for %s",win);
if(payout==0)
{
ch->printlnf("You have lost your bet of %d gold!.", bet);
ch->gold = ch->gold - bet;
}
else
{
ch->printlnf("You have won your bet of %d on %s and win %d gold back!", bet, win, payout);
ch->gold = ch->gold - bet;
ch->gold = ch->gold + payout;
}
R_MARK=0;
REMOVE_CURRENT_TABLE(ch);
if(ch->roulette_tp >=1)
{
switch(ch->roulette_tp)
{
case 1:
ch->gold += obj->roulette_bet_1_1;
obj->roulette_bet_1_1=0;
SET_TABLE_P1(NULL,obj);
break;
case 2:
ch->gold += obj->roulette_bet_1_2;
obj->roulette_bet_1_2=0;
SET_TABLE_P2(NULL,obj);
break;
case 3:
ch->gold += obj->roulette_bet_1_3;
obj->roulette_bet_1_3=0;
SET_TABLE_P3(NULL,obj);
break;
default:
return;
}
}
ch->roulette_tp=0;
return;
}
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/