summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/packets.h68
-rw-r--r--src/map/script.c31
-rw-r--r--src/map/status.c91
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);
}
}
}