/* Calculate the spodlist */ void calc_spodlist(void) { UR_OBJECT u; UD_OBJECT entry; /* Delete the whole list */ delete_spodlist(); /* Save all players so times are accurate */ for (u = user_first; u; u = u->next) { #ifdef NETLINKS if (u->type == REMOTE_TYPE) { continue; } #endif if (u->type == CLONE_TYPE || u->login) { continue; } save_user_details(u, 1); } /* Create spod list */ for (entry = first_user_entry; entry; entry = entry->next) { u = retrieve_user(NULL, entry->name); if (!u) { continue; } add_name_to_spodlist(u->name, u->total_login); done_retrieve(u); } }
/* * Unmuzzle the bastard now he has apologised and grovelled enough via email */ void unmuzzle(UR_OBJECT user) { UR_OBJECT u; int on; if (word_count < 2) { write_user(user, "Usage: unmuzzle <user>\n"); return; } u = retrieve_user(user, word[1]); if (!u) { return; } on = retrieve_user_type == 1; /* error checks */ if (u == user) { write_user(user, "Trying to unmuzzle yourself is the tenth sign of madness.\n"); done_retrieve(u); return; } /* FIXME: Use sentinel other JAILED */ if (u->muzzled == JAILED) { vwrite_user(user, "%s~RS is not muzzled.\n", u->recap); done_retrieve(u); return; } if (u->muzzled > user->level) { vwrite_user(user, "%s~RS's muzzle is set to level %s, you do not have the power to remove it.\n", u->recap, user_level[u->muzzled].name); done_retrieve(u); return; } /* do the unmuzzle */ u->muzzled = JAILED; /* FIXME: Use sentinel other JAILED */ vwrite_user(user, "~FG~OLYou remove %s~RS's muzzle.\n", u->recap); write_syslog(SYSLOG, 1, "%s unmuzzled %s.\n", user->name, u->name); add_history(u->name, 0, "~FGUnmuzzled~RS by %s, level %d (%s).\n", user->name, user->level, user_level[user->level].name); sprintf(text, "~FG~OLYou have been unmuzzled!\n"); if (!on) { send_mail(user, u->name, text, 0); } else { write_user(u, text); } /* finish up */ if (!on) { strcpy(u->site, u->last_site); u->socket = -2; } save_user_details(u, on); done_retrieve(u); }
/* * clean up the user object created by the above function */ void done_retrieve(UR_OBJECT user) { switch (retrieve_user_type) { case 0: /* not supposed to happen */ break; case 1: /* online user, do not do anything */ break; case 2: /* offline user, save and have fun */ user->socket = -2; strcpy(user->site, user->last_site); save_user_details(user, 0); destruct_user(user); destructed = 0; break; } return; }
/* * Unarrest a user who is currently under arrest and in jail */ void unarrest(UR_OBJECT user) { UR_OBJECT u; RM_OBJECT rm; int on; if (word_count < 2) { write_user(user, "Usage: unarrest <user>\n"); return; } u = retrieve_user(user, word[1]); if (!u) { return; } on = retrieve_user_type == 1; /* error checks */ if (u == user) { write_user(user, "You cannot unarrest yourself.\n"); return; } if (u->level != JAILED) { vwrite_user(user, "%s~RS is not under arrest!\n", u->recap); done_retrieve(u); return; } if (user->level < u->arrestby) { vwrite_user(user, "%s~RS can only be unarrested by a %s or higher.\n", u->recap, user_level[u->arrestby].name); done_retrieve(u); return; } /* do it */ u->level = u->unarrest; u->real_level = u->level; u->arrestby = JAILED; /* FIXME: Use sentinel other JAILED */ user_list_level(u->name, u->level); strcpy(u->date, (long_date(1))); sprintf(text, "~FG~OLYou have been unarrested... Now try to behave!\n"); if (!on) { send_mail(user, u->name, text, 0); vwrite_user(user, "%s has been unarrested.\n", u->name); } else { write_user(u, text); vwrite_user(user, "%s has been unarrested.\n", u->name); write_room(NULL, "The Hand of Justice reaches through the air...\n"); rm = get_room_full(amsys->default_warp); if (!rm) { vwrite_user(user, "Cannot find a room for ex-cons, so %s~RS is still in the %s!\n", u->recap, u->room->name); } else { move_user(u, rm, 2); } } write_syslog(SYSLOG, 1, "%s UNARRESTED %s\n", user->name, u->name); add_history(u->name, 1, "Was ~FGunarrested~RS by %s.\n", user->name); if (!on) { u->socket = -2; strcpy(u->site, u->last_site); } save_user_details(u, on); done_retrieve(u); }
/* * Put annoying user in jail */ void arrest(UR_OBJECT user) { UR_OBJECT u; RM_OBJECT rm; int on; if (word_count < 2) { write_user(user, "Usage: arrest <user>\n"); return; } u = retrieve_user(user, word[1]); if (!u) { return; } on = retrieve_user_type == 1; /* error checks */ if (u == user) { write_user(user, "You cannot arrest yourself.\n"); return; } if (u->level >= user->level) { write_user(user, "You cannot arrest anyone of the same or higher level than yourself.\n"); done_retrieve(u); return; } if (u->level == JAILED) { vwrite_user(user, "%s~RS has already been arrested.\n", u->recap); done_retrieve(u); return; } /* do it */ u->vis = 1; u->unarrest = u->level; u->arrestby = user->level; u->level = JAILED; u->real_level = u->level; user_list_level(u->name, u->level); strcpy(u->date, (long_date(1))); sprintf(text, "~FR~OLYou have been placed under arrest.\n"); if (!on) { send_mail(user, u->name, text, 0); vwrite_user(user, "%s has been placed under arrest.\n", u->name); } else { write_user(u, text); vwrite_user(user, "%s has been placed under arrest.\n", u->name); write_room(NULL, "The Hand of Justice reaches through the air...\n"); rm = get_room_full(amsys->default_jail); if (!rm) { vwrite_user(user, "Cannot find the jail, so %s~RS is arrested but still in the %s.\n", u->recap, u->room->name); } else { move_user(u, rm, 2); } vwrite_room_except_both(NULL, user, u, "%s~RS has been placed under arrest...\n", u->recap); } write_syslog(SYSLOG, 1, "%s ARRESTED %s (at level %s)\n", user->name, u->name, user_level[u->arrestby].name); add_history(u->name, 1, "Was ~FRarrested~RS by %s (at level ~OL%s~RS).\n", user->name, user_level[u->arrestby].name); if (!on) { u->socket = -2; strcpy(u->site, u->last_site); } save_user_details(u, on); done_retrieve(u); }