From b21e4ad15f1a81154553662ecf330d6a6694dd15 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 18:07:19 +0530 Subject: Added Packets for Several Clients: 2015-10-01, 2015-10-29, 2015-11-04 and 2015-12-16 Added New Char Creation Packet(0xa39). Added Placeholder of JOB_SUMMONER --- src/char/char.c | 55 +++++++++++++------- src/char/char.h | 2 +- src/common/mmo.h | 2 + src/map/packets.h | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 189 insertions(+), 20 deletions(-) diff --git a/src/char/char.c b/src/char/char.c index 945111640..4beeff00a 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -1544,7 +1544,7 @@ int char_check_char_name(char * name, char * esc_name) * -5: 'Symbols in Character Names are forbidden' * char_id: Success **/ -int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style) +int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style, short starting_job) { char name[NAME_LENGTH]; char esc_name[NAME_LENGTH*2+1]; @@ -1560,6 +1560,14 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int if( flag < 0 ) return flag; + switch(starting_job) { + case JOB_SUMMONER: + case JOB_NOVICE: + break; + default: + return -2; // Char Creation Denied + } + //check other inputs #if PACKETVER >= 20120307 if(slot < 0 || slot >= sd->char_slots) @@ -1580,11 +1588,11 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int return -2; /* character account limit exceeded */ #if PACKETVER >= 20120307 - //Insert the new char entry to the database - if( SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`account_id`, `char_num`, `name`, `zeny`, `status_point`,`str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`," + // Insert the new char entry to the database + if (SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`account_id`, `char_num`, `name`, `class`, `zeny`, `status_point`,`str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`," "`max_sp`, `sp`, `hair`, `hair_color`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`) VALUES (" "'%d', '%d', '%s', '%d', '%d','%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d', '%s', '%d', '%d', '%s', '%d', '%d')", - char_db, sd->account_id , slot, esc_name, start_zeny, 48, str, agi, vit, int_, dex, luk, + char_db, sd->account_id , slot, esc_name, starting_job, start_zeny, 48, str, agi, vit, int_, dex, luk, (40 * (100 + vit)/100) , (40 * (100 + vit)/100 ), (11 * (100 + int_)/100), (11 * (100 + int_)/100), hair_style, hair_color, mapindex_id2name(start_point.map), start_point.x, start_point.y, mapindex_id2name(start_point.map), start_point.x, start_point.y) ) { @@ -1593,10 +1601,10 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int } #else //Insert the new char entry to the database - if( SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`account_id`, `char_num`, `name`, `zeny`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`," + if( SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`account_id`, `char_num`, `name`, `class`, `zeny`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`," "`max_sp`, `sp`, `hair`, `hair_color`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`) VALUES (" "'%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d', '%s', '%d', '%d', '%s', '%d', '%d')", - char_db, sd->account_id , slot, esc_name, start_zeny, str, agi, vit, int_, dex, luk, + char_db, sd->account_id , slot, esc_name, starting_job, start_zeny, str, agi, vit, int_, dex, luk, (40 * (100 + vit)/100) , (40 * (100 + vit)/100 ), (11 * (100 + int_)/100), (11 * (100 + int_)/100), hair_style, hair_color, mapindex_id2name(start_point.map), start_point.x, start_point.y, mapindex_id2name(start_point.map), start_point.x, start_point.y) ) { @@ -1613,9 +1621,9 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int // Validation success, log result if (chr->enable_logs) { if (SQL_ERROR == SQL->Query(inter->sql_handle, - "INSERT INTO `%s` (`time`, `char_msg`,`account_id`,`char_id`,`char_num`,`name`,`str`,`agi`,`vit`,`int`,`dex`,`luk`,`hair`,`hair_color`)" + "INSERT INTO `%s` (`time`, `char_msg`, `account_id`, `char_id`, `char_num`, `class`, `name`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `hair`, `hair_color`)" "VALUES (NOW(), '%s', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')", - charlog_db, "make new char", sd->account_id, char_id, slot, esc_name, str, agi, vit, int_, dex, luk, hair_style, hair_color)) + charlog_db, "make new char", sd->account_id, char_id, slot, starting_job, esc_name, str, agi, vit, int_, dex, luk, hair_style, hair_color)) Sql_ShowDebug(inter->sql_handle); } @@ -4625,10 +4633,12 @@ void char_parse_char_create_new_char(int fd, struct char_session_data* sd) //turn character creation on/off [Kevin] result = -2; } else { - #if PACKETVER >= 20120307 - result = chr->make_new_char_sql(sd, RFIFOP(fd,2), 1, 1, 1, 1, 1, 1, RFIFOB(fd,26),RFIFOW(fd,27),RFIFOW(fd,29)); + #if PACKETVER >= 20151001 + result = chr->make_new_char_sql(sd, RFIFOP(fd,2), 1, 1, 1, 1, 1, 1, RFIFOB(fd,26), RFIFOW(fd,27), RFIFOW(fd,29), RFIFOW(fd, 31)); + #elif PACKETVER >= 20120307 + result = chr->make_new_char_sql(sd, RFIFOP(fd,2), 1, 1, 1, 1, 1, 1, RFIFOB(fd,26), RFIFOW(fd,27), RFIFOW(fd,29), JOB_NOVICE); #else - result = chr->make_new_char_sql(sd, RFIFOP(fd,2),RFIFOB(fd,26),RFIFOB(fd,27),RFIFOB(fd,28),RFIFOB(fd,29),RFIFOB(fd,30),RFIFOB(fd,31),RFIFOB(fd,32),RFIFOW(fd,33),RFIFOW(fd,35)); + result = chr->make_new_char_sql(sd, RFIFOP(fd,2), RFIFOB(fd,26), RFIFOB(fd,27), RFIFOB(fd,28), RFIFOB(fd,29), RFIFOB(fd,30), RFIFOB(fd,31), RFIFOB(fd,32), RFIFOW(fd,33), RFIFOW(fd,35), JOB_NOVICE); #endif } @@ -4644,11 +4654,13 @@ void char_parse_char_create_new_char(int fd, struct char_session_data* sd) // add new entry to the chars list sd->found_char[char_dat.slot] = result; // the char_id of the new char } - #if PACKETVER >= 20120307 - RFIFOSKIP(fd,31); - #else - RFIFOSKIP(fd,37); - #endif +#if PACKETVER >= 20151001 + RFIFOSKIP(fd, 36); +#if PACKETVER >= 20120307 + RFIFOSKIP(fd, 31); +#else + RFIFOSKIP(fd, 37); +#endif } // flag: @@ -5026,17 +5038,22 @@ int char_parse_char(int fd) break; // create new char - #if PACKETVER >= 20120307 +#if PACKETVER >= 20151001 + // S 0a39 .24B .B .W .W .W .(W or 2 B's)??? .B + case 0xa39: + { + FIFOSD_CHECK(36); +#elif PACKETVER >= 20120307 // S 0970 .24B .B .W .W case 0x970: { FIFOSD_CHECK(31); - #else +#else // S 0067 .24B .B .B .B .B .B .B .B .W .W case 0x67: { FIFOSD_CHECK(37); - #endif +#endif chr->parse_char_create_new_char(fd, sd); } diff --git a/src/char/char.h b/src/char/char.h index 4dbdfd9db..d7bc96e13 100644 --- a/src/char/char.h +++ b/src/char/char.h @@ -147,7 +147,7 @@ struct char_interface { bool (*char_slotchange) (struct char_session_data *sd, int fd, unsigned short from, unsigned short to); int (*rename_char_sql) (struct char_session_data *sd, int char_id); int (*check_char_name) (char * name, char * esc_name); - int (*make_new_char_sql) (struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style); + int (*make_new_char_sql) (struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style, short starting_job); int (*divorce_char_sql) (int partner_id1, int partner_id2); int (*count_users) (void); int (*mmo_char_tobuf) (uint8* buffer, struct mmo_charstatus* p); diff --git a/src/common/mmo.h b/src/common/mmo.h index 77f706f0d..4dd19d422 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -993,6 +993,8 @@ enum { JOB_OBORO, JOB_REBELLION = 4215, + JOB_SUMMONER = 4218, + #ifndef JOB_MAX JOB_MAX, #endif diff --git a/src/map/packets.h b/src/map/packets.h index 8b0a733c7..3dc23cb24 100644 --- a/src/map/packets.h +++ b/src/map/packets.h @@ -2930,6 +2930,140 @@ packet(0x96e,-1,clif->ackmergeitems); packet(0x0980,7,clif->pSelectCart); // CZ_SELECTCART #endif +// 2015-10-01bRagexeRE +#if PACKETVER >= 20151001 + 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(0x0202,5,clif->pChangeDir,2,4); + packet(0x07E4,6,clif->pTakeItem,2); + packet(0x0362,6,clif->pDropItem,2,4); + packet(0x07EC,8,clif->pMoveToKafra,2,4); + packet(0x0364,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(0x0817,2,clif->pReqCloseBuyingStore,0); + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); +// packet(0x0363,8); // CZ_JOIN_BATTLE_FIELD + packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); + packet(0x022D,19,clif->pWantToConnection,2,6,10,14,18); + packet(0x0802,26,clif->pPartyInvite2,2); +// packet(0x0436,4); // CZ_GANGSI_RANK + packet(0x023B,26,clif->pFriendsListAdd,2); + packet(0x0361,5,clif->pHomMenu,2,4); + packet(0x0860,36,clif->pStoragePassword,0); +#endif + +// 2015-10-29aRagexe +#if PACKETVER >= 20151029 + 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(0x0202,5,clif->pChangeDir,2,4); + packet(0x07E4,6,clif->pTakeItem,2); + packet(0x0362,6,clif->pDropItem,2,4); + packet(0x07EC,8,clif->pMoveToKafra,2,4); + packet(0x0364,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(0x0817,2,clif->pReqCloseBuyingStore,0); + packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); + packet(0x0363,8); // CZ_JOIN_BATTLE_FIELD + packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); + packet(0x022D,19,clif->pWantToConnection,2,6,10,14,18); + packet(0x0802,26,clif->pPartyInvite2,2); + packet(0x0436,4); // CZ_GANGSI_RANK + packet(0x023B,26,clif->pFriendsListAdd,2); + packet(0x0361,5,clif->pHomMenu,2,4); + packet(0x0860,36,clif->pStoragePassword,0); + packet(0x0a39,36); +#endif + +// 2015-11-04aRagexe +#if PACKETVER >= 20151104 + packet(0x0369,7,clif->pActionRequest,2,6); + packet(0x083C,10,clif->pUseSkillToId,2,4,6); + packet(0x0363,5,clif->pWalkToXY,2); + packet(0x0886,6,clif->pTickSend,2); + packet(0x0928,5,clif->pChangeDir,2,4); + packet(0x0964,6,clif->pTakeItem,2); + packet(0x0437,6,clif->pDropItem,2,4); + packet(0x088B,8,clif->pMoveToKafra,2,4); + packet(0x0364,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(0x0887,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(0x0815,-1,clif->pReqTradeBuyingStore,2,4,8,12); + packet(0x0436,6,clif->pReqClickBuyingStore,2); + packet(0x0817,2,clif->pReqCloseBuyingStore,0); + packet(0x023B,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); + packet(0x0811,18,clif->pPartyBookingRegisterReq,2,4,6); + packet(0x0939,8); // CZ_JOIN_BATTLE_FIELD + packet(0x093A,-1,clif->pItemListWindowSelected,2,4,8,12); + packet(0x0360,19,clif->pWantToConnection,2,6,10,14,18); + packet(0x08A5,26,clif->pPartyInvite2,2); + packet(0x08A3,4); // CZ_GANGSI_RANK CZ_GANGSI_RANK + packet(0x07EC,26,clif->pFriendsListAdd,2); + packet(0x088D,5,clif->pHomMenu,2,4); + packet(0x0940,36,clif->pStoragePassword,2,4,20); + packet(0x0a39,36); +#endif + +// 2015-12-16aRagexe +#if PACKETVER >= 20151216 + packet(0x089D,7,clif->pActionRequest,2,6); + packet(0x0968,10,clif->pUseSkillToId,2,4,6); + packet(0x08A2,5,clif->pWalkToXY,2); + packet(0x085B,6,clif->pTickSend,2); + packet(0x022D,5,clif->pChangeDir,2,4); + packet(0x08A9,6,clif->pTakeItem,2); + packet(0x0966,6,clif->pDropItem,2,4); + packet(0x08AC,8,clif->pMoveToKafra,2,4); + packet(0x0864,8,clif->pMoveFromKafra,2,4); + packet(0x0865,10,clif->pUseSkillToPos,2,4,6,8); + packet(0x0874,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); + packet(0x088B,6,clif->pGetCharNameRequest,2); + packet(0x089E,6,clif->pSolveCharName,2); + packet(0x0436,12,clif->pSearchStoreInfoListItemClick,2,6,10); + packet(0x0960,2,clif->pSearchStoreInfoNextPage,0); + packet(0x0944,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); + packet(0x0954,-1,clif->pReqTradeBuyingStore,2,4,8,12); + packet(0x0361,6,clif->pReqClickBuyingStore,2); + packet(0x083C,2,clif->pReqCloseBuyingStore,0); + packet(0x0870,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); + packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); + packet(0x086A,8); // CZ_JOIN_BATTLE_FIELD + packet(0x0949,-1,clif->pItemListWindowSelected,2,4,8); + packet(0x0947,19,clif->pWantToConnection,2,6,10,14,18); + packet(0x086E,26,clif->pPartyInvite2,2); + packet(0x0364,4); // CZ_GANGSI_RANK + packet(0x091D,26,clif->pFriendsListAdd,2); + packet(0x0362,5,clif->pHomMenu,2,4); + packet(0x0885,36,clif->pStoragePassword,0); +#endif + /* PacketKeys: http://herc.ws/board/topic/1105-hercules-wpe-free-june-14th-patch/ */ #if PACKETVER >= 20110817 packetKeys(0x053D5CED,0x3DED6DED,0x6DED6DED); /* Thanks to Shakto */ @@ -3175,6 +3309,22 @@ packet(0x96e,-1,clif->ackmergeitems); packetKeys(0x62C86D09,0x75944F17,0x112C133D); /* Dastgir */ #endif +#if PACKETVER >= 20151001 + packetKeys(0x5CFF4561,0x32514AD1,0x06D126D1); /* Dastgir */ +#endif + +#if PACKETVER >= 20151029 + packetKeys(0x45B945B9,0x45B945B9,0x45B945B9); /* Dastgir */ +#endif + +#if PACKETVER >= 20151104 + packetKeys(0x4C17382A,0x7ED174C9,0x29961E4F); /* ossi0110 */ +#endif + +#if PACKETVER >= 20151216 + packetKeys(0x25DD643D,0x61AC39DE,0x77A8206D); /* Dastgir */ +#endif + #if defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3) packetKeys(OBFUSCATIONKEY1,OBFUSCATIONKEY2,OBFUSCATIONKEY3); #endif -- cgit v1.2.3-70-g09d2 From abb834567db53424ea84ea4903d18ac9d3b3f61a Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 19:13:21 +0530 Subject: Added Summoner Class. (Only Placeholder, other things related to summoner will follow-up soon) Added SQL-Upgrade: Added `class` column in charlog --- conf/map/help.txt | 2 +- conf/messages.conf | 3 +- db/constants.conf | 3 ++ db/job_db2.txt | 2 ++ db/pre-re/exp.txt | 4 +-- db/pre-re/job_db.conf | 48 ++++++++++++++++++++++++++++++++ db/re/exp.txt | 4 +-- db/re/job_db.conf | 48 ++++++++++++++++++++++++++++++++ doc/item_db.txt | 4 ++- sql-files/main.sql | 4 ++- sql-files/upgrades/2016-10-03--20-27.sql | 23 +++++++++++++++ sql-files/upgrades/index.txt | 1 + src/char/char.c | 8 +++--- src/char/inter.c | 3 ++ src/map/itemdb.c | 5 ++++ src/map/map.h | 1 + src/map/pc.c | 11 ++++++-- 17 files changed, 160 insertions(+), 14 deletions(-) create mode 100644 sql-files/upgrades/2016-10-03--20-27.sql diff --git a/conf/map/help.txt b/conf/map/help.txt index a65c7de70..846c16276 100644 --- a/conf/map/help.txt +++ b/conf/map/help.txt @@ -102,7 +102,7 @@ jobchange: "Params: \n" "Changes your job.\n" " 23 Super Novice 24 Gunslinger 25 Ninja 4045 Super Baby\n" "4046 Taekwon 4047 Star Gladiator 4049 Soul Linker 4050 Gangsi\n" "4051 Death Knight 4052 Dark Collector 4190 Ex. Super Novice 4191 Ex. Super Baby\n" - "4211 Kagerou 4212 Oboro 4215 Rebellion\n" + "4211 Kagerou 4212 Oboro 4215 Rebellion 4218 Summoner\n" "----- Baby Novice And Baby 1st Class -----\n" "4023 Baby Novice 4024 Baby Swordman 4025 Baby Magician 4026 Baby Archer\n" "4027 Baby Acolyte 4028 Baby Merchant 4029 Baby Thief\n" diff --git a/conf/messages.conf b/conf/messages.conf index b9386b88e..a97a755f7 100644 --- a/conf/messages.conf +++ b/conf/messages.conf @@ -608,8 +608,9 @@ 666: Sura T 667: Genetic T 668: Shadow Chaser T +669: Summoner -//669-855 FREE (please start using from the top if you need, leave the 669+ range for new jobs) +//670-855 FREE (please start using from the top if you need, leave the 670+ range for new jobs) // MvP Tomb 856: Tomb diff --git a/db/constants.conf b/db/constants.conf index c22435a36..b271a14e0 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -225,6 +225,8 @@ constants_db: { Job_Oboro: 4212 Job_Rebellion: 4215 + Job_Summoner: 4218 + comment__: "Job masks / Job map_ids" EAJL_2_1: 0x0100 EAJL_2_2: 0x0200 @@ -248,6 +250,7 @@ constants_db: { EAJ_GUNSLINGER: 0x0009 EAJ_NINJA: 0x000A EAJ_GANGSI: 0x000D + EAJ_SUMMONER: 0x000E EAJ_SUPER_NOVICE: 0x0100 EAJ_KNIGHT: 0x0101 diff --git a/db/job_db2.txt b/db/job_db2.txt index c2cc06064..37bb7cca1 100644 --- a/db/job_db2.txt +++ b/db/job_db2.txt @@ -289,3 +289,5 @@ 4212,5,0,4,0,2,3,0,1,6,0,5,1,2,0,4,6,3,0,1,5,2,0,6,3,4,0,5,0,2,0,1,4,0,5,4,0,3,5,1,0,2,4,1,0,5,6,2,1,0,5 // Rebellion 4215,0,5,0,4,0,3,5,4,2,6,0,0,3,4,0,2,5,4,3,6,0,0,3,5,1,4,2,0,0,6,3,0,5,4,1,0,0,5,0,2,6,0,5,3,4,0,0,0,0,1 +// Summoner +4218,5,0,3,0,5,3,0,2,4,0,2,4,5,0,2,4,5,0,2,4,5,0,6,3,5,0,2,0,6,0,4,5,0,6,0,4,6,0,2,0,5,4,3,0,5,6,3,2,0,5 \ No newline at end of file diff --git a/db/pre-re/exp.txt b/db/pre-re/exp.txt index 840a216eb..0d4c44d51 100644 --- a/db/pre-re/exp.txt +++ b/db/pre-re/exp.txt @@ -7,7 +7,7 @@ //================================ //Base - Normal and Baby Jobs -99,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:23:24:25:4023:4024:4025:4026:4027:4028:4029:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4045:4046:4047:4048:4049:4050:4051:4052,0,9,16,25,36,77,112,153,200,253,320,385,490,585,700,830,970,1120,1260,1420,1620,1860,1990,2240,2504,2950,3426,3934,4474,6889,7995,9174,10425,11748,13967,15775,17678,19677,21773,30543,34212,38065,42102,46323,53026,58419,64041,69892,75973,102468,115254,128692,142784,157528,178184,196300,215198,234879,255341,330188,365914,403224,442116,482590,536948,585191,635278,687211,740988,925400,1473746,1594058,1718928,1848355,1982340,2230113,2386162,2547417,2713878,3206160,3681024,4022472,4377024,4744680,5125440,5767272,6204000,6655464,7121664,7602600,9738720,11649960,13643520,18339300,23836800,35658000,48687000,58135000,99999998,100300002,100600902,100902708,101205414,101509034,101813561,102119002,102425359,102732638,103040840,103349964,103660020,103970998,104282915,104595762,104909549,105224282,105539955,105856574,106174147,106492668,106812152,107132590,107453992,107776356,108099683,108423981,108749258,109075506,109402732,109730946,110060139,110390318,110721493,111053662,111386827,111720986,112056149,112392322,112729499,113067686,113406893,113747119,114088363,114430627,114773918,115118244,115463597,115809993,116157424,116505898,116855416,117205984,117557604,117910275,118264005,118618802,118974658,119331582,119689581,120048655,120408804,120770028,121132344,121495743,121860233,122225815,122592496,122960276,123329155,123699142,124070244,124442453,124815785,125190233,125565805,125942508,126320342,126699307,127079404,127460648,127843032,128226563,128611242,128997076,129384065,129772218,130161535,130552023,130943682,131336513,131730524,132125722,132522099,132919665,133318425,133718382,134119541,134521905,134925472,135330251,135736249,136143467,136551905,136961562,137372455,137784568,138197932,138612532,139028368,139445456,139863795,140283386,140704245,141126355,141549734,141974380,142400310,142827507,143255989,143685754,144116820,144549169,144982818,145417767,145854016,146291581,146730461,147170658,147612171,148055015,148499176,148944668,149391509,149839681,150289202,150740070,151192287,151645868,152100812,152557121,153014794,153473847,153934264,154396078,154859271,155323845,155789814,156257180,156725958,157196133,157667719,158140718,158615145,159091000,159568284,160046996,160527136,161008720,161491749,161976222,162462156,162949549,163438404,163928718,164420509,164913776,165408520,165904741,166402453,166901658,167402372,167904578,168408293,168913516,169420264,169928520,170438301,170949622,171462468,171976854,172492782,173010265,173529306,174049903,174572057,175095783,175621067,176147938,176676383,177206416,177738038,178271249,178806065,179342485,179880511,180420157,180961424,181504312,182048836,182594982,183142764,183692200,184243272,184795997,185350391,185906439,186464155,187023556,187584626,188147381,188711822,189277963,189845805,190415349,190986594,191559555,192134234,192710646,193288775,193868638,194450249,195033610,195618720,196205580,196794204,197384594,197976749,198570686,199166404,199763903,200363199,200964293,201567185,202171889,202778407,203386739,203996900,204608890,205222726,205838392,206455919,207075292,207696526,208319621,208944579,209571414,210200126,210830732,211463232,212097626,212733929,213372142,214012264,214654297,215298271,215944171,216592013,217241796,217893521,218547205,219202846,219860461,220520050,221181612,221845165,222510708,223178240,223847779,224519324,225192890,225868479,226546090,227225739,227907425,228591151,229276930,229964763,230654667,231346640,232040684,232736814,233435031,234135333,234837738,235542262,236248887,236957631,237668509,238381522,239096669,239813967,240533414,241255013,241978778,242704725,243432839,244163135,244895630,245630324,246367216,247106322,247847644,248591196,249336978,250084992,250835252,251587759,252342528,253099560,253858855,254620429,255384298,256150462,256918920,257689674,258462754,259238145,260015863,260795909,261578297,262363044,263150134,263939583,264731408,265525607,266322182,267121148,267922521,268726301,269532488,270341083,271152116,271965590,272781502,273599854,274420645,275243907,276069641,276897846,277728555,278561735,279397419,280235606,281076328,281919554,282765316,283613613,284464446,285317847,286173815,287032351,287893455,288757126,289623397,290492268,291363738,292237841,293114575,293993909,294875907,295760537,296647831,297537789,298430411,299325697,300223679,301124357,302027731,302933833,303842631,304754158,305668412,306585427,307505202,308427738,309353033,310281089,311211937,312145578,313082011,314021268,314963350,315908256,316855987,317806574,318759986,319716286,320675443,321637489,322602423,323570246,324540957,325514589,326491142,327470616,328453042,329438422,330426754,331418039,332412309,333409563,334409803,335413028,336419270,337428528,338440836,339456161,340474535,341495958,342520463,343548016,344578683,345612431,346649260,347689203,348732290,349778492,350827838,351880330,352935968,353994783,355056775,356121945,357190325,358261914,359336713,360414721,361495971,362580463,363668196,364759204,365853485,366951040,368051900,369156067,370263539,371374350,372488466,373605953,374726777,375850972,376978536,378109471,379243808,380381547,381522688,382667264,383815273,384966717,386121628,387280004,388441848,389607189,390776029,391948368,393124205,394303572,395486503,396672963,397862987,399056573,400253754,401454529,402658900,403866897,405078521,406293772,407512649,408735186,409961414,411191300,412424878,413662147,414903139,416147854,417396292,418648485,419904434,421164170,422427661,423694939,424966037,426240955,427519691,428802248,430088655,431378914,432673057,433971084,435272994,436578820,437888561,439202250,440519855,441841408,443166941,444496454,445829946,447167451,448508967,449854496,451204068,452557685,453915378,455277147,456642993,458012946,459387008,460765178,462147489,463533940,464924563,466319359,467718327,469121500,470528878,471940460,473356279,474776366,476200691,477629316,479062209,480499404,481940900,483386728,484836890,486291416,487750308,489213565,490681218,492153269,493629750,495110659,496595998,498085798,499580059,501078814,502582062,504089804,505602071,507118896,508640279,510166219,511696717,513231804,514771514,516315845,517864798,519418405,520976666,522539612,524107245,525679564,527256601,528838388,530424926,532016213,533612283,535213136,536818770,538429251,540044547,541664688,543289709,544919608,546554386,548194042,549838641,551488183,553142668,554802095,556466529,558135971,559810419,561489875,563174337,564863870,566558475,568258151,569962962,571672844,573387862,575108015,576833368,578563856,580299543,582040430,583786581,585537931,587294546,589056423,590823629,592596099,594373896,596157022,597945475,599739320,601538558,603343188,605153210,606968688,608789622,610616013,612447860,614285228,616128116,617976525,619830454,621689968,623555066,625425750,627302018,629183935,631071501,632964715,634863643,636768220,638678509,640594576,642516357,644443914,646377249,648316425,650261378,652212173,654168810,656131352,658099735,660074024,662054283,664040448,666032583,668030687,670034761,672044870,674061012,676083189,678111463,680145836,682186307,684232877,686285609,688344503,690409559,692480779,694558224,696641897,698731860,700828050,702930530,705039366,707154492,709275974,711403810,713538066,715678677,717825706,719979220,722139152,724305568,726478467,728657914,730843909,733036451,735235604,737441306,739653619,741872608,744098273,746330614,748569631,750815324,753067757,755326995,757592972,759865754,762145341,764431796,766725119,769025311,771332371,773646365,775967291,778295214,780630134,782972050,785320964,787676939,790039975,792410136,794787358,797171706,799563243,801961970,804367886,806780992,809201351,811628965,814063896,816506080,818955647,821412532,823876798,826348447,828827478,831313955,833807943,836309377,838818321,841334776,843858806,846390410,848929588,851476406,854030863,856592958,859162756,861740258,864325526,866918498,869519301,872127872,874744273,877368507,880000635,882640660,885288580,887944460,890608299,893280163,895960051,898647962,901343898,904047922,906760098,909480427,912208908,914945541,917690391,920443458,923204805,925974433,928752406,931538660,934333323,937136331,939947748,942767639,945595938,948432775,951278086,954131934,956994319,959865306,962744895,965633150,968530071,971435658,974349975,977273022,980204863,983145499,986094929,989053217,992020428,994996498,997981490,1000975469,1003978435,1006990388,1010011392,1013041447,1016080617,1019128903,1022186304,1025252884,1028328644,1031413647,1034507894,1037611449,1040724312,1043846482,1046978025,1050119004,1053269354,1056429206,1059598493,1062777281,1065965634,1069163551,1072371032,1075588143,1078814882,1082051315,1085297504,1088553451,1091819155,1095094616,1098379962,1101675066,1104980056,1108295059,1111619948,1114954851,1118299768,1121654698,1125019643,1128394730,1131779959,1135175331,1138580845,1141996630,1145422685,1148859012,1152305609,1155762605,1159229871,1162707537,1166195731,1169694323,1173203443,1176723090,1180253265,1183794096,1187345454,1190907469,1194480267,1198063721,1201657960,1205262983,1208878790,1212505509,1216143013,1219791430,1223450888,1227121258,1230802669,1234495121,1238198615,1241913277,1245638981,1249375983,1253124154,1256883494,1260654132,1264436068,1268229430,1272034090,1275850176,1279677817,1283516884,1287367505,1291229681,1295103412,1298988697,1302885665,1306794316,1310714778,1314646923,1318590880,1322546648,1326514355,1330493874,1334485333,1338488860,1342504326,1346531861,1350571463,1354623262,1358687130,1362763193,1366851453,1370952039,1375064948,1379190183,1383327743,1387477756,1391640222,1395815141,1400002642,1404202725,1408415389,1412640635,1416878591,1421129257,1425392633,1429668847,1433957900,1438259791,1442574649,1446902346,1451243137,1455596895,1459963749,1464343697,1468736741,1473143009,1477562500,1481995214,1486441280 +99,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:23:24:25:4023:4024:4025:4026:4027:4028:4029:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4045:4046:4047:4048:4049:4050:4051:4052:4218,0,9,16,25,36,77,112,153,200,253,320,385,490,585,700,830,970,1120,1260,1420,1620,1860,1990,2240,2504,2950,3426,3934,4474,6889,7995,9174,10425,11748,13967,15775,17678,19677,21773,30543,34212,38065,42102,46323,53026,58419,64041,69892,75973,102468,115254,128692,142784,157528,178184,196300,215198,234879,255341,330188,365914,403224,442116,482590,536948,585191,635278,687211,740988,925400,1473746,1594058,1718928,1848355,1982340,2230113,2386162,2547417,2713878,3206160,3681024,4022472,4377024,4744680,5125440,5767272,6204000,6655464,7121664,7602600,9738720,11649960,13643520,18339300,23836800,35658000,48687000,58135000,99999998,100300002,100600902,100902708,101205414,101509034,101813561,102119002,102425359,102732638,103040840,103349964,103660020,103970998,104282915,104595762,104909549,105224282,105539955,105856574,106174147,106492668,106812152,107132590,107453992,107776356,108099683,108423981,108749258,109075506,109402732,109730946,110060139,110390318,110721493,111053662,111386827,111720986,112056149,112392322,112729499,113067686,113406893,113747119,114088363,114430627,114773918,115118244,115463597,115809993,116157424,116505898,116855416,117205984,117557604,117910275,118264005,118618802,118974658,119331582,119689581,120048655,120408804,120770028,121132344,121495743,121860233,122225815,122592496,122960276,123329155,123699142,124070244,124442453,124815785,125190233,125565805,125942508,126320342,126699307,127079404,127460648,127843032,128226563,128611242,128997076,129384065,129772218,130161535,130552023,130943682,131336513,131730524,132125722,132522099,132919665,133318425,133718382,134119541,134521905,134925472,135330251,135736249,136143467,136551905,136961562,137372455,137784568,138197932,138612532,139028368,139445456,139863795,140283386,140704245,141126355,141549734,141974380,142400310,142827507,143255989,143685754,144116820,144549169,144982818,145417767,145854016,146291581,146730461,147170658,147612171,148055015,148499176,148944668,149391509,149839681,150289202,150740070,151192287,151645868,152100812,152557121,153014794,153473847,153934264,154396078,154859271,155323845,155789814,156257180,156725958,157196133,157667719,158140718,158615145,159091000,159568284,160046996,160527136,161008720,161491749,161976222,162462156,162949549,163438404,163928718,164420509,164913776,165408520,165904741,166402453,166901658,167402372,167904578,168408293,168913516,169420264,169928520,170438301,170949622,171462468,171976854,172492782,173010265,173529306,174049903,174572057,175095783,175621067,176147938,176676383,177206416,177738038,178271249,178806065,179342485,179880511,180420157,180961424,181504312,182048836,182594982,183142764,183692200,184243272,184795997,185350391,185906439,186464155,187023556,187584626,188147381,188711822,189277963,189845805,190415349,190986594,191559555,192134234,192710646,193288775,193868638,194450249,195033610,195618720,196205580,196794204,197384594,197976749,198570686,199166404,199763903,200363199,200964293,201567185,202171889,202778407,203386739,203996900,204608890,205222726,205838392,206455919,207075292,207696526,208319621,208944579,209571414,210200126,210830732,211463232,212097626,212733929,213372142,214012264,214654297,215298271,215944171,216592013,217241796,217893521,218547205,219202846,219860461,220520050,221181612,221845165,222510708,223178240,223847779,224519324,225192890,225868479,226546090,227225739,227907425,228591151,229276930,229964763,230654667,231346640,232040684,232736814,233435031,234135333,234837738,235542262,236248887,236957631,237668509,238381522,239096669,239813967,240533414,241255013,241978778,242704725,243432839,244163135,244895630,245630324,246367216,247106322,247847644,248591196,249336978,250084992,250835252,251587759,252342528,253099560,253858855,254620429,255384298,256150462,256918920,257689674,258462754,259238145,260015863,260795909,261578297,262363044,263150134,263939583,264731408,265525607,266322182,267121148,267922521,268726301,269532488,270341083,271152116,271965590,272781502,273599854,274420645,275243907,276069641,276897846,277728555,278561735,279397419,280235606,281076328,281919554,282765316,283613613,284464446,285317847,286173815,287032351,287893455,288757126,289623397,290492268,291363738,292237841,293114575,293993909,294875907,295760537,296647831,297537789,298430411,299325697,300223679,301124357,302027731,302933833,303842631,304754158,305668412,306585427,307505202,308427738,309353033,310281089,311211937,312145578,313082011,314021268,314963350,315908256,316855987,317806574,318759986,319716286,320675443,321637489,322602423,323570246,324540957,325514589,326491142,327470616,328453042,329438422,330426754,331418039,332412309,333409563,334409803,335413028,336419270,337428528,338440836,339456161,340474535,341495958,342520463,343548016,344578683,345612431,346649260,347689203,348732290,349778492,350827838,351880330,352935968,353994783,355056775,356121945,357190325,358261914,359336713,360414721,361495971,362580463,363668196,364759204,365853485,366951040,368051900,369156067,370263539,371374350,372488466,373605953,374726777,375850972,376978536,378109471,379243808,380381547,381522688,382667264,383815273,384966717,386121628,387280004,388441848,389607189,390776029,391948368,393124205,394303572,395486503,396672963,397862987,399056573,400253754,401454529,402658900,403866897,405078521,406293772,407512649,408735186,409961414,411191300,412424878,413662147,414903139,416147854,417396292,418648485,419904434,421164170,422427661,423694939,424966037,426240955,427519691,428802248,430088655,431378914,432673057,433971084,435272994,436578820,437888561,439202250,440519855,441841408,443166941,444496454,445829946,447167451,448508967,449854496,451204068,452557685,453915378,455277147,456642993,458012946,459387008,460765178,462147489,463533940,464924563,466319359,467718327,469121500,470528878,471940460,473356279,474776366,476200691,477629316,479062209,480499404,481940900,483386728,484836890,486291416,487750308,489213565,490681218,492153269,493629750,495110659,496595998,498085798,499580059,501078814,502582062,504089804,505602071,507118896,508640279,510166219,511696717,513231804,514771514,516315845,517864798,519418405,520976666,522539612,524107245,525679564,527256601,528838388,530424926,532016213,533612283,535213136,536818770,538429251,540044547,541664688,543289709,544919608,546554386,548194042,549838641,551488183,553142668,554802095,556466529,558135971,559810419,561489875,563174337,564863870,566558475,568258151,569962962,571672844,573387862,575108015,576833368,578563856,580299543,582040430,583786581,585537931,587294546,589056423,590823629,592596099,594373896,596157022,597945475,599739320,601538558,603343188,605153210,606968688,608789622,610616013,612447860,614285228,616128116,617976525,619830454,621689968,623555066,625425750,627302018,629183935,631071501,632964715,634863643,636768220,638678509,640594576,642516357,644443914,646377249,648316425,650261378,652212173,654168810,656131352,658099735,660074024,662054283,664040448,666032583,668030687,670034761,672044870,674061012,676083189,678111463,680145836,682186307,684232877,686285609,688344503,690409559,692480779,694558224,696641897,698731860,700828050,702930530,705039366,707154492,709275974,711403810,713538066,715678677,717825706,719979220,722139152,724305568,726478467,728657914,730843909,733036451,735235604,737441306,739653619,741872608,744098273,746330614,748569631,750815324,753067757,755326995,757592972,759865754,762145341,764431796,766725119,769025311,771332371,773646365,775967291,778295214,780630134,782972050,785320964,787676939,790039975,792410136,794787358,797171706,799563243,801961970,804367886,806780992,809201351,811628965,814063896,816506080,818955647,821412532,823876798,826348447,828827478,831313955,833807943,836309377,838818321,841334776,843858806,846390410,848929588,851476406,854030863,856592958,859162756,861740258,864325526,866918498,869519301,872127872,874744273,877368507,880000635,882640660,885288580,887944460,890608299,893280163,895960051,898647962,901343898,904047922,906760098,909480427,912208908,914945541,917690391,920443458,923204805,925974433,928752406,931538660,934333323,937136331,939947748,942767639,945595938,948432775,951278086,954131934,956994319,959865306,962744895,965633150,968530071,971435658,974349975,977273022,980204863,983145499,986094929,989053217,992020428,994996498,997981490,1000975469,1003978435,1006990388,1010011392,1013041447,1016080617,1019128903,1022186304,1025252884,1028328644,1031413647,1034507894,1037611449,1040724312,1043846482,1046978025,1050119004,1053269354,1056429206,1059598493,1062777281,1065965634,1069163551,1072371032,1075588143,1078814882,1082051315,1085297504,1088553451,1091819155,1095094616,1098379962,1101675066,1104980056,1108295059,1111619948,1114954851,1118299768,1121654698,1125019643,1128394730,1131779959,1135175331,1138580845,1141996630,1145422685,1148859012,1152305609,1155762605,1159229871,1162707537,1166195731,1169694323,1173203443,1176723090,1180253265,1183794096,1187345454,1190907469,1194480267,1198063721,1201657960,1205262983,1208878790,1212505509,1216143013,1219791430,1223450888,1227121258,1230802669,1234495121,1238198615,1241913277,1245638981,1249375983,1253124154,1256883494,1260654132,1264436068,1268229430,1272034090,1275850176,1279677817,1283516884,1287367505,1291229681,1295103412,1298988697,1302885665,1306794316,1310714778,1314646923,1318590880,1322546648,1326514355,1330493874,1334485333,1338488860,1342504326,1346531861,1350571463,1354623262,1358687130,1362763193,1366851453,1370952039,1375064948,1379190183,1383327743,1387477756,1391640222,1395815141,1400002642,1404202725,1408415389,1412640635,1416878591,1421129257,1425392633,1429668847,1433957900,1438259791,1442574649,1446902346,1451243137,1455596895,1459963749,1464343697,1468736741,1473143009,1477562500,1481995214,1486441280 //Base - Trans Jobs 99,4001:4002:4003:4004:4005:4006:4007:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,0,10,18,28,40,85,123,168,220,278,400,481,613,731,875,1038,1213,1400,1575,1775,2268,2604,2786,3136,3506,4130,4796,5508,6264,9645,12392,14220,16159,18209,21649,24451,27401,30499,33748,47342,58160,64711,71573,78749,90144,99312,108870,118816,129154,174196,213220,238080,264150,291427,329640,363155,398116,434526,472381,610848,731828,806448,884232,965180,1073896,1170382,1270556,1374422,1481976,1850800,3389616,3666333,3953534,4251217,4559382,5129260,5488173,5859059,6241919,7374168,9570662,10458427,11380262,12336168,13326144,14994907,16130400,17304206,18516326,19766760,29216160,34949880,40930560,55017900,71510400,106974000,146061000,174405000,343210000,343896395,344584167,345273319,345963849,346655758,347349046,348043745,348739822,349437278,350136145,350836423,351538079,352241147,352945625,353651514,354358813,355067524,355777645,356489178,357202153,357916539,358632367,359349607,360068289,360788415,361509983,362232994,362957448,363683345,364410717,365139532,365869789,366601522,367334729,368069379,368805505,369543105,370282180,371022730,371764755,372508287,373253294,373999776,374747765,375497261,376248232,377000710,377754695,378510187,379267186,380025724,380785769,381547321,382310412,383075010,383841148,384608824,385378039,386148794,386921087,387694920,388470291,389247234,390025716,390805769,391587361,392370524,393155258,393941564,394729440,395518888,396309907,397102529,397896722,398692519,399489886,400288857,401089431,401891608,402695388,403500772,404307759,405116349,405926574,406738402,407551866,408366965,409183699,410002068,410822073,411643713,412466988,413291899,414118477,414946690,415776570,416608118,417441333,418276215,419112765,419950982,420790867,421632450,422475702,423320652,424167270,425015587,425865604,426717320,427570735,428425850,429282696,430141242,431001519,431863495,432727203,433592643,434459814,435328716,436199350,437071747,437945876,438821768,439699392,440578779,441459930,442342844,443227522,444113963,445002168,445892168,446783932,447677492,448572847,449469966,450368880,451269622,452172159,453076492,453982621,454890577,455800361,456711940,457625348,458540582,459457645,460376535,461297285,462219862,463144299,464070564,464998689,465928673,466860517,467794221,468729784,469667239,470606554,471547761,472490859,473435817,474382667,475331409,476282074,477234631,478189080,479145453,480103718,481063907,482026019,482990055,483956015,484923899,485893739,486865502,487839222,488814897,489792529,490772116,491753659,492737158,493722613,494710056,495699455,496690842,497684216,498679579,499676930,500676268,501677595,502680942,503686276,504693631,505703006,506714400,507727815,508743250,509760737,510780244,511801803,512825382,513851013,514878696,515908432,516940219,517974091,519010014,520048022,521088114,522130290,523174551,524220895,525269324,526319837,527372466,528427211,529484040,530542986,531604048,532667226,533732552,534799995,535869586,536941325,538015180,539091184,540169368,541249668,542332149,543416810,544503651,545592673,546683875,547777257,548872820,549970563,551070486,552172590,553276938,554383467,555492240,556603194,557716392,558831834,559949457,561069324,562191436,563315792,564442393,565571238,566702391,567835790,568971432,570109384,571249580,572392084,573536833,574683890,575833257,576984931,578138915,579295207,580453807,581614716,582777934,583943460,585111359,586281567,587454083,588628973,589806234,590985805,592167748,593352064,594538752,595727814,596919248,598113055,599309234,600507851,601708840,602912266,604118064,605326300,606536908,607749954,608965436,610183355,611403711,612626503,613851733,615079399,616309567,617542171,618777212,620014754,621254797,622497277,623742258,624989740,626239723,627492207,628747192,630004678,631264665,632527153,633792206,635059760,636329879,637602499,638877684,640155434,641435750,642718631,644004076,645292087,646582663,647875804,649171510,650469846,651770746,653074276,654380435,655689159,657000513,658314496,659631108,660950349,662272219,663596719,664923912,666253734,667586250,668921395,670259233,671599765,672942926,674288780,675637328,676988569,678342503,679699195,681058580,682420659,683785495,685153025,686523312,687896356,689272159,690650654,692031907,693415982,694802814,696192403,697584750,698979919,700377845,701778593,703182163,704588490,705997638,707409609,708824400,710242014,711662449,713085770,714511913,715940941,717372791,718807527,720245148,721685591,723128920,724575135,726024235,727476285,728931221,730389043,731849815,733313472,734780080,736249637,737722144,739197537,740675944,742157300,743641607,745128864,746619070,748112290,749608525,751107709,752609908,754115120,755623346,757134587,758648841,760166110,761686392,763209753,764736127,766265580,767798111,769333656,770872279,772413980,773958760,775506681,777057681,778611759,780168979,781729277,783292718,784859301,786429026,788001893,789577903,791157055,792739349,794324786,795913429,797505214,799100205,800698403,802299808,803904354,805512172,807123195,808737425,810354861,811975568,813599482,815226666,816857120,818490781,820127712,821767978,823411514,825058321,826708399,828361811,830018494,831678511,833341863,835008550,836678571,838351927,840028618,841708643,843392067,845078826,846768983,848462476,850159367,851859656,853563345,855270432,856980918,858694867,860412215,862133026,863857299,865584972,867316107,869050705,870788766,872530291,874275342,876023856,877775897,879531401,881290432,883052990,884819075,886588687,888361826,890138556,891918814,893702598,895489974,897280940,899075498,900873647,902675388,904480719,906289642,908102219,909918389,911738213,913561693,915388763,917219489,919053935,920892036,922733792,924579267,926428398,928281248,930137754,931997979,933861923,935729651,937601099,939476266,941355216,943237886,945124339,947014576,948908596,950806400,952707988,954613359,956522578,958435580,960352430,962273128,964197673,966126066,968058307,969994395,971934331,973878179,975825939,977777546,979733065,981692496,983655839,985623094,987594324,989569467,991548585,993531679,995518685,997509667,999504689,1001503687,1003506661,1005513675,1007524665,1009539695,1011558765,1013581875,1015609025,1017640215,1019675446,1021714780,1023758155,1025805633,1027857216,1029912903,1031972695,1034036590,1036104654,1038176822,1040253158,1042333663,1044418272,1046507113,1048600123,1050697301,1052798647,1054904226,1057014037,1059128016,1061246228,1063368673,1065495414,1067626387,1069761593,1071901095,1074044894,1076192990,1078345382,1080502006,1082662992,1084828338,1086997916,1089171855,1091350155,1093532816,1095719837,1097911219,1100106962,1102307193,1104511786,1106720739,1108934181,1111151983,1113374275,1115601056,1117832197,1120067827,1122307946,1124552555,1126801652,1129055238,1131313313,1133575877,1135843058,1138114728,1140390888,1142671664,1144956929,1147246812,1149541312,1151840429,1154144035,1156452258,1158765098,1161082556,1163404631,1165731451,1168062888,1170398943,1172739743,1175085161,1177435324,1179790104,1182149629,1184513900,1186882917,1189256679,1191635186,1194018439,1196406438,1198799181,1201196799,1203599162,1206006271,1208418253,1210835109,1213256710,1215683186,1218114535,1220550757,1222991854,1225437824,1227888668,1230344385,1232805105,1235270698,1237741165,1240216634,1242696977,1245182321,1247672668,1250168017,1252668367,1255173720,1257684075,1260199431,1262719790,1265245150,1267775641,1270311134,1272851757,1275397382,1277948137,1280504023,1283065039,1285631185,1288202461,1290778867,1293360404,1295947071,1298538868,1301135924,1303738110,1306345554,1308958257,1311576090,1314199182,1316827532,1319461141,1322100008,1324744133,1327393646,1330048417,1332708446,1335373862,1338044537,1340720598,1343402046,1346088753,1348780846,1351478326,1354181193,1356889575,1359603344,1362322499,1365047170,1367777227,1370512799,1373253758,1376000232,1378752221,1381509725,1384272743,1387041277,1389815326,1392594890,1395380098,1398170820,1400967185,1403769066,1406576590,1409389757,1412208439,1415032764,1417862732,1420698473,1423539856,1426386883,1429239681,1432098122,1434962335,1437832191,1440707819,1443589218,1446476389,1449369331,1452268045,1455172530,1458082787,1460998944,1463920872,1466848700,1469782299,1472721798,1475667197,1478618496,1481575694,1484538793,1487507791,1490482817,1493463743,1496450568,1499443422,1502442304,1505447085,1508457895,1511474732,1514497598,1517526492,1520561541,1523602619,1526649725,1529702988,1532762406,1535827853,1538899456,1541977215,1545061130,1548151202,1551247430,1554349943,1557458611,1560573437,1563694546,1566821940,1569955491,1573095326,1576241446,1579393850,1582552538,1585717640,1588889026,1592066825,1595250908,1598441404,1601638185,1604841379,1608050985,1611267004,1614489436,1617718409,1620953795,1624195721,1627444061,1630698942,1633960235,1637228070,1640502445,1643783362,1647070948,1650365075,1653665743,1656973081,1660286959,1663607507,1666934724,1670268610,1673609166,1676956391,1680310285,1683670849,1687038210,1690412240,1693793069,1697180566,1700574861,1703975953,1707383843,1710798531,1714220145,1717648556,1721083764,1724525899,1727974959,1731430817,1734893600,1738363310,1741839945,1745323635,1748814250,1752311791,1755816386,1759328035,1762846610,1766372239,1769904922,1773444660,1776991451,1780545425,1784106452,1787674663,1791249927,1794832373,1798422002,1802018813,1805622807,1809233983,1812852341,1816478010,1820110861,1823751022,1827398495,1831053278,1834715371,1838384775,1842061490,1845745515,1849436979,1853135754,1856841967,1860555620,1864276711,1868005241,1871741210,1875484618,1879235593,1882994006,1886759987,1890533407,1894314394,1898102947,1901899068,1905702757,1909514140,1913333091,1917159736,1920993949,1924835858,1928685462,1932542761,1936407755,1940280573,1944161087,1948049295,1951945328,1955849184,1959760864,1963680367,1967607694,1971542844,1975485818,1979436744,1983395622,1987362324,1991336977,1995319582,1999310139,2003308648,2007315237,2011329778,2015352399,2019383101,2023421754,2027468487,2031523428,2035586450,2039657552,2043736862,2047824253,2051919851,2056023658,2060135674,2064255898,2068384330,2072521099,2076666076 @@ -16,7 +16,7 @@ 10,0:4023,1,10,18,28,40,91,151,205,268,340 //Job - 1st Classes & Baby 1st Classes -50,1:2:3:4:5:6:4024:4025:4026:4027:4028:4029:4046:4050,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,386371,409795,482092,509596,519787,530182,540785,551600,562631,573883,585360,597067,609008,621188,633611,646283,659208,672392,685839,699555,713546,727816,742372,757219,772363,787810,803566,819637,836029,852749,869803,887199,904942,923040,941500,960329,979535,999125,1019107,1039489,1060278,1081483,1103112,1125174,1147677,1170630,1194042,1217922,1242280,1267125,1292467,1318316,1344682,1371575,1399006,1426986,1455525,1484635,1514327,1544613,1575505,1607015,1639155,1671938,1705376,1739483,1774272,1809757,1845952,1882871,1920528,1958938,1998116,2038078,2078839,2120415,2162823,2206079,2250200,2295203,2341107,2387929,2435687,2484400,2534087,2584768,2636463,2689192,2742975,2797834,2853790,2910865,2969082,3028463,3089032,3150812,3213828,3278104,3343666,3410539,3478749,3548323,3619289,3691674,3765507,3840817,3917633,3995985,4075904,4157422,4240570,4325381,4411888,4500125,4590127,4681929,4775567,4871078,4968499,5067868,5169225,5272609,5378061,5485622,5595334,5707240,5821384,5937811,6056567,6177698,6301251,6427275,6555820,6686936,6820674,6957087,7096228,7238152,7382914,7530572,7681183,7834806,7991501,8151330,8314356,8480642,8650254,8823258,8999722,9179716,9363310,9550576,9741587,9936418,10135146,10337848,10544604,10755495,10970604,11190015,11413815,11642091,11874932,12112430,12354678,12601771,12853806,13110881,13373098,13640559,13913369,14191636,14475468,14764977,15060276,15361481,15668710,15982083,16301724,16627758,16960312,17299517,17645505,17998413,18358379,18725547,19100058,19482058,19871698,20269131,20674514,21088003,21509763,21939958,22378756,22826330,23282856,23748512,24223481,24707949,25202106,25706147,26220270,26744674,27279566,27825156,28381658,28949290,29528275 +50,1:2:3:4:5:6:4024:4025:4026:4027:4028:4029:4046:4050:4218,1,30,43,58,76,116,180,220,272,336,520,604,699,802,948,1125,1668,1937,2226,3040,3988,5564,6272,7021,9114,11473,15290,16891,18570,23229,28359,36478,39716,43088,52417,62495,78160,84175,90404,107611,125915,153941,191781,204351,248352,286212,386371,409795,482092,509596,519787,530182,540785,551600,562631,573883,585360,597067,609008,621188,633611,646283,659208,672392,685839,699555,713546,727816,742372,757219,772363,787810,803566,819637,836029,852749,869803,887199,904942,923040,941500,960329,979535,999125,1019107,1039489,1060278,1081483,1103112,1125174,1147677,1170630,1194042,1217922,1242280,1267125,1292467,1318316,1344682,1371575,1399006,1426986,1455525,1484635,1514327,1544613,1575505,1607015,1639155,1671938,1705376,1739483,1774272,1809757,1845952,1882871,1920528,1958938,1998116,2038078,2078839,2120415,2162823,2206079,2250200,2295203,2341107,2387929,2435687,2484400,2534087,2584768,2636463,2689192,2742975,2797834,2853790,2910865,2969082,3028463,3089032,3150812,3213828,3278104,3343666,3410539,3478749,3548323,3619289,3691674,3765507,3840817,3917633,3995985,4075904,4157422,4240570,4325381,4411888,4500125,4590127,4681929,4775567,4871078,4968499,5067868,5169225,5272609,5378061,5485622,5595334,5707240,5821384,5937811,6056567,6177698,6301251,6427275,6555820,6686936,6820674,6957087,7096228,7238152,7382914,7530572,7681183,7834806,7991501,8151330,8314356,8480642,8650254,8823258,8999722,9179716,9363310,9550576,9741587,9936418,10135146,10337848,10544604,10755495,10970604,11190015,11413815,11642091,11874932,12112430,12354678,12601771,12853806,13110881,13373098,13640559,13913369,14191636,14475468,14764977,15060276,15361481,15668710,15982083,16301724,16627758,16960312,17299517,17645505,17998413,18358379,18725547,19100058,19482058,19871698,20269131,20674514,21088003,21509763,21939958,22378756,22826330,23282856,23748512,24223481,24707949,25202106,25706147,26220270,26744674,27279566,27825156,28381658,28949290,29528275 //Job - 2nd Classes & Baby 2nd Classes 50,7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4051:4052,1,144,184,284,348,603,887,1096,1598,2540,3676,4290,4946,6679,9492,12770,14344,16005,20642,27434,35108,38577,42206,52708,66971,82688,89544,96669,117821,144921,174201,186677,199584,238617,286366,337147,358435,380376,447685,526989,610246,644736,793535,921810,1106758,1260955,1487304,1557657,1990632,2083386,2125053,2167554,2210905,2255123,2300225,2346229,2393153,2441016,2489836,2539632,2590424,2642232,2695076,2748977,2803956,2860035,2917235,2975579,3035090,3095791,3157706,3220860,3285277,3350982,3418001,3486360,3556087,3627208,3699752,3773746,3849220,3926204,4004728,4084822,4166518,4249848,4334844,4421540,4509970,4600169,4692172,4786015,4881735,4979369,5078956,5180535,5284145,5389827,5497623,5607575,5719726,5834120,5950802,6069817,6191213,6315037,6441337,6570163,6701566,6835597,6972308,7111754,7253988,7399067,7547048,7697988,7851947,8008985,8169164,8332547,8499197,8669180,8842563,9019414,9199802,9383797,9571472,9762901,9958158,10157320,10360466,10567675,10779028,10994608,11214499,11438788,11667563,11900914,12138932,12381710,12629343,12881929,13139567,13402358,13670404,13943811,14222686,14507139,14797281,15093226,15395090,15702991,16017050,16337390,16664137,16997419,17337368,17684115,18037797,18398551,18766522,19141852,19524688,19915181,20313483,20719753,21134146,21556828,21987964,22427722,22876276,23333801,23800475,24276485,24762013,25257251,25762396,26277643,26803196,27339259,27886044,28443764,29012638,29592890,30184747,30788442,31404210,32032293,32672937,33326394,33992921,34672777,35366230,36073555,36795026,37530923,38281541,39047170,39828110,40624673,41437164,42265906,43111221,43973443,44852912,45749969,46664966,47598266,48550228,49521231,50511655,51521888,52552324,53603369,54675434,55768939,56884317,58022001,59182438,60366087,61573408,62804874,64060968,65342186,66649026,67982003,69341638,70728471,72143040,73585899,75057612,76558766,78089941,79651741,81244777,82869669,84527063,86217603,87941950,89700789,91494806,93324702,95191196,97095022,99036922,101017656,103038007,105098766,107200741,109344756,111531644,113762278,116037523,118358268,120725435 diff --git a/db/pre-re/job_db.conf b/db/pre-re/job_db.conf index 1c8e4ca60..5f5131726 100644 --- a/db/pre-re/job_db.conf +++ b/db/pre-re/job_db.conf @@ -1390,3 +1390,51 @@ Expanded_Super_Novice: { Expanded_Super_Baby: { Inherit: ("Novice") } +// Summoner HP/SP is not known, below table are generated and near to official HP/SP. +Summoner: { + Weight: 20000 + BaseASPD: { + Fist: 45 + Dagger: 55 + Rod: 55 + Book: 43 + TwoHandRod: 55 + } + HPTable:[ 40, 69, 80, 92, 105, 119, 134, 150, 167, 185, // 1 - 10 + 204, 224, 245, 268, 291, 315, 341, 367, 395, 423, // 11 - 20 + 453, 484, 515, 548, 582, 617, 653, 690, 728, 767, // 21 - 30 + 807, 848, 890, 934, 978, 1023, 1070, 1117, 1166, 1215, // 31 - 40 + 1266, 1317, 1370, 1424, 1479, 1534, 1591, 1649, 1708, 1768, // 41 - 50 + 1829, 1891, 1955, 2019, 2084, 2150, 2218, 2286, 2356, 2426, // 51 - 60 + 2498, 2570, 2644, 2719, 2794, 2871, 2949, 3028, 3108, 3189, // 61 - 70 + 3271, 3354, 3438, 3523, 3610, 3697, 3785, 3875, 3965, 4056, // 71 - 80 + 4149, 4242, 4337, 4433, 4529, 4627, 4726, 4826, 4927, 5029, // 81 - 90 + 5132, 5236, 5341, 5447, 5554, 5662, 5772, 5882, 5993, 6106, // 91 - 100 + 6219, 6334, 6449, 6566, 6684, 6802, 6922, 7043, 7165, 7288, // 101 - 110 + 7412, 7537, 7663, 7790, 7918, 8047, 8177, 8309, 8441, 8574, // 111 - 120 + 8709, 8844, 8981, 9118, 9257, 9397, 9537, 9679, 9822, 9966, // 121 - 130 + 10111, 10257, 10404, 10552, 10701, 10851, 11002, 11155, 11308, 11462, // 131 - 140 + 11618, 11774, 11932, 12090, 12250, 12410, 12572, 12735, 12898, 13063, // 141 - 150 + 13229, 13396, 13564, 13733, 13903, 14074, 14246, 14420, 14594, 14769, // 151 - 160 + 14946, 15123, 15301, 15481, 15661, 15843, 16026, 16209, 16394, 16580, // 161 - 170 + 16767, 16955, 17144, 17334, 17525] // 171 - 175 + + SPTable:[ 8, 10, 13, 15, 18, 20, 23, 25, 28, 30, // 1 - 10 + 33, 35, 38, 40, 43, 45, 48, 50, 53, 55, // 11 - 20 + 58, 60, 63, 65, 68, 70, 73, 75, 78, 80, // 21 - 30 + 83, 85, 88, 90, 93, 95, 98, 100, 103, 105, // 31 - 40 + 108, 110, 113, 115, 118, 120, 123, 125, 128, 130, // 41 - 50 + 133, 135, 138, 140, 143, 145, 148, 150, 153, 155, // 51 - 60 + 158, 160, 163, 165, 168, 170, 173, 175, 178, 180, // 61 - 70 + 183, 185, 188, 190, 193, 195, 198, 200, 203, 205, // 71 - 80 + 208, 210, 213, 215, 218, 220, 223, 225, 228, 230, // 81 - 90 + 233, 235, 238, 240, 243, 245, 248, 250, 253, 255, // 91 - 100 + 258, 260, 263, 265, 268, 270, 273, 275, 278, 280, // 101 - 110 + 283, 285, 288, 290, 293, 295, 298, 300, 303, 305, // 111 - 120 + 308, 310, 313, 315, 318, 320, 323, 325, 328, 330, // 121 - 130 + 333, 335, 338, 340, 343, 345, 348, 350, 353, 355, // 131 - 140 + 358, 360, 363, 365, 368, 370, 373, 375, 378, 380, // 141 - 150 + 383, 385, 388, 390, 393, 395, 398, 400, 403, 405, // 151 - 160 + 408, 410, 413, 415, 418, 420, 423, 425, 428, 430, // 161 - 170 + 433, 435, 438, 440, 443] // 171 - 175 +} diff --git a/db/re/exp.txt b/db/re/exp.txt index c4be1cd07..b26bc7809 100644 --- a/db/re/exp.txt +++ b/db/re/exp.txt @@ -7,7 +7,7 @@ //================================ //Base - Normal and Baby Jobs -99,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:23:24:25:4023:4024:4025:4026:4027:4028:4029:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4045:4046:4047:4048:4049:4050:4051:4052,0,350,550,900,1500,2200,3200,3800,4200,4550,5000,5500,6000,6100,6350,6700,7350,8000,8400,8800,9200,9700,10300,11000,11800,13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23200,24000,26000,27500,29000,30000,31500,33000,34000,36000,37500,38000,40000,42000,44500,47000,49000,51000,53000,55000,57000,59000,61500,63000,65000,67000,69000,70000,73000,77000,80000,84000,88000,91000,95000,110000,128000,140000,155000,163000,170000,180000,188000,195000,200000,230000,260000,300000,350000,400000,480000,550000,600000,680000,750000,900000,1000000,1200000,1500000,1800000,2100000,2400000,2800000,3300000,4000000,4015999,4032062,4048190,4064382,4080639,4096961,4113348,4129801,4146319,4162904,4179555,4196273,4213057,4229909,4246828,4263815,4280870,4297993,4315184,4332444,4349773,4367171,4384639,4402177,4419785,4437463,4455212,4473032,4490923,4508886,4526921,4545028,4563207,4581459,4599784,4618182,4636654,4655200,4673820,4692515,4711284,4730128,4749048,4768043,4787114,4806262,4825486,4844787,4864165,4883621,4903155,4922767,4942457,4962226,4982074,5002002,5022009,5042096,5062264,5082512,5102841,5123252,5143744,5164318,5184975,5205714,5226536,5247441,5268430,5289503,5310660,5331902,5353229,5374641,5396139,5417723,5439393,5461150,5482994,5504925,5526944,5549051,5571246,5593530,5615903,5638366,5660919,5683562,5706295,5729119,5752035,5775042,5798141,5821333,5844618,5867996,5891467,5915032,5938691,5962445,5986294,6010238,6034278,6058414,6082647,6106977,6131404,6155929,6180552,6205273,6230093,6255013,6280032,6305151,6330371,6355692,6381114,6406638,6432264,6457992,6483823,6509757,6535795,6561937,6588184,6614536,6640993,6667556,6694225,6721001,6747884,6774875,6801974,6829181,6856497,6883922,6911457,6939102,6966858,6994725,7022703,7050793,7078995,7107310,7135738,7164280,7192936,7221707,7250593,7279594,7308712,7337946,7367297,7396765,7426351,7456056,7485879,7515822,7545884,7576067,7606370,7636795,7667341,7698009,7728800,7759714,7790752,7821914,7853201,7884613,7916151,7947815,7979605,8011523,8043568,8075741,8108043,8140474,8173035,8205726,8238548,8271501,8304586,8337803,8371153,8404637,8438255,8472007,8505894,8539917,8574076,8608371,8642804,8677374,8712083,8746930,8781917,8817044,8852311,8887719,8923269,8958961,8994796,9030774,9066896,9103163,9139575,9176132,9212836,9249686,9286684,9323830,9361124,9398568,9436161,9473905,9511800,9549846,9588044,9626395,9664900,9703559,9742372,9781340,9820464,9859745,9899183,9938779,9978533,10018446,10058519,10098752,10139146,10179702,10220420,10261301,10302345,10343553,10384926,10426465,10468170,10510042,10552081,10594288,10636664,10679210,10721926,10764813,10807871,10851101,10894504,10938081,10981832,11025758,11069860,11114138,11158593,11203226,11248038,11293029,11338200,11383552,11429085,11474800,11520698,11566780,11613046,11659497,11706134,11752957,11799968,11847167,11894555,11942132,11989899,12037857,12086007,12134350,12182886,12231616,12280541,12329662,12378980,12428495,12478208,12528120,12578231,12628543,12679056,12729771,12780689,12831811,12883137,12934668,12986406,13038350,13090502,13142863,13195433,13248214,13301206,13354410,13407826,13461456,13515301,13569361,13623637,13678130,13732841,13787771,13842921,13898291,13953883,14009697,14065735,14121997,14178484,14235197,14292137,14349304,14406700,14464326,14522182,14580269,14638589,14697142,14755929,14814951,14874210,14933706,14993440,15053412,15113624,15174077,15234772,15295710,15356892,15418318,15479990,15541909,15604075,15666490,15729155,15792070,15855237,15918657,15982330,16046258,16110442,16174882,16239580,16304537,16369754,16435232,16500972,16566975,16633242,16699774,16766572,16833637,16900969,16968571,17036445,17104588,17173005,17241695,17310661,17379901,17449418,17519214,17589289,17659644,17730281,17801200,17872403,17943892,18015666,18087727,18160077,18232715,18305645,18378865,18452378,18526186,18600289,18674688,18749385,18824380,18899676,18975273,19051172,19127375,19203884,19280698,19357819,19435250,19512989,19591038,19669401,19748076,19827067,19906375,19986000,20065942,20146204,20226787,20307694,20388923,20470478,20552358,20634566,20717103,20799971,20883170,20966701,21050565,21134765,21219301,21304176,21389391,21474948,21560846,21647088,21733675,21820609,21907889,21995518,22083498,22171830,22260516,22349556,22438953,22528706,22618819,22709294,22800130,22891329,22982892,23074822,23167120,23259787,23352825,23446234,23540017,23634174,23728709,23823621,23918913,24014586,24110643,24207085,24303911,24401126,24498729,24596721,24695105,24793883,24893058,24992628,25092597,25192965,25293734,25394907,25496486,25598470,25700862,25803664,25906877,26010502,26114542,26218998,26323872,26429166,26534881,26641018,26747580,26854568,26961984,27069830,27178107,27286819,27395965,27505546,27615566,27726026,27836928,27948274,28060065,28172302,28284989,28398126,28511717,28625761,28740261,28855219,28970639,29086521,29202864,29319673,29436949,29554694,29672911,29791602,29910766,30030407,30150528,30271128,30392210,30513777,30635829,30758369,30881399,31004924,31128942,31253456,31378468,31503980,31629994,31756512,31883536,32011068,32139110,32267664,32396732,32526317,32656419,32787043,32918190,33049861,33182057,33314782,33448039,33581830,33716157,33851018,33986418,34122359,34258847,34395881,34533461,34671592,34810276,34949515,35089312,35229667,35370584,35512064,35654110,35796726,35939913,36083669,36228000,36372910,36518401,36664471,36811127,36958370,37106199,37254622,37403640,37553252,37703463,37854275,38005691,38157712,38310340,38463579,38617432,38771899,38926985,39082689,39239016,39395970,39553549,39711760,39870604,40030084,40190202,40350958,40512361,40674407,40837103,41000450,41164447,41329103,41494418,41660391,41827031,41994337,42162311,42330959,42500281,42670278,42840958,43012321,43184367,43357103,43530530,43704647,43879464,44054979,44231197,44408118,44585750,44764092,44943146,45122914,45303401,45484611,45666548,45849211,46032606,46216736,46401600,46587204,46773550,46960643,47148484,47337075,47526421,47716523,47907387,48099015,48291409,48484571,48678507,48873219,49068710,49264984,49462041,49659885,49858520,50057951,50258181,50459210,50661042,50863681,51067132,51271397,51476478,51682383,51889110,52096665,52305047,52514265,52724318,52935214,53146954,53359537,53572971,53787261,54002406,54218414,54435286,54653026,54871633,55091115,55311477,55532719,55754848,55977864,56201772,56426576,56652279,56878886,57106400,57334822,57564160,57794413,58025586,58257683,58490711,58724671,58959567,59195403,59432182,59669909,59908584,60148215,60388805,60630356,60872874,61116360,61360822,61606264,61852685,62100091,62348489,62597878,62848268,63099657,63352051,63605456,63859874,64115308,64371765,64629247,64887761,65147307,65407893,65669520,65932194,66195917,66460696,66726535,66993438,67261410,67530450,67800566,68071766,68344051,68617420,68891890,69167452,69444122,69721892,70000771,70280767,70561887,70844131,71127500,71412010,71697652,71984434,72272366,72561453,72851698,73143099,73435664,73729402,74024313,74320405,74617685,74916154,75215812,75516667,75818726,76121999,76426484,76732181,77039108,77347256,77656641,77967262,78279129,78592240,78906604,79222230,79539116,79857272,80176696,80497398,80819385,81142657,81467222,81793088,82120256,82448732,82778526,83109637,83442074,83775835,84110931,84447367,84785153,85124288,85464780,85806638,86149862,86494459,86840429,87187789,87536538,87886677,88238222,88591172,88945528,89301305,89658504,90017133,90377199,90738704,91101654,91466057,91831915,92199234,92568024,92938291,93310036,93683267,94057992,94434219,94811948,95191194,95571951,95954234,96338043,96723387,97110272,97498708,97888693,98280245,98673363,99068048,99464315,99862164,100261603,100662641,101065285,101469543,101875416,102282912,102692038,103102802,103515205,103929263,104344975,104762350,105181396,105602112,106024515,106448604,106874396,107301892,107731090,108162006,108594650,109029020,109465134,109902990,110342598,110783964,111227098,111671998,112118682,112567148,113017414,113469479,113923352,114379039,114836550,115295892,115757065,116220086,116684962,117151693,117620296,118090771,118563124,119037366,119513511,119991559,120471520,120953399,121437207,121922950,122410637,122900276,123391866,123885425,124380959,124878477,125377987,125879489,126382999,126888525,127396075,127905649,128417264,128930926,129446645,129964427,130484275,131006202,131530218,132056330,132584546,133114875,133647324,134181910,134718632,135257491,135798510,136341699,136887055,137434597,137984323,138536250,139090393,139646754,140205331,140766142,141329201,141894509,142462082,143031920,143604040,144178440,144755138,145334149,145915473 +99,0:1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:23:24:25:4023:4024:4025:4026:4027:4028:4029:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4045:4046:4047:4048:4049:4050:4051:4052:4218,0,350,550,900,1500,2200,3200,3800,4200,4550,5000,5500,6000,6100,6350,6700,7350,8000,8400,8800,9200,9700,10300,11000,11800,13000,14000,15000,16000,17000,18000,19000,20000,21000,22000,23200,24000,26000,27500,29000,30000,31500,33000,34000,36000,37500,38000,40000,42000,44500,47000,49000,51000,53000,55000,57000,59000,61500,63000,65000,67000,69000,70000,73000,77000,80000,84000,88000,91000,95000,110000,128000,140000,155000,163000,170000,180000,188000,195000,200000,230000,260000,300000,350000,400000,480000,550000,600000,680000,750000,900000,1000000,1200000,1500000,1800000,2100000,2400000,2800000,3300000,4000000,4015999,4032062,4048190,4064382,4080639,4096961,4113348,4129801,4146319,4162904,4179555,4196273,4213057,4229909,4246828,4263815,4280870,4297993,4315184,4332444,4349773,4367171,4384639,4402177,4419785,4437463,4455212,4473032,4490923,4508886,4526921,4545028,4563207,4581459,4599784,4618182,4636654,4655200,4673820,4692515,4711284,4730128,4749048,4768043,4787114,4806262,4825486,4844787,4864165,4883621,4903155,4922767,4942457,4962226,4982074,5002002,5022009,5042096,5062264,5082512,5102841,5123252,5143744,5164318,5184975,5205714,5226536,5247441,5268430,5289503,5310660,5331902,5353229,5374641,5396139,5417723,5439393,5461150,5482994,5504925,5526944,5549051,5571246,5593530,5615903,5638366,5660919,5683562,5706295,5729119,5752035,5775042,5798141,5821333,5844618,5867996,5891467,5915032,5938691,5962445,5986294,6010238,6034278,6058414,6082647,6106977,6131404,6155929,6180552,6205273,6230093,6255013,6280032,6305151,6330371,6355692,6381114,6406638,6432264,6457992,6483823,6509757,6535795,6561937,6588184,6614536,6640993,6667556,6694225,6721001,6747884,6774875,6801974,6829181,6856497,6883922,6911457,6939102,6966858,6994725,7022703,7050793,7078995,7107310,7135738,7164280,7192936,7221707,7250593,7279594,7308712,7337946,7367297,7396765,7426351,7456056,7485879,7515822,7545884,7576067,7606370,7636795,7667341,7698009,7728800,7759714,7790752,7821914,7853201,7884613,7916151,7947815,7979605,8011523,8043568,8075741,8108043,8140474,8173035,8205726,8238548,8271501,8304586,8337803,8371153,8404637,8438255,8472007,8505894,8539917,8574076,8608371,8642804,8677374,8712083,8746930,8781917,8817044,8852311,8887719,8923269,8958961,8994796,9030774,9066896,9103163,9139575,9176132,9212836,9249686,9286684,9323830,9361124,9398568,9436161,9473905,9511800,9549846,9588044,9626395,9664900,9703559,9742372,9781340,9820464,9859745,9899183,9938779,9978533,10018446,10058519,10098752,10139146,10179702,10220420,10261301,10302345,10343553,10384926,10426465,10468170,10510042,10552081,10594288,10636664,10679210,10721926,10764813,10807871,10851101,10894504,10938081,10981832,11025758,11069860,11114138,11158593,11203226,11248038,11293029,11338200,11383552,11429085,11474800,11520698,11566780,11613046,11659497,11706134,11752957,11799968,11847167,11894555,11942132,11989899,12037857,12086007,12134350,12182886,12231616,12280541,12329662,12378980,12428495,12478208,12528120,12578231,12628543,12679056,12729771,12780689,12831811,12883137,12934668,12986406,13038350,13090502,13142863,13195433,13248214,13301206,13354410,13407826,13461456,13515301,13569361,13623637,13678130,13732841,13787771,13842921,13898291,13953883,14009697,14065735,14121997,14178484,14235197,14292137,14349304,14406700,14464326,14522182,14580269,14638589,14697142,14755929,14814951,14874210,14933706,14993440,15053412,15113624,15174077,15234772,15295710,15356892,15418318,15479990,15541909,15604075,15666490,15729155,15792070,15855237,15918657,15982330,16046258,16110442,16174882,16239580,16304537,16369754,16435232,16500972,16566975,16633242,16699774,16766572,16833637,16900969,16968571,17036445,17104588,17173005,17241695,17310661,17379901,17449418,17519214,17589289,17659644,17730281,17801200,17872403,17943892,18015666,18087727,18160077,18232715,18305645,18378865,18452378,18526186,18600289,18674688,18749385,18824380,18899676,18975273,19051172,19127375,19203884,19280698,19357819,19435250,19512989,19591038,19669401,19748076,19827067,19906375,19986000,20065942,20146204,20226787,20307694,20388923,20470478,20552358,20634566,20717103,20799971,20883170,20966701,21050565,21134765,21219301,21304176,21389391,21474948,21560846,21647088,21733675,21820609,21907889,21995518,22083498,22171830,22260516,22349556,22438953,22528706,22618819,22709294,22800130,22891329,22982892,23074822,23167120,23259787,23352825,23446234,23540017,23634174,23728709,23823621,23918913,24014586,24110643,24207085,24303911,24401126,24498729,24596721,24695105,24793883,24893058,24992628,25092597,25192965,25293734,25394907,25496486,25598470,25700862,25803664,25906877,26010502,26114542,26218998,26323872,26429166,26534881,26641018,26747580,26854568,26961984,27069830,27178107,27286819,27395965,27505546,27615566,27726026,27836928,27948274,28060065,28172302,28284989,28398126,28511717,28625761,28740261,28855219,28970639,29086521,29202864,29319673,29436949,29554694,29672911,29791602,29910766,30030407,30150528,30271128,30392210,30513777,30635829,30758369,30881399,31004924,31128942,31253456,31378468,31503980,31629994,31756512,31883536,32011068,32139110,32267664,32396732,32526317,32656419,32787043,32918190,33049861,33182057,33314782,33448039,33581830,33716157,33851018,33986418,34122359,34258847,34395881,34533461,34671592,34810276,34949515,35089312,35229667,35370584,35512064,35654110,35796726,35939913,36083669,36228000,36372910,36518401,36664471,36811127,36958370,37106199,37254622,37403640,37553252,37703463,37854275,38005691,38157712,38310340,38463579,38617432,38771899,38926985,39082689,39239016,39395970,39553549,39711760,39870604,40030084,40190202,40350958,40512361,40674407,40837103,41000450,41164447,41329103,41494418,41660391,41827031,41994337,42162311,42330959,42500281,42670278,42840958,43012321,43184367,43357103,43530530,43704647,43879464,44054979,44231197,44408118,44585750,44764092,44943146,45122914,45303401,45484611,45666548,45849211,46032606,46216736,46401600,46587204,46773550,46960643,47148484,47337075,47526421,47716523,47907387,48099015,48291409,48484571,48678507,48873219,49068710,49264984,49462041,49659885,49858520,50057951,50258181,50459210,50661042,50863681,51067132,51271397,51476478,51682383,51889110,52096665,52305047,52514265,52724318,52935214,53146954,53359537,53572971,53787261,54002406,54218414,54435286,54653026,54871633,55091115,55311477,55532719,55754848,55977864,56201772,56426576,56652279,56878886,57106400,57334822,57564160,57794413,58025586,58257683,58490711,58724671,58959567,59195403,59432182,59669909,59908584,60148215,60388805,60630356,60872874,61116360,61360822,61606264,61852685,62100091,62348489,62597878,62848268,63099657,63352051,63605456,63859874,64115308,64371765,64629247,64887761,65147307,65407893,65669520,65932194,66195917,66460696,66726535,66993438,67261410,67530450,67800566,68071766,68344051,68617420,68891890,69167452,69444122,69721892,70000771,70280767,70561887,70844131,71127500,71412010,71697652,71984434,72272366,72561453,72851698,73143099,73435664,73729402,74024313,74320405,74617685,74916154,75215812,75516667,75818726,76121999,76426484,76732181,77039108,77347256,77656641,77967262,78279129,78592240,78906604,79222230,79539116,79857272,80176696,80497398,80819385,81142657,81467222,81793088,82120256,82448732,82778526,83109637,83442074,83775835,84110931,84447367,84785153,85124288,85464780,85806638,86149862,86494459,86840429,87187789,87536538,87886677,88238222,88591172,88945528,89301305,89658504,90017133,90377199,90738704,91101654,91466057,91831915,92199234,92568024,92938291,93310036,93683267,94057992,94434219,94811948,95191194,95571951,95954234,96338043,96723387,97110272,97498708,97888693,98280245,98673363,99068048,99464315,99862164,100261603,100662641,101065285,101469543,101875416,102282912,102692038,103102802,103515205,103929263,104344975,104762350,105181396,105602112,106024515,106448604,106874396,107301892,107731090,108162006,108594650,109029020,109465134,109902990,110342598,110783964,111227098,111671998,112118682,112567148,113017414,113469479,113923352,114379039,114836550,115295892,115757065,116220086,116684962,117151693,117620296,118090771,118563124,119037366,119513511,119991559,120471520,120953399,121437207,121922950,122410637,122900276,123391866,123885425,124380959,124878477,125377987,125879489,126382999,126888525,127396075,127905649,128417264,128930926,129446645,129964427,130484275,131006202,131530218,132056330,132584546,133114875,133647324,134181910,134718632,135257491,135798510,136341699,136887055,137434597,137984323,138536250,139090393,139646754,140205331,140766142,141329201,141894509,142462082,143031920,143604040,144178440,144755138,145334149,145915473 //Base - Adv Jobs 99,4001:4002:4003:4004:4005:4006:4007:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,0,420,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,6827199,6854507,6881924,6909451,6937088,6964835,6992693,7020663,7048745,7076939,7105246,7133666,7162200,7190848,7219611,7248489,7277482,7306591,7335816,7365158,7394618,7424196,7453892,7483707,7513641,7543695,7573869,7604164,7634580,7665117,7695777,7726559,7757464,7788493,7819646,7850924,7882327,7913855,7945510,7977291,8009199,8041235,8073399,8105692,8138114,8170666,8203348,8236160,8269104,8302179,8335387,8368728,8402202,8435810,8469552,8503429,8537442,8571591,8605876,8640299,8674859,8709557,8744394,8779371,8814488,8849745,8885143,8920683,8956365,8992189,9028157,9064269,9100525,9136926,9173473,9210166,9247006,9283993,9321128,9358412,9395845,9433427,9471160,9509044,9547079,9585266,9623606,9662099,9700746,9739548,9778505,9817618,9856887,9896314,9935898,9975641,10015543,10055604,10095825,10136207,10176751,10217457,10258326,10299358,10340554,10381915,10423442,10465135,10506995,10549022,10591217,10633581,10676114,10718817,10761691,10804737,10847955,10891346,10934910,10978649,11022563,11066652,11110918,11155361,11199981,11244780,11289758,11334916,11380255,11425775,11471477,11517362,11563430,11609683,11656121,11702744,11749554,11796551,11843736,11891110,11938673,11986427,12034372,12082508,12130837,12179359,12228075,12276986,12326093,12375396,12424896,12474594,12524491,12574588,12624885,12675383,12726083,12776986,12828093,12879404,12930920,12982643,13034572,13086709,13139055,13191610,13244375,13297351,13350539,13403940,13457555,13511384,13565428,13619689,13674167,13728862,13783776,13838910,13894264,13949840,14005638,14061659,14117904,14174374,14231070,14287993,14345144,14402523,14460132,14517971,14576042,14634345,14692881,14751651,14810656,14869897,14929375,14989091,15049046,15109241,15169677,15230354,15291274,15352438,15413846,15475500,15537401,15599549,15661946,15724592,15787489,15850638,15914039,15977694,16041603,16105768,16170190,16234869,16299807,16365005,16430464,16496185,16562168,16628415,16694927,16761705,16828750,16896064,16963647,17031501,17099625,17168021,17236691,17305637,17374857,17444354,17514130,17584185,17654519,17725137,17796035,17867219,17938687,18010441,18082480,18154808,18227426,18300334,18373534,18447027,18520815,18594898,18669276,18743952,18818926,18894200,18969775,19045654,19121835,19198322,19275114,19352213,19429619,19507337,19585364,19663704,19742357,19821324,19900608,19980209,20060127,20140367,20220928,20301810,20383016,20464547,20546405,20628588,20711101,20793943,20877118,20960625,21044465,21128640,21213153,21298003,21383194,21468725,21554597,21640813,21727374,21814282,21901538,21989143,22077099,22165407,22254068,22343083,22432455,22522184,22612271,22702719,22793529,22884700,22976237,23068139,23160411,23253052,23346063,23439447,23533204,23627335,23721844,23816730,23911995,24007642,24103671,24200085,24296883,24394070,24491645,24589609,24687965,24786714,24885859,24985402,25085342,25185682,25286423,25387568,25489116,25591071,25693434,25796206,25899389,26002984,26106994,26211420,26316264,26421527,26527212,26633319,26739851,26846810,26954195,27062011,27170258,27278937,27388050,27497600,27607588,27718016,27828886,27940200,28051959,28164166,28276821,28389925,28503482,28617494,28731962,28846888,28962274,29078121,29194430,29311206,29428449,29546160,29664343,29782999,29902130,30021736,30141821,30262385,30383431,30504964,30626982,30749488,30872484,30995972,31119954,31244432,31369408,31494884,31620861,31747341,31874327,32001823,32129829,32258345,32387375,32516923,32646990,32777576,32908684,33040317,33172475,33305164,33438382,33572133,33706418,33841239,33976603,34112508,34248956,34385950,34523494,34661588,34800232,34939431,35079187,35219502,35360380,35501819,35643825,35786397,35929539,36073256,36217547,36362416,36507863,36653893,36800505,36947704,37095492,37243872,37392845,37542413,37692579,37843348,37994719,38146696,38299280,38452475,38606283,38760707,38915748,39071408,39227691,39384600,39542136,39700302,39859103,40018538,40178608,40339320,40500675,40662676,40825324,40988623,41152576,41317184,41482450,41648375,41814967,41982225,42150150,42318750,42488024,42657973,42828601,42999912,43171909,43344593,43517968,43692037,43866801,44042264,44218430,44395303,44572882,44751169,44930170,45109886,45290325,45471482,45653363,45835975,46019317,46203390,46388203,46573754,46760044,46947081,47134865,47323401,47512691,47702740,47893548,48085119,48277458,48470563,48664443,48859099,49054533,49250747,49447748,49645536,49844115,50043489,50243659,50444632,50646407,50848991,51052385,51256590,51461615,51667459,51874127,52081621,52289943,52499101,52709093,52919925,53131600,53344123,53557497,53771723,53986808,54202752,54419560,54637235,54855782,55075204,55295501,55516679,55738743,55961696,56185539,56410279,56635918,56862460,57089906,57318260,57547530,57777715,58008823,58240856,58473816,58707708,58942535,59178303,59415014,59652673,59891279,60130842,60371360,60612842,60855288,61098706,61343095,61588465,61834814,62082152,62330477,62579794,62830107,63081425,63333746,63587075,63841421,64096782,64353167,64610577,64869014,65128488,65388998,65650552,65913150,66176801,66441503,66707266,66974089,67241980,67510948,67780984,68052104,68324308,68597597,68871986,69147468,69424058,69701748,69980547,70260462,70541502,70823666,71106955,71391376,71676937,71963640,72251490,72540490,72830646,73121966,73414452,73708102,74002932,74298935,74596127,74894508,75194086,75494860,75796839,76100023,76404420,76710029,77016868,77324927,77634223,77944756,78256526,78569550,78883826,79199355,79516145,79834204,80153540,80474146,80796036,81119211,81443680,81769450,82096521,82424901,82754599,83085614,83417954,83751619,84086618,84422958,84760647,85099686,85440082,85781835,86124954,86469447,86815321,87162576,87511221,87861264,88212704,88565550,88919809,89275482,89632577,89991101,90351063,90712463,91075309,91439608,91805361,92172576,92541261,92911424,93283064,93656191,94030811,94406926,94784550,95163685,95544337,95926508,96310213,96695451,97082224,97470547,97860421,98251860,98644858,99039430,99435584,99833321,100232648,100633573,101036105,101440243,101845995,102253370,102662376,103073020,103485310,103899247,104314839,104732093,105151018,105571614,105993897,106417866,106843529,107270896,107699974,108130770,108563285,108997535,109433520,109871248,110310727,110751965,111194970,111639742,112086297,112534635,112984764,113436701,113890444,114346003,114803378,115262583,115723628,116186520,116651260,117117863,117586329,118056667,118528884,119002989,119478997,119956909,120436733,120918476,121402147,121887746,122375288,122864782,123356236,123849658,124345048,124842421,125341787,125843144,126346510,126851891,127359289,127868718,128380188,128893706,129409272,129926902,130446604,130968387,131492250,132018210,132546274,133076450,133608746,134143172,134679733,135218439,135759298,136302326,136847522,137394903,137944468,138496234,139050217,139606417,140164834,140725484,141288382,141853530,142420942,142990620,143562579,144136818,144713355,145292205,145873369,146456861,147042683,147630851,148221363,148814237,149409489,150007118,150607140,151209556,151814382,152421633,153031310,153643429,154257989,154875007,155494500,156116465,156740921,157367883,157997351,158629325,159263837,159900887,160540475,161182633,161827362,162474661,163124546,163777033,164432139,165089864,165750206,166413200,167078844,167747154,168418131,169091791,169768150,170447207,171128980,171813483,172500733,173190730,173883490,174579012,175277315,175978412,176682320,177389040,178098587,178810977,179526210,180244303,180965271,181689115,182415867,183145526,183878092,184613598,185352044,186093446,186837804,187585149,188335482,189088820,189845161,190604538,191366952,192132401,192900919,193672505,194447192,195224978,196005865,196789885,197577037,198367337,199160803,199957432,200757259,201560282,202366518,203175967,203988661,204804600,205623815,206446292,207272062,208101141,208933529,209769259,210608330,211450758,212296544,213145719,213998283,214854270,215713678,216576523,217442822,218312576,219185815,220062539,220942782,221826543,222713838,223604683,224499095,225397072,226298648,227203838,228112643,229025078,229941160,230860904,231784327,232711445,233642273,234576829,235515127,236457168,237402984,238352575,239305974,240263179,241224224,242189108,243157847,244130458,245106973,246087391,247071728,248060002 @@ -23,7 +23,7 @@ 10,0:4023,1,4,10,18,28,40,91,151,205,268,340 //Job - 1st Classes & Baby 1st Classes -50,1:2:3:4:5:6:4024:4025:4026:4027:4028:4029:4046:4050,1,30,60,130,260,460,780,1060,1300,1560,1910,2290,2680,2990,3340,3740,4360,4970,5530,6120,6700,8090,8920,9970,11080,12690,14440,15850,17400,19220,21060,22870,24910,26840,29080,31320,33300,37110,40500,43570,46180,53510,57200,60310,65690,70090,72130,77540,83320,90120,97180,99123,101105,103127,105189,107292,109437,111625,113857,116134,118456,120825,123241,125705,128219,130783,133398,136065,138786,141561,144392,147279,150224,153228,156292,159417,162605,165857,169174,172557,176008,179528,183118,186780,190515,194325,198211,202175,206218,210342,214548,218838,223214,227678,232231,236875,241612,246444,251372,256399,261526,266756,272091,277532,283082,288743,294517,300407,306415,312543,318793,325168,331671,338304,345070,351971,359010,366190,373513,380983,388602,396374,404301,412387,420634,429046,437626,446378,455305,464411,473699,483172,492835,502691,512744,522998,533457,544126,555008,566108,577430,588978,600757,612772,625027,637527,650277,663282,676547,690077,703878,717955,732314,746960,761899,777136,792678,808531,824701,841195,858018,875178,892681,910534,928744,947318,966264,985589,1005300,1025405,1045913,1066831,1088167,1109930,1132128,1154770,1177865,1201422,1225450,1249958,1274957,1300456,1326465,1352994,1380053,1407654,1435807,1464523,1493813,1523689,1554162,1585245,1616949,1649287,1682272,1715917,1750235,1785239,1820943,1857361,1894508,1932398,1971045,2010465,2050674,2091687,2133520,2176190,2219713,2264107,2309389,2355576,2402687,2450740,2499754,2549749,2600743,2652757,2705812,2759928,2815126,2871428,2928856,2987433,3047181,3108124,3170286,3233691,3298364,3364331,3431617,3500249,3570253,3641657,3714490,3788779,3864554,3941845,4020681,4101094,4183115,4266777,4352112,4439154,4527936,4618494,4710863,4805080,4901181,4999204,5099187,5201170,5305193,5411296,5519521,5629911 +50,1:2:3:4:5:6:4024:4025:4026:4027:4028:4029:4046:4050:4218,1,30,60,130,260,460,780,1060,1300,1560,1910,2290,2680,2990,3340,3740,4360,4970,5530,6120,6700,8090,8920,9970,11080,12690,14440,15850,17400,19220,21060,22870,24910,26840,29080,31320,33300,37110,40500,43570,46180,53510,57200,60310,65690,70090,72130,77540,83320,90120,97180,99123,101105,103127,105189,107292,109437,111625,113857,116134,118456,120825,123241,125705,128219,130783,133398,136065,138786,141561,144392,147279,150224,153228,156292,159417,162605,165857,169174,172557,176008,179528,183118,186780,190515,194325,198211,202175,206218,210342,214548,218838,223214,227678,232231,236875,241612,246444,251372,256399,261526,266756,272091,277532,283082,288743,294517,300407,306415,312543,318793,325168,331671,338304,345070,351971,359010,366190,373513,380983,388602,396374,404301,412387,420634,429046,437626,446378,455305,464411,473699,483172,492835,502691,512744,522998,533457,544126,555008,566108,577430,588978,600757,612772,625027,637527,650277,663282,676547,690077,703878,717955,732314,746960,761899,777136,792678,808531,824701,841195,858018,875178,892681,910534,928744,947318,966264,985589,1005300,1025405,1045913,1066831,1088167,1109930,1132128,1154770,1177865,1201422,1225450,1249958,1274957,1300456,1326465,1352994,1380053,1407654,1435807,1464523,1493813,1523689,1554162,1585245,1616949,1649287,1682272,1715917,1750235,1785239,1820943,1857361,1894508,1932398,1971045,2010465,2050674,2091687,2133520,2176190,2219713,2264107,2309389,2355576,2402687,2450740,2499754,2549749,2600743,2652757,2705812,2759928,2815126,2871428,2928856,2987433,3047181,3108124,3170286,3233691,3298364,3364331,3431617,3500249,3570253,3641657,3714490,3788779,3864554,3941845,4020681,4101094,4183115,4266777,4352112,4439154,4527936,4618494,4710863,4805080,4901181,4999204,5099187,5201170,5305193,5411296,5519521,5629911 //Job - 2nd Classes & Baby 2nd Classes 50,7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:4030:4031:4032:4033:4034:4035:4036:4037:4038:4039:4040:4041:4042:4043:4044:4051:4052,1,1600,2500,4200,7000,10300,15900,18900,20900,22600,24900,28800,31500,32000,33300,35100,40500,44100,46300,48500,50700,56000,59400,63500,68100,75000,85700,90500,96600,102600,108600,119700,126000,132300,138600,146100,157500,170600,180400,190300,196800,214900,225200,232000,245700,255900,279300,294000,308700,327000,345400,355761,366433,377425,388747,400409,412421,424793,437536,450662,464181,478106,492449,507222,522438,538111,554254,570881,588007,605647,623816,642530,661805,681659,702108,723171,744866,767211,790227,813933,838350,863500,889404,916086,943568,971875,1001031,1031061,1061992,1093851,1126666,1160465,1195278,1231136,1268070,1306112,1345295,1385653,1427222,1470038,1514139,1559563,1606349,1654539,1704175,1755300,1807958,1862196,1918061,1975602,2034870,2095916,2158793,2223556,2290262,2358969,2429738,2502630,2577708,2655039,2734690,2816730,2901231,2988267,3077914,3170251,3265358,3363318,3464217,3568143,3675187,3785442,3899005,4015975,4136454,4260547,4388363,4520013,4655613,4795281,4939139,5087313,5239932,5397129,5559042,5725813,5897587,6074514,6256749,6444451,6637784,6836917,7042024,7253284,7470882,7695008,7925858,8163633,8408541,8660796,8920619,9188237,9463883,9747799,10040232,10341438,10651680,10758196,10865777,10974434,11084178,11195019,11306969,11420038,11534238,11649580,11766075,11883735,12002572,12122597,12243822,12366260,12489922,12614821,12740969,12868378,12997061,13127031,13258301,13390883,13524791,13660038,13796638,13934604,14073949,14214688,14356834,14500402,14645405,14791858,14939776,15089173,15240064,15392464,15546388,15701851,15858869,16017457,16177631,16339407,16502800,16667827,16834505,17002848,17172876,17344604,17518049,17693228,17870160,18048861,18229348,18411641,18595756,18781713,18969528,19159223,19350816,19544323,19739767,19937165,20136535,20337901,20541278,20746690,20954156,21163697,21375332,21589085,21804974,22023023,22243254,22465686,22690342,22917245,23146416,23377879,23611658,23847774,24086251,24327114,24570384,24816087,25064248,25314890,25568038,25823718 diff --git a/db/re/job_db.conf b/db/re/job_db.conf index 6c13fd355..4b036ae93 100644 --- a/db/re/job_db.conf +++ b/db/re/job_db.conf @@ -1732,3 +1732,51 @@ Expanded_Super_Novice: { Expanded_Super_Baby: { Inherit: ("Novice") } +// Summoner HP/SP is not known, below table are generated and near to official HP/SP. +Summoner: { + Weight: 20000 + BaseASPD: { + Fist: 45 + Dagger: 55 + Rod: 55 + Book: 43 + TwoHandRod: 55 + } + HPTable:[ 40, 69, 80, 92, 105, 119, 134, 150, 167, 185, // 1 - 10 + 204, 224, 245, 268, 291, 315, 341, 367, 395, 423, // 11 - 20 + 453, 484, 515, 548, 582, 617, 653, 690, 728, 767, // 21 - 30 + 807, 848, 890, 934, 978, 1023, 1070, 1117, 1166, 1215, // 31 - 40 + 1266, 1317, 1370, 1424, 1479, 1534, 1591, 1649, 1708, 1768, // 41 - 50 + 1829, 1891, 1955, 2019, 2084, 2150, 2218, 2286, 2356, 2426, // 51 - 60 + 2498, 2570, 2644, 2719, 2794, 2871, 2949, 3028, 3108, 3189, // 61 - 70 + 3271, 3354, 3438, 3523, 3610, 3697, 3785, 3875, 3965, 4056, // 71 - 80 + 4149, 4242, 4337, 4433, 4529, 4627, 4726, 4826, 4927, 5029, // 81 - 90 + 5132, 5236, 5341, 5447, 5554, 5662, 5772, 5882, 5993, 6106, // 91 - 100 + 6219, 6334, 6449, 6566, 6684, 6802, 6922, 7043, 7165, 7288, // 101 - 110 + 7412, 7537, 7663, 7790, 7918, 8047, 8177, 8309, 8441, 8574, // 111 - 120 + 8709, 8844, 8981, 9118, 9257, 9397, 9537, 9679, 9822, 9966, // 121 - 130 + 10111, 10257, 10404, 10552, 10701, 10851, 11002, 11155, 11308, 11462, // 131 - 140 + 11618, 11774, 11932, 12090, 12250, 12410, 12572, 12735, 12898, 13063, // 141 - 150 + 13229, 13396, 13564, 13733, 13903, 14074, 14246, 14420, 14594, 14769, // 151 - 160 + 14946, 15123, 15301, 15481, 15661, 15843, 16026, 16209, 16394, 16580, // 161 - 170 + 16767, 16955, 17144, 17334, 17525] // 171 - 175 + + SPTable:[ 8, 10, 13, 15, 18, 20, 23, 25, 28, 30, // 1 - 10 + 33, 35, 38, 40, 43, 45, 48, 50, 53, 55, // 11 - 20 + 58, 60, 63, 65, 68, 70, 73, 75, 78, 80, // 21 - 30 + 83, 85, 88, 90, 93, 95, 98, 100, 103, 105, // 31 - 40 + 108, 110, 113, 115, 118, 120, 123, 125, 128, 130, // 41 - 50 + 133, 135, 138, 140, 143, 145, 148, 150, 153, 155, // 51 - 60 + 158, 160, 163, 165, 168, 170, 173, 175, 178, 180, // 61 - 70 + 183, 185, 188, 190, 193, 195, 198, 200, 203, 205, // 71 - 80 + 208, 210, 213, 215, 218, 220, 223, 225, 228, 230, // 81 - 90 + 233, 235, 238, 240, 243, 245, 248, 250, 253, 255, // 91 - 100 + 258, 260, 263, 265, 268, 270, 273, 275, 278, 280, // 101 - 110 + 283, 285, 288, 290, 293, 295, 298, 300, 303, 305, // 111 - 120 + 308, 310, 313, 315, 318, 320, 323, 325, 328, 330, // 121 - 130 + 333, 335, 338, 340, 343, 345, 348, 350, 353, 355, // 131 - 140 + 358, 360, 363, 365, 368, 370, 373, 375, 378, 380, // 141 - 150 + 383, 385, 388, 390, 393, 395, 398, 400, 403, 405, // 151 - 160 + 408, 410, 413, 415, 418, 420, 423, 425, 428, 430, // 161 - 170 + 433, 435, 438, 440, 443] // 171 - 175 +} diff --git a/doc/item_db.txt b/doc/item_db.txt index 7e637c3c8..ff434ef3c 100644 --- a/doc/item_db.txt +++ b/doc/item_db.txt @@ -45,7 +45,7 @@ item_db: ( Rogue: true/false (boolean, defaults to false) Alchemist: true/false (boolean, defaults to false) Bard: true/false (boolean, defaults to false) - Gunslinger: true/false (boolean, defaults to false) + Gunslinger: true/false (boolean, defaults to false) Ninja: true/false (boolean, defaults to false) Taekwon: true/false (boolean, defaults to false) Star_Gladiator: true/false (boolean, defaults to false) @@ -55,6 +55,7 @@ item_db: ( Dark_Collector: true/false (boolean, defaults to false) Kagerou: true/false (boolean, defaults to false) Rebellion: true/false (boolean, defaults to false) + Summoner: true/false (boolean, defaults to false) } Job: Job mask (alternate synxtax, int, defaults to all jobs = 0xFFFFFFFF) Upper: Upper mask (int, defaults to any = 0x3f) @@ -179,6 +180,7 @@ Job: Job restrictions. If this block is omitted, item can be equipped by all cl Dark Collector (2^28): 0x10000000 Kagerou/Oboro (2^29): 0x20000000 Rebellion (2^30): 0x40000000 + Summoner (2^31): 0x80000000 Some other commonly used values: All except novice: 0xFFFFFFFE All (default value): 0xFFFFFFFF diff --git a/sql-files/main.sql b/sql-files/main.sql index fe25fb100..5eac523ed 100644 --- a/sql-files/main.sql +++ b/sql-files/main.sql @@ -241,6 +241,7 @@ CREATE TABLE IF NOT EXISTS `charlog` ( `account_id` INT(11) NOT NULL DEFAULT '0', `char_id` INT(11) UNSIGNED NOT NULL DEFAULT '0', `char_num` TINYINT(4) NOT NULL DEFAULT '0', + `class` MEDIUMINT(9) NOT NULL DEFAULT '0', `name` VARCHAR(23) NOT NULL DEFAULT '', `str` INT(11) UNSIGNED NOT NULL DEFAULT '0', `agi` INT(11) UNSIGNED NOT NULL DEFAULT '0', @@ -250,7 +251,7 @@ CREATE TABLE IF NOT EXISTS `charlog` ( `luk` INT(11) UNSIGNED NOT NULL DEFAULT '0', `hair` TINYINT(4) NOT NULL DEFAULT '0', `hair_color` INT(11) NOT NULL DEFAULT '0' -) ENGINE=MyISAM; +) ENGINE=MyISAM; -- -- Table structure for table `elemental` @@ -827,6 +828,7 @@ INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1450367880); -- 2015-12-1 INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1457638175); -- 2016-03-10--22-18.sql INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1467934919); -- 2016-07-08--02-42.sql INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1467935469); -- 2016-07-08--02-51.sql +INSERT IGNORE INTO `sql_updates` (`timestamp`) VALUES (1475526420); -- 2016-10-03--20-27.sql -- -- Table structure for table `storage` diff --git a/sql-files/upgrades/2016-10-03--20-27.sql b/sql-files/upgrades/2016-10-03--20-27.sql new file mode 100644 index 000000000..6ad840e05 --- /dev/null +++ b/sql-files/upgrades/2016-10-03--20-27.sql @@ -0,0 +1,23 @@ +#1475526420 + +-- This file is part of Hercules. +-- http://herc.ws - http://github.com/HerculesWS/Hercules +-- +-- Copyright (C) 2015-2016 Hercules Dev Team +-- +-- Hercules is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +ALTER TABLE `charlog` ADD `class` MEDIUMINT(9) NOT NULL DEFAULT '0' AFTER `char_num`; + +INSERT INTO `sql_updates` (`timestamp`) VALUES (1475526420); diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt index b0347ab72..0b1051d76 100644 --- a/sql-files/upgrades/index.txt +++ b/sql-files/upgrades/index.txt @@ -32,3 +32,4 @@ 2016-03-10--22-18.sql 2016-07-08--02-42.sql 2016-07-08--02-51.sql +2016-10-03--20-27.sql diff --git a/src/char/char.c b/src/char/char.c index 4beeff00a..3ce8e9040 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -1591,7 +1591,7 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int // Insert the new char entry to the database if (SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`account_id`, `char_num`, `name`, `class`, `zeny`, `status_point`,`str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`," "`max_sp`, `sp`, `hair`, `hair_color`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`) VALUES (" - "'%d', '%d', '%s', '%d', '%d','%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d', '%s', '%d', '%d', '%s', '%d', '%d')", + "'%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d', '%s', '%d', '%d', '%s', '%d', '%d')", char_db, sd->account_id , slot, esc_name, starting_job, start_zeny, 48, str, agi, vit, int_, dex, luk, (40 * (100 + vit)/100) , (40 * (100 + vit)/100 ), (11 * (100 + int_)/100), (11 * (100 + int_)/100), hair_style, hair_color, mapindex_id2name(start_point.map), start_point.x, start_point.y, mapindex_id2name(start_point.map), start_point.x, start_point.y) ) @@ -1603,7 +1603,7 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int //Insert the new char entry to the database if( SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`account_id`, `char_num`, `name`, `class`, `zeny`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `max_hp`, `hp`," "`max_sp`, `sp`, `hair`, `hair_color`, `last_map`, `last_x`, `last_y`, `save_map`, `save_x`, `save_y`) VALUES (" - "'%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d', '%s', '%d', '%d', '%s', '%d', '%d')", + "'%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d','%d', '%d','%d', '%d', '%s', '%d', '%d', '%s', '%d', '%d')", char_db, sd->account_id , slot, esc_name, starting_job, start_zeny, str, agi, vit, int_, dex, luk, (40 * (100 + vit)/100) , (40 * (100 + vit)/100 ), (11 * (100 + int_)/100), (11 * (100 + int_)/100), hair_style, hair_color, mapindex_id2name(start_point.map), start_point.x, start_point.y, mapindex_id2name(start_point.map), start_point.x, start_point.y) ) @@ -1622,7 +1622,7 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int if (chr->enable_logs) { if (SQL_ERROR == SQL->Query(inter->sql_handle, "INSERT INTO `%s` (`time`, `char_msg`, `account_id`, `char_id`, `char_num`, `class`, `name`, `str`, `agi`, `vit`, `int`, `dex`, `luk`, `hair`, `hair_color`)" - "VALUES (NOW(), '%s', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')", + "VALUES (NOW(), '%s', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')", charlog_db, "make new char", sd->account_id, char_id, slot, starting_job, esc_name, str, agi, vit, int_, dex, luk, hair_style, hair_color)) Sql_ShowDebug(inter->sql_handle); } @@ -4656,7 +4656,7 @@ void char_parse_char_create_new_char(int fd, struct char_session_data* sd) } #if PACKETVER >= 20151001 RFIFOSKIP(fd, 36); -#if PACKETVER >= 20120307 +#elif PACKETVER >= 20120307 RFIFOSKIP(fd, 31); #else RFIFOSKIP(fd, 37); diff --git a/src/char/inter.c b/src/char/inter.c index 05f2bf4f6..fd3fe8c16 100644 --- a/src/char/inter.c +++ b/src/char/inter.c @@ -389,6 +389,9 @@ const char* inter_job_name(int class_) case JOB_REBELLION: return inter->msg_txt(655); + case JOB_SUMMONER: + return inter->msg_txt(669); + default: return inter->msg_txt(620); // "Unknown Job" } diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 2e44393fe..97f302b80 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -437,6 +437,9 @@ void itemdb_jobid2mapid(uint64 *bclass, int job_id, bool enable) case JOB_REBELLION: mask[1] = 1ULL << MAPID_GUNSLINGER; break; + case JOB_SUMMONER: + mask[0] = 1ULL << MAPID_SUMMONER; + break; // Other Classes case JOB_GANGSI: //Bongun/Munak mask[0] = 1ULL << MAPID_GANGSI; @@ -538,6 +541,8 @@ void itemdb_jobmask2mapid(uint64 *bclass, uint64 jobmask) bclass[1] |= 1ULL<sktree.second = sd->sktree.third = 0; // limit 1st class and above to novice job levels - if(skill_point < novice_skills) { + if(skill_point < novice_skills && (sd->class_&MAPID_BASEMASK) != MAPID_SUMMONER) { c = MAPID_NOVICE; } // limit 2nd class and above to first class job levels (super novices are exempt) @@ -5881,6 +5881,7 @@ int pc_jobid2mapid(unsigned short b_class) case JOB_XMAS: return MAPID_XMAS; case JOB_SUMMER: return MAPID_SUMMER; case JOB_GANGSI: return MAPID_GANGSI; + case JOB_SUMMONER: return MAPID_SUMMONER; //2-1 Jobs case JOB_SUPER_NOVICE: return MAPID_SUPER_NOVICE; case JOB_KNIGHT: return MAPID_KNIGHT; @@ -6023,6 +6024,7 @@ int pc_mapid2jobid(unsigned short class_, int sex) case MAPID_XMAS: return JOB_XMAS; case MAPID_SUMMER: return JOB_SUMMER; case MAPID_GANGSI: return JOB_GANGSI; + case MAPID_SUMMONER: return JOB_SUMMONER; //2-1 Jobs case MAPID_SUPER_NOVICE: return JOB_SUPER_NOVICE; case MAPID_KNIGHT: return JOB_KNIGHT; @@ -6362,6 +6364,9 @@ const char* job_name(int class_) case JOB_REBELLION: return msg_txt(655); + case JOB_SUMMONER: + return msg_txt(669); + default: return msg_txt(620); // "Unknown Job" } @@ -6487,6 +6492,7 @@ int pc_check_job_name(const char *name) { { "Kagerou", JOB_KAGEROU }, { "Oboro", JOB_OBORO }, { "Rebellion", JOB_REBELLION }, + { "Summoner", JOB_SUMMONER }, }; nullpo_retr(-1, name); @@ -11644,7 +11650,8 @@ bool pc_db_checkid(unsigned int class_) || (class_ >= JOB_BABY_RUNE && class_ <= JOB_BABY_MECHANIC2 ) || (class_ >= JOB_SUPER_NOVICE_E && class_ <= JOB_SUPER_BABY_E ) || (class_ >= JOB_KAGEROU && class_ <= JOB_OBORO ) - || (class_ >= JOB_REBELLION && class_ < JOB_MAX ); + || (class_ == JOB_REBELLION) + || (class_ >= JOB_SUMMONER && class_ < JOB_MAX ); } /** -- cgit v1.2.3-70-g09d2 From 7c72c942d52915cb7c5c9692bd927772ad34bcca Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 20:24:09 +0530 Subject: Added Summoner Skills(in DB) Added Summoner SC ID's in status.h --- db/constants.conf | 12 + db/pre-re/skill_db.conf | 812 ++++++++++++++++++++++++++++++++++++++++++++-- db/pre-re/skill_tree.conf | 90 +++++ db/re/skill_db.conf | 812 ++++++++++++++++++++++++++++++++++++++++++++-- db/re/skill_tree.conf | 90 +++++ src/map/skill.h | 45 +++ src/map/status.h | 32 +- 7 files changed, 1841 insertions(+), 52 deletions(-) diff --git a/db/constants.conf b/db/constants.conf index b271a14e0..09c0fa9e4 100644 --- a/db/constants.conf +++ b/db/constants.conf @@ -1383,6 +1383,18 @@ constants_db: { SC_G_LIFEPOTION: 640 SC_MYSTICPOWDER: 641 + // Summoner + SC_SUHIDE: 642 + SC_SU_STOOP: 643 + SC_SPRITEMABLE: 644 + SC_CATNIPPOWDER: 645 + SC_SV_ROOTTWIST: 646 + SC_BITESCAR: 647 + SC_ARCLOUSEDASH: 648 + SC_TUNAPARTY: 649 + SC_SHRIMP: 650 + SC_FRESHSHRIMP: 651 + comment__: "Emotes" e_gasp: 0 e_what: 1 diff --git a/db/pre-re/skill_db.conf b/db/pre-re/skill_db.conf index a8a58924a..9a9b64038 100644 --- a/db/pre-re/skill_db.conf +++ b/db/pre-re/skill_db.conf @@ -32172,10 +32172,37 @@ skill_db: ( } }, { - Id: 5015 - Name: "SR_FLASHCOMBO_ATK_STEP1" - Description: "Flash Combo Attack Step 1" - MaxLevel: 5 + Id: 5018 + Name: "SU_BASIC_SKILL" + Description: "New Basic Skill" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5019 + Name: "SU_BITE" + Description: "Bite" + MaxLevel: 1 + Range: 2 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + InterruptCast: true + CastTime: 1000 + AfterCastActDelay: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: 10 + } +}, +{ + Id: 5020 + Name: "SU_HIDE" + Description: "Hide" + MaxLevel: 1 Hit: "BDT_SKILL" SkillType: { Self: true @@ -32183,15 +32210,67 @@ skill_db: ( DamageType: { NoDamage: true } + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: -1 + CoolDown: 15000 + FixedCastTime: 0 Requirements: { - SPCost: 1 + SPCost: 30 } }, { - Id: 5016 - Name: "SR_FLASHCOMBO_ATK_STEP2" - Description: "Flash Combo Attack Step 2" - MaxLevel: 5 + Id: 5021 + Name: "SU_SCRATCH" + Description: "Scratch" + MaxLevel: 3 + Range: 2 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + DamageType: { + SplashArea: true + } + SplashRange: 1 + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: 10000 + CoolDown: { + Lv1: 3000 + Lv2: 2000 + Lv3: 1000 + Lv4: 1 + Lv5: 1 + Lv6: 1 + Lv7: 1 + Lv8: 1 + Lv9: 1 + Lv10: 1 + } + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 25 + Lv3: 30 + Lv4: 35 + Lv5: 40 + Lv6: 45 + Lv7: 50 + Lv8: 55 + Lv9: 60 + Lv10: 65 + } + } +}, +{ + Id: 5022 + Name: "SU_STOOP" + Description: "Stoop" + MaxLevel: 1 Hit: "BDT_SKILL" SkillType: { Self: true @@ -32199,41 +32278,732 @@ skill_db: ( DamageType: { NoDamage: true } + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: 6000 + CoolDown: 15000 + FixedCastTime: 0 Requirements: { - SPCost: 1 + SPCost: 10 } }, { - Id: 5017 - Name: "SR_FLASHCOMBO_ATK_STEP3" - Description: "Flash Combo Attack Step 3" - MaxLevel: 5 + Id: 5023 + Name: "SU_LOPE" + Description: "Lope" + MaxLevel: 3 + Range: { + Lv1: 6 + Lv2: 10 + Lv3: 14 + Lv4: 18 + Lv5: 22 + Lv6: 26 + Lv7: 30 + Lv8: 34 + Lv9: 38 + Lv10: 42 + } Hit: "BDT_SKILL" SkillType: { - Self: true + Place: true } DamageType: { NoDamage: true } + InterruptCast: true + CastTime: 500 + AfterCastActDelay: 1000 + CoolDown: { + Lv1: 2000 + Lv2: 4000 + Lv3: 6000 + Lv4: 8000 + Lv5: 10000 + Lv6: 12000 + Lv7: 14000 + Lv8: 16000 + Lv9: 18000 + Lv10: 20000 + } + FixedCastTime: 0 Requirements: { - SPCost: 1 + SPCost: { + Lv1: 30 + Lv2: 30 + Lv3: 30 + Lv4: 30 + Lv5: 30 + Lv6: 30 + Lv7: 30 + Lv8: 30 + Lv9: 30 + Lv10: 30 + } } }, { - Id: 5018 - Name: "SR_FLASHCOMBO_ATK_STEP4" - Description: "Flash Combo Attack Step 4" + Id: 5024 + Name: "SU_SPRITEMABLE" + Description: "Spirit Marble" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5025 + Name: "SU_POWEROFLAND" + Description: "Power of Land" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5026 + Name: "SU_SV_STEMSPEAR" + Description: "Silvervine Stem Spear" MaxLevel: 5 + Range: 9 Hit: "BDT_SKILL" SkillType: { - Self: true + Enemy: true + } + AttackType: "Magic" + Element: { + Lv1: "Ele_Earth" + Lv2: "Ele_Fire" + Lv3: "Ele_Water" + Lv4: "Ele_Wind" + Lv5: "Ele_Ghost" + } + InterruptCast: true + CastTime: 2500 + AfterCastActDelay: 1000 + SkillData1: 10000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 40 + Lv2: 40 + Lv3: 40 + Lv4: 40 + Lv5: 40 + Lv6: 40 + Lv7: 40 + Lv8: 40 + Lv9: 40 + Lv10: 40 + } + } +}, +{ + Id: 5027 + Name: "SU_CN_POWDERING" + Description: "Catnip Powdering" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true } DamageType: { NoDamage: true + SplashArea: true + } + SplashRange: { + Lv1: 3 + Lv2: 3 + Lv3: 5 + Lv4: 5 + Lv5: 7 + } + InterruptCast: true + SkillInstances: 1 + CastTime: 1500 + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 3000 + Lv2: 4000 + Lv3: 5000 + Lv4: 6000 + Lv5: 7000 } + FixedCastTime: 0 Requirements: { - SPCost: 1 + SPCost: { + Lv1: 40 + Lv2: 36 + Lv3: 32 + Lv4: 28 + Lv5: 24 + } + Items: { + Catnip_Fruit: 1 + } + } + Unit: { + Id: 0x106 + Layout: { + Lv1: 1 + Lv2: 1 + Lv3: 2 + Lv4: 2 + Lv5: 3 + } + Interval: -1 + Target: "Enemy" + Flag: { + UF_PATHCHECK: true + UF_RANGEDSINGLEUNIT: true + } + } +}, +{ + Id: 5028 + Name: "SU_CN_METEOR" + Description: "Catnip Meteor" + MaxLevel: 5 + Range: 9 + Hit: "BDT_MULTIHIT" + SkillType: { + Place: true + } + AttackType: "Magic" + SplashRange: { + Lv1: 3 + Lv2: 3 + Lv3: 5 + Lv4: 5 + Lv5: 7 + } + NumberOfHits: { + Lv1: 1 + Lv2: 2 + Lv3: 3 + Lv4: 4 + Lv5: 5 + } + InterruptCast: true + CastTime: 6000 + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 1500 + Lv2: 2000 + Lv3: 2500 + Lv4: 3000 + Lv5: 3500 + } + SkillData2: 20000 + CoolDown: { + Lv1: 2000 + Lv2: 3000 + Lv3: 4000 + Lv4: 5000 + Lv5: 6000 + + } + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 35 + Lv3: 50 + Lv4: 65 + Lv5: 80 + } + Items: { + Catnip_Fruit: 1 + } } + Unit: { + Id: 0x86 + Range: 1 + Interval: 500 + Target: "Enemy" + Flag: { + UF_PATHCHECK: true + } + } +}, +{ + Id: 5029 + Name: "SU_SV_ROOTTWIST" + Description: "Silvervine Root Twist" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + DamageType: { + NoDamage: true + } + InterruptCast: true + SkillInstances: 1 + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 7000 + Lv2: 9000 + Lv3: 11000 + Lv4: 13000 + Lv5: 15000 + Lv6: 17000 + Lv7: 19000 + Lv8: 21000 + Lv9: 23000 + Lv10: 25000 + } + CoolDown: 3000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 10 + Lv2: 12 + Lv3: 14 + Lv4: 16 + Lv5: 18 + Lv6: 20 + Lv7: 22 + Lv8: 24 + Lv9: 26 + Lv10: 28 + } + } + Unit: { + Id: 0x107 + Interval: 1000 + Target: "Enemy" + Flag: { + UF_PATHCHECK: true + } + } +}, +{ + Id: 5030 + Name: "SU_SV_ROOTTWIST_ATK" + Description: "Silver Vine Root Twist Attack" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + AttackType: "Magic" + Element: "Ele_Poison" + DamageType: { + IgnoreElement: true + IgnoreDefense: true + } + SkillInstances: 1 + AfterCastActDelay: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: 1 + } +}, +{ + Id: 5031 + Name: "SU_POWEROFLIFE" + Description: "Power of Life" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5032 + Name: "SU_SCAROFTAROU" + Description: "Scar of Tarou" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + InterruptCast: true + CastTime: 500 + AfterCastActDelay: 1000 + SkillData1: 9000 + SkillData2: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 10 + Lv2: 14 + Lv3: 18 + Lv4: 22 + Lv5: 26 + Lv6: 30 + Lv7: 34 + Lv8: 38 + Lv9: 42 + Lv10: 46 + } + } +}, +{ + Id: 5033 + Name: "SU_PICKYPECK" + Description: "Picky Peck" + MaxLevel: 5 + Range: 9 + Hit: "BDT_MULTIHIT" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + NumberOfHits: -5 + InterruptCast: true + CastTime: 2500 + AfterCastActDelay: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 10 + Lv2: 19 + Lv3: 28 + Lv4: 37 + Lv5: 46 + Lv6: 55 + Lv7: 64 + Lv8: 73 + Lv9: 82 + Lv10: 91 + } + } +}, +{ + Id: 5034 + Name: "SU_PICKYPECK_DOUBLE_ATK" + Description: "Picky Peck Double Attack" + MaxLevel: 5 + Hit: "BDT_MULTIHIT" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + NumberOfHits: -5 + InterruptCast: true + AfterCastActDelay: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: 1 + } +}, +{ + Id: 5035 + Name: "SU_ARCLOUSEDASH" + Description: "Arclouse Dash" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Friend: true + } + DamageType: { + NoDamage: true + } + InterruptCast: true + CastTime: 2500 + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 60000 + Lv2: 70000 + Lv3: 80000 + Lv4: 90000 + Lv5: 100000 + Lv6: 110000 + Lv7: 120000 + Lv8: 130000 + Lv9: 140000 + Lv10: 150000 + } + CoolDown: 10000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 12 + Lv2: 20 + Lv3: 28 + Lv4: 36 + Lv5: 44 + Lv6: 52 + Lv7: 60 + Lv8: 68 + Lv9: 76 + Lv10: 84 + } + } +}, +{ + Id: 5036 + Name: "SU_LUNATICCARROTBEAT" + Description: "Lunatic Carrot Beat" + MaxLevel: 5 + Range: 9 + Hit: "BDT_MULTIHIT" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + DamageType: { + SplashArea: true + } + SplashRange: { + Lv1: 1 + Lv2: 1 + Lv3: 2 + Lv4: 2 + Lv5: 3 + Lv6: 3 + Lv7: 4 + Lv8: 4 + Lv9: 5 + Lv10: 5 + } + NumberOfHits: { + Lv1: 1 + Lv2: 2 + Lv3: 3 + Lv4: 4 + Lv5: 5 + Lv6: 6 + Lv7: 7 + Lv8: 8 + Lv9: 9 + Lv10: 10 + } + InterruptCast: true + CastTime: 3000 + AfterCastActDelay: 1000 + SkillData1: 1000 + CoolDown: 8000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 15 + Lv2: 25 + Lv3: 35 + Lv4: 45 + Lv5: 55 + Lv6: 65 + Lv7: 75 + Lv8: 85 + Lv9: 95 + Lv10: 105 + } + } +}, +{ + Id: 5037 + Name: "SU_POWEROFSEA" + Description: "Power of Sea" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5038 + Name: "SU_TUNABELLY" + Description: "Tuna Belly" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Friend: true + } + DamageType: { + NoDamage: true + } + InterruptCast: true + CastTime: 2000 + AfterCastActDelay: 1000 + CoolDown: { + Lv1: 8000 + Lv2: 10000 + Lv3: 12000 + Lv4: 14000 + Lv5: 16000 + Lv6: 18000 + Lv7: 20000 + Lv8: 22000 + Lv9: 24000 + Lv10: 26000 + } + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 30 + Lv3: 40 + Lv4: 50 + Lv5: 60 + Lv6: 70 + Lv7: 80 + Lv8: 90 + Lv9: 100 + Lv10: 110 + } + } +}, +{ + Id: 5039 + Name: "SU_TUNAPARTY" + Description: "Tuna Party" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Friend: true + } + DamageType: { + NoDamage: true + } + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: 30000 + CoolDown: 20000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 30 + Lv3: 40 + Lv4: 50 + Lv5: 60 + Lv6: 70 + Lv7: 80 + Lv8: 90 + Lv9: 100 + Lv10: 110 + } + } +}, +{ + Id: 5040 + Name: "SU_BUNCHOFSHRIMP" + Description: "Bunch of Shrimp" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Self: true + } + DamageType: { + NoDamage: true + SplashArea: true + } + SplashRange: -1 + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 60000 + Lv2: 90000 + Lv3: 120000 + Lv4: 150000 + Lv5: 180000 + Lv6: 210000 + Lv7: 240000 + Lv8: 270000 + Lv9: 300000 + Lv10: 330000 + } + CoolDown: 10000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 44 + Lv2: 48 + Lv3: 52 + Lv4: 56 + Lv5: 60 + Lv6: 64 + Lv7: 68 + Lv8: 72 + Lv9: 76 + Lv10: 80 + } + Items: { + Prawn: 1 + } + + } +}, +{ + Id: 5041 + Name: "SU_FRESHSHRIMP" + Description: "Fresh Shrimp" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Friend: true + } + DamageType: { + NoDamage: true + SplashArea: true + } + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: 120000 + CoolDown: 7000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 22 + Lv2: 24 + Lv3: 26 + Lv4: 28 + Lv5: 30 + Lv6: 32 + Lv7: 34 + Lv8: 36 + Lv9: 38 + Lv10: 40 + } + } +}, +{ + Id: 5042 + Name: "SU_CN_METEOR_ATK" + Description: "" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Place: true + } + SkillInfo: { + Chorus: true + } + AttackType: "Magic" + InterruptCast: true + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 35 + Lv3: 50 + Lv4: 65 + Lv5: 80 + } + Items: { + Catnip_Fruit: 1 + } + } +}, +{ + Id: 5043 + Name: "SU_LUNATICCARROTBEAT2" + Description: "Lunatic Carrot Beat 2" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + SkillInfo: { + Chorus: true + } + AttackType: "Weapon" + InterruptCast: true + Requirements: { + SPCost: 1 + } }, { Id: 8001 diff --git a/db/pre-re/skill_tree.conf b/db/pre-re/skill_tree.conf index 805e7929c..00fc6c915 100644 --- a/db/pre-re/skill_tree.conf +++ b/db/pre-re/skill_tree.conf @@ -3955,3 +3955,93 @@ Rebellion: { } } } + +Summoner: { + skills: { + SU_BASIC_SKILL: 1 + SU_BITE: { + MaxLevel: 1 + SU_BASIC_SKILL: 1 + } + SU_HIDE: { + MaxLevel: 1 + SU_BITE: 1 + } + SU_SCRATCH: { + MaxLevel: 3 + SU_HIDE: 1 + } + SU_STOOP: { + MaxLevel: 1 + SU_SCRATCH: 3 + } + SU_LOPE: { + MaxLevel: 3 + SU_STOOP: 1 + } + SU_SPRITEMABLE: { + MaxLevel: 1 + SU_LOPE: 3 + } + SU_POWEROFLAND: { + MaxLevel: 1 + SU_CN_POWDERING: 3 + } + SU_SV_STEMSPEAR: { + MaxLevel: 5 + SU_SPRITEMABLE: 1 + } + SU_CN_POWDERING: { + MaxLevel: 5 + SU_CN_METEOR: 3 + } + SU_CN_METEOR: { + MaxLevel: 5 + SU_SV_ROOTTWIST: 3 + } + SU_SV_ROOTTWIST: { + MaxLevel: 5 + SU_SV_STEMSPEAR: 3 + } + SU_POWEROFLIFE: { + MaxLevel: 1 + SU_LUNATICCARROTBEAT: 3 + } + SU_SCAROFTAROU: { + MaxLevel: 5 + SU_SV_ROOTTWIST: 3 + } + SU_PICKYPECK: { + MaxLevel: 5 + SU_SPRITEMABLE: 1 + } + SU_ARCLOUSEDASH: { + MaxLevel: 5 + SU_PICKYPECK: 3 + } + SU_LUNATICCARROTBEAT: { + MaxLevel: 5 + SU_SCAROFTAROU: 3 + } + SU_POWEROFSEA: { + MaxLevel: 1 + SU_TUNAPARTY: 3 + } + SU_TUNABELLY: { + MaxLevel: 5 + SU_BUNCHOFSHRIMP: 3 + } + SU_TUNAPARTY: { + MaxLevel: 5 + SU_TUNABELLY: 3 + } + SU_BUNCHOFSHRIMP: { + MaxLevel: 5 + SU_FRESHSHRIMP: 3 + } + SU_FRESHSHRIMP: { + MaxLevel: 5 + SU_SPRITEMABLE: 1 + } + } +} diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 7503428fc..505aa2603 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -33026,10 +33026,37 @@ skill_db: ( } }, { - Id: 5015 - Name: "SR_FLASHCOMBO_ATK_STEP1" - Description: "Flash Combo Attack Step 1" - MaxLevel: 5 + Id: 5018 + Name: "SU_BASIC_SKILL" + Description: "New Basic Skill" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5019 + Name: "SU_BITE" + Description: "Bite" + MaxLevel: 1 + Range: 2 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + InterruptCast: true + CastTime: 1000 + AfterCastActDelay: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: 10 + } +}, +{ + Id: 5020 + Name: "SU_HIDE" + Description: "Hide" + MaxLevel: 1 Hit: "BDT_SKILL" SkillType: { Self: true @@ -33037,15 +33064,67 @@ skill_db: ( DamageType: { NoDamage: true } + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: -1 + CoolDown: 15000 + FixedCastTime: 0 Requirements: { - SPCost: 1 + SPCost: 30 } }, { - Id: 5016 - Name: "SR_FLASHCOMBO_ATK_STEP2" - Description: "Flash Combo Attack Step 2" - MaxLevel: 5 + Id: 5021 + Name: "SU_SCRATCH" + Description: "Scratch" + MaxLevel: 3 + Range: 2 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + DamageType: { + SplashArea: true + } + SplashRange: 1 + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: 10000 + CoolDown: { + Lv1: 3000 + Lv2: 2000 + Lv3: 1000 + Lv4: 1 + Lv5: 1 + Lv6: 1 + Lv7: 1 + Lv8: 1 + Lv9: 1 + Lv10: 1 + } + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 25 + Lv3: 30 + Lv4: 35 + Lv5: 40 + Lv6: 45 + Lv7: 50 + Lv8: 55 + Lv9: 60 + Lv10: 65 + } + } +}, +{ + Id: 5022 + Name: "SU_STOOP" + Description: "Stoop" + MaxLevel: 1 Hit: "BDT_SKILL" SkillType: { Self: true @@ -33053,41 +33132,732 @@ skill_db: ( DamageType: { NoDamage: true } + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: 6000 + CoolDown: 15000 + FixedCastTime: 0 Requirements: { - SPCost: 1 + SPCost: 10 } }, { - Id: 5017 - Name: "SR_FLASHCOMBO_ATK_STEP3" - Description: "Flash Combo Attack Step 3" - MaxLevel: 5 + Id: 5023 + Name: "SU_LOPE" + Description: "Lope" + MaxLevel: 3 + Range: { + Lv1: 6 + Lv2: 10 + Lv3: 14 + Lv4: 18 + Lv5: 22 + Lv6: 26 + Lv7: 30 + Lv8: 34 + Lv9: 38 + Lv10: 42 + } Hit: "BDT_SKILL" SkillType: { - Self: true + Place: true } DamageType: { NoDamage: true } + InterruptCast: true + CastTime: 500 + AfterCastActDelay: 1000 + CoolDown: { + Lv1: 2000 + Lv2: 4000 + Lv3: 6000 + Lv4: 8000 + Lv5: 10000 + Lv6: 12000 + Lv7: 14000 + Lv8: 16000 + Lv9: 18000 + Lv10: 20000 + } + FixedCastTime: 0 Requirements: { - SPCost: 1 + SPCost: { + Lv1: 30 + Lv2: 30 + Lv3: 30 + Lv4: 30 + Lv5: 30 + Lv6: 30 + Lv7: 30 + Lv8: 30 + Lv9: 30 + Lv10: 30 + } } }, { - Id: 5018 - Name: "SR_FLASHCOMBO_ATK_STEP4" - Description: "Flash Combo Attack Step 4" + Id: 5024 + Name: "SU_SPRITEMABLE" + Description: "Spirit Marble" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5025 + Name: "SU_POWEROFLAND" + Description: "Power of Land" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5026 + Name: "SU_SV_STEMSPEAR" + Description: "Silvervine Stem Spear" MaxLevel: 5 + Range: 9 Hit: "BDT_SKILL" SkillType: { - Self: true + Enemy: true + } + AttackType: "Magic" + Element: { + Lv1: "Ele_Earth" + Lv2: "Ele_Fire" + Lv3: "Ele_Water" + Lv4: "Ele_Wind" + Lv5: "Ele_Ghost" + } + InterruptCast: true + CastTime: 2500 + AfterCastActDelay: 1000 + SkillData1: 10000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 40 + Lv2: 40 + Lv3: 40 + Lv4: 40 + Lv5: 40 + Lv6: 40 + Lv7: 40 + Lv8: 40 + Lv9: 40 + Lv10: 40 + } + } +}, +{ + Id: 5027 + Name: "SU_CN_POWDERING" + Description: "Catnip Powdering" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true } DamageType: { NoDamage: true + SplashArea: true + } + SplashRange: { + Lv1: 3 + Lv2: 3 + Lv3: 5 + Lv4: 5 + Lv5: 7 + } + InterruptCast: true + SkillInstances: 1 + CastTime: 1500 + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 3000 + Lv2: 4000 + Lv3: 5000 + Lv4: 6000 + Lv5: 7000 } + FixedCastTime: 0 Requirements: { - SPCost: 1 + SPCost: { + Lv1: 40 + Lv2: 36 + Lv3: 32 + Lv4: 28 + Lv5: 24 + } + Items: { + Catnip_Fruit: 1 + } + } + Unit: { + Id: 0x106 + Layout: { + Lv1: 1 + Lv2: 1 + Lv3: 2 + Lv4: 2 + Lv5: 3 + } + Interval: -1 + Target: "Enemy" + Flag: { + UF_PATHCHECK: true + UF_RANGEDSINGLEUNIT: true + } + } +}, +{ + Id: 5028 + Name: "SU_CN_METEOR" + Description: "Catnip Meteor" + MaxLevel: 5 + Range: 9 + Hit: "BDT_MULTIHIT" + SkillType: { + Place: true + } + AttackType: "Magic" + SplashRange: { + Lv1: 3 + Lv2: 3 + Lv3: 5 + Lv4: 5 + Lv5: 7 + } + NumberOfHits: { + Lv1: 1 + Lv2: 2 + Lv3: 3 + Lv4: 4 + Lv5: 5 + } + InterruptCast: true + CastTime: 6000 + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 1500 + Lv2: 2000 + Lv3: 2500 + Lv4: 3000 + Lv5: 3500 + } + SkillData2: 20000 + CoolDown: { + Lv1: 2000 + Lv2: 3000 + Lv3: 4000 + Lv4: 5000 + Lv5: 6000 + } + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 35 + Lv3: 50 + Lv4: 65 + Lv5: 80 + } + Items: { + Catnip_Fruit: 1 + } + } + Unit: { + Id: 0x86 + Range: 1 + Interval: 500 + Target: "Enemy" + Flag: { + UF_PATHCHECK: true + } + } +}, +{ + Id: 5029 + Name: "SU_SV_ROOTTWIST" + Description: "Silvervine Root Twist" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + DamageType: { + NoDamage: true + } + InterruptCast: true + SkillInstances: 1 + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 7000 + Lv2: 9000 + Lv3: 11000 + Lv4: 13000 + Lv5: 15000 + Lv6: 17000 + Lv7: 19000 + Lv8: 21000 + Lv9: 23000 + Lv10: 25000 + } + CoolDown: 3000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 10 + Lv2: 12 + Lv3: 14 + Lv4: 16 + Lv5: 18 + Lv6: 20 + Lv7: 22 + Lv8: 24 + Lv9: 26 + Lv10: 28 + } + } + Unit: { + Id: 0x107 + Interval: 1000 + Target: "Enemy" + Flag: { + UF_PATHCHECK: true + } + } +}, +{ + Id: 5030 + Name: "SU_SV_ROOTTWIST_ATK" + Description: "Silver Vine Root Twist Attack" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + AttackType: "Magic" + Element: "Ele_Poison" + DamageType: { + IgnoreElement: true + IgnoreDefense: true + } + SkillInstances: 1 + AfterCastActDelay: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: 1 + } +}, +{ + Id: 5031 + Name: "SU_POWEROFLIFE" + Description: "Power of Life" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5032 + Name: "SU_SCAROFTAROU" + Description: "Scar of Tarou" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + InterruptCast: true + CastTime: 500 + AfterCastActDelay: 1000 + SkillData1: 9000 + SkillData2: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 10 + Lv2: 14 + Lv3: 18 + Lv4: 22 + Lv5: 26 + Lv6: 30 + Lv7: 34 + Lv8: 38 + Lv9: 42 + Lv10: 46 + } + } +}, +{ + Id: 5033 + Name: "SU_PICKYPECK" + Description: "Picky Peck" + MaxLevel: 5 + Range: 9 + Hit: "BDT_MULTIHIT" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + NumberOfHits: -5 + InterruptCast: true + CastTime: 2500 + AfterCastActDelay: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 10 + Lv2: 19 + Lv3: 28 + Lv4: 37 + Lv5: 46 + Lv6: 55 + Lv7: 64 + Lv8: 73 + Lv9: 82 + Lv10: 91 + } + } +}, +{ + Id: 5034 + Name: "SU_PICKYPECK_DOUBLE_ATK" + Description: "Picky Peck Double Attack" + MaxLevel: 5 + Hit: "BDT_MULTIHIT" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + NumberOfHits: -5 + InterruptCast: true + AfterCastActDelay: 1000 + FixedCastTime: 0 + Requirements: { + SPCost: 1 + } +}, +{ + Id: 5035 + Name: "SU_ARCLOUSEDASH" + Description: "Arclouse Dash" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Friend: true + } + DamageType: { + NoDamage: true + } + InterruptCast: true + CastTime: 2500 + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 60000 + Lv2: 70000 + Lv3: 80000 + Lv4: 90000 + Lv5: 100000 + Lv6: 110000 + Lv7: 120000 + Lv8: 130000 + Lv9: 140000 + Lv10: 150000 + } + CoolDown: 10000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 12 + Lv2: 20 + Lv3: 28 + Lv4: 36 + Lv5: 44 + Lv6: 52 + Lv7: 60 + Lv8: 68 + Lv9: 76 + Lv10: 84 + } + } +}, +{ + Id: 5036 + Name: "SU_LUNATICCARROTBEAT" + Description: "Lunatic Carrot Beat" + MaxLevel: 5 + Range: 9 + Hit: "BDT_MULTIHIT" + SkillType: { + Enemy: true + } + AttackType: "Weapon" + Element: "Ele_Weapon" + DamageType: { + SplashArea: true + } + SplashRange: { + Lv1: 1 + Lv2: 1 + Lv3: 2 + Lv4: 2 + Lv5: 3 + Lv6: 3 + Lv7: 4 + Lv8: 4 + Lv9: 5 + Lv10: 5 + } + NumberOfHits: { + Lv1: 1 + Lv2: 2 + Lv3: 3 + Lv4: 4 + Lv5: 5 + Lv6: 6 + Lv7: 7 + Lv8: 8 + Lv9: 9 + Lv10: 10 + } + InterruptCast: true + CastTime: 3000 + AfterCastActDelay: 1000 + SkillData1: 1000 + CoolDown: 8000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 15 + Lv2: 25 + Lv3: 35 + Lv4: 45 + Lv5: 55 + Lv6: 65 + Lv7: 75 + Lv8: 85 + Lv9: 95 + Lv10: 105 + } + } +}, +{ + Id: 5037 + Name: "SU_POWEROFSEA" + Description: "Power of Sea" + MaxLevel: 1 + NumberOfHits: 0 +}, +{ + Id: 5038 + Name: "SU_TUNABELLY" + Description: "Tuna Belly" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Friend: true + } + DamageType: { + NoDamage: true + } + InterruptCast: true + CastTime: 2000 + AfterCastActDelay: 1000 + CoolDown: { + Lv1: 8000 + Lv2: 10000 + Lv3: 12000 + Lv4: 14000 + Lv5: 16000 + Lv6: 18000 + Lv7: 20000 + Lv8: 22000 + Lv9: 24000 + Lv10: 26000 + } + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 30 + Lv3: 40 + Lv4: 50 + Lv5: 60 + Lv6: 70 + Lv7: 80 + Lv8: 90 + Lv9: 100 + Lv10: 110 + } + } +}, +{ + Id: 5039 + Name: "SU_TUNAPARTY" + Description: "Tuna Party" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Friend: true + } + DamageType: { + NoDamage: true + } + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: 30000 + CoolDown: 20000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 30 + Lv3: 40 + Lv4: 50 + Lv5: 60 + Lv6: 70 + Lv7: 80 + Lv8: 90 + Lv9: 100 + Lv10: 110 + } + } +}, +{ + Id: 5040 + Name: "SU_BUNCHOFSHRIMP" + Description: "Bunch of Shrimp" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Self: true + } + DamageType: { + NoDamage: true + SplashArea: true + } + SplashRange: -1 + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: { + Lv1: 60000 + Lv2: 90000 + Lv3: 120000 + Lv4: 150000 + Lv5: 180000 + Lv6: 210000 + Lv7: 240000 + Lv8: 270000 + Lv9: 300000 + Lv10: 330000 + } + CoolDown: 10000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 44 + Lv2: 48 + Lv3: 52 + Lv4: 56 + Lv5: 60 + Lv6: 64 + Lv7: 68 + Lv8: 72 + Lv9: 76 + Lv10: 80 + } + Items: { + Prawn: 1 + } + + } +}, +{ + Id: 5041 + Name: "SU_FRESHSHRIMP" + Description: "Fresh Shrimp" + MaxLevel: 5 + Range: 9 + Hit: "BDT_SKILL" + SkillType: { + Friend: true + } + DamageType: { + NoDamage: true + SplashArea: true + } + InterruptCast: true + AfterCastActDelay: 1000 + SkillData1: 120000 + CoolDown: 7000 + FixedCastTime: 0 + Requirements: { + SPCost: { + Lv1: 22 + Lv2: 24 + Lv3: 26 + Lv4: 28 + Lv5: 30 + Lv6: 32 + Lv7: 34 + Lv8: 36 + Lv9: 38 + Lv10: 40 + } + } +}, +{ + Id: 5042 + Name: "SU_CN_METEOR_ATK" + Description: "" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Place: true + } + SkillInfo: { + Chorus: true + } + AttackType: "Magic" + InterruptCast: true + Requirements: { + SPCost: { + Lv1: 20 + Lv2: 35 + Lv3: 50 + Lv4: 65 + Lv5: 80 + } + Items: { + Catnip_Fruit: 1 + } + } +}, +{ + Id: 5043 + Name: "SU_LUNATICCARROTBEAT2" + Description: "Lunatic Carrot Beat 2" + MaxLevel: 5 + Hit: "BDT_SKILL" + SkillType: { + Enemy: true + } + SkillInfo: { + Chorus: true + } + AttackType: "Weapon" + InterruptCast: true + Requirements: { + SPCost: 1 + } }, { Id: 8001 diff --git a/db/re/skill_tree.conf b/db/re/skill_tree.conf index 6e040420b..e9feb2111 100644 --- a/db/re/skill_tree.conf +++ b/db/re/skill_tree.conf @@ -3952,3 +3952,93 @@ Rebellion: { } } } + +Summoner: { + skills: { + SU_BASIC_SKILL: 1 + SU_BITE: { + MaxLevel: 1 + SU_BASIC_SKILL: 1 + } + SU_HIDE: { + MaxLevel: 1 + SU_BITE: 1 + } + SU_SCRATCH: { + MaxLevel: 3 + SU_HIDE: 1 + } + SU_STOOP: { + MaxLevel: 1 + SU_SCRATCH: 3 + } + SU_LOPE: { + MaxLevel: 3 + SU_STOOP: 1 + } + SU_SPRITEMABLE: { + MaxLevel: 1 + SU_LOPE: 3 + } + SU_POWEROFLAND: { + MaxLevel: 1 + SU_CN_POWDERING: 3 + } + SU_SV_STEMSPEAR: { + MaxLevel: 5 + SU_SPRITEMABLE: 1 + } + SU_CN_POWDERING: { + MaxLevel: 5 + SU_CN_METEOR: 3 + } + SU_CN_METEOR: { + MaxLevel: 5 + SU_SV_ROOTTWIST: 3 + } + SU_SV_ROOTTWIST: { + MaxLevel: 5 + SU_SV_STEMSPEAR: 3 + } + SU_POWEROFLIFE: { + MaxLevel: 1 + SU_LUNATICCARROTBEAT: 3 + } + SU_SCAROFTAROU: { + MaxLevel: 5 + SU_SV_ROOTTWIST: 3 + } + SU_PICKYPECK: { + MaxLevel: 5 + SU_SPRITEMABLE: 1 + } + SU_ARCLOUSEDASH: { + MaxLevel: 5 + SU_PICKYPECK: 3 + } + SU_LUNATICCARROTBEAT: { + MaxLevel: 5 + SU_SCAROFTAROU: 3 + } + SU_POWEROFSEA: { + MaxLevel: 1 + SU_TUNAPARTY: 3 + } + SU_TUNABELLY: { + MaxLevel: 5 + SU_BUNCHOFSHRIMP: 3 + } + SU_TUNAPARTY: { + MaxLevel: 5 + SU_TUNABELLY: 3 + } + SU_BUNCHOFSHRIMP: { + MaxLevel: 5 + SU_FRESHSHRIMP: 3 + } + SU_FRESHSHRIMP: { + MaxLevel: 5 + SU_SPRITEMABLE: 1 + } + } +} diff --git a/src/map/skill.h b/src/map/skill.h index c7761b082..6cc4d32ff 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -1365,6 +1365,10 @@ enum e_skill { ITEM_OPTION_SPLASH_ATTACK, GM_FORCE_TRANSFER, GM_WIDE_RESURRECTION, + ALL_NIFLHEIM_RECALL, + ALL_PRONTERA_RECALL, + ALL_GLASTHEIM_RECALL, + ALL_THANATOS_RECALL, GC_DARKCROW = 5001, RA_UNLIMIT, @@ -1382,6 +1386,47 @@ enum e_skill { ALL_FULL_THROTTLE, NC_MAGMA_ERUPTION_DOTDAMAGE, + /** Summoner */ + SU_BASIC_SKILL = 5018, + SU_BITE, + SU_HIDE, + SU_SCRATCH, + SU_STOOP, + SU_LOPE, + SU_SPRITEMABLE, + SU_POWEROFLAND, + SU_SV_STEMSPEAR, + SU_CN_POWDERING, + SU_CN_METEOR, + SU_SV_ROOTTWIST, + SU_SV_ROOTTWIST_ATK, + SU_POWEROFLIFE, + SU_SCAROFTAROU, + SU_PICKYPECK, + SU_PICKYPECK_DOUBLE_ATK, + SU_ARCLOUSEDASH, + SU_LUNATICCARROTBEAT, + SU_POWEROFSEA, + SU_TUNABELLY, + SU_TUNAPARTY, + SU_BUNCHOFSHRIMP, + SU_FRESHSHRIMP, + SU_CN_METEOR2, + SU_LUNATICCARROTBEAT2, + SU_SOULATTACK, + SU_POWEROFFLOCK, + SU_SVG_SPIRIT, + SU_HISS, + SU_NYANGGRASS, + SU_GROOMING, + SU_PURRING, + SU_SHRIMPARTY, + SU_SPIRITOFLIFE, + SU_MEOWMEOW, + SU_SPIRITOFLAND, + SU_CHATTERING, + SU_SPIRITOFSEA, + HLIF_HEAL = 8001, HLIF_AVOID, HLIF_BRAIN, diff --git a/src/map/status.h b/src/map/status.h index e4a326e88..b16539015 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -828,6 +828,18 @@ typedef enum sc_type { SC_M_LIFEPOTION, SC_G_LIFEPOTION, // 640 SC_MYSTICPOWDER, + + // Summoner + SC_SUHIDE, + SC_SU_STOOP, + SC_SPRITEMABLE, + SC_CATNIPPOWDER, + SC_SV_ROOTTWIST, + SC_BITESCAR, + SC_ARCLOUSEDASH, + SC_TUNAPARTY, + SC_SHRIMP, // 650 + SC_FRESHSHRIMP, #ifndef SC_MAX SC_MAX, //Automatically updated max, used in for's to check we are within bounds. #endif @@ -1747,10 +1759,10 @@ enum si_type { //SI_HEALTHSTATE_HEAVYPOISON = 890, //SI_HEALTHSTATE_FEAR = 891, //SI_CHERRY_BLOSSOM_CAKE = 892, - //SI_SU_STOOP = 893, - //SI_CATNIPPOWDER = 894, + SI_SU_STOOP = 893, + SI_CATNIPPOWDER = 894, SI_BLOSSOM_FLUTTERING = 895, - //SI_SV_ROOTTWIST = 896, + SI_SV_ROOTTWIST = 896, //SI_ATTACK_PROPERTY_NOTHING = 897, //SI_ATTACK_PROPERTY_WATER = 898, //SI_ATTACK_PROPERTY_GROUND = 899, @@ -1772,11 +1784,11 @@ enum si_type { //SI_RESIST_PROPERTY_DARKNESS = 914, //SI_RESIST_PROPERTY_TELEKINESIS = 915, //SI_RESIST_PROPERTY_UNDEAD = 916, - //SI_BITESCAR = 917, - //SI_ARCLOUSEDASH = 918, - //SI_TUNAPARTY = 919, - //SI_SHRIMP = 920, - //SI_FRESHSHRIMP = 921, + SI_BITESCAR = 917, + SI_ARCLOUSEDASH = 918, + SI_TUNAPARTY = 919, + SI_SHRIMP = 920, + SI_FRESHSHRIMP = 921, //SI_PERIOD_RECEIVEITEM = 922, //SI_PERIOD_PLUSEXP = 923, //SI_PERIOD_PLUSJOBEXP = 924, @@ -1788,11 +1800,11 @@ enum si_type { //SI_HELM_ISIA = 930, //SI_HELM_ASIR = 931, //SI_HELM_URJ = 932, - //SI_SUHIDE = 933, + SI_SUHIDE = 933, //SI_ = 934, //SI_DORAM_BUF_01 = 935, //SI_DORAM_BUF_02 = 936, - //SI_SPRITEMABLE = 937, + SI_SPRITEMABLE = 937, //SI_EP16_2_BUFF_SS = 963, //SI_EP16_2_BUFF_SC = 964, //SI_EP16_2_BUFF_AC = 965, -- cgit v1.2.3-70-g09d2 From 473ba564829a6d0153e320d1f302754442648ec7 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 20:37:54 +0530 Subject: Implemented SU_BASIC_SKILL Skill of Summoner Added Function for Basic Skills check. --- npc/kafras/functions_kafras.txt | 5 +++-- src/map/clif.c | 12 ++++++------ src/map/pc.c | 18 +++++++++++++++++- src/map/pc.h | 1 + 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/npc/kafras/functions_kafras.txt b/npc/kafras/functions_kafras.txt index 54db666e6..e1e547174 100644 --- a/npc/kafras/functions_kafras.txt +++ b/npc/kafras/functions_kafras.txt @@ -10,6 +10,7 @@ //= http://herc.ws - http://github.com/HerculesWS/Hercules //= //= Copyright (C) 2012-2015 Hercules Dev Team +//= Copyright (C) Dastgir //= Copyright (C) Haru //= Copyright (C) rAthena Dev Team //= Copyright (C) Euphy @@ -47,7 +48,7 @@ //= These functions handle save, storage, cart rental, teleport, and Free //= Teleport/Warp/Rent Cart options for all Kafra NPCs. //================= Current Version ======================================= -//= 6.8 +//= 6.9 //========================================================================= //== Main Function ========================================= @@ -210,7 +211,7 @@ function script F_KafStor { close; } // Unable to access Normal Storage (Insufficient Basic Skills) - if (basicskillcheck() && getskilllv(NV_BASIC) < 6) { + if (basicskillcheck() && getskilllv(NV_BASIC) < 6 && getskilllv(SU_BASIC_SKILL) == 0) { mes getarg(3); // Niflheim Specific Message if (getarg(2) == 1) { diff --git a/src/map/clif.c b/src/map/clif.c index b92c3185f..ecd95135b 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -10055,7 +10055,7 @@ void clif_parse_Emotion(int fd, struct map_session_data *sd) { int emoticon = RFIFOB(fd,packet_db[RFIFOW(fd,0)].pos[0]); - if (battle_config.basic_skill_check == 0 || pc->checkskill(sd, NV_BASIC) >= 2) { + if (battle_config.basic_skill_check == 0 || pc->check_basicskill(sd, 2)) { if (emoticon == E_MUTE) {// prevent use of the mute emote [Valaris] clif->skill_fail(sd, 1, USESKILL_FAIL_LEVEL, 1); return; @@ -10155,7 +10155,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, } break; case 0x02: // sitdown - if (battle_config.basic_skill_check && pc->checkskill(sd, NV_BASIC) < 3) { + if (battle_config.basic_skill_check && !pc->check_basicskill(sd, 3)) { clif->skill_fail(sd, 1, USESKILL_FAIL_LEVEL, 2); break; } @@ -10760,7 +10760,7 @@ void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd) if (pc_ismuted(&sd->sc, MANNER_NOROOM)) return; - if(battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 4) { + if(battle_config.basic_skill_check && !pc->check_basicskill(sd, 4)) { clif->skill_fail(sd,1,USESKILL_FAIL_LEVEL,3); return; } @@ -10877,7 +10877,7 @@ void clif_parse_TradeRequest(int fd,struct map_session_data *sd) { return; } - if( battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 1) { + if( battle_config.basic_skill_check && !pc->check_basicskill(sd, 1)) { clif->skill_fail(sd,1,USESKILL_FAIL_LEVEL,0); return; } @@ -11923,7 +11923,7 @@ void clif_parse_CreateParty(int fd, struct map_session_data *sd) clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map. return; } - if( battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 7 ) { + if (battle_config.basic_skill_check && !pc->check_basicskill(sd, 7)) { clif->skill_fail(sd,1,USESKILL_FAIL_LEVEL,4); return; } @@ -11945,7 +11945,7 @@ void clif_parse_CreateParty2(int fd, struct map_session_data *sd) clif->message(fd, msg_fd(fd,227)); // Party modification is disabled in this map. return; } - if( battle_config.basic_skill_check && pc->checkskill(sd,NV_BASIC) < 7 ) { + if (battle_config.basic_skill_check && !pc->check_basicskill(sd, 7)) { clif->skill_fail(sd,1,USESKILL_FAIL_LEVEL,4); return; } diff --git a/src/map/pc.c b/src/map/pc.c index b6f2d375d..a0d9d5812 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -7428,7 +7428,9 @@ int pc_resetskill(struct map_session_data* sd, int flag) } // do not reset basic skill - if( skill_id == NV_BASIC && (sd->class_&(MAPID_BASEMASK|JOBL_2)) != MAPID_NOVICE ) + if (skill_id == NV_BASIC && (sd->class_&(MAPID_BASEMASK|JOBL_2)) != MAPID_NOVICE) + continue; + if (skill_id == SU_BASIC_SKILL && (sd->class_&MAPID_BASEMASK) != MAPID_SUMMONER) continue; if( sd->status.skill[i].flag == SKILL_FLAG_PERM_GRANTED ) @@ -11668,6 +11670,18 @@ int pc_have_magnifier(struct map_session_data *sd) return n; } +/** + * Checks if player have basic skills learned. + * @param sd Player Data + * @param level Required Level of Novice Skill + * @return bool true, if requirement is satisfied + */ +bool pc_check_basicskill(struct map_session_data *sd, int level) { + if (pc->checkskill(sd, NV_BASIC) >= level || pc->checkskill(sd, SU_BASIC_SKILL)) + return true; + return false; +} + /** * Verifies a chat message, searching for atcommands, checking if the sender * character can chat, and updating the idle timer. @@ -12124,4 +12138,6 @@ void pc_defaults(void) { pc->update_idle_time = pc_update_idle_time; pc->have_magnifier = pc_have_magnifier; + + pc->check_basicskill = pc_check_basicskill; } diff --git a/src/map/pc.h b/src/map/pc.h index fd446813f..2d6ca48a0 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -1094,6 +1094,7 @@ END_ZEROED_BLOCK; /* End */ bool (*process_chat_message) (struct map_session_data *sd, const char *message); void (*check_supernovice_call) (struct map_session_data *sd, const char *message); + bool (*check_basicskill) (struct map_session_data *sd, int level); }; #ifdef HERCULES_CORE -- cgit v1.2.3-70-g09d2 From 95915440c030610068bf87ed583ee595bba1a836 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 20:42:13 +0530 Subject: Implemented SU_BITE Skill: Lv.1: Atk+ 200% BaseLevel 30: Adds a Chance to Reactive the skill. Every 30 Base Levels: Increases the chance to reactive the skill. --- src/map/battle.c | 10 ++++++++-- src/map/skill.c | 8 +++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index 67ab8c9b8..fabad4460 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1666,8 +1666,14 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block break; #endif /** - * Arch Bishop - **/ + * Summoner + **/ + case SU_BITE: + skillratio += 100; + break; + /** + * Arch Bishop + **/ case AB_JUDEX: skillratio = 300 + 20 * skill_lv; RE_LVL_DMOD(100); diff --git a/src/map/skill.c b/src/map/skill.c index 2559a7a5b..3b1b8c947 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3961,7 +3961,13 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 skill->attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag); break; - //Splash attack skills. + case SU_BITE: + skill->attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag); + if (status->get_lv(src) >= 30 && (rnd() % 100 < (int)(status->get_lv(src) / 30) + 10)) // TODO: Need activation chance. + skill->addtimerskill(src, tick + skill->get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag); + break; + + // Splash attack skills. case AS_GRIMTOOTH: case MC_CARTREVOLUTION: case NPC_SPLASHATTACK: -- cgit v1.2.3-70-g09d2 From dad2f5b2ec24745287db1b068021ce6d859510b1 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 20:58:32 +0530 Subject: Implemented SU_HIDE Skill. Transforms into Bush. --- src/map/clif.c | 12 ++++++------ src/map/pc.c | 1 + src/map/skill.c | 17 +++++++++++++++-- src/map/status.c | 8 ++++++++ src/map/unit.c | 2 ++ 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/map/clif.c b/src/map/clif.c index ecd95135b..424d94205 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9819,11 +9819,9 @@ void clif_parse_QuitGame(int fd, struct map_session_data *sd) __attribute__((non void clif_parse_QuitGame(int fd, struct map_session_data *sd) { /* Rovert's prevent logout option fixed [Valaris] */ - if( !sd->sc.data[SC_CLOAKING] && !sd->sc.data[SC_HIDING] && !sd->sc.data[SC_CHASEWALK] && !sd->sc.data[SC_CLOAKINGEXCEED] && !sd->sc.data[SC__INVISIBILITY] && - (!battle_config.prevent_logout || DIFF_TICK(timer->gettick(), sd->canlog_tick) > battle_config.prevent_logout) ) - { + if (!sd->sc.data[SC_CLOAKING] && !sd->sc.data[SC_HIDING] && !sd->sc.data[SC_CHASEWALK] && !sd->sc.data[SC_CLOAKINGEXCEED] && !sd->sc.data[SC__INVISIBILITY] && !sd->sc.data[SC_SUHIDE] && + (!battle_config.prevent_logout || DIFF_TICK(timer->gettick(), sd->canlog_tick) > battle_config.prevent_logout)) { sockt->eof(fd); - clif->disconnect_ack(sd, 0); } else { clif->disconnect_ack(sd, 1); @@ -10115,7 +10113,8 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, sd->sc.data[SC_TRICKDEAD] || (sd->sc.data[SC_AUTOCOUNTER] && action_type != 0x07) || sd->sc.data[SC_BLADESTOP] || - sd->sc.data[SC_DEEP_SLEEP] ) + sd->sc.data[SC_DEEP_SLEEP] || + sd->sc.data[SC_SUHIDE] ) ) return; @@ -10240,7 +10239,7 @@ void clif_parse_Restart(int fd, struct map_session_data *sd) { case 0x01: /* Rovert's Prevent logout option - Fixed [Valaris] */ if (!sd->sc.data[SC_CLOAKING] && !sd->sc.data[SC_HIDING] && !sd->sc.data[SC_CHASEWALK] - && !sd->sc.data[SC_CLOAKINGEXCEED] && !sd->sc.data[SC__INVISIBILITY] + && !sd->sc.data[SC_CLOAKINGEXCEED] && !sd->sc.data[SC__INVISIBILITY] && !sd->sc.data[SC_SUHIDE] && (!battle_config.prevent_logout || DIFF_TICK(timer->gettick(), sd->canlog_tick) > battle_config.prevent_logout) ) { //Send to char-server for character selection. @@ -10428,6 +10427,7 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) sd->sc.data[SC_TRICKDEAD] || sd->sc.data[SC_BLADESTOP] || sd->sc.data[SC_CLOAKINGEXCEED] || + sd->sc.data[SC_SUHIDE] || pc_ismuted(&sd->sc, MANNER_NOITEM) ) ) break; diff --git a/src/map/pc.c b/src/map/pc.c index a0d9d5812..09f805d82 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4965,6 +4965,7 @@ int pc_useitem(struct map_session_data *sd,int n) { sd->sc.data[SC_DEEP_SLEEP] || sd->sc.data[SC_SATURDAY_NIGHT_FEVER] || sd->sc.data[SC_COLD] || + sd->sc.data[SC_SUHIDE] || pc_ismuted(&sd->sc, MANNER_NOITEM) )) return 0; diff --git a/src/map/skill.c b/src/map/skill.c index 3b1b8c947..637c8cdc9 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -9458,6 +9458,17 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin clif->skill_damage(src,bl,tick, status_get_amotion(src), 0, 0, 1, skill_id, -2, BDT_SKILL); break; + case SU_HIDE: + if (tsce) { + clif->skill_nodamage(src,bl,skill_id,skill_lv,1); + status_change_end(bl, type, INVALID_TIMER); + map->freeblock_unlock(); + return 0; + } + clif->skill_nodamage(src,bl,skill_id,skill_lv,1); + sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)); + break; + case GM_SANDMAN: if( tsc ) { if( tsc->opt1 == OPT1_SLEEP ) @@ -13348,7 +13359,8 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id case SG_FUSION: case RA_WUGDASH: case KO_YAMIKUMO: - if( sc && sc->data[status->skill2sc(skill_id)] ) + case SU_HIDE: + if (sc && sc->data[status->skill2sc(skill_id)]) return 1; FALLTHROUGH default: @@ -14560,7 +14572,8 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16 case TK_READYTURN: case SG_FUSION: case KO_YAMIKUMO: - if( sc && sc->data[status->skill2sc(skill_id)] ) + case SU_HIDE: + if (sc && sc->data[status->skill2sc(skill_id)]) return req; /* Fall through */ default: diff --git a/src/map/status.c b/src/map/status.c index 37efe1f93..a2a9a5e24 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -719,6 +719,11 @@ void initChangeTables(void) status->set_sc( GN_FIRE_EXPANSION_TEAR_GAS , SC_FIRE_EXPANSION_TEAR_GAS , SI_FIRE_EXPANSION_TEAR_GAS , SCB_NONE ); status->set_sc( GN_MANDRAGORA , SC_MANDRAGORA , SI_MANDRAGORA , SCB_INT ); + /** + * Summoner + */ + status->set_sc(SU_HIDE, SC_SUHIDE, SI_SUHIDE, SCB_SPEED); + // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); status->set_sc( EL_FIRE_CLOAK , SC_FIRE_CLOAK_OPTION , SI_FIRE_CLOAK_OPTION , SCB_ALL ); @@ -1347,6 +1352,7 @@ int status_damage(struct block_list *src,struct block_list *target,int64 in_hp, status_change_end(target, SC_CLOAKING, INVALID_TIMER); status_change_end(target, SC_CHASEWALK, INVALID_TIMER); status_change_end(target, SC_CAMOUFLAGE, INVALID_TIMER); + status_change_end(target, SC_SUHIDE, INVALID_TIMER); if ((sce=sc->data[SC_ENDURE]) && !sce->val4 && !sc->data[SC_LKCONCENTRATION]) { //Endure count is only reduced by non-players on non-gvg maps. //val4 signals infinite endure. [Skotlex] @@ -1802,6 +1808,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, uin (sc->data[SC_TRICKDEAD] && skill_id != NV_TRICKDEAD) || (sc->data[SC_AUTOCOUNTER] && !flag && skill_id) || (sc->data[SC_GOSPEL] && sc->data[SC_GOSPEL]->val4 == BCT_SELF && skill_id != PA_GOSPEL) + || (sc->data[SC_SUHIDE] && skill_id != SU_HIDE) ) return 0; @@ -9980,6 +9987,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_CAMOUFLAGE: case SC_SIREN: case SC_ALL_RIDING: + case SC_SUHIDE: unit->stop_attack(bl); break; case SC_SILENCE: diff --git a/src/map/unit.c b/src/map/unit.c index 5364a9547..bb43bdf82 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1127,6 +1127,7 @@ int unit_can_move(struct block_list *bl) || sc->data[SC_VACUUM_EXTREME] || (sc->data[SC_FEAR] && sc->data[SC_FEAR]->val2 > 0) || sc->data[SC_NETHERWORLD] + || sc->data[SC_SUHIDE] || (sc->data[SC_SPIDERWEB] && sc->data[SC_SPIDERWEB]->val1) || (sc->data[SC_CLOAKING] && sc->data[SC_CLOAKING]->val1 < 3 && !(sc->data[SC_CLOAKING]->val4&1)) //Need wall at level 1-2 || ( @@ -2464,6 +2465,7 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i status_change_end(bl, SC_VACUUM_EXTREME, INVALID_TIMER); status_change_end(bl, SC_CURSEDCIRCLE_ATKER, INVALID_TIMER); //callme before warp status_change_end(bl, SC_NETHERWORLD, INVALID_TIMER); + status_change_end(bl, SC_SUHIDE, INVALID_TIMER); } if (bl->type&(BL_CHAR|BL_PET)) { -- cgit v1.2.3-70-g09d2 From 7b270b403ea24811305631d55da5f9d30252ca85 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:03:02 +0530 Subject: Implemented SU_SCRATCH: Max Level: 3 Attack Increases by 50+(50+Level)% Base Level >= 30: Activates a Chance to cast skill again. Every 30 Base Level: Increases the chance to cast skill again. --- src/map/battle.c | 3 +++ src/map/skill.c | 14 ++++++++++++-- src/map/status.c | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index fabad4460..538f47bb0 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1671,6 +1671,9 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block case SU_BITE: skillratio += 100; break; + case SU_SCRATCH: + skillratio += -50 + 50 * skill_lv; + break; /** * Arch Bishop **/ diff --git a/src/map/skill.c b/src/map/skill.c index 637c8cdc9..5efe74825 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1415,6 +1415,12 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case MH_XENO_SLASHER: sc_start2(src, bl, SC_BLOODING, 10 * skill_lv, skill_lv, src->id, skill->get_time(skill_id,skill_lv)); break; + /** + * Summoner + */ + case SU_SCRATCH: + sc_start2(src, bl, SC_BLOODING, (skill_lv * 3), skill_lv, src->id, skill->get_time(skill_id, skill_lv)); // TODO: What's the chance/time? + break; default: skill->additional_effect_unknown(src, bl, &skill_id, &skill_lv, &attack_type, &dmg_lv, &tick); break; @@ -4020,7 +4026,8 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 case KO_BAKURETSU: case GN_ILLUSIONDOPING: case MH_XENO_SLASHER: - if( flag&1 ) {//Recursive invocation + case SU_SCRATCH: + if (flag&1) { //Recursive invocation // skill->area_temp[0] holds number of targets in area // skill->area_temp[1] holds the id of the original target // skill->area_temp[2] counts how many targets have already been processed @@ -4035,15 +4042,18 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 break; heal = skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag); - if( skill_id == NPC_VAMPIRE_GIFT && heal > 0 ) { + if (skill_id == NPC_VAMPIRE_GIFT && heal > 0) { clif->skill_nodamage(NULL, src, AL_HEAL, heal, 1); status->heal(src,heal,0,0); } + if (skill_id == SU_SCRATCH && status->get_lv(src) >= 30 && (rnd() % 100 < (int)(status->get_lv(src) / 30) + 10)) // TODO: Need activation chance. + skill->addtimerskill(src, tick + skill->get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag); } else { switch ( skill_id ) { case NJ_BAKUENRYU: case LG_EARTHDRIVE: case GN_CARTCANNON: + case SU_SCRATCH: clif->skill_nodamage(src,bl,skill_id,skill_lv,1); break; case SR_TIGERCANNON: diff --git a/src/map/status.c b/src/map/status.c index a2a9a5e24..cde02d2bc 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -723,6 +723,7 @@ void initChangeTables(void) * Summoner */ status->set_sc(SU_HIDE, SC_SUHIDE, SI_SUHIDE, SCB_SPEED); + add_sc(SU_SCRATCH, SC_BLOODING); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); -- cgit v1.2.3-70-g09d2 From 72cd2379541e67f1fbb3fd88132cbabb61874647 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:08:34 +0530 Subject: Implemented SU_STOOP Skill. Reduces Incoming Damange by 90% for 6 seconds. When Knock Back, the effect disappears. --- src/map/battle.c | 3 +++ src/map/map.c | 1 + src/map/skill.c | 10 ++++++++++ src/map/status.c | 1 + 4 files changed, 15 insertions(+) diff --git a/src/map/battle.c b/src/map/battle.c index 538f47bb0..37e06a6ba 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3077,6 +3077,9 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam damage -= 50 * damage / 100;//50% reduction to physical ranged attacks } + if (sc->data[SC_SU_STOOP]) + damage -= damage * 90 / 100; + // Compressed code, fixed by map.h [Epoque] if (src->type == BL_MOB) { const struct mob_data *md = BL_UCCAST(BL_MOB, src); diff --git a/src/map/map.c b/src/map/map.c index 0a60a92b4..4eebafde0 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -337,6 +337,7 @@ int map_moveblock(struct block_list *bl, int x1, int y1, int64 tick) { //status_change_end(bl, SC_BLADESTOP, INVALID_TIMER); //Won't stop when you are knocked away, go figure... status_change_end(bl, SC_NJ_TATAMIGAESHI, INVALID_TIMER); status_change_end(bl, SC_MAGICROD, INVALID_TIMER); + status_change_end(bl, SC_SU_STOOP, INVALID_TIMER); if (sc && sc->data[SC_PROPERTYWALK] && sc->data[SC_PROPERTYWALK]->val3 >= skill->get_maxcount(sc->data[SC_PROPERTYWALK]->val1,sc->data[SC_PROPERTYWALK]->val2) ) status_change_end(bl,SC_PROPERTYWALK,INVALID_TIMER); diff --git a/src/map/skill.c b/src/map/skill.c index 5efe74825..4d901236a 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2141,6 +2141,9 @@ int skill_blown(struct block_list* src, struct block_list* target, int count, in dy = -diry[dir]; } + if (tsc && tsc->data[SC_SU_STOOP]) // Any knockback will cancel it. + status_change_end(target, SC_SU_STOOP, INVALID_TIMER); + return unit->blown(target, dx, dy, count, flag); // send over the proper flag } @@ -6023,6 +6026,13 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin clif->skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv))); break; + // Works just like the above list of skills, except animation caused by + // status must trigger AFTER the skill cast animation or it will cancel + // out the status's animation. + case SU_STOOP: + clif->skill_nodamage(src,bl,skill_id,skill_lv,1); + sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)); + break; case KN_AUTOCOUNTER: sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)); skill->addtimerskill(src, tick + 100, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag); diff --git a/src/map/status.c b/src/map/status.c index cde02d2bc..8a8cf123e 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -724,6 +724,7 @@ void initChangeTables(void) */ status->set_sc(SU_HIDE, SC_SUHIDE, SI_SUHIDE, SCB_SPEED); add_sc(SU_SCRATCH, SC_BLOODING); + status->set_sc(SU_STOOP, SC_SU_STOOP, SI_SU_STOOP, SCB_NONE); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); -- cgit v1.2.3-70-g09d2 From af8ecd8af6a33b598844decff9b021bd07c931ce Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:13:46 +0530 Subject: Implemented SU_LOPE Skill. Skill Cannot be Used on GvG/Battlegrounds. Cast time of Emergency Call doubles. Moves to Another Position by performing High Jump: Lv 1: Move 6 cells Lv 2: Move 10 cells Lv 3: Move 14 cells --- db/pre-re/map_zone_db.conf | 2 ++ db/re/map_zone_db.conf | 2 ++ src/map/skill.c | 13 +++++++++++++ src/map/unit.c | 2 +- 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/db/pre-re/map_zone_db.conf b/db/pre-re/map_zone_db.conf index 0a02e9240..cab00bbb9 100644 --- a/db/pre-re/map_zone_db.conf +++ b/db/pre-re/map_zone_db.conf @@ -159,6 +159,7 @@ zones: ( BS_GREED: "PLAYER" SC_FATALMENACE: "PLAYER" SC_DIMENSIONDOOR: "PLAYER" + SU_LOPE: "PLAYER" } disabled_items: { @@ -225,6 +226,7 @@ zones: ( CASH_ASSUMPTIO: "PLAYER" SC_FATALMENACE: "PLAYER" SC_DIMENSIONDOOR: "PLAYER" + SU_LOPE: "PLAYER" } disabled_items: { Assumptio_5_Scroll: true diff --git a/db/re/map_zone_db.conf b/db/re/map_zone_db.conf index df223d139..282a85abb 100644 --- a/db/re/map_zone_db.conf +++ b/db/re/map_zone_db.conf @@ -193,6 +193,7 @@ zones: ( BS_GREED: "PLAYER" SC_FATALMENACE: "PLAYER" SC_DIMENSIONDOOR: "PLAYER" + SU_LOPE: "PLAYER" } disabled_items: { @@ -292,6 +293,7 @@ zones: ( CASH_ASSUMPTIO: "PLAYER" SC_FATALMENACE: "PLAYER" SC_DIMENSIONDOOR: "PLAYER" + SU_LOPE: "PLAYER" } disabled_items: { Assumptio_5_Scroll: true diff --git a/src/map/skill.c b/src/map/skill.c index 4d901236a..bb3b11218 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -10686,6 +10686,19 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui } status_change_end(src, SC_HIDING, INVALID_TIMER); break; + case SU_LOPE: + { + if (map->list[src->m].flag.noteleport && !(map->list[src->m].flag.battleground || map_flag_gvg2(src->m))) { + x = src->x; + y = src->y; + } + clif->skill_nodamage(src, src, SU_LOPE, skill_lv, 1); + if(!map->count_oncell(src->m, x, y, BL_PC | BL_NPC | BL_MOB, 0) && map->getcell(src->m, src, x, y, CELL_CHKREACH)) { + clif->slide(src, x, y); + unit->movepos(src, x, y, 1, 0); + } + } + break; case AM_SPHEREMINE: case AM_CANNIBALIZE: { diff --git a/src/map/unit.c b/src/map/unit.c index bb43bdf82..d652df07e 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1544,7 +1544,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui } break; case GD_EMERGENCYCALL: //Emergency Call double cast when the user has learned Leap [Daegaladh] - if( sd && pc->checkskill(sd,TK_HIGHJUMP) ) + if (sd && (pc->checkskill(sd,TK_HIGHJUMP) || pc->checkskill(sd,SU_LOPE) >= 3)) casttime *= 2; break; case RA_WUGDASH: -- cgit v1.2.3-70-g09d2 From 408878cc59bf0ad0154f7b9c7f5367ea530a9362 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:21:37 +0530 Subject: Implemented SU_SPRITEMABLE Skill. MaxHP + 1000, MaxSP + 100. Show's Spirit of Sea, Land and Life around the sprite when skill is learned. --- db/sc_config.txt | 3 +++ src/map/pc.c | 6 ++++++ src/map/status.c | 17 ++++++++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/db/sc_config.txt b/db/sc_config.txt index 104f81102..8f784158a 100644 --- a/db/sc_config.txt +++ b/db/sc_config.txt @@ -492,5 +492,8 @@ SC_TIME_ACCESSORY, 463 SC_MAGICAL_FEATHER, 463 SC_BLOSSOM_FLUTTERING, 463 +// Summoner +SC_SPRITEMABLE, 205 + // Cant Clear SC_ALL_RIDING, 397 diff --git a/src/map/pc.c b/src/map/pc.c index 09f805d82..8f6d3bcb0 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -7405,6 +7405,9 @@ int pc_resetskill(struct map_session_data* sd, int flag) if( homun_alive(sd->hd) && pc->checkskill(sd, AM_CALLHOMUN) ) homun->vaporize(sd, HOM_ST_REST); + + if ((sd->sc.data[SC_SPRITEMABLE] && pc->checkskill(sd, SU_SPRITEMABLE))) + status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER); } for( i = 1; i < MAX_SKILL; i++ ) { @@ -8627,6 +8630,9 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper) if(homun_alive(sd->hd) && !pc->checkskill(sd, AM_CALLHOMUN)) homun->vaporize(sd, HOM_ST_REST); + if ((sd->sc.data[SC_SPRITEMABLE] && pc->checkskill(sd, SU_SPRITEMABLE))) + status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER); + if(sd->status.manner < 0) clif->changestatus(sd,SP_MANNER,sd->status.manner); diff --git a/src/map/status.c b/src/map/status.c index 8a8cf123e..bb1107ee6 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1004,6 +1004,9 @@ void initChangeTables(void) status->dbs->IconChangeTable[SC_MAGICAL_FEATHER] = SI_MAGICAL_FEATHER; status->dbs->IconChangeTable[SC_BLOSSOM_FLUTTERING] = SI_BLOSSOM_FLUTTERING; + // Summoner + status->dbs->IconChangeTable[SC_SPRITEMABLE] = SI_SPRITEMABLE; + // Other SC which are not necessarily associated to skills. status->dbs->ChangeFlagTable[SC_ATTHASTE_POTION1] |= SCB_ASPD; status->dbs->ChangeFlagTable[SC_ATTHASTE_POTION2] |= SCB_ASPD; @@ -2742,9 +2745,12 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) bstatus->max_hp = (unsigned int)cap_value(i64, 0, INT_MAX); // Absolute modifiers from passive skills - if((skill_lv=pc->checkskill(sd,CR_TRUST))>0) + if ((skill_lv=pc->checkskill(sd,CR_TRUST)) > 0) bstatus->max_hp += skill_lv*200; + if ((pc->checkskill(sd,SU_SPRITEMABLE)) > 0) + bstatus->max_hp += 1000; + // Apply relative modifiers from equipment if(sd->hprate < 0) sd->hprate = 0; @@ -2777,6 +2783,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) bstatus->max_sp += 200 + 20 * skill_lv; if( (skill_lv = pc->checkskill(sd,WM_LESSON)) > 0 ) bstatus->max_sp += 30 * skill_lv; + if ((pc->checkskill(sd,SU_SPRITEMABLE)) > 0) + bstatus->max_sp += 100; // Apply relative modifiers from equipment if(sd->sprate < 0) @@ -3184,6 +3192,12 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) clif->updatestatus(sd,SP_CARTINFO); } + // Spirit Marble status activates automatically for a infinite + // amount of time when the skill is learned. Felt this was the + // best place to put this. [Rytech] + if (pc->checkskill(sd, SU_SPRITEMABLE)) + sc_start(&sd->bl, &sd->bl, SC_SPRITEMABLE, 100, 1, INFINITE_DURATION); + calculating = 0; return 0; @@ -9753,6 +9767,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t if (!mob->db_checkid(val1)) val1 = MOBID_PORING; break; + case SC_SPRITEMABLE: case SC_ALL_RIDING: tick = INFINITE_DURATION; break; -- cgit v1.2.3-70-g09d2 From a057d219f6253fb3ce19d7fc2a3f07e7365bc042 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:28:12 +0530 Subject: Implemented SU_FRESHSHRIMP Skill. Consumes Fresh Shrimp to recover HP for 2 Minutes. Max Level 5: Recovers Every (11-SkillLevel) Seconds. --- src/map/skill.c | 8 ++++++-- src/map/status.c | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index bb3b11218..b3cb1ae6f 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -466,8 +466,11 @@ int can_copy (struct map_session_data *sd, uint16 skill_id, struct block_list* b skill_id == MER_INCAGI || skill_id == MER_BLESSING)) return 0; - // Couldn't preserve 3rd Class skills except only when using Reproduce skill. [Jobbie] - if( !(sd->sc.data[SC__REPRODUCE]) && ((skill_id >= RK_ENCHANTBLADE && skill_id <= LG_OVERBRAND_PLUSATK) || (skill_id >= RL_GLITTERING_GREED && skill_id <= OB_AKAITSUKI) || (skill_id >= GC_DARKCROW && skill_id <= NC_MAGMA_ERUPTION_DOTDAMAGE))) + // Couldn't preserve 3rd Class/Summoner skills except only when using Reproduce skill. [Jobbie] + if (!(sd->sc.data[SC__REPRODUCE]) && + ((skill_id >= RK_ENCHANTBLADE && skill_id <= LG_OVERBRAND_PLUSATK) || + (skill_id >= RL_GLITTERING_GREED && skill_id <= OB_AKAITSUKI) || + (skill_id >= GC_DARKCROW && skill_id <= SU_FRESHSHRIMP))) return 0; // Reproduce will only copy skills according on the list. [Jobbie] else if( sd->sc.data[SC__REPRODUCE] && !skill->dbs->reproduce_db[skill->get_index(skill_id)] ) @@ -6023,6 +6026,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin case RK_ABUNDANCE: case RK_CRUSHSTRIKE: case ALL_ODINS_POWER: + case SU_FRESHSHRIMP: clif->skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv))); break; diff --git a/src/map/status.c b/src/map/status.c index bb1107ee6..f37c6e6cf 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -725,6 +725,7 @@ void initChangeTables(void) status->set_sc(SU_HIDE, SC_SUHIDE, SI_SUHIDE, SCB_SPEED); add_sc(SU_SCRATCH, SC_BLOODING); status->set_sc(SU_STOOP, SC_SU_STOOP, SI_SU_STOOP, SCB_NONE); + status->set_sc(SU_FRESHSHRIMP, SC_FRESHSHRIMP, SI_FRESHSHRIMP, SCB_NONE); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); @@ -7809,7 +7810,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t // Other Effects case SC_VACUUM_EXTREME: case SC_NETHERWORLD: - + case SC_FRESHSHRIMP: return 0; } } @@ -9778,6 +9779,15 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t **/ val2 = 20+(20*val1); break; + /** + * Summoner + */ + case SC_FRESHSHRIMP: + val4 = tick / (10000 - ((val1 - 1) * 1000)); + tick_time = 10000 - ((val1 - 1) * 1000); + if (val4 <= 0) // Prevents a negeative value from happening + val4 = 0; + break; default: if (calc_flag == SCB_NONE && status->dbs->SkillChangeTable[type] == 0 && status->dbs->IconChangeTable[type] == 0) { //Status change with no calc, no icon, and no skill associated...? @@ -12043,6 +12053,12 @@ int status_change_timer(int tid, int64 tick, int id, intptr_t data) return 0; } break; + case SC_FRESHSHRIMP: + if (--(sce->val4) >= 0) { + status_heal(bl, st->max_hp / 100, 0, 2); + sc_timer_next((10000 - ((sce->val1 - 1) * 1000)) + tick, status->change_timer, bl->id, data); + } + break; } // default for all non-handled control paths is to end the status -- cgit v1.2.3-70-g09d2 From bc70168dfbcf81f8690c8c4d8d882bf53b2e2e78 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:33:12 +0530 Subject: Implemented SU_POWEROFLAND Skill. Increases INT by 20, If More than 20 skill points invested in plant based Skills, MATK+20%. --- src/map/status.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/map/status.c b/src/map/status.c index f37c6e6cf..0cb05432b 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2709,6 +2709,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) bstatus->dex += skill_lv; if((skill_lv = pc->checkskill(sd,RA_RESEARCHTRAP))>0) bstatus->int_ += skill_lv; + if ((pc->checkskill(sd,SU_POWEROFLAND)) > 0) + bstatus->int_ += 20; // Bonuses from cards and equipment as well as base stat, remember to avoid overflows. i = bstatus->str + sd->status.str + sd->param_bonus[0] + sd->param_equip[0]; @@ -12245,6 +12247,10 @@ void status_get_matk_sub(struct block_list *bl, int flag, unsigned short *matk_m // Any +MATK you get from skills and cards, including cards in weapon, is added here. if ( sd && sd->bonus.ematk > 0 && flag != 3 ) *matk_min += sd->bonus.ematk; + if (sd && pc->checkskill(sd, SU_POWEROFLAND) > 0) { + if (pc->checkskill(sd, SU_SV_STEMSPEAR) == 5 && pc->checkskill(sd, SU_CN_POWDERING) == 5 && pc->checkskill(sd, SU_CN_METEOR) == 5 && pc->checkskill(sd, SU_SV_ROOTTWIST) == 5) + *matk_min += *matk_min * 20 / 100; + } if ( flag != 3 ) *matk_min = status->calc_ematk(bl, sc, *matk_min); -- cgit v1.2.3-70-g09d2 From 9930ca16f6dff79b8cb14a75c50ac269dd59c6cc Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:38:15 +0530 Subject: Implemented SU_SV_STEMSPEAR Skill. Silvervine Steam Spear: 10% Bleeding Chance, 700% Matk at all levels. Lv 1: Earth Magic Lv 2: Fire Magic Lv 3: Water Magic Lv 4: Wind Magic Lv 5: Ghost Magic Base Level 30: Chance to activate skill again. Every 30 Base Level: Increases the chance to activate skill. --- src/map/battle.c | 3 +++ src/map/skill.c | 9 +++++++++ src/map/status.c | 1 + 3 files changed, 13 insertions(+) diff --git a/src/map/battle.c b/src/map/battle.c index 37e06a6ba..4ad11e488 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1895,6 +1895,9 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block pc->del_charm(sd, sd->charm_count, sd->charm_type); } break; + case SU_SV_STEMSPEAR: + skillratio += 600; + break; default: battle->calc_skillratio_magic_unknown(&attack_type, src, target, &skill_id, &skill_lv, &skillratio, &flag); break; diff --git a/src/map/skill.c b/src/map/skill.c index b3cb1ae6f..7e65ddea4 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1424,6 +1424,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case SU_SCRATCH: sc_start2(src, bl, SC_BLOODING, (skill_lv * 3), skill_lv, src->id, skill->get_time(skill_id, skill_lv)); // TODO: What's the chance/time? break; + case SU_SV_STEMSPEAR: + sc_start2(src, bl, SC_BLOODING, 10, skill_lv, src->id, skill->get_time(skill_id, skill_lv)); + break; default: skill->additional_effect_unknown(src, bl, &skill_id, &skill_lv, &attack_type, &dmg_lv, &tick); break; @@ -4903,6 +4906,12 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 skill->attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag); break; + case SU_SV_STEMSPEAR: + skill->attack(skill->get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); + if (status->get_lv(src) >= 30 && (rnd() % 100 < (int)(status->get_lv(src) / 30) + 10)) // TODO: Need activation chance. + skill->addtimerskill(src, tick + skill->get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, (skill_id == SU_SV_STEMSPEAR) ? BF_MAGIC : BF_WEAPON, flag); + break; + case 0:/* no skill - basic/normal attack */ if(sd) { if (flag & 3){ diff --git a/src/map/status.c b/src/map/status.c index 0cb05432b..75eccfb38 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -726,6 +726,7 @@ void initChangeTables(void) add_sc(SU_SCRATCH, SC_BLOODING); status->set_sc(SU_STOOP, SC_SU_STOOP, SI_SU_STOOP, SCB_NONE); status->set_sc(SU_FRESHSHRIMP, SC_FRESHSHRIMP, SI_FRESHSHRIMP, SCB_NONE); + add_sc(SU_SV_STEMSPEAR, SC_BLOODING); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); -- cgit v1.2.3-70-g09d2 From 4291cc2aa8430c7a08c6a60f75590784ed64f98e Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 21:42:05 +0530 Subject: Implemented SU_CN_POWDERING Skill. Consumes 1 Catnip Fruit. Lv 1-2: 3x3 AoE Lv 3-4: 5x5 AoE Lv 5: 7x7 AoE Lasts for (2+SkillLevel) Seconds Increases Natural Recovery of HP/SP. Reduces Atk and MAtk by 50% Reduces Movement Speed. --- src/map/skill.c | 4 +++- src/map/status.c | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/map/skill.c b/src/map/skill.c index 7e65ddea4..57955e260 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5049,6 +5049,7 @@ int skill_castend_id(int tid, int64 tick, int id, intptr_t data) ud->skilltimer=tid; return skill->castend_pos(tid,tick,id,data); case GN_WALLOFTHORN: + case SU_CN_POWDERING: ud->skillx = target->x; ud->skilly = target->y; ud->skilltimer = tid; @@ -10590,7 +10591,8 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case SO_ELEMENTAL_SHIELD: case RL_B_TRAP: case MH_XENO_SLASHER: - flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete). + case SU_CN_POWDERING: + flag |= 1; // Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete). FALLTHROUGH case GS_GROUNDDRIFT: //Ammo should be deleted right away. if ( skill_id == WM_SEVERE_RAINSTORM ) diff --git a/src/map/status.c b/src/map/status.c index 75eccfb38..a532248e5 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -727,6 +727,7 @@ void initChangeTables(void) status->set_sc(SU_STOOP, SC_SU_STOOP, SI_SU_STOOP, SCB_NONE); status->set_sc(SU_FRESHSHRIMP, SC_FRESHSHRIMP, SI_FRESHSHRIMP, SCB_NONE); add_sc(SU_SV_STEMSPEAR, SC_BLOODING); + status->set_sc(SU_CN_POWDERING, SC_CATNIPPOWDER, SI_CATNIPPOWDER, SCB_WATK | SCB_SPEED | SCB_REGEN); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); -- cgit v1.2.3-70-g09d2 From 8647affb1ffbae9dc8aae34409cfd7cd47aa5dff Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Sun, 2 Oct 2016 22:01:49 +0530 Subject: Implemented SU_CN_METEOR: Catnip Meteor: Increases Matk by 200+100*SkillLevel%. When 1 Catnip is consumed, Adds a Chance to curse target[Not Implemented]. --- src/map/battle.c | 3 +++ src/map/skill.c | 26 ++++++++++++++++++++++---- src/map/status.c | 1 + 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index 4ad11e488..d3a499014 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1898,6 +1898,9 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block case SU_SV_STEMSPEAR: skillratio += 600; break; + case SU_CN_METEOR: + skillratio += 100 + 100 * skill_lv; + break; default: battle->calc_skillratio_magic_unknown(&attack_type, src, target, &skill_id, &skill_lv, &skillratio, &flag); break; diff --git a/src/map/skill.c b/src/map/skill.c index 57955e260..315d0f7f5 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1427,6 +1427,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case SU_SV_STEMSPEAR: sc_start2(src, bl, SC_BLOODING, 10, skill_lv, src->id, skill->get_time(skill_id, skill_lv)); break; + case SU_CN_METEOR: + sc_start(src, bl, SC_CURSE, 10, skill_lv, skill->get_time2(skill_id, skill_lv)); // TODO: What's the chance/time? + break; default: skill->additional_effect_unknown(src, bl, &skill_id, &skill_lv, &attack_type, &dmg_lv, &tick); break; @@ -3457,7 +3460,8 @@ int skill_timerskill(int tid, int64 tick, int id, intptr_t data) { break; switch( skl->skill_id ) { case WZ_METEOR: - if( skl->type >= 0 ) { + case SU_CN_METEOR: + if (skl->type >= 0) { int x = skl->type>>16, y = skl->type&0xFFFF; if( path->search_long(NULL, src, src->m, src->x, src->y, x, y, CELL_CHKWALL) ) skill->unitsetting(src,skl->skill_id,skl->skill_lv,x,y,skl->flag); @@ -10403,6 +10407,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case HW_GANBANTEIN: case LG_EARTHDRIVE: case SC_ESCAPE: + case SU_CN_METEOR: break; //Effect is displayed on respective switch case. default: skill->castend_pos2_effect_unknown(src, &x, &y, &skill_id, &skill_lv, &tick, &flag); @@ -10645,11 +10650,24 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui break; case WZ_METEOR: + case SU_CN_METEOR: { int area = skill->get_splash(skill_id, skill_lv); short tmpx = 0, tmpy = 0, x1 = 0, y1 = 0; int i; +#if 0 + // The Meteor should inflict curse if Catnip fruit is consumed. + // Currently Catnip fruit is added as requirement. + if (sd && skill_id == SU_CN_METEOR) { + short item_idx = pc->search_inventory(sd, ITEMID_CATNIP_FRUIT); + if (item_idx >= 0) { + pc->delitem(sd, item_idx, 1, 0, 1, LOG_TYPE_SKILL); + flag |= 1; + } + } +#endif + for( i = 0; i < 2 + (skill_lv>>1); i++ ) { // Creates a random Cell in the Splash Area tmpx = x - area + rnd()%(area * 2 + 1); @@ -11297,7 +11315,7 @@ struct skill_unit_group* skill_unitsetting(struct block_list *src, uint16 skill_ nullpo_retr(NULL, st); sc = status->get_sc(src); // for traps, firewall and fogwall - celest - switch( skill_id ) { + switch (skill_id) { case SO_ELEMENTAL_SHIELD: val2 = 300 * skill_lv + 65 * (st->int_ + status->get_lv(src)) + st->max_sp; break; @@ -12243,12 +12261,12 @@ int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int6 tsc->sg_counter++; //SG hit counter. if (skill->attack(skill->get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0) <= 0 && tsc) tsc->sg_counter=0; //Attack absorbed. - break; + break; #endif case GS_DESPERADO: if (rnd()%100 < src->val1) skill->attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); - break; + break; default: skill->attack(skill->get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); } diff --git a/src/map/status.c b/src/map/status.c index a532248e5..7a24a703b 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -728,6 +728,7 @@ void initChangeTables(void) status->set_sc(SU_FRESHSHRIMP, SC_FRESHSHRIMP, SI_FRESHSHRIMP, SCB_NONE); add_sc(SU_SV_STEMSPEAR, SC_BLOODING); status->set_sc(SU_CN_POWDERING, SC_CATNIPPOWDER, SI_CATNIPPOWDER, SCB_WATK | SCB_SPEED | SCB_REGEN); + add_sc(SU_CN_METEOR, SC_CURSE); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); -- cgit v1.2.3-70-g09d2 From 63c621ff7ceddb0fa12f8fabf7e074eb63b25eec Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 17:58:16 +0530 Subject: Implemented SU_POWEROFLIFE Skill. Increases Flee, Hit and CRI by 20. If >= 20 Skill points invested in animal-based skills, Ranged Physical Attack + 20%. --- src/map/battle.c | 8 ++++++++ src/map/status.c | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/src/map/battle.c b/src/map/battle.c index d3a499014..688f8febc 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -5217,8 +5217,16 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list if (hd != NULL) ATK_ADD(hd->homunculus.spiritball * 3); } + if ((wd.flag&(BF_LONG|BF_MAGIC)) == BF_LONG) { + if (sd != NULL && pc->checkskill(sd, SU_POWEROFLIFE) > 0) { + if (pc->checkskill(sd, SU_SCAROFTAROU) == 5 && pc->checkskill(sd, SU_PICKYPECK) == 5 && pc->checkskill(sd, SU_ARCLOUSEDASH) == 5 && pc->checkskill(sd, SU_LUNATICCARROTBEAT) == 5) { + ATK_ADDRATE(20); + } + } + } } + switch (skill_id) { case AS_SONICBLOW: if (sc && sc->data[SC_SOULLINK] && diff --git a/src/map/status.c b/src/map/status.c index 7a24a703b..462112006 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2863,6 +2863,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) sd->critical_rate = 0; if(sd->critical_rate != 100) bstatus->cri = bstatus->cri * sd->critical_rate/100; + if (pc->checkskill(sd, SU_POWEROFLIFE) > 0) + bstatus->cri += 20; if(sd->flee2_rate < 0) sd->flee2_rate = 0; @@ -2895,6 +2897,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) bstatus->hit += 3*skill_lv; if((sd->status.weapon == W_MACE || sd->status.weapon == W_2HMACE) && (skill_lv = pc->checkskill(sd,NC_TRAININGAXE)) > 0) bstatus->hit += 2*skill_lv; + if (pc->checkskill(sd, SU_POWEROFLIFE) > 0) + bstatus->hit += 20; // ----- FLEE CALCULATION ----- @@ -2903,6 +2907,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) bstatus->flee += skill_lv*(sd->class_&JOBL_2 && (sd->class_&MAPID_BASEMASK) == MAPID_THIEF? 4 : 3); if((skill_lv=pc->checkskill(sd,MO_DODGE))>0) bstatus->flee += (skill_lv*3)>>1; + if (pc->checkskill(sd, SU_POWEROFLIFE) > 0) + bstatus->flee += 20; // ----- EQUIPMENT-DEF CALCULATION ----- // Apply relative modifiers from equipment -- cgit v1.2.3-70-g09d2 From 5e04f472e1ef618d9201fd22e382dca829992b3b Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 18:20:59 +0530 Subject: Implemented SU_SV_ROOTTWIST Skill. Duration: (5+(2*SkillLv)) seconds. Cannot be used on Boss Monsters. Effect is cancelled when Heaven's Drive or Trample is used. Enemies trapped on roots receive poison property damage. --- src/map/battle.c | 6 ++++++ src/map/skill.c | 30 ++++++++++++++++++++++++++++++ src/map/skill.h | 3 +++ src/map/status.c | 12 ++++++++---- src/map/unit.c | 1 + 5 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index 688f8febc..1064cf8a8 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3694,6 +3694,12 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list //Damage calculation from iRO wiki. [Jobbie] ad.damage = status->get_lv(src) * 10 + sstatus->int_; break; + /** + * Summoner + */ + case SU_SV_ROOTTWIST_ATK: + ad.damage = 100; + break; default: { unsigned int skillratio = 100; //Skill dmg modifiers. MATK_ADD( status->get_matk(src, 2) ); diff --git a/src/map/skill.c b/src/map/skill.c index 315d0f7f5..b109378a4 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5054,6 +5054,7 @@ int skill_castend_id(int tid, int64 tick, int id, intptr_t data) return skill->castend_pos(tid,tick,id,data); case GN_WALLOFTHORN: case SU_CN_POWDERING: + case SU_SV_ROOTTWIST: ud->skillx = target->x; ud->skilly = target->y; ud->skilltimer = tid; @@ -8967,6 +8968,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin case LG_TRAMPLE: clif->skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, BDT_SKILL); map->foreachinrange(skill->destroy_trap,bl,skill->get_splash(skill_id,skill_lv),BL_SKILL,tick); + status_change_end(bl, SC_SV_ROOTTWIST, INVALID_TIMER); break; case LG_REFLECTDAMAGE: @@ -10597,6 +10599,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case RL_B_TRAP: case MH_XENO_SLASHER: case SU_CN_POWDERING: + case SU_SV_ROOTTWIST: flag |= 1; // Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete). FALLTHROUGH case GS_GROUNDDRIFT: //Ammo should be deleted right away. @@ -12252,6 +12255,9 @@ int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int6 map->freeblock_unlock(); } break; + case WZ_HEAVENDRIVE: ++ status_change_end(bl, SC_SV_ROOTTWIST, INVALID_TIMER); ++ break; /** * The storm gust counter was dropped in renewal **/ @@ -12836,6 +12842,30 @@ int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int6 status->change_start(ss, bl, SC_BLIND, rnd() % 100 > sg->skill_lv * 10, sg->skill_lv, sg->skill_id, 0, 0, skill->get_time2(sg->skill_id, sg->skill_lv), SCFLAG_FIXEDTICK|SCFLAG_FIXEDRATE); break; + case UNT_SV_ROOTTWIST: + if (status_get_mode(bl)&MD_BOSS) { + break; + } + if (tsc) { + if (!sg->val2) { + int sec = skill->get_time(sg->skill_id, sg->skill_lv); + + if (sc_start2(ss, bl, type, 100, sg->skill_lv, sg->group_id, sec)) { + const struct TimerData* td = ((tsc->data[type])? timer->get(tsc->data[type]->timer) : NULL); + + if (td != NULL) + sec = DIFF_TICK32(td->tick, tick); + clif->fixpos(bl); + sg->val2 = bl->id; + } else { // Couldn't trap it? + sec = 7000; + } + sg->limit = DIFF_TICK32(tick, sg->tick) + sec; + } else if (tsc->data[type] && bl->id == sg->val2) { + skill->attack(skill->get_type(SU_SV_ROOTTWIST_ATK), ss, &src->bl, bl, SU_SV_ROOTTWIST_ATK, sg->skill_lv, tick, SD_LEVEL|SD_ANIMATION); + } + } + break; default: skill->unit_onplace_timer_unknown(src, bl, &tick); break; diff --git a/src/map/skill.h b/src/map/skill.h index 6cc4d32ff..b27d7ac3a 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -1696,6 +1696,9 @@ enum { UNT_B_TRAP, UNT_FIRE_RAIN, + UNT_CATNIPPOWDER, + UNT_SV_ROOTTWIST, + /** * Guild Auras **/ diff --git a/src/map/status.c b/src/map/status.c index 462112006..f1423d3c6 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -729,6 +729,7 @@ void initChangeTables(void) add_sc(SU_SV_STEMSPEAR, SC_BLOODING); status->set_sc(SU_CN_POWDERING, SC_CATNIPPOWDER, SI_CATNIPPOWDER, SCB_WATK | SCB_SPEED | SCB_REGEN); add_sc(SU_CN_METEOR, SC_CURSE); + set_sc_with_vfx(SU_SV_ROOTTWIST, SC_SV_ROOTTWIST, SI_SV_ROOTTWIST, SCB_NONE); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); @@ -7805,12 +7806,12 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_OBLIVIONCURSE: case SC_LEECHESEND: - // Ranger Effects + // Ranger Effects case SC_WUGBITE: case SC_ELECTRICSHOCKER: case SC_MAGNETICFIELD: - // Masquerades + // Masquerades case SC__ENERVATION: case SC__GROOMY: case SC__LAZINESS: @@ -7822,6 +7823,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_VACUUM_EXTREME: case SC_NETHERWORLD: case SC_FRESHSHRIMP: + case SC_SV_ROOTTWIST: return 0; } } @@ -10011,6 +10013,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_NEEDLE_OF_PARALYZE: case SC_DEATHBOUND: case SC_NETHERWORLD: + case SC_SV_ROOTTWIST: unit->stop_walking(bl, STOPWALKING_FLAG_FIXPOS); break; case SC_ANKLESNARE: @@ -10869,10 +10872,11 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const break; case SC_NEUTRALBARRIER_MASTER: case SC_STEALTHFIELD_MASTER: - if( sce->val2 ) { + case SC_SV_ROOTTWIST: + if (sce->val2) { struct skill_unit_group* group = skill->id2group(sce->val2); sce->val2 = 0; - if( group ) /* might have been cleared before status ended, e.g. land protector */ + if (group) /* might have been cleared before status ended, e.g. land protector */ skill->del_unitgroup(group,ALC_MARK); } break; diff --git a/src/map/unit.c b/src/map/unit.c index d652df07e..0f3631792 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -2466,6 +2466,7 @@ int unit_remove_map(struct block_list *bl, clr_type clrtype, const char* file, i status_change_end(bl, SC_CURSEDCIRCLE_ATKER, INVALID_TIMER); //callme before warp status_change_end(bl, SC_NETHERWORLD, INVALID_TIMER); status_change_end(bl, SC_SUHIDE, INVALID_TIMER); + status_change_end(bl, SC_SV_ROOTTWIST, INVALID_TIMER); } if (bl->type&(BL_CHAR|BL_PET)) { -- cgit v1.2.3-70-g09d2 From f5297cbb8d4b4f6b45fb1d3d6d72253795eca5ef Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 18:26:45 +0530 Subject: Implemented SU_SCAROFTAROU Skill. Heal,Cure,Clearance cancels the effect. Atk + 100*SkillLv%. Reduces Fixed Amount of MaxHP for 9 seconds. For Every 30 Base Levels, Adds an Additional chance that skill will be activated again. --- src/map/battle.c | 3 +++ src/map/skill.c | 6 ++++++ src/map/status.c | 2 ++ 3 files changed, 11 insertions(+) diff --git a/src/map/battle.c b/src/map/battle.c index 1064cf8a8..f220be17b 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1674,6 +1674,9 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block case SU_SCRATCH: skillratio += -50 + 50 * skill_lv; break; + case SU_SCAROFTAROU: + skillratio += -100 + 100 * skill_lv; + break; /** * Arch Bishop **/ diff --git a/src/map/skill.c b/src/map/skill.c index b109378a4..1f8171b72 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1430,6 +1430,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case SU_CN_METEOR: sc_start(src, bl, SC_CURSE, 10, skill_lv, skill->get_time2(skill_id, skill_lv)); // TODO: What's the chance/time? break; + case SU_SCAROFTAROU: + sc_start(src, bl, SC_STUN, 10, skill_lv, skill->get_time2(skill_id, skill_lv)); // TODO: What's the chance/time? + break; default: skill->additional_effect_unknown(src, bl, &skill_id, &skill_lv, &attack_type, &dmg_lv, &tick); break; @@ -4915,6 +4918,9 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 if (status->get_lv(src) >= 30 && (rnd() % 100 < (int)(status->get_lv(src) / 30) + 10)) // TODO: Need activation chance. skill->addtimerskill(src, tick + skill->get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, (skill_id == SU_SV_STEMSPEAR) ? BF_MAGIC : BF_WEAPON, flag); break; + case SU_SCAROFTAROU: + sc_start(src, bl, status->skill2sc(skill_id), 10, skill_lv, skill->get_time(skill_id, skill_lv)); // TODO: What's the activation chance for the effect? + break; case 0:/* no skill - basic/normal attack */ if(sd) { diff --git a/src/map/status.c b/src/map/status.c index f1423d3c6..1d87b8f3a 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -730,6 +730,8 @@ void initChangeTables(void) status->set_sc(SU_CN_POWDERING, SC_CATNIPPOWDER, SI_CATNIPPOWDER, SCB_WATK | SCB_SPEED | SCB_REGEN); add_sc(SU_CN_METEOR, SC_CURSE); set_sc_with_vfx(SU_SV_ROOTTWIST, SC_SV_ROOTTWIST, SI_SV_ROOTTWIST, SCB_NONE); + add_sc(SU_SCAROFTAROU, SC_STUN ); + status->set_sc(SU_SCAROFTAROU, SC_BITESCAR, SI_BITESCAR, SCB_NONE); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); -- cgit v1.2.3-70-g09d2 From 4cdcafaa6edfe500019406a35c443d82d924d468 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 18:40:27 +0530 Subject: Implemented SU_PICKYPECK Skill. ATK + (200+100*SkillLv)% Every 30 Base Levels, Adds an Additional Chance to reactivate the skill. When the Enemy has Less than 50% HP Left, Damage is doubled. --- src/map/battle.c | 6 ++++++ src/map/skill.c | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/map/battle.c b/src/map/battle.c index f220be17b..2c9d3f3c4 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1677,6 +1677,12 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block case SU_SCAROFTAROU: skillratio += -100 + 100 * skill_lv; break; + case SU_PICKYPECK: + case SU_PICKYPECK_DOUBLE_ATK: + skillratio += 100 + 100 * skill_lv; + if ((status_get_max_hp(target) / 100) <= 50) + skillratio *= 2; + break; /** * Arch Bishop **/ diff --git a/src/map/skill.c b/src/map/skill.c index 1f8171b72..d947f28a6 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3989,6 +3989,10 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 skill->addtimerskill(src, tick + skill->get_delay(skill_id, skill_lv), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag); break; + case SU_PICKYPECK: + clif->skill_nodamage(src, bl, skill_id, skill_lv, 1); + break; + // Splash attack skills. case AS_GRIMTOOTH: case MC_CARTREVOLUTION: -- cgit v1.2.3-70-g09d2 From 8557afc9875ae5fcf46b17728cddab009aa5d472 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 18:49:33 +0530 Subject: Implemented SU_ARCLOUSEDASH Skill. For (50+10*SkillLv) Seconds, Atk +(15+5*SkillLv). Increases Movement Speed. If Target is Doram Race, Increases Range Physical attack by 10%. --- src/map/battle.c | 3 +++ src/map/skill.c | 1 + src/map/status.c | 14 +++++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/map/battle.c b/src/map/battle.c index 2c9d3f3c4..8ff376042 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -5304,6 +5304,9 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list if( sc && sc->data[SC_MTF_RANGEATK] ) ATK_ADDRATE(sc->data[SC_MTF_RANGEATK]->val1);// temporary it should be 'bonus.long_attack_atk_rate' #endif + if (sc != NULL && sc->data[SC_ARCLOUSEDASH] != NULL && sc->data[SC_ARCLOUSEDASH]->val4 != 0) { + ATK_ADDRATE(sc->data[SC_ARCLOUSEDASH]->val4); + } if( (i=pc->checkskill(sd,AB_EUCHARISTICA)) > 0 && (tstatus->race == RC_DEMON || tstatus->def_ele == ELE_DARK) ) ATK_ADDRATE(-i); diff --git a/src/map/skill.c b/src/map/skill.c index d947f28a6..d3186e8ba 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -6052,6 +6052,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin case RK_CRUSHSTRIKE: case ALL_ODINS_POWER: case SU_FRESHSHRIMP: + case SU_ARCLOUSEDASH: clif->skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv))); break; diff --git a/src/map/status.c b/src/map/status.c index 1d87b8f3a..d842d91ea 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -732,6 +732,7 @@ void initChangeTables(void) set_sc_with_vfx(SU_SV_ROOTTWIST, SC_SV_ROOTTWIST, SI_SV_ROOTTWIST, SCB_NONE); add_sc(SU_SCAROFTAROU, SC_STUN ); status->set_sc(SU_SCAROFTAROU, SC_BITESCAR, SI_BITESCAR, SCB_NONE); + status->set_sc(SU_ARCLOUSEDASH, SC_ARCLOUSEDASH, SI_ARCLOUSEDASH, SCB_AGI | SCB_SPEED); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); @@ -4619,9 +4620,12 @@ unsigned short status_calc_agi(struct block_list *bl, struct status_change *sc, if (sc->data[SC_2011RWC]) agi += sc->data[SC_2011RWC]->val1; - if(sc->data[SC_MARSHOFABYSS]) + if (sc->data[SC_MARSHOFABYSS]) agi -= agi * sc->data[SC_MARSHOFABYSS]->val2 / 100; + if (sc->data[SC_ARCLOUSEDASH]) + agi += sc->data[SC_ARCLOUSEDASH]->val2; + return (unsigned short)cap_value(agi,0,USHRT_MAX); } @@ -5809,6 +5813,8 @@ unsigned short status_calc_speed(struct block_list *bl, struct status_change *sc val = max(val, sc->data[SC_MOVHASTE_HORSE]->val1); if( sd && sd->bonus.speed_rate + sd->bonus.speed_add_rate < 0 ) // permanent item-based speedup val = max( val, -(sd->bonus.speed_rate + sd->bonus.speed_add_rate) ); + if (sc->data[SC_ARCLOUSEDASH]) + val = max(val, sc->data[SC_ARCLOUSEDASH]->val3); speed_rate -= val; } @@ -9803,6 +9809,12 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t if (val4 <= 0) // Prevents a negeative value from happening val4 = 0; break; + case SC_ARCLOUSEDASH: ++ val2 = 15 + 5 * val1; // AGI ++ val3 = 25; // Move speed increase ++ if (sd && (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER) ++ val4 = 10; // Ranged ATK increase ++ break; default: if (calc_flag == SCB_NONE && status->dbs->SkillChangeTable[type] == 0 && status->dbs->IconChangeTable[type] == 0) { //Status change with no calc, no icon, and no skill associated...? -- cgit v1.2.3-70-g09d2 From 384ab01c3ea55f96277824b9c64d79dc060efcb3 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 18:57:13 +0530 Subject: Implemented SU_LUNATICCARROTBEAT Skill. Atk +(200+100*SkillLv)%. When 1 Carrot is consumed, Add's a chance to stun enemy. Lv1-2: 3x3 AoE Lv3-4: 5x5 AoE Lv5: 7x7 AoE Added Item Constants in itemdb.h --- src/map/battle.c | 3 +++ src/map/itemdb.h | 2 ++ src/map/skill.c | 27 ++++++++++++++++++++++++--- src/map/status.c | 1 + 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index 8ff376042..001da3edd 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1683,6 +1683,9 @@ int battle_calc_skillratio(int attack_type, struct block_list *src, struct block if ((status_get_max_hp(target) / 100) <= 50) skillratio *= 2; break; + case SU_LUNATICCARROTBEAT: + skillratio += 100 + 100 * skill_lv; + break; /** * Arch Bishop **/ diff --git a/src/map/itemdb.h b/src/map/itemdb.h index d33805174..16dca9e58 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -54,6 +54,7 @@ enum item_itemid { ITEMID_WHITE_POTION = 504, ITEMID_BLUE_POTION = 505, ITEMID_APPLE = 512, + ITEMID_CARROT = 515, ITEMID_HOLY_WATER = 523, ITEMID_PUMPKIN = 535, ITEMID_RED_SLIM_POTION = 545, @@ -113,6 +114,7 @@ enum item_itemid { ITEMID_GOLD_KEY77 = 7782, ITEMID_SILVER_KEY77 = 7783, ITEMID_TRAP_ALLOY = 7940, + ITEMID_CATNIP_FRUIT = 11602, ITEMID_RED_POUCH_OF_SURPRISE = 12024, ITEMID_BLOODY_DEAD_BRANCH = 12103, ITEMID_PORING_BOX = 12109, diff --git a/src/map/skill.c b/src/map/skill.c index d3186e8ba..8d870881e 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1433,6 +1433,10 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case SU_SCAROFTAROU: sc_start(src, bl, SC_STUN, 10, skill_lv, skill->get_time2(skill_id, skill_lv)); // TODO: What's the chance/time? break; + case SU_LUNATICCARROTBEAT: + if (skill->area_temp[3] == 1) + sc_start(src, bl, SC_STUN, 10, skill_lv, skill_get_time(skill_id, skill_lv)); // TODO: What's the chance/time? + break; default: skill->additional_effect_unknown(src, bl, &skill_id, &skill_lv, &attack_type, &dmg_lv, &tick); break; @@ -4047,6 +4051,7 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 case GN_ILLUSIONDOPING: case MH_XENO_SLASHER: case SU_SCRATCH: + case SU_LUNATICCARROTBEAT: if (flag&1) { //Recursive invocation // skill->area_temp[0] holds number of targets in area // skill->area_temp[1] holds the id of the original target @@ -4074,6 +4079,7 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 case LG_EARTHDRIVE: case GN_CARTCANNON: case SU_SCRATCH: + case SU_LUNATICCARROTBEAT: clif->skill_nodamage(src,bl,skill_id,skill_lv,1); break; case SR_TIGERCANNON: @@ -4092,13 +4098,19 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 skill->area_temp[0] = 0; skill->area_temp[1] = bl->id; skill->area_temp[2] = 0; - if( skill_id == WL_CRIMSONROCK ) { + if (skill_id == WL_CRIMSONROCK) { skill->area_temp[4] = bl->x; skill->area_temp[5] = bl->y; } + if (skill_id == SU_LUNATICCARROTBEAT) { + skill->area_temp[3] = 0; + } - if( skill_id == NC_VULCANARM ) - if (sd) pc->overheat(sd,1); + if (skill_id == NC_VULCANARM) { + if (sd != NULL) { + pc->overheat(sd,1); + } + } // if skill damage should be split among targets, count them //SD_LEVEL -> Forced splash damage for Auto Blitz-Beat -> count targets @@ -4108,6 +4120,15 @@ int skill_castend_damage_id(struct block_list* src, struct block_list *bl, uint1 // recursive invocation of skill->castend_damage_id() with flag|1 map->foreachinrange(skill->area_sub, bl, skill->get_splash(skill_id, skill_lv), skill->splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill->castend_damage_id); + + if (sd && skill_id == SU_LUNATICCARROTBEAT) { + short item_idx = pc->search_inventory(sd, ITEMID_CARROT); + + if (item_idx >= 0) { + pc->delitem(sd, item_idx, 1, 0, 1, LOG_TYPE_CONSUME); + skill->area_temp[3] = 1; + } + } } break; diff --git a/src/map/status.c b/src/map/status.c index d842d91ea..7d94d729b 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -733,6 +733,7 @@ void initChangeTables(void) add_sc(SU_SCAROFTAROU, SC_STUN ); status->set_sc(SU_SCAROFTAROU, SC_BITESCAR, SI_BITESCAR, SCB_NONE); status->set_sc(SU_ARCLOUSEDASH, SC_ARCLOUSEDASH, SI_ARCLOUSEDASH, SCB_AGI | SCB_SPEED); + add_sc(SU_LUNATICCARROTBEAT, SC_STUN); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); -- cgit v1.2.3-70-g09d2 From f68a446b365389ce6494fb2de2473ace19f3bc14 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 18:59:33 +0530 Subject: Implemented SU_POWEROFSEA. Increases Heal Effect by 10%. if >= 20 skill points are invested in seafood-based skills, Increases Heal Effect by 20%. --- src/map/skill.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/map/skill.c b/src/map/skill.c index 8d870881e..ce5c12d98 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -397,6 +397,11 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk hp += hp * skill2_lv * 2 / 100; else if (src->type == BL_HOM && (skill2_lv = homun->checkskill(BL_UCAST(BL_HOM, src), HLIF_BRAIN)) > 0) hp += hp * skill2_lv * 2 / 100; + if (sd != NULL && ((skill2_lv = pc->checkskill(sd, SU_POWEROFSEA)) > 0)) { + hp += hp * 10 / 100; + if (pc->checkskill(sd, SU_TUNABELLY) == 5 && pc->checkskill(sd, SU_TUNAPARTY) == 5 && pc->checkskill(sd, SU_BUNCHOFSHRIMP) == 5 && pc->checkskill(sd, SU_FRESHSHRIMP) == 5) + hp += hp * 20 / 100; + } break; } -- cgit v1.2.3-70-g09d2 From 7b6feb8f49d9c2832e505583d0ac5ebf530b8b11 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:01:55 +0530 Subject: Implemented SU_TUNABELLY Skill. Restores 10% MaxHP. Additionally Restores 20*(SkillLv-1)% MaxHP --- src/map/skill.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index ce5c12d98..333e15de5 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -365,7 +365,10 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, uint16 sk nullpo_ret(src); - switch( skill_id ) { + switch (skill_id) { + case SU_TUNABELLY: + hp = status_get_max_hp(target) * ((20 * skill_lv) - 10) / 100; + break; case BA_APPLEIDUN: #ifdef RENEWAL hp = 100+5*skill_lv+5*(status_get_vit(src)/10); // HP recovery @@ -5553,6 +5556,10 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin * Arch Bishop **/ case AB_HIGHNESSHEAL: + /** + * Summoner + */ + case SU_TUNABELLY: { int heal = skill->calc_heal(src, bl, (skill_id == AB_HIGHNESSHEAL)?AL_HEAL:skill_id, (skill_id == AB_HIGHNESSHEAL)?10:skill_lv, true); int heal_get_jobexp; @@ -9545,7 +9552,6 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin clif->skill_nodamage(src,bl,skill_id,skill_lv,1); sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)); break; - case GM_SANDMAN: if( tsc ) { if( tsc->opt1 == OPT1_SLEEP ) -- cgit v1.2.3-70-g09d2 From 69f3d4815c09ee07ce4ef3c5163411ba05c81731 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:06:46 +0530 Subject: Implemented SU_TUNAPARTY Skill. Protects the target for 30 seconds. Tuna's Defense Power: (10+(20*(SkillLv-1)))% of Caster's MaxHP --- src/map/battle.c | 13 +++++++++++++ src/map/skill.c | 1 + src/map/status.c | 15 ++++++++++----- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/map/battle.c b/src/map/battle.c index 001da3edd..f7ac60031 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3206,6 +3206,19 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam status_change_end(bl, SC_KYRIE, INVALID_TIMER); } + if ((sce = sc->data[SC_TUNAPARTY]) != NULL && damage > 0) { + clif->specialeffect(bl, 336, AREA); + sce->val2 -= (int)cap_value(damage, INT_MIN, INT_MAX); + if (sce->val2 >= 0) { + damage = 0; + } else { + damage = -sce->val2; + } + if (sce->val2 <= 0) { + status_change_end(bl, SC_TUNAPARTY, INVALID_TIMER); + } + } + if( sc->data[SC_MEIKYOUSISUI] && rnd()%100 < 40 ) // custom value damage = 0; diff --git a/src/map/skill.c b/src/map/skill.c index 333e15de5..4acc3da15 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5968,6 +5968,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin case PR_KYRIE: case MER_KYRIE: + case SU_TUNAPARTY: clif->skill_nodamage(bl, bl, skill_id, -1, sc_start(src, bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv))); break; diff --git a/src/map/status.c b/src/map/status.c index 7d94d729b..27bbafb74 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -734,6 +734,7 @@ void initChangeTables(void) status->set_sc(SU_SCAROFTAROU, SC_BITESCAR, SI_BITESCAR, SCB_NONE); status->set_sc(SU_ARCLOUSEDASH, SC_ARCLOUSEDASH, SI_ARCLOUSEDASH, SCB_AGI | SCB_SPEED); add_sc(SU_LUNATICCARROTBEAT, SC_STUN); + status->set_sc(SU_TUNAPARTY, SC_TUNAPARTY, SI_TUNAPARTY, SCB_NONE); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); @@ -7552,6 +7553,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t return 0; break; case SC_KYRIE: + case SC_TUNAPARTY: if (bl->type == BL_MOB) return 0; break; @@ -9811,11 +9813,14 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t val4 = 0; break; case SC_ARCLOUSEDASH: -+ val2 = 15 + 5 * val1; // AGI -+ val3 = 25; // Move speed increase -+ if (sd && (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER) -+ val4 = 10; // Ranged ATK increase -+ break; + val2 = 15 + 5 * val1; // AGI + val3 = 25; // Move speed increase + if (sd && (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER) + val4 = 10; // Ranged ATK increase + break; + case SC_TUNAPARTY: + val2 = (st->max_hp * (val1 * 10) / 100); // %Max HP to absorb + break; default: if (calc_flag == SCB_NONE && status->dbs->SkillChangeTable[type] == 0 && status->dbs->IconChangeTable[type] == 0) { //Status change with no calc, no icon, and no skill associated...? -- cgit v1.2.3-70-g09d2 From f4e8189545642ee0bf87f3da546bddc918682935 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:10:20 +0530 Subject: Implemented SU_BUNCHOFSHRIMP Skill. Lasts for (30+30*SkillLv) Seconds. Consumes 1 Shrimp. Increases ATK and MATK by 10% for limited time. --- src/map/skill.c | 10 ++++++++++ src/map/status.c | 1 + 2 files changed, 11 insertions(+) diff --git a/src/map/skill.c b/src/map/skill.c index 4acc3da15..4be827572 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -9553,6 +9553,16 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin clif->skill_nodamage(src,bl,skill_id,skill_lv,1); sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)); break; + break; + + case SU_BUNCHOFSHRIMP: + if (sd == NULL || sd->status.party_id == 0 || flag&1) { + clif->skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src, bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv))); + } else if (sd != NULL) { + party->foreachsamemap(skill->area_sub, sd, skill->get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill->castend_nodamage_id); + } + break; + case GM_SANDMAN: if( tsc ) { if( tsc->opt1 == OPT1_SLEEP ) diff --git a/src/map/status.c b/src/map/status.c index 27bbafb74..508127cb6 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -735,6 +735,7 @@ void initChangeTables(void) status->set_sc(SU_ARCLOUSEDASH, SC_ARCLOUSEDASH, SI_ARCLOUSEDASH, SCB_AGI | SCB_SPEED); add_sc(SU_LUNATICCARROTBEAT, SC_STUN); status->set_sc(SU_TUNAPARTY, SC_TUNAPARTY, SI_TUNAPARTY, SCB_NONE); + status->set_sc(SU_BUNCHOFSHRIMP, SC_SHRIMP, SI_SHRIMP, SCB_BATK | SCB_MATK); // Elemental Spirit summoner's 'side' status changes. status->set_sc( EL_CIRCLE_OF_FIRE , SC_CIRCLE_OF_FIRE_OPTION, SI_CIRCLE_OF_FIRE_OPTION, SCB_NONE ); -- cgit v1.2.3-70-g09d2 From 52bd4a502c919e789e8900820423a49a4343b3d7 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:17:38 +0530 Subject: Implemented SC_BITESCAR: Cannot be reset by dispell. Cannot be healed by item/NPC once in BITESCAR. Heal Skill would end the BiteScar Effect. --- db/sc_config.txt | 1 + src/map/pc.c | 3 +++ src/map/script.c | 7 +++++-- src/map/skill.c | 6 +++++- src/map/status.c | 13 +++++++++++++ 5 files changed, 27 insertions(+), 3 deletions(-) diff --git a/db/sc_config.txt b/db/sc_config.txt index 8f784158a..661e9bb87 100644 --- a/db/sc_config.txt +++ b/db/sc_config.txt @@ -494,6 +494,7 @@ SC_BLOSSOM_FLUTTERING, 463 // Summoner SC_SPRITEMABLE, 205 +SC_BITESCAR, 4 // Cant Clear SC_ALL_RIDING, 397 diff --git a/src/map/pc.c b/src/map/pc.c index 8f6d3bcb0..bfd6c0ea5 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -8408,6 +8408,9 @@ int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp) if( sd->sc.data[SC_EXTREMITYFIST2] ) sp = 0; #endif + if (sd->sc.data[SC_BITESCAR]) { + hp = 0; + } } return status->heal(&sd->bl, hp, sp, 1); diff --git a/src/map/script.c b/src/map/script.c index d1aee29bf..2a39bc832 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -6721,13 +6721,16 @@ BUILDIN(percentheal) } sd = script->rid2sd(st); - if( sd == NULL ) + if (sd == NULL) return true; #ifdef RENEWAL if( sd->sc.data[SC_EXTREMITYFIST2] ) sp = 0; #endif - pc->percentheal(sd,hp,sp); + if (sd->sc.data[SC_BITESCAR]) { + hp = 0; + } + pc->percentheal(sd, hp, sp); return true; } diff --git a/src/map/skill.c b/src/map/skill.c index 4be827572..73154d3ae 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5589,6 +5589,9 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin else if (tsc->data[SC_BERSERK]) heal = 0; //Needed so that it actually displays 0 when healing. } + if (skill_id == AL_HEAL) { + status_change_end(bl, SC_BITESCAR, INVALID_TIMER); + } clif->skill_nodamage (src, bl, skill_id, heal, 1); if( tsc && tsc->data[SC_AKAITSUKI] && heal && skill_id != HLIF_HEAL ) heal = ~heal + 1; @@ -6751,7 +6754,8 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin status_change_end(bl, SC_SILENCE, INVALID_TIMER); status_change_end(bl, SC_BLIND, INVALID_TIMER); status_change_end(bl, SC_CONFUSION, INVALID_TIMER); - clif->skill_nodamage(src,bl,skill_id,skill_lv,1); + status_change_end(bl, SC_BITESCAR, INVALID_TIMER); + clif->skill_nodamage(src, bl, skill_id, skill_lv, 1); break; case TF_DETOXIFY: diff --git a/src/map/status.c b/src/map/status.c index 508127cb6..ca1d6249d 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -7836,6 +7836,7 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_NETHERWORLD: case SC_FRESHSHRIMP: case SC_SV_ROOTTWIST: + case SC_BITESCAR: return 0; } } @@ -9822,6 +9823,11 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_TUNAPARTY: val2 = (st->max_hp * (val1 * 10) / 100); // %Max HP to absorb break; + case SC_BITESCAR: + val2 = 2 * val1; // MHP% damage + val4 = tick / 1000; + tick_time = 1000; + break; default: if (calc_flag == SCB_NONE && status->dbs->SkillChangeTable[type] == 0 && status->dbs->IconChangeTable[type] == 0) { //Status change with no calc, no icon, and no skill associated...? @@ -12095,6 +12101,13 @@ int status_change_timer(int tid, int64 tick, int id, intptr_t data) sc_timer_next((10000 - ((sce->val1 - 1) * 1000)) + tick, status->change_timer, bl->id, data); } break; + case SC_BITESCAR: + if (--(sce->val4) >= 0) { + status_percent_damage(bl, bl, -(sce->val2), 0, 0); + sc_timer_next(1000 + tick, status->change_timer, bl->id, data); + return 0; + } + break; } // default for all non-handled control paths is to end the status -- cgit v1.2.3-70-g09d2 From 15030cc995b0b6ae0e48fec59b016ecac60ed4fb Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:21:10 +0530 Subject: Increases SkillID Range on skill_get_index. --- src/map/skill.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map/skill.c b/src/map/skill.c index 73154d3ae..4ba8b34ef 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -131,7 +131,7 @@ int skill_get_index (uint16 skill_id) skill_id = (1077) + skill_id - 2201; else if ( skill_id < 3036 ) // 2549 - 3000 are empty - 1020+57+348 skill_id = (1425) + skill_id - 3001; - else if ( skill_id < 5019 ) // 3036 - 5000 are empty - 1020+57+348+35 + else if ( skill_id < 5044 ) // 3036 - 5000 are empty - 1020+57+348+35 skill_id = (1460) + skill_id - 5001; else ShowWarning("skill_get_index: skill id '%d' is not being handled!\n",skill_id); -- cgit v1.2.3-70-g09d2 From 7bc9190ea332ff88d7c6f4ef46c6a618d48c9cb8 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:22:24 +0530 Subject: Summoner should be Small Size and Brute Race. --- src/map/status.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/map/status.c b/src/map/status.c index ca1d6249d..d6aecdbd7 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2404,7 +2404,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) //Give them all modes except these (useful for clones) bstatus->mode = MD_MASK&~(MD_BOSS|MD_PLANT|MD_DETECTOR|MD_ANGRY|MD_TARGETWEAK); - bstatus->size = (sd->class_&JOBL_BABY)?SZ_SMALL:SZ_MEDIUM; + bstatus->size = (sd->class_&JOBL_BABY || (sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER)?SZ_SMALL:SZ_MEDIUM; if (battle_config.character_size && (pc_isridingpeco(sd) || pc_isridingdragon(sd))) { //[Lupus] if (sd->class_&JOBL_BABY) { if (battle_config.character_size&SZ_BIG) @@ -2416,7 +2416,7 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt) } bstatus->aspd_rate = 1000; bstatus->ele_lv = 1; - bstatus->race = RC_PLAYER; + bstatus->race = ((sd->class_&MAPID_BASEMASK) == MAPID_SUMMONER)?RC_BRUTE:RC_PLAYER; // Autobonus pc->delautobonus(sd,sd->autobonus,ARRAYLENGTH(sd->autobonus),true); -- cgit v1.2.3-70-g09d2 From 6b1fea716f09d316fe6d475114d4a08f8e112580 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:45:00 +0530 Subject: Implemented SC_SHRIMP. Increases BaseAtk and MAtk by 10% --- src/map/status.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/map/status.c b/src/map/status.c index d6aecdbd7..643401109 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -4961,6 +4961,9 @@ unsigned short status_calc_batk(struct block_list *bl, struct status_change *sc, if (sc->data[SC_STEAMPACK]) batk += sc->data[SC_STEAMPACK]->val1; + if (sc->data[SC_SHRIMP]) + batk += batk * sc->data[SC_SHRIMP]->val2 / 100; + return (unsigned short)cap_value(batk,0,USHRT_MAX); } @@ -5080,6 +5083,8 @@ unsigned short status_calc_ematk(struct block_list *bl, struct status_change *sc matk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1; //70 lvl1, 100lvl2 if(sc->data[SC_IZAYOI]) matk += 25 * sc->data[SC_IZAYOI]->val1; + if (sc->data[SC_SHRIMP]) + matk += matk * sc->data[SC_SHRIMP]->val2 / 100; return (unsigned short)cap_value(matk,0,USHRT_MAX); #else return 0; @@ -9828,6 +9833,9 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t val4 = tick / 1000; tick_time = 1000; break; + case SC_SHRIMP: + val2 = 10; // BATK%, MATK% + break; default: if (calc_flag == SCB_NONE && status->dbs->SkillChangeTable[type] == 0 && status->dbs->IconChangeTable[type] == 0) { //Status change with no calc, no icon, and no skill associated...? -- cgit v1.2.3-70-g09d2 From f42e558870c1d3e267ff39b6de2841c08750c4e8 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:52:19 +0530 Subject: Implemented UNT_CATNIPPOWDER. Implemented SC_CATNIPPOWDER: Increases WAtk%, MAtk% and Reduces Movement Speed. Increases Natural Hp/Sp Recovery --- src/map/skill.c | 7 +++++++ src/map/status.c | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/map/skill.c b/src/map/skill.c index 4ba8b34ef..30b9f4c0a 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -12113,6 +12113,13 @@ int skill_unit_onplace(struct skill_unit *src, struct block_list *bl, int64 tick sc_start(ss, bl, SC_VOLCANIC_ASH, 100, sg->skill_lv, skill->get_time(MH_VOLCANIC_ASH, sg->skill_lv)); break; + case UNT_CATNIPPOWDER: + if (sg->src_id == bl->id || (status_get_mode(bl)&MD_BOSS)) + break; // Does not affect the caster or Boss. + if (sce == NULL && battle->check_target(&src->bl, bl, BCT_ENEMY) > 0) + sc_start(ss, bl, type, 100, sg->skill_lv, skill->get_time(sg->skill_id, sg->skill_lv)); + break; + case UNT_GD_LEADERSHIP: case UNT_GD_GLORYWOUNDS: case UNT_GD_SOULCOLD: diff --git a/src/map/status.c b/src/map/status.c index 643401109..46df84473 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -3626,6 +3626,10 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str regen->rate.hp += regen->rate.hp * sc->data[SC_BUCHEDENOEL]->val1 / 100; regen->rate.sp += regen->rate.sp * sc->data[SC_BUCHEDENOEL]->val2 / 100; } + if (sc->data[SC_CATNIPPOWDER]) { + regen->rate.hp *= 2; + regen->rate.sp *= 2; + } } #define status_get_homstr(st, hd) ((st)->str + (hd)->homunculus.str_value) @@ -5056,6 +5060,8 @@ unsigned short status_calc_watk(struct block_list *bl, struct status_change *sc, watk += watk * sc->data[SC_ANGRIFFS_MODUS]->val2/100; if( sc->data[SC_FLASHCOMBO] ) watk += sc->data[SC_FLASHCOMBO]->val2; + if (sc->data[SC_CATNIPPOWDER]) + watk -= watk * sc->data[SC_CATNIPPOWDER]->val2 / 100; return (unsigned short)cap_value(watk,0,USHRT_MAX); } @@ -5771,6 +5777,8 @@ unsigned short status_calc_speed(struct block_list *bl, struct status_change *sc if (sc->data[SC_DEC_AGI] || sc->data[SC_QUAGMIRE] || sc->data[SC_DONTFORGETME]) return 0; } + if (sc->data[SC_CATNIPPOWDER]) + val = max(val, sc->data[SC_CATNIPPOWDER]->val3); if( sd && sd->bonus.speed_rate + sd->bonus.speed_add_rate > 0 ) // permanent item-based speedup val = max( val, sd->bonus.speed_rate + sd->bonus.speed_add_rate ); @@ -9836,6 +9844,10 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t case SC_SHRIMP: val2 = 10; // BATK%, MATK% break; + case SC_CATNIPPOWDER: + val2 = 50; // WATK%, MATK% + val3 = 25 * val1; // Move speed reduction + break; default: if (calc_flag == SCB_NONE && status->dbs->SkillChangeTable[type] == 0 && status->dbs->IconChangeTable[type] == 0) { //Status change with no calc, no icon, and no skill associated...? @@ -12317,6 +12329,8 @@ void status_get_matk_sub(struct block_list *bl, int flag, unsigned short *matk_m if ( (st->rhw.matk + st->lhw.matk) > 0 ) { int wMatk = st->rhw.matk + st->lhw.matk; // Left and right matk stacks int variance = wMatk * st->rhw.wlv / 10; // Only use right hand weapon level + if (sc != NULL && sc->data[SC_CATNIPPOWDER]) + wMatk -= wMatk * sc->data[SC_CATNIPPOWDER]->val2 / 100; *matk_min += wMatk - variance; *matk_max += wMatk + variance; } -- cgit v1.2.3-70-g09d2 From f7babff8a31981508f1c5fff1aefcc6091c85f00 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 19:59:45 +0530 Subject: Minor Typo fixes, also added tsc declaration --- src/map/skill.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/map/skill.c b/src/map/skill.c index 30b9f4c0a..b3a060de2 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2118,6 +2118,7 @@ int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag) { int dx = 0, dy = 0; + struct status_change *tsc = status->get_sc(target); nullpo_ret(src); @@ -2165,7 +2166,7 @@ int skill_blown(struct block_list* src, struct block_list* target, int count, in dy = -diry[dir]; } - if (tsc && tsc->data[SC_SU_STOOP]) // Any knockback will cancel it. + if (tsc != NULL && tsc->data[SC_SU_STOOP]) // Any knockback will cancel it. status_change_end(target, SC_SU_STOOP, INVALID_TIMER); return unit->blown(target, dx, dy, count, flag); // send over the proper flag @@ -12321,8 +12322,8 @@ int skill_unit_onplace_timer(struct skill_unit *src, struct block_list *bl, int6 } break; case WZ_HEAVENDRIVE: -+ status_change_end(bl, SC_SV_ROOTTWIST, INVALID_TIMER); -+ break; + status_change_end(bl, SC_SV_ROOTTWIST, INVALID_TIMER); + break; /** * The storm gust counter was dropped in renewal **/ -- cgit v1.2.3-70-g09d2 From 5a40d2dee1ecb45812836a826f9702d073975d70 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 20:04:01 +0530 Subject: Added max_summoner_parameter: Default max parameter for summoner is 120. --- conf/map/battle/player.conf | 5 ++++- src/map/battle.c | 1 + src/map/battle.h | 2 ++ src/map/pc.h | 1 + 4 files changed, 8 insertions(+), 1 deletion(-) diff --git a/conf/map/battle/player.conf b/conf/map/battle/player.conf index e478a92a1..39e1d9287 100644 --- a/conf/map/battle/player.conf +++ b/conf/map/battle/player.conf @@ -110,9 +110,12 @@ max_parameter: 99 // Same as max_parameter, but for 3rd classes. max_third_parameter: 130 -// Same as max_parameter, but for extend classes (Ex. Super Novice, Kagero/Oboro, Rebellion). +// Same as max_parameter, but for extended classes (Ex. Super Novice, Kagero/Oboro, Rebellion). max_extended_parameter: 125 +// Same as max_parameter, but for summoner class +max_summoner_parameter: 120 + // Same as max_parameter, but for baby classes. max_baby_parameter: 80 diff --git a/src/map/battle.c b/src/map/battle.c index f7ac60031..8c1a3f364 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -7318,6 +7318,7 @@ static const struct battle_data { { "save_body_style", &battle_config.save_body_style, 0, 0, 1, }, { "player_warp_keep_direction", &battle_config.player_warp_keep_direction, 0, 0, 1, }, { "atcommand_levelup_events", &battle_config.atcommand_levelup_events, 0, 0, 1, }, + { "max_summoner_parameter", &battle_config.max_summoner_parameter, 120, 10, 10000, }, }; #ifndef STATS_OPT_OUT /** diff --git a/src/map/battle.h b/src/map/battle.h index ebfa0e305..7e7048a38 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -544,6 +544,8 @@ struct Battle_Config { int player_warp_keep_direction; int atcommand_levelup_events; // Enable atcommands trigger level up events for NPCs + + int max_summoner_parameter; // Summoner Max Stats }; /* criteria for battle_config.idletime_critera */ diff --git a/src/map/pc.h b/src/map/pc.h index 2d6ca48a0..5d1404b2a 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -635,6 +635,7 @@ END_ZEROED_BLOCK; #define pc_is50overweight(sd) ( (sd)->weight*100 >= (sd)->max_weight*battle->bc->natural_heal_weight_rate ) #define pc_is90overweight(sd) ( (sd)->weight*10 >= (sd)->max_weight*9 ) #define pc_maxparameter(sd) ( \ + ((sd)->class_&MAPID_BASEMASK) == MAPID_SUMMONER ? battle->bc->max_summoner_parameter : \ ( ((sd)->class_&MAPID_UPPERMASK) == MAPID_KAGEROUOBORO \ || ((sd)->class_&MAPID_UPPERMASK) == MAPID_REBELLION \ || ((sd)->class_&MAPID_THIRDMASK) == MAPID_SUPER_NOVICE_E \ -- cgit v1.2.3-70-g09d2 From 5c81797935051a58c1501d6ec003874c7cace17d Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 20:23:27 +0530 Subject: Increases MAX_SKILL to occupy Summoner Skills --- src/common/mmo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/mmo.h b/src/common/mmo.h index 4dd19d422..93151d3ca 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -131,7 +131,7 @@ #define MAX_FAME 1000000000 #define MAX_CART 100 #ifndef MAX_SKILL -#define MAX_SKILL 1478 +#define MAX_SKILL 1510 #endif #ifndef MAX_SKILL_ID #define MAX_SKILL_ID 10015 // [Ind/Hercules] max used skill ID -- cgit v1.2.3-70-g09d2 From 696cf014fc7e662e32f37bf6ffe4a391961db621 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 20:44:59 +0530 Subject: Added Summoner Items --- db/pre-re/item_db.conf | 12 + db/re/item_db.conf | 997 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1009 insertions(+) diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf index 4ba5719a4..4e77704da 100644 --- a/db/pre-re/item_db.conf +++ b/db/pre-re/item_db.conf @@ -1702,6 +1702,7 @@ item_db: ( Dark_Collector: true Kagerou: true Rebellion: true + Summoner: true } EquipLv: 40 BuyingStore: true @@ -67169,6 +67170,16 @@ item_db: ( Weight: 100 Script: <" itemheal 0,10; "> }, +{ + Id: 11602 + AegisName: "Catnip_Fruit" + Name: "Catnip Fruit" + Type: 0 + Buy: 15 + Weight: 1 + Upper: 63 + Script: <" itemheal rand(10, 40), 0; "> +}, { Id: 11701 AegisName: "Girl_Bunch_Of_Flower" @@ -93370,6 +93381,7 @@ item_db: ( Dark_Collector: true Kagerou: true Rebellion: true + Summoner: true } EquipLv: 40 Script: <" sc_start SC_ATTHASTE_POTION2, 1800000, 0; "> diff --git a/db/re/item_db.conf b/db/re/item_db.conf index 34136aa5c..17287fa8e 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -1728,6 +1728,7 @@ item_db: ( Dark_Collector: true Kagerou: true Rebellion: true + Summoner: true } EquipLv: 40 BuyingStore: true @@ -18457,6 +18458,391 @@ item_db: ( if(BaseLevel>70) { bonus bMatk,(((BaseLevel-70)/10)*5); } "> }, +{ + Id: 1681 + AegisName: "Short_Foxtail_Staff" + Name: "Short Foxtail Staff" + Type: 5 + Buy: 20 + Atk: 30 + Range: 1 + Job: { + Summoner: true + } + Loc: 2 + WeaponLv: 1 + EquipLv: 1 + View: 10 +}, +{ + Id: 1683 + AegisName: "Enriched_Foxtail_Staff" + Name: "Enriched Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 200 + Atk: 50 + Matk: 70 + Range: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 2 + EquipLv: 12 + View: 10 + Script: <" bonus bMaxSP, 50; "> +}, +{ + Id: 1684 + AegisName: "Long_Foxtail_Staff" + Name: "Long Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 200 + Atk: 50 + Range: 2 + Slots: 1 + Job: { + Summoner: true + } + Loc: 2 + WeaponLv: 2 + EquipLv: 12 + View: 10 + Script: <" + bonus bLongAtkRate, 5; + bonus bMaxHP, 200; + "> +}, +{ + Id: 1685 + AegisName: "Dragonfly_Sitting_Foxtail_Staff" + Name: "Dragonfly Sitting Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 300 + Atk: 70 + Matk: 100 + Range: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 2 + EquipLv: 20 + View: 10 + Script: <" + bonus bInt, 1; + bonus bMaxHP, 100; + bonus bMaxSP, 150; + "> +}, +{ + Id: 1686 + AegisName: "Large_Foxtail_Staff" + Name: "Large Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 300 + Atk: 70 + Range: 1 + Slots: 1 + Job: { + Summoner: true + } + Loc: 2 + WeaponLv: 2 + EquipLv: 20 + View: 10 + Script: <" + bonus bLongAtkRate, 8; + bonus bDex, 1; + bonus bMaxHP, 200; + bonus bMaxSP, 100; + "> +}, +{ + Id: 1687 + AegisName: "Beginner_Foxtail_Staff" + Name: "Beginner Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 100 + Atk: 40 + Matk: 15 + Range: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 1 + EquipLv: 3 + View: 10 + Script: <" bonus bMaxHP, 100; "> +}, +{ + Id: 1690 + AegisName: "Mysterious_Foxtail_Staff" + Name: "Mysterious Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 400 + Atk: 80 + Matk: 180 + Range: 1 + Slots: 3 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 2 + EquipLv: 60 + View: 10 + Script: <" + bonus bMaxSP, 10 * (getrefine() / 3) + 50; + bonus bMatk, 10 * (getrefine() / 3); + "> +}, +{ + Id: 1691 + AegisName: "Strange_God_Foxtail_Staff" + Name: "Strange God Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 500 + Atk: 100 + Matk: 240 + Range: 1 + Slots: 2 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 3 + EquipLv: 100 + View: 10 + Script: <" + bonus bMaxSP, 100; + bonus bMatkRate, 2 * (getrefine() / 3); + bonus bMaxSPrate, getrefine() / 3; + if (getrefine() >= 7) { + .@r = min(getrefine(), 10) - 7; + bonus bWeaponAtkRate,(20 * .@r) + 40; + bonus bWeaponMatkRate,(20 * .@r) + 40; + } + + "> +}, +{ + Id: 1692 + AegisName: "Magical_Foxtail_Staff" + Name: "Magical Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 600 + Atk: 120 + Matk: 260 + Range: 1 + Slots: 2 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 3 + EquipLv: 140 + View: 10 + Script: <" + bonus bMaxSP, 100; + bonus bMatkRate, 2 * (getrefine() / 3); + bonus bMaxSPrate, getrefine() / 3; + if (getrefine() >= 7) { + .@r = min(getrefine(), 10) - 7; + bonus bWeaponAtkRate, (20 * .@r) + 40; + bonus bWeaponMatkRate, (20 * .@r) + 40; + } + + "> +}, +{ + Id: 1693 + AegisName: "Magical_Yellow_Foxtail_Staff" + Name: "Magical Yellow Foxtail Staff" + Type: 5 + Buy: 20 + Weight: 700 + Atk: 140 + Matk: 280 + Range: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 4 + EquipLv: 175 + View: 10 + Script: <" + bonus bMatkRate, 3 * (getrefine() / 2); + bonus4 bAutoSpellOnSkill, SU_FRESHSHRIMP, SU_ARCLOUSEDASH, max(1, getskilllv(SU_ARCLOUSEDASH)), 200; + bonus4 bAutoSpellOnSkill, SU_SV_STEMSPEAR, SU_FRESHSHRIMP, max(1, getskilllv(SU_FRESHSHRIMP)), 200; + if (getrefine() >= 7) { + .@r = min(getrefine(), 10) - 7; + bonus bWeaponAtkRate, (20 * .@r) + 40; + bonus bWeaponMatkRate, (20 * .@r) + 40; + } + + "> +}, +{ + Id: 1694 + AegisName: "Foxtail_Model" + Name: "Foxtail Model" + Type: 5 + Buy: 20 + Weight: 300 + Atk: 150 + Range: 1 + Slots: 3 + Job: { + Summoner: true + } + Loc: 2 + WeaponLv: 2 + EquipLv: 60 + View: 10 + Script: <" + bonus bLongAtkRate, 8; + bonus bMaxHP, 100; + bonus bDex, (getrefine() / 3) * 2; + bonus bMaxSP, (getrefine() / 3) * 10; + "> +}, +{ + Id: 1695 + AegisName: "Delicate_Foxtail_Model" + Name: "Delicate Foxtail Model" + Type: 5 + Buy: 20 + Weight: 300 + Atk: 195 + Range: 1 + Slots: 2 + Job: { + Summoner: true + } + Loc: 2 + WeaponLv: 3 + EquipLv: 100 + View: 10 + Script: <" + bonus bLongAtkRate, 8; + bonus bMaxHP, 200; + bonus bDex, (getrefine() / 3) * 3; + bonus bMaxSP, (getrefine() / 3) * 15; + if (getrefine() >= 7) { + .@r = min(getrefine(), 10) - 7; + bonus bWeaponAtkRate, (20 * .@r) + 40; + bonus bWeaponMatkRate, (20 * .@r) + 40; + } + + "> +}, +{ + Id: 1696 + AegisName: "Exquisite_Foxtail_Model" + Name: "Exquisite Foxtail Model" + Type: 5 + Buy: 20 + Weight: 300 + Atk: 240 + Range: 1 + Slots: 2 + Job: { + Summoner: true + } + Loc: 2 + WeaponLv: 3 + EquipLv: 140 + View: 10 + Script: <" + bonus bLongAtkRate, 8; + bonus bMaxHPrate, 5; + bonus bDex, (getrefine() / 2) * 3; + bonus bMaxSP, (getrefine() / 2) * 15; + if (getrefine() >= 7) { + .@r = min(getrefine(), 10) - 7; + bonus bWeaponAtkRate, (20 * .@r) + 40; + bonus bWeaponMatkRate, (20 * .@r) + 40; + } + + "> +}, +{ + Id: 1697 + AegisName: "Exquisite_Yellow_Foxtail_Model" + Name: "Exquisite Yellow Foxtail Model" + Type: 5 + Buy: 20 + Weight: 300 + Atk: 270 + Range: 1 + Slots: 1 + Job: { + Summoner: true + } + Loc: 2 + WeaponLv: 4 + EquipLv: 175 + View: 10 + Script: <" + bonus bLongAtkRate, 9; + bonus bMaxHPrate, 7; + bonus bLongAtkRate, getrefine() / 2; + bonus bMaxSP, (getrefine() / 2) * 20; + bonus4 bAutoSpellOnSkill, SU_PICKYPECK, SU_FRESHSHRIMP, max(1, getskilllv(SU_FRESHSHRIMP)), 200; + if (getrefine() >= 7) { + .@r = min(getrefine(), 10) - 7; + bonus bWeaponAtkRate, (20 * .@r) + 40; + bonus bWeaponMatkRate, (20 * .@r) + 40; + } + + "> +}, +{ + Id: 1699 + AegisName: "Paradise_Foxtail_Staff_I" + Name: "Eden Group Foxtail I" + Type: 5 + Buy: 20 + Atk: 120 + Matk: 135 + Range: 1 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 2 + EquipLv: 26 + Refine: false + View: 10 + Script: <" + bonus bDex, 3; + bonus bInt, 3; + bonus bLongAtkRate, 5; + "> +}, //== Bows ================================================== { @@ -84596,6 +84982,16 @@ item_db: ( montransform QUVE, 600000, SC_MTF_HITFLEE, 10, 20; "> }, +{ + Id: 11602 + AegisName: "Catnip_Fruit" + Name: "Catnip Fruit" + Type: 0 + Buy: 15 + Weight: 1 + Upper: 63 + Script: <" itemheal rand(10,40),0; "> +}, { Id: 11701 AegisName: "Girl_Bunch_Of_Flower" @@ -95172,6 +95568,7 @@ item_db: ( Dark_Collector: true Kagerou: true Rebellion: true + Summoner: true } EquipLv: 40 Trade: { @@ -120407,6 +120804,7 @@ item_db: ( Dark_Collector: true Kagerou: true Rebellion: true + Summoner: true } Trade: { nodrop: true @@ -124113,6 +124511,27 @@ item_db: ( if(getrefine()>6) { bonus bCritAtkRate,6; } "> }, +{ + Id: 15126 + AegisName: "Private_Doram_Suits" + Name: "Private Doram Suits" + Type: 4 + Buy: 20 + Weight: 700 + Def: 80 + Slots: 1 + Job: { + Summoner: true + } + Loc: 16 + EquipLv: 100 + Script: <" + bonus bMaxHP, 500; + bonus bMaxSP, 100; + bonus bDex, getrefine() / 3; + bonus bInt, getrefine() / 3; + "> +}, { Id: 15128 AegisName: "Excellion_Suit" @@ -124129,6 +124548,27 @@ item_db: ( if(BaseLevel>130) { bonus bVit,4; } "> }, +{ + Id: 15129 + AegisName: "Luxury_Doram_Suit" + Name: "Luxury Doram Suit" + Type: 4 + Buy: 20 + Weight: 800 + Def: 100 + Slots: 1 + Job: { + Summoner: true + } + Loc: 16 + EquipLv: 140 + Script: <" + bonus bMaxHPrate, 10; + bonus bMaxSPrate, 10; + bonus bDex, getrefine() / 2; + bonus bInt, getrefine() / 2; + "> +}, { Id: 15138 AegisName: "Egir_Armor_K" @@ -124146,6 +124586,67 @@ item_db: ( bonus bUnbreakableArmor, 0; "> }, +{ + Id: 15150 + AegisName: "White_Shirt" + Name: "White Shirt" + Type: 4 + Buy: 20 + Weight: 50 + Def: 25 + Slots: 1 + Job: { + Summoner: true + } + Loc: 16 + EquipLv: 6 + Script: <" + bonus bMaxHP,70; + bonus bFlee,5; + "> +}, +{ + Id: 15151 + AegisName: "White_Eco-Shirt" + Name: "White Eco-Shirt" + Type: 4 + Buy: 20 + Weight: 100 + Def: 40 + Slots: 1 + Job: { + Summoner: true + } + Loc: 16 + EquipLv: 15 + Script: <" + bonus bMaxHP,150; + bonus bFlee,10; + "> +}, +{ + Id: 15156 + AegisName: "Elegant_Doram_Suit" + Name: "Elegant Doram Suit" + Type: 4 + Buy: 20 + Weight: 900 + Def: 120 + Slots: 1 + Job: { + Summoner: true + } + Loc: 16 + EquipLv: 175 + Script: <" + bonus bMaxHPrate, 15; + bonus bMaxSPrate, 15; + bonus bDex, getrefine(); + bonus bInt, getrefine(); + if (getrefine() > 9) + bonus bUseSPrate, -5; + "> +}, //== More Maces ============================================ { @@ -144946,6 +145447,70 @@ item_db: ( } "> }, +{ + Id: 20788 + AegisName: "Private_Doram_Manteau" + Name: "Private Doram Manteau" + Type: 4 + Buy: 20 + Weight: 300 + Def: 20 + Slots: 1 + Job: { + Summoner: true + } + Loc: 4 + EquipLv: 100 + Script: <" + bonus bFlee,5; + bonus2 bSubEle,Ele_Neutral,2; + bonus bFlee2,getrefine()/3; + "> +}, +{ + Id: 20789 + AegisName: "Luxury_Doram_Manteau" + Name: "Luxury Doram Manteau" + Type: 4 + Buy: 20 + Weight: 400 + Def: 25 + Slots: 1 + Job: { + Summoner: true + } + Loc: 4 + EquipLv: 140 + Script: <" + bonus bFlee, 7; + bonus2 bSubEle,Ele_Neutral, 3; + bonus bFlee2, getrefine() / 3; + bonus bLuk, getrefine() / 3; + "> +}, +{ + Id: 20790 + AegisName: "Elegant_Doram_Manteau" + Name: "Elegant Doram Manteau" + Type: 4 + Buy: 20 + Weight: 500 + Def: 30 + Slots: 1 + Job: { + Summoner: true + } + Loc: 4 + EquipLv: 175 + Script: <" + bonus bFlee, 10; + bonus2 bSubEle,Ele_Neutral, 5; + bonus bFlee2, getrefine() / 2; + bonus bInt, getrefine() / 2; + bonus bDex, getrefine() / 2; + bonus bLuk, getrefine() / 2; + "> +}, //== New Two-Handed Swords ================================= { @@ -146105,6 +146670,107 @@ item_db: ( autobonus3 "{ }", 1000, 7000, ALL_CATCRY, "{ montransform LOLI_RURI, 420000; }"; "> }, +{ + Id: 22076 + AegisName: "Wooden_Slipper" + Name: "Wooden Slipper" + Type: 4 + Buy: 20 + Weight: 50 + Def: 10 + Slots: 1 + Job: { + Summoner: true + } + Loc: 64 + EquipLv: 9 + Script: <" bonus2 bHPRegenRate,2,10000; "> +}, +{ + Id: 22077 + AegisName: "Red_Eco-Friendly_Shoes" + Name: "Red Eco-Friendly Shoes" + Type: 4 + Buy: 20 + Weight: 100 + Def: 20 + Slots: 1 + Job: { + Summoner: true + } + Loc: 64 + EquipLv: 18 + Script: <" + bonus bCritical,5; + bonus2 bHPRegenRate,4,10000; + bonus2 bSPRegenRate,1,10000; + "> +}, +{ + Id: 22083 + AegisName: "Private_Doram_Shoes" + Name: "Private Doram Shoes" + Type: 4 + Buy: 20 + Weight: 500 + Def: 25 + Slots: 1 + Job: { + Summoner: true + } + Loc: 64 + EquipLv: 100 + Script: <" + bonus bMaxHP, 100; + bonus bMaxSP, 50; + bonus bHPrecovRate, getrefine() * 10 / 3; + bonus bSPrecovRate, getrefine() * 10 / 3; + "> +}, +{ + Id: 22084 + AegisName: "Luxury_Doram_Shoes" + Name: "Luxury Doram Shoes" + Type: 4 + Buy: 20 + Weight: 600 + Def: 30 + Slots: 1 + Job: { + Summoner: true + } + Loc: 64 + EquipLv: 140 + Script: <" + bonus bMaxHP, 300; + bonus bMaxSP, 100; + bonus bHPrecovRate, 20 * getrefine() / 3; + bonus bSPrecovRate, 20 * getrefine() / 3; + "> +}, +{ + Id: 22085 + AegisName: "Elegant_Doram_Shoes" + Name: "Elegant Doram Shoes" + Type: 4 + Buy: 20 + Weight: 700 + Def: 35 + Slots: 1 + Job: { + Summoner: true + } + Loc: 64 + EquipLv: 175 + Script: <" + bonus bMaxHPrate, 10; + bonus bMaxSPrate, 5; + bonus bMaxHP, 100 * getrefine() / 2; + bonus bMaxSP, 20 * getrefine() / 2; + if ((getrefine() / 2) >= 4) + bonus2 bSkillUseSP, SU_LOPE, 5; + "> +}, //== New Etc Items ========================================= { @@ -149317,6 +149983,31 @@ item_db: ( if (getrefine()>=9) { bonus bDelayrate,-1; } "> }, +//== New Staffs ============================================ +{ + Id: 26101 + AegisName: "Paradise_Foxtail_Staff_III" + Name: "Eden Group Foxtail Staff III" + Type: 5 + Buy: 20 + Atk: 150 + Matk: 195 + Range: 1 + Job: { + Summoner: true + } + Upper: 7 + Loc: 2 + WeaponLv: 3 + EquipLv: 60 + Refine: false + View: 10 + Script: <" + bonus bDex,5; + bonus bInt,5; + bonus bLongAtkRate,7; + "> +}, //== New Katars ============================================ { @@ -149963,6 +150654,312 @@ item_db: ( bonus bMaxSPrate,3; "> }, +{ + Id: 28374 + AegisName: "Foxtail_Ring" + Name: "Foxtail Ring" + Type: 4 + Buy: 20 + Weight: 100 + Job: { + Summoner: true + } + Loc: 136 + EquipLv: 1 + Refine: false + Script: <" + bonus2 bExpAddRace,RC_All,5; + .@lvl = min(BaseLevel/5,10); + bonus bAtk,2*.@lvl; + bonus bMatk,2*.@lvl; + bonus bMaxHP,10*.@lvl; + bonus bMaxSP,5*.@lvl; + "> +}, +{ + Id: 28380 + AegisName: "Fresh_Grass_Necklace" + Name: "Fresh Grass Necklace" + Type: 4 + Buy: 20 + Weight: 100 + Slots: 1 + Job: { + Summoner: true + } + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" + bonus bFlee2,5; + bonus2 bSkillCooldown,SU_SCAROFTAROU,-5000; + "> +}, +{ + Id: 28381 + AegisName: "Cute_Grass_Necklace" + Name: "Cute Grass Necklace" + Type: 4 + Buy: 20 + Weight: 10 + Slots: 1 + Job: { + Summoner: true + } + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" + bonus bHealPower,5; + bonus2 bSkillCooldown,SU_TUNAPARTY,-7000; + "> +}, +{ + Id: 28382 + AegisName: "Charm_Grass_Necklace" + Name: "Charm Grass Necklace" + Type: 4 + Buy: 20 + Weight: 10 + Slots: 1 + Job: { + Summoner: true + } + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" + bonus bMdef,5; + bonus2 bVariableCastrate,SU_CN_METEOR,-1000; + "> +}, +{ + Id: 28413 + AegisName: "Lesser_Mackerel_Talisman" + Name: "Lesser Mackerel Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" bonus bVit,1; "> +}, +{ + Id: 28414 + AegisName: "Intermediate_Mackerel_Talisman" + Name: "Intermediate Mackerel Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 140 + Refine: false + Script: <" bonus bVit,2; "> +}, +{ + Id: 28415 + AegisName: "Greater_Mackerel_Talisman" + Name: "Greater Mackerel Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 175 + Refine: false + Script: <" bonus bVit,3; "> +}, +{ + Id: 28416 + AegisName: "Lesser_Leaf_Talisman" + Name: "Lesser Leaf Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" bonus bInt,1; "> +}, +{ + Id: 28417 + AegisName: "Intermediate_Leaf_Talisman" + Name: "Intermediate Leaf Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 140 + Refine: false + Script: <" bonus bInt,2; "> +}, +{ + Id: 28418 + AegisName: "Greater_Leaf_Talisman" + Name: "Greater Leaf Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 175 + Refine: false + Script: <" bonus bInt,3; "> +}, +{ + Id: 28419 + AegisName: "Lesser_Rabbit_Talisman" + Name: "Lesser Rabbit Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" bonus bDex,1; "> +}, +{ + Id: 28420 + AegisName: "Intermediate_Rabbit_Talisman" + Name: "Intermediate Rabbit Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 140 + Refine: false + Script: <" bonus bDex,2; "> +}, +{ + Id: 28421 + AegisName: "Greater_Rabbit_Talisman" + Name: "Greater Rabbit Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 175 + Refine: false + Script: <" bonus bDex,3; "> +}, +{ + Id: 28422 + AegisName: "Shiny_Branch_Talisman" + Name: "Shiny Branch Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" + bonus2 bVariableCastrate,SU_SV_STEMSPEAR,-50; + bonus2 bSkillAtk,SU_SV_STEMSPEAR,(readparam(bInt)/2)+(20 * getskilllv(SU_SV_STEMSPEAR)); + //Need to confirm damage formula + "> +}, +{ + Id: 28423 + AegisName: "Fresh_Tuna_Talisman" + Name: "Fresh Tuna Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" + bonus2 bSkillCooldown,SU_TUNAPARTY,-5000; + bonus3 bAutoSpellWhenHit,SU_TUNAPARTY,max(1,getskilllv(SU_TUNAPARTY)),10; + "> +}, +{ + Id: 28424 + AegisName: "Chubby_Worm_Talisman" + Name: "Chubby Worm Talisman" + Type: 4 + Buy: 0 + Weight: 100 + Def: 1 + Slots: 1 + Job: { + Summoner: true + } + Upper: 63 + Loc: 136 + EquipLv: 100 + Refine: false + Script: <" + bonus2 bVariableCastrate,SU_PICKYPECK,-50; + bonus2 bSkillAtk,SU_PICKYPECK,(readparam(bDex)/2)+(20 * getskilllv(SU_PICKYPECK)); + //Need to confirm damage formula + "> +}, //== New Books ============================================= { -- cgit v1.2.3-70-g09d2 From c2f84724b5589c3951ed2740ad411f35563bd9c8 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Wed, 5 Oct 2016 21:29:07 +0530 Subject: Fix incorrect coding style used in char/char.c and map/skill.c --- src/char/char.c | 4 ++-- src/map/skill.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/char/char.c b/src/char/char.c index 3ce8e9040..a43f783b5 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -1557,10 +1557,10 @@ int char_make_new_char_sql(struct char_session_data *sd, const char *name_, int SQL->EscapeStringLen(inter->sql_handle, esc_name, name, strnlen(name, NAME_LENGTH)); flag = chr->check_char_name(name,esc_name); - if( flag < 0 ) + if (flag < 0) return flag; - switch(starting_job) { + switch (starting_job) { case JOB_SUMMONER: case JOB_NOVICE: break; diff --git a/src/map/skill.c b/src/map/skill.c index b3a060de2..4c57fbc56 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -9549,14 +9549,14 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin break; case SU_HIDE: - if (tsce) { - clif->skill_nodamage(src,bl,skill_id,skill_lv,1); + if (tsce != NULL) { + clif->skill_nodamage(src, bl, skill_id, skill_lv, 1); status_change_end(bl, type, INVALID_TIMER); map->freeblock_unlock(); return 0; } - clif->skill_nodamage(src,bl,skill_id,skill_lv,1); - sc_start(src,bl,type,100,skill_lv,skill->get_time(skill_id,skill_lv)); + clif->skill_nodamage(src, bl, skill_id, skill_lv, 1); + sc_start(src, bl, type, 100, skill_lv, skill->get_time(skill_id, skill_lv)); break; break; -- cgit v1.2.3-70-g09d2 From 431b8aad001d959225aaa41b8d0a80c4d5526229 Mon Sep 17 00:00:00 2001 From: Dastgir Pojee Date: Mon, 3 Oct 2016 20:15:53 +0530 Subject: HPMHook Update --- src/plugins/HPMHooking/HPMHooking.Defs.inc | 4 ++-- src/plugins/HPMHooking/HPMHooking_char.Hooks.inc | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc index 1e4ca6425..2ff104ed6 100644 --- a/src/plugins/HPMHooking/HPMHooking.Defs.inc +++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc @@ -396,8 +396,8 @@ typedef int (*HPMHOOK_pre_chr_rename_char_sql) (struct char_session_data **sd, i typedef int (*HPMHOOK_post_chr_rename_char_sql) (int retVal___, struct char_session_data *sd, int char_id); typedef int (*HPMHOOK_pre_chr_check_char_name) (char **name, char **esc_name); typedef int (*HPMHOOK_post_chr_check_char_name) (int retVal___, char *name, char *esc_name); -typedef int (*HPMHOOK_pre_chr_make_new_char_sql) (struct char_session_data **sd, const char **name_, int *str, int *agi, int *vit, int *int_, int *dex, int *luk, int *slot, int *hair_color, int *hair_style); -typedef int (*HPMHOOK_post_chr_make_new_char_sql) (int retVal___, struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style); +typedef int (*HPMHOOK_pre_chr_make_new_char_sql) (struct char_session_data **sd, const char **name_, int *str, int *agi, int *vit, int *int_, int *dex, int *luk, int *slot, int *hair_color, int *hair_style, short *starting_job); +typedef int (*HPMHOOK_post_chr_make_new_char_sql) (int retVal___, struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style, short starting_job); typedef int (*HPMHOOK_pre_chr_divorce_char_sql) (int *partner_id1, int *partner_id2); typedef int (*HPMHOOK_post_chr_divorce_char_sql) (int retVal___, int partner_id1, int partner_id2); typedef int (*HPMHOOK_pre_chr_count_users) (void); diff --git a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc index 89ae03319..19e127a23 100644 --- a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc +++ b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc @@ -744,15 +744,15 @@ int HP_chr_check_char_name(char *name, char *esc_name) { } return retVal___; } -int HP_chr_make_new_char_sql(struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style) { +int HP_chr_make_new_char_sql(struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style, short starting_job) { int hIndex = 0; int retVal___ = 0; if( HPMHooks.count.HP_chr_make_new_char_sql_pre ) { - int (*preHookFunc) (struct char_session_data **sd, const char **name_, int *str, int *agi, int *vit, int *int_, int *dex, int *luk, int *slot, int *hair_color, int *hair_style); + int (*preHookFunc) (struct char_session_data **sd, const char **name_, int *str, int *agi, int *vit, int *int_, int *dex, int *luk, int *slot, int *hair_color, int *hair_style, short *starting_job); *HPMforce_return = false; for(hIndex = 0; hIndex < HPMHooks.count.HP_chr_make_new_char_sql_pre; hIndex++ ) { preHookFunc = HPMHooks.list.HP_chr_make_new_char_sql_pre[hIndex].func; - retVal___ = preHookFunc(&sd, &name_, &str, &agi, &vit, &int_, &dex, &luk, &slot, &hair_color, &hair_style); + retVal___ = preHookFunc(&sd, &name_, &str, &agi, &vit, &int_, &dex, &luk, &slot, &hair_color, &hair_style, &starting_job); } if( *HPMforce_return ) { *HPMforce_return = false; @@ -760,13 +760,13 @@ int HP_chr_make_new_char_sql(struct char_session_data *sd, const char *name_, in } } { - retVal___ = HPMHooks.source.chr.make_new_char_sql(sd, name_, str, agi, vit, int_, dex, luk, slot, hair_color, hair_style); + retVal___ = HPMHooks.source.chr.make_new_char_sql(sd, name_, str, agi, vit, int_, dex, luk, slot, hair_color, hair_style, starting_job); } if( HPMHooks.count.HP_chr_make_new_char_sql_post ) { - int (*postHookFunc) (int retVal___, struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style); + int (*postHookFunc) (int retVal___, struct char_session_data *sd, const char *name_, int str, int agi, int vit, int int_, int dex, int luk, int slot, int hair_color, int hair_style, short starting_job); for(hIndex = 0; hIndex < HPMHooks.count.HP_chr_make_new_char_sql_post; hIndex++ ) { postHookFunc = HPMHooks.list.HP_chr_make_new_char_sql_post[hIndex].func; - retVal___ = postHookFunc(retVal___, sd, name_, str, agi, vit, int_, dex, luk, slot, hair_color, hair_style); + retVal___ = postHookFunc(retVal___, sd, name_, str, agi, vit, int_, dex, luk, slot, hair_color, hair_style, starting_job); } } return retVal___; -- cgit v1.2.3-70-g09d2