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

Tutorial for running 7.7 CipSoft Server on Ubuntu

Exactly, I think at the time, the DB was used to interface with the login and dynamic web server. And whatever services there could be out there. The game itself, does not care much about it. And for a good reason... latency would be a even bigger problem than it already was. Not to mention that the nature of a strict SQL db would also make it basically not real time anymore.

That said, the solution would be attaching a persistent volume to docker run. It would be simpler for non-tech folks to use docker-compose actually.
 
DISCLAIMER
This guide is for educational purposes only! This is intended for setting up the leaked CipSoft files for nostalgia purposes. I cannot guarantee that a server created from this guide will be secure if opened to the public. You will need to take additional measures if you intend on opening your network.


I know it’s a little late, but there might still be people out there, like me, who never got around to trying this out back in 2016 when it was released to OTLand and could benefit from an updated, intelligible tutorial to get this server running on a single instance of Ubuntu. Apparently no one is either capable or willing to write an intelligible tutorial, so here I am.

Even for someone like myself who, as a SysAdmin, has experience with Linux, compiling, networking and Open Tibia, attempting to piece this project together and make it run properly took way longer than it should have due to how poorly the instructions are written. The tutorial by lordkill, while fairly complete, is a) now outdated and b) completely fails to mention several important configuration steps that are necessary to make this work.

Setting up the host

For this tutorial I am using Ubuntu 18.04. I know this isn’t the most modern distribution, but I had an ISO for it sitting in my HD and didn’t feel like downloading a different one. You can use Ubuntu 14, 16 or 20, it doesn’t matter. You can run this on a VM or a dedicated machine, I was able successfully set it up on both, just make sure you have at least 4 GB of Ram and 2 cores if you want it to run smoothly on a VM.

The Game Files

  1. Attached is the “tibia-game.tarball.tar.gz” file. This is a compressed folder that contains all of the game data as well as the game executable. Also attached is the modified “game” file. Download both of these.

  2. Navigate to the Home tab in Files and right-click anywhere to create a new folder, call it “game” (make sure it is all lowercase; Linux is case sensitive).

  3. Right click the “tibia-game.tarball.tar.gz” package and select “Open With Archive Manager.” Click “Extract” in the upper-left then browse to the “game” folder you just created. Wait for it to finish then you can close out of Archive Manager.

  4. Next, we need to move the entire “game” folder to a different directory. This cannot be done like Windows with drag-and-drop, you must use the Terminal. To open the Terminal, right click anywhere on the desktop and select “Open Terminal” from the menu. With Terminal open, type the following command:

    sudo mv /home/your_username/game /home

    You will be asked for your password after entering this command, type it then hit enter to complete it. This command will move the game folder to the /home directory which is necessary for the game to work. If done correctly, you should no longer see the “game” folder in your Home. Instead, it can be found by navigating to the /home directory.

  5. Next, open the “game” folder and use the keyboard shortcut control + h. This will reveal all hidden files, and you should see another dozen or so icons appear in the game folder that were not there before.

  6. Inside the “game” folder there is a sub folder called “bin,” open that. Inside there are several files, the one we are interested in is called “game.” Right-click it, and rename it to “game(vanilla).” Now, drag and drop the “game” file that you downloaded from this post directly into the “bin” folder. This secondary “game” file is the “modified binary” that is talked about in the original thread. We want to run this so we can use the re-named libraries (we’ll get to that later).

  7. While we’re still inside the “bin” subfolder, right click anywhere to open a Terminal window. Enter the command:

    sudo chmod 777 game

    This gives full read, write and execute privileges to the game executable. Without this, you will encounter errors.

  8. Next, back up one level to the main “game” folder. There should be a file called “.tibia,” open it. In the first section, you need to add “/home” to the front of each filepath, so it looks like this:

    C:
    BINPATH     = "/home/game/bin"
    MAPPATH     = "/home/game/map"
    ORIGMAPPATH = "/home/game/origmap"
    DATAPATH    = "/home/game/dat"
    USERPATH    = "/home/game/usr"
    LOGPATH     = "/home/game/log"
    SAVEPATH    = "/home/game/save"
    MONSTERPATH = "/home/game/mon"
    NPCPATH     = "/home/game/npc"

    If you don’t do this, the game executable will not be able to load the map, monsters, npcs, etc. which is (obviously) necessary for the server to run.

  9. Now, go back to your terminal window and enter the command:

    ip a

    Your internal IPV4 address will be listed on the 11th line down, write it down/save it to your clipboard as you will be entering it several times throughout the course of this guide.

  10. Go back to the open .tibia file in Text Editor. Near the bottom of the file, the second to last section is #QueryManager. There is a string of text with IP addresses and ports. Change all of the IP addresses to your IPV4 address from the previous step, and all of the ports to 17778:

    C:
    QueryManager = {("192.168.188.134",17778,"nXE?/>j`"),("192.168.188.134",17778,"nXE?/>j`"),("192.168.188.134",17778,"nXE?/>j`"),("192.168.188.134",17778,"nXE?/>j`")}

    We’re done editing this file, save it and close out.

  11. Now, we need to copy this .tibia file to our user directory. The quickest way to do this is by right-clicking anywhere inside the “game” folder and opening an instance of Terminal. In this new terminal window, enter the command:

    sudo cp .tibia /home/your_username

    You can verify it worked by going to your Home and checking to see if the file is there.
