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