roh/conf.old/area/
roh/config/code/python/
roh/config/game/area/
roh/config/game/signs/
roh/help/dmhelp/
roh/help/help/
roh/log/
roh/log/staff/
roh/monsters/ocean/
roh/objects/misc/
roh/objects/ocean/
roh/player/
roh/rooms/area/1/
roh/rooms/misc/
roh/rooms/ocean/
roh/src-2.47e/
/*
 * 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);
}