Linux Libraries

Now it is time for the (in)famous Linux libraries or “libs” as they are often referred to. Library files are necessary for certain programs to run, and if they are not setup correctly you will quickly run into confusing, frustrating error messages. Searching online won’t help much as these Libraries are specific to CipSoft’s files, so unless you spend hours teaching yourself about Linux library structure, you won’t know what to do unless someone tells you. The OTLand experts love chiming in and saying “just check the libs” whenever someone asks a question, but to a beginner that means nothing.

  1. Attached is a .rar file called “dennis-libraries.” If you haven’t already, download this and unpack it to your Home.

  2. Next, we need to copy these files from the “dennis-libraries” folder to their final destination, the /lib directory. This is done by entering the following command in Terminal (open the Terminal window inside the dennis-libraries folder so you don’t have to type the full address):

    sudo cp {ilovesatan.so.9,libc.so.6,lmao.so.9,payhunted.so.9,rofl.so.9,satanism.so.9,test_libpthread.so,trololol.so.9} /lib

    You can confirm that this worked by navigating to Other Locations, Computer, lib.

  3. Now what we need to do is give full RWX (read, write, execute) permissions to these libraries so the game executable can fully access them. This can be done by going to Terminal, and entering the command:

    sudo chmod –R 777 /lib

  4. Now we need to download and install the 32-bit libraries. The CipSoft game file is a 32-bit program, and standard Ubuntu 18.04 does not have a 32-bit version. This can be done by entering the following commands in Terminal:

    sudo apt-get update
    sudo apt-get install lib32z1

    Terminal will ask you if you want to install [y/n], make sure to hit y. Once the install is finished, there should be a new file called “ld-linux.so.2” in the /lib directory.
Setting up the Database (Apache, MySQL & phpMyAdmin):


If you try and follow the instructions in lordkill’s post for setting up a database, you’re going to feel like pulling your hair out since he assumes you know how to create and import a blank database using MySQL commands. Here is the quickest way to import the database and install phpMyAdmin for easy UI.
  1. In Terminal, install Apache with the following command:

    sudo apt update && sudo apt install apache2

    Make sure to enter your password and “y” when prompted to complete the installation.

  2. We need to allow Apache through the firewall, do this with the following command in Terminal:

    sudo ufw allow in “Apache Full”

  3. Enable the firewall with:

    sudo ufw enable

  4. You can confirm Apache is running with the following command:

    sudo service apache2 status

    The 4th line down of the output should say "Active: active (running)"

  5. Next, we need to install MySQL. The command to do that is:

    sudo apt update && sudo apt install mysql-server

  6. Once the installation has finished, you can again check to make sure MySQL is running but using the command:

    sudo service mysql status

  7. You should get a return that says “Active: active running since <date>.” This means MySQL is running, enter q to exit.

  8. Next, install phpMyAdmin with the command:

    sudo apt update && sudo apt install phpmyadmin

    When prompted, select apache2, then select ‘yes.’

  9. Next, we need to increase the maximum data import size that phpMyAdmin will allow (it’s set to only 2 MB by default). Open the necessary file with this command:

    sudo gedit /etc/php/7.2/apache2/php.ini

    Find “upload_max_filesize = 2M” and change it to: upload_max_filesize = 64M

  10. Next, enter the command:

    sudo gedit /etc/apache2/apache2.conf

    This will open a file in Text Editor, you need to scroll down to the very bottom of the file and simply add this line:

    Include /etc/phpmyadmin/apache.conf

    Now you can save and close.

  11. Now we need to make a MySQL user. Enter the command:

    sudo mysql –p –u root

    You will be prompted for your password.

  12. While we are in MySQL, we will create a user account. This is done with the following command:

    CREATE USER ‘otserv’@’%’ IDENTIFIED BY ‘password of your choice’;

    It is important that you use ‘otserv’ as the username for the sake of making the setup easy. If you change the username to something else, there are several lines of code that must be edited to match your username.

  13. Next, we need to grant our MySQL user account all necessary permissions with the following command:

    GRANT ALL PRIVILEGES ON . to ‘otserv’@’%’ WITH GRANT OPTION;

  14. To make sure everything is setup correctly, open Firefox and type 127.0.0.1/phpmyadmin in the URL bar. You should be greeted with a login screen. Enter ‘otserv’ for the username and the password you chose in step 11.

  15. Once you’ve logged in, click “New” from the accordion menu in the upper left. For the new database name, use “otserv,” leave all of the defaults as is and click “Create:”

  16. Now, we need to import the existing database tables with all of the CipSoft data. Make sure you have the newly-created “otserv” database selected from the accordion menu, then open the “Import” tab.

    You should have downloaded and unpacked the “otserv_data_schema.sql” file from this post, click Browse to locate and import it. Once you’ve done that, click “Go” at the bottom of the page.

  17. You should get a green banner message at the top of the page saying that the rows were imported successfully. You may also get some warning errors, you can ignore these.

  18. The final step for the database is done by editing a file with the following command:

    sudo gedit /etc/mysql/mysql.conf.d

    Use control + f to locate the line that says “bind-address,” then change the IP from 127.0.0.1 to 0.0.0.0. This allows any address to communicate with the database.
Setting up the Query Manager


The Querymanager is required to accept and direct incoming client requests to the database. The file attached here includes the source files, but you will need to edit the main.cpp file with your IP address and database password before compiling the sources to get an executable.

  1. First, we need to install a package that will allow us to compile the source files. This can be done with the following command:

    sudo apt-get install g++ libmysqlclient-dev mysql-server

  2. Once this has finished installing, navigate to the “realots-query-manager-master” folder and open “main.cpp” with Text Editor.

    In this particular query manager, there 8 locations where you need to change the existing database password to the password you made for your “otserv” user. The easiest way to find these is by control + f searching the first couple letters of the default password (Cz7u89dmyPzHDNEL). Every line where you find this, replace it with your database user password.

  3. Next, use control + f to find this line:

    std::string q_world = "otserver"

    and replace ‘otserver’ with ‘RealOTS.’

  4. Now, search for the line:

    C++:
    hton1(INADDR_LOOPBACK)

    and replace it with:

    C++:
    inet_addr("your IPV4 address")

    Yes, the quotes need to be in there.

  5. Finally, use search to find

    C++:
    writeMsg.adByte(213)

    You should see 4 lines total, each with a different number. Each line corresponds to a number in your IP address. Using my VM as an example, I changed the 4 lines to:

    C++:
    writeMsg.adByte(192);
    writeMsg.adByte(168);
    writeMsg.adByte(188);
    writeMsg.adByte(134);

    Once this is done, save and close out of main.cpp.

  6. Now, we are ready to compile the Query Manager. Inside the “realots-query-manager-master” folder, right click and open Terminal. Enter the command:

    sudo make

  7. If done correctly, there should now be a new file in the folder called “querymanager.” To run it, in the same instance of Terminal, enter the command:

    ./querymanager

    If everything was done correctly, you should get an output that says:


    Code:
    -------------------------
    OTServ QueryManager
    -------------------------
    :: Connecting to the MySQL database...[done]
    :: Starting OTServ QueryManager...
    [done]
Running the Game

