facts about the next code update

Content and general development discussion, including quest scripts and server code. TMW Classic is a project comprising the Legacy tmwAthena server & the designated improved engine server based on evolHercules.


Forum rules

This forum houses many years of development, tracing back to some of the earliest posts that exist on the board.

Its current use is for the continued development of the server and game it has always served: TMW Classic.

Post Reply
User avatar
o11c
Grand Knight
Grand Knight
Posts: 2262
Joined: 20 Feb 2011, 21:09
Location: ^ ^

facts about the next code update

Post by o11c »

This is a list of changes between the 'unsupported' branch and the v13.8.28 tagged release candidate.
  • 75866 lines removed, 31086 lines added, *excluding* whitespace. 5533 lines of whitespace changes.
  • Replace lots of ad-hoc, manually-managed, data types.
  • Remove support for server-side ignore lists.
  • Add configure script so that build settings can be persisted.
  • Drop support for building with gcc before 4.6
  • Update license from GPL2+ to GPL3+
  • Replace outdated readme with a pointer to the wiki.
  • Support native amd64 builds instead of just x86. Basic support for the x32 ABI (not actively maintained).
  • Change logs to give map name instead of map number, and be better with the reason for XP gains.
  • Turn on a lot more compiler warnings. Change the code to cut down on them, and suppress a few instances.
  • Add a cxxstdio system to cut down the number of manual casts.
  • Use custom string classes for better performance and safety. Implement lots of utility methods using them, and replaces all uses of plain char arrays. (there are still uint8_t arrays in the network code)
  • Remove the cached character index, it was way too hard to keep updated and the performance hit is relatively small anyway. Future refactorings (possibly including a database backend) will negate the penalty.
  • Reimplement the logging system in terms of cxxstdio.
  • Replace a lot of indices with pointers, for things that aren't persistent.
  • Reimplement savefiles in terms of cxxstdio, fixing problems related to buffer overflows.
  • Add a typesafe, template-based recursive extractor system.
  • Reimplement savefile reading in terms of extractors, fixing problems related to buffer overflows.
  • Handle maps consistently (ignore everything after the .). This changes the savefile format.
  • Fix a bug with character memo points (not used by TMW).
  • Fix a buffer overflow related to skill IDs that are not used by TMW content, but could still be enabled by GM commands.
  • Replace most uses of fgets with std::getline.
  • Change some error and log messages to reduce the amount of silly code.
  • Remove support for merging and saving backup files, it was a bad idea.
  • Make validation of new characters a little less stupid.
  • Remove support for job classes.
  • Remove a lot of options related to the online list generation. Change the time to be in UTC (TODO update the PHP page once this gets pushed).
  • Use strict enum classes instead of magic numbers in most places. Fix lots of bugs exposed by this.
  • Send the job level again (it is used for skills now).
  • Remove support for native guilds (which were not used and were subject to subtle and nasty bugs and resource problems).
  • Fix some bugs in the network layer related to banned players.
  • Remove support for kamib, it didn't work anyway and had a *really* stupid implementation.
  • Fix a bug related to itemfrob and weapons.
  • Make timers sane. Fix bugs exposed by this.
  • Add basic helpful utility functions to the network layer. Fix bugs related to this.
  • Make conditional callsub/callfunc an error, to avoid buffer overflows.
  • Make character names case-insensitive, after verifying that the current setup does not cause problems.
  • Make account names case-sensitive, after noticing that the current setup already causes problems.
  • Unify parsing of ban/expiration timediffs
  • Make script variables case-sensitive everywhere instead of only some places. Fix scripts; verify that current savefiles are not a problem.
  • Remove some substring searches that expected only a single result (Recent ManaPlus do tab completion based on the online list).
  • @spawn/@summon, as a side effect of enforcing this in scripts.
  • @item is now case-sensitive, as a side effect of enforcing this in scripts.
  • Refactor away negative jumps in the network.
  • Fix a nasty bug where characters could be accidentally deleted in a fallthrough.
  • Remove option to overload of the "delete" packet for email address creation.
  • Send the actual version number. Set a versioning scheme based on the date.
  • Remove support for encrypting the ladmin password; it never left localhost anyway and led to quite a bit of ugly code.
  • Add lots of warnings when reading config files.
  • Update some hardcoded defaults.
  • Changed the parsing of command-line arguments (not used with the current setup).
  • Make (millisecond) ticks 64-bit, avoiding subtle problems that occur every 49 days.
  • Allow specifying durations in other units, such as seconds and minutes, in a reliable way.
  • Remove a lot of unused return types.
  • Poison the edge of several headers.
  • Fix a bug related to dropped whispers.
  • Replace some buffer overflows with VLAs.
  • Use type-safe container lookups instead of relying on lots of casts and macros.
  • Use base class for entities; avoid lots of casts.
  • Force casts to specify just how dangerous they intend to be.
  • Achieve const-correctness (finally!). Yet another nasal demon slain.
  • Add an (optional) backup system to 'make install'.
  • Don't crash if we get nothing when we request nothing.
  • Refactor out some completely unnecessary and occasionally code from the atcommand list.
  • Use standard randomness instead of rolling our own.
  • Rotate logs in the background, avoiding periodic freezes.
  • Kill a lot of macros.
  • Remove (almost) all skills not actually used by TMW. This made a *lot* of code pretty.
  • Fix a bug with self-destructing mobs, where one of the self-destruct hooks never triggered.
  • Remove a lot of hard-coded checks for item and mob IDs.
  • Remove support for disguising mobs and PCs.
  • kill all va_lists, fix exposed bugs.
  • Remove ad-hoc french translation of ladmin.
  • Delete a bunch of old tools I couldn't support.
  • add getmap and getmapflag functions
  • Fix potential issues related to time passing while no time passes.
  • Add a unit testing framework.
  • trim stuff related to nonexistent GRF. Strictify the resnametable and move it from common to map.
  • Add intern pools. Not used everywhere yet, but magic is being evil.
  • Automatically backup every save. This is not dependent on actually being able to save successfully.
  • Add matrix class - do less math manually.
  • Made implementation password hashing *slightly* less insane. It's still not pretty as we can't break compatibility with the old savefiles yet. I'll probably migrate this after databases, and do one final purge.
  • Don't potentially expose the server password to GMs.
  • Check for null pointers slightly better.
  • Add a bunch of utility functions to deal with randomness better.
  • Approach the softlimit less intrusively; make impossible things harder.
  • Manage a lot of pointers, especially the session (which is *different* between servers!).
  • Strictly differentiate between (absolute) ticks and (relative) intervals.
  • Stuff related to traits (still need to delocalize ints though).
  • Replace custom timer queue with standard one.
  • Do nothing explicitly instead of implicitly.
  • Document that interval timers must be detached; merge the implementation of interval timers.
  • Move a bunch of utilities (checks, config parsers, ip and timestamp printing) into one place instead of copypasta.
  • Remove all raw-level manual memory management. There is still some higher-level manual memory management waiting on the magic rewrite, however.
  • Remove support for old versions of the savefile that have never been used by TMW.
  • Remove useless sorting of the savefiles.
  • Flatten some deeply nested conditionals. When needed, use goto (it's cleaner, until a network rewrite happens!).
  • Remove check for whether the client supports update hosts, since all supported clients do.
  • Remove support for client-password-hashing (unsupported by TMW clients).
  • Remove login sessions as they are no longer needed.
  • Remove support for custom date formats (dangerous).
  • Avoid pointer math in ip ban/except lists.
  • Use a consistent argument-quoting system for ladmin.
  • Disallow partial matches in ladmin commands (the help still needs to be updated, but that will probably wait until the whole dispatcher is rewritten. Since ladmin has the smallest user exposure, it is the lowest priority, but it is also a good task for someone else as it does not involve much coordination).
  • Remove support for separately-typed passwords.
  • Verify email format "better". Yeah, the only real way is to send mail to it ...
  • Remove useless headers of ladmin and login.
  • Remove day-night system.
  • Parse @commands semiconsistently. This can't use a sane parser because it is possible that there are old clients relying on the old behavior.
  • Replace the implementation of @command logging.
  • Remove support for a custom @command symbol.
  • Change something about @heal.
  • Templatize the @param
  • (more stuff, but I want to post this before I get sick of it)
The following script builtins and @commands were removed (some names may be inaccurate; this is the internal name):
  • callsub/callfunc with arguments; return with an argument; getarg.
  • jobchange
  • copyarray
  • deletearray
  • getitem2
  • cutin
  • cutincard
  • viewpoint
  • getpartyname
  • getpartymember
  • getguildsname
  • getguildmaster
  • getguildmasterid
  • getbrokenid
  • repair
  • getequipisequiped
  • getequipisenableref
  • getequipisidentify
  • getequiprefinerycnt
  • getequipweaponlv
  • getequippercentrefinery
  • successrefitem
  • failedrefitem
  • statusup (but not statusup2)
  • bonus3 (but not bonus or bonus2)
  • guildskill
  • getgdskilllv
  • basicskillcheck
  • break (but not end)
  • checkoption
  • setoption
  • checkcart
  • setcart
  • checkfalcon
  • setfalcon
  • checkriding
  • setriding
  • save (but not savepoint)
  • gettimestr (but not gettime)
  • guildopenstorage
  • itemskill
  • doevent (but not donpcevent)'
  • deltimer
  • addtimercount
  • areaannounce (but not mapannounce)
  • enablearena
  • disablearena
  • hideoffnpc
  • hideonnpc
  • sc_start2 (but not sc_start)
  • getscrate
  • resetlvl
  • resetskill
  • changebase
  • waitingroom
  • warpwaitingpc (twice!)
  • delwaitingroom
  • enablewaitingroomevent
  • disablewaitingroomevent
  • getwaitingroomstate
  • setmapflagnosave (but not the equivalent mapflag)
  • gvgon
  • gvgoff
  • maprespawnguildid
  • agitstart
  • agitend
  • agitcheck
  • flagemblem
  • getcastlename
  • getcastledata
  • setcastledata
  • requestguildinfo
  • getequipcardcnt
  • successremovecards
  • failedremovecards
  • inittimer (but not initnpctimer or addtimer)
  • stoptimer (but not stopnpctimer)
  • wedding
  • getanchorinvocation
  • getskilllist
  • getpoolskilllist (but not getactivatedpoolskilllist or getunactivatedpoolskilllist)
  • checkpoolskill
  • clearitem
  • classchange
  • soundeffect
  • strmobinfo
  • guardian
  • guardianinfo
  • npcskilleffect
  • hasitems
  • @guildstorage
  • @gvgon
  • @gvgoff
  • @go
  • @refine
  • @produce
  • @memo
  • @guildlevelup
  • @night
  • @day
  • @allskills
  • @guild
  • @agitstart
  • @agitend
  • @mount_peco
  • @char_mount_peco
  • @guildspy
  • @guildrecall
  • @jail
  • @unjail
  • @disguise
  • @undisguise
  • @ignorelits
  • @charignorelist
  • @inall
  • @exall
  • @chardisguise
  • @charundisguise
  • @follow
  • @skillon
  • @skilloff
  • @chardye
  • @charhairstyle
  • @charhaircolor
  • @skillid
  • @useskill
  • @unmute
Many of the items on that list are still subject to further changes.
Former programmer for the TMWA server.
User avatar
Hello=)
TMW Classic
TMW Classic
Posts: 657
Joined: 11 Jun 2009, 12:46

