/************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvements 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. * * * * Much time and thought has gone into this software and you are * * benefiting. We hope that you share your changes too. What goes * * around, comes around. * *************************************************************************** * ROM 2.4 is copyright 1993-1998 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@hypercube.org) * * Gabrielle Taylor (gtaylor@hypercube.org) * * Brian Moore (zump@rom.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * *************************************************************************** * 1stMud ROM Derivative (c) 2001-2004 by Markanth * * http://www.firstmud.com/ <markanth@firstmud.com> * * By using this code you have agreed to follow the term of * * the 1stMud license in ../doc/1stMud/LICENSE * ***************************************************************************/ #include "merc.h" #include "interp.h" #include "tables.h" #include "recycle.h" bool is_ignoring (CharData * ch, const char *name, flag_t bit) { int pos; if (ch == NULL || NullStr (name)) return false; if (IsNPC (ch)) return false; for (pos = 0; pos < MAX_IGNORE; pos++) { if (NullStr (ch->pcdata->ignore[pos])) break; if (is_name (ch->pcdata->ignore[pos], name)) { if (bit == 0 || IsSet (ch->pcdata->ignore_flags[pos], bit | IGNORE_ALL)) return true; } } return false; } Do_Fun (do_ignore) { CharData *victim; char arg[MIL]; int pos; bool found = false; CharData *wch; flag_t iValue; argument = one_argument (argument, arg); if (IsNPC (ch)) return; if (NullStr (arg)) { Buffer *output = new_buf (); bprintln (output, "People you are ignoring:"); bprintln (output, draw_line (ch, "-=", 0)); for (pos = 0; pos < MAX_IGNORE; pos++) { if (NullStr (ch->pcdata->ignore[pos])) break; found = true; bprintlnf (output, "[%02d] %-12s", pos + 1, ch->pcdata->ignore[pos]); } if (!found) bprintln (output, "No one."); found = false; pos = 0; bprintln (output, NULL); bprintln (output, "People online who are ignoring you:"); bprintln (output, draw_line (ch, "-=", 0)); for (wch = player_first; wch != NULL; wch = wch->next_player) { if (!can_see (ch, wch) || !is_ignoring (wch, ch->name, 0)) continue; pos++; found = true; bprintlnf (output, "[%02d] %s", pos, wch->name); } if (!found) bprintln (output, "No one."); bprintln (output, NULL); bprintlnf (output, "Use '%s list' to show possible flags, use '%s <name> <flag>' to set a flags.", n_fun, n_fun); sendpage (ch, buf_string (output)); free_buf (output); return; } if (NullStr (argument)) { if (!str_cmp (arg, "list")) { show_flags (ch, ignore_flags); return; } found = false; for (pos = 0; pos < MAX_IGNORE; pos++) { if (NullStr (ch->pcdata->ignore[pos])) break; if (found) { replace_str (&ch->pcdata->ignore[pos - 1], ch->pcdata->ignore[pos]); free_string (ch->pcdata->ignore[pos]); ch->pcdata->ignore[pos] = NULL; ch->pcdata->ignore_flags[pos - 1] = ch->pcdata->ignore_flags[pos]; continue; } if (!str_cmp (arg, ch->pcdata->ignore[pos])) { free_string (ch->pcdata->ignore[pos]); ch->pcdata->ignore[pos] = NULL; ch->pcdata->ignore_flags[pos] = 0; found = true; } } if (found) { chprintlnf (ch, "You stop ignoring %s.", capitalize (arg)); return; } } else { for (pos = 0; pos < MAX_IGNORE; pos++) { if (NullStr (ch->pcdata->ignore[pos])) break; if (!str_cmp (arg, ch->pcdata->ignore[pos])) { found = true; break; } } if (!found) { chprintln (ch, "They are not on your ignore list."); return; } } if (pos >= MAX_IGNORE) { chprintln (ch, "You can't ignore anymore people"); return; } if ((victim = get_char_world (ch, arg)) == NULL) { chprintln (ch, "That character isn't online."); return; } else { if (IsNPC (victim)) { chprintln (ch, "Ignore a mob? I don't think so."); return; } if (ch == victim) { chprintln (ch, "I don't think you really want to ignore yourself."); return; } if (!is_exact_name (victim->name, arg)) { chprintln (ch, "You must spell out their entire name."); return; } if (IsImmortal (victim)) { chprintln (ch, "You're not going to ignore us that easily!"); return; } } if (NullStr (argument)) { replace_str (&ch->pcdata->ignore[pos], capitalize (arg)); ch->pcdata->ignore_flags[pos] = IGNORE_CHANNELS; chprintlnf (ch, "You now ignore %s.", capitalize (arg)); chprintlnf (ch, "Use '%s list' to show possible flags, use '%s <name> <flag>' to set a flags.", n_fun, n_fun); } else if ((iValue = flag_value (ignore_flags, argument)) != NO_FLAG) { set_on_off (ch, &ch->pcdata->ignore_flags[pos], iValue, FORMATF ("%s ignore flag set for %s.", flag_string (ignore_flags, iValue), ch->pcdata->ignore[pos]), FORMATF ("%s ignore flag removed for %s.", flag_string (ignore_flags, iValue), ch->pcdata->ignore[pos])); return; } else { chprintlnf (ch, "Valid flags for %s are:", arg); print_all_on_off (ch, ignore_flags, ch->pcdata->ignore_flags[pos]); } return; }