Before running the game, let’s take a moment to open some necessary ports in the firewall. Without this, login requests from the client will never make it to the database (and you will just get connection timeout errors).

  1. Open Terminal and type the following commands:

    sudo ufw allow 7171/tcp
    sudo ufw allow 7172/tcp

  2. Navigate back to the “game” folder (which is in the /home directory). Inside the “game” folder, there is a folder called “save.” Open it to make sure there isn’t anything inside. If you see a file called game.pid, delete it. This file is created anytime the game executable is run, and if you try and start a new instance of the game executable while there is a game.pid file in the “save” folder, you will get an error message saying there is already an instance of the server running.

  3. If there was nothing in the “save” folder, you can back out and go into the “bin” folder. From here, right click and open a new instance of Terminal. Enter the command:

    ./game

    You should see the terminal window will fill up with lines of results, indicating the map, monsters, NPCs, houses, etc. are loading. Once that has finished, the game is ready and we can move on to the next step.
The Login Server
  1. First, make sure you have downloaded and unpacked the “realotsloginserver-master” source files, and that they are located in Home with the Query Manager. These are just the source files, so we need to compile. Start by installing the necessary packages:

    sudo apt-get update
    sudo apt-get install cmake build-essential liblua5.2-dev libgmp3-dev libmysqlclient-dev libboost-system-dev libpugixml-dev

  2. Once that has finished installing, right-click inside the “realotsloginserver-master” folder and open an instance of Terminal. Enter the following command:

    sudo mkdir build && cd build

    This creates a new folder called “build” and moves you to it.

  3. Now, enter the commands:

    sudo cmake ..
    make

  4. There should now be a file inside of build called “tfls." Copy this up one level to the main “realotsloginserver-master” folder.

  5. Now, inside the main folder, open config.lua with Text Editor. The following lines must be changed:
    View attachment 54593

    “ip” must be changed to your VM’s IPV4 address, clientVersionMin/Max/Str must be changed to 770, 770 and 7.70, respectively. The MySQL Host must also be set to your IPV4 address, and the username, password and database name must be changed to reflect your “otserv” databse and “otserv” username and password. Once these lines have been changed, you can save and close config.lua.

  6. Finally, in the “realotsloginserver-master” there is a file called “gameservers.xml.” Open it with Text Editor, you’ll see there’s only a couple lines of code, enter your IP address where it says “ip=”. Save and close the file.

  7. From the “realotsloginserver-master” folder, right click and open a new instance of Terminal. Enter the command:

    ./tfls

    You should get an output saying the login server is online.
Creating a Custom Client

The final step is creating a custom client using a hex editing tool. This can seem daunting, but it really isn’t that hard. There is already a great tutorial by Jester (lordkill references this in his tutorial as well) here. To clarify, you can skip the first step about replacing the RSA key and skip straight to the second half about changing the IP.

The only thing I would add is that the link in his tutorial is broken, if you want to use the same program he is, simply do a Google search for “XVI32 Hex Editor.” The “official” download site is the first result (I won’t post the link here, not sure if it’s allowed).

Once you’ve finished creating your custom 7.70 client, go ahead and grab an account number and password from the “Users” tab of the otserv database from the accordion menu in your phpMyAdmin page. If you followed all the steps, you should get a character list and be able to log in to the game.


Modified "game" file: 4.25 MB file on MEGA (https://mega.nz/file/i40RlSpA#cYXVIp3R_TmukO-FbrFSONmtH9k_TuRmlM4a9m2ljmU)
Tibia-game tarball: 290.61 MB file on MEGA (https://mega.nz/file/iksxxI6C#0WSSzeaRwmS-8FMtrWObe3ZA8kSQMNJTrPFn0Kac-LA)

Dude, is there any binaries like this for debian 11?
 
Hello friends, I don't talk much but I would like to thank you for the initiative to make this wonderful content available, I had some problems with the command to give privileges to the user otserv, mine returned an error, so I modified it and put it like this.

GRANT ALL ON . TO 'otserv'@'%' IDENTIFIED BY 'YOU_PASSWORD' WITH GRANT OPTION;
 
I'm getting this error when trying to "make" in the login server bit.

---
update, tried sudo make and it did some stuff.

Now i'm left with a file called tfls_CXX_cotire.cmake in the folder, but no tfls. Any ideas? Here is the error that I get

mateus@mateus-G73Sw:/home/realotsloginserver-master/build$ sudo make
[sudo] senha para mateus:
Consolidate compiler generated dependencies of target tfls
[ 3%] Building CXX object CMakeFiles/tfls.dir/src/connection.cpp.o
/home/realotsloginserver-master/src/connection.cpp: In member function ‘void Connection::accept()’:
/home/realotsloginserver-master/src/connection.cpp:125:95: error: no matching function for call to ‘boost::posix_time::seconds::seconds(Connection::<unnamed enum>)’
125 | expires_from_now(boost::posix_time::seconds(Connection::read_timeout));
| ^

In file included from /usr/include/boost/date_time/posix_time/posix_time_types.hpp:16,
from /usr/include/boost/asio/time_traits.hpp:23,
from /usr/include/boost/asio/detail/timer_queue_ptime.hpp:22,
from /usr/include/boost/asio/detail/deadline_timer_service.hpp:29,
from /usr/include/boost/asio/basic_deadline_timer.hpp:25,
from /usr/include/boost/asio.hpp:25,
from /home/realotsloginserver-master/src/otpch.h:42,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.cxx:4,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.hxx:4:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: candidate: ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*)’
57 | BOOST_CXX14_CONSTEXPR explicit seconds(T const& s,
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: template argument deduction/substitution failed:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp: In substitution of ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*) [with T = Connection::<unnamed enum>]’:
/home/realotsloginserver-master/src/connection.cpp:125:81: required from here
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_integral<Connection::<unnamed enum> >, void>’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)’
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘const boost::posix_time::seconds&’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(boost::posix_time::seconds&&)’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘boost::posix_time::seconds&&’
/home/realotsloginserver-master/src/connection.cpp: In member function ‘void Connection::parseHeader(const boost::system::error_code&)’:
/home/realotsloginserver-master/src/connection.cpp:169:95: error: no matching function for call to ‘boost::posix_time::seconds::seconds(Connection::<unnamed enum>)’
169 | expires_from_now(boost::posix_time::seconds(Connection::read_timeout));
| ^

In file included from /usr/include/boost/date_time/posix_time/posix_time_types.hpp:16,
from /usr/include/boost/asio/time_traits.hpp:23,
from /usr/include/boost/asio/detail/timer_queue_ptime.hpp:22,
from /usr/include/boost/asio/detail/deadline_timer_service.hpp:29,
from /usr/include/boost/asio/basic_deadline_timer.hpp:25,
from /usr/include/boost/asio.hpp:25,
from /home/realotsloginserver-master/src/otpch.h:42,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.cxx:4,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.hxx:4:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: candidate: ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*)’
57 | BOOST_CXX14_CONSTEXPR explicit seconds(T const& s,
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: template argument deduction/substitution failed:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp: In substitution of ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*) [with T = Connection::<unnamed enum>]’:
/home/realotsloginserver-master/src/connection.cpp:169:81: required from here
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_integral<Connection::<unnamed enum> >, void>’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)’
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘const boost::posix_time::seconds&’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(boost::posix_time::seconds&&)’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘boost::posix_time::seconds&&’
/home/realotsloginserver-master/src/connection.cpp: In member function ‘void Connection::parsePacket(const boost::system::error_code&)’:
/home/realotsloginserver-master/src/connection.cpp:236:95: error: no matching function for call to ‘boost::posix_time::seconds::seconds(Connection::<unnamed enum>)’
236 | expires_from_now(boost::posix_time::seconds(Connection::read_timeout));
| ^

In file included from /usr/include/boost/date_time/posix_time/posix_time_types.hpp:16,
from /usr/include/boost/asio/time_traits.hpp:23,
from /usr/include/boost/asio/detail/timer_queue_ptime.hpp:22,
from /usr/include/boost/asio/detail/deadline_timer_service.hpp:29,
from /usr/include/boost/asio/basic_deadline_timer.hpp:25,
from /usr/include/boost/asio.hpp:25,
from /home/realotsloginserver-master/src/otpch.h:42,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.cxx:4,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.hxx:4:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: candidate: ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*)’
57 | BOOST_CXX14_CONSTEXPR explicit seconds(T const& s,
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: template argument deduction/substitution failed:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp: In substitution of ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*) [with T = Connection::<unnamed enum>]’:
/home/realotsloginserver-master/src/connection.cpp:236:81: required from here
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_integral<Connection::<unnamed enum> >, void>’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)’
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘const boost::posix_time::seconds&’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(boost::posix_time::seconds&&)’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘boost::posix_time::seconds&&’
/home/realotsloginserver-master/src/connection.cpp: In member function ‘void Connection::internalSend(const OutputMessage_ptr&)’:
/home/realotsloginserver-master/src/connection.cpp:272:97: error: no matching function for call to ‘boost::posix_time::seconds::seconds(Connection::<unnamed enum>)’
272 | xpires_from_now(boost::posix_time::seconds(Connection::write_timeout));
| ^

In file included from /usr/include/boost/date_time/posix_time/posix_time_types.hpp:16,
from /usr/include/boost/asio/time_traits.hpp:23,
from /usr/include/boost/asio/detail/timer_queue_ptime.hpp:22,
from /usr/include/boost/asio/detail/deadline_timer_service.hpp:29,
from /usr/include/boost/asio/basic_deadline_timer.hpp:25,
from /usr/include/boost/asio.hpp:25,
from /home/realotsloginserver-master/src/otpch.h:42,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.cxx:4,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.hxx:4:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: candidate: ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*)’
57 | BOOST_CXX14_CONSTEXPR explicit seconds(T const& s,
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: template argument deduction/substitution failed:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp: In substitution of ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*) [with T = Connection::<unnamed enum>]’:
/home/realotsloginserver-master/src/connection.cpp:272:83: required from here
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_integral<Connection::<unnamed enum> >, void>’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)’
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘const boost::posix_time::seconds&’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(boost::posix_time::seconds&&)’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘boost::posix_time::seconds&&’
make[2]: *** [CMakeFiles/tfls.dir/build.make:120: CMakeFiles/tfls.dir/src/connection.cpp.o] Erro 1
make[1]: *** [CMakeFiles/Makefile2:86: CMakeFiles/tfls.dir/all] Erro 2
make: *** [Makefile:91: all] Erro 2
 
Last edited:
I'm getting this error when trying to "make" in the login server bit.

---
update, tried sudo make and it did some stuff.

Now i'm left with a file called tfls_CXX_cotire.cmake in the folder, but no tfls. Any ideas? Here is the error that I get

mateus@mateus-G73Sw:/home/realotsloginserver-master/build$ sudo make
[sudo] senha para mateus:
Consolidate compiler generated dependencies of target tfls
[ 3%] Building CXX object CMakeFiles/tfls.dir/src/connection.cpp.o
/home/realotsloginserver-master/src/connection.cpp: In member function ‘void Connection::accept()’:
/home/realotsloginserver-master/src/connection.cpp:125:95: error: no matching function for call to ‘boost::posix_time::seconds::seconds(Connection::<unnamed enum>)’
125 | expires_from_now(boost::posix_time::seconds(Connection::read_timeout));
| ^

In file included from /usr/include/boost/date_time/posix_time/posix_time_types.hpp:16,
from /usr/include/boost/asio/time_traits.hpp:23,
from /usr/include/boost/asio/detail/timer_queue_ptime.hpp:22,
from /usr/include/boost/asio/detail/deadline_timer_service.hpp:29,
from /usr/include/boost/asio/basic_deadline_timer.hpp:25,
from /usr/include/boost/asio.hpp:25,
from /home/realotsloginserver-master/src/otpch.h:42,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.cxx:4,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.hxx:4:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: candidate: ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*)’
57 | BOOST_CXX14_CONSTEXPR explicit seconds(T const& s,
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: template argument deduction/substitution failed:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp: In substitution of ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*) [with T = Connection::<unnamed enum>]’:
/home/realotsloginserver-master/src/connection.cpp:125:81: required from here
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_integral<Connection::<unnamed enum> >, void>’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)’
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘const boost::posix_time::seconds&’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(boost::posix_time::seconds&&)’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘boost::posix_time::seconds&&’
/home/realotsloginserver-master/src/connection.cpp: In member function ‘void Connection::parseHeader(const boost::system::error_code&)’:
/home/realotsloginserver-master/src/connection.cpp:169:95: error: no matching function for call to ‘boost::posix_time::seconds::seconds(Connection::<unnamed enum>)’
169 | expires_from_now(boost::posix_time::seconds(Connection::read_timeout));
| ^

