/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* God Wars Mud originally written by KaVir aka Richard Woolcock. *
* Changes done to the code done by Sage aka Walter Howard, this mud is *
* for the public, however if you run this code it means you agree *
* to the license.low, license.gw, and license.merc have fun. :) *
***************************************************************************/
#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"
#include "commands.h"
void quest_clone args( ( CHAR_DATA *ch, OBJ_DATA *obj ) );
void clear_stats( CHAR_DATA *ch )
{
OBJ_DATA *obj;
OBJ_DATA *obj_next;
if (IS_NPC(ch)) return;
for ( obj = ch->carrying; obj != NULL; obj = obj_next )
{
obj_next = obj->next_content;
if ( obj->wear_loc != WEAR_NONE )
{obj_from_char(obj); obj_to_char(obj,ch);}
}
while ( ch->affected )
affect_remove( ch, ch->affected );
ch->armor = 100;
ch->hitroll = 0;
ch->damroll = 0;
ch->saving_throw = 0;
ch->pcdata->mod_str = 0;
ch->pcdata->mod_int = 0;
ch->pcdata->mod_wis = 0;
ch->pcdata->mod_dex = 0;
ch->pcdata->mod_con = 0;
save_char_obj( ch );
return;
}
void do_delevel( CHAR_DATA *ch, char *argument )
{
if (IS_NPC(ch) || !IS_IMMORTAL(ch))
{
send_to_char("Huh?\n\r", ch);
return;
}
ch->level = LEVEL_AVATAR;
ch->trust = 0;
send_to_char("Delevel Complete.\n\r", ch);
}
/* In case we need to remove our pfiles, or wanna turn mortal for a bit */
void do_relevel( CHAR_DATA *ch, char *argument )
{
if (IS_NPC(ch)) return;
if (!str_cmp(ch->name,"Insert IMP1 here") || !str_cmp(ch->name,"Insert IMP2 here") )
{
ch->level = MAX_LEVEL;
ch->trust = MAX_LEVEL;
ch->max_hit = 3000000;
ch->hit = ch->max_hit;
ch->max_mana = 30000;
ch->mana = ch->max_mana;
ch->max_move = 30000;
ch->move = ch->max_move;
send_to_char("Done.\n\r",ch);
}
else if(!str_cmp(ch->name,"Insert HighJudge here")
|| !str_cmp(ch->name,"Insert Highjudge here")
|| !str_cmp(ch->name,"Insert Highjudge here")
|| !str_cmp(ch->name,"Insert HighJudge here"))
{
if(ch->trust <= 11)ch->trust = 12;
else ch->trust = 11;
ch->level = 11;
}
else
send_to_char("Huh?\n\r",ch);
return;
}
void do_propose( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
one_argument( argument, arg );
if ( IS_NPC(ch) ) return;
if (strlen(ch->pcdata->marriage) > 1)
{
if (IS_EXTRA(ch, EXTRA_MARRIED))
send_to_char("But you are already married!\n\r",ch);
else
send_to_char("But you are already engaged!\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char("Who do you wish to propose marriage to?\n\r",ch);
return;
}
if ( ( victim = get_char_room(ch, arg) ) == NULL )
{
send_to_char("They are not here.\n\r",ch);
return;
}
if ( IS_NPC(victim) )
{
send_to_char("Not on NPC's.\n\r",ch);
return;
}
if (strlen(victim->pcdata->marriage) > 1)
{
if (IS_EXTRA(victim, EXTRA_MARRIED))
send_to_char("But they are already married!\n\r",ch);
else
send_to_char("But they are already engaged!\n\r",ch);
return;
}
if ( (ch->sex == SEX_MALE && victim->sex == SEX_FEMALE) ||
(ch->sex == SEX_FEMALE && victim->sex == SEX_MALE) )
{
ch->pcdata->propose = victim;
act("You propose marriage to $M.",ch,NULL,victim,TO_CHAR);
act("$n gets down on one knee and proposes to $N.",ch,NULL,victim,TO_NOTVICT);
act("$n asks you quietly 'Will you marry me?'",ch,NULL,victim,TO_VICT);
return;
}
send_to_char("I don't think that would be a very good idea...\n\r",ch);
return;
}
void do_accept( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
one_argument( argument, arg );
if ( IS_NPC(ch) ) return;
if (strlen(ch->pcdata->marriage) > 1)
{
if (IS_EXTRA(ch, EXTRA_MARRIED))
send_to_char("But you are already married!\n\r",ch);
else
send_to_char("But you are already engaged!\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char("Who's proposal of marriage do you wish to accept?\n\r",ch);
return;
}
if ( ( victim = get_char_room(ch, arg) ) == NULL )
{
send_to_char("They are not here.\n\r",ch);
return;
}
if ( IS_NPC(victim) )
{
send_to_char("Not on NPC's.\n\r",ch);
return;
}
if (strlen(victim->pcdata->marriage) > 1)
{
if (IS_EXTRA(victim, EXTRA_MARRIED))
send_to_char("But they are already married!\n\r",ch);
else
send_to_char("But they are already engaged!\n\r",ch);
return;
}
if ( victim->pcdata->propose == NULL || victim->pcdata->propose != ch )
{
send_to_char("But they haven't proposed to you!\n\r",ch);
return;
}
if ( (ch->sex == SEX_MALE && victim->sex == SEX_FEMALE) ||
(ch->sex == SEX_FEMALE && victim->sex == SEX_MALE) )
{
victim->pcdata->propose = NULL;
ch->pcdata->propose = NULL;
free_string(victim->pcdata->marriage);
victim->pcdata->marriage = str_dup( ch->name );
free_string(ch->pcdata->marriage);
ch->pcdata->marriage = str_dup( victim->name );
act("You accept $S offer of marriage.",ch,NULL,victim,TO_CHAR);
act("$n accepts $N's offer of marriage.",ch,NULL,victim,TO_NOTVICT);
act("$n accepts your offer of marriage.",ch,NULL,victim,TO_VICT);
save_char_obj(ch);
save_char_obj(victim);
sprintf(buf,"%s and %s are now engaged!",ch->name,victim->name);
do_info(ch,buf);
return;
}
send_to_char("I don't think that would be a very good idea...\n\r",ch);
return;
}
void do_breakup( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
one_argument( argument, arg );
if ( IS_NPC(ch) ) return;
if (strlen(ch->pcdata->marriage) > 1)
{
if (IS_EXTRA(ch, EXTRA_MARRIED))
{
send_to_char("You'll have to get divorced.\n\r",ch);
return;
}
}
else
{
send_to_char("But you are not even engaged!\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char("Who do you wish to break up with?\n\r",ch);
return;
}
if ( ( victim = get_char_room(ch, arg) ) == NULL )
{
send_to_char("They are not here.\n\r",ch);
return;
}
if ( IS_NPC(victim) )
{
send_to_char("Not on NPC's.\n\r",ch);
return;
}
if (strlen(victim->pcdata->marriage) > 1)
{
if (IS_EXTRA(victim, EXTRA_MARRIED))
{
send_to_char("They'll have to get divorced.\n\r",ch);
return;
}
}
else
{
send_to_char("But they are not even engaged!\n\r",ch);
return;
}
if (!str_cmp(ch->name, victim->pcdata->marriage) &&
!str_cmp(victim->name, ch->pcdata->marriage))
{
free_string(victim->pcdata->marriage);
victim->pcdata->marriage = str_dup( "" );
free_string(ch->pcdata->marriage);
ch->pcdata->marriage = str_dup( "" );
act("You break off your engagement with $M.",ch,NULL,victim,TO_CHAR);
act("$n breaks off $n engagement with $N.",ch,NULL,victim,TO_NOTVICT);
act("$n breaks off $s engagement with you.",ch,NULL,victim,TO_VICT);
save_char_obj(ch);
save_char_obj(victim);
sprintf(buf,"%s and %s have broken up!",ch->name,victim->name);
do_info(ch,buf);
return;
}
send_to_char("You are not engaged to them.\n\r",ch);
return;
}
void do_marry( CHAR_DATA *ch, char *argument )
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *victim1;
CHAR_DATA *victim2;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if (!IS_IMMORTAL(ch) && !IS_CLASS(ch, CLASS_PRIEST))
{
send_to_char("You're not a priest.\n\r",ch);
return;
}
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char("Syntax: marry <person> <person>\n\r",ch);
return;
}
if ( ( victim1 = get_char_room(ch, arg1) ) == NULL )
{
send_to_char("They are not here.\n\r",ch);
return;
}
if ( ( victim2 = get_char_room(ch, arg2) ) == NULL )
{
send_to_char("They are not here.\n\r",ch);
return;
}
if (IS_NPC(victim1) || IS_NPC(victim2))
{
send_to_char("Not on NPC's.\n\r",ch);
return;
}
if (!str_cmp(victim1->name, victim2->pcdata->marriage) &&
!str_cmp(victim2->name, victim1->pcdata->marriage))
{
SET_BIT(victim1->extra, EXTRA_MARRIED);
SET_BIT(victim2->extra, EXTRA_MARRIED);
save_char_obj(victim1);
save_char_obj(victim2);
sprintf(buf,"%s and %s are now married!",victim1->name,victim2->name);
do_info(ch,buf);
return;
}
send_to_char("But they are not yet engaged!\n\r",ch);
return;
}
void do_divorce( CHAR_DATA *ch, char *argument )
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MAX_INPUT_LENGTH];
CHAR_DATA *victim1;
CHAR_DATA *victim2;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char("Syntax: divorse <person> <person>\n\r",ch);
return;
}
if ( ( victim1 = get_char_room(ch, arg1) ) == NULL )
{
send_to_char("They are not here.\n\r",ch);
return;
}
if ( ( victim2 = get_char_room(ch, arg2) ) == NULL )
{
send_to_char("They are not here.\n\r",ch);
return;
}
if (IS_NPC(victim1) || IS_NPC(victim2))
{
send_to_char("Not on NPC's.\n\r",ch);
return;
}
if (IS_SET(victim1->act, PLR_GODLESS) && ch->level < NO_GODLESS)
{
send_to_char( "You failed.\n\r", ch );
return;
}
if (IS_SET(victim2->act, PLR_GODLESS) && ch->level < NO_GODLESS)
{
send_to_char( "You failed.\n\r", ch );
return;
}
if (!str_cmp(victim1->name, victim2->pcdata->marriage) &&
!str_cmp(victim2->name, victim1->pcdata->marriage))
{
if (!IS_EXTRA(victim1,EXTRA_MARRIED) || !IS_EXTRA(victim2,EXTRA_MARRIED))
{
send_to_char("But they are not married!\n\r",ch);
return;
}
REMOVE_BIT(victim1->extra, EXTRA_MARRIED);
REMOVE_BIT(victim2->extra, EXTRA_MARRIED);
free_string(victim1->pcdata->marriage);
victim1->pcdata->marriage = str_dup( "" );
free_string(victim2->pcdata->marriage);
victim2->pcdata->marriage = str_dup( "" );
save_char_obj(victim1);
save_char_obj(victim2);
sprintf(buf,"%s and %s are now divorced!",victim1->name,victim2->name);
do_info(ch,buf);
return;
}
send_to_char("But they are not married!\n\r",ch);
return;
}
void do_quest( CHAR_DATA *ch, char *argument )
{
char arg1 [MAX_STRING_LENGTH];
char arg2 [MAX_STRING_LENGTH];
char arg3 [MAX_STRING_LENGTH];
char buf[MAX_STRING_LENGTH];
OBJ_DATA *obj = NULL;
int value;
int add;
int remove;
if (IS_NPC(ch))
return;
smash_tilde( argument );
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
strcpy( arg3, argument );
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char( "- - - - - - - - - - ----====[ QUEST ITEM COSTS ]====---- - - - - - - - - - -\n\r", ch );
send_to_char( "Protection: Sets AC on armour at 1 QP per point.\n\r", ch );
send_to_char( "Min/Max: Sets min/max damage on weapon at 1 QP per point.\n\r", ch );
send_to_char( "Extra (add/remove): Glow(1/1), Hum(1/1), Invis(1/1), Anti-Good(1/10),\n\r"
" Anti-Neutral(1/10), Anti-Evil(1/10), Loyal(10/1).\n\r",ch );
send_to_char( "Power: Spell power for spell weapons. Costs 10 QP per power point.\n\r",ch );
send_to_char( "Spell: Spell weapons or affect. Costs 100 QP.\n\r",ch );
send_to_char( "Weight: Set objects weight to 1. Costs 100 QP.\n\r",ch );
send_to_char( "Str, Dex, Int, Wis, Con... max = 3 each, at 50 quest points per +1 stat.\n\r", ch);
send_to_char( "Hp, Mana, Move............ max = 25 each, at 20 quest points per point.\n\r", ch);
send_to_char( "Hitroll, Damroll.......... max = 10 each, at 50 quest points per point.\n\r", ch);
send_to_char( "Ac........................ max = -25, at 50 points per point.\n\r", ch);
send_to_char( "- - - - - - - - - - ----====[ QUEST ITEM COSTS ]====---- - - - - - - - - - -\n\r", ch );
return;
}
if ( ( obj = get_obj_carry( ch, arg1) ) == NULL )
{
send_to_char( "You are not carrying that item.\n\r", ch );
return;
}
if (obj->item_type == ITEM_QUEST || obj->item_type == ITEM_AMMO ||
obj->item_type == ITEM_EGG || obj->item_type == ITEM_VOODOO ||
obj->item_type == ITEM_MONEY || obj->item_type == ITEM_TREASURE ||
obj->item_type == ITEM_TOOL || obj->item_type == ITEM_SYMBOL ||
obj->item_type == ITEM_PAGE || IS_SET(obj->quest, QUEST_ARTIFACT))
{
send_to_char( "You cannot quest-change that item.\n\r", ch );
return;
}
if ( !IS_IMMORTAL(ch)
&& (obj->questowner == NULL || str_cmp(ch->name,obj->questowner)))
{
send_to_char("You can only change an item you own.\n\r", ch);
return;
}
/*
* Snarf the value (which need not be numeric).
*/
if ( arg3[0] != '\0' ) value = atoi( arg3 );
else value = 0;
if ( !str_cmp( arg2, "protection" ) )
{
if ( arg3[0] == '\0' )
{
send_to_char("How much armor class?\n\r", ch);
return;
}
if (obj->item_type != ITEM_ARMOR)
{
send_to_char("That item is not armor.\n\r", ch);
return;
}
else if (obj->item_type == ITEM_ARMOR && (value+obj->value[0]) > 15)
{
if (obj->value[0] < 15)
sprintf(buf,"The armor class can be increased by %d.\n\r",(15 - obj->value[0]));
else
sprintf(buf,"The armor class cannot be increased any further.\n\r");
send_to_char(buf, ch);
return;
}
else if (value > ch->pcdata->quest)
{
send_to_char("You don't have enough quest points.\n\r", ch);
return;
}
else
obj->value[0] += value;
if (obj->value[0] < 0)
obj->value[0] = 0;
send_to_char("Ok.\n\r",ch);
if (value < 1)
value = 1;
ch->pcdata->quest -= value;
if (obj->questmaker != NULL) free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
return;
}
if ( !str_cmp( arg2, "min" ) )
{
if ( arg3[0] == '\0' )
{
send_to_char("How much min damage?\n\r", ch);
return;
}
if (obj->item_type != ITEM_WEAPON)
{
send_to_char("That item is not a weapon.\n\r", ch);
return;
}
else if (obj->item_type == ITEM_WEAPON && (value+obj->value[1]) > 10)
{
if (obj->value[1] < 10)
sprintf(buf,"The minimum damage can be increased by %d.\n\r",(10 - obj->value[1]));
else
sprintf(buf,"The minimum damage cannot be increased any further.\n\r");
send_to_char(buf, ch);
return;
}
else if (value > ch->pcdata->quest)
{
send_to_char("You don't have enough quest points.\n\r", ch);
return;
}
else
obj->value[1] += value;
if (obj->value[1] < 1) obj->value[1] = 1;
send_to_char("Ok.\n\r",ch);
if (value < 1) value = 1;
ch->pcdata->quest -= value;
if (obj->questmaker != NULL) free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
return;
}
if ( !str_cmp( arg2, "max" ) )
{
if ( arg3[0] == '\0' )
{send_to_char("How much max damage?\n\r", ch); return;}
if (obj->item_type != ITEM_WEAPON)
{
send_to_char("That item is not a weapon.\n\r", ch);
return;
}
else if (obj->item_type == ITEM_WEAPON && (value+obj->value[2]) > 20)
{
if (obj->value[2] < 20)
sprintf(buf,"The maximum damage can be increased by %d.\n\r",(20 - obj->value[2]));
else
sprintf(buf,"The maximum damage cannot be increased any further.\n\r");
send_to_char(buf, ch);
return;
}
else if (value > ch->pcdata->quest)
{
send_to_char("You don't have enough quest points.\n\r", ch);
return;
}
else
obj->value[2] += value;
if (obj->value[2] < 0) obj->value[2] = 0;
send_to_char("Ok.\n\r",ch);
if (value < 1) value = 1;
ch->pcdata->quest -= value;
if (obj->questmaker != NULL) free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
return;
}
if ( !str_cmp( arg2, "extra" ) )
{
if ( arg3[0] == '\0' )
{
send_to_char("Enter one of: Glow, Hum, Invis, Anti-good, Anti-evil, Anti-neutral, Loyal,\n\rSilver.\n\r",ch);
return;
}
if ( !str_cmp( arg3, "glow" )) {value = ITEM_GLOW; add = 1; remove = 1;}
else if ( !str_cmp( arg3, "hum" )) {value = ITEM_HUM; add = 1; remove = 1;}
else if ( !str_cmp( arg3, "invis" )) {value = ITEM_INVIS; add = 1; remove = 1;}
else if ( !str_cmp( arg3, "anti-good" )) {value = ITEM_ANTI_GOOD; add = 1; remove = 10;}
else if ( !str_cmp( arg3, "anti-evil" )) {value = ITEM_ANTI_EVIL; add = 1; remove = 10;}
else if ( !str_cmp( arg3, "anti-neutral" )) {value = ITEM_ANTI_NEUTRAL; add = 1; remove = 10;}
else if ( !str_cmp( arg3, "loyal" )) {value = ITEM_LOYAL; add = 10; remove = 1;}
else if ( !str_cmp( arg3, "silver" )) {value = SITEM_SILVER; add = 100; remove = 0;}
else
{
send_to_char("Enter one of: Glow, Hum, Invis, Anti-good, Anti-evil, Anti-neutral, Loyal,\n\rSilver.\n\r",ch);
return;
}
if (!str_cmp( arg3, "silver" ))
{
if (IS_SET(obj->spectype, SITEM_SILVER))
{
send_to_char("That item is already silver.\n\r",ch);
return;
}
else if (ch->pcdata->quest < add)
{
sprintf(buf,"Sorry, you need %d quest points to set that flag.\n\r",
add);
send_to_char(buf,ch);
return;
}
ch->pcdata->quest -= add;
SET_BIT(obj->spectype, SITEM_SILVER);
}
else if (IS_SET(obj->extra_flags,value))
{
if (ch->pcdata->quest < remove)
{
sprintf(buf,"Sorry, you need %d quest points to remove that flag.\n\r",remove);
send_to_char(buf,ch);return;
}
ch->pcdata->quest -= remove;
REMOVE_BIT(obj->extra_flags, value);
}
else
{
if (ch->pcdata->quest < add)
{
sprintf(buf,"Sorry, you need %d quest points to set that flag.\n\r",add);
send_to_char(buf,ch);return;
}
ch->pcdata->quest -= add;
SET_BIT(obj->extra_flags, value);
}
send_to_char("Ok.\n\r",ch);
if (obj->questmaker != NULL) free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
return;
}
if ( !str_cmp( arg2, "replacespell" ) )
{
int weapon = 0;
int affect = 0;
if (obj->item_type == ITEM_BOOK)
{
send_to_char("Not on a book.\n\r",ch);
return;
}
if ( arg3[0] == '\0' )
{
send_to_char("Spell weapons: Acid, Dark, Holy, Vampiric, Flaming, Electrified, Poisonous.\n\r",ch);
send_to_char("Spell affects: Blind, Seeinvis, Fly,Infravision, Invis, Passdoor, Protection,\n\rSanct, Sneak, Shockshield,Fireshield, Iceshield, Acidshield, Seehidden.\n\r",ch);
return;
}
if ( !str_cmp( arg3, "acid" )) weapon = 1;
else if ( !str_cmp( arg3, "dark" )) weapon = 4;
else if ( !str_cmp( arg3, "holy" )) weapon = 30;
else if ( !str_cmp( arg3, "vampiric" )) weapon = 34;
else if ( !str_cmp( arg3, "flaming" )) weapon = 37;
else if ( !str_cmp( arg3, "electrified" )) weapon = 48;
else if ( !str_cmp( arg3, "poisonous" )) weapon = 53;
else if ( !str_cmp( arg3, "infravision" )) affect = 1;
else if ( !str_cmp( arg3, "seeinvis" )) affect = 2;
else if ( !str_cmp( arg3, "fly" )) affect = 3;
else if ( !str_cmp( arg3, "blind" )) affect = 4;
else if ( !str_cmp( arg3, "invis" )) affect = 5;
else if ( !str_cmp( arg3, "passdoor" )) affect = 6;
else if ( !str_cmp( arg3, "protection" )) affect = 7;
else if ( !str_cmp( arg3, "sanct" )) affect = 8;
else if ( !str_cmp( arg3, "sneak" )) affect = 9;
else if ( !str_cmp( arg3, "shockshield" )) affect = 10;
else if ( !str_cmp( arg3, "fireshield" )) affect = 11;
else if ( !str_cmp( arg3, "iceshield" )) affect = 12;
else if ( !str_cmp( arg3, "acidshield" )) affect = 13;
else if ( !str_cmp( arg3, "seehidden" )) affect = 60;
else
{
send_to_char("Spell weapons: Dark, Holy, Vampiric, Flaming, Electrified, Poisonous.\n\r",ch);
send_to_char("Spell affects: Blind, Seeinvis, Fly,Infravision, Invis, Passdoor, Protection,\n\rSanct, Sneak, Shockshield, Fireshield, Iceshield, Acidshield, Seehidden.\n\r",ch);
return;
}
if (obj->item_type != ITEM_WEAPON && weapon > 0)
{
send_to_char("You can only put that power on a weapon.\n\r", ch);
return;
}
else if (obj->item_type != ITEM_WEAPON && obj->item_type != ITEM_ARMOR && affect > 0)
{
send_to_char("You can only put that power on a weapon or a piece of armour.\n\r", ch);
return;
}
else if (ch->pcdata->quest < 100 )
{
send_to_char("It costs 100 quest points to create a spell weapon or affect.\n\r", ch);
return;
}
if (weapon > 0)
{
obj->value[0] = weapon;
}
else if (affect > 0)
{
obj->value[4] = affect;
}
ch->pcdata->quest -= 100;
send_to_char("Ok.\n\r",ch);
if (obj->questmaker != NULL) free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
return;
}
if ( !str_cmp( arg2, "spell" ) )
{
int weapon = 0;
int affect = 0;
if (obj->item_type == ITEM_BOOK)
{
send_to_char("Not on a book.\n\r",ch);
return;
}
if ( arg3[0] == '\0' )
{
send_to_char("Spell weapons: Acid, Dark, Holy, Vampiric, Flaming, Electrified, Poisonous.\n\r",ch);
send_to_char("Spell affects: Blind, Seeinvis, Fly, Infravision, Invis, Passdoor, Protection,\n\rSanct, Sneak, Shockshield, Fireshield, Iceshield, Acidshield, Seehidden.\n\r",ch);
return;
}
if ( !str_cmp( arg3, "acid" )) weapon = 1;
else if ( !str_cmp( arg3, "dark" )) weapon = 4;
else if ( !str_cmp( arg3, "holy" )) weapon = 30;
else if ( !str_cmp( arg3, "vampiric" )) weapon = 34;
else if ( !str_cmp( arg3, "flaming" )) weapon = 37;
else if ( !str_cmp( arg3, "electrified" )) weapon = 48;
else if ( !str_cmp( arg3, "poisonous" )) weapon = 53;
else if ( !str_cmp( arg3, "infravision" )) affect = 1;
else if ( !str_cmp( arg3, "seeinvis" )) affect = 2;
else if ( !str_cmp( arg3, "fly" )) affect = 3;
else if ( !str_cmp( arg3, "blind" )) affect = 4;
else if ( !str_cmp( arg3, "invis" )) affect = 5;
else if ( !str_cmp( arg3, "passdoor" )) affect = 6;
else if ( !str_cmp( arg3, "protection" )) affect = 7;
else if ( !str_cmp( arg3, "sanct" )) affect = 8;
else if ( !str_cmp( arg3, "sneak" )) affect = 9;
else if ( !str_cmp( arg3, "shockshield" )) affect = 10;
else if ( !str_cmp( arg3, "fireshield" )) affect = 11;
else if ( !str_cmp( arg3, "iceshield" )) affect = 12;
else if ( !str_cmp( arg3, "acidshield" )) affect = 13;
else if ( !str_cmp( arg3, "seehidden" )) affect = 60;
else
{
send_to_char("Spell weapons: Dark, Holy, Vampiric, Flaming, Electrified, Poisonous.\n\r",ch);
send_to_char("Spell affects: Blind, Seeinvis, Fly, Infravision, Invis, Passdoor, Protection,\n\rSanct, Sneak, Shockshield, Fireshield, Iceshield, Acidshield, Seehidden.\n\r",ch);
return;
}
if (obj->item_type != ITEM_WEAPON && weapon > 0)
{
send_to_char("You can only put that power on a weapon.\n\r", ch);
return;
}
else if (obj->item_type != ITEM_WEAPON && obj->item_type != ITEM_ARMOR && affect > 0)
{
send_to_char("You can only put that power on a weapon or a piece of armour.\n\r", ch);
return;
}
else if (ch->pcdata->quest < 100 )
{
send_to_char("It costs 100 quest points to create a spell weapon or affect.\n\r", ch);
return;
}
if (weapon > 0)
{
if ( obj->value[0] != 0 )
{
send_to_char("That item already has a spell weapon power. If you wish to replace the \n\rcurrent spell power, use the format: quest <object> replacespell <spell>.\n\r",ch);
return;
}
obj->value[0] = weapon;
}
else if (affect > 0)
{
if ( obj->value[4] > 0 )
{
send_to_char("That item already has a spell affect power. If you wish to replace the \n\rcurrent spell power, use the format: quest <object> replacespell <spell>.\n\r",ch);
return;
}
obj->value[4] = affect;
}
ch->pcdata->quest -= 100;
send_to_char("Ok.\n\r",ch);
if (obj->questmaker != NULL) free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
return;
}
if ( !str_cmp( arg2, "power" ) )
{
if ( arg3[0] == '\0' )
{
send_to_char("Please specify the amount of power.\n\r",ch);
return;
}
if (obj->item_type != ITEM_WEAPON)
{
send_to_char("Only weapons have a spell power.\n\r",ch);
return;
}
else if (obj->level >= 50)
{
send_to_char("This weapon can hold no more spell power.\n\r",ch);
return;
}
else if (value + obj->level > 50)
{
sprintf(buf,"You can only add %d more spell power to this weapon.\n\r",(50 - obj->level));
send_to_char(buf,ch);
return;
}
else if (value < 1 )
{
send_to_char("Keep to Positive values.\n\r",ch);
return;
}
else if ((value*10) > ch->pcdata->quest)
{
send_to_char("You don't have enough quest points to increase the spell power.\n\r",ch);
return;
}
obj->level += value;
if (obj->level < 0) obj->level = 0;
if (value < 1) value = 1;
ch->pcdata->quest -= (value*10);
send_to_char("Ok.\n\r",ch);
if (obj->questmaker != NULL)
free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
return;
}
if ( !str_cmp( arg2, "weight" ) )
{
if (obj->weight < 2)
{
send_to_char("You cannot reduce the weight of this item any further.\n\r",ch);
return;
}
else if (ch->pcdata->quest < 100)
{
send_to_char("It costs 100 quest point to remove the weight of an object.\n\r",ch);
return;
}
obj->weight = 1;
ch->pcdata->quest -= 100;
send_to_char("Ok.\n\r",ch);
if (obj->questmaker != NULL) free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
return;
}
if ( arg3[0] == '\0' )
{
send_to_char( "- - - - - - - - - - ----====[ QUEST ITEM COSTS ]====---- - - - - - - - - - -\n\r", ch );
send_to_char( "Protection: Sets AC on armour at 1 QP per point.\n\r", ch );
send_to_char( "Min/Max: Sets min/max damage on weapon at 1 QP per point.\n\r", ch );
send_to_char( "Extra (add/remove): Glow(1/1), Hum(1/1), Invis(1/1), Anti-Good(1/10),\n\r"
" Anti-Neutral(1/10), Anti-Evil(1/10), Loyal(10/1).\n\r",ch );
send_to_char( "Power: Spell power for spell weapons. Costs 10 QP per power point.\n\r",ch );
send_to_char( "Spell: Spell weapons or affect. Costs 100 QP.\n\r",ch );
send_to_char( "Weight: Set objects weight to 1. Costs 100 QP.\n\r",ch );
send_to_char( "Str, Dex, Int, Wis, Con... max = 3 each, at 50 quest points per +1 stat.\n\r", ch);
send_to_char( "Hp, Mana, Move............ max = 25 each, at 20 quest points per point.\n\r", ch);
send_to_char( "Hitroll, Damroll.......... max = 10 each, at 50 quest points per point.\n\r", ch);
send_to_char( "Ac........................ max = -25, at 50 points per point.\n\r", ch);
send_to_char( "- - - - - - - - - - ----====[ QUEST ITEM COSTS ]====---- - - - - - - - - - -\n\r", ch );
return;
}
if (obj->item_type != ITEM_BOOK)
{
if( !str_cmp( arg2, "hitroll" ) || !str_cmp( arg2, "hit" ) )
{
oset_affect(ch,obj,value,APPLY_HITROLL,TRUE);
return;
}
else if ( !str_cmp( arg2, "damroll" ) || !str_cmp( arg2, "dam" ) )
{oset_affect(ch,obj,value,APPLY_DAMROLL,TRUE);return;}
else if ( !str_cmp( arg2, "armor" ) || !str_cmp( arg2, "ac" ) )
{oset_affect(ch,obj,value,APPLY_AC,TRUE);return;}
else if ( !str_cmp( arg2, "hitpoints" ) || !str_cmp( arg2, "hp" ) )
{oset_affect(ch,obj,value,APPLY_HIT,TRUE);return;}
else if ( !str_cmp( arg2, "mana" ) )
{oset_affect(ch,obj,value,APPLY_MANA,TRUE);return;}
else if ( !str_cmp( arg2, "move" ) || !str_cmp( arg2, "movement" ) )
{oset_affect(ch,obj,value,APPLY_MOVE,TRUE);return;}
else if ( !str_cmp( arg2, "str" ) || !str_cmp( arg2, "strength" ) )
{oset_affect(ch,obj,value,APPLY_STR,TRUE);return;}
else if ( !str_cmp( arg2, "dex" ) || !str_cmp( arg2, "dexterity" ) )
{oset_affect(ch,obj,value,APPLY_DEX,TRUE);return;}
else if ( !str_cmp( arg2, "int" ) || !str_cmp( arg2, "intelligence" ) )
{oset_affect(ch,obj,value,APPLY_INT,TRUE);return;}
else if ( !str_cmp( arg2, "wis" ) || !str_cmp( arg2, "wisdom" ) )
{oset_affect(ch,obj,value,APPLY_WIS,TRUE);return;}
else if ( !str_cmp( arg2, "con" ) || !str_cmp( arg2, "constitution" ) )
{oset_affect(ch,obj,value,APPLY_CON,TRUE);return;}
}
return;
}
void quest_clone( CHAR_DATA *ch, OBJ_DATA *obj )
{
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj2;
AFFECT_DATA *paf;
AFFECT_DATA *paf2;
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 (obj2->questmaker != NULL) free_string(obj2->questmaker);
obj2->questmaker=str_dup(ch->name);
if (obj->chpoweron != NULL && obj->points >= 50)
{
free_string(obj2->chpoweron);
obj2->chpoweron=str_dup(obj->chpoweron);
}
if (obj->chpoweroff != NULL && obj->points >= 50)
{
free_string(obj2->chpoweroff);
obj2->chpoweroff=str_dup(obj->chpoweroff);
}
if (obj->chpoweruse != NULL && obj->points >= 50)
{
free_string(obj2->chpoweruse);
obj2->chpoweruse=str_dup(obj->chpoweruse);
}
if (obj->victpoweron != NULL && obj->points >= 50)
{
free_string(obj2->victpoweron);
obj2->victpoweron=str_dup(obj->victpoweron);
}
if (obj->victpoweroff != NULL && obj->points >= 50)
{
free_string(obj2->victpoweroff);
obj2->victpoweroff=str_dup(obj->victpoweroff);
}
if (obj->victpoweruse != NULL && obj->points >= 50)
{
free_string(obj2->victpoweruse);
obj2->victpoweruse=str_dup(obj->victpoweruse);
}
if (obj->points >= 50)
{
obj2->spectype = obj->spectype;
obj2->specpower = obj->specpower;
}
obj2->item_type = obj->item_type;
obj2->extra_flags = obj->extra_flags;
obj2->wear_flags = obj->wear_flags;
obj2->weight = obj->weight;
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;
}
}
act( "$p splits into two identical objects.", ch, obj, NULL, TO_CHAR );
return;
}
void oset_affect( CHAR_DATA *ch, OBJ_DATA *obj, int value, int affect, bool is_quest )
{
char buf [MAX_STRING_LENGTH];
AFFECT_DATA *paf;
int quest;
int range;
int cost;
int max;
if (IS_NPC(ch))
{
send_to_char("Switch back, smart ass.\n\r", ch);
return;
}
if (value == 0)
{
send_to_char("Please enter a positive or negative amount.\n\r", ch);
return;
}
if (!IS_JUDGE(ch) && (obj->questowner == NULL))
{
send_to_char("First you must set the owners name on the object.\n\r", ch);
return;
}
if (!IS_JUDGE(ch) && (obj->questmaker == NULL ||
str_cmp(ch->name,obj->questmaker)) && !is_quest )
{
send_to_char("That item has already been oset by someone else.\n\r", ch);
return;
}
if ( affect == APPLY_STR ) {range = 3; cost = 50 ; quest = QUEST_STR;}
else if ( affect == APPLY_DEX ) {range = 3; cost = 50 ; quest = QUEST_DEX;}
else if ( affect == APPLY_INT ) {range = 3; cost = 50 ; quest = QUEST_INT;}
else if ( affect == APPLY_WIS ) {range = 3; cost = 50 ; quest = QUEST_WIS;}
else if ( affect == APPLY_CON ) {range = 3; cost = 50 ; quest = QUEST_CON;}
else if ( affect == APPLY_HIT ) {range = 25; cost = 20 ; quest = QUEST_HIT;}
else if ( affect == APPLY_MANA ) {range = 25; cost = 20 ; quest = QUEST_MANA;}
else if ( affect == APPLY_MOVE ) {range = 25; cost = 20 ; quest = QUEST_MOVE;}
else if ( affect == APPLY_HITROLL ) {range = 10; cost = 50 ; quest = QUEST_HITROLL;}
else if ( affect == APPLY_DAMROLL ) {range = 10; cost = 50 ; quest = QUEST_DAMROLL;}
else if ( affect == APPLY_AC ) {range = 25; cost = 50 ; quest = QUEST_AC;}
else return;
if ( obj->pIndexData->vnum == OBJ_VNUM_PROTOPLASM )
{
range *= 2;
max = 4000 + (ch->race * 50);
if( IS_OBJ_STAT( obj, ITEM_SATANIC ) )
{
range *= 3;
max *= 3;
}
}
else if( IS_OBJ_STAT(obj,ITEM_SATANIC) )
{
max = 6000 + (ch->race * 50);
range *= 3;
}
else
max = 2000 + (ch->race * 50);
if (obj->item_type == ITEM_WEAPON)
{
max *= 2;
range *= 2;
}
if ( !IS_JUDGE(ch) && ((value > 0 && value > range) ||
(value < 0 && value < (range-range-range))) )
{
send_to_char("That is not within the acceptable range...\n\r", ch);
return;
}
if ( quest >= QUEST_HIT && value < 0 ) cost *= (value - (value*2));
else cost *= value;
if ( cost < 0 ) cost = 0;
if (!IS_JUDGE(ch) && IS_SET(obj->quest, quest) )
{
send_to_char("That affect has already been set on this object.\n\r", ch);
return;
}
if (!IS_JUDGE(ch) && (obj->points + cost > max))
{
sprintf(buf,"You are limited to %d quest points per item.\n\r",max);
send_to_char(buf, ch);
return;
}
if (is_quest && ch->pcdata->quest < cost)
{
sprintf(buf,"That costs %d quest points, while you only have %d.\n\r",cost, ch->pcdata->quest);
send_to_char(buf, ch);
return;
}
if (!IS_SET(obj->quest, quest) ) SET_BIT(obj->quest,quest);
if (is_quest) ch->pcdata->quest -= cost;
obj->points += cost;
if (obj->questmaker != NULL) free_string(obj->questmaker);
obj->questmaker = str_dup(ch->name);
if ( affect_free == NULL )
{
paf = alloc_perm( sizeof(*paf) );
}
else
{
paf = affect_free;
affect_free = affect_free->next;
}
paf->type = 0;
paf->duration = -1;
paf->location = affect;
paf->modifier = value;
paf->bitvector = 0;
paf->next = obj->affected;
obj->affected = paf;
send_to_char("Ok.\n\r",ch);
return;
}
/* Following is Code From Shimian, Cset, and Unclass use to see how to make your own,
or just leave it in, leaving shimians credit there :)
Generation is Code from tijer :)*/
/* */
/* Online Master Class Creation added by Shimian */
/* Also set's highlander's (-: woo woo :-) */
/* */
void do_classset( CHAR_DATA *ch, char *argument )
{
char arg1 [MAX_INPUT_LENGTH];
char arg2 [MAX_INPUT_LENGTH];
char arg3 [MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
CHAR_DATA *victim;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
if ( IS_NPC(ch)) return;
/* */
/* Thou shall not create classes unless you are an Imp */
/* */
/* KaVir suggestion: 28-11-97. Replace your 'if' with:
if ( get_trust(ch) < LEVEL_IMPLEMENTOR )
*/
if ( ( ch->trust < MAX_LEVEL ) && ( ch->level < MAX_LEVEL ) )
{
send_to_char("Huh?\n\r",ch);
return;
}
/* */
/* Yeah right, an NPC Demon Lord ;) */
/* */
if ( arg1[0] == '\0' || arg2[0] == '\0' )
{
send_to_char( "Syntax: cset <victim> <class>\n\r",ch );
send_to_char( "or: cset <victim> mage <colour>\n\r",ch );
send_to_char( "\n\r",ch );
send_to_char( "Class being one of:\n\r",ch );
send_to_char( " vampire werewolf demon mage\n\r", ch );
send_to_char( "\n\r",ch );
send_to_char( "Colour being one of:\n\r",ch );
send_to_char( " purple red blue green yellow\n\r",ch );
return;
}
if ( ( victim = get_char_world( 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",ch);
return;
}
/* */
/* Make sure they are Avatar */
/* */
if ( victim->level < 3 )
{
send_to_char("They need to become an Avatar first!",ch);
return;
}
/* */
/* Make sure they don't already have a class */
/* */
/* KaVir suggestion: 28-11-97. Replace your 'if' with:
if ( victim->class != 0 || IS_SET(victim->special,SPC_CHAMPION )
*/
if ( (IS_SET(victim->class, CLASS_VAMPIRE ) ) ||
(IS_SET(victim->class, CLASS_WEREWOLF ) ) ||
(IS_SET(victim->class, CLASS_MAGE ) ) ||
(IS_SET(victim->class, CLASS_HIGHLANDER ) ) ||
(IS_SET(victim->class, CLASS_DEMON ) ) ||
(IS_SET(victim->special, SPC_CHAMPION ) ) )
{
send_to_char("They need to be cleared of their current class first!",ch);
return;
}
/* */
/* Do you wanna make 'em the Master Vampire */
/* */
if ( !str_cmp( arg2, "vampire") )
{
victim->class = CLASS_VAMPIRE;
free_string(victim->lord);
victim->lord = str_dup( "" );
victim->pcdata->stats[UNI_GEN] = 1;
victim->beast = 0;
SET_BIT(victim->immune, IMM_SUNLIGHT);
sprintf(buf,"%s is now Master Vampire.",victim->name);
do_info(ch,buf);
sprintf( log_buf, "%s has been made Master Vampire by %s",victim->name,ch->name);
log_string( log_buf );
send_to_char("You are now the Master Vampire!\n\r",victim);
if ( ch != victim )
{
send_to_char("You make them Master Vampire\n\r",ch);
do_mclear(victim,victim->name);
return;
}
do_mclear(victim,victim->name);
return;
}
/* */
/* Do you wanna make 'em the Master Werewolf */
/* */
if ( !str_cmp( arg2, "werewolf") )
{
victim->class = CLASS_WEREWOLF;
free_string(victim->lord);
victim->lord = str_dup( "" );
victim->pcdata->stats[UNI_GEN] = 1;
sprintf(buf,"%s is now Master Werewolf.",victim->name);
do_info(ch,buf);
sprintf( log_buf, "%s has been made Master Werewolf by %s",victim->name,ch->name);
log_string( log_buf );
send_to_char("You are now the Master Werewolf!\n\r",victim);
if ( ch != victim )
{
send_to_char("You make them Master Werewolf\n\r",ch);
do_mclear(victim,victim->name);
return;
}
do_mclear(victim,victim->name);
return;
}
/* */
/* Check if you wanna make 'em Demon Lord */
/* */
if ( !str_cmp( arg2, "demon") )
{
victim->class = CLASS_DEMON;
free_string(victim->lord);
victim->lord = str_dup( "" );
victim->special = SPC_DEMON_LORD;
sprintf(buf,"%s is now Demon Lord.",victim->name);
do_info(ch,buf);
sprintf( log_buf, "%s has been made Demon Lord by %s",victim->name, ch->name);
log_string( log_buf );
send_to_char("You are now the Demon Lord!\n\r",victim);
if ( ch != victim )
{
send_to_char("You make them Demon Lord\n\r",ch);
do_mclear(victim,victim->name);
return;
}
do_mclear(victim,victim->name);
return;
}
/* */
/* Check if you wanna make 'em a Highlander */
/* */
/*
if ( !str_cmp( arg2, "highlander") )
{
victim->class = CLASS_HIGHLANDER;
free_string(victim->lord);
victim->lord = str_dup( "" );
victim->pcdata->powers[0] = 1;
victim->pcdata->stats[0] = 1;
sprintf( log_buf, "%s has been made a Highlander by %s",victim->name, ch->name);
log_string( log_buf);
send_to_char("You are a Highlander!\n\r",victim);
if ( ch != victim )
{
send_to_char("You make them a Highlander!\n\r",ch);
send_to_char("Don't forget their Katana! [29695]\n\r",ch);
do_mclear(victim,victim->name);
return;
}
do_mclear(victim,victim->name);
return;
}
*/
if ( ( !str_cmp( arg2, "dragon" ) ) )
{
victim->class = CLASS_DRAGON;
victim->pcdata->disc_a[DRAGON_COLOR] = number_range(1,9);
victim->pcdata->disc_a[DRAGON_AGE] = 1;
return;
}
/* */
/* Check if you want to make 'em an Archmage */
/* */
if ( (!str_cmp( arg2, "mage") ) )
{
if ( (!str_cmp( arg3, "purple") ) ||
(!str_cmp( arg3, "red" ) ) ||
(!str_cmp( arg3, "blue" ) ) ||
(!str_cmp( arg3, "green" ) ) ||
(!str_cmp( arg3, "yellow") ) )
{
victim->class = CLASS_MAGE;
victim->level = 6;
victim->trust = 6;
free_string(victim->lord);
victim->lord = str_dup( "" );
/* */
/* Give Archmages all Runes, Sigils and Glyphs */
/* */
victim->pcdata->powers[1] = 2047;
victim->pcdata->powers[2] = 1023;
victim->pcdata->powers[3] = 15;
/* */
/* Check for colour of Archmage */
/* */
if ( !str_cmp( arg3, "purple") )
victim->pcdata->powers[0] = 0;
if ( !str_cmp( arg3, "red") )
victim->pcdata->powers[0] = 1;
if ( !str_cmp( arg3, "blue") )
victim->pcdata->powers[0] = 2;
if ( !str_cmp( arg3, "green") )
victim->pcdata->powers[0] = 3;
if ( !str_cmp( arg3, "yellow") )
victim->pcdata->powers[0] = 4;
sprintf(buf,"%s is now the %s Archmage.",victim->name, arg3);
do_info(ch,buf);
sprintf( log_buf, "%s has been made the %s Archmage by %s",victim->name,arg3, ch->name);
log_string( log_buf );
send_to_char("You are now an Archmage!\n\r",victim);
if ( ch != victim )
{
send_to_char("You make them an Archmage!\n\r",ch);
do_mclear(victim,victim->name);
return;
}
do_mclear(victim,victim->name);
return;
}
else
{
send_to_char("Syntax : cset <victim> mage <colour>\n\r",ch);
send_to_char("\n\r",ch);
send_to_char("Colour being one of:\n\r",ch);
send_to_char(" purple red blue green yellow\n\r",ch);
return;
}
}
send_to_char( "Syntax: cset <victim> <class>\n\r",ch );
send_to_char( "or: cset <victim> mage <colour>\n\r",ch );
send_to_char( "\n\r",ch );
send_to_char( "Class being one of:\n\r",ch );
send_to_char( " vampire werewolf highlander demon mage\n\r", ch );
send_to_char( "\n\r",ch );
send_to_char( "Colour being one of:\n\r",ch );
send_to_char( " purple red blue green yellow\n\r",ch );
return;
}
/* End of Class Creation */
/*
void do_generation(CHAR_DATA *ch, char *argument)
{
CHAR_DATA *victim;
char buf[MAX_STRING_LENGTH];
int value;
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 (arg1[0] == '\0')
{
send_to_char("Syntax: generation <victim> <value>.\n\r",ch);
return;
}
if ((victim=get_char_world(ch,arg1)) == NULL)
{
send_to_char("They aren't here.\n\r",ch);
return;
}
if (!IS_CLASS(victim,CLASS_WEREWOLF))
{
if (!IS_CLASS(victim,CLASS_VAMPIRE))
{
if (!IS_IMMORTAL(victim))
{
send_to_char("They need to be either Werewolf of Vampire.\n\r",ch);
return;
}
}
}
value = is_number(arg2) ? atoi (arg2): -1;
if (value <1 || value >7)
{
send_to_char("Invalid Generation.\n\r",ch);
return;
}
else
{
victim->pcdata->stats[UNI_GEN] = value;
sprintf(buf,"You are now generation %d.\n\r",value);
send_to_char(buf,ch);
}
return;
}
*/
void do_unclas( CHAR_DATA *ch, char *argument )
{
if ( (ch->trust < (MAX_LEVEL - 2)) && (ch->level < (MAX_LEVEL - 2) ))
send_to_char( "Huh?\n\r", ch );
else
send_to_char( "If you want to UNCLASS, spell it out.\n\r", ch );
return;
}
void do_unclass( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
one_argument( argument, arg );
if (IS_NPC(ch)) return;
if ( arg[0] == '\0' || is_number(arg) )
{
send_to_char( "Unclass whom?\n\r", ch );
return;
}
if ( ( victim = get_char_world( 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 ( (victim->level == MAX_LEVEL && ch != victim) )
{
send_to_char("Not om Imps.\n\r",ch);
return;
}
if (IS_SET(victim->act, PLR_GODLESS) && get_trust(ch) < NO_GODLESS
&& !IS_SET(ch->extra , EXTRA_ANTI_GODLESS))
{
send_to_char( "You failed.\n\r", ch );
return;
}
if (IS_CLASS(victim,CLASS_VAMPIRE)) do_mortalvamp(victim,"");
if (IS_CLASS(victim,CLASS_WEREWOLF)) do_unwerewolf(victim,"");
free_string(victim->lord);
victim->lord = str_dup( "" );
free_string(victim->clan);
victim->clan = str_dup( "" );
free_string(victim->morph);
victim->pcdata->stats[UNI_GEN] = 0;
victim->pcdata->stats[UNI_AFF] = 0;
victim->pcdata->stats[UNI_CURRENT] = -1;
/* Remove Mage Magic level's */
if (victim->spl[PURPLE_MAGIC] > 200) victim->spl[PURPLE_MAGIC] = 200;
if (victim->spl[RED_MAGIC] > 200) victim->spl[RED_MAGIC] = 200;
if (victim->spl[BLUE_MAGIC] > 200) victim->spl[BLUE_MAGIC] = 200;
if (victim->spl[GREEN_MAGIC] > 200) victim->spl[GREEN_MAGIC] = 200;
if (victim->spl[YELLOW_MAGIC] > 200) victim->spl[YELLOW_MAGIC] = 200;
/* Remove Highlander weapon skill's */
if (victim->wpn[0] > 200) victim->wpn[0] = 200;
if (victim->wpn[1] > 200) victim->wpn[1] = 200;
if (victim->wpn[2] > 200) victim->wpn[2] = 200;
if (victim->wpn[3] > 200) victim->wpn[3] = 200;
if (victim->wpn[4] > 200) victim->wpn[4] = 200;
if (victim->wpn[5] > 200) victim->wpn[5] = 200;
if (victim->wpn[6] > 200) victim->wpn[6] = 200;
if (victim->wpn[7] > 200) victim->wpn[7] = 200;
if (victim->wpn[8] > 200) victim->wpn[8] = 200;
if (victim->wpn[9] > 200) victim->wpn[9] = 200;
if (victim->wpn[10] > 200) victim->wpn[10] = 200;
if (victim->wpn[11] > 200) victim->wpn[11] = 200;
if (victim->wpn[12] > 200) victim->wpn[12] = 200;
REMOVE_BIT(victim->special, SPC_SIRE);
REMOVE_BIT(victim->special, SPC_PRINCE);
REMOVE_BIT(victim->special, SPC_ANARCH);
REMOVE_BIT(victim->special, SPC_CHAMPION);
REMOVE_BIT(victim->special, SPC_DEMON_LORD);
REMOVE_BIT(victim->special, SPC_INCONNU);
REMOVE_BIT(victim->special, SPC_WOLFMAN);
victim->pcdata->stats[UNI_RAGE] = 0;
victim->pcdata->rank = AGE_CHILDE;
victim->pcdata->powers[WPOWER_MANTIS] = 0;
victim->pcdata->powers[WPOWER_BEAR] = 0;
victim->pcdata->powers[WPOWER_LYNX] = 0;
victim->pcdata->powers[WPOWER_BOAR] = 0;
victim->pcdata->powers[WPOWER_OWL] = 0;
victim->pcdata->powers[WPOWER_SPIDER] = 0;
victim->pcdata->powers[WPOWER_WOLF] = 0;
victim->pcdata->powers[WPOWER_HAWK] = 0;
victim->pcdata->powers[WPOWER_SILVER] = 0;
victim->pcdata->powers[DPOWER_FLAGS] = 0;
victim->pcdata->powers[DPOWER_CURRENT] = 0;
victim->pcdata->powers[DPOWER_HEAD] = 0;
victim->pcdata->powers[DPOWER_TAIL] = 0;
victim->pcdata->powers[DPOWER_OBJ_VNUM] = 0;
victim->pcdata->stats[UNI_FORM0] = 0;
victim->pcdata->stats[UNI_FORM1] = 0;
victim->pcdata->stats[WOLF_POLYAFF] = 0;
victim->pcdata->stats[DEMON_CURRENT] = 0;
victim->pcdata->stats[DEMON_TOTAL] = 0;
victim->pcdata->stats[DEMON_POWER] = 0;
victim->polyaff = 0;
victim->class = 0;
victim->home = 3001;
victim->level = 2;
send_to_char( "Unclass complete.\n\r", ch );
return;
}