/* Slot code by Jair for Asgardian Nightmares Written for Rot */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "merc.h" #include "recycle.h" DECLARE_DO_FUN(do_announce ); /*********************************************************** fp = fopen(SLOT_FILE,"r"); slotMachine->value[1] = fread_number(fp); fclose(fp); ************************************************************/ //no idea what this does /*****Functions*******/ int Roll_Slots(); void Update_Player_Money(CHAR_DATA *ch, int silver); int Slots_Win(int slot_roll1, int slot_roll2, int slot_roll3, int bet, int Slots_Jackpot, OBJ_DATA *slotMachine); void do_slots(CHAR_DATA *ch, char *argument) { char *bar_messages[] = { "<------------>", "{Y Aegir {x", /* 1 */ "{R Odin {x", /* 2 */ "{M Hel {x", /* 3 */ "{c Loki {x", /* 4 */ "{C Thor {x", /* 5 */ "{y Freya {x", /* 6 */ "{r Forseti {x", /* 7 */ "{G Tyr {x", /* 8 */ "{W Sif {x", /* 9 */ "{B Jord {x", /* 10*/ }; //FILE *fp; OBJ_DATA *slotMachine; char buf[MAX_STRING_LENGTH]; //int winArray[11]; int Slots_Jackpot, cost; char arg[MSL / 10]; int bet, total_silver, slot_roll1, slot_roll2, slot_roll3, money_won; bool foundSlot; //check if arguments are correct argument = one_argument(argument, arg); // the players bet if (arg[0] == '\0') { send_to_char("{@Syntax: {#slots {$<{&amount{$>{x\n\r", ch); return; } /*if(!is_number(arg)) { send_to_char("{@Syntax: {#slots {$<{&amount{$>{^ amount in silver{x\n\r",ch); return; }*/ bet = atoi(arg); //First, check if the character is an npc if (IS_NPC(ch)) { send_to_char( "Sorry, only player characters may use the slot machine.\n\r", ch); return; } //Second, check if there is a slot machine here, if it is working foundSlot = FALSE; for (slotMachine = ch->in_room->contents; slotMachine != NULL; slotMachine = slotMachine->next_content) { if ((slotMachine->item_type == ITEM_SLOT_MACHINE) && (can_see_obj(ch, slotMachine))) { foundSlot = TRUE; break; } } if (foundSlot == FALSE) { send_to_char("There is no slot machine here.\n\r", ch); return; } cost = slotMachine->value[0]; if (cost <= 0) { send_to_char("This slot machine seems to be broken.\n\r", ch); return; } //bet needs to be in silver, so get total money character has total_silver = ch->silver + (ch->gold * 100) + (ch->platinum * 10000); //Check if bet is greater than the money the character has if (bet > total_silver) { send_to_char("You can't bet more than you have.\n\r", ch); return; } if (bet > 100000) { send_to_char("{@You can't bid more than 10 platinum.{0\n\r", ch); return; } if (bet < 0) { send_to_char("{@You can't bid a negative number.{0\n\r", ch); return; } //Backup Slots /* This didn't like me, so I took it out. */ /* fp = fopen(SLOT_FILE,"r"); slotMachine->value[1] = fread_number(fp); fclose(fp); */ //so, the character has enough money to cover its bet, slots on Slots_Jackpot = slotMachine->value[1]; //subtract the bet to start total_silver = total_silver - bet; //run slot code slot_roll1 = Roll_Slots(); slot_roll2 = Roll_Slots(); slot_roll3 = Roll_Slots(); //Tien's Code send_to_char( "{x\n\r{x {3_______________________________________ {!_{x\n\r", ch); send_to_char( "{x {3/{* ------------------------------------- {3\\ {!(_){x\n\r", ch); send_to_char( "{x {3| {@Slots {7-{*|{7- {3| {7/{7/{x\n\r", ch); send_to_char( "{x {3|{!> {@************************************* {!<{3|{7/{7/{x\n\r", ch); sprintf(buf, "{x {3|{!> {@[ %s {@| %s {@| %s {@] {!<{3|{7/{x\n\r", bar_messages[slot_roll1], bar_messages[slot_roll2], bar_messages[slot_roll3]); send_to_char(buf, ch); send_to_char( "{x {3|{!> {@************************************* {!<{3|{x\n\r", ch); send_to_char( "{x {3\\{*---------------------------------------{3/{x\n\r", ch); sprintf(buf, "{x {#Current Jackpot:{& %d {7silver{x\n\r{x\n\r", Slots_Jackpot); send_to_char(buf, ch); //check if the player won if (slot_roll1 != slot_roll2 && slot_roll1 != slot_roll3 && slot_roll2 != slot_roll3) { //update jackpot Slots_Jackpot = Slots_Jackpot + bet; if (Slots_Jackpot > 10000000) Slots_Jackpot = 10000000; //player did not win sprintf( buf, "Sorry you didn't win anything. The jackpot is now worth %d silver.\n\r", Slots_Jackpot); send_to_char(buf, ch); slotMachine->value[1] = Slots_Jackpot; Update_Player_Money(ch, total_silver); return; } //the player has won something, find how much they won. //money won is the amount they won total, to be added to their money money_won = Slots_Win(slot_roll1, slot_roll2, slot_roll3, bet, Slots_Jackpot, slotMachine); //update players total_silver //Check if the slot machine can cover the win if (Slots_Jackpot < money_won) { //slots cannot handle the amount, give over as much as possible total_silver = total_silver + Slots_Jackpot; sprintf( buf, "The slot machine cannot cover your winnings. You get %d silver.\n\r", Slots_Jackpot); send_to_char(buf, ch); Slots_Jackpot = 0; slotMachine->value[1] = Slots_Jackpot; Update_Player_Money(ch, total_silver); return; } total_silver = total_silver + money_won + bet; Slots_Jackpot = Slots_Jackpot - money_won; slotMachine->value[1] = Slots_Jackpot; if ((slot_roll1 == slot_roll2) && (slot_roll2 == slot_roll3)) { sprintf( buf, "You won the jackpot worth %d silver!! The jackpot now stands at %d silver.\n\r", money_won, slotMachine->value[1]); send_to_char(buf, ch); } else { sprintf( buf, "You matched 2 bars and won %d silver! The jackpot is now worth %d silver.\n\r", money_won, slotMachine->value[1]); send_to_char(buf, ch); } Update_Player_Money(ch, total_silver); return; } int Roll_Slots() { int slot = 0; slot = number_range(1, 49); if (slot == 1) return 1; //tas 1/49 else if (slot == 2 || slot == 3) return 2; //skyntil 2/49 else if (slot >= 4 && slot <= 6) return 3; //lucifer 3/49 else if (slot >= 7 && slot <= 10) return 4; //raolin 4/49 else if (slot >= 11 && slot <= 15) return 5; //kefka 5/49 else if (slot >= 16 && slot <= 21) return 6; //jasrags 6/49 else if (slot >= 22 && slot <= 28) return 7; //deblin 7/49 else if (slot >= 29 && slot <= 36) return 8; //anonymous 8/49 else if (slot >= 37 && slot <= 45) return 9; //gavorkian 9/49 else return 10; //jair 10/49 } int Slots_Win(int bar1, int bar2, int bar3, int bet, int jackpot, OBJ_DATA *slotMachine) { int winnings; //Check if all 3 are the same, declare jackpot winnings = 0; if ((bar1 == bar2) && (bar2 == bar3)) { if (bar1 <= 5) { winnings = bet * (11 - bar1) * 1.5; /* they won the jackpot, make it */ /* worth their while! */ } else winnings = bet * (11 - bar1); slotMachine->value[1] -= winnings; /* put it back to something */ slotMachine->value[1] += bet; return winnings; } if (bar1 == bar2 || bar1 == bar3) { winnings += ((bet * 12) / (bar1)); return winnings; } if (bar2 == bar3) { winnings += ((bet * 12) / (bar2)); return winnings; } return 0; } void Update_Player_Money(CHAR_DATA *ch, int total_silver) { int plat, gold, silver; plat = total_silver / 10000; total_silver -= plat * 10000; gold = total_silver / 100; total_silver -= gold * 100; silver = total_silver; ch->silver = silver; ch->gold = gold; ch->platinum = plat; }