/***************************************************************************
* 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. *
***************************************************************************/
/******************************************
All contents in this file created by Nephesch.
However, all material is free for use as long as
you give me some credit. As far as I know this
is the most accurate coding of the White Wolf
Fae class. Have fun everyone.
******************************************
* Content Modified By Jalthier Firestar *
* Some work done by Paithan *
******************************************/
#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"
void chicanery_art (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
stc (" Chicanery: ", ch);
if (ch->pcdata->powers[FAE_CHIC] == 0)
{
stc (" None.\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_CHIC] >= 1)
stc (" Fuddle", ch);
if (ch->pcdata->powers[FAE_CHIC] >= 2)
stc (" Fugue", ch);
if (ch->pcdata->powers[FAE_CHIC] >= 3)
stc (" Haunted", ch);
if (ch->pcdata->powers[FAE_CHIC] >= 4)
stc (" Veiled", ch);
if (ch->pcdata->powers[FAE_CHIC] >= 5)
stc (" Captive", ch);
stc ("\n\r", ch);
return;
}
void legerdemain_art (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
stc (" Legerdemain: ", ch);
if (ch->pcdata->powers[FAE_LEGE] == 0)
{
stc (" None.\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_LEGE] >= 1)
stc (" Faesight", ch);
if (ch->pcdata->powers[FAE_LEGE] >= 2)
stc (" Ensnare", ch);
if (ch->pcdata->powers[FAE_LEGE] >= 3)
stc (" Effigy", ch);
if (ch->pcdata->powers[FAE_LEGE] >= 4)
stc (" Gimmix", ch);
if (ch->pcdata->powers[FAE_LEGE] >= 5)
stc (" Phantom", ch);
stc ("\n\r", ch);
return;
}
void primal_art (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
stc (" Primal: ", ch);
if (ch->pcdata->powers[FAE_PRIM] == 0)
{
stc (" None.\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_PRIM] >= 1)
stc (" Willow", ch);
if (ch->pcdata->powers[FAE_PRIM] >= 2)
stc (" Heather", ch);
if (ch->pcdata->powers[FAE_PRIM] >= 3)
stc (" Oakenshield", ch);
if (ch->pcdata->powers[FAE_PRIM] >= 4)
stc (" Holly", ch);
if (ch->pcdata->powers[FAE_PRIM] >= 5)
stc (" Elderform", ch);
stc ("\n\r", ch);
return;
}
void soothsay_art (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
stc (" Soothsay: ", ch);
if (ch->pcdata->powers[FAE_SOOT] == 0)
{
stc (" None.\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOOT] >= 1)
stc (" Viewaura", ch);
if (ch->pcdata->powers[FAE_SOOT] >= 2)
stc (" Boil", ch);
if (ch->pcdata->powers[FAE_SOOT] >= 3)
stc (" Tattletale", ch);
if (ch->pcdata->powers[FAE_SOOT] >= 4)
stc (" Augury", ch);
if (ch->pcdata->powers[FAE_SOOT] >= 5)
stc (" Fate", ch);
stc ("\n\r", ch);
return;
}
void sovereign_art (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
stc (" Sovereign: ", ch);
if (ch->pcdata->powers[FAE_SOVE] == 0)
{
stc (" None.\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOVE] >= 1)
stc (" Protocol", ch);
if (ch->pcdata->powers[FAE_SOVE] >= 2)
stc (" Dictum", ch);
if (ch->pcdata->powers[FAE_SOVE] >= 3)
stc (" Grandeur", ch);
if (ch->pcdata->powers[FAE_SOVE] >= 4)
stc (" Weaver", ch);
if (ch->pcdata->powers[FAE_SOVE] >= 5)
stc (" Geasa", ch);
stc ("\n\r", ch);
return;
}
void wayfare_art (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
stc (" Wayfare: ", ch);
if (ch->pcdata->powers[FAE_WAYF] == 0)
{
stc (" None.\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_WAYF] >= 1)
stc (" Quicksilver", ch);
if (ch->pcdata->powers[FAE_WAYF] >= 2)
stc (" Hopscotch", ch);
if (ch->pcdata->powers[FAE_WAYF] >= 3)
stc (" Passage", ch);
if (ch->pcdata->powers[FAE_WAYF] >= 4)
stc (" Wind", ch);
if (ch->pcdata->powers[FAE_WAYF] >= 5)
stc (" Flicker", ch);
stc ("\n\r", ch);
return;
}
void kithpowers (CHAR_DATA * ch)
{
if (IS_KITH (ch, KITH_SIDHE))
stc (" Sidhe: FaeAwe FaeSteed\n\r", ch);
if (IS_KITH (ch, KITH_TROLL))
stc (" Troll: Cleave FaeHorns\n\r", ch);
if (IS_KITH (ch, KITH_REDCAP))
stc (" Redcap: Teeth TeethClench RedClaws\n\r", ch);
if (IS_KITH (ch, KITH_SATYR))
stc (" Satyr: FaeHorns FaeHooves\n\r", ch);
if (IS_KITH (ch, KITH_POOKA))
stc (" Pooka: ShapeShift FaeCharm\n\r", ch);
if (IS_KITH (ch, KITH_SLUAGH))
stc (" Sluagh: Squirm ShadowShade Entrap\n\r", ch);
if (IS_KITH (ch, KITH_BOGGAN))
stc (" Boggan: CraftArmour\n\r", ch);
if (IS_KITH (ch, KITH_NOCKER))
stc (" Nocker: PoisonWeapon FreezeWeapon FlameWeapon CraftWeapon\n\r", ch);
if (IS_KITH (ch, KITH_ESHU))
stc (" Eshu: Cover Sap Silentwalk\n\r", ch);
stc (" Other: ShowCourt FaeEnchant DreamEyes FreeHold DreamTalk\n\r" " (NOTE: Type the name of your Kith to transform into your Seeming)\n\r", ch);
}
void do_dreamtalk (CHAR_DATA * ch, char *argument)
{
char buf[MSL];
CHAR_DATA *vch;
if (!IS_CLASS (ch, CLASS_FAE) && !IS_IMMORTAL (ch))
{
do_huh (ch, "");
return;
}
if (argument[0] == '\0')
{
stc ("Dreamtalk What?\n\r", ch);
return;
}
if (IS_SET (ch->extra2, DEAF_DREAMT))
REMOVE_BIT (ch->extra2, DEAF_DREAMT);
if (!IS_NPC (ch) && IS_SET (ch->act, PLR_SILENCE))
{
sprintf (buf, "You can't dreamtalk because you are silenced.\n\r");
send_to_char (buf, ch);
return;
}
if (is_advertisement(argument))
adv_alert(ch, "dreamtalk", argument);
for (vch = char_list; vch; vch = vch->next)
{
if (IS_NPC (vch) || !vch->desc
|| (!IS_IMMORTAL (vch) && !IS_CLASS (vch, CLASS_FAE)))
continue;
if (IS_SET (vch->extra2, DEAF_DREAMT))
continue;
sprintf (buf, "#B[#b<#cDREAMTALK#b>#B]#w %s: #c%s#n\n\r", PERS2 (ch, vch),
bash_color (argument));
stc (buf, vch);
}
}
void do_faepowers (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (IS_CLASS (ch, CLASS_FAE))
{
stc ("#B[<============================================================================>]#n\n\r", ch);
cent_to_char ("#w-[ Changeling Powers ]-#n", ch);
stc ("#B[<============================================================================>]#n\n\r", ch);
chicanery_art (ch);
legerdemain_art (ch);
primal_art (ch);
soothsay_art (ch);
sovereign_art (ch);
wayfare_art (ch);
kithpowers (ch);
stc ("#B[<============================================================================>]#n\n\r", ch);
stc ("\n\rUse the Arts command to learn new powers.\n\r", ch);
stc ("#B[<============================================================================>]#n\n\r", ch);
return;
}
else
return;
return;
}
void do_grandeur (CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MSL];
smash_tilde (argument);
argument = one_argument (argument, arg1);
strcpy (arg2, argument);
if (IS_NPC (ch))
return;
if (ch->fight_timer > 0)
{
send_to_char ("Not until your fight timer expires.\n\r", ch);
return;
}
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOVE] < 3)
{
send_to_char
("You must obtain at least level 3 in Sovereign to use Grandeur.\n\r",
ch);
return;
}
if (has_timer (ch))
return;
if (IS_AFFECTED (ch, AFF_STEELSHIELD))
{
REMOVE_BIT (ch->affected_by, AFF_STEELSHIELD);
act ("You lower your Grandeur.", ch, NULL, NULL, TO_CHAR);
act ("$n looks less impressive.", ch, NULL, NULL, TO_NOTVICT);
return;
}
if (ch->pcdata->majesty > 0)
{
if (ch->pcdata->majesty > 1)
sprintf (buf,
"You cannot raise your Grandeur for another %d seconds.\n\r",
ch->pcdata->majesty);
else
sprintf (buf,
"You cannot raise your Grandeur for another 1 second.\n\r");
send_to_char (buf, ch);
return;
}
SET_BIT (ch->affected_by, AFF_STEELSHIELD);
act ("You raise your Grandeur.", ch, NULL, NULL, TO_CHAR);
act ("$n suddenly looks very impressive.", ch, NULL, NULL, TO_NOTVICT);
ch->pcdata->majesty = 60;
return;
}
void do_faeawe (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_SIDHE)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sidhe kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_SIDHE)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sidhe kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (IS_EXTRA (ch, EXTRA_AWE))
{
REMOVE_BIT (ch->extra, EXTRA_AWE);
send_to_char ("You are no longer Awe Inspiring.\n\r", ch);
act ("$n is no longer awe inspiring.", ch, NULL, NULL, TO_ROOM);
return;
}
SET_BIT (ch->extra, EXTRA_AWE);
send_to_char ("You are now Awe Inspiring.\n\r", ch);
act ("$n is now awe inspiring", ch, NULL, NULL, TO_ROOM);
return;
}
void do_dictum (CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
char buffy[MAX_STRING_LENGTH];
CHAR_DATA *victim;
int awe;
argument = one_argument (argument, arg1);
argument = one_argument (argument, arg2);
if (IS_NPC (ch))
return;
/* if (!IS_SET(ch->special, SPC_FAE) ) */
/* Jalthier's Test Code */
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOVE] < 2)
{
send_to_char
("You must obtain at least level 1 in Sovereign to use Dictum.\n\r",
ch);
return;
}
if (arg1[0] == '\0' || arg2[0] == '\0')
{
send_to_char ("Command whom to do what?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg1)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (victim == ch)
{
send_to_char ("How can you command yourself??\n\r", ch);
return;
}
if (!IS_NPC (victim) && victim->level != 3)
{
send_to_char ("You can only command other avatars.\n\r", ch);
return;
}
if (IS_CLASS (ch, CLASS_FAE))
{
if (ch->pcdata->powers[FAE_SOVE] > 3)
awe = 75;
else if (ch->pcdata->powers[FAE_SOVE] > 4)
awe = 100;
else
awe = 25;
}
else
awe = ch->spheres[MMIN] * 20;
if (IS_EXTRA (ch, EXTRA_AWE))
{
awe += 75;
}
if (!IS_NPC (victim) && (!IS_HERO (ch) || IS_IMMORTAL (ch)))
{
send_to_char ("You can only command other avatars.\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOVE] > 2)
{
sprintf (buffy, "%s %s", arg2, argument);
if (IS_NPC (victim))
sprintf (buf, "I think %s wants to %s", victim->short_descr, buffy);
else if (!IS_NPC (victim) && IS_AFFECTED (victim, AFF_POLYMORPH))
sprintf (buf, "I think %s wants to %s", victim->morph, buffy);
else
sprintf (buf, "I think %s wants to %s", victim->name, buffy);
do_say (ch, buf);
}
else
{
if (IS_NPC (victim))
sprintf (buf, "I think %s wants to %s", victim->short_descr, arg2);
else if (!IS_NPC (victim) && IS_AFFECTED (victim, AFF_POLYMORPH))
sprintf (buf, "I think %s wants to %s", victim->morph, arg2);
else
sprintf (buf, "I think %s wants to %s", victim->name, arg2);
do_say (ch, buf);
}
if (IS_NPC (victim) && victim->level >= awe)
{
act ("You shake off $N's suggestion.", victim, NULL, ch, TO_CHAR);
act ("$n shakes off $N's suggestion.", victim, NULL, ch, TO_NOTVICT);
act ("$n shakes off your suggestion.", victim, NULL, ch, TO_VICT);
act ("$s mind is too strong to overcome.", victim, NULL, ch, TO_VICT);
return;
}
else if (victim->spl[BLUE_MAGIC] >= (ch->spl[RED_MAGIC] / 2))
{
act ("You shake off $N's suggestion.", victim, NULL, ch, TO_CHAR);
act ("$n shakes off $N's suggestion.", victim, NULL, ch, TO_NOTVICT);
act ("$n shakes off your suggestion.", victim, NULL, ch, TO_VICT);
act ("$s mind is too strong to overcome.", victim, NULL, ch, TO_VICT);
return;
}
if (!str_cmp ("give", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("dro", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("drop", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("gif", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("giv", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("gi", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("gift", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("c", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("ca", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("cas", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("cast", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("k", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("ki", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("kil", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_cmp ("kill", arg2))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
if (!str_prefix (arg2, "drop") || !str_prefix (arg2, "sacrifice")
|| !str_prefix (arg2, "cast") || !str_prefix (arg2, "unclaim"))
{
send_to_char (" You Failed.\n\r", ch);
return;
}
act ("You blink in confusion.", victim, NULL, NULL, TO_CHAR);
act ("$n blinks in confusion.", victim, NULL, NULL, TO_ROOM);
strcpy (buf, "Yes, you're right, I do...");
do_say (victim, buf);
if (!IS_NPC(victim)) victim->pcdata->evilchat = ch;
if (ch->pcdata->powers[FAE_SOVE] > 2)
interpret (victim, buffy);
else
interpret (victim, arg2);
WAIT_STATE (ch, 24);
return;
}
void do_captive (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
CHAR_DATA *familiar;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_CHIC] < 5)
{
send_to_char
("You must obtain at least level 5 in Chicanery to use Captive Heart.\n\r",
ch);
return;
}
if ((familiar = ch->pcdata->familiar) != NULL)
{
sprintf (buf, "You break your hold over %s.\n\r",
familiar->short_descr);
send_to_char (buf, ch);
familiar->wizard = NULL;
ch->pcdata->familiar = NULL;
return;
}
if (arg[0] == '\0')
{
send_to_char ("What do you wish to Possess?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("What an intelligent idea!\n\r", ch);
return;
}
if (victim->level > 150)
{
stc ("They are too powerful to control\n\r", ch);
return;
}
if (!IS_NPC (victim))
{
send_to_char ("Not on players.\n\r", ch);
return;
}
if (victim->wizard != NULL)
{
send_to_char ("You are unable to possess them.\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_FAE))
ch->pcdata->familiar = victim;
victim->wizard = ch;
act ("You concentrate on $N.", ch, NULL, victim, TO_CHAR);
act ("$n is staring at you!", ch, NULL, victim, TO_VICT);
act ("$n starts staring at $N", ch, NULL, victim, TO_NOTVICT);
return;
}
void do_faesight (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_LEGE] < 1)
{
send_to_char
("You must obtain at least level 1 in Legerdemain to use Faesight.\n\r",
ch);
return;
}
if (IS_SET (ch->act, PLR_HOLYLIGHT))
{
REMOVE_BIT (ch->act, PLR_HOLYLIGHT);
send_to_char ("Your senses return to normal.\n\r", ch);
}
else
{
SET_BIT (ch->act, PLR_HOLYLIGHT);
send_to_char ("Your senses increase to incredible proportions.\n\r",
ch);
}
return;
}
void do_ensnare (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_INPUT_LENGTH];
int sn;
int level;
int spelltype;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_LEGE] < 2)
{
send_to_char ("You need level 2 Legerdemain to use Ensnare.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Who do you wish to use Ensnare on?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (is_safe (ch, victim) == TRUE)
return;
if ((sn = skill_lookup ("infirmity")) < 0)
{
sprintf (buf, "Yep, sn is bieng set to %d.", sn);
send_to_char (buf, ch);
return;
}
spelltype = skill_table[sn].target;
level = ch->pcdata->powers[FAE_LEGE];
(*skill_table[sn].spell_fun) (sn, level, ch, victim);
WAIT_STATE (ch, 12);
return;
}
void do_passage (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
OBJ_DATA *obj;
char arg[MAX_INPUT_LENGTH];
one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_WAYF] < 3)
{
send_to_char ("You require level 3 Wayfare to use portal Passage.\n\r",
ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Who do you wish to create a passage to?\n\r", ch);
return;
}
if ((victim = get_char_world (ch, arg)) == NULL)
{
send_to_char ("They arent here.\n\r", ch);
return;
}
if ((victim == ch)
|| victim->in_room == NULL
|| IS_NPC (victim)
|| (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON))
|| IS_SET (ch->in_room->room_flags, ROOM_PRIVATE)
|| IS_SET (ch->in_room->room_flags, ROOM_SOLITARY)
|| IS_SET (ch->in_room->room_flags, ROOM_NO_RECALL)
|| IS_SET (victim->in_room->room_flags, ROOM_PRIVATE)
|| IS_SET (victim->in_room->room_flags, ROOM_SOLITARY)
|| IS_SET (victim->in_room->room_flags, ROOM_NO_RECALL)
|| victim->in_room->vnum == ch->in_room->vnum)
{
send_to_char ("You failed.\n\r", ch);
return;
}
if (IS_NPC (victim) && IS_SET (victim->in_room->area->aflags, AFLAG_HQ))
{
stc ("You failed.\n\r", ch);
return;
}
obj = create_object (get_obj_index (OBJ_VNUM_PORTAL), 0);
obj->value[0] = victim->in_room->vnum;
obj->value[3] = ch->in_room->vnum;
obj->timer = 15;
if (IS_AFFECTED (ch, AFF_SHADOWPLANE))
obj->extra_flags = ITEM_SHADOWPLANE;
obj_to_room (obj, ch->in_room);
FILL_STRING (obj->short_descr, "A swirling mass of Glamour");
FILL_STRING (obj->name, "rift gate glamour portal");
FILL_STRING (obj->description,
"A Swirling mass of #cGlamour#n floats here.\n\r");
obj = create_object (get_obj_index (OBJ_VNUM_PORTAL), 0);
obj->value[0] = ch->in_room->vnum;
obj->value[3] = victim->in_room->vnum;
obj->timer = 15;
if (IS_AFFECTED (victim, AFF_SHADOWPLANE))
obj->extra_flags = ITEM_SHADOWPLANE;
obj_to_room (obj, victim->in_room);
FILL_STRING (obj->short_descr, "A swirling mass of Glamour");
FILL_STRING (obj->name, "rift gate glamour portal");
FILL_STRING (obj->description,
"A Swirling mass of #cGlamour#n floats here.\n\r");
act ("A look of concentration passes over $n's face.", ch, NULL, NULL,
TO_ROOM);
send_to_char ("A look of concentration passes over your face.\n\r", ch);
act ("$p appears in front of $n in an explosion of magick.", ch, obj, NULL,
TO_ROOM);
act ("$p appears in front of you in an explosion of magick.", ch, obj,
NULL, TO_CHAR);
act ("$p appears in front of $n in an explosion of magick.", victim, obj,
NULL, TO_ROOM);
act ("$p appears in front of you in an explosion of magick", ch, obj,
victim, TO_VICT);
return;
}
void do_flicker (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
if (IS_NPC (ch))
return;
argument = one_argument (argument, arg);
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_WAYF] < 5)
{
send_to_char
("You must obtain at least level 5 in Wayfare to use Flicker Flash.\n\r",
ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Flicker to who?\n\r", ch);
return;
}
if ((victim = get_char_world (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (ch->fight_timer > 0)
{
stc ("Wait for your fight timer to clear first\n\r", ch);
return;
}
if IS_SET
(victim->in_room->room_flags, ROOM_CCHAMBER)
{
stc ("You failed.\n\r", ch);
return;
}
if (IS_NPC (victim) && IS_SET (victim->in_room->area->aflags, AFLAG_HQ))
{
stc ("You failed.\n\r", ch);
return;
}
if (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON))
{
send_to_char ("He doesnt want you near him!\n\r", ch);
return;
}
if (IS_NPC (victim) && victim->level > 150)
{
stc ("You failed\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("But you're already at yourself!\n\r", ch);
return;
}
if (victim->in_room == ch->in_room)
{
send_to_char ("But you're already there!\n\r", ch);
return;
}
char_from_room (ch);
char_to_room (ch, victim->in_room);
act ("You blink out of existance and appear before $N.", ch, NULL, victim,
TO_CHAR);
act ("$n appears in a flash of light before $N.", ch, NULL, victim,
TO_NOTVICT);
act ("$n appears in a flash of light in front of you.", ch, NULL, victim,
TO_VICT);
do_look (ch, "auto");
return;
}
void do_hopscotch (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (IS_CLASS (ch, CLASS_FAE))
{
if (ch->pcdata->powers[FAE_WAYF] < 2)
{
send_to_char
("You must obtain at least level 2 in Wayfare to use Hopscotch.\n\r",
ch);
return;
}
}
else
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->fight_timer > 0)
{
stc ("Wait for your fight timer to clear first\n\r", ch);
return;
}
if ((victim = get_char_world (ch, arg)) == NULL)
{
send_to_char ("Nobody by that name.\n\r", ch);
return;
}
if (IS_NPC (victim))
{
send_to_char ("Not on NPC's.\n\r", ch);
return;
}
if (!IS_IMMUNE (victim, IMM_SUMMON))
{
send_to_char ("I don't think they want you to do that.\n\r", ch);
return;
}
if (IS_SET (victim->in_room->room_flags, ROOM_CCHAMBER))
{
stc ("You failed\n\r", ch);
return;
}
if (IS_NPC (victim) && IS_SET (victim->in_room->area->aflags, AFLAG_HQ))
{
stc ("You failed.\n\r", ch);
return;
}
if (victim == ch)
{
send_to_char ("Nothing happens.\n\r", ch);
return;
}
/*
if ( victim->level != LEVEL_AVATAR ||
(!IS_SET(ch->special, SPC_FAE) ))
{
send_to_char( "Nothing happens.\n\r", ch );
return;
}
*/
if (victim->in_room == NULL)
{
send_to_char ("Nothing happens.\n\r", ch);
return;
}
send_to_char ("You leap into the sky.\n\r", ch);
act ("$n leaps high into the sky.", ch, NULL, NULL, TO_ROOM);
char_from_room (ch);
char_to_room (ch, victim->in_room);
do_look (ch, "");
send_to_char ("You come flying in from the sky and land gracefully.\n\r",
ch);
act ("$n comes flying in from the sky and lands gracefully.", ch, NULL,
NULL, TO_ROOM);
return;
}
void do_wind (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_WAYF] < 4)
{
send_to_char
("You must obtain at least level 4 in Wayfare to use Wind Runner.\n\r",
ch);
return;
}
if (arg[0] != '\0')
{
if (!IS_DEMAFF (ch, DEM_WINGS))
{
send_to_char ("First you better get your wings out!\n\r", ch);
return;
}
if (!str_cmp (arg, "unfold") || !str_cmp (arg, "u"))
{
if (IS_DEMAFF (ch, DEM_UNFOLDED))
{
send_to_char ("But your wings are already unfolded!\n\r", ch);
return;
}
send_to_char ("Your wings unfold from behind your back.\n\r", ch);
act ("$n's wings unfold from behind $s back.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_UNFOLDED);
return;
}
else if (!str_cmp (arg, "fold") || !str_cmp (arg, "f"))
{
if (!IS_DEMAFF (ch, DEM_UNFOLDED))
{
send_to_char ("But your wings are already folded!\n\r", ch);
return;
}
send_to_char ("Your wings fold up behind your back.\n\r", ch);
act ("$n's wings fold up behind $s back.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_UNFOLDED);
return;
}
else
{
send_to_char ("Do you want to FOLD or UNFOLD your wings?\n\r", ch);
return;
}
}
if (IS_DEMAFF (ch, DEM_WINGS))
{
send_to_char ("Your wings slide into your back.\n\r", ch);
act ("$n's wings slide into $s back.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_WINGS);
return;
}
send_to_char ("Your wings extend from your back.\n\r", ch);
act ("A pair of wings extend from $n's back.", ch, NULL, NULL, TO_ROOM);
SET_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_WINGS);
return;
}
void do_augury (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOOT] < 4)
{
stc ("You must obtain level 4 Soothsay to use Augury.\n\r", ch);
return;
}
if (!IS_SET (ch->flag2, AFF2_SPIRITGUARD))
{
stc ("You awaken your spirit guardian.\n\r", ch);
SET_BIT (ch->flag2, AFF2_SPIRITGUARD);
return;
}
else
{
stc ("You dismiss your spirit guardian.\n\r", ch);
REMOVE_BIT (ch->flag2, AFF2_SPIRITGUARD);
return;
}
return;
}
void do_boil (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOOT] < 2)
{
send_to_char
("You must obtain at level 2 in Soothsay to use Boil and Bubble.\n\r",
ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Who do you wish to use Boil on?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (IS_NPC (victim))
{
send_to_char ("Why use Boil on a mob?\n\r", ch);
return;
}
if (IS_IMMORTAL (victim) && victim != ch)
{
send_to_char ("You can only use Boil on Avatar's or lower.\n\r", ch);
return;
}
if (is_safe (ch, victim) == TRUE)
return;
if (victim->hit < victim->max_hit)
{
send_to_char ("They are hurt and suspicious.\n\r", ch);
return;
}
act ("You close your eyes and concentrate on $N.", ch, NULL, victim,
TO_CHAR);
act ("$n closes $s eyes and concentrates on you.", ch, NULL, victim,
TO_VICT);
act ("$n closes $s eyes and cencentrates on $N.", ch, NULL, victim,
TO_NOTVICT);
WAIT_STATE (ch, 12);
if (number_percent () < 50)
{
send_to_char ("You failed.\n\r", ch);
return;
}
act ("Your flesh begins to rot!", victim, NULL, NULL, TO_CHAR);
act ("$n's flesh begins to rot!", victim, NULL, NULL, TO_ROOM);
SET_BIT (victim->flag2, AFF2_ROT);
return;
}
/* To increase powers */
void do_arts (CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg1);
argument = one_argument (argument, arg2);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (arg1[0] == '\0' && arg2[0] == '\0')
{
do_stat (ch, "");
return;
}
if (arg2[0] == '\0')
{
if (!str_cmp (arg1, "chicanery"))
{
send_to_char ("Chicanery: The art of trickery and deceit.\n\r", ch);
if (ch->pcdata->powers[FAE_CHIC] < 1)
send_to_char ("You have none of the Chicanery Arts.\n\r", ch);
if (ch->pcdata->powers[FAE_CHIC] > 0)
send_to_char
("Captive: You can can take control of others with your mind.\n\r",
ch);
return;
}
else if (!str_cmp (arg1, "legerdemain"))
{
send_to_char
("Legerdemain: The art of illusions and slight of hand.\n\r", ch);
return;
}
else if (!str_cmp (arg1, "primal"))
{
send_to_char ("Primal: The art of power through nature commune.\n\r",
ch);
return;
}
else if (!str_cmp (arg1, "soothsay"))
{
send_to_char ("Soothsay: The art of understanding.\n\r", ch);
return;
}
else if (!str_cmp (arg1, "sovereign"))
{
send_to_char ("Sovereign: The art of order and control.\n\r", ch);
return;
}
else if (!str_cmp (arg1, "wayfare"))
{
send_to_char ("Wayfare: The art of traveling and moving.\n\r", ch);
return;
}
do_stat (ch, "");
return;
}
if (!str_cmp (arg2, "improve"))
{
int improve;
int cost;
int max;
int maxlevel = 5;
/*
stc("Please use the new commands, Disciplines and
research.\n\r",ch);
return;
*/
/*
if (ch->[UNI_GEN] == 13)
maxlevel=5;
else if (ch->[UNI_GEN] == 12)
maxlevel=5;
else if (ch->[UNI_GEN] == 11)
maxlevel=5;
else if (ch->[UNI_GEN] == 10)
maxlevel=5;
else if (ch->[UNI_GEN] == 9)
maxlevel=5;
else if (ch->[UNI_GEN] == 8)
maxlevel=5;
else if (ch->[UNI_GEN] == 7)
maxlevel=5;
else if (ch->[UNI_GEN] == 6)
maxlevel=5;
else if (ch->[UNI_GEN] == 5)
maxlevel=5;
else if (ch->[UNI_GEN] == 4)
maxlevel=5;
else
maxlevel=5;
*/
if (!str_cmp (arg1, "chicanery"))
{
improve = FAE_CHIC;
max = maxlevel;
}
else if (!str_cmp (arg1, "legerdemain"))
{
improve = FAE_LEGE;
max = maxlevel;
}
else if (!str_cmp (arg1, "primal"))
{
improve = FAE_PRIM;
max = maxlevel;
}
else if (!str_cmp (arg1, "soothsay"))
{
improve = FAE_SOOT;
max = maxlevel;
}
else if (!str_cmp (arg1, "sovereign"))
{
improve = FAE_SOVE;
max = maxlevel;
}
else if (!str_cmp (arg1, "wayfare"))
{
improve = FAE_WAYF;
max = maxlevel;
}
else
{
send_to_char
("You can improve: Chicanery, Legerdemain, Primal, Soothsay, Sovereign or Wayfare.\n\r",
ch);
return;
}
cost = (ch->pcdata->powers[improve] + 1) * 10;
arg1[0] = UPPER (arg1[0]);
if (ch->pcdata->powers[improve] >= max
&& ch->pcdata->rank == AGE_METHUSELAH)
{
sprintf (buf,
"You have already gained all the powers of the %s art.\n\r",
arg1);
send_to_char (buf, ch);
return;
}
if (ch->pcdata->powers[improve] >= max)
{
sprintf (buf, "You have already maxed %s.\n\r", arg1);
send_to_char (buf, ch);
return;
}
if (cost > ch->practice)
{
sprintf (buf, "It costs you %d primal to improve your %sart.\n\r",
cost, arg1);
send_to_char (buf, ch);
return;
}
ch->pcdata->powers[improve] += 1;
ch->practice -= cost;
sprintf (buf, "You improve your ability in the %s art.\n\r", arg1);
send_to_char (buf, ch);
}
else
send_to_char ("To improve a art, type: arts <art type> improve.\n\r",
ch);
return;
}
void do_faeenchant (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Enchant whom?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (IS_NPC (victim))
{
send_to_char ("Not on NPC's.\n\r", ch);
return;
}
if (IS_IMMORTAL (victim))
{
send_to_char ("Not on Immortals's.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("You cannot enchant yourself.\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_FAE))
{
send_to_char ("They are already a Changeling.\n\r", ch);
return;
}
if (victim->level != LEVEL_AVATAR && !IS_IMMORTAL (victim))
{
send_to_char ("You can only enchant avatars.\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_VAMPIRE)
|| IS_SET (victim->pcdata->stats[UNI_AFF], VAM_MORTAL))
{
send_to_char ("You are unable to enchant vampires!\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_MONK))
{
send_to_char ("You are unable to enchant monks.\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_MAGE))
{
send_to_char ("You are unable to enchant mages.\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_NINJA))
{
send_to_char ("You are unable to enchant ninjas\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_DROW))
{
send_to_char ("Not on a drow!\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_WEREWOLF))
{
send_to_char ("You are unable to enchant werewolves!\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_DEMON)
|| IS_SET (victim->special, SPC_CHAMPION))
{
send_to_char ("You are unable to enchant demons!\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_HIGHLANDER))
{
send_to_char ("You are unable to enchant highlanders.\n\r", ch);
return;
}
if (!IS_IMMUNE (victim, IMM_VAMPIRE))
{
send_to_char ("You cannot enchant an unwilling person.\n\r", ch);
return;
}
if (victim->exp < 100000)
{
send_to_char
("They cannot afford the 100000 exp required to be enchanted by you.\n\r",
ch);
return;
}
victim->exp -= 100000;
act ("You enchant $N bringing them into the Changeling world.", ch, NULL,
victim, TO_CHAR);
act ("$n enchants $N bringing them into the Changeling world.", ch, NULL,
victim, TO_NOTVICT);
act ("$n enchants you bringing you into the Changeling world.", ch, NULL,
victim, TO_VICT);
send_to_char
("You are now a Changeling, use 'choose' to pick your kith.\n\r",
victim);
free_string (victim->lord);
victim->lord = str_dup (ch->name);
victim->class = CLASS_CHOOSE;
save_char_obj (ch);
save_char_obj (victim);
return;
}
void do_choose (CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
char lord[MIL];
argument = one_argument (argument, arg1);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_CHOOSE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
else if (IS_CLASS (ch, CLASS_CHOOSE) && (!str_cmp (arg1, "sidhe")))
{
ch->class = CLASS_FAE;
if (!IS_IMMORTAL (ch));
ch->level = 3;
ch->kith = KITH_SIDHE;
send_to_char ("You are now a Sidhe!\n\r", ch);
}
else if (!str_cmp (arg1, "boggan"))
{
ch->class = CLASS_FAE;
if (!IS_IMMORTAL (ch));
ch->level = 3;
ch->kith = KITH_BOGGAN;
send_to_char ("You are now a Boggan!\n\r", ch);
}
else if (!str_cmp (arg1, "eshu"))
{
ch->class = CLASS_FAE;
if (!IS_IMMORTAL (ch));
ch->level = 3;
ch->kith = KITH_ESHU;
send_to_char ("You are now an Eshu!\n\r", ch);
}
else if (!str_cmp (arg1, "nocker"))
{
ch->class = CLASS_FAE;
if (!IS_IMMORTAL (ch));
ch->level = 3;
ch->kith = KITH_NOCKER;
send_to_char ("You are now a Nocker!\n\r", ch);
}
else if (!str_cmp (arg1, "redcap"))
{
ch->class = CLASS_FAE;
if (!IS_IMMORTAL (ch));
ch->level = 3;
ch->kith = KITH_REDCAP;
ch->lord = str_dup (ch->name);
send_to_char ("You are now a Redcap!\n\r", ch);
}
else if (!str_cmp (arg1, "satyr"))
{
ch->class = CLASS_FAE;
if (!IS_IMMORTAL (ch));
ch->level = 3;
ch->kith = KITH_SATYR;
send_to_char ("You are now a Satyr!\n\r", ch);
}
else if (!str_cmp (arg1, "sluagh"))
{
ch->class = CLASS_FAE;
ch->level = 3;
ch->kith = KITH_SLUAGH;
send_to_char ("You are now a Sluagh!\n\r", ch);
}
else if (!str_cmp (arg1, "troll"))
{
ch->class = CLASS_FAE;
if (!IS_IMMORTAL (ch));
ch->level = 3;
ch->kith = KITH_TROLL;
send_to_char ("You are now a Troll!\n\r", ch);
}
else if (!str_cmp (arg1, "pooka"))
{
ch->class = CLASS_FAE;
if (!IS_IMMORTAL (ch));
ch->level = 3;
ch->kith = KITH_POOKA;
send_to_char ("You are now a Pooka!\n\r", ch);
}
else
{
ch->lord = str_dup (lord);
send_to_char
("Please pick one of the following: Boggan, Eshu, Nocker, Redcap, Satyr, Sidhe, Sluagh, Troll, Pooka.\n\r",
ch);
return;
}
}
/* More General Fae Powers */
void do_weaver (CHAR_DATA * ch, char *argument)
{
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOVE] < 4)
{
send_to_char ("You need Sovereign 4 to make a weaver ward.\n\r", ch);
return;
}
if (IS_SET (ch->garou1, WW_GRANITE))
{
stc ("Your wall of protection fades away.\n\r", ch);
REMOVE_BIT (ch->garou1, WW_GRANITE);
}
else
{
stc ("A wall of power arises around your body to protect you.\n\r", ch);
SET_BIT (ch->garou1, WW_GRANITE);
return;
}
return;
}
/* Troll's cleave skill */
void do_cleave (CHAR_DATA * ch, char *argument)
{
char arg[MIL];
CHAR_DATA *vch;
OBJ_DATA *obj, *obj3;
if (IS_NPC (ch))
return;;
if (!IS_CLASS (ch, CLASS_FAE))
{
do_huh (ch, "");
return;
}
if ((!IS_SET (ch->kith, KITH_TROLL)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Troll kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_TROLL)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Troll kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
argument = one_argument (argument, arg);
if (arg[0] == '\0')
{
stc ("Whom do you wish to Cleave?\n\r", ch);
return;
}
if ((vch = get_char_room (ch, arg)) == NULL)
{
stc ("They aren't here.\n\r", ch);
return;
}
if (ch == vch)
{
stc ("Why!?\n\r", ch);
return;
}
if (is_safe (ch, vch))
return;
if (IS_NPC(vch) )
{
stc("Not on NPCS\n\r", ch);
return;
}
if ((obj = get_eq_char (ch, WEAR_WIELD)) == NULL || obj->item_type != ITEM_WEAPON || (obj->value[3] != 1 && obj->value[3] != 3))
{
if ((obj = get_eq_char (ch, WEAR_HOLD)) == NULL || obj->item_type != ITEM_WEAPON || (obj->value[3] != 1 && obj->value[3] != 3))
{
if ((obj = get_eq_char (ch, WEAR_DUAL)) == NULL || obj->item_type != ITEM_WEAPON || (obj->value[3] != 1 && obj->value[3] != 3))
{
send_to_char ("You need to wield a slashing or slicing weapon to dismember!\n\r", ch);
return;
}
}
}
if (IS_ARM_R (vch, LOST_ARM) && IS_ARM_L (vch, LOST_ARM))
{
stc ("They have already been dismembered!\n\r", ch);
return;
}
if (number_range (1, 100) < 15)
{
if (!IS_ARM_L (vch, LOST_ARM))
SET_BIT (vch->loc_hp[2], LOST_ARM);
if (!IS_BLEEDING (vch, BLEEDING_ARM_L))
SET_BIT (vch->loc_hp[6], BLEEDING_ARM_L);
if ((obj3 = get_eq_char (vch, WEAR_HOLD)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_DUAL)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_HANDS)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_WRIST_L)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_FINGER_L)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_ARMS)) != NULL)
take_item (vch, obj3);
make_part (vch, "arm");
make_part (vch, "arm");
if (!IS_ARM_R (vch, LOST_ARM))
SET_BIT (vch->loc_hp[3], LOST_ARM);
if (!IS_BLEEDING (vch, BLEEDING_ARM_R))
SET_BIT (vch->loc_hp[6], BLEEDING_ARM_R);
if ((obj3 = get_eq_char (vch, WEAR_WIELD)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_DUAL)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_HANDS)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_WRIST_R)) != NULL)
take_item (vch, obj3);
if ((obj3 = get_eq_char (vch, WEAR_FINGER_R)) != NULL)
take_item (vch, obj3);
act ("$n has dismembered $N with $p!", ch, obj, vch, TO_NOTVICT);
act ("You dismember $N with $p!", ch, obj, vch, TO_CHAR);
act ("$n has dismember you with $p!", ch, obj, vch, TO_VICT);
WAIT_STATE (ch, 12);
return;
}
stc ("You failed.\n\r", ch);
WAIT_STATE (ch, 8);
}
/* new fate fire */
void do_fate (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOOT] < 5)
{
send_to_char ("You need level 5 Soothsay to use Fate Fire.\n\r", ch);
return;
}
if (IS_SET (ch->newbits, NEW_MONKFLAME))
{
REMOVE_BIT (ch->newbits, NEW_MONKFLAME);
send_to_char ("Your hands are no longer engulfed by flames.\n\r", ch);
act ("$n's hands are no longer engulfed by flames.\n\r", ch, NULL, NULL,
TO_ROOM);
return;
}
if (!IS_SET (ch->newbits, NEW_MONKFLAME))
{
SET_BIT (ch->newbits, NEW_MONKFLAME);
send_to_char ("Your hands are engulfed by flames!\n\r", ch);
act ("$n's hands are engulfed by flames!\n\r", ch, NULL, NULL, TO_ROOM);
return;
}
}
void do_holly (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MIL];
int dam;
int i;
argument = one_argument (argument, arg);
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_PRIM] < 4)
{
send_to_char ("You need level 4 in Primal to use Holly Strike.\n\r",
ch);
return;
}
if (arg[0] == '\0')
{
stc ("Whom do you wish to use this on?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
stc ("They aren't here.\n\r", ch);
return;
}
if (is_safe (ch, victim))
return;
if (IS_SET (ch->affected_by, AFF_SHADOWPLANE) &&
!IS_SET (victim->affected_by, AFF_SHADOWPLANE))
{
stc ("You are too insubstantial!", ch);
return;
}
if (!IS_SET (ch->affected_by, AFF_SHADOWPLANE) &&
IS_SET (victim->affected_by, AFF_SHADOWPLANE))
{
stc ("They are too insubstantial!", ch);
return;
}
if (ch->mana < 3000)
{
stc ("You can't afford to summon the holly.\n\r", ch);
return;
}
act ("You summon the warriors plant to strike $N.", ch, NULL, victim,
TO_CHAR);
act ("$n points at you and razor sharp holly vines strike you.", ch, NULL,
victim, TO_VICT);
{
for (i = 0; i < number_range (1, 2); i++)
{
dam =
number_range ((ch->pcdata->powers[FAE_PRIM] * 750),
(ch->pcdata->powers[FAE_PRIM] * 775));
mage_damage (ch, victim, dam, "Holly Strike", MAGEDAM_EARTH);
}
ch->mana -= 3000; // Added by seren to make this a hella lot fairer.
}
WAIT_STATE (ch, 12);
return;
}
void do_fugue (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
one_argument (argument, arg);
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_CHIC] < 2)
{
stc ("You must obtain level 2 Chicanery to use Fugue.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Whose mind do you wish to read?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (victim == ch)
{
stc ("Why would you want to read your own mind?\n\r", ch);
return;
}
if (victim->level > ch->level)
{
stc ("Their mind is far too powerful for you to read.\n\r", ch);
return;
}
victim->unveil = ch;
act ("You concentrate deeply upon $N.\n\rYou have invaded $S mind.\n\r",
ch, NULL, victim, TO_CHAR);
return;
}
void do_effigy (CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj;
OBJ_DATA *obj2;
AFFECT_DATA *paf;
AFFECT_DATA *paf2;
argument = one_argument (argument, arg1);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_LEGE] < 3)
{
send_to_char ("You need Legerdemain 3 to use Effigy.\n\r", ch);
return;
}
if (arg1[0] == '\0')
{
send_to_char ("Make a clone of what object?\n\r", ch);
return;
}
if ((obj = get_obj_carry (ch, arg1)) == NULL)
{
send_to_char ("You dont have that item.\n\r", ch);
return;
}
if (obj->points > 0
|| IS_SET (obj->quest, QUEST_ARTIFACT)
|| IS_SET (obj->quest, QUEST_RELIC)
|| IS_SET (obj->quest, ITEM_EQUEST)
|| obj->item_ver > IV_NORMAL
|| (obj->chobj) != NULL
|| obj->item_type == ITEM_QUEST
|| obj->item_type == ITEM_PIECE
|| obj->item_type == ITEM_QUESTCARD
|| obj->item_type == ITEM_ETOKEN
|| obj->item_type == ITEM_AMMO
|| obj->item_type == ITEM_STOKEN
|| IS_SET (obj->spectype, SITEM_TRANSPORTER)
|| IS_SET (obj->spectype, SITEM_TELEPORTER))
{
send_to_char ("You cant clone that object.\n\r", ch);
return;
}
pObjIndex = get_obj_index (obj->pIndexData->vnum);
obj2 = create_object (pObjIndex, obj->level);
/* Copy any changed parts of the object. */
free_string (obj2->name);
obj2->name = str_dup (obj->name);
free_string (obj2->short_descr);
obj2->short_descr = str_dup (obj->short_descr);
free_string (obj2->description);
obj2->description = str_dup (obj->description);
if (obj->questmaker != NULL && strlen (obj->questmaker) > 1)
{
free_string (obj2->questmaker);
obj2->questmaker = str_dup (obj->questmaker);
}
if (obj->chpoweron != NULL)
{
free_string (obj2->chpoweron);
obj2->chpoweron = str_dup (obj->chpoweron);
}
if (obj->chpoweroff != NULL)
{
free_string (obj2->chpoweroff);
obj2->chpoweroff = str_dup (obj->chpoweroff);
}
if (obj->chpoweruse != NULL)
{
free_string (obj2->chpoweruse);
obj2->chpoweruse = str_dup (obj->chpoweruse);
}
if (obj->victpoweron != NULL)
{
free_string (obj2->victpoweron);
obj2->victpoweron = str_dup (obj->victpoweron);
}
if (obj->victpoweroff != NULL)
{
free_string (obj2->victpoweroff);
obj2->victpoweroff = str_dup (obj->victpoweroff);
}
if (obj->victpoweruse != NULL)
{
free_string (obj2->victpoweruse);
obj2->victpoweruse = str_dup (obj->victpoweruse);
}
obj2->item_type = obj->item_type;
obj2->extra_flags = obj->extra_flags;
obj2->wear_flags = obj->wear_flags;
obj2->weight = obj->weight;
obj2->spectype = obj->spectype;
obj2->specpower = obj->specpower;
obj2->condition = obj->condition;
obj2->toughness = obj->toughness;
obj2->resistance = obj->resistance;
obj2->quest = obj->quest;
obj2->points = obj->points;
obj2->cost = obj->cost;
obj2->value[0] = obj->value[0];
obj2->value[1] = obj->value[1];
obj2->value[2] = obj->value[2];
obj2->value[3] = obj->value[3];
/*****************************************/
obj_to_char (obj2, ch);
if (obj->affected != NULL)
{
for (paf = obj->affected; paf != NULL; paf = paf->next)
{
if (affect_free == NULL)
paf2 = alloc_perm (sizeof (*paf));
else
{
paf2 = affect_free;
affect_free = affect_free->next;
}
paf2->type = 0;
paf2->duration = paf->duration;
paf2->location = paf->location;
paf2->modifier = paf->modifier;
paf2->bitvector = 0;
paf2->next = obj2->affected;
obj2->affected = paf2;
}
}
obj2->timer = ch->pcdata->powers[FAE_LEGE] * 2;
SET_BIT (obj2->quest, QUEST_CLONED);
act ("A replica of $p appears in your hands in a flash of glamour.", ch,
obj, NULL, TO_CHAR);
act ("A replica of $p appears in $n's hands in a flash of glamour.", ch,
obj, NULL, TO_ROOM);
if (obj->questmaker != NULL)
free_string (obj->questmaker);
obj->questmaker = str_dup (ch->name);
WAIT_STATE (ch, 16);
return;
}
void do_fuddle (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char buf[MAX_INPUT_LENGTH];
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (is_inarena (ch))
{
stc ("Not while in the arena!\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_CHIC] < 1)
{
stc ("You must obtain level 1 Chicanery to use fuddle.\n\r", ch);
return;
}
if (ch->pcdata->followers > 4)
{
send_to_char ("Nothing happens.\n\r", ch);
return;
}
ch->pcdata->followers++;
victim = create_mobile (get_mob_index (30001));
victim->short_descr = str_dup (ch->name);
sprintf (buf, "%s is hovering here.\n\r", ch->name);
victim->long_descr = str_dup (buf);
victim->name = str_dup (ch->name);
victim->level = 200;
victim->max_hit = ch->max_hit;
victim->hit = victim->max_hit;
victim->max_mana = ch->max_mana;
victim->mana = victim->max_mana;
victim->max_move = ch->max_move;
victim->move = victim->max_move;
victim->hitroll = ch->hitroll;
victim->damroll = ch->damroll;
SET_BIT (victim->flag2, VAMP_CLONE);
SET_BIT (victim->act, ACT_NOEXP);
char_to_room (victim, ch->in_room);
act ("You twiddle your fingers and in a flash of pure glamour you split in two.", ch, NULL, victim, TO_CHAR);
act ("$n twiddles $s fingers and splits in two in a flash of glamour.", ch,
NULL, victim, TO_ROOM);
return;
}
void do_gimmix (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
CHAR_DATA *familiar;
char arg[MAX_INPUT_LENGTH];
one_argument (argument, arg);
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_LEGE] < 4)
{
stc ("You must obtain level 4 Legerdemain to use Gimmix.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Which illusion do you wish to control?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("Become your own familiar? thats kinda dumb.\n\r", ch);
return;
}
if (!IS_NPC (victim))
{
stc ("Not on players.\n\r", ch);
return;
}
if (!IS_SET (victim->flag2, VAMP_CLONE))
{
stc ("That is not a clone.\n\r", ch);
return;
}
if ((familiar = ch->pcdata->familiar) != NULL)
familiar->wizard = NULL;
ch->pcdata->familiar = victim;
victim->wizard = ch;
act ("You take control of $N's mind.", ch, NULL, victim, TO_CHAR);
act ("$n takes control of $N's mind.", ch, NULL, victim, TO_ROOM);
return;
}
/* Boggan Seeming - Fae battle forms and true visages */
void do_boggan (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_BOGGAN))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into a Boggan.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
sprintf (buf, "%s a short stocky boggan", ch->name);
free_string (ch->morph);
ch->morph = str_dup (buf);
return;
}
}
/* Eshu Seeming - Fae battle forms and true visages */
void do_eshu (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_ESHU))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into an Eshu.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
sprintf (buf, "%s a dark an alluring eshu", ch->name);
free_string (ch->morph);
ch->morph = str_dup (buf);
return;
}
}
/* Nocker Seeming - Fae battle forms and true visages */
void do_nocker (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_NOCKER))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into a Nocker.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
sprintf (buf, "%s a skinny red-faced nocker", ch->name);
free_string (ch->morph);
ch->morph = str_dup (buf);
return;
}
}
/* Pooka Seeming - Fae battle forms and true visages */
void do_pooka (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_POOKA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into a Pooka.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
sprintf (buf, "%s a cute pooka", ch->name);
free_string (ch->morph);
ch->morph = str_dup (buf);
return;
}
}
/* Redcap Seeming - Fae battle forms and true visages */
void do_redcap (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_REDCAP))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->pcdata->stats[UNI_AFF], VAM_FANGS);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into a Redcap.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
if (!str_cmp (ch->name, "Nephesch"))
sprintf (buf, "Nephesch the Redcap");
sprintf (buf, "%s a pale menacing redcap", ch->name);
free_string (ch->morph);
SET_BIT (ch->pcdata->stats[UNI_AFF], VAM_FANGS);
ch->morph = str_dup (buf);
return;
}
}
/* Satyr Seeming - Fae battle forms and true visages */
void do_satyr (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_SATYR))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
REMOVE_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HOOVES);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into a Satyr.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
sprintf (buf, "%s an attractive horned satyr", ch->name);
free_string (ch->morph);
ch->morph = str_dup (buf);
SET_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
SET_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HOOVES);
return;
}
}
/* Sidhe Seeming - Fae battle forms and true visages */
void do_sidhe (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_SIDHE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into a Sidhe.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
sprintf (buf, "%s a tall gorgeous sidhe", ch->name);
free_string (ch->morph);
ch->morph = str_dup (buf);
return;
}
}
void do_sluagh (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_SLUAGH))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into a Sluagh.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
sprintf (buf, "%s a dark and hideous sluagh", ch->name);
free_string (ch->morph);
ch->morph = str_dup (buf);
return;
}
}
/* Troll Seeming - Fae battle forms and true visages */
void do_troll (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (!IS_SET (ch->kith, KITH_TROLL))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
else if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
send_to_char ("You cant change your seeming when changed.\n\r", ch);
return;
}
if (!IS_SET (ch->special, SPC_SEEMING))
{
if (ch->stance[0] != -1)
do_stance (ch, "");
act ("You change into your Changeling Seeming.", ch, NULL, NULL,
TO_CHAR);
act ("$n's body twists and turns into a Troll.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->special, SPC_SEEMING);
sprintf (buf, "%s A massive horned troll", ch->name);
free_string (ch->morph);
SET_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
ch->morph = str_dup (buf);
return;
}
}
/* Redcaps Teeth */
void do_teeth (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE));
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_REDCAP)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Redcap kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_REDCAP)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Redcap kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (IS_VAMPAFF (ch, VAM_FANGS))
{
send_to_char ("Your teeth turn back to normal.\n\r", ch);
act ("$n's teeth turn back to normal.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->pcdata->stats[UNI_AFF], VAM_FANGS);
return;
}
send_to_char ("Your teeth grow to points and turn sickly yellow.\n\r", ch);
act ("$n's teeth grow to points and become sickly yellow.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->pcdata->stats[UNI_AFF], VAM_FANGS);
return;
}
void do_dreameyes (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_AFFECTED (ch, AFF_SHADOWSIGHT))
{
send_to_char ("You can no longer see into the Umbra.\n\r", ch);
REMOVE_BIT (ch->affected_by, AFF_SHADOWSIGHT);
return;
}
send_to_char ("You can now see into the Umbra.\n\r", ch);
SET_BIT (ch->affected_by, AFF_SHADOWSIGHT);
return;
}
void do_faehorns (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
/*
if (((!IS_SET (ch->kith, KITH_SATYR)) || (!IS_SET (ch->kith, KITH_TROLL))) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Satyr, Troll kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
*/
// if ((IS_CLASS (ch, CLASS_FAE)) && ((!IS_SET (ch->kith, KITH_SATYR)) || (!IS_SET (ch->kith, KITH_TROLL))) && ((ch->pcdata->stats[UNI_GEN] > 2)))
if (!IS_SET(ch->kith, KITH_SATYR) && !IS_SET(ch->kith, KITH_TROLL))
{
send_to_char ("Only the Satyr, Troll kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (IS_DEMAFF (ch, DEM_HORNS))
{
send_to_char ("Your horns slide back into your head.\n\r", ch);
act ("$n's horns slide back into $s head.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
return;
}
send_to_char ("Your horns extend out of your head.\n\r", ch);
act ("A pair of pointed horns extend from $n's head.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HORNS);
return;
}
void do_faehooves (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_SATYR)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Satyr kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_SATYR)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Satyr kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (IS_DEMAFF (ch, DEM_HOOVES))
{
send_to_char ("Your hooves transform into feet.\n\r", ch);
act ("$n's hooves transform back into $s feet.", ch, NULL, NULL,
TO_ROOM);
REMOVE_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HOOVES);
return;
}
send_to_char ("Your feet transform into hooves.\n\r", ch);
act ("$n's feet transform into hooves.", ch, NULL, NULL, TO_ROOM);
SET_BIT (ch->pcdata->powers[DPOWER_CURRENT], DEM_HOOVES);
return;
}
/* Pooka's shapeshift -BUGGED (fixed by Unique) */
void do_shapeshift (CHAR_DATA * ch, char *argument)
{
char arg[MIL];
char buf[MSL];
int choice = 0;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_POOKA)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Pooka kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_POOKA)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Pooka kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
divide_to_char (ch);
centre_text ("Forms", ch);
divide_to_char (ch);
stc (" [ 0 ] Human\n", ch);
stc (" [ 1 ] Bunny\n", ch);
stc (" [ 2 ] Fox\n", ch);
stc (" [ 3 ] Raven\n", ch);
stc (" [ 4 ] Cat\n", ch);
stc (" [ 5 ] Dog\n", ch);
stc (" [ 6 ] Ferret\n", ch);
stc (" [ 7 ] Mouse\n", ch);
stc (" [ 8 ] Yak\n", ch);
divide_to_char (ch);
return;
}
choice = is_number (arg) ? atoi (arg) : -1;
if (choice == 1)
{
sprintf (buf, "%s the cute little bunny", ch->name);
stc ("You transform into a bunny.\n\r", ch);
act ("$n transforms into a bunny.", ch, NULL, NULL, TO_ROOM);
}
else if (choice == 2)
{
sprintf (buf, "%s the brown fox", ch->name);
stc ("You transform into a fox.\n\r", ch);
act ("$n transforms into a fox.", ch, NULL, NULL, TO_ROOM);
}
else if (choice == 3)
{
sprintf (buf, "%s the black raven", ch->name);
stc ("You transform into a raven.\n\r", ch);
act ("$n transforms into a raven.", ch, NULL, NULL, TO_ROOM);
}
else if (choice == 4)
{
sprintf (buf, "%s the tiny kitten", ch->name);
stc ("You transform into a kitten.\n\r", ch);
act ("$n transforms into a kitten.", ch, NULL, NULL, TO_ROOM);
}
else if (choice == 5)
{
sprintf (buf, "%s the small hairy dog", ch->name);
stc ("You transform into a small dog.\n\r", ch);
act ("$n transforms into a dog.", ch, NULL, NULL, TO_ROOM);
}
else if (choice == 6)
{
sprintf (buf, "%s the cute little ferret", ch->name);
stc ("You transform into a ferret.\n\r", ch);
act ("$n transforms into a ferret.", ch, NULL, NULL, TO_ROOM);
}
else if (choice == 7)
{
sprintf (buf, "%s the tiny white mouse", ch->name);
stc ("You transform into a white mouse.\n\r", ch);
act ("$n transforms into a white mouse.", ch, NULL, NULL, TO_ROOM);
}
else if (choice == 8)
{
sprintf (buf, "%s the big fat yak", ch->name);
stc ("You transform into a yak.\n\r", ch);
act ("$n transforms into a yak.", ch, NULL, NULL, TO_ROOM);
}
else if (choice == 0)
{
if (IS_AFFECTED (ch, AFF_POLYMORPH))
{
REMOVE_BIT (ch->affected_by, AFF_POLYMORPH);
REMOVE_BIT (ch->mflags, MAGE_SHAPED);
free_string (ch->morph);
ch->morph = str_dup ("");
stc ("You revert to your human form.\n\r", ch);
act ("$n reverts to $s human form.", ch, NULL, NULL, TO_ROOM);
return;
}
/*
if (IS_SET (ch->special, SPC_SEEMING))
{
REMOVE_BIT (ch->special, SPC_SEEMING);
act ("You transform into human form.", ch, NULL, NULL, TO_CHAR);
act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM);
ch->max_hit = ch->max_hit - 1500;
ch->hit = ch->hit - 1500;
if (ch->hit < 1)
ch->hit = 1;
ch->damroll = ch->damroll - 100;
ch->hitroll = ch->hitroll - 300;
free_string (ch->morph);
ch->morph = str_dup ("");
return;
}
if (IS_SET (ch->extra2, EXTRA2_WYRM))
{
REMOVE_BIT (ch->extra2, EXTRA2_WYRM);
act ("You leave the Elder Form.", ch, NULL, NULL, TO_CHAR);
act ("$n leaves the Elder Form.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->extra2, EXTRA2_FAEMIGHT);
REMOVE_BIT (ch->extra2, EXTRA2_FAETOUGH);
if (ch->hit < 1)
ch->hit = 1;
clear_stats (ch);
return;
}
*/
else
{
stc ("You aren't even shapechanged!\n\r", ch);
return;
}
}
else
{
stc ("That's not a choice!\n\r", ch);
do_shapechange (ch, "");
return;
}
SET_BIT (ch->affected_by, AFF_POLYMORPH);
SET_BIT (ch->mflags, MAGE_SHAPED);
clear_stats (ch);
free_string (ch->morph);
ch->morph = str_dup (buf);
return;
}
/* Pooka's shapeshift -BUGGED */
/* void do_shapeshift( CHAR_DATA *ch, char *argument )
{
char arg[MIL];
char buf[MSL];
int choice = 0;
argument = one_argument( argument, arg );
if ( IS_NPC(ch) ) return;
if (!IS_CLASS(ch, CLASS_FAE))
{
send_to_char("Huh?\n\r",ch);
return;
}
if (!IS_SET(ch->kith, KITH_POOKA))
{
send_to_char("Huh?\n\r", ch );
return;
}
if ( arg[0] == '\0' )
{
divide_to_char(ch);
centre_text("Forms",ch);
divide_to_char(ch);
stc(" [ 0 ] Human\n",ch);
stc(" [ 1 ] Bunny\n",ch);
stc(" [ 2 ] Fox\n",ch);
stc(" [ 3 ] Raven\n",ch);
stc(" [ 4 ] Cat\n",ch);
stc(" [ 5 ] Dog\n",ch);
stc(" [ 6 ] Ferret\n",ch);
stc(" [ 7 ] Mouse\n",ch);
stc(" [ 8 ] Yak\n",ch);
divide_to_char(ch);
return;
}
choice = is_number( arg ) ? atoi( arg ) : -1;
if ( choice == 1 )
{
sprintf(buf, "A cute little bunny",ch->name);
stc("You transform into a bunny.\n\r",ch);
act("$n transforms into a bunny.",ch,NULL,NULL,TO_ROOM);
}
else if ( choice == 2 )
{
sprintf(buf, "A brown fox",ch->name);
stc("You transform into a fox.\n\r",ch);
act("$n transforms into a fox.",ch,NULL,NULL,TO_ROOM);
}
else if ( choice == 3 )
{
sprintf(buf, "A black raven",ch->name);
stc("You transform into a raven.\n\r",ch);
act("$n transforms into a raven.",ch,NULL,NULL,TO_ROOM);
}
else if ( choice == 4 )
{
sprintf(buf, "A tiny kitten",ch->name);
stc("You transform into a kitten.\n\r",ch);
act("$n transforms into a kitten.",ch,NULL,NULL,TO_ROOM);
}
else if ( choice == 5 )
{
sprintf(buf, "A small hairy dog",ch->name);
stc("You transform into a small dog.\n\r",ch);
act("$n transforms into a dog.",ch,NULL,NULL,TO_ROOM);
}
else if ( choice == 6 )
{
sprintf(buf, "A cute little ferret",ch->name);
stc("You transform into a ferret.\n\r",ch);
act("$n transforms into a ferret.",ch,NULL,NULL,TO_ROOM);
}
else if ( choice == 7 )
{
sprintf(buf, "A tiny white mouse",ch->name);
stc("You transform into a white mouse.\n\r",ch);
act("$n transforms into a white mouse.",ch,NULL,NULL,TO_ROOM);
}
else if ( choice == 8 )
{
sprintf(buf, "A big fat yak",ch->name);
stc("You transform into a yak.\n\r",ch);
act("$n transforms into a yak.",ch,NULL,NULL,TO_ROOM);
}
else if ( choice == 0 )
{
if ( IS_AFFECTED(ch, AFF_POLYMORPH) )
{
REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
REMOVE_BIT(ch->mflags, MAGE_SHAPED);
free_string(ch->morph);
ch->morph = str_dup("");
stc("You revert to your human form.\n\r",ch);
act("$n reverts to $s human form.",ch,NULL,NULL,TO_ROOM);
return;
}
else
{
stc("You aren't even shapechanged!\n\r",ch);
return;
}
}
else
{
stc("That's not a choice!\n\r",ch);
do_shapechange(ch,"");
return;
}
SET_BIT(ch->affected_by, AFF_POLYMORPH);
SET_BIT(ch->mflags, MAGE_SHAPED);
clear_stats(ch);
free_string(ch->morph);
ch->morph = str_dup(buf);
return;
} */
void do_freehold (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->fight_timer > 0)
{
send_to_char ("Not until your fight timer expires.\n\r", ch);
return;
}
if (IS_SET (ch->war, WARRING))
{
stc ("Not while in a war!\n\r", ch);
return;
}
if (IS_SET (ch->flag2, AFF2_INARENA))
{
stc ("Not while in the arena!\n\r", ch);
return;
}
if (!IS_AFFECTED (ch, AFF_SHADOWPLANE))
{
send_to_char ("You jump through the ground into the Umbra.\n\r", ch);
act ("$n jumps into the ground and disappears.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->affected_by, AFF_SHADOWPLANE);
do_look (ch, "auto");
return;
}
if (IS_AFFECTED (ch, AFF_SHADOWPLANE))
{
REMOVE_BIT (ch->affected_by, AFF_SHADOWPLANE);
send_to_char ("You jump back into the real world.\n\r", ch);
act ("$n leaps out of the ground.", ch, NULL, NULL, TO_ROOM);
do_look (ch, "auto");
return;
}
}
void do_viewaura (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
OBJ_DATA *obj;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOOT] < 1)
{
send_to_char ("You need level 1 Soothsay first.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("View the aura on what?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
if ((obj = get_obj_carry (ch, arg)) == NULL)
{
send_to_char ("View the aura on what?\n\r", ch);
return;
}
if (!IS_ITEMAFF (ch, ITEMA_VISION))
act ("$n examines $p intently.", ch, obj, NULL, TO_ROOM);
spell_identify (skill_lookup ("identify"), ch->level, ch, obj);
return;
}
if (!IS_ITEMAFF (ch, ITEMA_VISION))
if (!IS_NPC (victim) && (IS_IMMUNE (victim, IMM_SHIELDED) ||
(IS_CLASS (victim, CLASS_DROW) &&
IS_SET (victim->pcdata->powers[1],
DPOWER_DROWSHIELD)))
&& !IS_ITEMAFF (ch, ITEMA_VISION))
{
send_to_char ("You are unable to read their aura.\n\r", ch);
return;
}
act ("$n examines $N intently.", ch, NULL, victim, TO_NOTVICT);
act ("$n examines you intently.", ch, NULL, victim, TO_VICT);
if (IS_NPC (victim))
sprintf (buf, "%s is an NPC.\n\r", victim->short_descr);
else
{
if (victim->level == 12)
sprintf (buf, "%s is an Implementor.\n\r", victim->name);
else if (victim->level == 11)
sprintf (buf, "%s is a High Judge.\n\r", victim->name);
else if (victim->level == 10)
sprintf (buf, "%s is a Judge.\n\r", victim->name);
else if (victim->level == 9)
sprintf (buf, "%s is an Enforcer.\n\r", victim->name);
else if (victim->level == 8)
sprintf (buf, "%s is a Quest Maker.\n\r", victim->name);
else if (victim->level == 7)
sprintf (buf, "%s is a Builder.\n\r", victim->name);
else if (victim->level >= 3)
sprintf (buf, "%s is an Avatar.\n\r", victim->name);
else
sprintf (buf, "%s is a Mortal.\n\r", victim->name);
}
send_to_char (buf, ch);
if (!IS_NPC (victim))
{
sprintf (buf, "Str:%d, Int:%d, Wis:%d, Dex:%d, Con:%d.\n\r",
get_curr_str (victim), get_curr_int (victim),
get_curr_wis (victim), get_curr_dex (victim),
get_curr_con (victim));
send_to_char (buf, ch);
}
sprintf (buf, "Hp:%d/%d, Mana:%d/%d, Move:%d/%d.\n\r", victim->hit,
victim->max_hit, victim->mana, victim->max_mana, victim->move,
victim->max_move);
send_to_char (buf, ch);
if (!IS_NPC (victim))
sprintf (buf, "Hitroll:%d, Damroll:%d, AC:%d.\n\r",
char_hitroll (victim), char_damroll (victim),
char_ac (victim));
else
sprintf (buf, "AC:%d.\n\r", char_ac (victim));
send_to_char (buf, ch);
if (!IS_NPC (victim))
{
sprintf (buf, "Status:%d, ", victim->race);
send_to_char (buf, ch);
if (IS_CLASS (victim, CLASS_VAMPIRE))
{
sprintf (buf, "Blood:%d, ", victim->pcdata->condition[COND_THIRST]);
send_to_char (buf, ch);
}
}
sprintf (buf, "Alignment:%d.\n\r", victim->alignment);
send_to_char (buf, ch);
if (!IS_NPC (victim) && IS_EXTRA (victim, EXTRA_PREGNANT))
act ("$N is pregnant.", ch, NULL, victim, TO_CHAR);
if (!IS_NPC (victim) && IS_CLASS (victim, CLASS_VAMPIRE))
{
send_to_char ("Disciplines:", ch);
if (IS_VAMPAFF (victim, VAM_PROTEAN))
send_to_char (" Protean", ch);
if (IS_VAMPAFF (victim, VAM_VICISSITUDE))
send_to_char (" vicissitude", ch);
if (IS_VAMPAFF (victim, VAM_CELERITY))
send_to_char (" Celerity", ch);
if (IS_VAMPAFF (victim, VAM_FORTITUDE))
send_to_char (" Fortitude", ch);
if (IS_VAMPAFF (victim, VAM_POTENCE))
send_to_char (" Potence", ch);
if (IS_VAMPAFF (victim, VAM_OBFUSCATE))
send_to_char (" Obfuscate", ch);
if (IS_VAMPAFF (victim, VAM_OBTENEBRATION))
send_to_char (" Obtenebration", ch);
if (IS_VAMPAFF (victim, VAM_SERPENTIS))
send_to_char (" Serpentis", ch);
if (IS_VAMPAFF (victim, VAM_AUSPEX))
send_to_char (" Auspex", ch);
if (IS_VAMPAFF (victim, VAM_DOMINATE))
send_to_char (" Dominate", ch);
if (IS_VAMPAFF (victim, VAM_PRESENCE))
send_to_char (" Presence", ch);
send_to_char (".\n\r", ch);
}
return;
}
void do_oakenshield (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_PRIM] < 3)
{
send_to_char ("You need level 3 Primal first.\n\r", ch);
return;
}
if (!IS_IMMUNE (ch, IMM_SHIELDED))
{
send_to_char ("You shield your aura from those around you.\n\r", ch);
SET_BIT (ch->immune, IMM_SHIELDED);
return;
}
if (IS_IMMUNE (ch, IMM_SHIELDED))
{
send_to_char ("You stop shielding your aura.\n\r", ch);
REMOVE_BIT (ch->immune, IMM_SHIELDED);
return;
}
}
void do_veiled (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_CHIC] < 4)
{
send_to_char ("you need level 4 in Chicanery first.\n\r", ch);
return;
}
if (IS_SET (ch->act, PLR_WIZINVIS))
{
REMOVE_BIT (ch->act, PLR_WIZINVIS);
send_to_char ("You slowly fade into existance.\n\r", ch);
act ("$n slowly fades into existance.", ch, NULL, NULL, TO_ROOM);
}
else
{
send_to_char ("You slowly fade out of existance.\n\r", ch);
act ("$n slowly fades out of existance.", ch, NULL, NULL, TO_ROOM);
SET_BIT (ch->act, PLR_WIZINVIS);
}
return;
}
void do_tattle (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
ROOM_INDEX_DATA *chroom;
ROOM_INDEX_DATA *victimroom;
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOOT] < 3)
{
send_to_char ("you need level 3 in Soothsay first.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("use tattle tale on whom?\n\r", ch);
return;
}
if ((victim = get_char_world (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
chroom = ch->in_room;
victimroom = victim->in_room;
char_from_room (ch);
char_to_room (ch, victimroom);
if (IS_AFFECTED (ch, AFF_SHADOWPLANE) && (!IS_AFFECTED (victim,
AFF_SHADOWPLANE)))
{
REMOVE_BIT (ch->affected_by, AFF_SHADOWPLANE);
do_look (ch, "auto");
SET_BIT (ch->affected_by, AFF_SHADOWPLANE);
}
else if (!IS_AFFECTED (ch, AFF_SHADOWPLANE) && (IS_AFFECTED (victim,
AFF_SHADOWPLANE)))
{
SET_BIT (ch->affected_by, AFF_SHADOWPLANE);
do_look (ch, "auto");
REMOVE_BIT (ch->affected_by, AFF_SHADOWPLANE);
}
else
do_look (ch, "auto");
char_from_room (ch);
char_to_room (ch, chroom);
ch->fight_timer = 10;
return;
}
/* GOOD elder form */
void do_elderform (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_PRIM] < 5)
{
send_to_char
("You must obtain at least level 5 in Primal to don the Elder Form\n\r",
ch);
return;
}
if (IS_SET (ch->extra2, EXTRA2_WYRM))
{
REMOVE_BIT (ch->extra2, EXTRA2_WYRM);
act ("You leave the Elder Form.", ch, NULL, NULL, TO_CHAR);
act ("$n leaves the Elder Form.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->extra2, EXTRA2_FAEMIGHT);
REMOVE_BIT (ch->extra2, EXTRA2_FAETOUGH);
if (ch->hit < 1)
ch->hit = 1;
// ch->damroll = ch->damroll - 400;
// ch->hitroll = ch->hitroll - 200;
clear_stats (ch);
return;
}
act ("You take on the elder form.", ch, NULL, NULL, TO_CHAR);
act ("$n's body bulges as $e takes on the Elder Form.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->extra2, EXTRA2_FAEMIGHT);
SET_BIT (ch->extra2, EXTRA2_FAETOUGH);
// ch->damroll = ch->damroll + 400;
// ch->hitroll = ch->hitroll + 200;
SET_BIT (ch->extra2, EXTRA2_WYRM);
return;
}
void do_haunted (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_CHIC] < 3)
{
send_to_char ("you need level 3 in Chicanery to use Haunted Heart.\n\r",
ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
send_to_char ("You are not fighting anyone.\n\r", ch);
return;
}
act ("$n gazes into your eyes.", ch, NULL, victim, TO_VICT);
act ("You gaze into $N's eyes.", ch, NULL, victim, TO_CHAR);
act ("$n gazes into $N's eyes.", ch, NULL, victim, TO_NOTVICT);
if (number_percent () > 25)
{
send_to_char ("You failed.\n\r", ch);
WAIT_STATE (ch, 4);
return;
}
else
{
do_flee (victim, "");
WAIT_STATE (ch, 16);
return;
}
return;
}
/* Sluagh Squirm */
void do_squirm (CHAR_DATA * ch, char *argument)
{
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_SLUAGH)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sluagh kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_SLUAGH)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sluagh kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
stc ("You try to squirm out of your restraints.\n\r", ch);
act ("$n trys to squirm out of $s restraints.", ch, NULL, NULL, TO_ROOM);
if (IS_EXTRA (ch, TIED_UP))
{
act ("You squirm out of the restraints.", ch, NULL, NULL, TO_CHAR);
act ("$n squirms out if the restraints.", ch, NULL, NULL, TO_ROOM);
REMOVE_BIT (ch->extra, TIED_UP);
}
if (is_affected (ch, gsn_web))
{
act ("$n squirms out of the webbing.", ch, NULL, NULL, TO_ROOM);
send_to_char ("You squirm out of the webbing.\n\r", ch);
affect_strip (ch, gsn_web);
}
if (IS_AFFECTED (ch, AFF_WEBBED))
{
act ("$n squirms out of the webbing.", ch, NULL, NULL, TO_ROOM);
send_to_char ("You squirm out of the webbing.\n\r", ch);
REMOVE_BIT (ch->affected_by, AFF_WEBBED);
}
if (IS_SET (ch->flag2, AFF2_TENDRILS))
{
act ("$n squirms out of the tendrils.", ch, NULL, NULL, TO_ROOM);
send_to_char ("You squirm out of the tendrils.\n\r", ch);
REMOVE_BIT (ch->flag2, AFF2_TENDRILS);
}
return;
}
void do_heather (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MIL];
argument = one_argument (argument, arg);
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_PRIM] < 2)
{
send_to_char ("you need level 2 in Primal to use Heather Balm.\n\r",
ch);
return;
}
if (arg[0] == '\0')
{
stc ("Whom do you wish to heal?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
stc ("You cannot find them here.\n\r", ch);
return;
}
if (victim->hit >= victim->max_hit)
{
stc ("They are already at full health!\n\r", ch);
return;
}
act ("You lay your hands on $N, fixing the damage within.", ch, NULL,
victim, TO_CHAR);
act ("$n lays $s hands on you, and you feel better.", ch, NULL, victim,
TO_VICT);
act ("$n lays $s hands on $N, and $N's body seems to charge with glamour.",
ch, NULL, victim, TO_NOTVICT);
victim->hit +=
(number_range
((ch->pcdata->powers[FAE_PRIM] * 500),
(ch->pcdata->powers[FAE_PRIM] * 700)));
if (victim->hit > victim->max_hit)
victim->hit = victim->max_hit;
update_pos (victim);
WAIT_STATE (ch, 24);
return;
}
/* Changeling armor command for Boggans */
/* bugged */
void do_protocol (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *rch;
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOVE] < 1)
{
send_to_char ("You need level 1 in Sovereign to use Protocol.\n\r", ch);
return;
}
if (ch->fight_timer > 0)
{
stc ("Not with a fight timer.\n\r", ch);
return;
}
if (IS_EXTRA2 (ch, EXTRA2_NEUTRAL))
{
REMOVE_BIT (ch->extra2, EXTRA2_NEUTRAL);
act ("$n stops making the time-out sign.", ch, NULL, NULL, TO_ROOM);
send_to_char
("The peaceful harmony in the air gradually fades away to nothing.\n\r",
ch);
act ("The peaceful harmony in the air gradually fades away to nothing.",
ch, NULL, NULL, TO_ROOM);
ch->pcdata->obeah = 30;
return;
}
if (ch->in_room == NULL || ch->pcdata->obeah > 0)
{
send_to_char ("Nothing happens.\n\r", ch);
return;
}
for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room)
{
if (rch->fighting != NULL)
{
send_to_char("Not if people are fighting!\n\r",ch);
return;
}
}
if (IS_SET (ch->in_room->room_flags, ROOM_SAFE))
{
send_to_char ("The room is already under protocol.\n\r", ch);
return;
}
SET_BIT (ch->extra2, EXTRA2_NEUTRAL);
act ("$n makes the time-out sign.", ch, NULL, NULL, TO_ROOM);
send_to_char ("You make the time-out sign.\n\r", ch);
ch->pcdata->obeah = 60;
send_to_char ("The air is filled with peaceful harmony.\n\r", ch);
act ("The air is filled with peaceful harmony.", ch, NULL, NULL, TO_ROOM);
/* for (rch = ch->in_room->people; rch != NULL; rch = rch->next_in_room)
{
if (rch->fighting != NULL)
stop_fighting (rch, TRUE);
}*/
return;
}
/* slightly bugged, fix soon */
void do_willow (CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
OBJ_DATA *obj;
CHAR_DATA *victim;
argument = one_argument (argument, arg1);
argument = one_argument (argument, arg2);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_PRIM] < 1)
{
send_to_char ("you need level 1 in Primal to use Willow Wisp.\n\r", ch);
return;
}
if (arg2[0] == '\0')
{
send_to_char ("Transport who what?\n\r", ch);
return;
}
if ((victim = get_char_world (ch, arg2)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (victim == ch)
{
send_to_char ("You cannot send things to yourself!\n\r", ch);
return;
}
if (victim->in_room == NULL || victim->in_room == ch->in_room)
{
send_to_char ("But they're right here!\n\r", ch);
return;
}
if ((obj = get_obj_carry (ch, arg1)) == NULL)
{
send_to_char ("You do not have that item.\n\r", ch);
return;
}
if (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_TRANSPORT))
{
{
send_to_char ("You are unable to transport anything to them.\n\r",
ch);
return;
}
/*
if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN)) {
guardian_message(victim);
act("$n just failed to send $p to you via a will-o-wisp.",ch,obj,victim,TO_VICT);
}
return;
*/
}
// NO OTHER CHECKS AFTER THIS POINT
// if (check_giveto_mob(ch, victim, obj)) return;
if (IS_SET(obj->quest, QUEST_ARTIFACT) )
{
stc("You failed!\n\r", ch);
return;
}
send_to_char
("A will-o-wisp blinks into existance and lands on your shoulder.\n\r",
ch);
act ("A will-o-wisp blinks into existance and lands on $n's shoulder.", ch,
NULL, NULL, TO_ROOM);
act ("You give $p to the will-o-wisp.", ch, obj, NULL, TO_CHAR);
act ("$n gives $p to the will-o-wisp.", ch, obj, NULL, TO_ROOM);
send_to_char
("The will-o-wisp giggles and jumps through a rift in reality.\n\r",
ch);
act ("The will-o-wisp giggles and jumps through a rift in reality.", ch,
NULL, NULL, TO_ROOM);
obj_from_char (obj);
obj_to_char (obj, victim);
send_to_char
("A rift in reality appears and a will-o-wisp flies out landing on your shoulder.\n\r",
victim);
act ("A rift in reality appears and a will-o-wisp flies out landing on $n's shoulder.", victim, NULL, NULL, TO_ROOM);
act ("You take $p from the will-o-wisp.", victim, obj, NULL, TO_CHAR);
act ("$n takes $p from the will-o-wisp.", victim, obj, NULL, TO_ROOM);
send_to_char
("The will-o-wisp kisses your cheek and blinks out of existance.\n\r",
victim);
act ("The will-o-wisp kisses $n's cheek and blinks out of existance.",
victim, NULL, NULL, TO_ROOM);
do_autosave (ch, "");
do_autosave (victim, "");
/*
if (!IS_NPC(victim) && ch != victim && IS_MORE(victim, MORE_GUARDIAN))
guardian_message(victim);
act("$n just sent $p to you via will-o-wisp.",ch,obj,victim,TO_VICT);
}
*/
return;
}
void do_faecharm (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
int sn;
int level;
int spelltype;
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_POOKA)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Pooka kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_POOKA)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Pooka kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("You cannot charm yourself.\n\r", ch);
return;
}
if (IS_AFFECTED (victim, AFF_ETHEREAL))
{
send_to_char ("You cannot charm an ethereal person.\n\r", ch);
return;
}
if (is_safe (ch, victim) == TRUE)
return;
sprintf (buf, "A look of concentration crosses your face.");
act (buf, ch, NULL, NULL, TO_CHAR);
sprintf (buf, "A look of concentration crosses over $n's face.\n\r");
act (buf, ch, NULL, victim, TO_ROOM);
if ((sn = skill_lookup ("charm")) < 0)
return;
spelltype = skill_table[sn].target;
level = 240;
(*skill_table[sn].spell_fun) (sn, level, ch, victim);
WAIT_STATE (ch, 12);
return;
}
void do_geasa (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
CHAR_DATA *familiar;
char arg[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_SOVE] < 5)
{
send_to_char ("you need level 5 in Sovereign to use Geasa.\n\r", ch);
return;
}
if ((familiar = ch->pcdata->familiar) != NULL)
{
sprintf (buf, "You release %s.\n\r", familiar->short_descr);
send_to_char (buf, ch);
familiar->wizard = NULL;
ch->pcdata->familiar = NULL;
return;
}
if (arg[0] == '\0')
{
send_to_char ("What do you wish to command using Geasa?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("What an intelligent idea!\n\r", ch);
return;
}
if (!IS_NPC (victim))
{
send_to_char ("Not on players.\n\r", ch);
return;
}
if (victim->level > 150)
{
stc ("They are too powerful to control\n\r", ch);
return;
}
if (victim->wizard != NULL)
{
send_to_char ("You are unable to command them.\n\r", ch);
return;
}
if (victim->level > 350)
{
send_to_char ("They are too powerful.\n\r", ch);
return;
}
ch->pcdata->familiar = victim;
victim->wizard = ch;
act ("You take over $N's mind using the art of Geasa.", ch, NULL, victim,
TO_CHAR);
act ("$n is staring at you!", ch, NULL, victim, TO_VICT);
act ("$n starts staring at $N", ch, NULL, victim, TO_NOTVICT);
return;
}
/* these last three commands are fucked a bit, fix later */
void do_phantom (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
AFFECT_DATA af;
char arg1[MIL];
int sn;
argument = one_argument (argument, arg1);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_LEGE] < 5)
{
send_to_char
("you need level 5 in Legerdemain to use Phantom Shadows.\n\r", ch);
return;
}
if (arg1[0] == '\0')
{
send_to_char ("You can create a wyrm or a phoenix.\n\r", ch);
return;
}
if (ch->pcdata->followers > 3)
{
stc ("Nothing happens..\n\r", ch);
return;
}
if (!str_cmp (arg1, "wyrm"))
{
ch->pcdata->followers++;
victim = create_mobile (get_mob_index (MOB_VNUM_GUARDIAN));
victim->short_descr = str_dup ("A massive elder wyrm");
victim->name = str_dup ("wyrm");
victim->long_descr =
str_dup
("A massive elder wyrm is here coiling up in readiness.\n\r ");
victim->level = 349;
victim->hit = 15000;
victim->max_hit = 15000;
victim->hitroll = 250;
victim->damroll = 250;
victim->armor = -1000;
SET_BIT (victim->act, ACT_NOEXP);
act ("You twirl around in a circle.\nThe ground itself begins to crack open.\nSuddenly, A massive elder wyrm breaks through and swerves in front of you.", ch, NULL, NULL, TO_CHAR);
act ("$n twirls about in a circle.\nThe ground itself begins to crack open.\nSuddenly, A massive elder wyrm breaks through and swerves in front on $n!", ch, NULL, NULL, TO_ROOM);
char_to_room (victim, ch->in_room);
if ((sn = skill_lookup ("guardian")) < 0)
{
send_to_char ("Bug - please inform a coder.\n\r", ch);
return;
}
af.type = sn;
af.duration = 666;
af.location = APPLY_NONE;
af.modifier = 0;
af.bitvector = AFF_CHARM;
affect_to_char (victim, &af);
return;
}
if (!str_cmp (arg1, "phoenix"))
{
ch->pcdata->followers++;
victim = create_mobile (get_mob_index (MOB_VNUM_GUARDIAN));
victim->short_descr = str_dup ("A magnificent phoenix");
victim->name = str_dup ("phoenix");
victim->long_descr =
str_dup ("A magnificent phoenix hovers in the air waiting. \n\r");
victim->level = 349;
victim->hit = 20000;
victim->max_hit = 20000;
victim->hitroll = 250;
victim->damroll = 250;
victim->armor = -2000;
SET_BIT (victim->act, ACT_NOEXP);
act ("You twist and contort your body in a frenzied dance.\nThe sky itself begins to split open.\nSuddenly, A magnificent phoenix breaks through and lands before you.", ch, NULL, NULL, TO_CHAR);
act ("$n twists and contorts $s body in a frenzied dance.\nThe sky itself begins to split open.\nSuddenly, A magnificent phoenix breaks through and lands in front on $n!", ch, NULL, NULL, TO_ROOM);
char_to_room (victim, ch->in_room);
add_follower (victim, ch);
if ((sn = skill_lookup ("guardian")) < 0)
{
send_to_char ("Bug - please inform a coder.\n\r", ch);
return;
}
af.type = sn;
af.duration = 666;
af.location = APPLY_NONE;
af.modifier = 0;
af.bitvector = AFF_CHARM;
affect_to_char (victim, &af);
return;
}
}
void do_dreaming (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
do_huh (ch, "");
return;
}
if (IS_EXTRA2 (ch, EXTRA2_DREAMING))
{
stc ("You leave the Dreaming.\n\r", ch);
REMOVE_BIT (ch->extra2, EXTRA2_DREAMING);
act ("$n has left the Dreaming.\n\r", ch, NULL, NULL, TO_ROOM);
return;
}
if (ch->position > POS_SLEEPING)
{
stc ("You must be asleep to enter the Dreaming.\n\r", ch);
return;
}
if (ch->fight_timer > 0)
{
stc ("Your mind is in too much of a frenzy to enter the Dreaming.\n\r",
ch);
return;
}
stc ("You enter the Dreaming.\n\r", ch);
act ("$n enters the Dreaming.", ch, NULL, NULL, TO_ROOM);
SET_BIT (ch->extra2, EXTRA2_DREAMING);
}
/*
void do_court( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char arg1 [MAX_INPUT_LENGTH];
char arg2 [MAX_INPUT_LENGTH];
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( IS_NPC(ch) ) return;
if (!IS_CLASS(ch, CLASS_FAE) && IS_SET(ch->special, SPC_FAE_PRINCE) ||
ch->pcdata->stats[UNI_GEN] != 2) ) { stc("Huh?\n\r",ch);
return;
}
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char( "Syntax is: court <target> <prince/enchant>\n\r", ch );
return;
}
if ( ( victim = get_char_room( ch, arg1 ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if ( IS_NPC(victim) )
{
send_to_char( "Not on NPC's.\n\r", ch );
return;
}
if ( ch == victim )
{
send_to_char( "Not on yourself!\n\r", ch );
return;
}
if (!IS_CLASS(ch, CLASS_FAE)
{
send_to_char( "But they are not a changeling!\n\r", ch );
return;
}
if ( str_cmp(victim->clan,ch->clan) && str_cmp(arg2,"induct") )
{
send_to_char( "You can only grant your favour to someone in your court.\n\r", ch );
return;
}
if ( ch->pcdata->stats[UNI_GEN] >= victim->pcdata->stats[UNI_GEN] )
{
send_to_char( "You can only grant your favour to someone of a lower rank.\n\r", ch );
return;
}
if ( !str_cmp(arg2,"prince") && ch->pcdata->stats[UNI_GEN] == 2)
{
if (IS_SET(victim->special,SPC_FAE_PRINCE)) {
act("You remove $N's prince privilages!",ch,NULL,victim,TO_CHAR);
act("$n removes $N's prince privilages!",ch,NULL,victim,TO_NOTVICT);
act("$n removes your prince privilages!",ch,NULL,victim,TO_VICT);
if (IS_SET(victim->special,SPC_FAE_SIRE)) REMOVE_BIT(victim->special,SPC_FAE_SIRE);
REMOVE_BIT(victim->special,SPC_FAE_PRINCE);return;}
act("You make $N a prince!",ch,NULL,victim,TO_CHAR);
act("$n has made $N a prince!",ch,NULL,victim,TO_NOTVICT);
act("$n has made you a prince!",ch,NULL,victim,TO_VICT);
SET_BIT(victim->special,SPC_FAE_PRINCE);
if (IS_SET(victim->special,SPC_FAE_SIRE)) REMOVE_BIT(victim->special,SPC_FAE_SIRE);
return;
}
else if ( !str_cmp(arg2,"enchant") && (ch->pcdata->stats[UNI_GEN] == 2 || IS_SET(ch->special,SPC_FAE_PRINCE)))
{
if (IS_SET(victim->special,SPC_FAE_SIRE)) {
act("You remove $N's permission to enchant a mortal!",ch,NULL,victim,TO_CHAR);
act("$n has removed $N's permission to enchant a mortal!",ch,NULL,victim,TO_NOTVICT);
act("$n has remove your permission to enchant a mortal!",ch,NULL,victim,TO_VICT);
REMOVE_BIT(victim->special,SPC_FAE_SIRE);return;}
act("You grant $N permission to enchant a mortal!",ch,NULL,victim,TO_CHAR);
act("$n has granted $N permission enchant a mortal!",ch,NULL,victim,TO_NOTVICT);
act("$n has granted you permission enchant a mortal!",ch,NULL,victim,TO_VICT);
SET_BIT(victim->special,SPC_FAE_SIRE);
return;
}
else if ( !str_cmp(arg2,"outcast") && victim->pcdata->stats[UNI_GEN] > 2 &&
ch->pcdata->stats[UNI_GEN] == 2)
{
act("You make $N an Outcast!",ch,NULL,victim,TO_CHAR);
act("$n has made $N an Outcast!",ch,NULL,victim,TO_NOTVICT);
act("$n has made you an Outcast!",ch,NULL,victim,TO_VICT);
free_string(victim->clan);
victim->clan = str_dup( "" );
return;
}
else if ( !str_cmp(arg2,"outcast") && victim->pcdata->stats[UNI_GEN] > 2 &&
!IS_SET(victim->special, SPC_FAE_PRINCE) && IS_SET(ch->special,SPC_FAE_PRINCE))
{
act("You make $N an Outcast!",ch,NULL,victim,TO_CHAR);
act("$n has made $N an Outcast!",ch,NULL,victim,TO_NOTVICT);
act("$n has made you an Outcast!",ch,NULL,victim,TO_VICT);
free_string(victim->clan);
victim->clan = str_dup( "" );
return;
}
else if ( !str_cmp(arg2,"induct") && victim->pcdata->stats[UNI_GEN] > 2 &&
ch->pcdata->stats[UNI_GEN] == 2 && strlen(victim->clan) < 2)
{
if (IS_SET(victim->special, SPC_REBEL))
{
send_to_char("You cannot induct a Rebel!\n\r",ch);
return;
}
act("You induct $N into your court!",ch,NULL,victim,TO_CHAR);
act("$n inducts $N into $s court!",ch,NULL,victim,TO_NOTVICT);
act("$n inducts you into $s court!",ch,NULL,victim,TO_VICT);
free_string(victim->clan);
victim->clan = str_dup( ch->clan );
return;
}
else if ( !str_cmp(arg2,"induct") && victim->pcdata->stats[UNI_GEN] > 2 &&
!IS_SET(victim->special, SPC_FAE_PRINCE) && IS_SET(ch->special,SPC_FAE_PRINCE) &&
strlen(victim->clan) < 2)
{
if (IS_SET(victim->special, SPC_REBEL))
{
send_to_char("You cannot induct a Rebel!\n\r",ch);
return;
}
act("You induct $N into your court!",ch,NULL,victim,TO_CHAR);
act("$n inducts $N into $s court!",ch,NULL,victim,TO_NOTVICT);
act("$n inducts you into $s court!",ch,NULL,victim,TO_VICT);
free_string(victim->clan);
victim->clan = str_dup( ch->clan );
return;
}
else if ( !str_cmp(arg2,"accept") &&
(ch->pcdata->stats[UNI_GEN] == 2 || IS_SET(ch->special,SPC_FAE_PRINCE)))
{
if ( victim->pcdata->rank > AGE_CHILDLING)
{ send_to_char("But they are not a Childling!\n\r",ch); return; }
act("You accept $N into the court!",ch,NULL,victim,TO_CHAR);
act("$n has accepted $N into $s court!",ch,NULL,victim,TO_NOTVICT);
act("$n accepted you into $s court!",ch,NULL,victim,TO_VICT);
victim->pcdata->rank = AGE_WILDER;
return;
}
else send_to_char( "You are unable to grant that sort of favour.\n\r", ch );
return;
}
*/
void do_quicksilver (CHAR_DATA * ch, char *argument)
{
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[FAE_WAYF] < 1)
{
send_to_char ("You need level 1 Wayfare first.\n\r", ch);
return;
}
if (!IS_SET (ch->extra2, EXTRA2_FAESPEED))
{
send_to_char ("You start moving faster than the eye can follow.\n\r",
ch);
act ("$n starts moving faster than the eye can follow.", ch, NULL, NULL,
TO_ROOM);
SET_BIT (ch->extra2, EXTRA2_FAESPEED);
return;
}
else
{
REMOVE_BIT (ch->extra2, EXTRA2_FAESPEED);
send_to_char ("You slow down.\n\r", ch);
act ("$n slows down.", ch, NULL, NULL, TO_ROOM);
return;
}
}
void do_poisonweapon (CHAR_DATA * ch, char *argument)
{
OBJ_DATA *obj;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_NOCKER)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Nocker kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_NOCKER)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Nocker kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (argument[0] == '\0')
{
send_to_char ("Which item do you wish to poison?\n\r", ch);
return;
}
if ((obj = get_obj_carry (ch, argument)) == NULL)
{
send_to_char ("You are not carrying that item.\n\r", ch);
return;
}
if (obj->item_type != ITEM_WEAPON)
{
send_to_char ("That is not a weapon!\n\r", ch);
return;
}
if (IS_WEAP (obj, WEAPON_POISON))
{
act ("$p is already coated with poison.", ch, obj, NULL, TO_CHAR);
return;
}
act ("You dip your hands in some liquid and rub it along $p, coating it with a sickly venom.", ch, obj, NULL, TO_CHAR);
act ("$n dips $m hands in some liquid and rubs it along $p, coating it with a sickly venom.", ch, obj, NULL, TO_ROOM);
WAIT_STATE (ch, 8);
SET_BIT (obj->weapflags, WEAPON_POISON);
obj->value[1] += ch->pcdata->stats[UNI_GEN];
obj->value[2] += ch->pcdata->stats[UNI_GEN];
}
void do_freezeweapon (CHAR_DATA * ch, char *argument)
{
OBJ_DATA *obj;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_NOCKER)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Nocker kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_NOCKER)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Nocker kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (argument[0] == '\0')
{
send_to_char ("Which item do you wish to freeze?\n\r", ch);
return;
}
if ((obj = get_obj_carry (ch, argument)) == NULL)
{
send_to_char ("You are not carrying that item.\n\r", ch);
return;
}
if (obj->item_type != ITEM_WEAPON)
{
send_to_char ("That is not a weapon!\n\r", ch);
return;
}
if (IS_WEAP (obj, WEAPON_FROST))
{
act ("$p is already frozen.", ch, obj, NULL, TO_CHAR);
return;
}
act ("$p is surrounded by ice crystals.", ch, obj, NULL, TO_CHAR);
act ("$p, carried by $n is surrounded by ice crystals.", ch, obj, NULL,
TO_ROOM);
WAIT_STATE (ch, 8);
SET_BIT (obj->weapflags, WEAPON_FROST);
}
void do_flameweapon (CHAR_DATA * ch, char *argument)
{
OBJ_DATA *obj;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_NOCKER)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Nocker kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_NOCKER)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Nocker kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (argument[0] == '\0')
{
send_to_char ("Which item do you wish to enflame?\n\r", ch);
return;
}
if ((obj = get_obj_carry (ch, argument)) == NULL)
{
send_to_char ("You are not carrying that item.\n\r", ch);
return;
}
if (obj->item_type != ITEM_WEAPON)
{
send_to_char ("That is not a weapon!\n\r", ch);
return;
}
if (IS_WEAP (obj, WEAPON_FLAMING))
{
act ("$p is already flaming.", ch, obj, NULL, TO_CHAR);
return;
}
act ("$p bursts into flames.", ch, obj, NULL, TO_CHAR);
act ("$p, carried by $n bursts into flames.", ch, obj, NULL, TO_ROOM);
WAIT_STATE (ch, 8);
SET_BIT (obj->weapflags, WEAPON_FLAMING);
}
/* Eshu's cover(hide) and sap */
void do_cover (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_ESHU)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Eshu kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_ESHU)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Eshu kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (IS_AFFECTED (ch, AFF_HIDE))
{
REMOVE_BIT (ch->affected_by, AFF_HIDE);
act ("$n appears from the shadows.", ch, NULL, NULL, TO_ROOM);
send_to_char ("You appear from the shadows.\n\r", ch);
}
else
{
act ("$n disappears into the shadows.", ch, NULL, NULL, TO_ROOM);
send_to_char ("You disappear into the shadows.\n\r", ch);
SET_BIT (ch->affected_by, AFF_HIDE);
}
return;
}
void do_sap (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg1[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg1);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_ESHU)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Eshu kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_ESHU)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Eshu kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (arg1[0] == '\0')
{
send_to_char ("Sap who?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg1)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (!IS_AFFECTED (ch, AFF_HIDE))
{
send_to_char
("You cannot knockout someone if you are not in cover.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("Not on yourself!\n\r", ch);
return;
}
if (ch->position == POS_FIGHTING)
{
send_to_char ("Not while fighting!\n\r", ch);
return;
}
if (victim->in_room == ch->in_room)
{
act ("You jump from the shadows and smack $N against the back\n\r their head, sending them down.", ch, NULL, victim, TO_CHAR);
act ("$n jumps from the shadows and smacks you upside the head\n\r with a heavy sap\n\rYou feel dizzy and stunned.", ch, NULL, victim, TO_VICT);
REMOVE_BIT (ch->affected_by, AFF_HIDE);
victim->position = POS_STUNNED;
WAIT_STATE (ch, 24);
return;
}
return;
}
/* sluagh's shadowshade */
void do_shadowshade (CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_SLUAGH)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sluagh kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_SLUAGH)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sluagh kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (IS_SET (ch->newbits, NEW_DARKNESS))
{
send_to_char ("You banish the darkness surrounding you.\n\r", ch);
act ("The darkness surrounding $n disappears.", ch, NULL, NULL,
TO_ROOM);
REMOVE_BIT (ch->newbits, NEW_DARKNESS);
if (ch->in_room != NULL)
if (IS_SET (ch->in_room->room_flags, ROOM_TOTAL_DARKNESS))
REMOVE_BIT (ch->in_room->room_flags, ROOM_TOTAL_DARKNESS);
return;
}
sprintf (buf, "A look of concentration passes over %s's face.", ch->name);
act (buf, ch, NULL, NULL, TO_ROOM);
send_to_char ("A look of concentration passes over your face.\n\r", ch);
SET_BIT (ch->newbits, NEW_DARKNESS);
if (!IS_SET (ch->in_room->room_flags, ROOM_TOTAL_DARKNESS))
SET_BIT (ch->in_room->room_flags, ROOM_TOTAL_DARKNESS);
sprintf (buf, "A complete darkness fills the room.\n\r");
act (buf, ch, NULL, NULL, TO_ROOM);
send_to_char (buf, ch);
return;
}
void do_showcourt (CHAR_DATA * ch, char *argument)
{
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
char lord[MAX_INPUT_LENGTH];
CHAR_DATA *gch;
one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->stats[UNI_GEN] < 3)
strcpy (lord, ch->name);
else
strcpy (lord, ch->lord);
sprintf (buf, "The changelings of %s:\n\r", lord);
send_to_char (buf, ch);
send_to_char
("[ Name ] [ Hits ] [ Mana ] [ Move ] [ Exp ]\n\r", ch);
for (gch = char_list; gch != NULL; gch = gch->next)
{
if (IS_NPC (gch))
continue;
if (!IS_CLASS (gch, CLASS_FAE))
continue;
if (!str_cmp (ch->lord, lord) || !str_cmp (ch->name, lord))
{
sprintf (buf,
"[%-16s] [%-6d] [%-6d] [%-6d] [%-10lli]\n\r",
capitalize (gch->name),
gch->hit, gch->mana, gch->move, gch->exp);
send_to_char (buf, ch);
}
}
return;
}
void do_faesteed (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
AFFECT_DATA af;
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_SIDHE)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sidhe kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_SIDHE)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sidhe kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (ch->pcdata->followers > 3)
{
stc ("Nothing happens..\n\r", ch);
return;
}
ch->pcdata->followers++;
victim = create_mobile (get_mob_index (MOB_VNUM_MOUNT));
free_string (victim->short_descr);
victim->short_descr = str_dup ("A massive chimerical horse");
free_string (victim->name);
victim->name = str_dup ("horse");
free_string (victim->long_descr);
victim->long_descr =
str_dup
("A massive chimerical horse glowing with glamour stands here.\n\r");
victim->level = 500;
victim->hit = 15000;
victim->max_hit = 15000;
victim->hitroll = 250;
victim->damroll = 250;
victim->armor = -1500;
SET_BIT (victim->act, ACT_NOEXP);
SET_BIT (victim->act, ACT_MOUNT);
act ("You whistle loudly.\nYou hear a loud trotting off in the distance.\n Suddenly a massive glowing horse jumps in from nowhere and stands before you.", ch, NULL, NULL, TO_CHAR);
act ("$n whistles loudly.\nYou hear a loud trotting off in the distance.\n Suddenly a massive glowing horse jumps in from nowhere and stands before $n!", ch, NULL, NULL, TO_ROOM);
char_to_room (victim, ch->in_room);
add_follower (victim, ch);
af.duration = 666;
af.location = APPLY_NONE;
af.modifier = 0;
af.bitvector = AFF_CHARM;
affect_to_char (victim, &af);
return;
}
void do_teethclench (CHAR_DATA * ch, char *argument)
{
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_REDCAP)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Redcap kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_REDCAP)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Redcap kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (IS_SET (ch->garou1, GAROU_CLENCHED))
{
stc ("You relax your jaw.\n\r", ch);
REMOVE_BIT (ch->garou1, GAROU_CLENCHED);
return;
}
if (!IS_GAR1 (ch, GAROU_CLENCHED))
{
stc ("You prepare to clench your jaw on your opponents.\n\r", ch);
SET_BIT (ch->garou1, GAROU_CLENCHED);
return;
}
return;
}
void do_silentwalk (CHAR_DATA * ch, char *argument)
{
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_ESHU)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Eshu kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_ESHU)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Eshu kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
send_to_char ("Your footsteps stop making any sound.\n\r", ch);
if (!IS_AFFECTED (ch, AFF_SNEAK))
{
SET_BIT (ch->affected_by, AFF_SNEAK);
return;
}
return;
}
void do_entrap (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
int sn;
int level;
int spelltype;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_SLUAGH)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sluagh kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_SLUAGH)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Sluagh kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("You cannot entrap yourself.\n\r", ch);
return;
}
if (IS_AFFECTED (victim, AFF_ETHEREAL))
{
send_to_char ("You cannot entrap an ethereal person.\n\r", ch);
return;
}
if ((sn = skill_lookup ("web")) < 0)
return;
spelltype = skill_table[sn].target;
level = ch->spl[spelltype] * 0.25;
(*skill_table[sn].spell_fun) (sn, level, ch, victim);
WAIT_STATE (ch, 12);
return;
}
void do_redclaws (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_REDCAP)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Redcap kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_REDCAP)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Redcap kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (IS_VAMPAFF (ch, VAM_CLAWS))
{
send_to_char
("You remove the blood stained claws from your wrists.\n\r", ch);
REMOVE_BIT (ch->pcdata->stats[UNI_AFF], VAM_CLAWS);
return;
}
send_to_char ("You attach blood stained claws to your wrists.\n\r", ch);
SET_BIT (ch->pcdata->stats[UNI_AFF], VAM_CLAWS);
return;
}
/* Changeling weapon command for Nockers */
void do_craftweapon (CHAR_DATA * ch, char *argument)
{
/* OBJ_INDEX_DATA *pObjIndex; */
OBJ_DATA *obj;
char arg[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
int vnum = 0;
argument = one_argument (argument, arg);
argument = one_argument (argument, arg2);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_FAE))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((!IS_SET (ch->kith, KITH_NOCKER)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Nocker kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_NOCKER)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the Nocker kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Command: craftweapon <color> <type>.\n\r", ch);
return;
}
if (arg2[0] == '\0')
{
send_to_char
("Please specify which type of chimerical weapon you wish to make:\n\rLongsword Axe Flail Dagger Spear Claw Mace.\n\r",
ch);
return;
}
if (!str_cmp (arg2, "longsword") && !str_cmp (arg, "copper"))
vnum = 229;
else if (!str_cmp (arg2, "axe") && !str_cmp (arg, "copper"))
vnum = 230;
else if (!str_cmp (arg2, "flail") && !str_cmp (arg, "copper"))
vnum = 231;
else if (!str_cmp (arg2, "dagger") && !str_cmp (arg, "copper"))
vnum = 232;
else if (!str_cmp (arg2, "spear") && !str_cmp (arg, "copper"))
vnum = 233;
else if (!str_cmp (arg2, "claw") && !str_cmp (arg, "copper"))
vnum = 234;
else if (!str_cmp (arg2, "mace") && !str_cmp (arg, "copper"))
vnum = 235;
else if (!str_cmp (arg2, "longsword") && !str_cmp (arg, "silver"))
vnum = 236;
else if (!str_cmp (arg2, "axe") && !str_cmp (arg, "silver"))
vnum = 237;
else if (!str_cmp (arg2, "flail") && !str_cmp (arg, "silver"))
vnum = 238;
else if (!str_cmp (arg2, "dagger") && !str_cmp (arg, "silver"))
vnum = 239;
else if (!str_cmp (arg2, "spear") && !str_cmp (arg, "silver"))
vnum = 240;
else if (!str_cmp (arg2, "claw") && !str_cmp (arg, "silver"))
vnum = 241;
else if (!str_cmp (arg2, "mace") && !str_cmp (arg, "silver"))
vnum = 242;
else if (!str_cmp (arg2, "longsword") && !str_cmp (arg, "gold"))
vnum = 243;
else if (!str_cmp (arg2, "axe") && !str_cmp (arg, "gold"))
vnum = 244;
else if (!str_cmp (arg2, "flail") && !str_cmp (arg, "gold"))
vnum = 245;
else if (!str_cmp (arg2, "dagger") && !str_cmp (arg, "gold"))
vnum = 246;
else if (!str_cmp (arg2, "spear") && !str_cmp (arg, "gold"))
vnum = 247;
else if (!str_cmp (arg2, "claw") && !str_cmp (arg, "gold"))
vnum = 248;
else if (!str_cmp (arg2, "mace") && !str_cmp (arg, "gold"))
vnum = 249;
else if (!str_cmp (arg2, "longsword") && !str_cmp (arg, "platinum"))
vnum = 250;
else if (!str_cmp (arg2, "axe") && !str_cmp (arg, "platinum"))
vnum = 251;
else if (!str_cmp (arg2, "flail") && !str_cmp (arg, "platinum"))
vnum = 252;
else if (!str_cmp (arg2, "dagger") && !str_cmp (arg, "platinum"))
vnum = 253;
else if (!str_cmp (arg2, "spear") && !str_cmp (arg, "platinum"))
vnum = 254;
else if (!str_cmp (arg2, "claw") && !str_cmp (arg, "platinum"))
vnum = 255;
else if (!str_cmp (arg2, "mace") && !str_cmp (arg, "platinum"))
vnum = 256;
else
{
send_to_char
("Please specify which type of chimerical weapon you wish to make:\n\rLongsword Axe Flail Dagger Spear Claw Mace.\n\r",
ch);
return;
}
if ((ch->pcdata->quest < 250) && !str_cmp (arg, "copper"))
{
send_to_char ("It costs 250 quest points to create a copper chimerical weapon.\n\r", ch);
return;
}
else if ((ch->pcdata->quest < 500) && !str_cmp (arg, "silver"))
{
send_to_char ("It costs 500 quest points to create a silver chimerical weapon.\n\r", ch);
return;
}
else if ((ch->pcdata->quest < 1000) && !str_cmp (arg, "gold"))
{
send_to_char ("It costs 1000 quest points to create a gold chimerical weapon.\n\r", ch);
return;
}
else if ((ch->pcdata->quest < 2000) && !str_cmp (arg, "platinum"))
{
send_to_char("It costs 2000 quest points to create a platinum chimerical weapon.\n\r", ch);
return;
}
/* if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) */
if (vnum == 0 || (obj = create_object (get_obj_index (vnum), 50)) == NULL)
{
send_to_char ("Missing object, please inform Nephesch.\n\r", ch);
return;
}
if (!str_cmp (arg, "copper"))
{
ch->pcdata->quest -= 250;
obj->points += 250;
obj->value[1] = 10;
obj->value[2] = 20;
}
else if (!str_cmp (arg, "silver"))
{
ch->pcdata->quest -= 500;
obj->points += 500;
obj->value[1] = 15;
obj->value[2] = 30;
}
else if (!str_cmp (arg, "gold"))
{
ch->pcdata->quest -= 1000;
obj->points += 1000;
obj->value[1] = 20;
obj->value[2] = 40;
}
else if (!str_cmp (arg, "platinum"))
{
ch->pcdata->quest -= 2000;
obj->points += 2000;
obj->value[1] = 25;
obj->value[2] = 50;
}
/* obj = create_object(pObjIndex, 50); */
SET_BIT (obj->quest, QUEST_RELIC);
SET_BIT (obj->value[0], 18000);
obj_to_char (obj, ch);
act ("$p forms in your hands in an explosion of glamour.", ch, obj, NULL,
TO_CHAR);
act ("$p forms in $n's hands in an explosion of glamour.", ch, obj, NULL,
TO_ROOM);
return;
}
void affect_to_obj (OBJ_DATA * obj, int dur, int loc, int mod)
{
AFFECT_DATA *paf;
if (affect_free == NULL)
{
paf = alloc_perm (sizeof (*paf));
}
else
{
paf = affect_free;
affect_free = affect_free->next;
}
paf->type = 0;
paf->duration = dur;
paf->modifier = mod;
paf->location = loc;
paf->bitvector = 0;
paf->next = obj->affected;
obj->affected = paf;
}
struct material_bonus
{
char *name;
int tohit;
int todam;
int ac;
};
struct location_bonus
{
char *name;
int location;
int affect;
};
static struct material_bonus material_table[] = {
{"copper", 3, 3, 50},
{"silver", 5, 5, 20},
{"gold", 10, 10, 5},
{"platinum", 15, 15, 75},
{"", 0, 0, 0,},
};
static struct location_bonus location_table[] = {
{"ring", ITEM_WEAR_FINGER + ITEM_TAKE, 0},
{"amulet", ITEM_WEAR_NECK + ITEM_TAKE, 0},
{"breastplate", ITEM_WEAR_BODY + ITEM_TAKE, 10},
{"cape", ITEM_WEAR_ABOUT + ITEM_TAKE, 0},
{"helm", ITEM_WEAR_HEAD + ITEM_TAKE, 1},
{"leggings", ITEM_WEAR_LEGS + ITEM_TAKE, 6},
{"boots", ITEM_WEAR_FEET + ITEM_TAKE, 9},
{"gauntlets", ITEM_WEAR_HANDS + ITEM_TAKE, 0},
{"sleeves", ITEM_WEAR_ARMS + ITEM_TAKE, 11},
{"belt", ITEM_WEAR_WAIST + ITEM_TAKE, 12},
{"bracer", ITEM_WEAR_WRIST + ITEM_TAKE, 0},
{"visor", ITEM_WEAR_FACE + ITEM_TAKE, 13},
{"", 0, 0},
};
void do_craftarmour (CHAR_DATA * ch, char *argument)
{
int i;
int cost;
int mat, loc;
char arg1[MIL], arg2[MIL];
char buf[MSL];
OBJ_DATA *obj;
argument = one_argument (argument, arg1);
argument = one_argument (argument, arg2);
if (!IS_CLASS (ch, CLASS_FAE))
{
do_rand_typo (ch);
return;
}
if ((!IS_SET (ch->kith, KITH_BOGGAN)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the boggan kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if ((IS_CLASS (ch, CLASS_FAE)) && (!IS_SET (ch->kith, KITH_BOGGAN)) && ((ch->pcdata->stats[UNI_GEN] > 2)))
{
send_to_char ("Only the boggan kiths and Gen 2 Fae can use this power.\n\r", ch);
return;
}
if (arg1[0] == '\0' || arg2[0] == '\0')
{
sprintf (buf, "%-12.12s %-12.12s %-12.12s %-12.12s\n\r", "Syntax:",
"CraftArmour", "Material", "Location");
stc (buf, ch);
for (i = 0; material_table[i].name[0] != '\0'; i++)
{
sprintf (buf, "%-12.12s %-12.12s %-12.12s %-12.12s\n\r",
" ", " ", material_table[i].name, location_table[i].name);
stc (buf, ch);
}
for (; location_table[i].name[0] != '\0'; i++)
{
sprintf (buf, "%-12.12s %-12.12s %-12.12s %-12.12s\n\r",
" ", " ", " ", location_table[i].name);
stc (buf, ch);
}
return;
}
for (i = 0; material_table[i].name[0] != '\0'; i++)
{
if (!str_cmp (material_table[i].name, arg1))
break;
}
if (material_table[i].name[0] == '\0')
{
stc ("Invalid Material.\n\r", ch);
do_craftarmour (ch, "");
return;
}
mat = i;
switch (mat)
{
default:
case 0:
cost = 100;
break;
case 1:
cost = 300;
break;
case 2:
cost = 600;
break;
case 3:
cost = 1500;
break;
}
if (ch->pcdata->quest < cost)
{
stc ("You do not have enough quest points to create that!\n\r", ch);
return;
}
for (i = 0; location_table[i].name[0] != '\0'; i++)
{
if (!str_cmp (location_table[i].name, arg2))
break;
}
if (location_table[i].name[0] == '\0')
{
stc ("Invalid Location.\n\r", ch);
do_craftarmour (ch, "");
return;
}
loc = i;
obj = create_object (get_obj_index (OBJ_VNUM_PROTOPLASM), mat * 15);
if (!obj)
{
stc ("Bug Please in form an immortals.\n\r", ch);
return;
}
ch->pcdata->quest -= cost;
obj->points = cost;
SET_BIT (obj->quest, QUEST_RELIC);
SET_BIT (obj->spectype, SITEM_FAE);
obj->weight = 1;
obj->condition = 100;
obj->toughness = 100;
obj->cost = mat * 10000;
obj->item_type = ITEM_ARMOR;
obj->value[0] = material_table[mat].ac;
obj->value[3] = location_table[loc].affect;
obj->wear_flags = location_table[loc].location;
FILL_STRING (obj->questowner, ch->name);
FILL_STRING (obj->questmaker, ch->name);
sprintf (buf, "%s %s", material_table[mat].name, location_table[loc].name);
FILL_STRING (obj->name, buf);
sprintf (buf, "a %s chimerical %s", material_table[mat].name,
location_table[loc].name);
FILL_STRING (obj->short_descr, buf);
sprintf (buf, "a %s chimerical %s glows softly.",
material_table[mat].name, location_table[loc].name);
FILL_STRING (obj->description, buf);
affect_to_obj (obj, -1, APPLY_HITROLL, material_table[mat].tohit);
affect_to_obj (obj, -1, APPLY_DAMROLL, material_table[mat].todam);
act ("a ball of Glamour solidifies in your hands.", ch, NULL, NULL,
TO_CHAR);
act ("a ball of Glamour solidifies in $n's hands.", ch, NULL, NULL,
TO_ROOM);
act ("You mold a ball of Glamour into $p.", ch, obj, NULL, TO_CHAR);
act ("$n molds a ball of Glamour into $p.", ch, obj, NULL, TO_ROOM);
obj_to_char (obj, ch);
}