Age | Commit message (Collapse) | Author | Files | Lines |
|
getWalkMask() and getCollisionRadius() are not going to return different
values each time, so assign them to a local variable.
Also marked LocalPlayer::getNextWalkPosition const.
|
|
The UI became unresponsive as a result of not actually deleting the
OkDialog. The dialog is now managed by the AwayListener, which now
schedules Away dialog for deletion when necessary, using a DeathListener
to clear the reference to the dialog.
The WindowContainer now uses an std::set instead of std::list to keep
track of widgets scheduled for deletion, to avoid crashing when a widget
is scheduled for deletion multiple times.
|
|
Supporting these fields is necessary to correctly identify status
effects sent by tmwAthena.
This is a manual port of ac4e40a1408ad4d6fbcfce9d2bc6a0bc187ea5a4,
542d2ba78d84e0fa051e0620ccab5fb3a0c711e3 and
8800940bb4b94f6dab7dcf80bf0abc3e3b09e35f from M+.
|
|
Since this stuff is only relevant for Being instances and not for
FloorItem instances.
Also removed the virtual getWidth/getHeight from Actor, since they were
not actually used.
|
|
The GM command @class (alias @charclass) can be used by GMs to change
their character class (also referred to as job, race, base or species).
Changes of the class are now supported, even supporting switching
between appearing as player, monster or NPC.
Part of https://git.themanaworld.org/mana/mana/-/issues/92
|
|
Thanks to https://github.com/cgmb/guardonce and a follow-up replace to
remove duplicated newlines at end of file:
find src -type f -name '*.h' -exec \
sed --in-place -e :a -e '/^\n*$/{$d;N;};/\n$/ba' {} \;
Source: https://unix.stackexchange.com/questions/81685/how-to-remove-multiple-newlines-at-eof
Fixes compile on macOS, which appears to have been due to the EVENT_H
include guard.
|
|
This change addresses the slight stutter and broken animation playback
when walking with the keyboard.
Once the end of the path has been reached but a movement key is still
held, the LocalPlayer now immediately calculates a new path rather than
waiting on the next logic update.
|
|
The logic update now uses Time::deltaTimeMs() where needed to make it
framerate-independent. This means there will no longer be multiple logic
calls per frame (as was usually the case with logic ticking at 100 fps
whereas the game would generally run at 60 fps).
At the same time, the game can be more precise at higher framerates and
should now run smoother at 144 Hz, for example. Previously the game would
sometimes skip logic ticks at that rate.
This change affects:
* Updating of animations
* Being movement speed
* More moving of manual time variables to Timer
Notoriously, the particle system still does 100 ticks/second.
|
|
The Timer is efficient because it does not depend on incrementing a
counter to keep track of time, nor does it call SDL_GetTicks every time
its state is checked (this happens once per frame instead).
Along with global functions Time::absoluteTimeMs() and
Time::deltaTimeMs(), this replaces previous globals tick_time, cur_time
and get_elapsed_time().
For now, there is still a fixed 100 times per second logic call rate,
but the new Time::deltaTimeMs() function should allow getting rid of
this.
|
|
Maybe it once had a use, but a change in the "Show own name" setting is
already handled by LocalPlayer::event.
|
|
* Removed some unused includes
* Removed unused ListBox::mFont
* Removed wrong cast to SDL_Scancode
* Removed superfluous .c_str()
* Removed superfluous explicit std::string construction
* Removed unused variable
* Use more emplace_back
* Turned FindBeingFunctor into a lambda
* Avoid needless pointer references for ambient layers and use a vector
|
|
* Use default member initializers
* Use range-based for loops
* Avoid needless pointer references for ShopItem::mDuplicates
* Removed type aliases that are only used once or twice
* Removed more unused includes
* Removed some unused functions
* Removed superfluous .c_str()
* Rely on default copy and assignment operators for Vector class
* Use std::unique_ptr in some places
* Removed duplicated mPlayerMoney updating in SellDialog
* Removed duplicated Game::handleInput call
* Removed unused SDLInput::mMouseInWindow
* Removed remnant of manual widget positioning in HelpWindow
* Removed superfluous initialization of static pointers
|
|
* Use final for all message handlers, Client, LocalPlayer,
Being::getType, Being::setPosition and Being::setMap.
(avoids some warnings about virtual dispatch in constructors)
* Use auto in more places
* Use emplace_back instead of push_back in some places
* Use default member initializers
* Less else after return
* Removed superfluous .c_str()
* Removed type aliases that are only used once
* Removed more unused includes
|
|
Previous code was assuming there would be no gaps in the emote IDs.
Also cleaned up some confusion where the "emote ID" being passed around
in the code was often offset by 1. Now it is only offset in
communication with tmwAthena and when saving the shortcuts.
|
|
* Removing unused includes
* Use member initialization
* Use range-based for loops
* Use nullptr
* Removed no longer used aliases
* Use override
* Don't use else after return
* Use '= delete' to remove implicit members
* Use std::string::empty instead of comparing to ""
|
|
modernize-use-auto
modernize-use-nullptr
modernize-use-override
modernize-use-using
|
|
- Fixed the player attacking when clicking on a monster,
and then walking near using the keyboard.
- Fixed the walking glitch seen in tile path mode by letting
the character reach its nearest tile path node.
Reviewed-by: Thorbjørn Lindeijer
|
|
I first removed the keep attacking and pickup targetting unset
statements in the setdestination() function
since it was messing with all the rest of the logic,
and put those targetting logic where they belonged more.
I also changed the gotoTarget function to properly call the setTarget
function which permitted to properly unset the previous target
in that case.
I also finished the logic built around the mGoingToTarget member
(until then actually unused) to make it all work again.
At last, I also removed a now false comment
in the startWalking() function.
Reviewed-by: Erik Schilling
|
|
I also made the range be taken from the server type
as for the pickup and npc talk ranges.
Last but no least, I fixed the parameters sent with
PGMSG_PICKUP to send the (item) position where to pickup at
as described in the manaserv protocol.
The pickup is still not 100% functional due certainly
to two problems:
1. The client item coordinates might not be the exact same as in the server.
2. The client seems to try to pick up the item a bit too soon,
probably for the reason given in 1.
I'll investigate this in another patch.
Reviewed-by: Thorbjørn Lindeijer, Erik Schilling.
|
|
- Renamed mLastTarget to mLastTargetTime, and mLastAction to mLastActionTime
to clarify their use.
- NULL -> 0.
- Removed the unused mLocalWalkTime member.
+ Change requested by bjorn.
Reviewed-by: Thorjørn Lindeijer
|
|
|
|
The patch also takes care of not spamming the different servers,
when the servers are setting the being speed correctly.
The most problems were coming from the keyboard movement functions
handling 1 tile paths. To void the issues seen in #405, #439,
and #440, I simply prevented to set a new path before reaching
the destination of the former one, when using the keyboard.
The mouse path system remains unchanged.
I also made some functions private (or here protected)
to show they shouldn't be called by something else than
the localplayer object.
And I removed the nextTile() function, since it was obsolete,
unused, and replaced by the nextTile(direction) function.
That patch was tested on both servers with mouse/keyboard
mixed use.
Resolves: Mana-Mantis #405, #439, #440.
Reviewed-by: bjorn
|
|
Reviewed-by: Ablu
|
|
It has been fixed and be made adapted
to the being movement speed.
Now, for instance, the client sends 3x times less move calls
to the tA server, and roughly 20x times for the Manaserv's one.
Resolves: Mana-Mantis #346.
|
|
It already was, but now the the api is clear about it.
Client part of the mana issue: #363.
Reviewed-by: Bjorn.
|
|
This required moving to C++0x, so it does that too, and fixes a few errors with
that.
Reviewed-by: Thorbjørn Lindeijer <thorbjorn@lindeijer.nl>
|
|
This is fixng many issues and (hopefully) will make the movement
rendering much smoother.
Merge branch 'master' of gitorious.org:~bertram/mana/mana-movement-code-merge
Conflicts:
src/being.cpp
src/net/manaserv/beinghandler.cpp
Resolves: TMW-Mantis #946.
Reviewed-by: Thorbjorn.
|
|
I have to admit I contributed a large part of these. Sorry for that.
Less empty space, more attention to the code.
Acked-by: Jared Adams
|
|
It's just an annoyance when it's only applied to a few classes. Either
we place everything in this namespace or nothing, and at the moment I
don't see any rationale for placing everything in a Mana namespace.
Acked-by: Jared Adams
|
|
Acked-by: Jared Adams
|
|
The attack range is still hardcoded for Manaserv as long
as generic equipment handling hasn't been implemented.
|
|
The attack range is always the default for manaserv, as proper
equipment handling is to be added.
Anyway, now the proper attack range is handled in tmwAthena
and is always set a proper minimum for both protocols.
|
|
Translation file updates ignored.
Conflicts:
src/client.cpp
src/commandhandler.cpp
src/gui/popupmenu.cpp
src/localplayer.cpp
|
|
Reviewed-by: Jaxad0127
|
|
This reverts commit 3d6a2d9c80a969c3613f567dd7029e75ef59b5cb.
I've by that readded the AFK system on master. Please, remove it
when we've got a proper replacement.
|
|
Reviewed-by: Jared Adams
|
|
Reviewed-by: Freeyorp
|
|
Conflicts:
src/being.cpp
src/client.cpp
src/commandhandler.cpp
src/gui/setup_video.cpp
src/gui/socialwindow.cpp
src/gui/viewport.cpp
src/gui/widgets/browserbox.cpp
src/gui/widgets/itemcontainer.cpp
src/imageparticle.cpp
src/localplayer.cpp
src/localplayer.h
src/map.cpp
src/net/tmwa/beinghandler.cpp
src/particle.cpp
src/particle.h
src/player.cpp
src/player.h
|
|
As an upcoming feature the TMW-Athena server sends IP addresses or
IP hashes to game masters. The current client freezes if it receives
such a packet, therefor the game masters need to use a new client before
the server can use it. Normal players are not affected, because they
do not get this packet.
Showing the IP is optional and can be enable with the chat command
"/showip 1". The IP is then shown behind the players name.
Reviewed-by: Bertram
|
|
Removed due to unresolved social issues.
In master it had been already removed by Kage in
commit 89f192b9039f9c000515f0a12f4bb9fb55c4691c.
|
|
This would be if it was handled by a addon later.
Reviewed-By: Freeyorp < Freeyorp101@hotmail.com >
|
|
The implamentation is poor, and this is something that
would be better handled by the addon engine later down
the road.
Reviewed-By: Freeyorp < Freeyorp101@hotmail.com >
|
|
Most of Net::InventoryHandler is now done through events. The
ActorSpriteManager was also replaced by events. A few odds and
ends were taken care of too.
Reviewed-by: Bertram
|
|
The Being and Player Chat events now have the precomuted permissions
for SPEECH_LOG and SPEECH_FLOAT. The Being class now acts on those
events to show speech (if SPEECH_FLOAT is present). ChatWindow now
checks for the SPEECH_LOG permission.
Reviewed-by: Freeyorp
|
|
Reviewed-by: Yohann Ferreira
|
|
Reviewed-by: Freeyorp
|
|
Reviewed-by: Chuck Miller
|
|
Also cleanup PlayerInfo a bit.
Reviewed-by: Chuck Miller
|
|
Reviewed-by: Jared Adams
|
|
Handling moved from LocalPlayer to PlayerInfo class
Event system used to update windows
Reviewed-by: Jared Adams
|