Jump to content


  • Content count

  • Joined

  • Last visited

Everything posted by Vanilla

  1. Greetings! The new beta is finished! I'm proud to present r71480. This time a few things have changed. And in this revision, we have a lot of new stuff. In the following I'll provide the download link along with the things I'd love you to test. *** DISCLAIMER *** The core is marked as stable. Anyway, I'll make it clear that I'm not responsible if you use this core since I can't give a warranty that I fixed every single security breach that potentially could happen - that's totally impossible. But we all together made the source great and secure so every public issue is fixed by now. You can use it in production environments now. So... What's new? boot-trigger for quests With this you can execute commands, timers, and all the stuff you'd like to have just on boot-time! revisioning of the 'unique class' (+ a ton of posibilities) added the functionality to create unique-groups temp-Variables for quests upgraded all libs moved completely to the newest clang version fixed some big security issues in the source code fixed the ingame ban and unban commands unified tables and gave them a new way: unify! file clean-up revisioned the makefiles gave the source a new, easier structure removed all external dependencies just install them by ports.. No external-folder necessary! removed 'boost' dependency (no boost lib needed yay) partial implementation of the wolfman (claws etc. are added, needs review) And basically everything that has been offered in the earlier versions of the vanilla core. Nothing should be missing. And if you miss something, just feel free to tell me! What needs testing? There are few things I'd love you to test out: Please check if the core is vulnerable to any security breaches you may know (also the public ones, don't know if I missed something) Please test out the new features! I'd really love to know if the new unique-functions and the boot-trigger does the job. Explanation to new features: Unique with container support Unique has evolved! This time you have a few new possibilities. Don't know what unique is? Here's a short explanation: With the unique-questfunctions you can spawn or set mobs, npcs and now even players to have a unique name. This name is stored into a unique-container. You can access this container and get all the vid's by their unique name (also called: the key) So for example you can spawn a boss with a key. Later on you can check if this specific mob has been killed or not. Or you can set his hp on-the-fly. There's basically no limits! And now with the revised system you'll have even more options. The new unique system works with containers. By default there are two containers reserved: __DEFAULT__ and __CHARACTER__. The first one is for all the basic stuff. And the second one is reserved for players. Now, as you may have noticed, there's a default one which means that the container-stuff is optional. If you just use the unique functions without specifying a container, it'll just use the default stuff. But you CAN use your own containers just as you want to. You can create, delete and list all the containers running. There is a list with all the quest-functions down below. boot-trigger This is pretty self-explanatory. With this release you can use "when boot begin" to specify a block of code that will be executed once the core has been booted. temp-variables With the new temp-variables you can set and remove player-specific variables. They are stored in the core and not written to disk or database. So be careful because they might get dropped once the core shutdowns. It's just a quick storage for people who want to have something like a cache for quick access. new quest functions nil unique.spawn_unique(string key, int vnum, string pos=unused, string container=optional) nil unique.set_unique(string key, int vid, string container=optional) nil unique.purge_unique(string key, string container=optional) nil unique.kill_unique(string key, string container=optional) bool unique.is_unique_dead(string key, string container=optional) int unique.get_hp_perc(string key, string container=optional) nil unique.set_def_grade(string key, int def, string container=optional) nil unique.set_hp(string key, int hp, string container=optional) nil unique.set_max_hp(string key, int maxhp, string container=optional) int unique.get_vid(string key, string container=optional) bool unique.exists(string key, string container=optional) table unique.get_container_list() this prints out all the unique containers table unique.get_container_list(string key) this prints out all the vids in the unique-container "key" nil unique.remove_container(string key) removes a whole container (flushes it when called on standard containers) nil pc.temp_var_set(string key, string value) string pc.temp_var_get(string key) nil pc.temp_var_delete(string key) Thanks a lot for participating! If there are any questions, this is the topic related to it. Further releases will be made public here too! If you'd like to contribute, just post code additions here. Changelog older changelogs Download Useful information: All necessary libs are included. If you're building your own vanilla binary you'll first have to move into every project of the Internal directory and rebuild the libs. The main makefile is not adapted yet, I was too lazy (ps: Still too lazy!) rev 71480 see this post: rev 70220 STABLE Core Sourcecode rev 70140 BETA Core Sourcecode Password for the archive is: vanilla Password for older source archives: vanillamt2 Best Regards Vanilla
  2. Hey everyone, sorry for the lack of updates. Real life and stuff. Anyway, I'm preparing a bigger update. Lots of code cleaning and error fixing. I read what you wrote and will try to fix what you reported. Thanks to you all for reporting bugs and suggest changes. Though I will start upgrading the code to c++17 standard which means that I'll most likely not make changes to macro definitions like mentioned above. People should build the project like it's meant to be and under the same feature sets and compilers like I did, to make sure there's less room for errors. If you want to port the code, you can do so of course, I don't mind that. But for 'official' release they won't be included.
  3. open Problem get_mount quest function

    Maybe it's just a small mistake but did you recompile and replace the core with your new version? And did you double-check that it's added to the list before the NULL, NULL entry? And you saved everything and recompiled the core with the changes? Because it seems like something went wrong, the program can't find the function.
  4. open Problem get_mount quest function

    This is the whole implementation? I guess you're missing something. You need to add it to void RegisterPCFunctionTable(). In your case this should look like: { "get_mount", pc_get_mount },
  5. open Pay for the fix..

    where did you get that error? Also, did you try to manually resolve the ip? Is this a hostname resolving to an ip or what's happening there? Without more information it's not possible to help you with that. MySQL seems to have a bug with only numeric hostnames. You can also try and define your own hostname in /etc/hosts and link it to the ip of your machine that's trying to connect. This can also be a pseudo-domain posing as your hostname.
  6. open Problem get_mount quest function

    can we see the implementation in questlua_pc? I guess you didn't add it properly. The error already states that it's added to quest_functions but there's no such called function implemented into the core! So either you misspelled or didn't add it to the core at all.
  7. open Error pid_init

    this is not a syserr! It's a notice for you that the core has been started with the proper pid. You can just disable that with either hex patching or changing that in the source (I'd recommend you change it from syserr to syslog call if you want a clean syserr)
  8. I don't have any problems with typeof.
  9. Hey there! The unify_enable flag should be either 1(true) or 0(false). So if you set it to 1 then it should work New version coming soon with fixed db and some other small changes. Mainly stability stuff, I'm currently working on it through the night and inform you about the progress as soon as I can
  10. https://mega.nz/#!VCx32B4I!7glE1H5RzUSYdKaZUsqylMtsA72cDmlL0X92f8_RX-c 4 inventories, pass is still vanilla Note that you should not use the dbcache provided in this package since it's the same as in 2 inventory which is broken. I still included it, don't ask me why. As soon as the new build is ready I'll upload both of them working.
  11. Try using the older rev. I'll drop dbcache and revert back to an older version. I'll also reimplement the changes I've made asap and bump a new rev. Expect some small treatments as my apologize, I didn't notice the changes until you started reporting them which I truely thank you for For the moment, please continue using the old rev for dbcache, you can still use the new game.
  12. yes, that was my bad. I implemented a 'fix' for mysql libraries >= 20. With more recent libraries I got some strange errors telling me that column names are ambiguous. So I went on and encapsulated every column name. Obviously, this turned out to be not working. The changes are still in db and somewhat causing trouble. As I said, this is only on the most recent version of the dbcache, every older rev should work and do it's job even with the more recent gamecore. I'll still support this new rev db and fix those errors if you keep feeding me with reports
  13. does this work? https://mega.nz/#!JKYnkSQL!QW2o0REhinOmUzUkEryKCdQ6xVANf1YuhtGQ_EQaV5k
  14. Okay, everybody. I found the problem and it's related to a change I tried when moving to higher mysql libraries. Therefore the dbcache is marked as probably unstable. I fixed it, but it's not sure if anything else may cause a crash. Please use the new dbcache only for debugging purposes. The new revision is backwards-compatible with earlier revs of our dbcache, so you don't need to worry about that. It could be that everything works now but I can't make a clear statement about this since more testing needs to be done. I reverted all the changes for character login, creation and fetching. New download links: source prebuilt I tested the login and char creation, it'd work now. Sorry for the inconvenience. Gamecore should work without any flaws since I didn't merge the test changes there. Only db is affected.
  15. can you provide logs? Without them I can't see what's going wrong. This is the most recent source, there's no reason to downgrade to lower revs
  16. New source and prebuild package online! I updated the links. They'd work now. same pass. prebuilt source
  17. first one is just a warning. The new unified mode should be used. This is not an error. The second one: Yes, I'm on it. dbcache is doing weird stuff and I already located the problem. Fix will be uploaded very soon.
  18. Vanilla core is coded with clang as our toolset in mind. There's literally no testing or adapting to gcc, so it's no reason why you had to change some lines. Thanks for stating it here so people who wish to use gcc can use it. Everyone compiling with clang won't need those changes.
  19. Vanilla Core r71480 is released! A few words about this release: This release brings a lot of unifying and more security options. I'm sorry that the development wasn't as fast as I wanted it to be. RL and stuff. And with that little time it's hard to test and as you may know I've had no options to debug or even test the code I was writing. But this is now gone since I have a working compile station. Also I have great news for those who really want to work with Windows. I'm working on a windows-working port for the source. Of course this won't be another branch or something. It'll be part of the main source. But please, don't expect it to be done ASAP since I have other things in my mind which I consider more important. As you may have noted most changes are about security. I want server-owners to have the option to add as much security as possible. It was the main goal in the earlierst revisions and will still be. This time we'll have a few things thanks to contributors from all over the world. I tried to mention them when it's fitting, if I missed someone, please immediately send me a pm and I'll add it! This release should help to reduce the problems that could occur when leaking databases and other stuff. I hope you enjoy it! Oh, and additionally I returned to include the qc-program into my bundled pre-built package. This way people without compiling vanilla core from source are able to use it at it's full extent. Note that this release still uses boost. Next release will drop boost entirely and declares it's implementation as deprecated. We don't need a library if everything we need is already supplied by newer c++ revisions. CHANGES from 70220 -> 71480 ~general stuff~ * fixed a bug with cancelling servertimers (thanks to Socialized and Yiv) * fixed crashes due to wrong Compiler flags under release mode (thanks to Damn) * cleaned a few code lines and rewrote some stuff + added unifying stuff to the core Unify-mode is a new mode which forces the encoding to be utf8. Note that this does NOT break backwards-compatibility and your locale is still set to the region you chose to have. So if you're running on locale/euckr (example) before, the core will still fetch it's files from that place like it did before. It only changes how the server core processes data internally and sends it to client/db. The advantages of utf-8 can be looked up, it'd be obvious. But since it affects the core in one way or another, I moved it to a CONFIG flag. ~Database changes (optional for you)~ + If you want to use utf-8 mode it's recommended to convert your whole database to utf-8 (you can use the utf_general_ci collate) + If you want to use the /su command with a customized passphrase per player you'll have to add a new column called 'passphrase' as varchar(45) and add the passphrase of the user as a mysql-Password (just like you'd add a Password to an account). ~CONFIG options~ + elevation_enable (bool, default false) Enables the elevation mode. This way you have to use the /su command along with the passphrase in order to get superuser access. The session ends with teleporting or relogging. Note that using the master-passphrase is only allowed in testserver unless elevation_use_key (see below) is enabled. + elevation_key (string, default 'vanilla') Sets the default passphrase if you want to use it. It's like a master-password for the su-system and works only + elevation_use_key (bool, default false) If enabled, it allows you to use the masterkey even without testserver being enabled. + interrupt_interval (int, max 32767) sets the time how long the player must wait until he can execute another command. This way you can prevent command spamming since all players/gms have to wait until the timer is over. Note that this does not count for admins, so GM_IMPLEMENTOR will not be affected by this! + pepper_key (string, default "peppertest12345") If you set this to anything else than "peppertest12345" it'll automaticall enable the pepper system. This way all passwords will be hashed with an additional phrase appended. This further enhances security. Note that all passwords should be encoded with the new pepper phrase. It works just like this: Instead of calling PASSWORD(userpass) it appends the pepper-phrase which results in this: PASSWORD(userpass + pepper_phrase). So be careful if you change this since your database must have valid entries, otherwise users will fail to log in. + MYSQL_PASSWORD_FUNCTION (string, default 'PASSWORD') this variable sets the name of the password-function that will be called when dealing with passwords. You can further enhance security this way if you define your own function to your database. You can for example first encode the passwords and then hash it. Note that if you change this value, your database must have a proper function that returns the encoded/hashed/whatever password out from plain text. If the function doesn't exist or your passwords aren't adapted to work with your custom function, login will fail! + unify_enable (bool, default false) Enables the unify-mode. This way the server forces utf-8 as it's encoding standard. Note: If you enable this, you'd change your database etc. to use utf-8 too! ~commands~ + su passphrase(string) Tries to elevate the player and grants him the permissions stored in gmlist after successfully elevating. Minimum rank: GM_PLAYER + promote user(string) gm_level(string, optional) First the command elevates the player. So if no gm_level is given, the player will receive the permissions he'd have if he elevates normally. If a gm_level is given (just type it like it's labeled, so if you want to give him high-wizard, type GM_HIGH_WIZARD) it'll overwrite the gm level for the current session (relog/teleport will remove it). Download Download (prebuilt): r71480 Download (source): r71480_source pass (for both): vanilla
  20. Sorry for the delay. The new build is ready. I'm looking for volunteers that want to test the new core. Just drop me a pm please, I just need someone to test a few things and we're ready to go for the next rev.
  21. Searching for someone who knows python

    pm me with the error and as many details as possible, I might be able to help you. No need to pay.
  22. This weekend I'll release the next rev. Expect some great additions like I mentioned before. Also thanks to the community this new build will have a lot of minor bugs fixed. Going open source was the best decision in my opinion, I'd never have found them since some of them require a special setup which I'd never do. So yeah, I'd like to thank the community for it's suggestions and fixes. Even though I have very limited spare time to work with the core these days I was able to make big steps with the core and that's all thanks to the community. So yep: Thank you.
  23. The error appears when you compile with -Ofast. Try lowering it to -O3 and if that doesn't hit it, then go with -O2. IT happens only on game, not db I recommend not removing -Wl,-rpath,/usr/local/lib32/metin2 since this specifies the path where libraries are loaded. Of course, that's a typo of mine in the public release (which will be fixed in next version too). It'd be -rpath and not just rpath, which is why you get the error.
  24. at first CFLAGS += -stdlib=libc++ is not needed anymore since FreeBSD already uses libc++ with the most recent versions since.. well, clang is the default compiler and libc++ is now a part of the base system There's no need in adding this variable. Next you need makedepend. It'd be located in devel in the portstree. Also you'd check if your portstree is up to date. To do so, try portsnap fetch update. If this doesn't work (which mostly happens if you install a clean freeBSD [and it's not a wonder ;D]) then just go ahead and use portsnap fetch extract. I recommend rebuilding every port after updating the ports tree. Your warnings were because you used an outdated portstree and the ports are marked as a security risk since.. yeah, they're outdated and maybe have security flaws. After all this you'd be ready to go. Ah, and don't use gmake depend. The instruction is declared as gmake dep and not gmake depend
  25. There's no need to install libcxxrt and libc++ in recent FreeBSD distributions since it's now part of the base system and already included. You don't need to install it manually.