In file included from /usr/include/boost/date_time/posix_time/posix_time_types.hpp:16,
from /usr/include/boost/asio/time_traits.hpp:23,
from /usr/include/boost/asio/detail/timer_queue_ptime.hpp:22,
from /usr/include/boost/asio/detail/deadline_timer_service.hpp:29,
from /usr/include/boost/asio/basic_deadline_timer.hpp:25,
from /usr/include/boost/asio.hpp:25,
from /home/realotsloginserver-master/src/otpch.h:42,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.cxx:4,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.hxx:4:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: candidate: ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*)’
57 | BOOST_CXX14_CONSTEXPR explicit seconds(T const& s,
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: template argument deduction/substitution failed:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp: In substitution of ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*) [with T = Connection::<unnamed enum>]’:
/home/realotsloginserver-master/src/connection.cpp:169:81: required from here
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_integral<Connection::<unnamed enum> >, void>’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)’
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘const boost::posix_time::seconds&’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(boost::posix_time::seconds&&)’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘boost::posix_time::seconds&&’
/home/realotsloginserver-master/src/connection.cpp: In member function ‘void Connection::parsePacket(const boost::system::error_code&)’:
/home/realotsloginserver-master/src/connection.cpp:236:95: error: no matching function for call to ‘boost::posix_time::seconds::seconds(Connection::<unnamed enum>)’
236 | expires_from_now(boost::posix_time::seconds(Connection::read_timeout));
| ^

In file included from /usr/include/boost/date_time/posix_time/posix_time_types.hpp:16,
from /usr/include/boost/asio/time_traits.hpp:23,
from /usr/include/boost/asio/detail/timer_queue_ptime.hpp:22,
from /usr/include/boost/asio/detail/deadline_timer_service.hpp:29,
from /usr/include/boost/asio/basic_deadline_timer.hpp:25,
from /usr/include/boost/asio.hpp:25,
from /home/realotsloginserver-master/src/otpch.h:42,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.cxx:4,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.hxx:4:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: candidate: ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*)’
57 | BOOST_CXX14_CONSTEXPR explicit seconds(T const& s,
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: template argument deduction/substitution failed:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp: In substitution of ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*) [with T = Connection::<unnamed enum>]’:
/home/realotsloginserver-master/src/connection.cpp:236:81: required from here
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_integral<Connection::<unnamed enum> >, void>’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)’
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘const boost::posix_time::seconds&’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(boost::posix_time::seconds&&)’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘boost::posix_time::seconds&&’
/home/realotsloginserver-master/src/connection.cpp: In member function ‘void Connection::internalSend(const OutputMessage_ptr&)’:
/home/realotsloginserver-master/src/connection.cpp:272:97: error: no matching function for call to ‘boost::posix_time::seconds::seconds(Connection::<unnamed enum>)’
272 | xpires_from_now(boost::posix_time::seconds(Connection::write_timeout));
| ^

