• 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

Homeslice

-anoyn/Rage the Mage
Joined
May 9, 2010
Messages
112
Solutions
2
Reaction score
61
Location
Canada
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)
 

Syiko

Scripter/Developer
Joined
Aug 28, 2017
Messages
425
Solutions
3
Reaction score
89
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
 

roriscrave

Advanced OT User
Joined
Dec 7, 2011
Messages
1,097
Solutions
34
Reaction score
184
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?
 

Stellow

C++/C#/PHP/LUA
Joined
Oct 23, 2008
Messages
1,096
Reaction score
204
Location
Germany
GitHub
eubrunomiguel
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?
 

Silba

is stephany, the josh wife
Premium User
Joined
Aug 22, 2013
Messages
415
Solutions
9
Reaction score
330
@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.
 

Narg

Member
Joined
Jul 11, 2012
Messages
28
Reaction score
9
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!!
 

Znote

<?php echo $title; ?>
Staff member
Global Moderator
Premium User
Joined
Feb 14, 2008
Messages
7,023
Solutions
257
Reaction score
2,062
Location
Norway
GitHub
Znote
@xinn Has there been any new rule changes lately?
 
Last edited:

Leo32

Getting back into it...
Joined
Sep 21, 2007
Messages
980
Solutions
14
Reaction score
500
@xinn Has there been any new rule changes lately?
[this is a meme]
stay blessed brother
 

Leo32

Getting back into it...
Joined
Sep 21, 2007
Messages
980
Solutions
14
Reaction score
500
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
 

fairbairn96

New Member
Joined
Apr 30, 2020
Messages
1
Reaction score
0
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 ?
 

Evil Puncker

I know nothing
TFS Developer
Joined
May 30, 2009
Messages
8,397
Solutions
245
Reaction score
4,308
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!
 

Acubens

Old Penguin
Joined
May 6, 2008
Messages
1,146
Solutions
8
Reaction score
127
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)
 
Top