• 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!

Very important - Rules change on otservlist.org

I added not counting afk players to gunz's version.
So with this you can have no logout zones or above 15 min kick time and still be within otservlist rules.
This also has gunz's not counting more than 4 mcs per IP.

protocolstatus.cpp (TFS 1.0/1.1/1.2) (1.3 Version available below)

Change:
C++:
players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str();

to

C++:
uint32_t real = 0;

std::map<uint32_t, uint32_t> listIP;

for (const auto& it : g_game.getPlayers()) {
    if (it.second->getIdleTime() < 960000 && it.second->getIP() != 0) {
        auto ip = listIP.find(it.second->getIP());
        if (ip != listIP.end()) {
            listIP[it.second->getIP()]++;
            if (listIP[it.second->getIP()] < 5) {
                real++;
            }
        }
        else {
            listIP[it.second->getIP()] = 1;
            real++;
        }
    }
}
players.append_attribute("online") = std::to_string(real).c_str();

For TFS 1.3
protocolstatus.cpp

Change:
C++:
players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str();

to

C++:
uint32_t real = 0;

std::map<uint32_t, uint32_t> listIP;

for (const auto& it : g_game.getPlayers()) {
    if (it.second->idleTime < 960000 && it.second->getIP() != 0) {
        auto ip = listIP.find(it.second->getIP());
        if (ip != listIP.end()) {
            listIP[it.second->getIP()]++;
            if (listIP[it.second->getIP()] < 5) {
                real++;
            }
        }
        else {
            listIP[it.second->getIP()] = 1;
            real++;
        }
    }
}
players.append_attribute("online") = std::to_string(real).c_str();

in player.h move

C++:
int32_t idleTime = 0;

from the private: section to below "public:" (up)
 
this so arbitrary and honestly, very pointless. Otservlist can't stand a chance against IA algorithms. I have testing a few on my personal server and it took me a year to get banned (by manual reporting). Focus your efforts into a better way to rank servers instead of forcing owners
 
On Monday 5/12/2016 we will start enforcing a new rule on otservlist concerning the number of allowed multi clients counted from a single IP address. Servers are not allowed to count more than 4 multi clients as real players.
As "multi client" we define multiple characters logged in from a single IP address.
As "real players" we mean the number of players online which is returned to otservlist website using the status protocol.

All servers are asked to make necessary changes in their code or apply a global multi client limit (4 connections/IP) for example by using the following iptables rule:
iptables -A INPUT -p tcp --dport GAME_PORT -m connlimit --connlimit-above 4 -j DROP
When applying the above iptable rule, please change GAME_PORT to your server's game port (default: 7172).

What is the reasoning behind this change? Unfortunately we are forced to start enforcing such rule because some server owners started encouraging people to log in as many multi clients as possible.
While we performed our tests, we found out servers, where 10 players logged in 250 (!!!) characters. Of course reporting that there are 250 players online while in fact there are 10 unique people controlling them is false advertising and shouldn't be allowed. Your potential players visiting our website deserve the correct information about the server.

If you need further info, please contact us using the following form: http://otservlist.org/contact.

Working code for TFS 1.0/1.1/1.2 which limits counting multi clients in status protocol from Gunz:
Very important - Rules change on otservlist.org (https://otland.net/threads/very-important-rules-change-on-otservlist-org.247531/page-3#post-2407794)
how can i install this ?? linux ubuntu 14.04 tfs 0.4 sources edit or ? what
 
I added not counting afk players to gunz's version.
So with this you can have no logout zones or above 15 min kick time and still be within otservlist rules.
This also has gunz's not counting more than 4 mcs per IP.

protocolstatus.cpp (TFS 1.0/1.1/1.2) (1.3 Version available below)

Change:
C++:
players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str();

to

C++:
uint32_t real = 0;

std::map<uint32_t, uint32_t> listIP;

for (const auto& it : g_game.getPlayers()) {
    if (it.second->getIdleTime() < 960000 && it.second->getIP() != 0) {
        auto ip = listIP.find(it.second->getIP());
        if (ip != listIP.end()) {
            listIP[it.second->getIP()]++;
            if (listIP[it.second->getIP()] < 5) {
                real++;
            }
        }
        else {
            listIP[it.second->getIP()] = 1;
            real++;
        }
    }
}
players.append_attribute("online") = std::to_string(real).c_str();

For TFS 1.3
protocolstatus.cpp

Change:
C++:
players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str();

to

C++:
uint32_t real = 0;

std::map<uint32_t, uint32_t> listIP;

for (const auto& it : g_game.getPlayers()) {
    if (it.second->idleTime < 960000 && it.second->getIP() != 0) {
        auto ip = listIP.find(it.second->getIP());
        if (ip != listIP.end()) {
            listIP[it.second->getIP()]++;
            if (listIP[it.second->getIP()] < 5) {
                real++;
            }
        }
        else {
            listIP[it.second->getIP()] = 1;
            real++;
        }
    }
}
players.append_attribute("online") = std::to_string(real).c_str();

in player.h move

C++:
int32_t idleTime = 0;

from the private: section to below "public:" (up)
I'm sorry to revive the topic, but I tested this script on a server 1.3 and got banned (I don't use no-logout zones, I use kick every 15 minutes).
I realized that the game was with exit trainer (but from what you said I was not supposed to have problems).
I had problems, I removed the exit trainer, and I'm waiting for the otlist ban to go out to test again. But it seems to me that this function is not functional, someone else tested?
 
I added not counting afk players to gunz's version.
So with this you can have no logout zones or above 15 min kick time and still be within otservlist rules.
This also has gunz's not counting more than 4 mcs per IP.

protocolstatus.cpp (TFS 1.0/1.1/1.2) (1.3 Version available below)

Change:
C++:
players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str();

to

C++:
uint32_t real = 0;

std::map<uint32_t, uint32_t> listIP;

for (const auto& it : g_game.getPlayers()) {
    if (it.second->getIdleTime() < 960000 && it.second->getIP() != 0) {
        auto ip = listIP.find(it.second->getIP());
        if (ip != listIP.end()) {
            listIP[it.second->getIP()]++;
            if (listIP[it.second->getIP()] < 5) {
                real++;
            }
        }
        else {
            listIP[it.second->getIP()] = 1;
            real++;
        }
    }
}
players.append_attribute("online") = std::to_string(real).c_str();

For TFS 1.3
protocolstatus.cpp

Change:
C++:
players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str();

to

C++:
uint32_t real = 0;

std::map<uint32_t, uint32_t> listIP;

for (const auto& it : g_game.getPlayers()) {
    if (it.second->idleTime < 960000 && it.second->getIP() != 0) {
        auto ip = listIP.find(it.second->getIP());
        if (ip != listIP.end()) {
            listIP[it.second->getIP()]++;
            if (listIP[it.second->getIP()] < 5) {
                real++;
            }
        }
        else {
            listIP[it.second->getIP()] = 1;
            real++;
        }
    }
}
players.append_attribute("online") = std::to_string(real).c_str();

in player.h move

C++:
int32_t idleTime = 0;

from the private: section to below "public:" (up)

When is the variable idleTime updated on TFS 1.3? That is probably why our friend below got banned.

I'm sorry to revive the topic, but I tested this script on a server 1.3 and got banned (I don't use no-logout zones, I use kick every 15 minutes).
I realized that the game was with exit trainer (but from what you said I was not supposed to have problems).
I had problems, I removed the exit trainer, and I'm waiting for the otlist ban to go out to test again. But it seems to me that this function is not functional, someone else tested?
 
@Flatlander: That would be great and I will ask TFS coders to implement something like that in future release. When majority of servers starts using it I will change how the data on otservlist are displayed.
However, I need to address now different problem because having servers on the list reporting 700-800 players online while in fact there are 200 unique characters is a nonsense. The server list is for players and our job is to deliver them as much accurate info as possible.
This didn't age well 😅 Now we have server reports 2500+ with less than 200 playing. Great.
 
I added not counting afk players to gunz's version.
So with this you can have no logout zones or above 15 min kick time and still be within otservlist rules.
This also has gunz's not counting more than 4 mcs per IP.

