diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/map/packets.h | 68 | ||||
-rw-r--r-- | src/map/script.c | 31 | ||||
-rw-r--r-- | src/map/status.c | 91 |
3 files changed, 123 insertions, 67 deletions
diff --git a/src/map/packets.h b/src/map/packets.h index ccf1c28ef..db332c033 100644 --- a/src/map/packets.h +++ b/src/map/packets.h @@ -2802,6 +2802,21 @@ packet(0x020d,-1); packet(0x0a00,269); #endif +/* Roulette System [Yommy/Hercules] */ +#if PACKETVER >= 20141016 + packet(0x0A19,2,clif->pRouletteOpen,0); // HEADER_CZ_REQ_OPEN_ROULETTE + packet(0x0A1A,23); // HEADER_ZC_ACK_OPEN_ROULETTE + packet(0x0A1B,2,clif->pRouletteInfo,0); // HEADER_CZ_REQ_ROULETTE_INFO + packet(0x0A1C,-1); // HEADER_ZC_ACK_ROULEITTE_INFO + packet(0x0A1D,2,clif->pRouletteClose,0); // HEADER_CZ_REQ_CLOSE_ROULETTE + packet(0x0A1E,3); // HEADER_ZC_ACK_CLOSE_ROULETTE + packet(0x0A1F,2,clif->pRouletteGenerate,0); // HEADER_CZ_REQ_GENERATE_ROULETTE + packet(0x0A20,21); // HEADER_ZC_ACK_GENERATE_ROULETTE + packet(0x0A21,3,clif->pRouletteRecvItem,2); // HEADER_CZ_RECV_ROULETTE_ITEM + packet(0x0A22,5); // HEADER_ZC_RECV_ROULETTE_ITEM +#endif + + // 2014-10-22bRagexe - YomRawr #if PACKETVER >= 20141022 packet(0x0369,7,clif->pActionRequest,2,6); @@ -2835,19 +2850,40 @@ packet(0x020d,-1); packet(0x0438,36,clif->pStoragePassword,0); #endif -/* Roulette System [Yommy/Hercules] */ -#if PACKETVER >= 20141016 - packet(0x0A19,2,clif->pRouletteOpen,0); // HEADER_CZ_REQ_OPEN_ROULETTE - packet(0x0A1A,23); // HEADER_ZC_ACK_OPEN_ROULETTE - packet(0x0A1B,2,clif->pRouletteInfo,0); // HEADER_CZ_REQ_ROULETTE_INFO - packet(0x0A1C,-1); // HEADER_ZC_ACK_ROULEITTE_INFO - packet(0x0A1D,2,clif->pRouletteClose,0); // HEADER_CZ_REQ_CLOSE_ROULETTE - packet(0x0A1E,3); // HEADER_ZC_ACK_CLOSE_ROULETTE - packet(0x0A1F,2,clif->pRouletteGenerate,0); // HEADER_CZ_REQ_GENERATE_ROULETTE - packet(0x0A20,21); // HEADER_ZC_ACK_GENERATE_ROULETTE - packet(0x0A21,3,clif->pRouletteRecvItem,2); // HEADER_CZ_RECV_ROULETTE_ITEM - packet(0x0A22,5); // HEADER_ZC_RECV_ROULETTE_ITEM -#endif +// 2015-05-13aRagexe +#if PACKETVER >= 20150513 + packet(0x0369,7,clif->pActionRequest,2,6); + packet(0x083C,10,clif->pUseSkillToId,2,4,6); + packet(0x0437,5,clif->pWalkToXY,2); + packet(0x035F,6,clif->pTickSend,2); + packet(0x0924,5,clif->pChangeDir,2,4); + packet(0x0958,6,clif->pTakeItem,2); + packet(0x0885,6,clif->pDropItem,2,4); + packet(0x0879,8,clif->pMoveToKafra,2,4); + packet(0x0864,8,clif->pMoveFromKafra,2,4); + packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); + packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); + packet(0x096A,6,clif->pGetCharNameRequest,2); + packet(0x0368,6,clif->pSolveCharName,2); + packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); + packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); + packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); + packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); + packet(0x0360,6,clif->pReqClickBuyingStore,2); + packet(0x022D,2,clif->pReqCloseBuyingStore,0); + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); + packet(0x0883,18,clif->pPartyBookingRegisterReq,2,4); + packet(0x02C4,8); // CZ_JOIN_BATTLE_FIELD + packet(0x0960,-1,clif->pItemListWindowSelected,2,4,8); + packet(0x0363,19,clif->pWantToConnection,2,6,10,14,18); + packet(0x094A,26,clif->pPartyInvite2,2); + packet(0x0927,4); // CZ_GANGSI_RANK + packet(0x08A8,26,clif->pFriendsListAdd,2); + packet(0x0817,5,clif->pHomMenu,2,4); + packet(0x0923,36,clif->pStoragePassword,0); + packet(0x09e8,11,clif->pDull); //CZ_OPEN_MAILBOX + packet(0x0a2e,6,clif->pDull); //TITLE +#endif /* PacketKeys: http://hercules.ws/board/topic/1105-hercules-wpe-free-june-14th-patch/ */ #if PACKETVER >= 20110817 @@ -3088,6 +3124,12 @@ packet(0x020d,-1); packetKeys(0x290551EA,0x2B952C75,0x2D67669B); /* YomRawr */ #endif +// 2015 Packet Keys + +#if PACKETVER >= 20150513 + packetKeys(0x62C86D09,0x75944F17,0x112C133D); /* Dastgir */ +#endif + #if defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3) packetKeys(OBFUSCATIONKEY1,OBFUSCATIONKEY2,OBFUSCATIONKEY3); #endif diff --git a/src/map/script.c b/src/map/script.c index ed4f9e918..99d6f9088 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -15476,8 +15476,18 @@ BUILDIN(compare) return true; } -// [zBuffer] List of mathematics commands ---> -BUILDIN(sqrt) +// List of mathematics commands ---> + +BUILDIN(log10) +{ + double i, a; + i = script_getnum(st,2); + a = log10(i); + script_pushint(st,(int)a); + return true; +} + +BUILDIN(sqrt) //[zBuffer] { double i, a; i = script_getnum(st,2); @@ -15486,7 +15496,7 @@ BUILDIN(sqrt) return true; } -BUILDIN(pow) +BUILDIN(pow) //[zBuffer] { double i, a, b; a = script_getnum(st,2); @@ -15496,7 +15506,7 @@ BUILDIN(pow) return true; } -BUILDIN(distance) +BUILDIN(distance) //[zBuffer] { int x0, y0, x1, y1; @@ -15509,7 +15519,7 @@ BUILDIN(distance) return true; } -// <--- [zBuffer] List of mathematics commands +// <--- List of mathematics commands BUILDIN(min) { @@ -20052,11 +20062,12 @@ void script_parse_builtin(void) { BUILDIN_DEF(getiteminfo,"ii"), //[Lupus] returns Items Buy / sell Price, etc info BUILDIN_DEF(setiteminfo,"iii"), //[Lupus] set Items Buy / sell Price, etc info BUILDIN_DEF(getequipcardid,"ii"), //[Lupus] returns CARD ID or other info from CARD slot N of equipped item - // [zBuffer] List of mathematics commands ---> - BUILDIN_DEF(sqrt,"i"), - BUILDIN_DEF(pow,"ii"), - BUILDIN_DEF(distance,"iiii"), - // <--- [zBuffer] List of mathematics commands + // List of mathematics commands ---> + BUILDIN_DEF(log10,"i"), + BUILDIN_DEF(sqrt,"i"), //[zBuffer] + BUILDIN_DEF(pow,"ii"), //[zBuffer] + BUILDIN_DEF(distance,"iiii"), //[zBuffer] + // <--- List of mathematics commands BUILDIN_DEF(min, "i*"), BUILDIN_DEF(max, "i*"), BUILDIN_DEF(md5,"s"), diff --git a/src/map/status.c b/src/map/status.c index 018647459..fa6d4ea8c 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -12099,10 +12099,10 @@ void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) }; if ((temp = libconfig->setting_get_member(jdb, "Inherit"))) { - int nidx = 0, iidx, w; + int nidx = 0; const char *iname; while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { - int iclass, ave, total = 0; + int i, iidx, iclass, avg_increment, base; if ((iclass = pc->check_job_name(iname)) == -1) { ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s'!\n", name, iname); continue; @@ -12110,62 +12110,63 @@ void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) iidx = pc->class2idx(iclass); status->max_weight_base[idx] = status->max_weight_base[iidx]; memcpy(&status->aspd_base[idx], &status->aspd_base[iidx], sizeof(status->aspd_base[iidx])); - for (w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++) { - status->HP_table[idx][w] = status->HP_table[iidx][w]; - total += status->HP_table[idx][w] - status->HP_table[idx][w - 1]; + + for (i = 1; i <= MAX_LEVEL && status->HP_table[iidx][i]; i++) { + status->HP_table[idx][i] = status->HP_table[iidx][i]; } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++) { - status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); + base = (i > 1 ? status->HP_table[idx][1] : 35); // Safe value if none are specified + avg_increment = (i > 2 ? (status->HP_table[idx][i] - base) / (i-1) : 5); // Safe value if none are specified + for ( ; i <= pc->max_level[idx][0]; i++) { + status->HP_table[idx][i] = min(base + avg_increment * i, battle_config.max_hp); } - total = 0; - for (w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++) { - status->SP_table[idx][w] = status->SP_table[iidx][w]; - total += status->SP_table[idx][w] - status->SP_table[idx][w - 1]; + + for (i = 1; i <= MAX_LEVEL && status->SP_table[iidx][i]; i++) { + status->SP_table[idx][i] = status->SP_table[iidx][i]; } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++) { - status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); + base = (i > 1 ? status->SP_table[idx][1] : 10); // Safe value if none are specified + avg_increment = (i > 2 ? (status->SP_table[idx][i] - base) / (i-1) : 1); // Safe value if none are specified + for ( ; i <= pc->max_level[idx][0]; i++) { + status->SP_table[idx][i] = min(base + avg_increment * i, battle_config.max_sp); } } } if ((temp = libconfig->setting_get_member(jdb, "InheritHP"))) { - int nidx = 0, iidx; + int nidx = 0; const char *iname; while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { - int iclass, w, ave, total = 0; + int i, iidx, iclass, avg_increment, base; if ((iclass = pc->check_job_name(iname)) == -1) { ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' HP!\n", name, iname); continue; } iidx = pc->class2idx(iclass); - for (w = 1; w <= MAX_LEVEL && status->HP_table[iidx][w]; w++) { - status->HP_table[idx][w] = status->HP_table[iidx][w]; - total += status->HP_table[idx][w] - status->HP_table[idx][w - 1]; + for (i = 1; i <= MAX_LEVEL && status->HP_table[iidx][i]; i++) { + status->HP_table[idx][i] = status->HP_table[iidx][i]; } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++ ) { - status->HP_table[idx][w] = min(ave * w, battle_config.max_hp); + base = (i > 1 ? status->HP_table[idx][1] : 35); // Safe value if none are specified + avg_increment = (i > 2 ? (status->HP_table[idx][i] - base) / (i-1) : 5); // Safe value if none are specified + for ( ; i <= pc->max_level[idx][0]; i++) { + status->HP_table[idx][i] = min(base + avg_increment * i, battle_config.max_hp); } } } if ((temp = libconfig->setting_get_member(jdb, "InheritSP"))) { - int nidx = 0, iidx, ave, total = 0; + int nidx = 0; const char *iname; while ((iname = libconfig->setting_get_string_elem(temp, nidx++))) { - int iclass, w; + int i, iidx, iclass, avg_increment, base; if ((iclass = pc->check_job_name(iname)) == -1) { ShowWarning("status_read_job_db: '%s' trying to inherit unknown '%s' SP!\n", name, iname); continue; } iidx = pc->class2idx(iclass); - for (w = 1; w <= MAX_LEVEL && status->SP_table[iidx][w]; w++) { - status->SP_table[idx][w] = status->SP_table[iidx][w]; - total += status->SP_table[idx][w] - status->SP_table[idx][w-1]; + for (i = 1; i <= MAX_LEVEL && status->SP_table[iidx][i]; i++) { + status->SP_table[idx][i] = status->SP_table[iidx][i]; } - ave = total / (w - 1); - for ( ; w <= pc->max_level[idx][0]; w++) { - status->SP_table[idx][w] = min(ave * w, battle_config.max_sp); + base = (i > 1 ? status->SP_table[idx][1] : 10); // Safe value if none are specified + avg_increment = (i > 2 ? (status->SP_table[idx][i] - base) / (i-1) : 1); // Safe value if none are specified + for ( ; i <= pc->max_level[idx][0]; i++) { + status->SP_table[idx][i] = min(avg_increment * i, battle_config.max_sp); } } } @@ -12192,28 +12193,30 @@ void status_read_job_db_sub(int idx, const char *name, config_setting_t *jdb) } if ((temp = libconfig->setting_get_member(jdb, "HPTable"))) { - int level = 0, ave, total = 0; + int level = 0, avg_increment, base; config_setting_t *hp = NULL; - while ((hp = libconfig->setting_get_elem(temp, level++))) { - status->HP_table[idx][level] = i32 = min(libconfig->setting_get_int(hp), battle_config.max_hp); - total += i32 - status->HP_table[idx][level - 1]; + while (level <= MAX_LEVEL && (hp = libconfig->setting_get_elem(temp, level))) { + i32 = libconfig->setting_get_int(hp); + status->HP_table[idx][++level] = min(i32, battle_config.max_hp); } - ave = total / (level - 1); - for ( ; level <= pc->max_level[idx][0]; level++ ) { /* limit only to possible maximum level of the given class */ - status->HP_table[idx][level] = min(ave * level, battle_config.max_hp); /* some are still empty? then let's use the average increase */ + base = (level > 0 ? status->HP_table[idx][1] : 35); // Safe value if none are specified + avg_increment = (level > 1 ? (status->HP_table[idx][level] - base) / level : 5); // Safe value if none are specified + for (++level; level <= pc->max_level[idx][0]; ++level) { /* limit only to possible maximum level of the given class */ + status->HP_table[idx][level] = min(base + avg_increment * level, battle_config.max_hp); /* some are still empty? then let's use the average increase */ } } if ((temp = libconfig->setting_get_member(jdb, "SPTable"))) { - int level = 0, ave, total = 0; + int level = 0, avg_increment, base; config_setting_t *sp = NULL; - while ((sp = libconfig->setting_get_elem(temp, level++))) { - status->SP_table[idx][level] = i32 = min(libconfig->setting_get_int(sp), battle_config.max_sp); - total += i32 - status->SP_table[idx][level - 1]; + while (level <= MAX_LEVEL && (sp = libconfig->setting_get_elem(temp, level))) { + i32 = libconfig->setting_get_int(sp); + status->SP_table[idx][++level] = min(i32, battle_config.max_sp); } - ave = total / (level - 1); + base = (level > 0 ? status->SP_table[idx][1] : 10); // Safe value if none are specified + avg_increment = (level > 1 ? (status->SP_table[idx][level] - base) / level : 1); for ( ; level <= pc->max_level[idx][0]; level++ ) { - status->SP_table[idx][level] = min(ave * level, battle_config.max_sp); + status->SP_table[idx][level] = min(base + avg_increment * level, battle_config.max_sp); } } } |