To all who have the ranged weapons patch on their mud.
A quick question to answer a headache I have.
The function fire_missile needs a (missile) as one of it's values
(eg.. WEAR_HOLD), otherwise you crash.
I can load an instance of the object when there is <2 arg ..ie when
you just type "shoot" and it responds "who, where?!"
But if you try and actually shoot someone, if wont work.
code is attached, I apologise for the hackishness.
Also, this code DID work, before the addition of the unequip char in
the "whom do you wish to shoot " case.
ACMD(do_shoot)
{
struct obj_data *missile = GET_EQ(ch, WEAR_HOLD);
struct obj_data *anum;
struct obj_data *weapon = GET_EQ(ch, WEAR_WIELD);
char arg2[MAX_INPUT_LENGTH];
char arg1[MAX_INPUT_LENGTH];
int dir, range;
int ammo_num;
if (!GET_EQ(ch, WEAR_WIELD)) {
send_to_char("You aren't wielding a shooting weapon!\r\n", ch);
return;
}
if (( (GET_OBJ_TYPE(weapon) != ITEM_FIREWEAPON)
&& (GET_OBJ_TYPE(weapon) != ITEM_PISTOL)
&& (GET_OBJ_TYPE(weapon) != ITEM_SMG)
&& (GET_OBJ_TYPE(weapon) != ITEM_RIFLE)
&& (GET_OBJ_TYPE(weapon) != ITEM_SHOTGUN)
&& (GET_OBJ_TYPE(weapon) != ITEM_LMG)
&& (GET_OBJ_TYPE(weapon) != ITEM_LASER)
&& (GET_OBJ_TYPE(weapon) != ITEM_HEAVY))
&& (!GET_EQ(ch, WEAR_HOLD))) {
send_to_char("You need to be holding a missile!\r\n", ch);
return;
}
if (GET_OBJ_TYPE(weapon) == ITEM_PISTOL )
{ range = GET_EQ(ch, WEAR_WIELD)->obj_flags.value[0];
ammo_num = GET_EQ(ch, WEAR_WIELD)->obj_flags.value[1]; anum =
read_object(ammo_num, VIRTUAL);
sprintf (buf, "ammo number %d anum %d \r\n", ammo_num, anum);
equip_char(ch, anum, WEAR_HOLD);
printf ("okay... ");
send_to_char (buf,ch);
}
else
if ((GET_OBJ_TYPE(GET_EQ(ch, WEAR_WIELD)) == ITEM_SLING) &&
(GET_OBJ_TYPE(missile) == ITEM_ROCK))
range = GET_EQ(ch, WEAR_WIELD)->obj_flags.value[0];
else
if ((GET_OBJ_TYPE(missile) == ITEM_ARROW) &&
(GET_OBJ_TYPE(GET_EQ(ch, WEAR_WIELD)) == ITEM_BOW))
range = GET_EQ(ch, WEAR_WIELD)->obj_flags.value[0];
else
if ((GET_OBJ_TYPE(missile) == ITEM_BOLT) &&
(GET_OBJ_TYPE(GET_EQ(ch, WEAR_WIELD)) == ITEM_CROSSBOW))
range = GET_EQ(ch, WEAR_WIELD)->obj_flags.value[0];
else {
send_to_char("You should wield a missile weapon and hold a
missile!\r\n", ch
);
return;
}
/* itt was here */
two_arguments(argument, arg1, arg2);
if (!*arg1 || !*arg2) {
send_to_char("You should try: shoot <someone> <direction>\r\n",
ch);
extract_obj(unequip_char(ch, WEAR_HOLD));
return;
}
/* if (IS_DARK(ch->in_room)) {
send_to_char("You can't see that far.\r\n", ch);
return;
} */
if ((dir = search_block(arg2, dirs, FALSE)) < 0) {
send_to_char("What direction?\r\n", ch);
return;
}
if (!CAN_GO(ch, dir)) {
send_to_char("Something blocks the way!\r\n", ch);
return;
if (range > 3)
range = 3;
if (range < 1)
range = 1;
fire_missile(ch, arg1, missile, WEAR_HOLD, range, dir);
Cheers
Dan...
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST