• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[0.2] Need2Add anti-spam to EmoteSpells

cbrm

Retired scripter
Staff member
Global Moderator
Joined
Jan 6, 2009
Messages
6,599
Solutions
3
Reaction score
972
Location
Caribbean Sea
game.cpp

Code:
return internalCreatureSay(player, SPEAK_SAY, text);

Replaced to:

Code:
return internalCreatureSay(player, SPEAK_MONSTER_SAY, text);

but still a player can spam or talk shit:

exura "You see Dark Phoenix. He was killed by bla bla bla
I would like to be:

>exura "bla bla bla

then it just appears in orange:

>exura
so I don't want to be all time jailing or banning. I've seen other ots's with this feature, and I already googled here but no results. How can I fix it via C++ so spam/shittalk is deleted? I got tfs 0.2.5
 
Last edited:
Untested, but try:
Code:
bool Game::playerSaySpell(Player* player, SpeakClasses type, const std::string& text)
{
	if(player->getName() == "Account Manager")
		return internalCreatureSay(player, SPEAK_SAY, text);

	StringVec nText = explodeString(text, "\"");
	TalkActionResult_t result;
	result = g_talkActions->playerSaySpell(player, type, text);
	if(result == TALKACTION_BREAK)
		return true;

	result = g_spells->playerSaySpell(player, type, nText);
	if(result == TALKACTION_BREAK)
        	return internalCreatureSay(player, SPEAK_MONSTER_SAY, text);
        else              
		return internalCreatureSay(player, SPEAK_SAY, nText);
		
}
 
Bugs
3360 C:\Users\Cybermaster\Documents\TIBIARD\C++\forgottenserver-0.2.5\0.2.5\game.cpp `StringVec' was not declared in this scope
3360 C:\Users\Cybermaster\Documents\TIBIARD\C++\forgottenserver-0.2.5\0.2.5\game.cpp expected `;' before "nText"
3366 C:\Users\Cybermaster\Documents\TIBIARD\C++\forgottenserver-0.2.5\0.2.5\game.cpp `nText' was not declared in this scope
 
Code:
bool Game::playerSaySpell(Player* player, SpeakClasses type, const std::string& text)
{
	if(player->getName() == "Account Manager")
		return internalCreatureSay(player, SPEAK_SAY, text);

	StringVec nText = explodeString(text, "\"");
	TalkActionResult_t result;
	result = g_talkActions->playerSaySpell(player, type, text);
	if(result == TALKACTION_BREAK)
		return true;

	result = g_spells->playerSaySpell(player, type, nText[1]);
	if(result == TALKACTION_BREAK)
        	return internalCreatureSay(player, SPEAK_MONSTER_SAY, text);
        else              
		return internalCreatureSay(player, SPEAK_SAY, nText[1]);
		
}

Maybe this :p
 
Code:
ReturnValue Spells::onPlayerSay(Player* player, const std::string& words)
{
    std::string reWords = words;
    trimString(reWords);

    InstantSpell* instantSpell = getInstantSpell(reWords);
    if(!instantSpell)
        return RET_NOTPOSSIBLE;

    size_t size = instantSpell->getWords().length();
    std::string param = reWords.substr(size, reWords.length() - size), reParam = "";
    if(instantSpell->getHasParam() && !param.empty() && param[0] == ' ')
    {
        size_t quote = param.find('"', 1);
        if(quote != std::string::npos)
        {
            size_t tmp = param.find('"', quote + 1);
            if(tmp == std::string::npos)
                tmp = param.length();

            reParam = param.substr(quote + 1, tmp - quote - 1);
        }
        else if(param.find(' ', 1) == std::string::npos)
            reParam = param.substr(1, param.length());

        trimString(reParam);
    }

    if(!instantSpell->playerCastInstant(player, reParam))
        return RET_NEEDEXCHANGE;

    SpeakClasses type = SPEAK_SAY;
    if(g_config.getBool(ConfigManager::EMOTE_SPELLS))
        type = SPEAK_MONSTER_SAY;

    if(!g_config.getBool(ConfigManager::SPELL_NAME_INSTEAD_WORDS))
        return g_game.internalCreatureSay(player, type, reWords, player->isGhost()) ?
            RET_NOERROR : RET_NOTPOSSIBLE;

    std::string ret = instantSpell->getName();
    if(param.length())
    {
        trimString(param);
        size_t tmp = 0, rtmp = param.length();
        if(param[0] == '"')
            tmp = 1;

        if(param[rtmp] == '"')
            rtmp -= 1;

        ret += ": " + param.substr(tmp, rtmp);
    }

    return g_game.internalCreatureSay(player, type, ret, player->isGhost()) ?
        RET_NOERROR : RET_NOTPOSSIBLE;
}
 
I removed
Code:
    if(param.length())
    {
        trimString(param);
        size_t tmp = 0, rtmp = param.length();
        if(param[0] == '"')
            tmp = 1;

        if(param[rtmp] == '"')
            rtmp -= 1;

        ret += ": " + param.substr(tmp, rtmp);
    }
now the TFS doesn't start up
 
Back
Top