In file included from /usr/include/boost/date_time/posix_time/posix_time_types.hpp:16,
from /usr/include/boost/asio/time_traits.hpp:23,
from /usr/include/boost/asio/detail/timer_queue_ptime.hpp:22,
from /usr/include/boost/asio/detail/deadline_timer_service.hpp:29,
from /usr/include/boost/asio/basic_deadline_timer.hpp:25,
from /usr/include/boost/asio.hpp:25,
from /home/realotsloginserver-master/src/otpch.h:42,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.cxx:4,
from /home/realotsloginserver-master/build/cotire/tfls_CXX_prefix.hxx:4:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: candidate: ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*)’
57 | BOOST_CXX14_CONSTEXPR explicit seconds(T const& s,
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: note: template argument deduction/substitution failed:
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp: In substitution of ‘template<class T> boost::posix_time::seconds::seconds(const T&, typename boost::enable_if<boost::is_integral<T>, void>::type*) [with T = Connection::<unnamed enum>]’:
/home/realotsloginserver-master/src/connection.cpp:272:83: required from here
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:57:38: error: no type named ‘type’ in ‘struct boost::enable_if<boost::is_integral<Connection::<unnamed enum> >, void>’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(const boost::posix_time::seconds&)’
53 | class BOOST_SYMBOL_VISIBLE seconds : public time_duration
| ^~~~~~~
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘const boost::posix_time::seconds&’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: candidate: ‘constexpr boost::posix_time::seconds::seconds(boost::posix_time::seconds&&)’
/usr/include/boost/date_time/posix_time/posix_time_duration.hpp:53:30: note: no known conversion for argument 1 from ‘Connection::<unnamed enum>’ to ‘boost::posix_time::seconds&&’
make[2]: *** [CMakeFiles/tfls.dir/build.make:120: CMakeFiles/tfls.dir/src/connection.cpp.o] Erro 1
make[1]: *** [CMakeFiles/Makefile2:86: CMakeFiles/tfls.dir/all] Erro 2
make: *** [Makefile:91: all] Erro 2
One of the libraries required to compile the servers (libboost-system-dev) has had breaking changes since this thread was created a few years ago.

Before running cmake, you need to edit a couple of files inside "realotsloginserver-master":
  • In "connection.cpp", replace Connection::read_timeout with static_cast<long>(Connection::read_timeout).
  • In "connection.cpp", replace Connection::write_timeout with static_cast<long>(Connection::write_timeout).
  • In "database.cpp", replace my_bool with bool.

If you keep having these issues, I recommend to start afresh and use my scripts, which do all of that automatically for you.
 
One of the libraries required to compile the servers (libboost-system-dev) has had breaking changes since this thread was created a few years ago.

Before running cmake, you need to edit a couple of files inside "realotsloginserver-master":
  • In "connection.cpp", replace Connection::read_timeout with static_cast<long>(Connection::read_timeout).
  • In "connection.cpp", replace Connection::write_timeout with static_cast<long>(Connection::write_timeout).
  • In "database.cpp", replace my_bool with bool.

If you keep having these issues, I recommend to start afresh and use my scripts, which do all of that automatically for you.
Thank you! Just did wipe everything and went with your script, awesome work! Left a problem I had on the thread there. Thank you again!
 
yes, I did all that.. I redid it again, with a new VM but the error continues in this step.. I don't know what else I have to do
Post automatically merged:


when i run the game chmod 777 nothing shows up in the terminal it just runs.. should something show up?
Post automatically merged:

where should the "realots-query-manager-master" folder be? I put it in Home but in the tutorial it doesn't specify where it should be
Post automatically merged:

ok, i review somethings, now the error is different..

View attachment 74532
Post automatically merged:

View attachment 74533S

now that

Yes, if the chmod command didn't output anything, it means it worked.

As good as the tutorial is, I agree that sometimes it's still not clear enough. When it says home, I think it refers to the home directory of your current user (~/) rather than the /home/game. In my own experience, it doesn't matter much, as long as both realots projects are in the same folder and your user has access to them.

I think the issue is that you shouldn't run "./game" with another user (you're switching to root). Try calling it with sudo priviledges but still with your current user, like sudo ./game

If you run into more problems, try my script to automate the entire installation. You just need to install the VM, download the files and run the script.

I've used your script @SilverFern but I'm still getting the same error as @igormatx saying it can't find the script "/dat/objects.srv". Tried everything I think, all the chmod 777 commands, also not switching to root... Any ideas on what could be the issue?
 
I've used your script @SilverFern but I'm still getting the same error as @igormatx saying it can't find the script "/dat/objects.srv". Tried everything I think, all the chmod 777 commands, also not switching to root... Any ideas on what could be the issue?

If you're getting that error with the script, it means you either downloaded the wrong files or they were downloaded to the wrong folder.
Please share the screenshot of the error message, as well as the content of the folder (e.g.: run ls and paste the output) in my other thread and I'll happily assist you.
 
Hello!! I'm trying to open the server for a few friends... already tried almost everything haha
The server is running on a Ubuntu dedicated PC

Someone could please give me some tips? 🙌
 
hi guys, whats'up? i tried 1/1 and 999/999 to log in GOD accounts but doesn't works for me..
someone have any idea?
 
Back
Top