Age | Commit message (Collapse) | Author | Files | Lines |
|
Reviewed-by: Thorbjorn.
|
|
This will permit the client the make position resyncs when necessary,
and make use of the MOVING_POSITION and DESTINATION where relevant.
Reviewed-by: Thorbjorn.
|
|
Reviewed-by: Jaxad0127.
|
|
The setAttribute() already takes care of updating them.
Reviewed-by: Jaxad0127.
|
|
The only need to call this function was to trigger derived attributes
recalculation as the base attribute recalulation does nothung
for monsters atm.
And this is useless as setAttribute() already triggers
derived attributes recalulation.
Reviewed-by: Jaxad0127.
|
|
The bug made the monsters unable to move.
Reviewed-by: Jaxad0127.
|
|
The protocol uses ERRMSG_EMAIL_ALREADY_EXISTS instead.
|
|
Before that, all the loading information were kept at info level.
Trivial.
|
|
The crash happened when it was trying to move an NPC from its old zone
to its new zone. The old zone was based on the old position, which was
(0,0). That crashed since its zone didn't match its old position, but
its new one.
This fix makes sure to update the old position to be in sync with the
zone, by resetting it after being inserted into the MapComposite.
Reviewed-by: Yohann Ferreira
|
|
This was happening when retrieving characters from the database. Also
made the query more explicit about which columns it requests.
Reviewed-by: Yohann Ferreira
|
|
Reviewed-by: Thorbjorn.
|
|
Attributes that didn't get a value yet are not communicated from account
to game server. This could leave some attributes with uninitialized
(random) values, like the amount of gold or some uncalculated attack
speed bonus.
Defaulting the value to 0 seems to be appropriate for all current cases.
When another default value should be used, it can be specified in
attributes.xml and will be sent from the account server.
Reviewed-by: Stefan Dombrowski
|
|
Could happen on servers where a character is being communicated that has
something equipped.
The infinite loop was due to using "while (msg.getUnreadLength())" on a
message after having read one byte too much, causing it to miss the 0
bytes unread and count to minus infinity. This is a danger that we
should probably also fix generally.
The byte that was read too much was equipmentInSlotType, which I think
should have been the number of items equipped in a certain slot type.
This number is never written by the serializeCharacterData function and
also doesn't seem necessary. When multiple items are equipped in a
single equipment slot type, there will simply be multiple pairs
transmitted for that equipment slot type.
Reviewed-by: Freeyorp
|
|
The xml gives the drop rate as a floating point number.
Also added 0.5 for correct rounding. (Without it 0.7% calculates to 69.)
Reviewed-by: Jaxad0127
|
|
It's being compared to an unsigned integer.
Reported-by: Stefan Dombrowski
|
|
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
|
|
* Removed a lot of pointless documentation that was mainly repeating the
function name and otherwise just filling up space.
* Synced a few method names to the names of the messages that they were
handling.
* Removed an unimplemented method (sendPartyMemberInfo)
Reviewed-by: Jared Adams
|
|
* 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
|
|
This resolves http://bugs.manasource.org/view.php?id=323
|
|
This resolves http://bugs.manasource.org/view.php?id=321
Reviewed-by: Jaxad0127, VUT
|
|
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
|
|
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
|
|
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
|
|
|
|
|
|
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
|
|
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
|
|
Keeps the code indentation within reasonable limits and makes the
structure easier to follow.
Reviewed-by: Freeyorp
|
|
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
|
|
Just seems a bit more organized to me.
|
|
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
|
|
This is not standard C++...
Reviewed-by: Freeyorp
|
|
A bunch of variables that were continuously requested from the
configuration are now members of the AccountHandler.
Reviewed-by: Freeyorp
|
|
It's better to use luaL_checkint than manually checking and printing out
an error, since using the helper function makes a more informative error
message.
Also, scripts errors need to be raised before constructing objects,
since due to the way Lua does error handling the destructors of the
objects will not be called.
Also fixed an issue with the 4th parameter, which was first cast to
integer and then multiplied by 10000. Now the multiplication happens
before the casting to integer.
Reviewed-by: Crush
|
|
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
|
|
* 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
|
|
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
|
|
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.
|
|
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
|
|
|
|
Nicer as members where there is clear ownership, initialization and
scope.
Reviewed-by: Freeyorp
|
|
Easier to understand than a std::pair with its 'first' and 'second'
members, and it also provides an implicit constructor so that
AttributeValue is implicitly constructed from a double.
Reviewed-by: Freeyorp
|
|
There was a version taking an attack range, but the range was always the
same as the one specified in the Damage class.
|
|
(trivial patch)
|
|
The new lua function mana.chr_shake_screen can cause a screen shake
for a single client with variable x-intensity, y-intensity, decay and
duration.
I also added an example script which causes tremors for nearby characters
with intensity and direction relative to a specific point. The function
is not referenced on the example map because it is quite distracting.
|
|
More convenient since it doesn't require calling any methods, and a bit
faster. Also added stream operator for Rectangle.
|
|
Nicer style.
|
|
Reviewed-by: Jaxad0127.
|
|
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.
|
|
No reason why these should be ignored and then replaced by their
defaults, generally.
Reviewed-by: Jared Adams
|