Re: facts about the next code update

Post by Hello=) »

o11c wrote:The following script builtins and @commands were removed
While refactoring efforts are really impressive, after reading this part I could admit TMWA now deserves the title of "most castrated and featureless RPG server software you can get".
User avatar
o11c
Grand Knight
Grand Knight
Posts: 2262
Joined: 20 Feb 2011, 21:09
Location: ^ ^

Re: facts about the next code update

Post by o11c »

t3st3r wrote:
o11c wrote:The following script builtins and @commands were removed
While refactoring efforts are really impressive, after reading this part I could admit TMWA now deserves the title of "most castrated and featureless RPG server software you can get".
I made sure not to touch anything that was actually used.

And at this point, the highest priority is to clean up TMWA so that such things can sanely be added. The less things need to be *directly* translated, the better.
Former programmer for the TMWA server.
Frost
TMW Adviser
TMW Adviser
Posts: 851
Joined: 09 Sep 2010, 06:20
Location: California, USA

Re: facts about the next code update

Post by Frost »

o11c wrote:I made sure not to touch anything that was actually used.
Didn't you say that @chardisguise shouldn't be used, even though it is?
You earn respect by how you live, not by what you demand.
-unknown
User avatar
o11c
Grand Knight
Grand Knight
Posts: 2262
Joined: 20 Feb 2011, 21:09
Location: ^ ^

