Skip to content
Snippets Groups Projects
Commit eae44576 authored by mcmlxxix's avatar mcmlxxix
Browse files

many, many updates.

functional.
parent ef0ca5d5
No related branches found
No related tags found
No related merge requests found
......@@ -44,18 +44,14 @@ Bot_Commands["GO"].command = function (target,onick,ouh,srv,lvl,cmd) {
Bot_Commands["FOLD"] = new Bot_Command(0,false,false);
Bot_Commands["FOLD"].command = function (target,onick,ouh,srv,lvl,cmd) {
if(!poker_verify_game_status(target,srv,onick)) return;
poker_games[target].bet+=poker_games[target].users[onick].bet;
poker_games[target].users[onick].active=false;
srv.o(target, onick + " folded their hand.");
poker_next_turn(target,srv);
if(!poker_verify_user_status(target,srv,onick)) return;
poker_fold_player(target,srv,onick);
return;
}
Bot_Commands["CHECK"] = new Bot_Command(0,false,false);
Bot_Commands["CHECK"].command = function (target,onick,ouh,srv,lvl,cmd) {
if(!poker_verify_game_status(target,srv,onick)) return;
if(!poker_verify_user_status(target,srv,onick)) return;
var poker=poker_games[target];
var current_player=poker.users[onick];
if(poker.current_bet>current_player.bet) {
......@@ -70,7 +66,7 @@ Bot_Commands["CHECK"].command = function (target,onick,ouh,srv,lvl,cmd) {
Bot_Commands["BET"] = new Bot_Command(0,false,false);
Bot_Commands["BET"].command = function (target,onick,ouh,srv,lvl,cmd) {
if(!poker_verify_game_status(target,srv,onick)) return;
if(!poker_verify_user_status(target,srv,onick)) return;
if(!cmd[1]) {
srv.o(onick,"You must specify an amount to bet!","NOTICE");
return;
......@@ -88,8 +84,8 @@ Bot_Commands["BET"].command = function (target,onick,ouh,srv,lvl,cmd) {
srv.o(onick,"You don't have that much money! Balance: $" + poker.users[onick].money,"NOTICE");
return;
}
if(cmd[1]<poker.current_bet) {
srv.o(onick,"You must meet the minimum bet! Minimum bet: $" + poker.current_bet,"NOTICE");
if(cmd[1]<poker.min_bet) {
srv.o(onick,"Your bet must meet the minimum! Minimum bet: $" + poker.min_bet,"NOTICE");
return;
}
srv.o(target,onick + " bets $" + cmd[1]);
......@@ -103,20 +99,21 @@ Bot_Commands["BET"].command = function (target,onick,ouh,srv,lvl,cmd) {
Bot_Commands["CALL"] = new Bot_Command(0,false,false);
Bot_Commands["CALL"].command = function (target,onick,ouh,srv,lvl,cmd) {
if(!poker_verify_game_status(target,srv,onick)) return;
if(!poker_verify_user_status(target,srv,onick)) return;
var poker=poker_games[target];
var current_player=poker.users[onick];
if(poker.current_bet<=current_player.bet) {
if(poker.current_bet==current_player.bet) {
srv.o(target,onick + " checks.");
} else if(poker.current_bet>current_player.money+current_player.bet) {
srv.o(onick,"You don't have enough to call!","NOTICE");
srv.o(onick,"Balance: $" + current_player.money,"NOTICE");
return;
} else {
var difference=poker.current_bet-current_player.bet;
srv.o(target,onick + " calls the bet: $" + poker.current_bet);
current_player.money-=poker.current_bet;
current_player.bet+=poker.current_bet;
current_player.money-=difference;
current_player.bet+=difference;
srv.o(onick,"Balance: $" + current_player.money,"NOTICE");
}
poker_next_turn(target,srv);
......@@ -125,7 +122,7 @@ Bot_Commands["CALL"].command = function (target,onick,ouh,srv,lvl,cmd) {
Bot_Commands["RAISE"] = new Bot_Command(0,false,false);
Bot_Commands["RAISE"].command = function (target,onick,ouh,srv,lvl,cmd) {
if(!poker_verify_game_status(target,srv,onick)) return;
if(!poker_verify_user_status(target,srv,onick)) return;
var bet=Number(cmd[1]);
if(!bet) {
srv.o(onick,"You must specify an amount to raise!","NOTICE");
......@@ -140,14 +137,16 @@ Bot_Commands["RAISE"].command = function (target,onick,ouh,srv,lvl,cmd) {
return;
}
var poker=poker_games[target];
if(poker.current_bet+bet>poker.users[onick].money) {
var difference=poker.current_bet-poker.users[onick].bet;
if(difference+bet>poker.users[onick].money) {
srv.o(onick,"You don't have that much money! Balance: $" + poker.users[onick].money,"NOTICE");
return;
}
srv.o(target,onick + " raises the bet to $" + (poker.current_bet+bet));
poker.users[onick].money-=bet;
poker.users[onick].bet+=difference;
poker.users[onick].bet+=bet;
poker.current_bet+=bet;
srv.o(target,onick + " raises the bet to $" + (poker.current_bet));
srv.o(onick,"Balance: $" + poker.users[onick].money,"NOTICE");
poker_next_turn(target,srv);
return;
......@@ -217,3 +216,14 @@ Bot_Commands["HOLE"].command = function (target,onick,ouh,srv,lvl,cmd) {
,"NOTICE");
}
Bot_Commands["INVITE"] = new Bot_Command(0,1,false);
Bot_Commands["INVITE"].command = function (target,onick,ouh,srv,lvl,cmd) {
cmd.shift();
if(srv.users[cmd[0].toUpperCase()]) {
srv.o(target,cmd[0] + " is already here!");
return;
}
srv.o(cmd[0],onick + " invited you to play poker in " + target
+ "! /J " + target + " to join.");
return;
}
......@@ -15,8 +15,17 @@ function poker_deal_hole_cards(target,srv) {
function poker_next_turn(target,srv) {
var poker=poker_games[target];
poker.turn=get_next_player(poker.users_map,poker.turn);
var current_turn=poker.turn;
poker.users[poker.users_map[current_turn]].has_bet=true;
poker.turn=get_next_player(poker,poker.turn);
var next_turn_user=poker.users[poker.users_map[poker.turn]];
if(poker_count_active_players(poker)==1) {
poker.round=3;
poker.deal_next=true;
} else if(poker.current_bet==next_turn_user.bet && next_turn_user.has_bet) {
poker.deal_next=true;
}
if(poker.deal_next) {
poker_load_pot(poker);
switch(++poker.round) {
......@@ -36,20 +45,53 @@ function poker_next_turn(target,srv) {
poker.current_bet=0;
poker.deal_next=false;
if(poker.round<4) {
poker.turn=get_next_player(poker,poker.dealer);
poker_game_status(target,srv);
}
} else {
var turn_user=poker.users[poker.users_map[poker.turn]];
if(poker.current_bet==turn_user.bet) poker.deal_next=true;
}
if(poker.round<4) {
poker_prompt_player(target,srv);
}
}
function get_next_player(map,turn) {
function poker_count_active_players(poker_game) {
var count=0;
for(var u in poker_game.users) {
if(poker_game.users[u].active) count++;
}
return count;
}
function poker_verify_game_status(poker_game) {
var active_users=false;
for(var u in srv.users) {
if(poker.users[u] && poker.users[u].active) {
if(time()-srv.users[u].last_spoke<activity_timeout){
active_users=true;
break;
} else {
delete poker.users[u];
srv.o(u,"You have been idle too long. "
+ "Type 'DEAL' here to resume playing poker.", "NOTICE");
}
}
}
if(!active_users) return;
}
function poker_fold_player(target,srv,onick) {
poker_games[target].pot+=poker_games[target].users[onick].bet;
poker_games[target].users[onick].active=false;
srv.o(target, onick + " folded their hand.");
poker_next_turn(target,srv);
}
function get_next_player(poker_game,turn) {
turn++;
if(turn==map.length) turn=0;
if(turn==poker_game.users_map.length) turn=0;
if(!poker_game.users[poker_game.users_map[turn]].active) {
turn=get_next_player(poker_game,turn);
}
return turn;
}
......@@ -59,6 +101,7 @@ function poker_compare_hands(target,srv) {
var winning_player=-1;
for(var p in poker.users) {
var player=poker.users[p];
if(player.active) {
var hand=poker.community_cards.concat(player.cards)
var rank=Rank(hand);
if(rank>winning_hand) {
......@@ -66,7 +109,8 @@ function poker_compare_hands(target,srv) {
winning_player=p;
}
}
srv.o(target,winning_player + " won this hand with " + RANKS[winning_hand]);
}
srv.o(target,winning_player + " won this hand! Winnings: $" + poker.pot);
poker.users[winning_player].money+=poker.pot;
poker.winner=winning_player;
......@@ -97,6 +141,7 @@ function poker_load_pot(poker_game) {
for(var p in poker_game.users) {
poker_game.pot+=poker_game.users[p].bet;
poker_game.users[p].bet=0;
poker_game.users[p].has_bet=false;
}
return;
}
......@@ -109,7 +154,7 @@ function poker_prompt_player(target,srv) {
srv.o(turn,"It is your turn. Minimum bet to call: $" + min_bet,"NOTICE");
}
function poker_verify_game_status(target,srv,onick) {
function poker_verify_user_status(target,srv,onick) {
var poker=poker_games[target];
if (!poker) {
srv.o(target, "No poker game in progress. Type '" + get_cmd_prefix()
......@@ -138,15 +183,15 @@ function poker_init_hand(target,srv) {
for(var u in poker.users) {
poker.users_map.push(u);
}
var small_blind=get_next_player(poker.users_map,poker.dealer);
var large_blind=get_next_player(poker.users_map,small_blind);
var small_blind=get_next_player(poker,poker.dealer);
var large_blind=get_next_player(poker,small_blind);
srv.o(target,poker.users_map[poker.dealer] + " is the dealer for this hand.");
poker.users[poker.users_map[small_blind]].bet+=poker.sm_blind;
srv.o(target,"Small blind: " + poker.users_map[small_blind] + " $" + poker.sm_blind);
poker.users[poker.users_map[large_blind]].bet+=poker.lg_blind;
srv.o(target,"Large blind: " + poker.users_map[large_blind] + " $" + poker.lg_blind);
poker.turn=get_next_player(poker,large_blind);
poker.min_bet=poker.lg_blind;
}
......@@ -168,6 +213,9 @@ function poker_game_status(target,srv) {
var state="";
var cards="";
for(var c in poker.community_cards) {
if(poker.community_cards[c]) cards+=poker_show_card(poker.community_cards[c]);
}
switch(poker.round) {
case -1:
state="Status: waiting for players";
......@@ -176,13 +224,13 @@ function poker_game_status(target,srv) {
state="Status: First round betting";
break;
case 1:
state="The Flop: ";
state="The Flop: " + cards;
break;
case 2:
state="The Turn: ";
state="The Turn: " + cards;
break;
case 3:
state="The River: ";
state="The River: " + cards;
break;
case 4:
state="Hand complete. Winner: " + poker.winner;
......@@ -190,15 +238,12 @@ function poker_game_status(target,srv) {
default:
break;
}
for(var c in poker.community_cards) {
if(poker.community_cards[c]) cards+=poker_show_card(poker.community_cards[c]);
}
if(poker.round>=0) {
if(poker.round>=0 && poker.round<4) {
srv.o(target,"Current pot: $" + poker.pot);
srv.o(target,"Current bet: $" + poker.current_bet);
srv.o(target,"Current turn: " + poker.users_map[poker.turn]);
}
srv.o(target,state + cards);
srv.o(target,state);
}
function poker_reset_game(target,srv) {
......@@ -207,9 +252,11 @@ function poker_reset_game(target,srv) {
poker.users[u].cards=[];
poker.users[u].bet=0;
poker.users[u].active=true;
poker.users[u].has_bet=false;
}
poker.dealer=get_next_player(poker.users_map,poker.dealer);
poker.dealer=get_next_player(poker,poker.dealer);
poker.round=-1;
poker.current_bet=poker.min_bet/2;
poker.pot=0;
}
......
......@@ -19,23 +19,15 @@ function main(srv,target)
{
var poker=poker_games[target];
if(!poker || poker.paused) return;
var active_users=false;
for(var u in srv.users) {
if(poker.users[u]) {
if(time()-srv.users[u].last_spoke<activity_timeout){
active_users=true;
break;
} else {
delete poker.users[u];
if(poker.users[u] && poker.users[u].active) {
if(time()-srv.users[u].last_spoke>=activity_timeout){
poker_fold_player(target,srv,u);
srv.o(u,"You have been idle too long. "
+ "Type 'DEAL' here to resume playing poker.", "NOTICE");
}
}
}
if(!active_users) return;
if(poker.cycle()) {
}
}
// Game objects
......@@ -44,11 +36,11 @@ function Poker_Game()
this.last_update=0;
this.turn=0;
this.pot=0;
this.lg_blind=10;
this.sm_blind=5;
this.dealer=0;
this.min_bet=this.sm_blind;
this.min_bet=10;
this.current_bet=this.min_bet;
this.lg_blind=this.min_bet;
this.sm_blind=this.min_bet/2;
this.round=-1;
this.deck=new Deck();
this.community_cards=new Array();
......@@ -71,6 +63,7 @@ function Poker_Player()
this.cards=[];
this.money=100;
this.bet=0;
this.has_bet=false;
this.active=true;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment