Hello everyone!
I'd just like to show off something I've worked on as a pet project that was finally released at RebirthRO a couple of months ago, which is fully working achievements and titles.
When you get an achievement, the black-bar appears along with an Angeling that appears over your head (like the level up angel), both display only for you. That's all packet related, so no real extra work required there.
Then there is the achievement window in game that has full functionality. It took a little while to get the packets working, since the only dumps I could find were out of date, but it was worth it in the end. It's surprisingly robust and easy to use, unlike other aspects of RO. The whole achievement system consists of only two packets. Of note is that the Title, Buff and Item rewards can all be hovered over to get the name of them (titles and buffs names pull from the lubs, the item can be right clicked to show its description).
Src-side, all achievements are stored in a .conf that allows you to specify a bunch of conditions as well as rewards. I made it quite flexible for rewards, allowing for items to be given in bunches rather than singles, and buffs are defined by SC constants, with var1~4 and tick all being modifiable.
The title window is quite simple, and, again, is done with two packets. Really simple and easy.
Of note, since the name packet had to be updated to allow for the displaying of titles, you can also give titles to mobs and NPCs as well!
Finally, and easiest of all three, is random options. All client-side work was done for me, so I just needed to fill out the item data and save it somewhere.
These, too, I've saved in a .conf that would allow for much more complex bonuses than the little bar could fit in. What's most exciting about random options is the fact you only really have to make one item for each slot and weapon type, and then you could easily let people just farm away for the best combination of options; it would cut down on a lot of bloat in the item DB.
There you have it!
Any questions I'd be happy to answer!