summaryrefslogtreecommitdiff
path: root/src/map/pc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/pc.c')
-rw-r--r--src/map/pc.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/map/pc.c b/src/map/pc.c
index 5db11ca..5814c08 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -817,7 +817,8 @@ int pc_authok (int id, int login_id2, time_t connect_until_time,
sd->canact_tick = tick;
sd->canmove_tick = tick;
sd->attackabletime = tick;
- sd->cast_tick = tick;
+ /* We don't want players bypassing spell restrictions. [remoitnane] */
+ sd->cast_tick = tick + pc_readglobalreg (sd, "MAGIC_CAST_TICK");
sd->doridori_counter = 0;
@@ -9009,11 +9010,25 @@ void pc_invisibility (struct map_session_data *sd, int enabled)
int pc_logout (struct map_session_data *sd) // [fate] Player logs out
{
+ unsigned int tick = gettick ();
+
if (!sd)
return 0;
if (sd->sc_data[SC_POISON].timer != -1)
sd->status.hp = 1; // Logging out while poisoned -> bad
+ /*
+ * Trying to rapidly sign out/in or switch characters to avoid a spell's
+ * cast time is also bad. [remoitnane]
+ */
+ if (sd->cast_tick > tick)
+ {
+ if (pc_setglobalreg (sd, "MAGIC_CAST_TICK", sd->cast_tick - tick))
+ sd->status.sp = 1;
+ }
+ else
+ pc_setglobalreg (sd, "MAGIC_CAST_TICK", 0);
+
MAP_LOG_STATS (sd, "LOGOUT") return 0;
}