#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "emlen.h"
void
do_setlevels (CHAR_DATA * ch, char *argy)
{
int i;
int k;
char arg1[500];
char arg2[500];
char arg3[500];
bool two_prizes;
DEFINE_COMMAND ("setlevels", do_setlevels, POSITION_DEAD, 110, LOG_ALWAYS, "Sets up a battleground.")
argy = one_argy (argy, arg1);
argy = one_argy (argy, arg2);
argy = one_argy (argy, arg3);
if (!is_number (arg2) || !is_number (arg1) || !is_number (arg3))
{
send_to_char ("Syntax is Setlevels <min> <max> <prize1_vnum> <prize2_vnum>.\n\r", ch);
return;
}
k = atoi (arg2);
i = atoi (arg1);
if (i < 0 || i > 100 || k < 0 || k > 100)
{
send_to_char ("Ranges are 0-100.\n\r", ch);
return;
}
min_level = i;
max_level = k;
if (argy != NULL && argy != "" && argy[0] != '\0' && is_number (argy))
two_prizes = TRUE;
else
two_prizes = FALSE;
if (get_obj_index (atoi (arg3)) == NULL)
{
send_to_char ("Invalid prize vnum.\n\r", ch);
return;
}
if (two_prizes && get_obj_index (atoi (argy)) == NULL)
{
send_to_char ("Invalid prize vnum #2.\n\r", ch);
return;
}
prize_vnum_1 = atoi (arg3);
if (two_prizes)
prize_vnum_2 = atoi (argy);
else
prize_vnum_2 = 0;
send_to_char ("Minimum and maximum battleground level, and prize(s) set.\n\r", ch);
ticks_to_battlefield = 10;
return;
}
void
do_battleground (CHAR_DATA * ch, char *argy)
{
DEFINE_COMMAND ("battleground", do_battleground, POSITION_DEAD, 0, LOG_NORMAL, "Signs you up, or removes you from the list of people joining the battleground (when it starts).")
if (IS_MOB (ch))
return;
if (ch->pcdata->bgf)
{
send_to_char ("You no longer will participate in the battleground.\n\r", ch);
ch->pcdata->bgf = FALSE;
return;
}
if (LEVEL (ch) < min_level || LEVEL (ch) > max_level)
{
char bufff[500];
sprintf (bufff, "The battleground is only open to levels %d to %d at this time.\n\r", min_level, max_level);
send_to_char (bufff, ch);
return;
}
send_to_char ("You will now participate in the battleground when it begins.\n\r", ch);
ch->pcdata->bgf = TRUE;
return;
}
long
bidtotal (int nummy)
{
int k;
long x;
x = 0;
for (k = 0; k < 50; k++)
{
if (biddata.bidders[k][0] == '\0')
continue;
if (biddata.bids[k] == 0)
continue;
if (nummy == 1 && biddata.bidfor[k] == TRUE)
continue;
if (nummy == 2 && biddata.bidfor[k] == FALSE)
continue;
x += biddata.bids[k];
}
return x;
}
void
give_back_money (void)
{
int k;
CHAR_DATA *victim;
for (k = 0; k < 50; k++)
{
if (biddata.bidders[k][0] == '\0')
continue;
if ((victim = get_player_world (char_list, biddata.bidders[k], FALSE)) == NULL)
continue;
if (IS_MOB (victim))
continue;
victim->pcdata->bank += biddata.bids[k];
}
return;
}
void
free_arena (void)
{
int k;
biddata.fighters[0][0] = '\0';
biddata.fighters[1][0] = '\0';
for (k = 0; k < 50; k++)
{
biddata.bidders[k][0] = '\0';
biddata.bids[k] = 0;
biddata.bidfor[k] = FALSE;
}
biddata.taking_bids = FALSE;
biddata.waitticks = -1;
arena_timelimit = -1;
return;
}
int
get_bet_slot (char *charname)
{
int i, k;
i = -1;
for (k = 0; k < 50; k++)
{
if (!str_cmp (biddata.bidders[k], charname))
{
i = k;
break;
}
}
return i;
}
int
free_bet_slot (void)
{
int k;
int i;
i = -1;
for (k = 0; k < 50; k++)
{
if (biddata.bidders[k][0] == '\0')
{
i = k;
break;
}
}
return i;
}
void
do_cancel (CHAR_DATA * ch, char *argy)
{
CHAR_DATA *winner;
CHAR_DATA *loser;
check_ced (ch);
if (ch == NULL)
ch = char_list->next;
if (ch == NULL)
ch = char_list->next;
if (ch == NULL)
ch = char_list->next;
winner = get_char_world_2 (ch, biddata.fighters[0]);
loser = get_char_world_2 (ch, biddata.fighters[1]);
if (winner != NULL)
{
check_ced (winner);
char_from_room (winner);
char_to_room (winner, get_room_index (winner->ced->wasroom));
winner->ced->wasroom = 0;
}
if (loser != NULL)
{
check_ced (loser);
char_from_room (loser);
char_to_room (loser, get_room_index (loser->ced->wasroom));
loser->ced->wasroom = 0;
}
free_arena ();
do_arenaecho (ch, "$1$BArena battle has been cancelled.", FALSE);
return;
}
void
end_arena (CHAR_DATA * winner, CHAR_DATA * loser)
{
bool whowon;
char buffy[500];
CHAR_DATA *temp;
int totalbets;
int winnermoney;
int totalwinners;
int share;
int k;
stop_fighting (winner, TRUE);
stop_fighting (loser, TRUE);
winner->fgt->challenge = 0;
loser->fgt->challenge = 0;
check_ced (winner);
check_ced (loser);
totalbets = 0;
winnermoney = 0;
totalwinners = 0;
if (!str_cmp (NAME (winner), biddata.fighters[0]))
whowon = FALSE;
else
whowon = TRUE;
if (IS_PLAYER (winner))
winner->pcdata->no_quit = 0;
if (IS_PLAYER (loser))
loser->pcdata->no_quit = 0;
char_from_room (winner);
char_from_room (loser);
char_to_room (winner, get_room_index (winner->ced->wasroom));
winner->ced->wasroom = 0;
char_to_room (loser, get_room_index (loser->ced->wasroom));
loser->ced->wasroom = 0;
do_save (winner, "");
do_save (loser, "");
if (IS_PLAYER (winner))
winner->pcdata->challenge_time = 12;
if (IS_PLAYER (loser))
loser->pcdata->challenge_time = 12;
sprintf (buffy, "$B$7Arena Victor: $5%s$7. Arena Loser: $5%s$7.", NAME (winner), NAME (loser));
do_arenaecho (winner, buffy, FALSE);
/*tally all the bets */
/*handle all the bets */
for (k = 0; k < 50; k++) /*remove bank money and tally totals */
{
if (biddata.bidders[k][0] == '\0')
continue;
if (biddata.bids[k] == 0)
continue;
if ((temp = get_player_world (winner, biddata.bidders[k], FALSE)) == NULL)
continue;
if (IS_MOB (temp))
continue;
/*temp->pcdata->bank-=biddata.bids[k]; */
totalbets += biddata.bids[k];
if (biddata.bidfor[k] == whowon)
{
winnermoney += biddata.bids[k];
totalwinners++;
}
else
{
send_to_char ("Bummer... can kiss your bet goodbye.\n\r", temp);
}
temp = NULL;
}
for (k = 0; k < 50; k++) /*Award money to winners */
{
if (biddata.bidders[k][0] == '\0')
continue;
if ((temp = get_player_world (winner, biddata.bidders[k], FALSE)) == NULL)
continue;
if (IS_MOB (temp))
continue;
if (biddata.bidfor[k] == whowon)
{
share = (((biddata.bids[k] * 100) / winnermoney) * totalbets) / 100;
if (biddata.bids[k] > share + 1)
share = biddata.bids[k] + 1;
temp->pcdata->bank += share;
sprintf (buffy, "You just won %d coins from your bet on the arena battle!\n\rThe money has been placed in your bank account.\n\r", share);
send_to_char (buffy, temp);
temp = NULL;
}
}
free_arena ();
return;
}
void
do_arena (CHAR_DATA * ch, char *argy)
{
CHAR_DATA *victim;
CHAR_DATA *victimtwo;
char buffy[500];
DEFINE_COMMAND ("arena", do_arena, POSITION_DEAD, 0, LOG_NORMAL, "Toggles arena message status.")
if (IS_MOB (ch))
return;
if (argy != "" && argy[0] != '\0' && !str_cmp (argy, "on"))
{
ch->pcdata->arena_msg = TRUE;
send_to_char ("You now will see all arena messages and can recieve challenges.\n\r", ch);
return;
}
if (argy != "" && argy[0] != '\0' && !str_cmp (argy, "off"))
{
ch->pcdata->arena_msg = FALSE;
send_to_char ("You will no longer see anything related to the arena.\n\r", ch);
return;
}
if (LEVEL (ch) < 110)
return;
if (biddata.fighters[0][0] == '\0')
{
send_to_char ("But no battle has been set up!\n\r", ch);
return;
}
if ((victim = get_char_world_2 (ch, biddata.fighters[0])) == NULL)
{
sprintf (buffy, "<%s> was a lamer and left the game. Battle cancelled.", biddata.fighters[0]);
give_back_money ();
do_arenaecho (ch, buffy, FALSE);
do_cancel (ch, "");
return;
}
if ((victimtwo = get_char_world_2 (ch, biddata.fighters[1])) == NULL)
{
sprintf (buffy, "<%s> was a lamer and left the game. Battle cancelled.", biddata.fighters[1]);
give_back_money ();
do_arenaecho (ch, buffy, FALSE);
do_cancel (ch, "");
return;
}
arena ();
return;
}
void
arena (void)
{
CHAR_DATA *victim;
CHAR_DATA *victimtwo;
CHAR_DATA *dumchar;
char buffy[500];
dumchar = char_list;
if ((victim = get_char_world_2 (dumchar, biddata.fighters[0])) == NULL)
{
sprintf (buffy, "<%s> was a lamer and left the game. Battle cancelled.", biddata.fighters[0]);
give_back_money ();
do_arenaecho (dumchar, buffy, FALSE);
do_cancel (dumchar, "");
return;
}
if ((victimtwo = get_char_world_2 (victim, biddata.fighters[1])) == NULL)
{
sprintf (buffy, "<%s> was a lamer and left the game. Battle cancelled.", biddata.fighters[1]);
give_back_money ();
do_arenaecho (victim, buffy, FALSE);
do_cancel (victim, "");
return;
}
do_arenaecho (victim, "$4$BThe arena battle has started. All bets closed.", FALSE);
biddata.taking_bids = FALSE;
check_fgt (victim);
check_fgt (victimtwo);
victim->fgt->challenge = 10;
victimtwo->fgt->challenge = 10;
sprintf (buffy, "%s 504", NAME (victim));
do_transfer (victim, buffy);
save_char_obj (victim);
sprintf (buffy, "%s 505", NAME (victimtwo));
do_transfer (victimtwo, buffy);
arena_timelimit = (LEVEL (victim) + LEVEL (victimtwo)) / 2;
save_char_obj (victimtwo);
return;
}
void
do_bet (CHAR_DATA * ch, char *argy)
{
char buffy[500];
long bet;
int fighternum;
char buf[500];
int kkkk;
DEFINE_COMMAND ("bet", do_bet, POSITION_DEAD, 0, LOG_NORMAL, "This command allows you to bet on arena fights.")
if (!pow.arena_on)
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_MOB (ch))
return;
if (LEVEL (ch) > 109 && str_cmp (NAME (ch), "Orin"))
{
send_to_char ("You aren't allowed to bet... it's like giving mortals free money :(\n\r", ch);
return;
}
if (LEVEL (ch) > 100 && LEVEL (ch) < 110)
{
send_to_char ("Due to cheat possibilities, immortals may not bet.\n\r", ch);
return;
}
if (argy == "" || argy[0] == '\0')
{
send_to_char ("Bet INFO for arena news/status.\n\rBet fighter# <amount> to bet on a fighter.\n\rBet SHOW to view your current bet.\n\rBet WITHDRAW to remove your current bet.\n\r", ch);
return;
}
if (!biddata.taking_bids && biddata.fighters[0][0] == '\0')
{
send_to_char ("No arena battle has been set up.\n\r", ch);
return;
}
kkkk = get_bet_slot (NAME (ch));
if (!str_cmp (argy, "info"))
{
int position;
position = ch->position;
ch->position = POSITION_STANDING;
act ("$B$1-----Upcoming Arena Battle-----", ch, NULL, NULL, TO_CHAR);
sprintf (buf, "$B$2Fighter #1: $3%s", biddata.fighters[0]);
act (buf, ch, NULL, NULL, TO_CHAR);
sprintf (buf, "$B$2Fighter #2: $4%s", biddata.fighters[1]);
act (buf, ch, NULL, NULL, TO_CHAR);
act ("$B$1-------------------------------", ch, NULL, NULL, TO_CHAR);
sprintf (buf, "\n\r\x1B[37;1mTotal Money on fighter #1 so far: \x1B[32m%d\x1B[37m.\n\rTotal Money on fighter #2 so far: \x1B[32m%d\x1B[37m.\x1B[37;0m\n\r", bidtotal (1), bidtotal (2));
send_to_char (buf, ch);
ch->position = position;
return;
}
if (!str_cmp (argy, "show"))
{
sprintf (buf, "\n\rTotal Money on fighter #1 so far: %d.\n\rTotal Money on fighter #2 so far: %d.\n\r", bidtotal (1), bidtotal (2));
send_to_char (buf, ch);
if (kkkk == -1)
{
send_to_char ("You currently have no bet placed.\n\r", ch);
return;
}
if (biddata.bidfor[kkkk] == FALSE)
sprintf (buffy, "%s", biddata.fighters[0]);
else
sprintf (buffy, "%s", biddata.fighters[1]);
sprintf (buf, "Your current bet is \x1B[34;1m%d\x1B[37;0m coins on \x1B[37;1m%s\x1B[0m.\n\r", biddata.bids[kkkk], buffy);
send_to_char (buf, ch);
return;
}
if (!biddata.taking_bids && biddata.fighters[0][0] != '\0')
{
send_to_char ("The battle has begun... bets are closed.\n\r", ch);
return;
}
/*OKAY, real bid below */
if (!str_cmp (argy, "withdraw"))
{
if (kkkk == -1)
{
send_to_char ("But you didn't bet anything...\n\r", ch);
return;
}
ch->pcdata->bank += biddata.bids[kkkk];
biddata.bidders[kkkk][0] = '\0';
biddata.bids[kkkk] = 0;
biddata.bidfor[kkkk] = FALSE;
send_to_char ("Bet removed.\n\r", ch);
return;
}
argy = one_argy (argy, buffy);
if (argy == "" || argy[0] == '\0')
{
send_to_char ("Bet INFO for arena news/status.\n\rBet # <amount> to bet on a fighter.\n\rBet SHOW to view your current bet.\n\rBet WITHDRAW to remove your current bet.\n\r", ch);
return;
}
if (!is_number (argy) || !is_number (buffy))
{
send_to_char ("Bet INFO for arena news/status.\n\rBet # <amount> to bet on a fighter.\n\rBet SHOW to view your current bet.\n\rBet WITHDRAW to remove your current bet.\n\r", ch);
return;
}
fighternum = atoi (buffy);
bet = atoi (argy);
if (bet < 1)
return;
if (fighternum != 1 && fighternum != 2)
{
send_to_char ("Bet INFO for arena news/status.\n\rBet # <amount> to bet on a fighter.\n\rBet SHOW to view your current bet.\n\rBet WITHDRAW to remove your current bet.\n\r", ch);
return;
}
if (!str_cmp (NAME (ch), biddata.fighters[0]) && fighternum == 2)
{
send_to_char ("You cannot bid on your opponent!\n\r", ch);
return;
}
if (!str_cmp (NAME (ch), biddata.fighters[1]) && fighternum == 1)
{
send_to_char ("You cannot bid on your opponent!\n\r", ch);
return;
}
if (bet < 1 || bet > ch->pcdata->bank)
{
send_to_char ("You don't have that much money in your bank.\n\r", ch);
return;
}
if (kkkk == -1)
{
int q;
if ((q = free_bet_slot ()) == -1)
{
send_to_char ("Sorry, too many bets in already.\n\r", ch);
return;
}
strcpy (biddata.bidders[q], NAME (ch));
biddata.bids[q] = bet;
if (fighternum == 1)
biddata.bidfor[q] = FALSE;
else
biddata.bidfor[q] = TRUE;
kkkk = q;
}
else
{
ch->pcdata->bank += biddata.bids[kkkk];
biddata.bids[kkkk] = bet;
if (fighternum == 1)
biddata.bidfor[kkkk] = FALSE;
else
biddata.bidfor[kkkk] = TRUE;
}
if (biddata.bidfor[kkkk] == FALSE)
sprintf (buffy, "%s", biddata.fighters[0]);
else
sprintf (buffy, "%s", biddata.fighters[1]);
sprintf (buf, "Bet of \x1B[37;1m%d\x1B[0m coins placed on \x1B[32;1m%s\x1B[37;0m.\n\r", bet, buffy);
send_to_char (buf, ch);
send_to_char ("Bet placed. You may change it until the second the battle begins.\n\r", ch);
ch->pcdata->bank -= bet;
return;
}
void
do_acceptc (CHAR_DATA * ch, char *argy)
{
CHAR_DATA *victim;
ROOM_DATA *r;
char tempstr[50];
char buf[500];
DEFINE_COMMAND ("accept", do_acceptc, POSITION_DEAD, 0, LOG_NORMAL, "This allows you to accept an arena challenge.")
if (!pow.arena_on)
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_MOB (ch))
return;
if (!ch->pcdata->challenged_by)
{
send_to_char ("But you have not been challenged!\n\r", ch);
return;
}
strcpy (tempstr, ch->pcdata->challenged_by);
if (biddata.fighters[0][0] != '\0')
{
send_to_char ("Someone beat you to it; an arena battle has already been arranged\n\rby another party. Try again after the battle.\n\r", ch);
return;
}
if (argy == "" || argy[0] == '\0')
{
sprintf (buf, "\x1B[37;1mYou have been challenged by \x1B[32m%s\x1B[37m.\x1B[37;0m Type ACCEPT YES to accept the challenge.\n\r", ch->pcdata->challenged_by);
send_to_char (buf, ch);
return;
}
if (ch->hit < ch->max_hit)
{
send_to_char ("You must be at your max hit points to accept the challenge.\n\r", ch);
return;
}
if (str_cmp (argy, "yes"))
return;
if ((victim = get_char_world_2 (ch, tempstr)) == NULL)
{
send_to_char ("You challenger left the world.\n\r", ch);
if (ch->pcdata->challenged_by)
free_string (ch->pcdata->challenged_by);
ch->pcdata->challenged_by = NULL;
return;
}
if (victim->desc == NULL)
{
send_to_char ("Your challenger has lost link.\n\r", ch);
return;
}
if (IS_MOB (victim))
return;
if (victim->hit < victim->max_hit)
{
send_to_char ("Your challenger was dumb and fought something or somehow fell below max\n\r", ch);
send_to_char ("hitpoints. Tell your opponent to rest up, then you can accept.\n\r", ch);
send_to_char ("Your challengee accepted but you are no longer at full hit points and thus\n\r", victim);
send_to_char ("cannot fight the battle. Rest up and your opponent may accept later.\n\r", victim);
return;
}
if (ch->in_room && ch->in_room->vnum < 1000)
{
send_to_char ("You cannot accept a challenge from here...\n\r", ch);
return;
}
#ifdef NEW_WORLD
if ((ch->in_room->area->vnum != 1 && ch->in_room->area->vnum != 2) ||
(IS_EVIL (ch) && ch->in_room->area->vnum == 1) ||
(!IS_EVIL (ch) && ch->in_room->area->vnum == 2))
{
send_to_char ("You must be near or in one of the main cities to accept the challenge!\n\r", ch);
return;
}
if ((victim->in_room->area->vnum != 1 && victim->in_room->area->vnum != 2) ||
(IS_EVIL (victim) && victim->in_room->area->vnum == 1) ||
(!IS_EVIL (victim) && victim->in_room->area->vnum == 2))
{
send_to_char ("Your challenger is no longer near a main city!\n\r", ch);
return;
}
#endif
if ((r = get_room_index (VNUM_WAITONE)) == NULL)
return;
if (r->more && r->more->people)
{
send_to_char ("Someone was fucking around and screwed up the arena. Try back later.\n\r", ch);
return;
}
if ((r = get_room_index (VNUM_WAITTWO)) == NULL)
return;
if (r->more && r->more->people)
{
send_to_char ("Someone was fucking around and screwed up the arena. Try back later.\n\r", ch);
return;
}
sprintf (buf, "%s %s", NAME (victim), NAME (ch));
do_set_fighters (ch, buf);
if (ch->pcdata->challenged_by)
{
free_string (ch->pcdata->challenged_by);
ch->pcdata->challenged_by = NULL;
}
victim->pcdata->challenge_time = 0;
return;
}
void
do_decline (CHAR_DATA * ch, char *argy)
{
char buf[500];
char tempstr[50];
CHAR_DATA *victim;
DEFINE_COMMAND ("decline", do_decline, POSITION_DEAD, 0, LOG_NORMAL, "This command allows you to decline an arena challenge")
if (IS_MOB (ch))
return;
if (!ch->pcdata->challenged_by)
{
send_to_char ("But you have not been challenged!\n\r", ch);
return;
}
strcpy (tempstr, ch->pcdata->challenged_by);
if (argy == "" || argy[0] == '\0')
{
sprintf (buf, "\x1B[37;1mYou have been challenged by \x1B[32m%s\x1B[37m.\x1B[37;0m Type DECLINE YES to decline the challenge.\n\r", ch->pcdata->challenged_by);
send_to_char (buf, ch);
return;
}
if (str_cmp (argy, "yes"))
return;
if ((victim = get_char_world_2 (ch, tempstr)) == NULL)
{
send_to_char ("You challenger left the world anyway... what an idiot.\n\r", ch);
if (ch->pcdata->challenged_by)
free_string (ch->pcdata->challenged_by);
ch->pcdata->challenged_by = NULL;
return;
}
if (ch->pcdata->challenged_by)
free_string (ch->pcdata->challenged_by);
ch->pcdata->challenged_by = NULL;
if (IS_MOB (victim))
return;
victim->pcdata->challenge_time = 0;
if (victim->desc == NULL)
{
send_to_char ("Your challenger has lost link.\n\r", ch);
send_to_char ("-->You have successfully declined the challenge.<--\n\r", ch);
send_to_char ("If you are being disturbed by challenges, type CHALLENGE OFF.\n\r", ch);
return;
}
send_to_char ("\x1B[37;1m*****\x1B[0mYour challenge has just been declined!\n\r", victim);
send_to_char ("-->You have successfully declined the challenge.<--\n\r", ch);
send_to_char ("If you are being disturbed by challenges, type CHALLENGE OFF.\n\r", ch);
return;
}
void
do_challenge (CHAR_DATA * ch, char *argy)
{
char buf[500];
CHAR_DATA *victim;
char arg1[500];
DEFINE_COMMAND ("challenge", do_challenge, POSITION_DEAD, 0, LOG_NORMAL, "This command allows you to challenge another player to an arena battle.")
if (!pow.arena_on)
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_MOB (ch))
return;
if (argy == "" || argy[0] == '\0')
{
send_to_char ("Format is Challenge <playername> if you wish to challenge someone.\n\r", ch);
return;
/* if (ch->pcdata->challenge_on)
{
send_to_char("You no longer will accept any challenges from anyone.\n\r",ch);
ch->pcdata->challenge_on=FALSE;
}
else
{
send_to_char("You now accept challenges if given.\n\r",ch);
ch->pcdata->challenge_on=TRUE;
}
return; */
}
if (!str_cmp (argy, "on"))
{
send_to_char ("You now accept challenges if given.\n\r", ch);
ch->pcdata->challenge_on = TRUE;
return;
}
if (!str_cmp (argy, "off"))
{
send_to_char ("You no longer will accept any challenges from anyone.\n\r", ch);
ch->pcdata->challenge_on = FALSE;
return;
}
if (biddata.fighters[0][0] != '\0')
{
send_to_char ("There is already a fight arranged/going on.\n\r", ch);
return;
}
if (ch->hit != ch->max_hit)
{
send_to_char ("You must be at full hit points to challenge someone.\n\r", ch);
return;
}
if (LEVEL (ch) < 6)
{
send_to_char ("You must be level 6 before you may fight in the arena.\n\r", ch);
return;
}
if (ch->pcdata->challenge_on == FALSE)
{
send_to_char ("You must have challenge ON if you wish to challenge someone.\n\r", ch);
return;
}
argy = one_argy (argy, arg1);
if ((victim = get_char_world_2 (ch, arg1)) == NULL)
{
send_to_char ("That person is not currently playing or visible to you.\n\r", ch);
return;
}
if (IS_MOB (victim))
{
send_to_char ("You cannot challenge NPC's.\n\r", ch);
return;
}
if (ch->pcdata->bounty != 0)
{
send_to_char ("You may not challenge when you have a bounty!\n\r", ch);
return;
}
if (!pow.arena_good_evil && ((IS_EVIL (ch) && !IS_EVIL (victim)) || (!IS_EVIL (ch) && IS_EVIL (victim))))
{
send_to_char ("That person is not currently playing or visible to you.\n\r", ch);
return;
}
if (ch->in_room && ch->in_room->vnum < 1000)
{
send_to_char ("You cannot challenge someone from here...\n\r", ch);
return;
}
if (victim->pcdata->bounty != 0)
{
send_to_char ("You cannot challenge outlaws!\n\r", ch);
return;
}
if (LEVEL (victim) > 100)
{
send_to_char ("No challenging immorts!\n\r", ch);
return;
}
if (LEVEL (ch) > 100)
{
send_to_char ("Immorts cannot challenge!\n\r", ch);
return;
}
if (victim->pcdata->challenge_on == FALSE)
{
send_to_char ("That player is not accepting challenges.\n\r", ch);
return;
}
if (victim->pcdata->challenged_by && argy != "" && argy[0] != '\0' && !str_cmp (argy, "cancel") && !str_cmp (NAME (ch), victim->pcdata->challenged_by))
{
send_to_char ("Your challenger has cancelled the challenge. What a wimp!\n\r", victim);
send_to_char ("Challenge withdrawn.\n\r", ch);
if (victim->pcdata->challenged_by)
{
free_string (victim->pcdata->challenged_by);
victim->pcdata->challenged_by = NULL;
}
ch->pcdata->challenge_time = 0;
return;
}
if (ch->pcdata->challenge_time > 0)
{
send_to_char ("You must wait a bit before offering another challenge.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("Challenge yourself? You mentally challenged or something, STUPID?!\n\r", ch);
return;
}
sprintf (buf, "\x1B[34;1mINCOMING CHALLENGE from \x1B[37m%s\x1B[34;1m.\n\r", NAME (ch));
send_to_char (buf, victim);
send_to_char ("\x1B[37;0mUse ACCEPT to accept the challenge, DECLINE to decline.\n\r", victim);
ch->pcdata->challenge_time = 5;
if (victim->pcdata->challenged_by)
{
free_string (victim->pcdata->challenged_by);
victim->pcdata->challenged_by = NULL;
}
victim->pcdata->challenged_by = str_dup (NAME (ch));
send_to_char ("You challenge has been successfully sent. Because the other character must\n\r", ch);
send_to_char ("also be at full health, the response may be slow. If your victim does not\n\r", ch);
send_to_char ("answer the challenge within 5 ticks, you may propose a challenge to\n\r", ch);
send_to_char ("someone else. Type CHALLENGE <person> CANCEL to cancel this challenge.\n\r", ch);
return;
}
void
do_set_fighters (CHAR_DATA * ch, char *argy)
{
char buffy[500];
char buf[500];
CHAR_DATA *victimtwo;
CHAR_DATA *victim;
ROOM_DATA *rm;
ROOM_DATA *rm2;
DEFINE_COMMAND ("setfighters", do_set_fighters, POSITION_DEAD, 110, LOG_NORMAL, "Sets arena fighters.")
if (IS_MOB (ch))
return;
if (argy == "" || argy[0] == '\0')
{
send_to_char ("Format is setfighters <fighter1> <fighter2>.\n\r", ch);
return;
}
argy = one_argy (argy, buffy);
if (argy == "" || argy[0] == '\0')
{
send_to_char ("Format is setfighters <fighter1> <fighter2>.\n\r", ch);
return;
}
if ((victimtwo = get_char_world_2 (ch, argy)) == NULL)
{
send_to_char ("The second person isn't in the world.\n\r", ch);
return;
}
if ((victim = get_char_world_2 (ch, buffy)) == NULL)
{
send_to_char ("The first person isn't in the world.\n\r", ch);
return;
}
if ((rm = get_room_index (VNUM_WAITONE)) == NULL)
return;
if ((rm2 = get_room_index (VNUM_WAITTWO)) == NULL)
return;
check_room_more (rm);
check_room_more (rm2);
if (rm->more->people != NULL ||
rm2->more->people != NULL)
{
send_to_char ("Someone is apparently stuck in the waiting room, sorry.\n\r", victim);
send_to_char ("Someone is apparently stuck in the waiting room, sorry.\n\r", victimtwo);
do_cancel (ch, "");
return;
}
check_ced (victim);
check_ced (victimtwo);
victim->ced->wasroom = victim->in_room->vnum;
sprintf (buf, "%s %d", NAME (victim), VNUM_WAITONE);
do_transfer (ch, buf);
victimtwo->ced->wasroom = victimtwo->in_room->vnum;
sprintf (buf, "%s %d", NAME (victimtwo), VNUM_WAITTWO);
do_transfer (ch, buf);
send_to_char ("You have been transferred to the waiting room while bets are placed.\n\r", victim);
send_to_char ("You have been transferred to the waiting room while bets are placed.\n\r", victimtwo);
biddata.waitticks = ARENA_WAIT_TICK;
do_arenaecho (ch, "$B$1-----Upcoming Arena Battle-----", FALSE);
sprintf (buf, "$B$2Fighter #1: $3%s", NAME (victim));
do_arenaecho (ch, buf, FALSE);
sprintf (buf, "$B$2Fighter #2: $4%s", NAME (victimtwo));
do_arenaecho (ch, buf, FALSE);
do_arenaecho (ch, "$B$1-------------------------------", FALSE);
do_arenaecho (ch, "For betting info, type help bet", FALSE);
biddata.taking_bids = TRUE;
strcpy (biddata.fighters[0], NAME (victim));
strcpy (biddata.fighters[1], NAME (victimtwo));
return;
}