void CommandHandler::HandleTeleportAtCommand()
{
    int x, y;
    ExtractArg(x);
    ExtractArg(y);

    pPlayer->Teleport(x, y);
}
bool CommandHandler::ExecuteCommand()
{
    std::string Command;
    ExtractArg(Command);

    // Is it a command?
    if (Command.empty())
        return false;

    // Is there such command?
    ChatCommand* pCommand;
    for (pCommand = GetCommandTable(); pCommand->Name != nullptr; ++pCommand)
        if (Command.compare(pCommand->Name) == 0)
            break;

    if (pCommand->Name == nullptr)
        throw BadCommand();

    while (!pCommand->Handler)
    {
        ExtractArg(Command);

        if (pCommand->ChildCommands == nullptr)
            throw BadCommand();

        for (pCommand = pCommand->ChildCommands; pCommand->Name != nullptr; ++pCommand)
        {
            if (Command.compare(pCommand->Name) == 0)
                break;
        }
    }

    if (Console)
    {
        if (pCommand->AllowConsole)
        {
            (this->*pCommand->Handler)();
        }
        else
        {
            sLog.Write(LEVEL_INFO, LOG_CONSOLE, "You can't do this from console!");
        }
    }
    else 
    {
        if (pPlayer->GetSecLevel() >= pCommand->SecurityLevel)
        {
            (this->*pCommand->Handler)();
        }
        else
        {
            pPlayer->SendCommandReponse("You don't have the level for executing this command!");
            return false;
        }
    }

    return true;
}
void CommandHandler::HandleTeleportAtCommand()
{
    uint16 x, y;
    uint64 MapGUID;
    ExtractArg(x);
    ExtractArg(y);
    ExtractArg(MapGUID);
    pPlayer->Teleport(ObjectAccessor::GetInstance()->FindMap(MapGUID), x, y);
}
void CommandHandler::HandleAccountSetSecLevelCommand()
{
    std::string Username;
    ExtractArg(Username);

    uint32 SecLevel;
    ExtractArg(SecLevel);

    if (SecLevel > SEC_ADMIN || SecLevel < SEC_PLAYER)
        throw BadCommand();

    CharactersDB->PExecute("UPDATE `players` SET `seclevel` = %u WHERE `username` = '%s'", SecLevel, Username.c_str());
}
void CommandHandler::HandleAccountSetPasswordCommand()
{
    std::string Username;
    std::string Password;

    if (Console)
        ExtractArg(Username);
    else
        Username = pPlayer->GetUsername();

    ExtractArg(Password);

    sDatabase.PExecute("UPDATE `players` SET `password` = '%s' WHERE `username` = '%s'", Password.c_str(), Username.c_str());
}
void CommandHandler::HandleKillCommand()
{
    std::string PlayerName;
    ExtractArg(PlayerName);

    Player* pTargetPlayer = ObjectAccessor::GetInstance()->FindPlayer(PlayerName);

    if (pTargetPlayer)
    {
        if (pTargetPlayer->IsInWorld())
            pTargetPlayer->Kill();
        else
        {
            if (Console)
                sLog.Write(LEVEL_INFO, LOG_CONSOLE, "Player is not in world!");
            else
                pPlayer->SendCommandReponse("Player is not in world!");
        }
    }
    else
    {
        if (Console)
            sLog.Write(LEVEL_INFO, LOG_CONSOLE, "Unknown player!");
        else
            pPlayer->SendCommandReponse("Unknown player!");
    }
}
void CommandHandler::HandleAccountSetPasswordCommand()
{
    std::string Username;
    std::string Password;

    if (Console)
        ExtractArg(Username);
    else
        Username = pPlayer->GetName();

    ExtractArg(Password);

    Password = HashSHA512AndEncodeHex(Password);

    CharactersDB->PExecute("UPDATE `players` SET `hash` = '%s' WHERE `username` = '%s'", Password.c_str(), Username.c_str());
}
ChatCommand* CommandHandler::SubCommandHelper(std::string const& CommandBaseName)
{
    ChatCommand* pCommand;
    for (pCommand = GetCommandTable() ; pCommand->Name != nullptr ; ++pCommand)
        if (pCommand->Name == CommandBaseName)
            break;

    if (pCommand->Name == nullptr)
        return nullptr;

    if (pCommand->ChildCommands == nullptr)
        return pCommand;

    else if (!IsEndArgument())
    {
        while (!IsEndArgument())
        {
            std::string SubCommand;
            ExtractArg(SubCommand);
            
            for (pCommand = pCommand->ChildCommands ; pCommand->Name != nullptr ; ++pCommand)
                if (pCommand->Name == SubCommand)
                    break;
            
            if (pCommand->Name == nullptr)
                return nullptr;

            if (pCommand->ChildCommands == nullptr)
                return pCommand;
        }
    }

    return pCommand;
}
void CommandHandler::HandleKillCommand()
{
    std::string PlayerName;
    ExtractArg(PlayerName);

    Player* pTargetPlayer = sObjectMgr.GetPlayer(PlayerName);
    if (pTargetPlayer)
    {
        if (pTargetPlayer->IsInWorld())
            pTargetPlayer->Kill();
        else
        {
            if (Console)
                sLog.Write("Player is not in world!");
            else
                pPlayer->SendCommandReponse("Player is not in world!");
        }
    }
    else
    {
        if (Console)
            sLog.Write("Unknown player!");
        else
            pPlayer->SendCommandReponse("Unknown player!");
    }
}
Beispiel #10
0
int
handle_set_command(char *cmd)
{
#if 0
	ConfigCommandStruct *cmdstruct;
	ConfigCommandFn fn;
	char *param;

	if (ExtractArg(cmd, &param, &cmd) < 0)
	{
		return -1;
	}

	/* lookup the command */
	cmdstruct = lookupconfigcmd(param);

	if (cmdstruct == NULL)
	{
		return -1;
	}

	fn = cmdstruct->set_func;
	
	if (fn == NULL)
	{
		return -1;
	}

	/* call the function */
	fn(param, cmdstruct->cmd, cmd, CONFIG_VERBOSE, &config_change[0]);
#endif
	return(0);
}
Beispiel #11
0
int
handle_reset_command(char *cmd)
{
	char *param;
	char fn[] = "handle_reset_command():";

	if (ExtractArg(cmd, &param, &cmd) < 0)
	{
		return -1;
	}

	if (!strcmp(param, "stats"))
	{
		return ThreadStatsReset();
	}

	if ( param != (char*) NULL )
	{
		NETERROR(MINIT, ("%s invalid command %s specified\n", fn, param ));
	}
	else
	{
		NETERROR(MINIT, ("%s no command specified\n", fn ));
	}

	return(-1);
}
Beispiel #12
0
/* Extracts and, if present, removes the 'exact' argument from the
   argument list.  An integer code giving the desired exact matching
   behavior is returned:
       0  not exact
       1  exact
      -1  not exact, but warn when partial matching is used
 */