protocolstatus.cpp (TFS 1.0/1.1/1.2) (1.3 Version available below)

Change:
C++:
players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str();

to

C++:
uint32_t real = 0;

std::map<uint32_t, uint32_t> listIP;

for (const auto& it : g_game.getPlayers()) {
    if (it.second->getIdleTime() < 960000 && it.second->getIP() != 0) {
        auto ip = listIP.find(it.second->getIP());
        if (ip != listIP.end()) {
            listIP[it.second->getIP()]++;
            if (listIP[it.second->getIP()] < 5) {
                real++;
            }
        }
        else {
            listIP[it.second->getIP()] = 1;
            real++;
        }
    }
}
players.append_attribute("online") = std::to_string(real).c_str();

For TFS 1.3
protocolstatus.cpp

Change:
C++:
players.append_attribute("online") = std::to_string(g_game.getPlayersOnline()).c_str();

to

C++:
uint32_t real = 0;

std::map<uint32_t, uint32_t> listIP;

for (const auto& it : g_game.getPlayers()) {
    if (it.second->idleTime < 960000 && it.second->getIP() != 0) {
        auto ip = listIP.find(it.second->getIP());
        if (ip != listIP.end()) {
            listIP[it.second->getIP()]++;
            if (listIP[it.second->getIP()] < 5) {
                real++;
            }
        }
        else {
            listIP[it.second->getIP()] = 1;
            real++;
        }
    }
}
players.append_attribute("online") = std::to_string(real).c_str();

in player.h move

C++:
int32_t idleTime = 0;

from the private: section to below "public:" (up)

Very helpful, thanks!!
 
@xinn Has there been any new rule changes lately?
 
Last edited:
@xinn Has there been any new rule changes lately?
[this is a meme]
stay blessed brother
 
meme is having to create a script to 'create' a log on the ot site for him to have access to that log :) yes.. there are some ots that this was requested hahaha

so
once the low-level ot creators know how to manipulate the number otservlist uses to detect multi-clients
they will slowly get flooded with server that spoof that specific data-point until its redundant

we know otservlist has an issue with multi-clients and fake online counts
and the question of how to solve it and keep it solved
its basically the botter problem

if otservlist isn't intelligent in how they deal with it
they create further room for alternative otlist websites to out-compete
the information of how to detect spoofed numbers is either rock-solid or an arms-race
i dont think the otservlist owner is a programmer, i dont know him tho
 
Hello good day! I received the same dotification from otservlist but I can't add this code to my source. I use the TFS version: 0.4 3777 I am an X Angel administrator. I've tried several times but without success. no solution for version 0.4 ?
 
Any tip to avoid this bans in 2022? xD
here znote packed the code 3 in 1:
don't forget to move "int32_t idleTime = 0;" to the public part of the player.h file!
 
here znote packed the code 3 in 1:
don't forget to move "int32_t idleTime = 0;" to the public part of the player.h file!
I'm using othire and on status.cpp ive added the code but there are two functions

getStatusString, should be there only?


Or here too? This another function to give info

OTHire/status.cpp at 1d9987cdbea118ad1a01a6f2bba66cc22c002d63 · Ezzz-dev/OTHire (https://github.com/Ezzz-dev/OTHire/blob/1d9987cdbea118ad1a01a6f2bba66cc22c002d63/source/status.cpp#L235)
 
Could someone clarify what is really necessary for the server to stay within the rules?

I asked some people, they didn't know how to explain it very well, some told me that in addition to the modifications in the source, it is necessary to run a code via cron
which will generate a dump every 5 minutes, and it is necessary to grant access to this file to the otservlist check the dump.

But I haven't seen that anywhere.

Code:
*/5 * * * * lsof -n > /var/www/html/otservlist_verification/log.txt && md5sum /var/www/html/otservlist_verification/log.txt > /var/www/html/otservlist_verification/log.md5
 
So, any news on this? Has this been added to the TFS repo already? It seems stupidly arbitrary but since TFS is an OTLand project, it would make sense to make it compliant out of the box.
 
Back
Top