I tried sending this before, but I guess it didn't get through,
so I'll try again.
I'm writing a spec_proc for a mob that does implants, but I'm having a
wierd problem
The mud crashes whenever mix up the arguments, heres an example:
You have an object:
Name: 'a pair of cybernetic legs (implated)', Aliases: leg boosters
cybernetic 2020
VNum: [ 3847], RNum: [ 414], Type: IMPLANT, SpecProc: None
L-Des: A pair of bloody cybernetic legs lies here.
Can be worn on: TAKE IMPLALEGS
Set char bits : NOBITS
Extra flags : !PALADIN
Weight: 15, Value: 5000, Cost/day: 0, Timer: 0
In room: Nowhere, In object: None, Carried by: Nobody, Worn by: Nobody
Values 0-3: [0] [0] [0] [0]
Affections: +3 to DEX, +25 to MAXMOVE, +10 to ARMOR
and you type: implant legs
it crashes
first couple of things, there is no alias for it called "legs"
and the implant was never ment to go in ITEM_WEAR_LEGS
SPECIAL(implanter)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
struct obj_data *obj, *next_obj;
int where, dotmode, items_worn = 0;
extern int find_eq_pos(struct char_data * ch, struct obj_data * obj,
char *arg);
void perform_wear(struct char_data * ch, struct obj_data * obj, int
where);
if (CMD_IS("implant")) {
two_arguments(argument, arg1, arg2);
if (!*arg1) {
send_to_char("What do you want implanted?\r\n", ch);
return 1;
}
dotmode = find_all_dots(arg1);
if (*arg2 && (dotmode != FIND_INDIV)) {
send_to_char("You can't specify the same body location for more
than one item!\r\n", ch);
return 1;
}
if (dotmode == FIND_ALL) {
for (obj = ch->carrying; obj; obj = next_obj) {
next_obj = obj->next_content;
if (CAN_SEE_OBJ(ch, obj) && (where = find_eq_pos(ch, obj, 0)) >=
0 && GET_OBJ_TYPE(obj) == ITEM_IMPLANT) {
items_worn++;
if (GET_GOLD(ch) >= GET_OBJ_COST(obj) * 4) {
perform_wear(ch, obj, where);
} else {
send_to_char("You don't have enough gold!\r\n", ch);
return 1;
}
}
}
if (!items_worn)
send_to_char("You don't seem to have anything implantable.\r\n",
ch);
} else if (dotmode == FIND_ALLDOT) {
if (!*arg1) {
send_to_char("Implant all of what?\r\n", ch);
return 1;
}
if (!(obj = get_obj_in_list_vis(ch, arg1, ch->carrying))) {
sprintf(buf, "You don't seem to have any %ss.\r\n", arg1);
send_to_char(buf, ch);
} else
while (obj) {
next_obj = get_obj_in_list_vis(ch, arg1, obj->next_content);
if ((where = find_eq_pos(ch, obj, 0)) >= 0 &&
GET_OBJ_TYPE(obj) == ITEM_IMPLANT)
if (GET_GOLD(ch) >= GET_OBJ_COST(obj) * 4) {
perform_wear(ch, obj, where);
} else {
send_to_char("You don't have enough gold!\r\n", ch);
return 1;
}
else
act("You can't implant $p.", FALSE, ch, obj, 0, TO_CHAR);
obj = next_obj;
}
} else {
if (!(obj = get_obj_in_list_vis(ch, arg1, ch->carrying)) &&
GET_OBJ_TYPE(obj) == ITEM_IMPLANT) {
sprintf(buf, "You don't seem to have %s %s.\r\n", AN(arg1),
arg1);
send_to_char(buf, ch);
} else {
if ((where = find_eq_pos(ch, obj, arg2)) >= 0)
if (GET_GOLD(ch) >= GET_OBJ_COST(obj) * 4) {
perform_wear(ch, obj, where);
} else {
send_to_char("You don't have enough gold!\r\n", ch);
return 1;
}
else if (!*arg2)
act("You can't implant $p.", FALSE, ch, obj, 0, TO_CHAR);
}
}
return TRUE;
}
return 0;
}
--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
SLiVER Implementor of
ArmadaMUD lightspeed.bc.ca 4000
EMail: sliver@lightspeed.bc.ca
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+-----------------------------------------------------------+
| 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