/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* ROM 2.4 is copyright 1993-1996 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@efn.org) *
* Gabrielle Taylor *
* Brian Moore (zump@rom.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "arena.h"
void do_startwar(CHAR_DATA *ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
char arg3[MAX_INPUT_LENGTH];
DESCRIPTOR_DATA *d;
argument = one_argument(argument, arg1);
argument = one_argument(argument, arg2);
argument = one_argument(argument, arg3);
if (arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0')
{
send_to_char("Syntax: startwar <type> <min_level> <max_level>\n\r", ch);
return;
}
if (atoi(arg1) < 1 || atoi(arg1) > 2)
{
send_to_char("The type either has to be 1, or 2.\n\r", ch);
return;
}
if (atoi(arg2) <= 0 || atoi(arg2) > 90)
{
send_to_char("Level must be between 1 and 90.\n\r", ch);
return;
}
if (atoi(arg3) <= 0 || atoi(arg3) > 90)
{
send_to_char("Level must be between 1 and 90.\n\r", ch);
return;
}
if (atoi(arg3) < atoi(arg2))
{
send_to_char("Max level must be greater than the min level.\n\r", ch);
return;
}
if (iswar == TRUE)
{
send_to_char("There is already a war going!\n\r", ch);
return;
}
iswar = TRUE;
wartype = atoi(arg1);
min_level = atoi(arg2);
max_level = atoi(arg3);
sprintf(buf, "{c%s {Rwar started for levels {Y%d {Rto {Y%d{R. Type 'WAR' to kill or be killed", wartype == 1 ? "Single" : "Team", min_level, max_level);
do_wartalk(buf);
wartimeleft = 3;
for (d = descriptor_list; d != NULL; d = d->next)
{
if (!IS_NPC(d->character))
{
if (IS_SET(d->character->act, PLR_ARENA))
REMOVE_BIT(d->character->act, PLR_ARENA);
}
}
}
void do_war(CHAR_DATA *ch)
{
char buf[MAX_STRING_LENGTH];
ROOM_INDEX_DATA *location;
if (iswar != TRUE)
{
send_to_char("There is no war going!\n\r", ch);
return;
}
if (ch->level < min_level || ch->level > max_level)
{
send_to_char("Sorry, you can't join this war.\n\r", ch);
return;
}
if (IS_SET(ch->act, PLR_ARENA))
{
send_to_char("I don't think so.\n\r", ch);
return;
}
if (wartype == 1)
{
if ((location = get_room_index(SINGLE_WAR_WAITING_ROOM)) == NULL)
{
send_to_char("Arena is not yet completed, sorry.\n\r", ch);
return;
}
else
{
act("$n goes to get $s {Rass{w whipped in war!", ch, NULL, NULL, TO_ROOM);
char_from_room(ch);
char_to_room(ch, location);
SET_BIT(ch->act, PLR_ARENA);
sprintf(buf, "{c%s {R({cLevel {Y%d{R) joins the war!", ch->name, ch->level);
do_wartalk(buf);
act("$n arrives to get $s {Rass{w whipped!", ch, NULL, NULL, TO_ROOM);
inwar++;
do_look(ch, "auto");
return;
}
}
}
void war_update(void)
{
char buf[MAX_STRING_LENGTH];
CHAR_DATA *ch;
DESCRIPTOR_DATA *d;
ROOM_INDEX_DATA *random;
int x;
if (wartimeleft > 0)
{
sprintf(buf, "%d tick%s left to join the war.", wartimeleft, wartimeleft == 1 ? "" : "s");
do_wartalk(buf);
sprintf(buf, "%d %s %s fighting in the war, so far.", inwar, inwar == 1 ? "person" : "people", inwar == 1 ? "is" : "are");
do_wartalk(buf);
sprintf(buf, "Type of war: {Y%d {R- {Y%d{R, {C%s war{R.{w", min_level, max_level, wartype == 1 ? "Single" : "Team");
do_wartalk(buf);
wartimeleft--;
return;
}
if (wartimeleft == 0 && iswar == TRUE && wartimer == 0)
{
if (inwar == 0 || inwar == 1)
{
sprintf(buf, "Not enough people for war. War reset.");
do_wartalk(buf);
iswar = FALSE;
wartimeleft = 0;
wartimer = 0;
min_level = 0;
max_level = 0;
wartype = 0;
for(d = descriptor_list; d != NULL; d = d->next)
{
if (IS_SET(d->character->act, PLR_ARENA))
{
char_from_room(d->character);
char_to_room(d->character, (get_room_index(ROOM_VNUM_TEMPLE)));
do_look(d->character, "auto");
}
}
}
else
{
sprintf(buf, "The battle begins! %d players are fighting!", inwar);
do_wartalk(buf);
wartimer = 20;
for(d = descriptor_list; d != NULL; d = d->next)
{
if (IS_SET(d->character->act, PLR_ARENA))
{
random = get_room_index(12004);
char_from_room(d->character);
char_to_room(d->character, random);
do_look(d->character, "auto");
}
}
}
}
return;
}