Version 0.3.2

From VbGORE Visual Basic Online RPG Engine

Contents


[edit] Downloads

All downloads contain the same files, just using different compression methods.

*.EXE - Self-installing file (11.83 MB)

*.ZIP - Compressed with WinZip (12.51 MB)

*.RAR - Compressed with WinRAR (10.39 MB)

*.7z - Compressed with 7Zip (10.43 MB)

Libraries Files (Not required for EXE users) (1.00 MB)

[edit] Release Notes

Released on February 24, 2007

Sorry this release took me so long - I took up a side job (for programming) for about a week, during which I hardly touched vbGORE. Though, theres still lots of goodies in this version. For one, the data buffer (used to build the packets) is a lot faster. I learned (through testing) that it is faster to just store UBound in memory then call it more then once, so that helped a little. But most importantly, I added a PreAllocate and Allocate command, which allocates a bunch of memory in bulk instead of having to allocate it every time a variable is put in. This saves a lot of time since theres less ReDim Preserve calls. Along with that, I also added a packet encryption algorithm that changes the packet's encryption for every packet sent, which makes packet decrypting and spoofing incredibly harder since not only are packets obfuscated, but constantly changing. Besides that, it is mostly just a lot of fixes. :)

[edit] Change Log

Fix - Bandwidth calculator: Changed the bandwidth calculator to work without the socket's packet headers since those are no longer in use.

Change - Packet flood rate: Changed the default packet flooding rate to 25 after doing some testing, so by default, vbGORE will only accept 25 commands in a packet (not packets themselves) per second, and the rest are ignored.

Change - Texture loading: Changed the texture loading routine to handle first-time loaded textures and reloaded textures differently. Textures loaded the first time get a bit more data stored so when they are loaded the second time, their values can be passed through the parameters allowing for a slightly faster loading. This should be especially noticeable during map changes.

Fix - Client connecting stability: Fixed the client to connect when the first connection attempt failed by unloading and reloading the socket. Now you can run the client, press connect, run the server, connect again, and have it go through.

Fix - Projectile distance check: Fixed the projectile distance check to only check the projectiles in use.

Add - IP logging: Added IP logging to the database. The last 10 unique IPs used to connect to an account are stored.

Add - Account dating: Added account dating for when the account was created, along with when the user last logged in.

Fix - Data buffer: Fixed the data buffer to accept empty strings so that way it doesn't offset incorrectly when an empty string is passed.

Add - MySQL compile error message: Added a message that you need to recompile the EXEs after changing the MySQL information.

Fix - Data_Server_ChangeChar: Fixed the routine to handle invalid character IDs.

Fix - Quest giving: Fixed the quest giving to work correctly.

Change - Packet encryption: Changed the packet encryption to constantly switch through a series of generated keys (its a lot more complex then it sounds) instead of just a single key, making packet replying useless and packet manipulation / spoofing very difficult since if you send two move packets, they will be completely different (except for in length, packet inflation = icky!).

Fix - Server sleep time: Fixed the server sleep timer / calculator to be accurate.

Add - Server data grapher: Added a server data grapher that draws the FPS, number of NPCs and number of Users online so you can easily compair how many NPCs and users it takes to bring the server FPS down.

Change - Server_HeadToPos: Optimized the routine in attempt to help speed up the movement routines for PCs and NPCs.

Add - DebugPacketsIn: Added another packet analysis method, just like the packets out, but records what comes in.

Fix - Closing on MySQL error: The server will now close properly on an error with MySQL.

Fix - | bar on mail writing: Fixed the mail writing's text location bar ( | ) to align properly on multiple lines.

Fix - Removing mailing objects: Fixed the mailing to not remove the user's objects until the message has been successfully sent.

Change - Displaying uncategorized Grhs: Uncategorized Grhs are now displayed under Misc(Hidden).

Change - Pinging name: Renamed the pinging system to "Packet transfer delay", since it doesn't actually do "ping"ing.

Fix - User_MakeChar: Fixed the routine from needlessly sending packets to disable icons when they wern't even enabled in the first place.

Add - Client byte buffer allocating: Added some allocating to the client's byte buffer. Didn't add much because the way the client handles in comparison to the server, along with since the client uses the buffer nowhere near as much as the server.

Fix - Not close enough to NPC message: Fixed a small bug with the message of not being close enough to the NPC - the buffer was never being cleared, so you'd get a duplicate of the last buffer combined onto the message.

Add - Cached server messages: Made some of the server messages cached instead of building them with the data buffer. Only messages without any variables for the whole message can be cached. Although the old method is pretty fast (building it on-the-fly), caching it is about 5000 times faster and doesn't use much additional RAM - 2 bytes per message, and only messages without variables cached, going to use about 1/10th a kB of RAM at most. Typically, this is for the .Message packet system, but can be expanded to other packets if needed.

Rewrite - All server packets: Rewrote all the server packets to work with the Allocate and PreAllocate calls. Almost every packet was made to use PreAllocate, but theres a few instances where Allocate has to be used. Either way, its still faster then before, from anywhere from 50% to 200% per packet.

Change - Byte buffer speed-up: Did some massive optimizations to the byte buffer, a core part of the server that is constantly being used. Examples of optimizations are bulk memory allocating (instead of using ReDim Preserve every time data is put in, you can just ReDim a lot of memory at once to prevent using many, or any, ReDim Preserve calls), along with caching the UBound instead of calculating it every time (only really applicable on Get_ calls), and finally, using Len() instead of UBound() to get the size of the string (on Put_String/EX). The speed increases may seem pretty insignificant, but with how often the server uses the byte buffer, it easily adds up some great speed increase.

Personal tools