static int ExtractExactArg(SEXP args)
{
    SEXP argval = ExtractArg(args, R_ExactSymbol);
    int exact;
    if(isNull(argval)) return 1; /* Default is true as from R 2.7.0 */
    exact = asLogical(argval);
    if (exact == NA_LOGICAL) exact = -1;
    return exact;
}
void CommandHandler::HandleAccountCreateCommand()
{
    std::string Username, Password;
    ExtractArg(Username);
    ExtractArg(Password);

    sDatabase.PExecute("INSERT INTO `players` VALUES (%llu, '%s', '%s', 'none', 0, 0, 'dg_classm32.gif', 0, 0, 0, 0, 0)", sDatabase.Generate64BitsGUID(), Username.c_str(), Password.c_str());
    if (Console)
        sLog.Write("Account %s successfully created.", Username.c_str());
    else
    {
        std::string Msg = "Account ";
        Msg += Username;
        Msg += " successfully created.";

        pPlayer->SendCommandReponse(Msg);
    }
}
void CommandHandler::HandleAccountCreateCommand()
{
    std::string Username, Password;
    ExtractArg(Username);
    ExtractArg(Password);

    Password = HashSHA512AndEncodeHex(Password);

    CharactersDB->PExecute("INSERT INTO `players` VALUES (%llu, '%s', '%s', 'none', 0, 0, 'dg_classm32.gif', 0, 0, 0, 0, 0)", Database::GenerateGUID(), Username.c_str(), Password.c_str());
    if (Console)
        sLog.Write(LEVEL_INFO, LOG_CONSOLE, "Account %s successfully created.", Username.c_str());
    else
    {
        std::string Msg = "Account ";
        Msg += Username;
        Msg += " successfully created.";

        // pPlayer->SendCommandReponse(Msg);
    }
}
void CommandHandler::HandleAccountDeleteCommand()
{
    std::string Username;
    ExtractArg(Username);

    Player* pPlayer = sObjectMgr.GetPlayer(Username);
    if (pPlayer->IsInWorld())
        pPlayer->LogOut();

    sDatabase.PExecute("DELETE FROM `players` WHERE `username` = '%s'", Username.c_str());
}
void CommandHandler::HandleAccountDeleteCommand()
{
    std::string Username;
    ExtractArg(Username);

    Player* pPlayer = ObjectAccessor::GetInstance()->FindPlayer(Username);

    if (pPlayer->IsInWorld())
        pPlayer->LogOut();

    CharactersDB->PExecute("DELETE FROM `players` WHERE `username` = '%s'", Username.c_str());
}
Beispiel #17
0
int
handle_cli_command(char *buffer)
{
	// First we form arguments out of this buffer
	int argc = 0;
	char* argv[100] = { 0 };

	while (ExtractArg(buffer, &argv[argc++], &buffer) >= 0);

#if 0
	ProcessCommand(argc, argv, 0x0002);
#endif

	return(0);
}
void CommandHandler::HandleBringCommand()
{
    std::string PlayerName;
    ExtractArg(PlayerName);

    Player* pTargetPlayer = sObjectMgr.GetPlayer(PlayerName);

    if (pTargetPlayer)
    {
        if (pTargetPlayer->IsInWorld())
        {
            pTargetPlayer->Teleport(pPlayer->GetPosition());
        }
        else
        {
            pPlayer->SendCommandReponse("Player is not in world !");
        }
    }
    else
        pPlayer->SendCommandReponse("Player doesn't exist !");
}
void CommandHandler::HandleTeleportToCommand()
{
    std::string PlayerName;
    ExtractArg(PlayerName);

    Player* pTargetPlayer = ObjectAccessor::GetInstance()->FindPlayer(PlayerName);
    if (pTargetPlayer)
    {
        if (pTargetPlayer->IsInWorld())
        {
            pPlayer->Teleport((Map*)pTargetPlayer->GetContainer(), pTargetPlayer->GetPosition());
        }
        else
        {
            pPlayer->SendCommandReponse("Player is not in world !");
        }
    }
    else
    {
        pPlayer->SendCommandReponse("Player doesn't exist !");
    }
}
void CommandHandler::HandleHelpCommand()
{
    std::string Command, Help;
    ExtractArg(Command);

    ChatCommand* pCommand = SubCommandHelper(Command);

    if (pCommand == nullptr)
    {
        if (Console)
            sLog.Write(LEVEL_INFO, LOG_CONSOLE, "There is not a such command !");
        else
            pPlayer->SendCommandReponse("There is not a such command !");

        return;
    }
    else
        Help = pCommand->Help;

    if (Console)
        sLog.Write(LEVEL_INFO, LOG_CONSOLE, Help);
    else
        pPlayer->SendCommandReponse(Help);
}
Beispiel #21
0
/* Extracts the drop argument, if present, from the argument list.
   The object being subsetted must be the first argument. */
