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

Stop using tfs 0.x

If performance, code style / code structure and ongoing developments and improvement are not valued highly by you then there is no point in trying to convince you to use 1.1.

Account manager was just ugly.
 
I was reading back, and I must have skipped this post by mistake. Since this is my first time reading it I feel I should reply.

My point about TFS 1.X offering nothing for custom servers, is that (at least to me), it is more difficult to make custom stuff on TFS 1.X than on TFS 0.X.
If you read my first post on this thread, you can see a step-by-step explanation of how I came to this conclusion. And also, it doesn't give me much that I cannot do on 0.X already, so I don't see why I should switch.

Things that I personally would have to make myself to make TFS 1.X usable to me: (Just off the top of my head)
  1. Account Manager: (Why was this taken out? Was it ever put back in? If not, what the fuck?)
  2. Item Attributes: (Yes everyone knows this is missing, but guess what, it's one of my most used features)
  3. Storage Values: Change Keys and Values to strings. (I'm pretty sure both of these are integers only in TFS 1.X, which is absolutely annoying)
  4. noMove function: (There are probably other ways to do this in TFS 1.X by now, but it's widely used in custom servers, and in my own.)
  5. And above are just the things I know about from attempting to use it for a week or two... I'm sure working with the server I would continue to find new things all the time I'd have to add myself.
Also I don't like how things were redone. Why is there now Events and CreatureEvents. And why was onStatsChange split up to onHealthChange, onManaChange. And do they even have the same variables?

void executeHealthChange(Creature* creature, Creature* attacker, CombatDamage& damage);
void executeManaChange(Creature* creature, Creature* attacker, int32_t& manaChange, CombatOrigin origin);

So maybe CombatDamage& includes the damage type, the damage value, whether its aggressive or not, etc.
And what is CombatOrigin? Does that include the DAMAGETYPE? What if I want different kinds of manadamage? I have that in TFS 0.X already.

Then after all that, I'm going to have to add all my work on my custom TFS to TFS 1.X. Which you can see in my signature. But that is a personal problem that I don't even worry about, because if TFS 1.X was clearly better, easier, faster, and had more functionality I would switch in a second.

But for now, I see 2 choices, A server I have been using for years that I know exactly how it works and can do anything I want. Or a server that is brand new, and is missing a lot of functionality I enjoy using every day on my current server.


Item attributes has already been added to 1.x

Combat origin is not the same as damage type, for damage type you have like fire, energy, manadrain, ect. Origin is for finding out if it was from a spell, melee, ect.

noMove has already been written in lua for 1.x

I have no clue why they got rid of onStatsChange, very valid point there...

Storage values, why not make your own system that could include all of those? Easy to do in lua.

Account Manager, I believe the reason was that it has huge security vulnerabilities and/or has flaws that could cause huge instability.

You have already said that TFS 1.x is faster/better. As far as functionality, it is close to reaching past the point of the older distro's already, as noted several times on this thread, there isn't anything really left out in 1.x anymore. Soon there will be even more options than the older distro's, like for example the items "abilities" that are just defined as attributes in xml, never had lua functions for finding these values and manipulating them, that is soon to be added. There are plenty of other things you can find on the roadmap or in the milestones that are going to be added (might I add they are getting to these fast), and when they do, your argument will be completely void.
 
Item attributes has already been added to 1.x

Combat origin is not the same as damage type, for damage type you have like fire, energy, manadrain, ect. Origin is for finding out if it was from a spell, melee, ect.

noMove has already been written in lua for 1.x

I have no clue why they got rid of onStatsChange, very valid point there...

Storage values, why not make your own system that could include all of those? Easy to do in lua.

Account Manager, I believe the reason was that it has huge security vulnerabilities and/or has flaws that could cause huge instability.

You have already said that TFS 1.x is faster/better. As far as functionality, it is close to reaching past the point of the older distro's already, as noted several times on this thread, there isn't anything really left out in 1.x anymore. Soon there will be even more options than the older distro's, like for example the items "abilities" that are just defined as attributes in xml, never had lua functions for finding these values and manipulating them, that is soon to be added. There are plenty of other things you can find on the roadmap or in the milestones that are going to be added (might I add they are getting to these fast), and when they do, your argument will be completely void.

The Benefit of Storage Values is they save on server save.

I could I could write them all to a file and load them on start-up, but why the hell would I do that when i'm already running a perfectly useful SQL server?

Anyways, I didn't know item attributes were added into TFS 1.X yet.

So I can grab an item and set the attribute "TerrorPower" to "125" and "ExtraSecretDescription" to "YellowBlow"?
 
If performance, code style / code structure and ongoing developments and improvement are not valued highly by you then there is no point in trying to convince you to use 1.1.

Account manager was just ugly.

I agree the account manager was ugly, but it served a purpose.

and I already stated that TFS 1.X is amazing, and still in development, but currently there is no reason to switch, in 2+ years maybe it'll be to the point that it has "caught up" in my eyes to TFS 0.Noob.

********EDIT*********
The funny thing is, I'm not trying to convince people to NOT use TFS 1.X.

All I am stating is that to switch to TFS 1.X is not all rainbows and blowjobs. It does require a lot of work, and you have to be willing to put in a ton of extra time that you may not have been planning to waste, and it might put your project's release-date back a few months.
 
Last edited:
Well, we have some guys who know a lot of the code in TFS 0.3/0.4 and don't want lost time understanding it again and doing the same thing which could be done for other things...
This is a point too.
 
Just as an input to @Red, that commit did not break backwards compatibility even if a userdata value is pushed insted of the cid value.
You can still use the ex.
onUse(cid)
local player = Player(cid), all it will do is compare the userdata? This what I still do, so that if the script is used on a 1.0 server it won't try to insted cid as a userdata value.
 
So I can grab an item and set the attribute "TerrorPower" to "125" and "ExtraSecretDescription" to "YellowBlow"?

No, actually not that functional... yet! They only have like 10-12 attributes that work with item:setAttribute()/item:getAttribute(), however, it is on the roadmap to include the functionality to create completely custom attributes.

All I am stating is that to switch to TFS 1.X is not all rainbows and blowjobs

Fucking hilarious! Agreed, it's far from it... sux balls actually, but not in the blowjob type of way :D

perfectly useful SQL server?

True. No argument there, they really should make this more functional.

Well, we have some guys who know a lot of the code in TFS 0.3/0.4 and don't want lost time understanding it again and doing the same thing which could be done for other things...
This is a point too.

This is a point, however if the person actually understood the syntax and logic used in lua it would be much simpler than expected. Also I would like to note you can find many of programmers/developers here on otland that felt the same way you are talking about, that after switching and "learning" the "new" way, would never go back. But that goes back to preference...

did not break backwards compatibility even if a userdata value is pushed insted of the cid value.

Technically is a break in backwards compatibility because the older script must be modified in some way, like your example local player = Player(cid), or even zbizu's example cid = cid:getId(), still something you have to alter, and the way it works is slightly different in the background, even if in the foreground it is the same result.
 
Technically is a break in backwards compatibility because the older script must be modified in some way, like your example local player = Player(cid), or even zbizu's example cid = cid:getId(), still something you have to alter, and the way it works is slightly different in the background, even if in the foreground it is the same result.
Yes that is true, diden't think about that :p.
But thats a good thing you think about while making scripts that you are gonna release, use player:getId insted of cid.

But I can agree that it was a "stupid" update, some are SUPER good to do but some are just weird, like why remove the "removeAmmunition" config boolean and while doing that move the action functions? from items.xml to weapons.xml.
I kinda feel like if I go inactive for 2 months and upgrade the sources I will most likely have to check EVERY update that was made within those 2 months to be able to use the server.
Most people think the same way I think, just to take the removeAmmunition boolean, why not fix it insted of having to edit every item in weapons.xml?
Not saying it was a bad update, it works. But still, you should be able to start your server quick and dirty, like the 0.x versions.

And I kinda get Marks point that everything should be 100% optimized etc(mayNotMove), why not accept one of those that atleast used the event functions so users can use the function? It if works why remove it if you don't have a new fix for it kinda.

And one thing I kinda get abit mad about, https://otland.net/threads/moving-forward.198835/ "We need to start working together to move forward.".
At the same time he says this on github (https://github.com/otland/forgottenserver/pull/1221): "As for technical matters, there are still multiple issues with the patch" - and alot more if you haven't read it, read it.
He can't help with the last things, even tho we are supposed to start working together to move forward?

And yes yes, I get that he dosen't wanna release the things he uses on shadowcores, but as ive said before, when he updated to 10.70-10.75 why not release 10.55 - 10.58 or something~.

Probbly gonna get alot of hate with this comment, but thats how I feel.
Things like this makes me feel, why should I share things for free? Even older things ive updated.

Been working on trying to make the swf files on the flash client recompile, but should I upload it to github or something and get others to help - to make us more forward or should I even bother? Etc.
 
And yes yes, I get that he dosen't wanna release the things he uses on shadowcores, but as ive said before, when he updated to 10.70-10.75 why not release 10.55 - 10.58 or something~.

Not trying to hate or anything.
He doesn't release the support for versions above 10.41 probably because TFS 1.1 still needs optimizations, fixes and enhancements. Adding support to versions above 10.41 would only pile up the issues that are still marked as bug, unconfirmed and so on. It would be more work and put the focus on fixing the bugs the support to that version brought with it, and I think the focus right now is not making new features that may bring more issues before the optimizations, enhancements and fixing the present issues.
 
Things that I personally would have to make myself to make TFS 1.X usable to me: (Just off the top of my head)
  1. Account Manager: (Why was this taken out? Was it ever put back in? If not, what the fuck?)
  2. Item Attributes: (Yes everyone knows this is missing, but guess what, it's one of my most used features)
  3. Storage Values: Change Keys and Values to strings. (I'm pretty sure both of these are integers only in TFS 1.X, which is absolutely annoying)
  4. noMove function: (There are probably other ways to do this in TFS 1.X by now, but it's widely used in custom servers, and in my own.)
  5. And above are just the things I know about from attempting to use it for a week or two... I'm sure working with the server I would continue to find new things all the time I'd have to add myself.

1. can be done as creaturescript on specific character, but wouldn't allow multi-login
2. https://otland.net/threads/tfs-1-1-attributes-functions-from-0-3-7.228710/
3. can be done with lua and database (I rewrote globalstorage to database for my ot)
4. https://otland.net/threads/stop-movement-tfs-1-x.226673/
5. Hey, we have a little project of rewritting 0.4 stuff in request board, why don't you join us?
 
I was reading back, and I must have skipped this post by mistake. Since this is my first time reading it I feel I should reply.

My point about TFS 1.X offering nothing for custom servers, is that (at least to me), it is more difficult to make custom stuff on TFS 1.X than on TFS 0.X.
If you read my first post on this thread, you can see a step-by-step explanation of how I came to this conclusion. And also, it doesn't give me much that I cannot do on 0.X already, so I don't see why I should switch.

Things that I personally would have to make myself to make TFS 1.X usable to me: (Just off the top of my head)
  1. Account Manager: (Why was this taken out? Was it ever put back in? If not, what the fuck?)
  2. Item Attributes: (Yes everyone knows this is missing, but guess what, it's one of my most used features)
  3. Storage Values: Change Keys and Values to strings. (I'm pretty sure both of these are integers only in TFS 1.X, which is absolutely annoying)
  4. noMove function: (There are probably other ways to do this in TFS 1.X by now, but it's widely used in custom servers, and in my own.)
  5. And above are just the things I know about from attempting to use it for a week or two... I'm sure working with the server I would continue to find new things all the time I'd have to add myself.
Also I don't like how things were redone. Why is there now Events and CreatureEvents. And why was onStatsChange split up to onHealthChange, onManaChange. And do they even have the same variables?

void executeHealthChange(Creature* creature, Creature* attacker, CombatDamage& damage);
void executeManaChange(Creature* creature, Creature* attacker, int32_t& manaChange, CombatOrigin origin);

So maybe CombatDamage& includes the damage type, the damage value, whether its aggressive or not, etc.
And what is CombatOrigin? Does that include the DAMAGETYPE? What if I want different kinds of manadamage? I have that in TFS 0.X already.

Then after all that, I'm going to have to add all my work on my custom TFS to TFS 1.X. Which you can see in my signature. But that is a personal problem that I don't even worry about, because if TFS 1.X was clearly better, easier, faster, and had more functionality I would switch in a second.

But for now, I see 2 choices, A server I have been using for years that I know exactly how it works and can do anything I want. Or a server that is brand new, and is missing a lot of functionality I enjoy using every day on my current server.

You may be right on "more difficult", but you are still 100% wrong on "not offering anything for custom servers". I am coming to a better understanding that you're actually looking for provided resources or ease of access to certain features, rather than using raw implementation. What I mean by that is I can say all of those features you have expressed concern for can be done one way or another, with the provided resources available, rather than those features already being given at default.

It is possible to implement an in-game account manager in Lua (as I have created a thread about this months ago), in my previous post, I already said custom item attributes is 100% doable in Lua. Storage values are a bit icky, player storages are saved to the database, but global storages are not. Global storages are saved for the entire length the server is running. Global storages in 0.3 is really just storing the values under respective keys into the database. This is incredibly easy to implement through Lua, but people do that anyways without using global storages. In addition, global storage values can be tablized (which is pretty neat). Yes, noMove was removed in the very early days of 1.0, again, still possible to implement through Lua, however it's still a bit of a hacky solution. As far as I know, onMove() is close to being implemented, we're just waiting on return values for onStepIn/onStepOut to be implemented first. So, we can then use onMove() to return false when a certain condition is met to be required for no movement. onStatsChange was split up to provide further optimization. onStatsChange in general is overbloated, it gets called in almost every instance you can think of. What if you only want to do with healthChange and not manaChange? Instead of calling onStatsChange everytime when mana changes (even when you don't need it), you could just call onHealthChange(). It's just split up for optimization, I suppose. If you had read a couple lines down, you can see that there are more parameters available (onHealthChange() and onManaChange()), including damage element types. Combat origin provides you information on the type of damage that was impacted towards you, such as melee, range, magic, etc (can be found here).

I understand what you're saying now, you're unable to find the features you're looking for at default, I misunderstood that originally; but I still stand by the fact that all of these things are still implementable through Lua. And you're right, there's still some work still to be done and there will always still be work to do, but to say this TFS "offers nothing for custom servers" is pretty damn absurd, don't you think? I know you're better than that.

I got some cool stuff in store coming soon, look out for the Network Messages tutorial that I will finish, hopefully by this weekend.
 
Not trying to hate or anything.
He doesn't release the support for versions above 10.41 probably because TFS 1.1 still needs optimizations, fixes and enhancements. Adding support to versions above 10.41 would only pile up the issues that are still marked as bug, unconfirmed and so on. It would be more work and put the focus on fixing the bugs the support to that version brought with it, and I think the focus right now is not making new features that may bring more issues before the optimizations, enhancements and fixing the present issues.

No, no. Its good to get feedback no matter what the feedback is.
What I think:
They update things that (sure might optimize things etc) but at the same time dosen't help TFS move forward - If you ask me, 1.1 needs more things to make users more likely to move to it.
Ex. item attributes (as @Evan said) can be made in lua, but most of the users who create ots are lazy (lets just leave it at that...)
The last protocol update was 10.41, released June the 17th 2014. And with that update we only got things to make it posible to run. Ex. https://github.com/otland/forgotten...a0#diff-7b5531894818c83810e24d920f09a90cR1343.

Insted of trying to (atleast start) on fixing things like the new war system (yes, everyone might not like that but still, do like we have in the past a config boolean for it) most of the time is spent on things like optimizations, as I said before, moving removeCount, pushBack etc parameters from items.xml to weapons.xml. Is that a waste of time right now, I say yes.
Better to spend time to actually upgrade it.

And as I wrote before, when he upgraded to 1070 why not give out the changes needed for 1050~.
That way we aren't always at the latest protocols, but atleast go higher up.

And I kinda feel like Mark wants to do everything himself, like how many have released things to replace mayNotMove with something else? I know Printer has and atleast one more guy.
Both got turned down, either we need more changes to make it perfect or the code was not good enough.
And sure, I can accept that he would say something like that if someone wants to place something we already have but in atleast this case, he removed the function because it "wasen't good enough".
And the statment he wrote for it was "Until then, you’ll have to add it back in a local copy of the source code if you really need it."
https://github.com/otland/forgottenserver/commit/871db16da79e39ecb93106f55db306a76f46e8ac

Idk thats my take on it.
 
Back
Top