/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Dystopia Mud improvements copyright (C) 2000, 2001 by Brian Graversen * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> #include "merc.h" void update_trackers() { CHAR_DATA *ch; CHAR_DATA *victim; char *path; char buf[MAX_STRING_LENGTH]; bool found; for (ch = char_list; ch; ch = ch->next) { if (!IS_NPC(ch)) continue; if (!ch->tracking) continue; if (ch->hunting == NULL) { ch->hunting = str_dup(""); ch->hunt_pointer = 0; ch->hunt_playerid = 0; ch->tracking = FALSE; sprintf(buf, "Update_trackers: %s NULL hunter.", ch->name); bug(buf, 0); continue; } if (strlen(ch->hunting) < ch->hunt_pointer) { sprintf(buf, "%s %d", ch->hunting, ch->hunt_pointer); log_string(buf); free_string(ch->hunting); ch->hunting = str_dup(""); ch->hunt_pointer = 0; ch->hunt_playerid = 0; ch->tracking = FALSE; sprintf(buf, "Update_trackers: %s out of bound.", ch->name); bug(buf, 0); continue; } switch(ch->hunting[ch->hunt_pointer]) { default: free_string(ch->hunting); ch->hunting = str_dup(""); ch->hunt_pointer = 0; ch->hunt_playerid = 0; ch->tracking = FALSE; sprintf(buf, "Update_trackers: %s bad direction.", ch->name); bug(buf, 0); continue; case 'n': interpret(ch, "north"); break; case 's': interpret(ch, "south"); break; case 'e': interpret(ch, "east"); break; case 'w': interpret(ch, "west"); break; case 'u': interpret(ch, "up"); break; case 'd': interpret(ch, "down"); break; case '\0': found = FALSE; for (victim = ch->in_room->people; victim && !found; victim = victim->next_in_room) { if (IS_NPC(victim)) continue; if (victim->pcdata->playerid != ch->hunt_playerid) continue; free_string(ch->hunting); ch->hunting = str_dup(""); ch->hunt_pointer = 0; ch->hunt_playerid = 0; ch->tracking = FALSE; found = TRUE; } if (found) continue; for (victim = char_list; victim && !found; victim = victim->next) { if (IS_NPC(victim)) continue; if (victim->pcdata->playerid != ch->hunt_playerid) continue; if (!victim->in_room || !ch->in_room) continue; if (victim->in_room->area != ch->in_room->area) continue; if ((path = pathfind(ch, victim)) == NULL) continue; free_string(ch->hunting); ch->hunting = str_dup(path); ch->hunt_pointer = 0; found = TRUE; } if (found) continue; do_say(ch, "I lost the trail, sorry master."); free_string(ch->hunting); ch->hunting = str_dup(""); ch->hunt_pointer = 0; ch->hunt_playerid = 0; ch->tracking = FALSE; break; } ch->hunt_pointer++; } } void update_midi() { CHAR_DATA *ch; for (ch = char_list; ch; ch = ch->next) { if (IS_NPC(ch)) continue; if (!IS_SET(ch->act, PLR_MUSIC)) continue; if (ch->pcdata->prev_area && ch->in_room) { if (ch->pcdata->prev_area != ch->in_room->area) { ch->pcdata->prev_area = ch->in_room->area; update_music(ch); } } else if (ch->in_room) { ch->pcdata->prev_area = ch->in_room->area; update_music(ch); } } } void update_edge(CHAR_DATA *ch) { CHAR_DATA *gch; for (gch = char_list; gch; gch = gch->next) { if (IS_NPC(gch)) continue; REMOVE_BIT(gch->pcdata->tempflag, TEMP_EDGE); } SET_BIT(ch->pcdata->tempflag, TEMP_EDGE); }