From: ferris@FootPrints.net
/*
* Externals.
* Add this to top of act_wiz.c
*/
extern AFFECT_DATA *affect_free;
/*
* Add this somewhere in act_wiz.c
*/
void do_addapply(CHAR_DATA *ch, char *argument)
{
OBJ_DATA *obj;
AFFECT_DATA *paf,*af_new;
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char arg3[MAX_INPUT_LENGTH];
int affect_modify = 0, bit = 0, enchant_type, pos, i;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
argument = one_argument( argument, arg3 );
if ( arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' )
{
send_to_char("Syntax for applies: addapply <object> <apply type> <value>\n\r",ch);
send_to_char("Apply Types: hp str dex int wis con sex mana\n\r", ch);
send_to_char(" ac move hitroll damroll saves\n\r\n\r", ch);
send_to_char("Syntax for affects: addapply <object> affect <affect name>\n\r",ch);
send_to_char("Affect Names: blind invisible detect_evil detect_invis detect_magic\n\r",ch);
send_to_char(" detect_hidden detect_good sanctuary faerie_fire infrared\n\r",ch);
send_to_char(" curse poison protect_evil protect_good sneak hide sleep charm\n\r", ch);
send_to_char(" flying pass_door haste calm plague weaken dark_vision berserk\n\r", ch);
send_to_char(" swim regeneration slow\n\r", ch);
send_to_char("Affects availible include the ones you add too!\n\r", ch);
return;
}
obj = get_obj_world(ch,arg1);
if (obj == NULL)
{
send_to_char("No such object exists!\n\r",ch);
return;
}
if (!str_prefix(arg2,"hp"))
enchant_type=APPLY_HIT;
else if (!str_prefix(arg2,"str"))
enchant_type=APPLY_STR;
else if (!str_prefix(arg2,"dex"))
enchant_type=APPLY_DEX;
else if (!str_prefix(arg2,"int"))
enchant_type=APPLY_INT;
else if (!str_prefix(arg2,"wis"))
enchant_type=APPLY_WIS;
else if (!str_prefix(arg2,"con"))
enchant_type=APPLY_CON;
/* else if (!str_prefix(arg2,"sex"))
enchant_type=APPLY_SEX;
*/
else if (!str_prefix(arg2,"mana"))
enchant_type=APPLY_MANA;
else if (!str_prefix(arg2,"move"))
enchant_type=APPLY_MOVE;
else if (!str_prefix(arg2,"ac"))
enchant_type=APPLY_AC;
else if (!str_prefix(arg2,"hitroll"))
enchant_type=APPLY_HITROLL;
else if (!str_prefix(arg2,"damroll"))
enchant_type=APPLY_DAMROLL;
else if (!str_prefix(arg2,"saves"))
enchant_type=APPLY_SAVING_SPELL;
else if (!str_prefix(arg2,"affect"))
enchant_type=APPLY_SPELL_AFFECT;
else
{
send_to_char("That apply is not possible!\n\r",ch);
return;
}
if (enchant_type==APPLY_SPELL_AFFECT)
{
for (pos = 0; affect_flags[pos].name != NULL; pos++)
if (!str_cmp(affect_flags[pos].name,arg3))
bit = affect_flags[pos].bit;
}
else
{
if ( is_number(arg3) )
affect_modify=atoi(arg3);
else
{
send_to_char("Applies require a value.\n\r", ch);
return;
}
}
if (!obj->enchanted)
{
obj->enchanted = TRUE;
for (paf = obj->pIndexData->affected; paf != NULL; paf = paf->next)
{
if (affect_free == NULL)
af_new = alloc_perm(sizeof(*af_new));
else
{
af_new = affect_free;
affect_free = affect_free->next;
}
af_new->next = obj->affected;
obj->affected = af_new;
af_new->type = UMAX(0,paf->type);
af_new->level = paf->level;
af_new->duration = paf->duration;
af_new->location = paf->location;
af_new->modifier = paf->modifier;
af_new->bitvector = paf->bitvector;
}
}
if (affect_free == NULL)
paf = alloc_perm(sizeof(*paf));
else
{
paf = affect_free;
affect_free = affect_free->next;
}
paf->type = -1;
paf->level = ch->level;
paf->duration = -1;
paf->location = enchant_type;
paf->modifier = affect_modify;
paf->bitvector = bit;
if (enchant_type==APPLY_SPELL_AFFECT)
{
/* Quick hack to make table compatible with skill_lookup */
for ( i=0 ; arg3[i] != '\0'; i++ )
{
if ( arg3[i] == '_' )
arg3[i] = ' ';
}
paf->type = skill_lookup(arg3);
paf->where = TO_AFFECTS;
paf->modifier = 0;
}
paf->next = obj->affected;
obj->affected = paf;
send_to_char("Ok.\n\r", ch);
}