I am working on a spell that will allow people to kind of 'hide'
objects by disguising them as something else. Right now its
pretty generic. The only problem I am having is that it when I
try and change the description of the object it appears to
screw up the prototype of the object as well. For example if I
cast this spell on a long sword (obj vnum 1124) to disguise it as
a dull blade every long sword that I create after that is messed
up. It will either have no short description or will have the
short description of the dull blade. :( I think the problem is
in the free() part of the my code. How can I erase the current
description of the object and then set it to something else without
screwing up the memory of my mud?
Any help would be greatly appreciated.
-Haddixx aka Brian Menges
Here is the code:
ASPELL(spell_cloak_obj)
{
int worked = 1;
char name[256];
if (ch == NULL || obj == NULL)
return;
if( !IS_SET(GET_OBJ_EXTRA(obj), ITEM_MAGIC) )
{
/* free old strings */
if(obj->name) free(obj->name);
if(obj->description) free(obj->description);
if(obj->short_description) free(obj->short_description);
strcpy(name, obj->name);
switch( GET_OBJ_TYPE(obj) )
{
case ITEM_LIGHT:
strcat(name, " lantern dirty");
sprintf(buf1, "A small dirty lantern has been left here.");
sprintf(buf2, "a small lantern");
break;
case ITEM_WAND:
strcat(name, " wand broken");
sprintf(buf1, "An old broken wand has been left here.");
sprintf(buf2, "a broken wand");
break;
case ITEM_STAFF:
strcat(name, " staff wooden");
sprintf(buf1, "A plain wooden staff has been left here.");
sprintf(buf2, "a wooden staff");
break;
case ITEM_WEAPON:
strcat(name, " blade dull");
sprintf(buf1, "A small dull blade has been left here.");
sprintf(buf2, "a dull blade");
break;
case ITEM_TREASURE:
strcat(name, " coal lump");
sprintf(buf1, "A lump of coal lies here.");
sprintf(buf2, "a lump of coal");
break;
case ITEM_ARMOR:
strcat(name, " armor rusty");
sprintf(buf1, "A piece of rusting armor has been left
here.");
sprintf(buf2, "rusty armor");
break;
case ITEM_KEY:
strcat(name, " key old");
sprintf(buf1, "An old rusty key has been left here.");
sprintf(buf2, "an old key");
break;
case ITEM_SHOVEL:
strcat(name, " shovel old");
sprintf(buf1, "An old shovel lies here.");
sprintf(buf2, "an old shovel");
break;
default:
worked = 0;
act("$p glows briefly but nothing seems to happen.", FALSE,
ch, obj, 0, TO_CHAR);
break;
}
if(worked)
{
if (IS_GOOD(ch))
act("$p glows blue briefly then fades to black.", FALSE, ch,
obj, 0, TO_CHAR);
else if (IS_EVIL(ch))
act("$p glows red briefly then fades to black.", FALSE, ch, obj,
0, TO_CHAR);
else
act("$p glows yellow briefly then fades to black.", FALSE, ch,
obj, 0, TO_CHAR);
SET_BIT(GET_OBJ_EXTRA(obj), ITEM_MAGIC);
obj->name = str_dup(name);
obj->description = str_dup(buf1);
obj->short_description = str_dup(buf2);
}/* end of if the spell worked */
}
act("$p glows briefly but nothing seems to happen.", FALSE, ch, obj,
0, TO_CHAR);
act("$p's magical nature protects it from your spell!", FALSE, ch,
obj, 0, TO_CHAR);
}
--
/ Brian M. Menges | NASA Ames Research Center \
\ | Mail Stop: N262-2 /
/ San Jose State University | Moffett Field, CA 94035 \
\ Student, Aerospace Engineering | Phone: (415) 604-0069 /
/ menges@mercury.engr.sjsu.edu | bmenges@mail.arc.nasa.gov \
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
+-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/18/00 PST