summaryrefslogtreecommitdiff
path: root/src/game-server
AgeCommit message (Collapse)AuthorFilesLines
2011-04-02Split GameHandler::processMessage up into multiple functionsThorbjørn Lindeijer2-394/+481
One huge function that handles all the messages isn't very readable and causes everything to be indented by several levels. Hence we generally split this up. It also exposed a missing 'break;' when handling the PGMSG_USE_SPECIAL message, which would continue into the handling of PGMSG_ACTION_CHANGE. Reviewed-by: Stefan Dombrowski
2011-04-02Some cleanups related to syncing from game to account serverThorbjørn Lindeijer2-26/+23
* Remove SYNC_END_OF_BUFFER since the end of a message can already be identified by no more data being available. * Consistently prefix ++ rather than postfix ++ when incrementing mSyncMessages. * Made SYNC_BUFFER_SIZE into constants rather than defines, and moved them into the .cpp file since they're not used anywhere else. * Just use 1 and 0 to indicate online status. No point in writing it like 0x01 and 0x00. * Merged some duplicated documentation for AccountConnection::syncChanges. Reviewed-by: Jared Adams
2011-03-24Rely more on the functionality in XML::DocumentThorbjørn Lindeijer5-60/+18
By default XML::Document will use the ResourceManager to resolve the file name you pass to it. There is no point in disabling that functionality only to resolve it manually. Reviewed-by: Jared Adams
2011-03-24Use a map to quickly find items and monsters by their nameThorbjørn Lindeijer4-58/+54
Introduced a template class NameMap, which provides a nice API for mapping any custom types by their name. This change also makes any duplicate item or monster definitions be complete ignored, rather than being merged into the first definition. Reviewed-by: Philipp Sehmisch Reviewed-by: Yohann Ferreira
2011-03-23Fixed problems with loading XML files containing Windows newlinesThorbjørn Lindeijer2-77/+16
By using xmlParseFile instead of xmlParseMemory, the system-dependent newlines should be handled automatically. The .tmx.gz files should still be supported, but instead of manually decompressing them the xmlParseFile function should take care of that. It also fixes the leaking of XML documents in both the SkillManager as well as the PermissionManager, since they now rely on XML::Document, which cleans up automatically. Reviewed-by: Stefan Dombrowski
2011-03-20Renamed some members to adhere to naming standardThorbjørn Lindeijer2-25/+25
2011-03-20Introduced separate functions for item database loadingThorbjørn Lindeijer3-299/+337
This splits the huge ItemManager::reload() into readEquipSlotsFile() and readItemsFile(), the latter of which is further split up into multiple functions for reading the different elements. Just to keep the amount of nesting down and increase the readability. Removes the need for huge eye-catching comment blocks. Reviewed-by: Freeyorp
2011-03-20Introduced ModifierLocation structThorbjørn Lindeijer3-25/+41
Easier to understand than a std::pair<unsigned int, unsigned int>, or functions like getTagFromInfo(unsigned int, unsigned int), which does not make clear what that "info" actually is. Now it's simply getTag(const ModifierLocation &location), documenting itself and also allowing the name to be shorter. Reviewed-by: Freeyorp
2011-03-20Introduced some functions for reading the attributes fileThorbjørn Lindeijer2-148/+159
Keeps the code indentation within reasonable limits and makes the structure easier to follow. Reviewed-by: Freeyorp
2011-03-20Renaming stuff to make the code more readableThorbjørn Lindeijer7-34/+36
SCOPE_TYPES -> ScopeType (plural was confusing) ATTR_BEING -> BeingScope ATTR_CHAR -> CharacterScope ATTR_MOD -> MonsterScope ATTR_MAX -> MaxScope AttributeScopes -> AttributeScope (A single scope seems to include multiple lists of attributes. Seems wrong to me to name this type in plural form.) getAttributeInfoForType -> getAttributeScope (just naming it after what it is actually returning) Reviewed-by: Freeyorp
2011-03-20Moved defines.h and manaserv_protocol.h into 'common'Thorbjørn Lindeijer9-11/+11
Just seems a bit more organized to me.
2011-03-20Some renamings to try to make things more readableThorbjørn Lindeijer3-93/+130
AT_TY -> StackableType TY_ST -> Stackable TY_NST -> NonStackable TY_NSTB -> NonStackableBonus AME_TY -> ModifierEffectType AME_MULT -> Multiplicative AME_ADD -> Additive Got rid of related documentation, which is now stating the obvious. Also renamed many related variables. Reviewed-by: Freeyorp
2011-03-20General cleanups and code style fixesThorbjørn Lindeijer2-7/+9
A bunch of variables that were continuously requested from the configuration are now members of the AccountHandler. Reviewed-by: Freeyorp
2011-03-18Improved @ban commandPhilipp Sehmisch2-14/+38
When banning a character, the game master now sets a time unit (m, h, d, w or y for minutes, hours, days, weeks or years) after the duration. Ban durations longer than 2^16 minutes are now possible. The banned character is now kicked automatically and the banning character receives a feedback chat message. Reviewed-by: Thorbjorn
2011-03-17Micro-optimizations related to std::stringThorbjørn Lindeijer9-53/+66
* Rely on the fact that a std::string is empty by default * Use std::string::empty() rather than comparing to "" * Construct with std::string() rather than from "" Reviewed-by: Bertram
2011-03-16Path finding: Moved F cost from PathInfo to LocationThorbjørn Lindeijer1-17/+15
The F cost represents the estimate of the total cost from source to destination. It is only relevant to sort the locations to be checked, so there is no point in assigning it to each coordinate of the map. With maps up to 200x200, the memory usage is reduced by 160 kB! :P Reviewed-by: Bertram
2011-03-16Allowed item names instead of IDs in @commandsPhilipp Sehmisch4-41/+84
The @drop and @item commands can now accept an item name instead of an item ID. In addition the amount can be omitted to create a single item.
2011-03-16Allowed monster names in @spawn commandPhilipp Sehmisch4-17/+67
I rewrote the @spawn command to allow two new things: 1. The monster ID can be replaced with the name of the monster. 2. The amount of monsters can be omitted. In that case a single monster is spawned. Reviewed by: Jaxad and Thorbjorn
2011-03-15Some code style cleanups in AutoAttack classThorbjørn Lindeijer3-31/+77
2011-03-15Eliminated one version of Being::performAttackThorbjørn Lindeijer3-14/+12
There was a version taking an attack range, but the range was always the same as the one specified in the Damage class.
2011-03-12Fixed monster flawed movements and client net messages flooding.Yohann Ferreira1-2/+2
The monsters weren't respecting the end of the stroll time before resetting their destination, which made them never cease changing it and flooded the clients with movement messages. Resolves: Mana-Mantis #315. Reviewed-by: Jaxad0127.
2011-03-12Removed a bunch of silly documentationThorbjørn Lindeijer6-30/+0
A C++ developer should be able to recognize a constructor and a destructor by just looking at it, so let's stop writing down the obvious. :)
2011-03-11Moved freeing of map position to Actor destructorThorbjørn Lindeijer6-30/+22
It was done in both the Character and the Monster destructors, but I don't see how any Actor should be excluded from this. Now it also happens for NPC, Effect and Item, though only NPC has a relevant walkmask. Also fixed a small issue introduced in 97e0a9eb170499 and added an assert to freeTile. We should be able to assert that a tile can only be freed if it was blocked. Reviewed-by: Stefan Dombrowski
2011-03-11Split path finding out of the Map classThorbjørn Lindeijer7-176/+176
Extracted the path finding algorithm out of the Map class and introduced a new class called PathInfo that has the path finding information that used to be part of MetaTile. This allows a single vector of path information to be shared between all maps running on the server, significantly reducing the memory overhead per map (for 200x200 maps, the memory reduction is about 1 MB per map). Part of this change is some cleanup, like moving the 'occupation' counts into MetaTile, inlining some methods for performance reasons, and using STL to simplify memory management. Mantis-issue: 106 Reviewed-by: Bertram
2011-03-11Fixed Actor::setPosition to update the blockmask correctlyThorbjørn Lindeijer1-8/+6
It was freeing the new tile rather than the previous tile. Reviewed-by: Stefan Dombrowski
2011-03-11Avoid sqrt and double in circle-to-circle collision detectionThorbjørn Lindeijer1-4/+6
We can just stick with integers by trading a sqrt for a multiplication. Reviewed-by: Bertram
2011-03-10Server-Wrap the open and closed list members in path finding.Yohann Ferreira2-76/+43
This prevents some weird things happening especially on crowded maps. I also removed the unused findSimplePath() function. Reviewed-by: Thorbjorn.
2011-03-09Renamed GameState::insertSafe() to inserOrDelete.Yohann Ferreira4-7/+7
This reflects much more what the function does IMHO. Trivial.
2011-03-06Small fixes coming from my comment on issue #77.Yohann Ferreira4-15/+18
Trivial.
2011-03-04Implemented persistent world and map variablesPhilipp Sehmisch7-13/+170
The gameserver now receive a copy of all world state variables when they are accepted by the accountserver and receive a copy of all map state variables of a map when they register it successfully. Implemented LUA script bindings for getting and setting these variables. When such a variable is set, the accountserver is notified about this change. Changes to world state variables are then propagated to all gameservers by the accountserver. Be aware that when a gameserver is updating a map, there is no check if it is actually responsible for said map. But I consider this not a security flaw, because authenticated game servers are considered to be trustworthy in a lot of other situations, too. Also renamed "quest" to "character variable" in the sourcecode. Reviewed-by: Bertram
2011-02-24Fixing dead born monstersStefan Dombrowski1-2/+5
Reviewed-by: Bertram
2011-02-22Implementing @killmonstersStefan Dombrowski1-0/+26
Reviewed-by: Crush
2011-02-21Remove obsolete reset of SIGSEGV handlingStefan Dombrowski1-3/+0
Reviewed-by: Thorbjorn
2011-02-20Adding CSV support from Jaxad's client implementation.Yohann Ferreira1-8/+45
Reviewed-by: Jaxad0127. Resolves: Mana-Mantis #286.
2011-02-19Removing dublicate deinitialize of enetStefan Dombrowski1-3/+3
Both servers deinitialize enet now from deinitializeServer(). Reviewed-by: Bertram, Jaxad0127
2011-02-19Add support for zlib map layer compression.Yohann Ferreira1-3/+6
Trivial fix.
2011-02-16Removing unused variable configPathChangedStefan Dombrowski1-3/+0
2011-02-16Fixed doc about stroll range, which is coded in pixels.Yohann Ferreira1-2/+2
Not in tiles, as suggested by the header. Trivial fix.
2011-02-15Fixed registering the players items to the buysell handler.Yohann Ferreira1-24/+46
Now buy/sell lua functions can access the player inventory again. This is not using the delayed mode, so it won't be a problem. Reviewed-by: Freeyorp.
2011-01-30Revert "Fixed the money handling."Jared Adams3-8/+2
This reverts commit b2209cbe93aa12dcd4e4e3b9a7cd8b13ed5713e9. Money should be handled through attributes, not magic numbers.
2011-01-31Fixed the money handling.Yohann Ferreira3-2/+8
- At character's attributes recalculation when necessary. - In the lua scripting functions.
2011-01-30Made the code tell a bit more when a monster is lacking values.Yohann Ferreira1-14/+30
2011-01-30Trivial code format fixes in monstermanager.cpp.Yohann Ferreira1-28/+45
2011-01-30Added the missing Magical dodge monster property.Yohann Ferreira1-0/+2
Now this can be loaded with the 'magic-evade' xml tag.
2011-01-30Made the monsters' attributes compute fine again.Yohann Ferreira3-10/+59
As a consequence, the monsters can spawn again. Reviewed-by: Freeyorp.
2011-01-22Made the being direction be updated only at the end of the movement.Yohann Ferreira1-3/+3
This saves a bit of cpu and make use of pixel points where tile points where used before and could lead to discrepancies. Reviewed-by: Thorbjorn.
2011-01-11Made the servers report their protocol version.Yohann Ferreira2-2/+5
As the protocol version isn't something the maintainers should set, I removed the net_clientVersion irrelevant option, replaced by the corresponding define PROTOCOL_VERSION in the manaserv_protocol.h file. A corresponding change in the client will be made. N.B.: Now, the Enet version is also reported in the log. Reviewed-by: Jaxad.
2011-01-10Removing default argument values from Map definitionStefan Dombrowski1-2/+1
The default argument values had no effect, because they are not in the declaration. Updating the codeblock project, because protocol.h had been renamed. Reviewed-by: Bertram
2011-01-09Fix being direction discrepancies by syncing the BeingDirection.Yohann Ferreira5-15/+112
The server was actually using the bitmask enum while the the client still sent another one, creating discrepancies. A second problem is that the being direction was not properly initialized and not updated while it was moving. Reviewed-by: Jaxad.
2011-01-09Removed the superfluous point struct.Yohann Ferreira9-24/+13
It was too close from the Position class and it leads to making the server handle one or another type through the code. Still bugged me many times while making changes. Reviewed-by: Jaxad.