summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
authorInkfish <Inkfish@54d463be-8e91-2dee-dedb-b68131a5f0ec>2009-06-16 12:35:03 +0000
committerInkfish <Inkfish@54d463be-8e91-2dee-dedb-b68131a5f0ec>2009-06-16 12:35:03 +0000
commit9a8fab9f29c7284c23b54e67bdb85a05de9b36eb (patch)
treedc9df2dfdb5ef4282a4127e6395fef9f0e7187f9 /src/map
parentfc9e4a729a2555c0af3abbc78e4f0f5bcc1d8d13 (diff)
downloadhercules-9a8fab9f29c7284c23b54e67bdb85a05de9b36eb.tar.gz
hercules-9a8fab9f29c7284c23b54e67bdb85a05de9b36eb.tar.bz2
hercules-9a8fab9f29c7284c23b54e67bdb85a05de9b36eb.tar.xz
hercules-9a8fab9f29c7284c23b54e67bdb85a05de9b36eb.zip
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
Diffstat (limited to 'src/map')
-rw-r--r--src/map/guild.c5
-rw-r--r--src/map/intif.c7
-rw-r--r--src/map/intif.h2
3 files changed, 8 insertions, 6 deletions
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);