diff options
author | panikon <panikon@zoho.com> | 2014-05-06 21:14:46 -0300 |
---|---|---|
committer | panikon <panikon@zoho.com> | 2014-05-06 21:14:46 -0300 |
commit | 9a425c11b61fb6f4e299013c7d8d9841129b8f45 (patch) | |
tree | b8e8bc56c6e51679c23fe2de0e268f49b29f7288 /src/map/script.c | |
parent | 9cf6b362a0d5e2f52c017d747c0fa8f69a1a273f (diff) | |
download | hercules-9a425c11b61fb6f4e299013c7d8d9841129b8f45.tar.gz hercules-9a425c11b61fb6f4e299013c7d8d9841129b8f45.tar.bz2 hercules-9a425c11b61fb6f4e299013c7d8d9841129b8f45.tar.xz hercules-9a425c11b61fb6f4e299013c7d8d9841129b8f45.zip |
Bug fixes and other changes
#Fixed issue where a corrupted map cache would lead to a crash
*Moved Big-endian compatibility functions to common/utils.h
#Fixed issue 8162
*http://hercules.ws/board/tracker/issue-8162-loadnpc-doesnt-trigger-oninit-of-duplicate-npcs/
*Added options to npc_parse_duplicate
#Fixed issue 8169
*http://hercules.ws/board/tracker/issue-8169-script-command-guildskill-skill-idlevel-not-working-as-intended/
*Changed *guildskill behavior, now it behaves exactly as depicted in the documentation
*Updated *guildskill documentation
#Added missing GBI types to mapif_parse_GuildBasicInfoChange now it's possible to change guild exp, lv, skill point and skill information
#GeoIP revamp
*GeoIP module was partially rewritten
*Added several data checks to prevent corruption and crashes
*Updated GeoIP database
*See https://github.com/maxmind/geoip-api-c/blob/master/libGeoIP/GeoIP.c for more information
#Added packetver checks regarding NST_MARKET
*Now *tradertype warns if user is trying to use this feature with older clients
Diffstat (limited to 'src/map/script.c')
-rw-r--r-- | src/map/script.c | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/src/map/script.c b/src/map/script.c index 3e11a510e..c57b086f4 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -8268,20 +8268,36 @@ BUILDIN(addtoskill) { /// guildskill <skill id>,<amount>; /// guildskill "<skill name>",<amount>; BUILDIN(guildskill) { - int id; + int skill_id, id, max_points; int level; + TBL_PC* sd; - int i; + struct guild *gd; + struct guild_skill gd_skill; sd = script->rid2sd(st); if( sd == NULL ) - return true;// no player attached, report source + return false; // no player attached, report source - id = ( script_isstringtype(st,2) ? skill->name2id(script_getstr(st,2)) : script_getnum(st,2) ); + if( (gd = sd->guild) == NULL ) + return true; + + skill_id = ( script_isstringtype(st,2) ? skill->name2id(script_getstr(st,2)) : script_getnum(st,2) ); level = script_getnum(st,3); - for( i=0; i < level; i++ ) - guild->skillup(sd, id); + id = skill_id - GD_SKILLBASE; + max_points = guild->skill_get_max(skill_id); + + if( (gd->skill[id].lv + level) > max_points ) + level = max_points - gd->skill[id].lv; + + if( level == 0 ) + return true; + + memcpy(&gd_skill, &(gd->skill[id]), sizeof(gd->skill[id])); + gd_skill.lv += level; + + intif->guild_change_basicinfo( gd->guild_id, GBI_SKILLLV, &(gd_skill), sizeof(gd_skill) ); return true; } @@ -18538,6 +18554,13 @@ BUILDIN(tradertype) { npc->market_delfromsql(nd,USHRT_MAX); } +#if PACKETVER < 20131223 + if( type == NST_MARKET ) { + ShowWarning("buildin_tradertype: NST_MARKET is only available with PACKETVER 20131223 or newer!\n"); + script->reportsrc(st); + } +#endif + nd->u.scr.shop->type = type; return true; |