[7.7] RealOTS 7.7 Cipsoft files (virgin)

murilow1

Member
Joined
Dec 2, 2011
Messages
29
Reaction score
5
In what way is it better than most ots?

if u ever played the 7.~ at its times, its WAY noticeable the difference, stability, behaviors, everything! its the original thing, the only downside that its very limited to modify and i think thats why cip made this way, to be very robust, solid.
 

Terotrificy

Well-Known Member
Joined
Oct 18, 2020
Messages
186
Solutions
8
Reaction score
54
Location
Santiago, Chile.
if u ever played the 7.~ at its times, its WAY noticeable the difference, stability, behaviors, everything! its the original thing, the only downside that its very limited to modify and i think thats why cip made this way, to be very robust, solid.
He just asked a question, not like he is claiming anything lol
 

Shadowox

Active Member
Joined
Nov 9, 2018
Messages
43
Solutions
1
Reaction score
26
GitHub
DiegoRibeiro
In what way is it better than most ots?
if u ever played the 7.~ at its times, its WAY noticeable the difference, stability, behaviors, everything! its the original thing, the only downside that its very limited to modify and i think thats why cip made this way, to be very robust, solid.
It is very stable i have it running almost 2 months without any maintenance 24/7.

And it is the original server.

ofc the ots have their merit but unless you reverse engineering everything and still prone to error in the process. If you want relieve the nostalgia of the old days this server is the only thing that can achieve this.
 

neptuno

Active Member
Joined
Jan 5, 2012
Messages
76
Solutions
1
Reaction score
27
Hello guys, I managed to put the server online, but I couldn't make it save the modified items in houses. Whenever I close and open the server it restarts to the same point it was. Has anyone managed to solve this?
This happens because at startup the server compares owners.dat to the database, via the querymanager. If the querymanager reports that a given character does not exist in the database, then the game server will clean their house anyways.
 

Dark Gladir

Member
Joined
Aug 20, 2017
Messages
19
Reaction score
7
Before Toor sent the hacked files he edited them (as Ezzz mentions, he got them from Toor himself) on january 4th 2007, was this the latest alteration before he sent them? I want to narrow down the exact date when these were published. It was between january 4th and 19th. Was this publicated on this forum?

Ezzz's post from 2013.05.02:
I know it was hacked in 2006, but why is there a NPC dated 2007, even the NPC pack I got from Dennis had this date aswell.

Panic1's post from 2013.05.02:
It says modified in 2007, meaning someone modified them in 2007 before it was released to the public.
<screenshot of the file modified on jan 4th 2007>

Toor's post from 2015.04.16:
Having said that: some files were altered (including but not limited to the moveuse file) to disguise undiscovered quests, as per agreement.
 
Last edited:

kay

Legendary OT User
Joined
Apr 23, 2013
Messages
840
Solutions
9
Reaction score
1,075
Location
32316,31942,7
YouTube
TibiantisOnline
It's not really meant to be a "working" server in that regard... more so for fun or exploring in this Tibia time capsule.

Would be quite difficult to modify this server i think, probably not worth the time.

I might be wrong though 😁
In what way is it better than most ots?

It is a fully working server and it's better than every public ots distribution in all ways but one. It's way faster, lighter (in terms of resources usage), more stable and more reliable than any ots. It's also the real thing, not a clone or an imitation.
The only advantage of otservers, very major one though, is that they're open source. Without the sources it's very laborious to apply any changes and it requires atleast decent knowledge of low-level stuff, including asm. If only that tarball contained sources, this server would have surely been a standard now.

This happens because at startup the server compares owners.dat to the database, via the querymanager. If the querymanager reports that a given character does not exist in the database, then the game server will clean their house anyways.

As far as I remember, if a character isn't loaded its house would become free with the items staying in it, because the game server wouldn't know where to put them. Items would be sent to depot if the owner (from owners.dat) character was loaded but not reported as an owner by querymanager.
I think what that guy meant was that his map didn't save upon closing the server. It's probably because he closes it with ctrl+c, while closing wth map save needs a specific signal. I don't remember the exact number, 15 or 30 maybe. @brunoofgod
 

neptuno

Active Member
Joined
Jan 5, 2012
Messages
76
Solutions
1
Reaction score
27
As far as I remember, if a character isn't loaded its house would become free with the items staying in it, because the game server wouldn't know where to put them. Items would be sent to depot if the owner (from owners.dat) character was loaded but not reported as an owner by querymanager.
I think what that guy meant was that his map didn't save upon closing the server. It's probably because he closes it with ctrl+c, while closing wth map save needs a specific signal. I don't remember the exact number, 15 or 30 maybe. @brunoofgod
The game server always holds the 'real' data. At StartAuctions the server compares owners.dat against QueryManager. If the data does not match, then TQueryManagerConnection::deleteHouseOwner, TQueryManagerConnection::insertHouseOwner or TQueryManagerConnection::updateHouseOwner will be called.

And you need either SIGQUIT (3), SIGTERM (15) or SIGPWR (30) for the map to save itself, as noted by CIP default signal handler.

 

kay

Legendary OT User
Joined
Apr 23, 2013
Messages
840
Solutions
9
Reaction score
1,075
Location
32316,31942,7
YouTube
TibiantisOnline
The game server always holds the 'real' data. At StartAuctions the server compares owners.dat against QueryManager. If the data does not match, then TQueryManagerConnection::deleteHouseOwner, TQueryManagerConnection::insertHouseOwner or TQueryManagerConnection::updateHouseOwner will be called.

Yes, but that's not the point. I was referring to a situation where the character doesn't exist in the database at all, that you mentioned first. The items stay in the house then because there's nowhere else to put them. But I believe the guy meant saving the map because if he hadn't had house owners in the database, game server wouldn't ever put an owner and he'd notice it on the first launch. He also said it's put back to the original state after each restart.

Ctrl+c sends 2 by default I think, and he needs one of those you listed, so that's why.
 

neptuno

Active Member
Joined
Jan 5, 2012
Messages
76
Solutions
1
Reaction score
27
But I believe the guy meant saving the map anyway because if he hadn't had house owners in the database, game server wouldn't ever put an owner and he'd notice it on the first launch.
The server commits owners.dat to the database through the QueryManager. Not the other way around.

Edit: If the QueryManager notices a given character exists in owners.dat, but not in the database, it will be listed as a deleted character, and therefore evicted along with free accounts and ex guild leaders. Here:

 
Last edited:

kay

Legendary OT User
Joined
Apr 23, 2013
Messages
840
Solutions
9
Reaction score
1,075
Location
32316,31942,7
YouTube
TibiantisOnline
Edit: If the QueryManager notices a given character exists in owners.dat, but not in the database, it will be listed as a deleted character, and therefore evicted along with free accounts and ex guild leaders. Here:

That depends on the querymanager. We don't have the original one, so you're maybe talking about your own code now but can't assume that's true for everyone. The querymanagers uploaded in otland didn't have such checking as far as I remember (and were buggy in general).
If you have an owner of id 123 in the file, but the character 123 doesn't exist in the database and therefore isn't loaded at all, nor is it reported as deleted, game server will show it as "nobody" and the items will stay in the house.
 
Last edited:

neptuno

Active Member
Joined
Jan 5, 2012
Messages
76
Solutions
1
Reaction score
27
@kay If the actual .usr file exists, then the character exists for the game server. It doesn't care about the database. Check AssignPlayerPoolSlot and see if it messes with the querymanager or the database.
 

kay

Legendary OT User
Joined
Apr 23, 2013
Messages
840
Solutions
9
Reaction score
1,075
Location
32316,31942,7
YouTube
TibiantisOnline
@kay If the actual .usr file exists, then the character exists for the game server. It doesn't care about the database. Check AssignPlayerPoolSlot and see if it messes with the querymanager or the database.
You're wrong, try sending parcel or adding to viplist a character that wasn't loaded by querymanager but has the .usr file. Try removing all records regarding certain character from the database, but keep its .usr file in place and the entry in owners.dat - you'll see game server set the owner to nobody, leaving items in the house. Only characters that were received from querymanager actually exist for the game server. During launch or new login, both require their presence in the database either way.
 
Last edited:

neptuno

Active Member
Joined
Jan 5, 2012
Messages
76
Solutions
1
Reaction score
27
You're wrong, try sending parcel or adding to viplist a character that wasn't loaded by querymanager but has the .usr file. Try removing all records regarding certain character from the database, but keep its .usr file in place and the entry in owners.dat - you'll see game server set the owner to nobody, leaving items in the house. Only the characters that were received from the querymanager actually exist for the game server. Either during launch or new login, both require their presence in the database.
This is PlayerIndex you're talking about. It allows mapping character names to character ids.
Just look at the console message after TQueryManagerConnection::loadPlayers:

"%d Spielernamen gelesen", literally "%d Playernames loaded".

This is not like OpenTibia where everything is stored in the database. The server only shows the database what needs to be seen by the website.

Edit: by login process I assume you mean PerformRegistration. This performs authentication tasks against the database and even though it checks if the player exists, it happens only because as a programmer you know you can never trust a user and must always validate their input.

But, when the server is running in trusted space, the database is completely ignored. RealOTS trusts so much on its data, that any info is commited FROM the server's files TO the database and not the other way around
 
