From 7d8f83d8ff360df4c2b960933c015117eb9d776b Mon Sep 17 00:00:00 2001 From: shenhuyong Date: Fri, 27 Sep 2013 10:35:52 +0800 Subject: Added full support for the Rebellion. Credits to 3ceam2 for the base,Thanks to Rytech. -The skill still needs to be completed, as well as support for higher base stats. -Bonus stats are set to temporarily values until the official ones are known. -Updated the item_db.txt file with information on the Rebellion's job equip mask. -Added packets and packet keys for 2013-08-07Ragexe with the info provided by Shakto,Thanks to Shakto. -A 2013-08-07Ragexe client or higher is required for this job to be properly playable. --- src/common/mmo.h | 1 + src/map/itemdb.c | 5 +++++ src/map/map.h | 1 + src/map/packets.h | 35 +++++++++++++++++++++++++++++++++++ src/map/pc.c | 5 +++++ src/map/pc.h | 5 +++-- src/map/skill.c | 4 ++-- src/map/skill.h | 25 +++++++++++++++++++++++++ src/map/status.c | 2 +- 9 files changed, 78 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/common/mmo.h b/src/common/mmo.h index b51d0ec4a..f49a859e0 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -772,6 +772,7 @@ enum { JOB_KAGEROU = 4211, JOB_OBORO, + JOB_REBELLION = 4215, JOB_MAX, }; diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 2398ba04c..7af6f3262 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -354,7 +354,10 @@ void itemdb_jobid2mapid(unsigned int *bclass, unsigned int jobmask) if (jobmask & 1<<23) //Soul Linker bclass[2] |= 1<pRanklist); #endif +//2013-08-07Ragexe (Shakto) +#if PACKETVER >= 20130807 + 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,41,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(0x0887,36,clif->pStoragePassword,0); +#endif /* PacketKeys: http://hercules.ws/board/topic/1105-hercules-wpe-free-june-14th-patch/ */ #if PACKETVER >= 20110817 @@ -2559,5 +2591,8 @@ packet(0x020d,-1); packetKeys(0x4FF90E23,0x0F1432F2,0x4CFA1EDA); /* Thanks to Shakto */ #endif +#if PACKETVER >= 20130807 + packetKeys(0x7E241DE0,0x5E805580,0x3D807D80); /* Thanks to Shakto */ +#endif #endif /* _PACKETS_H_ */ diff --git a/src/map/pc.c b/src/map/pc.c index 86ee7a8db..29a59cd69 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5222,6 +5222,7 @@ int pc_jobid2mapid(unsigned short b_class) case JOB_STAR_GLADIATOR: return MAPID_STAR_GLADIATOR; case JOB_KAGEROU: case JOB_OBORO: return MAPID_KAGEROUOBORO; + case JOB_REBELLION: return MAPID_REBELLION; case JOB_DEATH_KNIGHT: return MAPID_DEATH_KNIGHT; //2-2 Jobs case JOB_CRUSADER: return MAPID_CRUSADER; @@ -5362,6 +5363,7 @@ int pc_mapid2jobid(unsigned short class_, int sex) case MAPID_ASSASSIN: return JOB_ASSASSIN; case MAPID_STAR_GLADIATOR: return JOB_STAR_GLADIATOR; case MAPID_KAGEROUOBORO: return sex?JOB_KAGEROU:JOB_OBORO; + case MAPID_REBELLION: return JOB_REBELLION; case MAPID_DEATH_KNIGHT: return JOB_DEATH_KNIGHT; //2-2 Jobs case MAPID_CRUSADER: return JOB_CRUSADER; @@ -5678,6 +5680,8 @@ const char* job_name(int class_) case JOB_KAGEROU: case JOB_OBORO: return msg_txt(653 - JOB_KAGEROU+class_); + case JOB_REBELLION: + return msg_txt(694); default: return msg_txt(655); @@ -9741,6 +9745,7 @@ void pc_read_skill_tree(void) { { "Expanded_Super_Baby", JOB_SUPER_BABY_E }, { "Kagerou", JOB_KAGEROU }, { "Oboro", JOB_OBORO }, + { "Rebellion", JOB_REBELLION }, }; if (conf_read_file(&skill_tree_conf, config_filename)) { diff --git a/src/map/pc.h b/src/map/pc.h index 4b90e7fc3..36c866535 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -634,7 +634,7 @@ enum equip_pos { #define pc_isinvisible(sd) ( (sd)->sc.option&OPTION_INVISIBLE ) #define pc_is50overweight(sd) ( (sd)->weight*100 >= (sd)->max_weight*battle_config.natural_heal_weight_rate ) #define pc_is90overweight(sd) ( (sd)->weight*10 >= (sd)->max_weight*9 ) -#define pc_maxparameter(sd) ( ((((sd)->class_&MAPID_UPPERMASK) == MAPID_KAGEROUOBORO) || (sd)->class_&JOBL_THIRD ? ((sd)->class_&JOBL_BABY ? battle_config.max_baby_third_parameter : battle_config.max_third_parameter) : ((sd)->class_&JOBL_BABY ? battle_config.max_baby_parameter : battle_config.max_parameter)) ) +#define pc_maxparameter(sd) ( ((((sd)->class_&MAPID_UPPERMASK) == MAPID_KAGEROUOBORO) || (((sd)->class_&MAPID_UPPERMASK) == MAPID_REBELLION) || (sd)->class_&JOBL_THIRD ? ((sd)->class_&JOBL_BABY ? battle_config.max_baby_third_parameter : battle_config.max_third_parameter) : ((sd)->class_&JOBL_BABY ? battle_config.max_baby_parameter : battle_config.max_parameter)) ) /** * Ranger **/ @@ -660,7 +660,8 @@ enum equip_pos { || ( (class_) >= JOB_RUNE_KNIGHT && (class_) <= JOB_MECHANIC_T2 ) \ || ( (class_) >= JOB_BABY_RUNE && (class_) <= JOB_BABY_MECHANIC2 ) \ || ( (class_) >= JOB_SUPER_NOVICE_E && (class_) <= JOB_SUPER_BABY_E ) \ -|| ( (class_) >= JOB_KAGEROU && (class_) < JOB_MAX ) \ +|| ( (class_) >= JOB_KAGEROU && (class_) <= JOB_OBORO ) \ +|| ( (class_) >= JOB_REBELLION && (class_) < JOB_MAX ) \ ) #define pcdb_checkid(class_) pcdb_checkid_sub((unsigned int)class_) diff --git a/src/map/skill.c b/src/map/skill.c index 3541f9f45..32880e535 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -5813,7 +5813,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case MO_KITRANSLATION: - if(dstsd && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) { + if(dstsd && ((dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER || (dstsd->class_&MAPID_UPPERMASK)!=MAPID_REBELLION)) { pc->addspiritball(dstsd,skill->get_time(skill_id,skill_lv),5); } break; @@ -5828,7 +5828,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case MO_ABSORBSPIRITS: i = 0; - if (dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m)) && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) + if (dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m)) && ((dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER || (dstsd->class_&MAPID_UPPERMASK)!=MAPID_REBELLION)) { // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen] i = dstsd->spiritball * 7; pc->delspiritball(dstsd,dstsd->spiritball,0); diff --git a/src/map/skill.h b/src/map/skill.h index eee62dc4a..00242887f 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -1247,6 +1247,31 @@ enum e_skill { ALL_RAY_OF_PROTECTION, MC_CARTDECORATE, + RL_GLITTERING_GREED = 2551, + RL_RICHS_COIN, + RL_MASS_SPIRAL, + RL_BANISHING_BUSTER, + RL_B_TRAP, + RL_FLICKER, + RL_S_STORM, + RL_E_CHAIN, + RL_QD_SHOT, + RL_C_MARKER, + RL_FIREDANCE, + RL_H_MINE, + RL_P_ALTER, + RL_FALLEN_ANGEL, + RL_R_TRIP, + RL_D_TAIL, + RL_FIRE_RAIN, + RL_HEAT_BARREL, + RL_AM_BLAST, + RL_SLUGSHOT, + RL_HAMMER_OF_GOD, + RL_R_TRIP_PLUSATK, + RL_B_FLICKER_ATK, + RL_GLITTERING_GREED_ATK, + KO_YAMIKUMO = 3001, KO_RIGHT, KO_LEFT, diff --git a/src/map/status.c b/src/map/status.c index 46f732e81..bac302dec 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2278,7 +2278,7 @@ static unsigned int status_base_pc_maxhp(struct map_session_data *sd, struct sta uint64 val = pc->class2idx(sd->status.class_); val = 35 + sd->status.base_level*(int64)hp_coefficient2[val]/100 + hp_sigma_val[val][sd->status.base_level]; - if((sd->class_&MAPID_UPPERMASK) == MAPID_NINJA || (sd->class_&MAPID_UPPERMASK) == MAPID_GUNSLINGER) + if((sd->class_&MAPID_UPPERMASK) == MAPID_NINJA || (sd->class_&MAPID_UPPERMASK) == MAPID_GUNSLINGER || (sd->class_&MAPID_UPPERMASK) == MAPID_REBELLION) val += 100; //Since their HP can't be approximated well enough without this. if((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc->famerank(sd->status.char_id, MAPID_TAEKWON)) val *= 3; //Triple max HP for top ranking Taekwons over level 90. -- cgit v1.2.3-70-g09d2