diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-05-30 19:28:41 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-05-30 19:28:41 +0000 |
commit | c8391c9c07abd235b2d40d8cfec39d62827706a7 (patch) | |
tree | d28df1f57382478a6b28f6a60f1f63bb44c44171 | |
parent | de96c0071f2e9a2c0a97dca96a34620b9ca0473b (diff) | |
download | hercules-c8391c9c07abd235b2d40d8cfec39d62827706a7.tar.gz hercules-c8391c9c07abd235b2d40d8cfec39d62827706a7.tar.bz2 hercules-c8391c9c07abd235b2d40d8cfec39d62827706a7.tar.xz hercules-c8391c9c07abd235b2d40d8cfec39d62827706a7.zip |
- Fixed Absorb Spirit Spheres
- Added battle_config min_chat_delay (default 0) specifies in ms what is the min delay between player sent chats (whisper/global/party/guild). Messages that exceed this threshold are silently ignored for now (perhaps need to add a "DON'T SPAM" reply to the player?)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6859 54d463be-8e91-2dee-dedb-b68131a5f0ec
-rw-r--r-- | Changelog-Trunk.txt | 6 | ||||
-rw-r--r-- | conf-tmpl/battle/client.conf | 4 | ||||
-rw-r--r-- | src/map/battle.c | 2 | ||||
-rw-r--r-- | src/map/battle.h | 1 | ||||
-rw-r--r-- | src/map/clif.c | 28 | ||||
-rw-r--r-- | src/map/map.h | 1 | ||||
-rw-r--r-- | src/map/pc.c | 3 | ||||
-rw-r--r-- | src/map/skill.c | 13 |
8 files changed, 47 insertions, 11 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 7b01686ab..05bcc3df0 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,12 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/05/30
+ * Fixed Absorb Spirit Spheres [Skotlex]
+ * Added battle_config min_chat_delay (default 0, battle/client.conf)
+ specifies in ms what is the min delay between player sent chats
+ (whisper/global/party/guild). Messages that exceed this threshold are
+ silently ignored for now (perhaps need to add a "DON'T SPAM" reply to the
+ player?) [Skotlex]
* [Fixed]:
- signed/usigned problem in sprintf and fscanf @ mercenary.c [Lance]
* Rewrote/cleaned up @petfriendly. [Skotlex]
diff --git a/conf-tmpl/battle/client.conf b/conf-tmpl/battle/client.conf index 697a06b5e..0168af923 100644 --- a/conf-tmpl/battle/client.conf +++ b/conf-tmpl/battle/client.conf @@ -44,6 +44,10 @@ // default value: 2047 (all clients)
packet_ver_flag: 2047
+// Minimum delay between whisper/global/party/guild messages (in ms)
+// Messages that break this threshold are silently omitted.
+min_chat_delay: 0
+
// valid range of dye's and styles on the client
min_hair_style: 0
max_hair_style: 23
diff --git a/src/map/battle.c b/src/map/battle.c index 4ae6ea545..8b05e544b 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3562,6 +3562,7 @@ static const struct battle_data_short { { "sg_miracle_skill_ratio", &battle_config.sg_miracle_skill_ratio }, { "autospell_stacking", &battle_config.autospell_stacking }, { "override_mob_names", &battle_config.override_mob_names }, + { "min_chat_delay", &battle_config.min_chat_delay }, }; static const struct battle_data_int { @@ -3980,6 +3981,7 @@ void battle_set_defaults() { battle_config.sg_miracle_skill_duration=600000; battle_config.autospell_stacking = 0; battle_config.override_mob_names = 0; + battle_config.min_chat_delay = 0; } void battle_validate_conf() { diff --git a/src/map/battle.h b/src/map/battle.h index 3b386b42e..ec472947f 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -429,6 +429,7 @@ extern struct Battle_Config { int sg_miracle_skill_duration;
unsigned short autospell_stacking; //Enables autospell cards to stack. [Skotlex]
unsigned short override_mob_names; //Enables overriding spawn mob names with the mob_db names. [Skotlex]
+ unsigned short min_chat_delay; //Minimum time between client messages. [Skotlex]
} battle_config;
diff --git a/src/map/clif.c b/src/map/clif.c index 677bb3ddd..8fe61ae46 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8623,6 +8623,13 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data *sd) { // S 008c < (sd->sc.data[SC_BERSERK].timer != -1 || sd->sc.data[SC_NOCHAT].timer != -1 ))
return;
+ if (battle_config.min_chat_delay)
+ { //[Skotlex]
+ if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0)
+ return;
+ sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
+ }
+
if (RFIFOW(fd,2)+4 < 128)
buf = buf2; //Use a static buffer.
else
@@ -8961,6 +8968,13 @@ void clif_parse_Wis(int fd, struct map_session_data *sd) { // S 0096 <len>.w <ni (sd->sc.data[SC_BERSERK].timer!=-1 || sd->sc.data[SC_NOCHAT].timer != -1))
return;
+ if (battle_config.min_chat_delay)
+ { //[Skotlex]
+ if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0)
+ return;
+ sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
+ }
+
memcpy(&target,RFIFOP(fd, 4),NAME_LENGTH);
target[NAME_LENGTH]='\0';
@@ -10229,6 +10243,13 @@ void clif_parse_PartyMessage(int fd, struct map_session_data *sd) { ))
return;
+ if (battle_config.min_chat_delay)
+ { //[Skotlex]
+ if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0)
+ return;
+ sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
+ }
+
party_send_message(sd, (char*)RFIFOP(fd,4), RFIFOW(fd,2)-4);
}
@@ -10442,6 +10463,13 @@ void clif_parse_GuildMessage(int fd,struct map_session_data *sd) { ))
return;
+ if (battle_config.min_chat_delay)
+ { //[Skotlex]
+ if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0)
+ return;
+ sd->cantalk_tick = gettick() + battle_config.min_chat_delay;
+ }
+
guild_send_message(sd, (char*)RFIFOP(fd,4), RFIFOW(fd,2)-4);
}
diff --git a/src/map/map.h b/src/map/map.h index 5e986fa01..7beb0bb4a 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -612,6 +612,7 @@ struct map_session_data { unsigned int canlog_tick;
unsigned int canregen_tick;
unsigned int canuseitem_tick; // [Skotlex]
+ unsigned int cantalk_tick;
int hp_sub,sp_sub;
int inchealhptick,inchealsptick,inchealspirithptick,inchealspiritsptick;
diff --git a/src/map/pc.c b/src/map/pc.c index 8cf18635a..00c874c7c 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -612,7 +612,8 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t sd->canregen_tick = tick;
sd->canuseitem_tick = tick;
-
+ sd->cantalk_tick = tick;
+
for(i = 0; i < MAX_SKILL_LEVEL; i++)
sd->spirit_timer[i] = -1;
diff --git a/src/map/skill.c b/src/map/skill.c index 79c1e048c..14ba8bbb1 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3862,17 +3862,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in i = 2 * dstmd->db->lv; mob_target(dstmd,src,0); } - if (sd){ - if (i > 0x7FFF) - i = 0x7FFF; - if (sd->status.sp + i > sd->status.max_sp) - i = sd->status.max_sp - sd->status.sp; - if (i) { - sd->status.sp += i; - clif_heal(sd->fd,SP_SP,i); - } - } + if (i) { + status_heal(src, 0, i, 3); clif_skill_nodamage(src,bl,skillid,skilllv,0); + } break; case AC_MAKINGARROW: /* –î?ì?¬ */ |