I told you there'd be bugfixes, major blunder on MY part.. don't go flaming
Ryan.. grin.
This is v.9 of the Assassin Code. If you use it please put a reference to
Ryan Biggs and Chris Grantham in your credits file.
*NOTE*: This code is not perfect! There will probably be more releases, but
don't blame us if it's buggy!
This is a code for an assassin that players can hire to kill
people. It is based on the Pet shop code. To use it, drop it in the
spec_procs.c, and put in a spec_assign.c as well. Put all the mobs you
want to be assassins in the room you define and go. Please, if it works,
or if any extra coding is needed, PLEASE tell me (Ryan Briggs
[ae744@freenet.toronto.on.ca]). Please give me feedback (either positive
or negative, I want to know everything)
#define ASSASSIN_LOCATION *VNUM LOCATION OF ASSASSINS HERE* /* If you
don't set this it ain't my fault, don't come crying to me! */
#define ASSASSIN_PRICE(assassin) (GET_LEVEL(assassin) * 100000)
SPECIAL(assassin)
{
char buf[MAX_STRING_LENGTH], assassin_name[256];
int assassin_room;
struct char_data *assassin, *vict;
if (CMD_IS("list")) {
send_to_char("Available assassins are:\r\n", ch);
for (assassin = world[ASSASSIN_LOCATION].people; assassin;assassin =
assassin->next_in_room) {
sprintf(buf, "%8d - %s\r\n", ASSASSIN_PRICE(assassin),
GET_NAME(assassin));
send_to_char(buf, ch);
}
return (TRUE);
} else if (CMD_IS("hire")) {
argument = one_argument(argument, buf);
argument = one_argument(argument, victim_name);
if (!(assassin = get_char_room(buf, ASSASSIN_LOCATION))) {
send_to_char("There is nobody called that!\r\n", ch);
return (TRUE);
}
if (GET_GOLD(ch) < ASSASSIN_PRICE(assassin)) {
send_to_char("You don't have enough gold!\r\n", ch);
return (TRUE);
}
if (*victim_name) {
send_to_char("You need to specify a target!\r\n", ch);
return 0;
}
if ((vict = get_player_vis(assassin, victim_name, 0))) {
GET_GOLD(ch) -= ASSASSIN_PRICE(assassin);
assassin = read_mobile(GET_MOB_RNUM(assassin), REAL);
char_to_room(assassin, ch->in_room);
SET_BIT(MOB_FLAGS(assassin), MOB_MEMORY);
SET_BIT(MOB_FLAGS(assassin), MOB_ASSASSIN);
remember(assassin, vict);
HUNTING(assassin) = vict;
send_to_char("You will be contacted if it succeeds or not.\r\n", ch);
act("$n hires $N for a job.", FALSE, ch, 0, assassin, TO_ROOM);
return 1;
} else {
send_to_char("The assassin can't find the victim!\r\n", ch);
return 0;
}
}
return 0;
}
add this to damage() before the die(victim) call
if ((MOB_FLAGGED(ch, MOB_ASSASSIN)) && (HUNTING(ch) == victim)) {
send_to_char("The assassin has succeeded.\r\n", HIRED_BY(ch));
extract_char(ch);
}
if (MOB_FLAGGED(victim, MOB_ASSASSIN))
send_to_char("The assassin has failed.\r\n", HIRED_BY(ch));
in structs.h in char_special_data, after *hunting add
struct char_data *hired_by;
in utils.h add in
#define HIRED_BY(ch) ((ch)->char_specials.hired_by)
in interperter.c add in
{ "hire" , POS_STANDING, do_not_here , 1, 0 },
And, if you want to have several assassin places, with different
assassins at each place, just ask us...that's the way we are using it in
ours (you can put better assassins in harder to get to places).
Ryan Biggs
and
Chris Grantham
This archive was generated by hypermail 2b30 : 12/07/00 PST