From 9a8fab9f29c7284c23b54e67bdb85a05de9b36eb Mon Sep 17 00:00:00 2001 From: Inkfish Date: Tue, 16 Jun 2009 12:35:03 +0000 Subject: Fixed an exploit that makes guild skill get higher level than the max defined in guild_skill_tree. (bugreport:3241) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13894 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/guild.c | 5 +++-- src/map/intif.c | 7 ++++--- src/map/intif.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'src/map') diff --git a/src/map/guild.c b/src/map/guild.c index 365461593..0eb7af712 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -1229,6 +1229,7 @@ int guild_skillup(TBL_PC* sd, int skill_num) { struct guild* g; int idx = skill_num - GD_SKILLBASE; + int max = guild_skill_get_max(skill_num); nullpo_retr(0, sd); @@ -1239,8 +1240,8 @@ int guild_skillup(TBL_PC* sd, int skill_num) if( g->skill_point > 0 && g->skill[idx].id != 0 && - g->skill[idx].lv < guild_skill_get_max(skill_num) ) - intif_guild_skillup(g->guild_id, skill_num, sd->status.account_id); + g->skill[idx].lv < max ) + intif_guild_skillup(g->guild_id, skill_num, sd->status.account_id, max); return 0; } diff --git a/src/map/intif.c b/src/map/intif.c index c01a54ed8..1a8e5e75b 100644 --- a/src/map/intif.c +++ b/src/map/intif.c @@ -644,16 +644,17 @@ int intif_guild_position(int guild_id,int idx,struct guild_position *p) return 0; } // ギルドスキルアップ要求 -int intif_guild_skillup(int guild_id, int skill_num, int account_id) +int intif_guild_skillup(int guild_id, int skill_num, int account_id, int max) { if( CheckForCharServer() ) return 0; - WFIFOHEAD(inter_fd, 14); + WFIFOHEAD(inter_fd, 18); WFIFOW(inter_fd, 0) = 0x303c; WFIFOL(inter_fd, 2) = guild_id; WFIFOL(inter_fd, 6) = skill_num; WFIFOL(inter_fd, 10) = account_id; - WFIFOSET(inter_fd, 14); + WFIFOL(inter_fd, 14) = max; + WFIFOSET(inter_fd, 18); return 0; } // ギルド同盟/敵対要求 diff --git a/src/map/intif.h b/src/map/intif.h index 4199959fb..38effaaf9 100644 --- a/src/map/intif.h +++ b/src/map/intif.h @@ -52,7 +52,7 @@ int intif_guild_change_gm(int guild_id, const char* name, int len); int intif_guild_change_basicinfo(int guild_id, int type, const void *data, int len); int intif_guild_change_memberinfo(int guild_id, int account_id, int char_id, int type, const void *data, int len); int intif_guild_position(int guild_id, int idx, struct guild_position *p); -int intif_guild_skillup(int guild_id, int skill_num, int account_id); +int intif_guild_skillup(int guild_id, int skill_num, int account_id, int max); int intif_guild_alliance(int guild_id1, int guild_id2, int account_id1, int account_id2, int flag); int intif_guild_notice(int guild_id, const char *mes1, const char *mes2); int intif_guild_emblem(int guild_id, int len, const char *data); -- cgit v1.2.3-70-g09d2