/**********************************************************************************************************
* *
*
* wolf.c by Spiralsoft (Dan Mendek) all rights reserved
* copyright Lurking Fear.. Not to be used anywhere else
* use anywhere else will will cause me to violate your
* civils rights and find you and Kill you.
* Have a nice day.
*
*
*************************************************************************************************************/
#include <glib.h>
#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 <interp.h>
#include <player.h>
#include <tables.h>
#include <fight.h>
#include <power.h>
#include <recycle.h>
// Werewolf notes....
/*
* Renown = hours (base on vamp age) and temp renown.
*/
void get_obj args( ( CHAR_DATA *ch, OBJ_DATA *obj,
OBJ_DATA *container ) );
char *get_shape_name( CHAR_DATA *ch )
{
static char buf[MAX_STRING_LENGTH];
switch (ch->pcdata->wwf_shape)
{
case SHAPE_CRINOS:
str_cpy(buf,"crinos");
return buf;
case SHAPE_HISPO:
str_cpy(buf,"hispo");
return buf;
case SHAPE_HOMID:
str_cpy(buf,"homid");
return buf;
case SHAPE_GLABRO:
str_cpy(buf,"glabro");
return buf;
case SHAPE_LUPUS:
str_cpy(buf,"lupus");
return buf;
default:
str_cpy(buf, "ERROR IN SHAPE Note Spiral or Dominion for support");
return buf;
}
str_cpy(buf, "");
return buf;
}
void retract_extra ( CHAR_DATA *ch )
{
ch->morph = g_string_assign(ch->morph,"");
if (IS_VAMPAFF(ch,VAM_CLAWS))
{
send_to_char("Your talons slide back into your fingers.\n\r",ch);
act("$n's talons slide back into $s fingers.",ch,NULL,NULL,TO_ROOM);
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS);
}
if (IS_VAMPAFF(ch,VAM_FANGS))
{
send_to_char("Your fangs slide back into your mouth.\n\r",ch);
act("$n's fangs slide back into $s mouth.",ch,NULL,NULL,TO_ROOM);
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_FANGS);
}
if (IS_VAMPAFF(ch,VAM_NIGHTSIGHT))
{
send_to_char("The red glow in your eyes fades.\n\r",ch);
act("The red glow in $n's eyes fades.",ch,NULL,NULL,TO_ROOM);
REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
}
}
void extend_extra ( CHAR_DATA *ch )
{
if (!IS_VAMPAFF(ch,VAM_NIGHTSIGHT))
{
send_to_char("Your eyes start glowing red.\n\r",ch);
act("$n's eyes start glowing red.",ch,NULL,NULL,TO_ROOM);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT);
}
if (!IS_VAMPAFF(ch,VAM_FANGS))
{
send_to_char("A pair of long fangs extend from your mouth.\n\r",ch);
act("A pair of long fangs extend from $n's mouth.",ch,NULL,NULL,TO_ROOM);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_FANGS);
}
if (!IS_VAMPAFF(ch,VAM_CLAWS))
{
send_to_char("Razor sharp talons extend from your fingers.\n\r",ch);
act("Razor sharp talons extend from $n's fingers.",ch,NULL,NULL,TO_ROOM);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS);
}
SET_BIT(ch->affected_by, AFF_POLYMORPH);
SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_DISGUISED);
}
void change_string (CHAR_DATA *ch)
{
char buf[MAX_STRING_LENGTH];
switch ( ch->pcdata->wwf_shape)
{
case SHAPE_CRINOS:
str_cpy(buf,"a strange beast");
ch->morph = g_string_assign(ch->morph,buf);
if (!IS_SET(ch->affected_by,AFF_POLYMORPH))
SET_BIT(ch->affected_by, AFF_POLYMORPH);
break;
case SHAPE_GLABRO:
sprintf(buf,"a strange human");
ch->morph = g_string_assign(ch->morph,buf);
if (!IS_SET(ch->affected_by,AFF_POLYMORPH))
SET_BIT(ch->affected_by, AFF_POLYMORPH);
break;
case SHAPE_HOMID:
if (ch->sex == 1)
{
if (IS_SET(ch->affected_by,AFF_POLYMORPH))
REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
ch->morph = g_string_assign(ch->morph,"");
}
else
{
if (IS_SET(ch->affected_by,AFF_POLYMORPH))
REMOVE_BIT(ch->affected_by, AFF_POLYMORPH);
ch->morph = g_string_assign(ch->morph,"");
}
break;
case SHAPE_HISPO:
sprintf(buf,"a very large wolf");
ch->morph = g_string_assign(ch->morph,buf);
if (!IS_SET(ch->affected_by,AFF_POLYMORPH))
SET_BIT(ch->affected_by, AFF_POLYMORPH);
break;
case SHAPE_LUPUS:
sprintf(buf,"a wolf");
ch->morph = g_string_assign(ch->morph,buf);
if (!IS_SET(ch->affected_by,AFF_POLYMORPH))
SET_BIT(ch->affected_by, AFF_POLYMORPH);
break;
}
}
void wwf_wear( CHAR_DATA *ch, OBJ_DATA *obj)
{
if ( CAN_WEAR( obj, ITEM_WIELD ) || CAN_WEAR( obj, ITEM_HOLD ) ||
CAN_WEAR( obj, ITEM_WEAR_SHIELD ))
{
if (get_eq_char( ch, WEAR_WIELD ) == NULL )
{
if (obj->item_type == ITEM_WEAPON)
{
equip_char( ch, obj, WEAR_WIELD );
return;
}
equip_char( ch, obj, WEAR_WIELD );
return;
}
else if (get_eq_char( ch, WEAR_HOLD ) == NULL )
{
if (obj->item_type == ITEM_WEAPON)
{
equip_char( ch, obj, WEAR_HOLD );
return;
}
equip_char( ch, obj, WEAR_HOLD );
return;
}
return;
}
if ( obj->item_type == ITEM_LIGHT )
{
equip_char( ch, obj, WEAR_LIGHT );
return;
}
if ( obj->item_type == ITEM_WWF_CONT )
{
equip_char( ch, obj, WEAR_HIDDEN );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_FINGER ) )
{
if ( get_eq_char( ch, WEAR_FINGER_L ) == NULL )
{
equip_char( ch, obj, WEAR_FINGER_L );
return;
}
else if ( get_eq_char( ch, WEAR_FINGER_R ) == NULL )
{
equip_char( ch, obj, WEAR_FINGER_R );
return;
}
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_NECK ) )
{
if ( get_eq_char( ch, WEAR_NECK_1 ) == NULL )
{
equip_char( ch, obj, WEAR_NECK_1 );
return;
}
if ( get_eq_char( ch, WEAR_NECK_2 ) == NULL )
{
equip_char( ch, obj, WEAR_NECK_2 );
return;
}
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_BODY ) )
{
equip_char( ch, obj, WEAR_BODY );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_HEAD ) )
{
equip_char( ch, obj, WEAR_HEAD );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_FACE ) )
{
equip_char( ch, obj, WEAR_FACE );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_LEGS ) )
{
equip_char( ch, obj, WEAR_LEGS );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_FEET ) )
{
equip_char( ch, obj, WEAR_FEET );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_HANDS ) )
{
equip_char( ch, obj, WEAR_HANDS );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_ARMS ) )
{
equip_char( ch, obj, WEAR_ARMS );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_ABOUT ) )
{
equip_char( ch, obj, WEAR_ABOUT );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_WAIST ) )
{
equip_char( ch, obj, WEAR_WAIST );
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_WRIST ) )
{
if ( get_eq_char( ch, WEAR_WRIST_L ) == NULL )
{
equip_char( ch, obj, WEAR_WRIST_L );
return;
}
else if ( get_eq_char( ch, WEAR_WRIST_R ) == NULL )
{
equip_char( ch, obj, WEAR_WRIST_R );
return;
}
return;
}
if ( CAN_WEAR( obj, ITEM_WEAR_SHIELD ) )
{
equip_char( ch, obj, WEAR_SHIELD );
return;
}
if ( CAN_WEAR( obj, ITEM_WIELD ) )
{
equip_char( ch, obj, WEAR_WIELD );
return;
}
return;
}
void remaff( OBJ_DATA *obj)
{
AFFECT_DATA *paf,*paf_next;
for ( paf = obj->affected; paf != NULL; paf = paf_next )
{
paf_next = paf->next;
affect_remove_obj(obj,paf);
}
return;
}
void convert_stats( OBJ_DATA *obj, OBJ_DATA *objcont)
{
AFFECT_DATA *paf;
int sn;
for ( paf = obj->affected; paf != NULL; paf = paf->next )
{
if ( paf->bitvector != 1 && obj->value[0] != 5)
affect_to_obj(objcont,paf);
}
if (obj->item_type == ITEM_ARMOR)
sn = obj->value[3];
else
sn = obj->value[0] / 1000;
if (sn == 4) SET_BIT(objcont->value[0], AFF_BLIND);
if (sn == 39) SET_BIT(objcont->value[0], AFF_FLYING);
if (sn == 46) SET_BIT(objcont->value[0], AFF_INVISIBLE);
if (sn == 52) SET_BIT(objcont->value[0], AFF_PASS_DOOR);
if (sn == 54) SET_BIT(objcont->value[0], AFF_PROTECT);
if (sn == 57) SET_BIT(objcont->value[0], AFF_SANCTUARY);
if (sn == 3 ) SET_BIT(objcont->value[0], AFF_FLYING);
if (sn == 5 ) SET_BIT(objcont->value[0], AFF_INVISIBLE);
if (sn == 6 ) SET_BIT(objcont->value[0], AFF_PASS_DOOR);
if (sn == 7 ) SET_BIT(objcont->value[0], AFF_PROTECT);
if (sn == 8 ) SET_BIT(objcont->value[0], AFF_SANCTUARY);
if (sn == 9 ) SET_BIT(objcont->value[0], AFF_SNEAK);
if (sn == 10) SET_BIT(objcont->value[1], ITEMA_SHOCKSHIELD);
if (sn == 11) SET_BIT(objcont->value[1], ITEMA_FIRESHIELD);
if (sn == 12) SET_BIT(objcont->value[1], ITEMA_ICESHIELD);
if (sn == 13) SET_BIT(objcont->value[1], ITEMA_ACIDSHIELD);
if (sn == 14) SET_BIT(objcont->value[1], ITEMA_DBPASS);
if (sn == 15) SET_BIT(objcont->value[1], ITEMA_CHAOSSHIELD);
if (sn == 16) SET_BIT(objcont->value[1], ITEMA_REGENERATE);
if (sn == 17) SET_BIT(objcont->value[1], ITEMA_SPEED);
if (sn == 18) SET_BIT(objcont->value[1], ITEMA_VORPAL);
if (sn == 19) SET_BIT(objcont->value[1], ITEMA_PEACE);
if (sn == 20) SET_BIT(objcont->value[1], ITEMA_REFLECT);
if (sn == 21) SET_BIT(objcont->value[1], ITEMA_RESISTANCE);
if (sn == 22) SET_BIT(objcont->value[1], ITEMA_VISION);
if (sn == 23) SET_BIT(objcont->value[1], ITEMA_STALKER);
if (sn == 24) SET_BIT(objcont->value[1], ITEMA_VANISH);
if (sn == 25) SET_BIT(objcont->value[1], ITEMA_RAGER);
if (sn == 66) SET_BIT(objcont->value[1], ITEMA_FORTITUDE);
}
void shape_shift( CHAR_DATA *ch, int change)
{
OBJ_DATA *obj,*obj_con,*obj_next;
if (ch->pcdata->wwf_shape == change)
return;
switch (ch->pcdata->wwf_shape)
{
case SHAPE_HOMID:
/* put sprintf here on description of transformation */
send_to_char("You howl as your body starts to change.\n\r",ch);
send_to_char("Your hair starts to grow longer then it usally is.\n\r",ch);
send_to_char("You feel your body grow with a surge of power!.\n\r",ch);
act("$n grins as thier body grow with a surge of power!",ch,NULL,NULL,TO_ROOM);
extend_extra(ch);
break;
case SHAPE_GLABRO:
send_to_char("You howl as your body starts to change.\n\r",ch);
if ( change == SHAPE_HOMID )
{
send_to_char("Your body returns to normal weight.\n\r",ch);
act("$n's body returns to normal weight.",ch,NULL,NULL,TO_ROOM);
retract_extra(ch);
}
else
{
send_to_char("You feel your body grow with a surge of power!\n\r",ch);
act("$n grins as thier body grow with a surge of power!",ch,NULL,NULL,TO_ROOM);
}
/* put sprintf here on description of transformation */
break;
case SHAPE_CRINOS:
if ( change == SHAPE_HISPO )
{
send_to_char("You scream with rage as your body hunches over into the form of a wolf.\n\r",ch);
act("$n screams with rage as thier body hunches over into the form of a wolf.",ch,NULL,NULL,TO_ROOM);
}
else
{
send_to_char("Your body weight and size starts to shrink.\n\r",ch);
act("$n's body weight and size starts to shrink.",ch,NULL,NULL,TO_ROOM);
}
/* put sprintf here on description of transformation */
break;
case SHAPE_HISPO:
if ( change == SHAPE_CRINOS )
{
send_to_char("You feel your body grow with a surge of power!\n\r",ch);
act("$n's body grows past 6 feet tall as you watch in horror to a transformation in to a walking beast!",ch,NULL,NULL,TO_ROOM);
extend_extra(ch);
}
else
{
send_to_char("You body shrinks to that of a normal wolf.\n\r",ch);
act("$n's body shrinks to that of a normal wolf.",ch,NULL,NULL,TO_ROOM);
retract_extra(ch);
}
/* put sprintf here on description of transformation */
break;
case SHAPE_LUPUS:
/* put sprintf here on description of transformation */
send_to_char("Your body mass grows to the size of a large wolf.\n\r",ch);
act("$n's body mass grows to the size of a large wolf",ch,NULL,NULL,TO_ROOM);
break;
}
/* success! transform them in to what they want */
if (change == SHAPE_CRINOS
|| change == SHAPE_HISPO
|| change == SHAPE_LUPUS)
{
//Create the Container
if ((obj_con = get_eq_char(ch,WEAR_HIDDEN)) == NULL )
{
//send_to_char("Bug, container should be there.\n\r",ch);
obj_con = create_object(get_obj_index(OBJ_VNUM_FEARBAG),ch->level);
obj_con->item_type = ITEM_WWF_CONT;
obj_to_char(obj_con,ch);
wwf_wear(ch,obj_con);
}
unequip_char(ch,obj_con);
if ((obj = get_eq_char(ch,WEAR_LIGHT)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_FINGER_L)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_FINGER_R)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_NECK_1)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_NECK_2)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_BODY)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_HEAD)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_LEGS)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_FEET)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_SHIELD)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_HANDS)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_ARMS)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_ABOUT)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_WAIST)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_WIELD)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_HOLD)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_WRIST_L)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_WRIST_R)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_FACE)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_SCABBARD_L)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_SCABBARD_R)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT))
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
//wear the eq..
wwf_wear(ch,obj_con);
}
if (change == SHAPE_HOMID)
{
//Give back all thier eq..
if ((obj_con = get_eq_char(ch,WEAR_HIDDEN)) != NULL )
{
unequip_char(ch,obj_con);
for (obj = obj_con->contains; obj != NULL; obj = obj_next)
{
obj_next = obj->next_content;
if (obj->item_type == ITEM_WWF_CONT)
continue;
obj_from_obj(obj);
remaff(obj_con);
obj_to_char(obj,ch);
wwf_wear(ch,obj);
}
obj_from_char(obj_con);
extract_obj(obj_con);
}
retract_extra(ch);
}
if (change == SHAPE_GLABRO)
{
if ((obj_con = get_eq_char(ch,WEAR_HIDDEN)) == NULL )
{
obj_con = create_object(get_obj_index(OBJ_VNUM_FEARBAG),ch->level);
obj_con->item_type = ITEM_WWF_CONT;
obj_to_char(obj_con,ch);
wwf_wear(ch,obj_con);
}
else
{
//remove_obj(ch,WEAR_HIDDEN,TRUE);
//Get all the eq OUT!!
//DEVON!! GET THE TABLES!!!!
for (obj = obj_con->contains; obj != NULL; obj = obj_next)
{
obj_next = obj->next_content;
unequip_char(ch,obj_con);
if (obj->item_type == ITEM_WWF_CONT)
continue;
if (obj->wear_loc == WEAR_HOLD || obj->wear_loc == WEAR_WIELD)
continue;
obj_from_obj(obj);
obj_to_char(obj,ch);
remaff(obj_con);
wwf_wear(ch,obj);
wwf_wear(ch,obj_con);
//wear_obj(ch,obj,TRUE);
}
}
unequip_char(ch,obj_con);
if ((obj = get_eq_char(ch,WEAR_WIELD)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
if ((obj = get_eq_char(ch,WEAR_HOLD)) != NULL && !IS_SET(obj->quest, QUEST_ARTIFACT) )
{
unequip_char( ch, obj );
obj_from_char(obj);
convert_stats(obj,obj_con);
obj_to_obj(obj, obj_con);
}
wwf_wear(ch,obj_con);
}
ch->pcdata->wwf_shape = change;
change_string(ch);
ch->pcdata->rage_points--;
}
void do_shapeshift( CHAR_DATA *ch, char *argument )
{
char arg[MAX_STRING_LENGTH];
//char buf[MAX_STRING_LENGTH];
sh_int change = 0;
argument = one_argument(argument,arg);
if (IS_NPC(ch))
{
do_say(ch,"Yea right buddie, like i'm a werewolf");
return;
}
if (!IS_CLASS(ch,CLASS_SWWF))
{
send_to_char("huh?\n\r",ch);
return;
}
if ( arg[0] == '\0' )
{
send_to_char( "Forms: homid, glabro, crinos, hispo, lupus.\n\r", ch );
return;
}
if (!strcmp(arg,"homid"))
change = SHAPE_HOMID;
if (!strcmp(arg,"glabro"))
change = SHAPE_GLABRO;
if (!strcmp(arg,"crinos"))
change = SHAPE_CRINOS;
if (!strcmp(arg,"hispo"))
change = SHAPE_HISPO;
if (!strcmp(arg,"lupus"))
change = SHAPE_LUPUS;
/* find out what current shape they are in and if they can transform */
if ( ch->pcdata->rage_points <= 0 )
{
send_to_char("You must have a bit of rage to perform this feat.\n\r",ch);
return;
}
if (number_percent() < 25 && ch->pcdata->gnosis < number_range(1,20))
{
send_to_char("Your rage has taken over your mind, not allowing you to concentrait.\n\r",ch);
return;
}
switch (ch->pcdata->wwf_shape)
{
case SHAPE_HOMID:
if ( change != SHAPE_GLABRO )
{
send_to_char("You can only change in to glabro form from homid.\n\r",ch);
return;
}
break;
case SHAPE_GLABRO:
if ( change != SHAPE_HOMID && change != SHAPE_CRINOS )
{
send_to_char("Homid and Crinos are only availble in this form.\n\r",ch);
return;
}
break;
case SHAPE_CRINOS:
if ( change != SHAPE_GLABRO && change != SHAPE_HISPO )
{
send_to_char("Glabro and Hispo are only availble in this form.\n\r",ch);
return;
}
break;
case SHAPE_HISPO:
if ( change != SHAPE_CRINOS && change != SHAPE_LUPUS )
{
send_to_char("Crinos and Lupus are only availble in this form.\n\r",ch);
return;
}
break;
case SHAPE_LUPUS:
if ( change != SHAPE_HISPO )
{
send_to_char("You can only change in to hispo form from lupus.\n\r",ch);
return;
}
/* put sprintf here on description of transformation */
break;
}
shape_shift(ch,change);
}
sh_int get_renown( CHAR_DATA *ch )
{
sh_int l_table;
switch (ch->pcdata->sgift[2])
{
case AUSPICE_RAGABASH:
for (l_table = 0; l_table < 6;l_table++)
{
if (ch->pcdata->renown[RENOWN_HONOR] >= ragabash_table[l_table].honor
&& ch->pcdata->renown[RENOWN_GLORY] >= ragabash_table[l_table].glory
&& ch->pcdata->renown[RENOWN_WISDOM] >= ragabash_table[l_table].wisdom)
continue;
return l_table -1;
}
return 5;
break;
case AUSPICE_THEURGE:
for (l_table = 0; l_table < 6;l_table++)
{
if (ch->pcdata->renown[RENOWN_HONOR] >= theurge_table[l_table].honor
&& ch->pcdata->renown[RENOWN_GLORY] >= theurge_table[l_table].glory
&& ch->pcdata->renown[RENOWN_WISDOM] >= theurge_table[l_table].wisdom)
continue;
return l_table -1;
}
return 5;
break;
case AUSPICE_PHILODOX:
for (l_table = 0; l_table < 6;l_table++)
{
if (ch->pcdata->renown[RENOWN_HONOR] >= philodox_table[l_table].honor
&& ch->pcdata->renown[RENOWN_GLORY] >= philodox_table[l_table].glory
&& ch->pcdata->renown[RENOWN_WISDOM] >= philodox_table[l_table].wisdom)
continue;
return l_table -1;
}
return 5;
break;
case AUSPICE_GALLIARD:
for (l_table = 0; l_table < 6;l_table++)
{
if (ch->pcdata->renown[RENOWN_HONOR] >= galliard_table[l_table].honor
&& ch->pcdata->renown[RENOWN_GLORY] >= galliard_table[l_table].glory
&& ch->pcdata->renown[RENOWN_WISDOM] >= galliard_table[l_table].wisdom)
continue;
return l_table -1;
}
return 5;
break;
case AUSPICE_AHROUN:
for (l_table = 0; l_table < 6;l_table++)
{
if (ch->pcdata->renown[RENOWN_HONOR] >= ahroun_table[l_table].honor
&& ch->pcdata->renown[RENOWN_GLORY] >= ahroun_table[l_table].glory
&& ch->pcdata->renown[RENOWN_WISDOM] >= ahroun_table[l_table].wisdom)
continue;
return l_table -1;
}
return 5;
break;
}
return 1;
}
/*
** get_max_rage
*
* FILENAME: C:\LURF\CODE\wolf.c
*
* PARAMETERS: CHAR_DATA *ch
*
* DESCRIPTION: this function finds out our max rage for a player. Rage depends on how
* much you play lurf = vampire age.
*
* RETURNS: 100-500 rage points are max rage.
*
*/
int get_max_rage( CHAR_DATA *ch )
{
int ch_age = (get_age(ch) - 17) * 2; /* hours calculation */
int RAGE;
if (ch_age >= 1500 && get_renown(ch) >= 4) RAGE = 500;
else if (ch_age >= 800 && get_renown(ch) >= 3) RAGE = 400;
else if (ch_age >= 400 && get_renown(ch) >= 2) RAGE = 300;
else if (ch_age >= 200 && get_renown(ch) >= 1) RAGE = 200;
else RAGE = 100;
if (IS_ITEMAFF(ch,ITEMA_RAGER))
{
RAGE += 100;
}
return RAGE;
}
char *get_renown_rankname( int rank ){
switch (rank){
case 0:
return "Renown Lacking";
break;
case 1:
return "Cliath";
break;
case 2:
return "Fostern";
break;
case 3:
return "Adren";
break;
case 4:
return "Athro";
break;
case 5:
return "Elder";
break;
default:
return "Renown is broke on you!";
break;
}
}
/*
* Show the status of the garou in question
*
*/
void do_garou_status ( CHAR_DATA *ch, char *argument )
{
char arg[MAX_STRING_LENGTH];
char buf[MAX_STRING_LENGTH];
CHAR_DATA *vch;
argument = one_argument(argument,arg);
if (!IS_CLASS(ch,CLASS_SWWF) && !IS_IMMORTAL(ch))
{
send_to_char("huh?\n\r",ch);
return;
}
if ( arg[0] == '\0' || !IS_IMMORTAL(ch) )
vch = ch;
else if ( (vch = get_char_world(ch,arg)) == NULL )
{
send_to_char("Get a garoustat on who?\n\r", ch);
return;
}
if (!IS_CLASS(vch,CLASS_SWWF))
{
send_to_char("Your victim is not Garou!\n\r",ch);
return;
}
send_to_char("\n\r",ch);
sprintf(buf,"%s%s\n\r",vch->name->str,vch->pcdata->title->str);
send_to_char(buf,ch);
send_to_char("--------------------------------------------------------------------------------\n\r",ch);
sprintf(buf,"{RRenown: {W [{C%2d {W] [{C%4s{W] ( {RHonor: {W[{C%2d {W] {RGlory: {W[{C%2d {W] {RWisdom: {W[{C%2d {W]{w ){x\n\r", get_renown(vch), get_renown_rankname(get_renown(vch)), vch->pcdata->renown[RENOWN_HONOR], vch->pcdata->renown[RENOWN_GLORY], vch->pcdata->renown[RENOWN_WISDOM]);
send_to_char(buf,ch);
sprintf(buf,"{RTemporay: {W( {RHonor: {W[{C%2d {W] {RGlory: {W[{C%2d {W] {RWisdom: {W[{C%2d {W]{w ){x\n\r", vch->pcdata->Trenown[TRENOWN_HONOR], vch->pcdata->Trenown[TRENOWN_GLORY], vch->pcdata->Trenown[TRENOWN_WISDOM]);
send_to_char(buf,ch);
sprintf(buf,"{RRage Points {W[{C%3d{W] {RGnosis {W[{C%2d{W]{x\n\r", vch->pcdata->rage_points, vch->pcdata->gnosis);
send_to_char(buf,ch);
sprintf(buf,"{RForm: {W[{C%s{W] {RTribe {W[{C%s{W]{x\n\r", get_shape_name(vch),iclan_table[vch->clan].pretty_name);
send_to_char(buf,ch);
sprintf(buf,"{RBreed: {W[{C%s{W] {RAuspice {W[{C%s{W]{x\n\r", breed_table[vch->pcdata->sgift[1]].haunt, auspice_table[vch->pcdata->sgift[2]].haunt);
send_to_char(buf,ch);
send_to_char("--------------------------------------------------------------------------------\n\r",ch);
}
/* update only for the very special wwf */
void update_wwf ()
{
CHAR_DATA *wch,*wch_next;
int rage_gain = 1;
int rage_loss = 1;
for ( wch = char_list; wch != NULL; wch = wch_next )
{
wch_next = wch->next;
//check for linky dead people
if (!IS_NPC(wch) && wch->desc == NULL)
continue;
if (IS_NPC(wch))
continue;
if (!IS_CLASS(wch,CLASS_SWWF))
continue;
if (!IS_AVATAR(wch))
continue;
if (IS_IMMORTAL(wch))
continue;
if (IS_SET(wch->added, ADDED_FRENZY) && wch->fighting == NULL)
REMOVE_BIT(wch->added, ADDED_FRENZY);
//Wwf mana regen
if (wch->mana < wch->max_mana)
wch->mana += number_range(1,(int)((double)wch->max_mana * .1));
//Wwf heal.. Book says one rank per turn.. turn = (Ummmm)
if (wch->hit < wch->max_hit)
{
if (wch->fighting != NULL || IS_AFFECTED(wch,AFF_AGGDAM))
wch->hit += (int)((double)wch->max_hit * .05);
else
wch->hit += (int)((double)wch->max_hit * .1);
update_pos(wch);
}
spell_clot(skill_lookup("clot"), AUTO_REGEN, wch, wch);
spell_mend(skill_lookup("mend"), AUTO_REGEN, wch, wch);
if (wch->loc_hp[6] > 0)
{
int sn = skill_lookup( "clot" );
(*skill_table[sn].spell_fun) (sn,wch->level,wch,wch);
}
else
{
if ((wch->loc_hp[0] + wch->loc_hp[1] + wch->loc_hp[2] +
wch->loc_hp[3] + wch->loc_hp[4] + wch->loc_hp[5]) != 0)
reg_mend(wch);
}
//Check for freenzy...
if ( wch->pcdata->rage_points > (int)((double)get_max_rage(wch) * .75 ))
{
if ( wch->fighting != NULL && wch->pcdata->willpower < number_range(1,20) && wch->pcdata->gnosis < number_range(1,20))
{
//enter the FRENZY!!!
send_to_char("You start to howl as your world turns {RRED{x\n\r",wch);
//if not crinos make it so...
if ( wch->pcdata->wwf_shape != SHAPE_CRINOS )
{
shape_shift(wch,SHAPE_CRINOS);
}
SET_BIT(wch->added, ADDED_FRENZY);
//fight or flight...
if (number_percent() < 50)
wch->pcdata->frenzy_action = FRENZY_FIGHT;
else
wch->pcdata->frenzy_action = FRENZY_FLIGHT;
}
}
if (time_info.hour < 6 || time_info.hour > 18)
{
switch (weather_info[wch->in_room->sector_type].moon)
{
default:
rage_gain = 1;
break;
case MOON_FULL:
switch (wch->pcdata->sgift[2])
{
case AUSPICE_RAGABASH:
rage_gain = 13;
break;
case AUSPICE_THEURGE:
rage_gain = 20;
break;
case AUSPICE_PHILODOX:
rage_gain = 13;
break;
case AUSPICE_GALLIARD:
rage_gain = 20;
break;
case AUSPICE_AHROUN:
rage_gain = 40;
break;
}
break;
case MOON_NEW:
switch (wch->pcdata->sgift[2])
{
case AUSPICE_RAGABASH:
rage_gain = 50;
break;
case AUSPICE_THEURGE:
rage_gain = 13;
break;
case AUSPICE_PHILODOX:
rage_gain = 13;
break;
case AUSPICE_GALLIARD:
rage_gain = 20;
break;
case AUSPICE_AHROUN:
rage_gain = 20;
break;
}
break;
case MOON_1_QUART:
switch (wch->pcdata->sgift[2])
{
case AUSPICE_RAGABASH:
rage_gain = 13;
break;
case AUSPICE_THEURGE:
rage_gain = 40;
break;
case AUSPICE_PHILODOX:
rage_gain = 13;
break;
case AUSPICE_GALLIARD:
rage_gain = 13;
break;
case AUSPICE_AHROUN:
rage_gain = 20;
break;
}
break;
case MOON_LAST_QUART:
switch (wch->pcdata->sgift[2])
{
case AUSPICE_RAGABASH:
rage_gain = 20;
break;
case AUSPICE_THEURGE:
rage_gain = 15;
break;
case AUSPICE_PHILODOX:
rage_gain = 20;
break;
case AUSPICE_GALLIARD:
rage_gain = 40;
break;
case AUSPICE_AHROUN:
rage_gain = 20;
break;
}
break;
case MOON_HALF:
switch (wch->pcdata->sgift[2])
{
case AUSPICE_RAGABASH:
rage_gain = 13;
break;
case AUSPICE_THEURGE:
rage_gain = 20;
break;
case AUSPICE_PHILODOX:
rage_gain = 40;
break;
case AUSPICE_GALLIARD:
rage_gain = 20;
break;
case AUSPICE_AHROUN:
rage_gain = 13;
break;
}
break;
}
if (wch->pcdata->rage_points < get_max_rage(wch) )
{
wch->pcdata->rage_points += (rage_gain * 2);
}
}
if ( wch->position == POS_FIGHTING && wch->fighting != NULL )
{
if (IS_ADDED(wch,ADDED_FRENZY) && wch->pcdata->frenzy_action == FRENZY_FLIGHT)
do_flee(wch,"");
if (wch->pcdata->rage_points < get_max_rage(wch) )
{
wch->pcdata->rage_points += number_range(10,35);
}
}
//Garou Upkeep
rage_loss = 1;
if (IS_SET(wch->act,PLR_WIZINVIS ) )
rage_loss += 5;
if (IS_VAMPAFF(wch,VAM_CLAWS) )
rage_loss += number_range(1,3);
if (wch->pcdata->wwf_shape == SHAPE_CRINOS && wch->pcdata->sgift[1] != BREED_METIS)
rage_loss += 5;
if (wch->pcdata->wwf_shape == SHAPE_GLABRO)
rage_loss += 3;
if (IS_SET(wch->pcdata->comm,COMM_MIND_BLOCK))
rage_loss += 40;
if (wch->pcdata->wwf_shape == SHAPE_HISPO)
rage_loss += 3;
if (IS_ADDED(wch,ADDED_BRISTLES) )
rage_loss += number_range(1,3);
if (IS_AFFECTED(wch, AFF_HIDE))
rage_loss += number_range(1,5);
if (IS_ITEMAFF(wch,ITEMA_SUNSHIELD) )
rage_loss += number_range(1,7);
if (IS_ADDED(wch,ADDED_ANIMAL_MASTER) )
rage_loss += number_range(1,5);
if ( ( ( wch->hit - wch->pcdata->absorb[ABS_MOB_HP] ) < 1 ) ||
( ( wch->max_hit - wch->pcdata->absorb[ABS_MOB_MAX_HP]) < 1 ) )
rage_loss += number_range(5,15);
if (IS_ADDED(wch,ADDED_HAND_FLAME) )
rage_loss += number_range(1,5);
wch->pcdata->rage_points -= rage_loss;
if (wch->pcdata->rage_points < 0)
{
if (IS_SET(wch->act,PLR_WIZINVIS ) )
power_blur(wch,wch,"");
if (IS_VAMPAFF(wch,VAM_CLAWS) )
power_claws(wch,wch,"");
if (IS_ADDED(wch,ADDED_BRISTLES) )
power_porcupine( wch,wch, "" );
if (IS_AFFECTED(wch, AFF_HIDE))
REMOVE_BIT(wch->affected_by, AFF_HIDE);
if (IS_ITEMAFF(wch,ITEMA_SUNSHIELD) )
power_halosun(wch,wch,"");
if (IS_ADDED(wch,ADDED_ANIMAL_MASTER) )
power_animal(wch,wch,"");
if ( ( ( wch->hit - wch->pcdata->absorb[ABS_MOB_HP] ) < 1 ) ||
( ( wch->max_hit - wch->pcdata->absorb[ABS_MOB_MAX_HP]) < 1 ) )
power_fleshbond( wch,wch,"");
if (IS_ADDED(wch,ADDED_HAND_FLAME) )
power_hand(wch,wch,"");
wch->pcdata->rage_points = 0;
}
if (wch->pcdata->rage_points > get_max_rage(wch))
wch->pcdata->rage_points = get_max_rage(wch);
if (wch->hit > wch->max_hit)
wch->hit = wch->max_hit;
// Okies if there under a percent of rage.. then change them...
if ((wch->pcdata->rage_points * 100 / get_max_rage(wch)) < 5)
{
//Breed form..
chbreed_form(wch,"");
}
else if ((wch->pcdata->rage_points * 100 / get_max_rage(wch)) < 15 )
{
switch (wch->pcdata->sgift[1])
{
case BREED_HOMID:
if ( wch->pcdata->wwf_shape != SHAPE_GLABRO)
{
shape_shift(wch,SHAPE_GLABRO);
}
break;
case BREED_LUPUS:
if ( wch->pcdata->wwf_shape != SHAPE_HISPO)
{
shape_shift(wch,SHAPE_GLABRO);
}
break;
}
}
}
mudsetting->last_proc_logged = 95;
return;
}
void do_give_renown( CHAR_DATA *ch, char *argument)
{
char arg1[MAX_STRING_LENGTH];
char arg2[MAX_STRING_LENGTH];
CHAR_DATA *victim;
argument = one_argument(argument,arg1);
argument = one_argument(argument,arg2);
if (IS_NPC(ch))
{
send_to_char("You a mobile!.\n\r",ch);
return;
}
if (!IS_SWWF(ch) && !IS_IMMORTAL(ch))
{
send_to_char("Huh?\n\r",ch);
return;
}
if (!IS_SET(ch->special,SPC_ELDER) && !IS_IMMORTAL(ch))
{
send_to_char("You must be a elder to use this command.\n\r",ch);
return;
}
if (arg1[0] == '\0')
{
send_to_char("Syntax: grenown (renown type) (player).\n\r",ch);
send_to_char("Renown Types: Honor, Glory, and Wisdom.\n\r",ch);
return;
}
if (arg2[0] == '\0')
{
send_to_char("Give renown to who?.\n\r",ch);
return;
}
if ((victim = get_char_room(ch,arg2)) == NULL)
{
send_to_char("There not here.\n\r",ch);
return;
}
if (victim == ch)
{
send_to_char("You give your self renown.\n\r",ch);
return;
}
if (!str_cmp(arg1,"honor"))
{
if ( ch->pcdata->Trenown[TRENOWN_HONOR] <= 5 && !IS_IMMORTAL(ch)
&& get_renown(ch) < 5)
{
send_to_char("You must have at least over 5 renown in Honor to give someone renown.\n\r",ch);
return;
}
if ( victim->pcdata->Trenown[TRENOWN_HONOR] >= 20 && !IS_IMMORTAL(ch) )
{
send_to_char("They must perform a rite of renown before they can accept any more.\n\r",ch);
return;
}
ch->pcdata->Trenown[TRENOWN_HONOR]--;
victim->pcdata->Trenown[TRENOWN_HONOR]++;
send_to_char("For your honrable deed you have gained renown!\n\r",victim);
send_to_char("Ok\n\r",ch);
return;
}
else if (!str_cmp(arg1,"glory"))
{
if ( ch->pcdata->Trenown[TRENOWN_GLORY] <= 5 && !IS_IMMORTAL(ch)
&& get_renown(ch) < 5)
{
send_to_char("You must have at least over 5 renown in Glory to give someone renown.\n\r",ch);
return;
}
if ( victim->pcdata->Trenown[TRENOWN_GLORY] >= 20 && !IS_IMMORTAL(ch) )
{
send_to_char("They must perform a rite of renown before they can accept any more.\n\r",ch);
return;
}
ch->pcdata->Trenown[TRENOWN_GLORY]--;
victim->pcdata->Trenown[TRENOWN_GLORY]++;
send_to_char("For your glorious deed you have gained renown!\n\r",victim);
send_to_char("Ok\n\r",ch);
return;
}
else if (!str_cmp(arg1,"wisdom"))
{
if ( ch->pcdata->Trenown[TRENOWN_WISDOM] <= 5 && !IS_IMMORTAL(ch)
&& get_renown(ch) < 5)
{
send_to_char("You must have at least over 5 renown in Wisdom to give someone renown.\n\r",ch);
return;
}
if ( victim->pcdata->Trenown[TRENOWN_WISDOM] >= 20 && !IS_IMMORTAL(ch) )
{
send_to_char("They must perform a rite of renown before they can accept any more.\n\r",ch);
return;
}
ch->pcdata->Trenown[TRENOWN_WISDOM]--;
victim->pcdata->Trenown[TRENOWN_WISDOM]++;
send_to_char("For your wisdom doing your deed, you have gained renown!\n\r",victim);
send_to_char("Ok\n\r",ch);
return;
}
}
void do_perm_renown(CHAR_DATA *ch, char *argument)
{
char arg1[MAX_STRING_LENGTH];
char arg2[MAX_STRING_LENGTH];
CHAR_DATA *victim;
argument = one_argument(argument,arg1);
argument = one_argument(argument,arg2);
if (IS_NPC(ch))
return;
if (!IS_SWWF(ch) && !IS_IMMORTAL(ch))
return;
if (!IS_SET(ch->special,SPC_ELDER) && !IS_IMMORTAL(ch))
{
send_to_char("You must be a elder to use this command.\n\r",ch);
return;
}
if (arg1[0] == '\0' || arg2[0] == '\0')
{
send_to_char("Syntax: permr (renown type) (victim).\n\r",ch);
return;
}
if ((victim = get_char_room(ch,arg2)) == NULL)
{
send_to_char("You do not see them here.\n\r",ch);
return;
}
if (victim == ch)
{
send_to_char("Umm no it don't work that way.\n\r",ch);
return;
}
if (!str_cmp(arg1,"honor"))
{
if (victim->pcdata->Trenown[TRENOWN_HONOR] < 10)
{
send_to_char("You must have at least 10 temporary renown to convert it to permanent.\n\r",victim);
send_to_char("They must have at least 10 temporary renown to convert it to permanent.\n\r",ch);
return;
}
victim->pcdata->Trenown[TRENOWN_HONOR] -= 10;
victim->pcdata->renown[RENOWN_HONOR] += 1;
send_to_char("You have succesfuly gained a point of permanent honor.\n\r",victim);
send_to_char("They have succesfuly gained a point of permanent honor.\n\r",ch);
}
else if (!str_cmp(arg1,"glory"))
{
if (victim->pcdata->Trenown[TRENOWN_GLORY] < 10)
{
send_to_char("You must have at least 10 temporary renown to convert it to permanent.\n\r",victim);
send_to_char("They must have at least 10 temporary renown to convert it to permanent.\n\r",ch);
return;
}
victim->pcdata->Trenown[TRENOWN_GLORY] -= 10;
victim->pcdata->renown[RENOWN_GLORY] += 1;
send_to_char("You have succesfuly gained a point of permanent glory.\n\r",victim);
send_to_char("They have succesfuly gained a point of permanent glory.\n\r",ch);
}
else if (!str_cmp(arg1,"wisdom"))
{
if (victim->pcdata->Trenown[TRENOWN_WISDOM] < 10)
{
send_to_char("You must have at least 10 temporary renown to convert it to permanent.\n\r",victim);
send_to_char("They must have at least 10 temporary renown to convert it to permanent.\n\r",ch);
return;
}
victim->pcdata->Trenown[TRENOWN_WISDOM] -= 10;
victim->pcdata->renown[RENOWN_WISDOM] += 1;
send_to_char("You have succesfuly gained a point of permanent wisdom.\n\r",victim);
send_to_char("They have succesfuly gained a point of permanent wisdom.\n\r",ch);
}
//check rank...
if (victim->pcdata->rank < get_renown(victim))
{
send_to_char("You have risen a rank of renown! Congradulations!\n\r",ch);
victim->pcdata->rank = get_renown(victim);
}
return;
}
void do_penalty_renown(CHAR_DATA *ch, char *argument)
{
char arg1[MAX_STRING_LENGTH];
char arg2[MAX_STRING_LENGTH];
CHAR_DATA *victim;
argument = one_argument(argument,arg1);
argument = one_argument(argument,arg2);
if (IS_NPC(ch))
return;
if (!IS_SWWF(ch) && !IS_IMMORTAL(ch))
return;
if (!IS_SET(ch->special,SPC_ELDER) && !IS_IMMORTAL(ch))
{
send_to_char("You must be a elder to use this command.\n\r",ch);
return;
}
if (arg1[0] == '\0' || arg2[0] == '\0')
{
send_to_char("Syntax: permr (renown type) (victim).\n\r",ch);
return;
}
if ((victim = get_char_room(ch,arg2)) == NULL)
{
send_to_char("You do not see them here.\n\r",ch);
return;
}
if (victim == ch)
{
send_to_char("Umm no it don't work that way.\n\r",ch);
return;
}
if (!str_cmp(arg1,"honor"))
{
victim->pcdata->renown[RENOWN_HONOR] -= 1;
send_to_char("For your dishonoring your tribe and your self you loose renown in honor.\n\r",ch);
}
else if (!str_cmp(arg1,"glory"))
{
victim->pcdata->renown[RENOWN_GLORY] -= 1;
send_to_char("For your dishonoring your tribe and your self you loose renown in glory.\n\r",ch);
}
else if (!str_cmp(arg1,"wisdom"))
{
victim->pcdata->renown[RENOWN_WISDOM] -= 1;
send_to_char("For your dishonoring your tribe and your self you loose renown in wisdom.\n\r",ch);
}
return;
}
void chbreed_form( CHAR_DATA *ch, char *argument)
{
if (IS_NPC(ch)){
return;
}
switch (ch->pcdata->sgift[1])
{
case BREED_HOMID:
if ( ch->pcdata->wwf_shape != SHAPE_HOMID)
{
shape_shift(ch,SHAPE_HOMID);
}
break;
case BREED_METIS:
if ( ch->pcdata->wwf_shape != SHAPE_CRINOS)
{
shape_shift(ch,SHAPE_CRINOS);
}
break;
case BREED_LUPUS:
if ( ch->pcdata->wwf_shape != SHAPE_LUPUS)
{
shape_shift(ch,SHAPE_LUPUS);
}
break;
}
}