static void ExtractDropArg(SEXP el, int *drop)
{
    SEXP dropArg = ExtractArg(el, R_DropSymbol);
    *drop = asLogical(dropArg);
    if (*drop == NA_LOGICAL) *drop = 1;
}
void CommandHandler::HandleShutdownCommand()
{
    uint32 Time;
    ExtractArg(Time);
}
Beispiel #23
0
bool ChatHandler::HandlePunishCommand(char *args)
{
    Player *plr = NULL;
    std::string pname;
    uint64 plr_guid = 0;
    uint32 accid = 0;
    if(!ExtractPlayerTarget(&args, &plr, NULL, &pname))
        return false;

    if(plr)
        accid = plr->GetSession()->GetAccountId();
    else
    {
        std::string pname_esc(pname);
        CharacterDatabase.escape_string(pname_esc);
        QueryResult *result = CharacterDatabase.PQuery("SELECT account FROM characters WHERE name = '%s'", pname_esc.c_str());
        if(!result)
        {
            SendSysMessage(LANG_PLAYER_NOT_FOUND);
            SetSentErrorMessage(true);
            return false;
        }
        Field *fields = result->Fetch();
        accid = fields[0].GetUInt32();
        delete result;
    }

    // extra check, not sure if really necessary, but we better be on the safe side!
    if(!accid)
    {
        SendSysMessage(LANG_PLAYER_NOT_FOUND);
        SetSentErrorMessage(true);
        return false;
    }

    // find only player from same account if any
    if (!plr)
    {
        if (WorldSession* session = sWorld.FindSession(accid))
        {
            plr = session->GetPlayer();
            pname = plr->GetName();
        }
    }

    char *what = ExtractArg(&args);
    char *reason = ExtractArg(&args);

    std::string strWhat(what ? what : "");

    bool handled = sPunishMgr.Handle(accid, plr, m_session->GetPlayer(), pname, strWhat, reason ? reason : GetMangosString(LANG_NO_REASON_GIVEN));

    if(!handled)
    {
        PSendSysMessage(LANG_NO_RECORD_IN_DB, strWhat.c_str());
        SetSentErrorMessage(true);
        return false;
    }

    return true;
}
Beispiel #24
0
int
handle_command(char *buffer)
{
	int rc = 1;
	char *op;
	int cmdtype;
	static unsigned long mark;

	if (ExtractArg(buffer, &op, &buffer) < 0)
	{
		return -1;
	}

	cmdtype = type_command(op);

	switch (cmdtype)
	{
		case COMMAND_GET:
			handle_get_command(buffer);
			break;
		case COMMAND_SET:
			handle_set_command(buffer);
			break;
		case COMMAND_RESET:
			handle_reset_command(buffer);
			break;
		case COMMAND_BYE:
			handle_bye_command(buffer);
			rc = 0;
			break;
		case COMMAND_CLI:
			handle_cli_command(buffer);
			break;
		case COMMAND_MEMSTART:
#ifdef _DMALLOC_
		dmalloc_message("starting new log");
		mark = dmalloc_mark();
#elif _DBMALLOC_ 
			if(malloc_chain_check(0)!=0)
			{
				int fd;
                fd = open("/usr/local/nextone/logs/malloc.inuse", O_CREAT|O_RDWR
);
                malloc_dump(fd );
                close(fd);

			}
			orig_size = malloc_inuse(&histid1);
#endif
            break;	
		case COMMAND_MEMSTOP:
#ifdef _DMALLOC_
		dmalloc_log_changed(mark, 1, 0, 1);
		dmalloc_message("end of log");
#elif _DBMALLOC_ 
			current_size = malloc_inuse(&histid2);

            if(current_size != orig_size)
            {
				int fd;

                fd = open("/usr/local/nextone/logs/malloc.inuse", O_CREAT|O_RDWR
);
                malloc_list(fd, histid1, histid2);
                close(fd);
            }
#endif
            break;

		case COMMAND_NONE:
		default:
			break;
	}

	return rc;
}