Last edited:

kay

Legendary OT User
Joined
Apr 23, 2013
Messages
840
Solutions
9
Reaction score
1,075
Location
32316,31942,7
YouTube
TibiantisOnline
This is PlayerIndex you're talking about. It allows mapping character names to character ids.
Just look at the console message after TQueryManagerConnection::loadPlayers:

"%d Spielernamen gelesen", literally "%d Playernames loaded".

This is not like OpenTibia where everything is stored in the database. The server only shows the database what needs to be seen by the website.

It may say spielernamen, yet the method is named "loadPlayers". It also doesn't only load names, but all the rights that need to be read from database. I don't know what you're trying to prove honestly, you're kinda making it a semantic problem now. The .usr files contain names as well, but they have to be loaded from database. You won't be able to login without it either (unless you hardcode it in querymanager, but that's not the point). I never said it was like opentibia, it's not, but the database isn't just for showoff.
But, when the server is running in trusted space, the database is completely ignored. RealOTS trusts so much on its data, that any info is commited FROM the server's files TO the database and not the other way around
Most of the info* yes, not any info though. The info that it sets by itself to be specific. What isn't set by game server has to be loaded from databse each time, even though game also has it stored. That means names, which are needed for loading characters, or sex for example.
 
Last edited:

neptuno

Active Member
Joined
Jan 5, 2012
Messages
76
Solutions
1
Reaction score
27
It may say spielernamen, yet the method is named "loadPlayers". It also doesn't only load names, but all the rights that need to be read from database. I don't know what you're trying to prove honestly, you're kinda making it a semantic problem now. The .usr files contain names as well, but they have to be loaded from database. You won't be able to login without it either (unless you hardcode it in querymanager, but that's not the point). I never said it was like opentibia, it's not, but the database isn't just for showoff.
You seem like the one trying to prove something, but are just ignoring facts, and rejecting to use common sense. Think what CIP wanted to achieve when writing this code. Read the decompiled code for yourself and see how the server interacts with the database through the QM.

Player Rights, tied to an account created from the website.
Guilds, created and managed from website
Setting players Online, to be seen from the website
Kill statistics, to be seen from the website
Banishment info, to fill a criminal record shown in the website
Premium accounts, assigned through the website
There are even functions to insert and delete payment data, that arent used anywhere in the server, suggesting that their QM is actually a external library.

The database is there ONLY to have a secure link between the gameserver's data and the website.
 

kay

Legendary OT User
Joined
Apr 23, 2013
Messages
840
Solutions
9
Reaction score
1,075
Location
32316,31942,7
YouTube
TibiantisOnline
You seem like the one trying to prove something, but are just ignoring facts, and rejecting to use common sense. Think what CIP wanted to achieve when writing this code. Read the decompiled code for yourself and see how the server interacts with the database through the QM.

Game server sets what it sets, and loads what the website sets, and vice versa. Obviously it can't be the way around. The difference between these things you now listed is that they're not stored anywhere in the game server files, but the names are.
I said that before your post, when you claimed the database was just for showoff and that characters could exist without the db. Technically? yes, the file is there in the folder, so you can say it exists. But the player won't be loaded nor are you able to interact with it anyhow (e.g. by sending a parcel). That's the common sense here and my point. Besides none of that has anything to do with the issue that guy had. The lack of a character in database wouldn't result in cleaning the house. Reporting its evicit - yes, but the OP would have to first tell his querymanager that the character was deleted. Why would he do that? I mean he could remove it accidentaly, but the 'default' querymanager posted around in otland to my remembering didn't have checkings for such case, correct me if I'm wrong, but it only worked for when you set an account ban-deletion.
I just read the posts back and noticed I made it ambiguous about removing the owner at first, if that's what you're questioning. Game server doesn't remove it from the file and will still try to set it in the database, but ingame it displays as 'nobody own this house' and the items are left inside. That's what I meant. In the same time you made it ambiguous too, about character "not existing in the database". Reporting its evicit was what you meant I believe, which doesn't equal non-existence, unless you made a code for that. Hence I assumed you meant not loading the player. In case of reporting an evicit for any reason, it cleans the house, true. In case of a character not being loaded (but not reported for evicit), it doesn't clean the house, also true. So I'll just assume it was a both-sides misunderstanding and hope it gets cleaner now.
E: I just checked the qm in the most recent tutorial, and it indeed checks for when the account id is null and the account id is used as a player id there. But there was some other, way more reliable, qm around with working accounts where it only checked for bans though.
Either way, I'm pretty sure the issue @brunoofgod had was about not closing the server properly in order to save the map.
 
Last edited:
Top