summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoraK-FDF <horak-fdf@web.de>2023-01-22 17:19:24 +0000
committerJesusalva Jesusalva <jesusalva@themanaworld.org>2023-01-22 17:19:24 +0000
commitfd1b3431e44905b29d6313fb172240198f80f27a (patch)
tree787dfd2bdd936a2397c4da55852e9a4691248544
parentfaa336a7f64059f4fb376a386a4a716acd48a9b3 (diff)
downloadtmwa-fd1b3431e44905b29d6313fb172240198f80f27a.tar.gz
tmwa-fd1b3431e44905b29d6313fb172240198f80f27a.tar.bz2
tmwa-fd1b3431e44905b29d6313fb172240198f80f27a.tar.xz
tmwa-fd1b3431e44905b29d6313fb172240198f80f27a.zip
bSpeedCap
-rw-r--r--src/map/map.hpp2
-rw-r--r--src/map/pc.cpp12
-rw-r--r--src/mmo/clif.t.hpp2
3 files changed, 15 insertions, 1 deletions
diff --git a/src/map/map.hpp b/src/map/map.hpp
index eddbfad..af074ba 100644
--- a/src/map/map.hpp
+++ b/src/map/map.hpp
@@ -188,7 +188,7 @@ struct map_session_data : block_list, SessionData
MapName mapname_;
Session *sess; // use this, you idiots!
short to_x, to_y;
- interval_t speed;
+ interval_t speed, speed_cap;
Opt1 opt1;
Opt2 opt2;
Opt3 opt3;
diff --git a/src/map/pc.cpp b/src/map/pc.cpp
index 9e76ecf..9fd23b9 100644
--- a/src/map/pc.cpp
+++ b/src/map/pc.cpp
@@ -1174,6 +1174,7 @@ int pc_calcstatus(dumb_ptr<map_session_data> sd, int first)
sd->matk1 = 0;
sd->matk2 = 0;
sd->speed = DEFAULT_WALK_SPEED;
+ sd->speed_cap = interval_t::zero();
sd->hprate = 100;
sd->sprate = 100;
sd->dsprate = 100;
@@ -1528,6 +1529,10 @@ int pc_calcstatus(dumb_ptr<map_session_data> sd, int first)
if (sd->speed_rate != 100)
sd->speed = sd->speed * sd->speed_rate / 100;
sd->speed = std::max(sd->speed, 1_ms);
+ if (sd->speed_cap < interval_t::zero())
+ sd->speed_cap = interval_t::zero();
+ if (sd->speed < sd->speed_cap)
+ sd->speed = sd->speed_cap;
/* Magic speed */
if (sd->attack_spell_override || first & 8)
@@ -1829,6 +1834,12 @@ int pc_bonus(dumb_ptr<map_session_data> sd, SP type, int val)
case SP::DEAF:
sd->special_state.deaf = 1;
break;
+ case SP::SPEED_CAP:
+ if (!sd->state.lr_flag_is_arrow_2)
+ // lowest cap is taken others are ignored
+ if (sd->speed_cap < interval_t(val))
+ sd->speed_cap = interval_t(val);
+ break;
default:
if (battle_config.error_log)
PRINTF("pc_bonus: unknown type %d %d !\n"_fmt,
@@ -1840,6 +1851,7 @@ int pc_bonus(dumb_ptr<map_session_data> sd, SP type, int val)
/*==========================================
* ソスソス ソスソスソスiソスノゑソスソスソスソス\ソスヘ難ソスソスフボソス[ソスiソスXソスン抵ソス
+ * sos sos sos sos sos i sos no sos sos sos sos\
*------------------------------------------
*/
int pc_bonus2(dumb_ptr<map_session_data> sd, SP type, int type2, int val)
diff --git a/src/mmo/clif.t.hpp b/src/mmo/clif.t.hpp
index 33a6f3c..830c5bd 100644
--- a/src/mmo/clif.t.hpp
+++ b/src/mmo/clif.t.hpp
@@ -472,6 +472,8 @@ enum class SP : uint16_t
MUTE_PARTY = 1084,
MUTE_GUILD = 1085,
AUTOMOD = 1086,
+
+ SPEED_CAP = 1087,
};
constexpr