Re: facts about the next code update

Post by o11c »

Frost wrote:
o11c wrote:I made sure not to touch anything that was actually used.
Didn't you say that @chardisguise shouldn't be used, even though it is?
I was mostly talking about script commands, since I haven't purged @commands thoroughly, just the few commands that absolutely needed to be removed or could be shown to have no effect.

In general, you should *not* touch a @99 command unless you know *exactly* what it does; many of them are outright dangerous. Without looking too deeply, that probably means only @mapexit and @kickall.

Some commands that are particularly dangerous are the @reload* commands. If they are used, I can offer absolutely no guaranteeds.

There is nothing more dangerous in this field than "it seems to work, it must be correct". I don't claim that my code is perfect, but I *do* claim that if it fails, it will fail predictably. This could not be said of TMWA before.
Former programmer for the TMWA server.
User avatar
wushin
TMW Adviser
TMW Adviser
Posts: 1759
Joined: 18 Dec 2012, 05:56
Location: RiverBest, Brew City, Merica
Contact:

Re: facts about the next code update

Post by wushin »

What are the chances @disguise or some similar element to change the PCs model will be added back?

wedding built-in removed meaning we rely on the magic one instead?

I thought some of the removed were just aliases or doable with another command? Is there anyway to denote what should be used instead in that case?
The secret to getting all the important stuff done is doing nothing.
User avatar
o11c
Grand Knight
Grand Knight
Posts: 2262
Joined: 20 Feb 2011, 21:09
Location: ^ ^

Re: facts about the next code update

Post by o11c »

wushin wrote:What are the chances @disguise or some similar element to change the PCs model will be added back?
It depends on how quickly I am able to make the necessary infrastructure changes to be sure it's safe.
wushin wrote:wedding built-in removed meaning we rely on the magic one instead?
the 'wedding' command as used by eAthena was just a hard-coded call to one of the other effect functions. I don't think that particular effect is understood by TMW clients.
wushin wrote:I thought some of the removed were just aliases or doable with another command? Is there anyway to denote what should be used instead in that case?
I did not list atcommands if they had multiple versions previously and some were removed, since I made format changes to their dispatcher.

I *did* list script command exact duplicates that were removed, but the only ones I think were 'break' (-> 'end') and 'save' (-> 'savepoint').
Former programmer for the TMWA server.
Post Reply