/* * watchers.cpp * Watcher commands. * ____ _ * | _ \ ___ __ _| |_ __ ___ ___ * | |_) / _ \/ _` | | '_ ` _ \/ __| * | _ < __/ (_| | | | | | | \__ \ * |_| \_\___|\__,_|_|_| |_| |_|___/ * * Permission to use, modify and distribute is granted via the * Creative Commons - Attribution - Non Commercial - Share Alike 3.0 License * http://creativecommons.org/licenses/by-nc-sa/3.0/ * * Copyright (C) 2007-2012 Jason Mitchell, Randi Mitchell * Contributions by Tim Callahan, Jonathan Hseu * Based on Mordor (C) Brooke Paul, Brett J. Vickers, John P. Freeman * */ #include "mud.h" #include "commands.h" //********************************************************************* // dmCheckStats //********************************************************************* int dmCheckStats(Player* player, cmd* cmnd) { Player *target=0; if(!player->isStaff() && !player->isWatcher()) return(cmdNoExist(player, cmnd)); if(!player->isWatcher()) return(cmdNoAuth(player)); if(cmnd->num < 2) { player->print("Check who's stats?\n"); return(0); } cmnd->str[1][0]=up(cmnd->str[1][0]); target = gServer->findPlayer(cmnd->str[1]); if(!target || !player->canSee(target)) { player->print("Player not online.\n"); return(0); } // Used by watchers to see if somebody is a newbie if(target->getLevel() > 7 && !player->isCt()) { player->print("Player must be less than level 8.\n"); return(0); } player->print("%s's Initial Stats:\n", target->getCName()); player->print("STR.....%d\n", target->strength.getInitial()); player->print("DEX.....%d\n", target->dexterity.getInitial()); player->print("CON.....%d\n", target->constitution.getInitial()); player->print("INT.....%d\n", target->intelligence.getInitial()); player->print("PIE.....%d\n", target->piety.getInitial()); return(0); } //********************************************************************* // dmLocatePlayer //********************************************************************* int dmLocatePlayer(Player* player, cmd* cmnd) { Player *target=0; if(!player->isStaff() && !player->isWatcher()) return(cmdNoExist(player, cmnd)); if(!player->isWatcher()) return(cmdNoAuth(player)); if(cmnd->num < 2) { player->print("Locate who?\n"); return(0); } cmnd->str[1][0]=up(cmnd->str[1][0]); target = gServer->findPlayer(cmnd->str[1]); if(!target || !player->canSee(target)) { player->print("Player not online.\n"); return(0); } // Used by watchers to see where a newbie is if(target->getLevel() > 3 && !player->isCt()) { player->print("Player must be less than level 4.\n"); return(0); } player->print("%s is in the following room: %s\n", target->getCName(), target->getRoomParent()->fullName().c_str()); return(0); } //********************************************************************* // dmWatcherBroad //********************************************************************* int dmWatcherBroad(Player *admin, cmd* cmnd) { bstring text = ""; Player *watcher=0; int found=0; text = getFullstrText(cmnd->fullstr, 1); if(text == "") { admin->print("Broadcast what?\n"); return(0); } found = 0; Player *ply; for(std::pair<bstring, Player*> p : gServer->players) { ply = p.second; if(!ply->isConnected()) continue; if(ply->flagIsSet(P_WATCHER)) { watcher = ply; found++; break; } } if(!found) { admin->print("No watchers were found to broadcast your message.\n"); return(0); } broadcast(isDm, "^g*** %s forced %s to broadcast", admin->getCName(), watcher->getCName()); text = "broadcast " + text; strcpy(cmnd->str[0], "broadcast"); cmnd->fullstr = text; cmdProcess(watcher, cmnd); log_immort(true, admin, "%s made %s broadcast \"%s\"\n", admin->getCName(), watcher->getCName(), text.c_str()); return(0); } //********************************************************************* // reportTypo //********************************************************************* int reportTypo(Player* player, cmd* cmnd) { if(player->isStaff()) { player->printColor("^YDon't report typos - fix them!\n"); return(0); } if(!player->isWatcher()) return(cmdNoExist(player, cmnd)); if(!needUniqueRoom(player)) return(0); if(player->getConstRoomParent()->flagIsSet(R_TYPO)) { player->printColor("^YA typo has already been reported in this room.\n"); } else { player->getUniqueRoomParent()->setFlag(R_TYPO); player->printColor("^YTypo reported!\n"); broadcast(isCt, "^Y*** %s reported a typo in room %s.", player->getCName(), player->getRoomParent()->fullName().c_str()); } return(0); }