/***************************************************************************
* 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. *
***************************************************************************/
/***************************************************************************
* God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock *
* *
* Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little *
* This mud is NOT to be copied in whole or in part, or to be run without *
* the permission of Matthew Little. Nobody else has permission to *
* authorise the use of this code. *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
/* Tier Code (C) Tijer 2001 */
void gainstats (CHAR_DATA * ch)
{
int times;
int tgain = number_range (5, 8);
stc ("Your gain is:", ch);
for (times = 0; times <= 3; times++)
{
int stat = number_range (1, 6);
switch (stat)
{
case 1:
{
int amount = number_range (1, 5);
stcprintf (ch, " %d hit points ", (amount * 100));
ch->max_hit += (amount * 100);
ch->xhit += (amount * 100);
break;
}
case 2:
{
int amount = number_range (1, 5);
stcprintf (ch, " %d mana points ", (amount * 100));
ch->max_mana += (amount * 100);
ch->xmana += (amount * 100);
break;
}
case 3:
{
int amount = number_range (1, 5);
stcprintf (ch, " %d move points ", (amount * 100));
ch->max_move += (amount * 100);
ch->xmove += (amount * 100);
break;
}
case 4:
{
stcprintf (ch, " 5 hitroll ");
ch->xhitroll += 5;
break;
}
case 5:
{
stcprintf (ch, " 5 damroll ");
ch->xdamroll += 5;
break;
}
case 6:
{
stcprintf (ch, " -25 ac ", ch->xac);
ch->xac += 25;
break;
}
}
}
ch->tpoints += tgain;
stcprintf (ch, "and %d tier points.\n\r", tgain);
}
// Tier Powers!
void do_trestore (CHAR_DATA * ch, char *argument)
{
if IS_NPC
(ch) return;
if (ch->fight_timer > 0)
{
stc ("Not with a fight timer!\n\r", ch);
return;
}
if (ch->hit == ch->max_hit && ch->mana == ch->max_mana && ch->move == ch->max_move )
{
stc ("You are completely fully healed!\n\r", ch);
return;
}
if (ch->tier < 5)
{
stc ("You need to be atleast tier 5 to be able to heal yourself.\n\r",
ch);
return;
}
if (ch->tpoints < 10)
{
stc ("You dont have enough tier points!\n\r", ch);
return;
}
ch->hit = ch->max_hit;
ch->mana = ch->max_mana;
ch->move = ch->max_move;
ch->loc_hp[0] = 0;
ch->loc_hp[1] = 0;
ch->loc_hp[2] = 0;
ch->loc_hp[3] = 0;
ch->loc_hp[4] = 0;
ch->loc_hp[5] = 0;
ch->loc_hp[6] = 0;
update_pos (ch);
stc ("You heal yourself!\n\r", ch);
act ("$n glows as $e is healed.", ch, NULL, NULL, TO_ROOM);
ch->tpoints -= 10;
return;
}
void do_tportal (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MSL];
ROOM_INDEX_DATA *location;
one_argument (argument, arg);
if IS_NPC
(ch) return;
if (ch->tpoints < 20)
{
stc ("You dont have enough tier points!\n\r", ch);
return;
}
if ((victim = get_char_world (ch, arg)) == NULL)
{
stc ("Portal to who?\n\r", ch);
return;
}
if (IS_NPC (victim))
{
stc ("You failed!\n\r", ch);
return;
}
if (IS_SET (victim->in_room->room_flags, ROOM_GOD)
|| IS_SET (victim->in_room->room_flags, ROOM_CCHAMBER)
|| ch->in_room->vnum == victim->in_room->vnum
|| IS_SET (victim->extra2, NHELPER)
|| IS_SET (victim->in_room->area->aflags, AFLAG_HQ)
|| IS_SET (victim->in_room->room_flags, ROOM_NO_TELEPORT))
{
stc ("You failed!\n\r", ch);
return;
}
if ((ch->tier - victim->tier) >= 5)
{
stc ("You failed\n\r", ch);
return;
}
location = victim->in_room;
act ("You step into a portal.", ch, NULL, NULL, TO_CHAR);
act ("$n steps into thin air.", ch, NULL, NULL, TO_ROOM);
char_from_room (ch);
char_to_room (ch, location);
do_look (ch, "auto");
act ("You step out of the portal.", ch, NULL, NULL, TO_CHAR);
act ("$n steps out of thin air.", ch, NULL, NULL, TO_ROOM);
WAIT_STATE (ch, 6);
ch->tpoints -= 20;
return;
}