Adds support for new Madogear appearance (#5081)
* Fixes #4524. * Adds support for the new slimmer Madogear suit. * Adjusts script command setmadogear to support changing to this type. * Adjusts atcommand mount to support changing to this type. * Removes a 3rd class check from setoption for Rangers and Mechanics. * Removes status_calc_pc call from pc_setoption so that it can be handled via normal status change calculations. * Adds Mado_Box02 item for Mado Suit. Thanks to @admkakaroto, @Atemo and @Lemongrass3110!
This commit is contained in:
parent
e1e548ce02
commit
c36f6b820f
@ -47472,7 +47472,8 @@ Body:
|
||||
Delay:
|
||||
Duration: 180000
|
||||
Script: |
|
||||
setmadogear 1;
|
||||
specialeffect2 EF_CLAYMORE;
|
||||
setmadogear true;
|
||||
- Id: 23280
|
||||
AegisName: N_Fly_Wing_
|
||||
Name: Novice Fly Wing
|
||||
@ -48818,6 +48819,22 @@ Body:
|
||||
Weight: 10
|
||||
Script: |
|
||||
/*synthesisui 100408;*/
|
||||
- Id: 100518
|
||||
AegisName: Mado_Box02
|
||||
Name: Mado Strengthening Suit
|
||||
Type: Usable
|
||||
Buy: 10000
|
||||
Weight: 300
|
||||
Jobs:
|
||||
Blacksmith: true
|
||||
Classes:
|
||||
All_Third: true
|
||||
EquipLevelMin: 100
|
||||
Delay:
|
||||
Duration: 180000
|
||||
Script: |
|
||||
specialeffect2 EF_CLAYMORE;
|
||||
setmadogear true,MADO_SUIT;
|
||||
- Id: 1100003
|
||||
AegisName: Concentrated_R_P
|
||||
Name: Concentrated Red Potion
|
||||
|
@ -973,6 +973,7 @@ Summons the specified amount of soul spheres around you.
|
||||
---------------------------------------
|
||||
|
||||
@mount {<dragon color 1-5>}
|
||||
@mount {<madogear type 0-2>}
|
||||
@mount2
|
||||
|
||||
Toggles mounting/unmounting a job mount (@mount) or cash mount (@mount2).
|
||||
|
@ -3850,11 +3850,17 @@ dragon and 0 if they aren't.
|
||||
|
||||
---------------------------------------
|
||||
|
||||
*setmadogear {<flag>{,<char_id>}};
|
||||
*setmadogear {<flag>{,<type>{,<char_id>}}};
|
||||
*checkmadogear({<char_id>});
|
||||
|
||||
If <flag> is 0 this command will remove the mount from the character.
|
||||
Otherwise it gives the invoking character a Mado (if they are a Mechanic).
|
||||
If <flag> is false this command will remove the mount from the character.
|
||||
Otherwise it gives the invoking character a Mado (if they are a Mechanic and have the skill NC_MADOLICENCE).
|
||||
|
||||
When using client version PACKETVER_MAIN_NUM >= 20191120 or PACKETVER_RE_NUM >= 20191106
|
||||
the <type> flag can be used to specify a specific madogear.
|
||||
Types:
|
||||
MADO_ROBOT (default)
|
||||
MADO_SUIT
|
||||
|
||||
The accompanying function will return 1 if the invoking character has a
|
||||
Mado and 0 if they don't.
|
||||
|
@ -3269,7 +3269,7 @@ REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`fla
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`flag_container`,`trade_override`,`trade_nodrop`,`trade_notrade`,`trade_nosell`,`trade_nocart`,`trade_noguildstorage`,`trade_nomail`,`trade_noauction`,`script`) VALUES (23255,'Kardui_Bundle_A','Kardui Bundle A','Usable',0,true,100,true,true,true,true,true,true,true,'getitem(1649,1);\ngetitem(15169,1);');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (23256,'Elixir_Bandages','Elixir Bandages','Usable',10,'pet 1041;');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`flag_container`,`trade_override`,`trade_nodrop`,`trade_notrade`,`trade_nosell`,`trade_nocart`,`trade_noguildstorage`,`trade_nomail`,`trade_noauction`,`script`) VALUES (23266,'Etran_Bundle_A','Etran Bundle A','Usable',0,true,100,true,true,true,true,true,true,true,'getitem(2371,1);\ngetitem(20797,1);');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`job_blacksmith`,`class_third`,`class_third_upper`,`class_third_baby`,`equip_level_min`,`delay_duration`,`script`) VALUES (23277,'Mado_Box','Emergency Magic Gear','Usable',10000,3000,true,true,true,true,100,180000,'setmadogear 1;');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`job_blacksmith`,`class_third`,`class_third_upper`,`class_third_baby`,`equip_level_min`,`delay_duration`,`script`) VALUES (23277,'Mado_Box','Emergency Magic Gear','Usable',10000,3000,true,true,true,true,100,180000,'specialeffect2 EF_CLAYMORE;\nsetmadogear true;');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`equip_level_min`,`equip_level_max`,`trade_override`,`trade_nodrop`,`trade_notrade`,`trade_nocart`,`trade_nostorage`,`trade_noguildstorage`,`trade_nomail`,`trade_noauction`,`script`) VALUES (23280,'N_Fly_Wing_','Novice Fly Wing','Delayconsume',10,1,98,100,true,true,true,true,true,true,true,'itemskill "AL_TELEPORT",1;');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`script`) VALUES (23281,'RaceShadow_Mix','RaceShadow Mix','Delayconsume',10,'/*synthesisui 23281;*/');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (23288,'Compressed_Wing_Of_Fly','Compressed Fly Wing','Delayconsume',1000,10,'itemskill "AL_TELEPORT",1;');
|
||||
@ -3437,6 +3437,7 @@ REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`scr
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`script`) VALUES (100406,'Golden_Lord_Launcher_Cube','Golden Lord Launcher Modification Cube','Delayconsume',10,'/*synthesisui 100406;*/');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`script`) VALUES (100407,'The_Black_Cube','The Black Modification Cube','Delayconsume',10,'/*synthesisui 100407;*/');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`script`) VALUES (100408,'Demon_Slayer_Shot_Cube','Demon Slayer Shot Modification Cube','Delayconsume',10,'/*synthesisui 100408;*/');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`job_blacksmith`,`class_third`,`class_third_upper`,`class_third_baby`,`equip_level_min`,`delay_duration`,`script`) VALUES (100518,'Mado_Box02','Mado Strengthening Suit','Usable',10000,300,true,true,true,true,100,180000,'specialeffect2 EF_CLAYMORE;\nsetmadogear true,MADO_SUIT;');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`equip_level_min`,`script`) VALUES (1100003,'Concentrated_R_P','Concentrated Red Potion','Healing',10,2,120,'itemheal rand(655,675),0;');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`equip_level_min`,`script`) VALUES (1100004,'Concentrated_B_P','Concentrated Blue Potion','Healing',10,2,120,'itemheal 0,rand(340,360);');
|
||||
REPLACE INTO `item_db_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`equip_level_min`,`script`) VALUES (1100005,'Concentrated_G_P','Concentrated Gold Potion','Healing',10,2,180,'itemheal rand(2730,2750),0;');
|
||||
|
1
sql-files/upgrades/upgrade_20210201.sql
Normal file
1
sql-files/upgrades/upgrade_20210201.sql
Normal file
@ -0,0 +1 @@
|
||||
INSERT IGNORE `sc_data` (`account_id`, `char_id`, `type`, `tick`) SELECT `account_id`, `char_id`, '752', '-1' FROM `char` WHERE `option` & '4194304' != '0';
|
@ -4450,11 +4450,27 @@ ACMD_FUNC(mount_peco)
|
||||
}
|
||||
if( (sd->class_&MAPID_THIRDMASK) == MAPID_MECHANIC ) {
|
||||
if( !pc_ismadogear(sd) ) {
|
||||
e_mado_type type = MADO_ROBOT;
|
||||
|
||||
if (message[0]) {
|
||||
int tmp = strtol(message, nullptr, 10);
|
||||
|
||||
switch (tmp) {
|
||||
case MADO_ROBOT:
|
||||
case MADO_SUIT:
|
||||
type = static_cast<e_mado_type>(tmp);
|
||||
break;
|
||||
default:
|
||||
type = MADO_ROBOT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
clif_displaymessage(sd->fd,msg_txt(sd,1123)); // You have mounted your Mado Gear.
|
||||
pc_setoption(sd, sd->sc.option|OPTION_MADOGEAR);
|
||||
pc_setmadogear(sd, true, type);
|
||||
} else {
|
||||
clif_displaymessage(sd->fd,msg_txt(sd,1124)); // You have released your Mado Gear.
|
||||
pc_setoption(sd, sd->sc.option&~OPTION_MADOGEAR);
|
||||
pc_setmadogear(sd, false);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
@ -10688,12 +10688,6 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
|
||||
clif_status_load(&sd->bl, EFST_RIDING, 1);
|
||||
else if (sd->sc.option&OPTION_WUGRIDER)
|
||||
clif_status_load(&sd->bl, EFST_WUGRIDER, 1);
|
||||
else if (sd->sc.option&OPTION_MADOGEAR)
|
||||
#if PACKETVER_MAIN_NUM >= 20191120 || PACKETVER_RE_NUM >= 20191106
|
||||
clif_status_load( &sd->bl, EFST_MADOGEAR, 1 );
|
||||
#else
|
||||
clif_status_load( &sd->bl, EFST_RIDING, 1 );
|
||||
#endif
|
||||
else if (sd->sc.data[SC_ALL_RIDING])
|
||||
clif_status_load(&sd->bl, EFST_ALL_RIDING, 1);
|
||||
|
||||
|
@ -9639,7 +9639,7 @@ void pc_changelook(struct map_session_data *sd,int type,int val) {
|
||||
/*==========================================
|
||||
* Give an option (type) to player (sd) and display it to client
|
||||
*------------------------------------------*/
|
||||
void pc_setoption(struct map_session_data *sd,int type)
|
||||
void pc_setoption(struct map_session_data *sd,int type, int subtype)
|
||||
{
|
||||
int p_type, new_look=0;
|
||||
nullpo_retv(sd);
|
||||
@ -9678,45 +9678,18 @@ void pc_setoption(struct map_session_data *sd,int type)
|
||||
else if (!(type&OPTION_FALCON) && p_type&OPTION_FALCON) //Falcon OFF
|
||||
clif_status_load(&sd->bl,EFST_FALCON,0);
|
||||
|
||||
if( (sd->class_&MAPID_THIRDMASK) == MAPID_RANGER ) {
|
||||
if( type&OPTION_WUGRIDER && !(p_type&OPTION_WUGRIDER) ) { // Mounting
|
||||
clif_status_load(&sd->bl,EFST_WUGRIDER,1);
|
||||
status_calc_pc(sd,SCO_NONE);
|
||||
} else if( !(type&OPTION_WUGRIDER) && p_type&OPTION_WUGRIDER ) { // Dismount
|
||||
clif_status_load(&sd->bl,EFST_WUGRIDER,0);
|
||||
status_calc_pc(sd,SCO_NONE);
|
||||
}
|
||||
if( type&OPTION_WUGRIDER && !(p_type&OPTION_WUGRIDER) ) { // Mounting
|
||||
clif_status_load(&sd->bl,EFST_WUGRIDER,1);
|
||||
status_calc_pc(sd,SCO_NONE);
|
||||
} else if( !(type&OPTION_WUGRIDER) && p_type&OPTION_WUGRIDER ) { // Dismount
|
||||
clif_status_load(&sd->bl,EFST_WUGRIDER,0);
|
||||
status_calc_pc(sd,SCO_NONE);
|
||||
}
|
||||
if( (sd->class_&MAPID_THIRDMASK) == MAPID_MECHANIC ) {
|
||||
if( type&OPTION_MADOGEAR && !(p_type&OPTION_MADOGEAR) ) {
|
||||
status_calc_pc(sd,SCO_NONE);
|
||||
for (const auto &sc : mado_statuses) {
|
||||
uint16 skill_id = status_sc2skill(sc);
|
||||
|
||||
if (skill_id > 0 && !skill_get_inf2(skill_id, INF2_ALLOWONMADO))
|
||||
status_change_end(&sd->bl,sc,INVALID_TIMER);
|
||||
}
|
||||
pc_bonus_script_clear(sd,BSF_REM_ON_MADOGEAR);
|
||||
|
||||
#if PACKETVER_MAIN_NUM >= 20191120 || PACKETVER_RE_NUM >= 20191106
|
||||
clif_status_load( &sd->bl, EFST_MADOGEAR, 1 );
|
||||
#endif
|
||||
} else if( !(type&OPTION_MADOGEAR) && p_type&OPTION_MADOGEAR ) {
|
||||
status_calc_pc(sd,SCO_NONE);
|
||||
status_change_end(&sd->bl,SC_SHAPESHIFT,INVALID_TIMER);
|
||||
status_change_end(&sd->bl,SC_HOVERING,INVALID_TIMER);
|
||||
status_change_end(&sd->bl,SC_ACCELERATION,INVALID_TIMER);
|
||||
status_change_end(&sd->bl,SC_OVERHEAT_LIMITPOINT,INVALID_TIMER);
|
||||
status_change_end(&sd->bl,SC_OVERHEAT,INVALID_TIMER);
|
||||
status_change_end(&sd->bl,SC_MAGNETICFIELD,INVALID_TIMER);
|
||||
status_change_end(&sd->bl,SC_NEUTRALBARRIER_MASTER,INVALID_TIMER);
|
||||
status_change_end(&sd->bl,SC_STEALTHFIELD_MASTER,INVALID_TIMER);
|
||||
pc_bonus_script_clear(sd,BSF_REM_ON_MADOGEAR);
|
||||
|
||||
#if PACKETVER_MAIN_NUM >= 20191120 || PACKETVER_RE_NUM >= 20191106
|
||||
clif_status_load( &sd->bl, EFST_MADOGEAR, 0 );
|
||||
#endif
|
||||
}
|
||||
if( type&OPTION_MADOGEAR && !(p_type&OPTION_MADOGEAR) ) {
|
||||
sc_start(&sd->bl, &sd->bl, SC_MADOGEAR, 100, subtype, INFINITE_TICK);
|
||||
} else if( !(type&OPTION_MADOGEAR) && p_type&OPTION_MADOGEAR ) {
|
||||
status_change_end(&sd->bl, SC_MADOGEAR, INVALID_TIMER);
|
||||
}
|
||||
|
||||
if (type&OPTION_FLYING && !(p_type&OPTION_FLYING))
|
||||
@ -9820,16 +9793,22 @@ void pc_setriding(struct map_session_data* sd, int flag)
|
||||
}
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
/**
|
||||
* Give player a mado
|
||||
*------------------------------------------*/
|
||||
void pc_setmadogear(struct map_session_data* sd, int flag)
|
||||
* @param sd: Player
|
||||
* @param flag: Enable or disable mado
|
||||
* @param type: See pc.hpp::e_mado_type (Default is MADO_ROBOT)
|
||||
*/
|
||||
void pc_setmadogear(struct map_session_data *sd, bool flag, e_mado_type type)
|
||||
{
|
||||
if( flag ){
|
||||
if( pc_checkskill(sd,NC_MADOLICENCE) > 0 )
|
||||
pc_setoption(sd, sd->sc.option|OPTION_MADOGEAR);
|
||||
} else if( pc_ismadogear(sd) ){
|
||||
pc_setoption(sd, sd->sc.option&~OPTION_MADOGEAR);
|
||||
if ((sd->class_ & MAPID_THIRDMASK) != MAPID_MECHANIC)
|
||||
return;
|
||||
|
||||
if (flag) {
|
||||
if (pc_checkskill(sd, NC_MADOLICENCE) > 0)
|
||||
pc_setoption(sd, sd->sc.option | OPTION_MADOGEAR, type);
|
||||
} else if (pc_ismadogear(sd)) {
|
||||
pc_setoption(sd, sd->sc.option & ~OPTION_MADOGEAR);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1025,6 +1025,13 @@ short pc_maxaspd(struct map_session_data *sd);
|
||||
#define pc_iswug(sd) ( (sd)->sc.option&OPTION_WUG )
|
||||
#define pc_isridingwug(sd) ( (sd)->sc.option&OPTION_WUGRIDER )
|
||||
// Mechanic Magic Gear
|
||||
enum e_mado_type : uint16 {
|
||||
MADO_ROBOT = 0x00,
|
||||
MADO_UNUSED,
|
||||
MADO_SUIT,
|
||||
MADO_MAX
|
||||
};
|
||||
|
||||
#define pc_ismadogear(sd) ( (sd)->sc.option&OPTION_MADOGEAR )
|
||||
// Rune Knight Dragon
|
||||
#define pc_isridingdragon(sd) ( (sd)->sc.option&OPTION_DRAGON )
|
||||
@ -1282,11 +1289,11 @@ void pc_heal(struct map_session_data *sd,unsigned int hp,unsigned int sp, int ty
|
||||
int pc_itemheal(struct map_session_data *sd, t_itemid itemid, int hp,int sp);
|
||||
int pc_percentheal(struct map_session_data *sd,int,int);
|
||||
bool pc_jobchange(struct map_session_data *sd, int job, char upper);
|
||||
void pc_setoption(struct map_session_data *,int);
|
||||
void pc_setoption(struct map_session_data *,int type, int subtype = 0);
|
||||
bool pc_setcart(struct map_session_data* sd, int type);
|
||||
void pc_setfalcon(struct map_session_data* sd, int flag);
|
||||
void pc_setriding(struct map_session_data* sd, int flag);
|
||||
void pc_setmadogear(struct map_session_data* sd, int flag);
|
||||
void pc_setmadogear(struct map_session_data* sd, bool flag, e_mado_type type = MADO_ROBOT);
|
||||
void pc_changelook(struct map_session_data *,int,int);
|
||||
void pc_equiplookall(struct map_session_data *sd);
|
||||
void pc_set_costume_view(struct map_session_data *sd);
|
||||
|
@ -10115,20 +10115,31 @@ BUILDIN_FUNC(checkmadogear)
|
||||
}
|
||||
|
||||
/// Sets if the player is riding MADO Gear.
|
||||
/// <flag> defaults to 1
|
||||
/// <flag> defaults to true
|
||||
/// <type> defaults to MADO_ROBOT
|
||||
///
|
||||
/// setmadogear {<flag>{,<char_id>}};
|
||||
/// setmadogear {<flag>{,type{,<char_id>}}};
|
||||
BUILDIN_FUNC(setmadogear)
|
||||
{
|
||||
int flag = 1;
|
||||
bool flag = true;
|
||||
TBL_PC* sd;
|
||||
uint16 type = MADO_ROBOT;
|
||||
|
||||
if (!script_charid2sd(3,sd))
|
||||
if (!script_charid2sd(4,sd))
|
||||
return SCRIPT_CMD_FAILURE;
|
||||
|
||||
if( script_hasdata(st,2) )
|
||||
flag = script_getnum(st,2);
|
||||
pc_setmadogear(sd, flag);
|
||||
flag = script_getnum(st,2) != 0;
|
||||
if (script_hasdata(st, 3)) {
|
||||
type = script_getnum(st, 3);
|
||||
|
||||
if (type == MADO_UNUSED || type >= MADO_MAX) {
|
||||
ShowError("buildin_setmadogear: Invalid mado gear type %hu, defaulting to robot...\n", type);
|
||||
type = MADO_ROBOT;
|
||||
}
|
||||
}
|
||||
|
||||
pc_setmadogear(sd, flag, static_cast<e_mado_type>(type));
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
@ -25132,7 +25143,7 @@ struct script_function buildin_func[] = {
|
||||
BUILDIN_DEF(checkriding,"?"),
|
||||
BUILDIN_DEF(checkwug,"?"),
|
||||
BUILDIN_DEF(checkmadogear,"?"),
|
||||
BUILDIN_DEF(setmadogear,"??"),
|
||||
BUILDIN_DEF(setmadogear,"???"),
|
||||
BUILDIN_DEF2(savepoint,"save","sii???"),
|
||||
BUILDIN_DEF(savepoint,"sii???"),
|
||||
BUILDIN_DEF(gettimetick,"i"),
|
||||
|
@ -1610,6 +1610,7 @@
|
||||
export_constant(SC_EP16_2_BUFF_SC);
|
||||
export_constant(SC_EP16_2_BUFF_AC);
|
||||
export_constant(SC_EMERGENCY_MOVE);
|
||||
export_constant(SC_MADOGEAR);
|
||||
#ifdef RENEWAL
|
||||
export_constant(SC_EXTREMITYFIST2);
|
||||
#endif
|
||||
@ -8029,6 +8030,10 @@
|
||||
export_constant(PENALTY_MVP_EXP);
|
||||
export_constant(PENALTY_MVP_DROP);
|
||||
|
||||
/* madogears */
|
||||
export_constant(MADO_ROBOT);
|
||||
export_constant(MADO_SUIT);
|
||||
|
||||
#undef export_constant
|
||||
#undef export_constant2
|
||||
#undef export_parameter
|
||||
|
@ -2033,7 +2033,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
||||
case SC_ENTRY_QUEUE_APPLY_DELAY: case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT:
|
||||
case SC_REUSE_LIMIT_LUXANIMA: case SC_LUXANIMA: case SC_SOULENERGY:
|
||||
case SC_EP16_2_BUFF_SS: case SC_EP16_2_BUFF_SC: case SC_EP16_2_BUFF_AC:
|
||||
case SC_EMERGENCY_MOVE:
|
||||
case SC_EMERGENCY_MOVE: case SC_MADOGEAR:
|
||||
continue;
|
||||
case SC_WHISTLE: case SC_ASSNCROS: case SC_POEMBRAGI:
|
||||
case SC_APPLEIDUN: case SC_HUMMING: case SC_DONTFORGETME:
|
||||
@ -8476,6 +8476,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case SC_QUEST_BUFF1: case SC_QUEST_BUFF2: case SC_QUEST_BUFF3:
|
||||
case SC_ARMOR_ELEMENT_EARTH: case SC_ARMOR_ELEMENT_FIRE: case SC_ARMOR_ELEMENT_WIND:
|
||||
case SC_ENTRY_QUEUE_APPLY_DELAY: case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT:
|
||||
case SC_MADOGEAR:
|
||||
// Clans
|
||||
case SC_CLAN_INFO:
|
||||
case SC_SWORDCLAN:
|
||||
@ -10019,7 +10020,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case SC_ENTRY_QUEUE_APPLY_DELAY: case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT:
|
||||
case SC_REUSE_LIMIT_LUXANIMA: case SC_LUXANIMA: case SC_SOULENERGY:
|
||||
case SC_EP16_2_BUFF_SS: case SC_EP16_2_BUFF_SC: case SC_EP16_2_BUFF_AC:
|
||||
case SC_EMERGENCY_MOVE:
|
||||
case SC_EMERGENCY_MOVE: case SC_MADOGEAR:
|
||||
continue;
|
||||
case SC_ASSUMPTIO:
|
||||
if( bl->type == BL_MOB )
|
||||
@ -10245,7 +10246,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case NC_SELFDESTRUCTION:
|
||||
if( sd ) {
|
||||
if( pc_ismadogear(sd) )
|
||||
pc_setmadogear(sd, 0);
|
||||
pc_setmadogear(sd, false);
|
||||
skill_area_temp[1] = 0;
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
|
||||
|
@ -1402,6 +1402,12 @@ void initChangeTables(void)
|
||||
StatusIconChangeTable[SC_EP16_2_BUFF_SC] = EFST_EP16_2_BUFF_SC;
|
||||
StatusIconChangeTable[SC_EP16_2_BUFF_AC] = EFST_EP16_2_BUFF_AC;
|
||||
|
||||
#if PACKETVER_MAIN_NUM >= 20191120 || PACKETVER_RE_NUM >= 20191106
|
||||
StatusIconChangeTable[SC_MADOGEAR] = EFST_MADOGEAR;
|
||||
#else
|
||||
StatusIconChangeTable[SC_MADOGEAR] = EFST_RIDING;
|
||||
#endif
|
||||
|
||||
/* Other SC which are not necessarily associated to skills */
|
||||
StatusChangeFlagTable[SC_ASPDPOTION0] |= SCB_ASPD;
|
||||
StatusChangeFlagTable[SC_ASPDPOTION1] |= SCB_ASPD;
|
||||
@ -1588,6 +1594,8 @@ void initChangeTables(void)
|
||||
StatusChangeFlagTable[SC_EDP] |= SCB_WATK;
|
||||
#endif
|
||||
|
||||
StatusChangeFlagTable[SC_MADOGEAR] |= SCB_SPEED;
|
||||
|
||||
/* StatusDisplayType Table [Ind] */
|
||||
StatusDisplayType[SC_ALL_RIDING] = BL_PC;
|
||||
StatusDisplayType[SC_PUSH_CART] = BL_PC;
|
||||
@ -1630,6 +1638,7 @@ void initChangeTables(void)
|
||||
StatusDisplayType[SC_HELLS_PLANT] = BL_PC;
|
||||
StatusDisplayType[SC_MISTY_FROST] = BL_PC;
|
||||
StatusDisplayType[SC_MAGIC_POISON] = BL_PC;
|
||||
StatusDisplayType[SC_MADOGEAR] = BL_PC;
|
||||
|
||||
// Costumes
|
||||
StatusDisplayType[SC_MOONSTAR] = BL_PC;
|
||||
@ -10021,6 +10030,16 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
if (sd && sd->special_state.no_walk_delay)
|
||||
return 1;
|
||||
break;
|
||||
case SC_MADOGEAR:
|
||||
for (const auto &sc : mado_statuses) {
|
||||
uint16 skill_id = status_sc2skill(sc);
|
||||
|
||||
if (skill_id > 0 && !skill_get_inf2(skill_id, INF2_ALLOWONMADO))
|
||||
status_change_end(bl, sc, INVALID_TIMER);
|
||||
}
|
||||
if (sd)
|
||||
pc_bonus_script_clear(sd, BSF_REM_ON_MADOGEAR);
|
||||
break;
|
||||
}
|
||||
|
||||
// Check for overlapping fails
|
||||
@ -12220,6 +12239,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
case SC_JUMPINGCLAN:
|
||||
case SC_DRESSUP:
|
||||
case SC_MISTY_FROST:
|
||||
case SC_MADOGEAR:
|
||||
val_flag |= 1;
|
||||
break;
|
||||
// Start |1|2 val_flag setting
|
||||
@ -12865,6 +12885,7 @@ int status_change_clear(struct block_list* bl, int type)
|
||||
case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT:
|
||||
case SC_REUSE_LIMIT_LUXANIMA:
|
||||
case SC_SOULENERGY:
|
||||
case SC_MADOGEAR:
|
||||
// Costumes
|
||||
case SC_MOONSTAR:
|
||||
case SC_SUPER_STAR:
|
||||
@ -12901,6 +12922,7 @@ int status_change_clear(struct block_list* bl, int type)
|
||||
case SC_STYLE_CHANGE:
|
||||
case SC_ENTRY_QUEUE_APPLY_DELAY:
|
||||
case SC_ENTRY_QUEUE_NOTIFY_ADMISSION_TIME_OUT:
|
||||
case SC_MADOGEAR:
|
||||
// Costumes
|
||||
case SC_MOONSTAR:
|
||||
case SC_SUPER_STAR:
|
||||
@ -13558,6 +13580,18 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
|
||||
if (sd)
|
||||
pc_delsoulball(sd, sd->soulball, false);
|
||||
break;
|
||||
case SC_MADOGEAR:
|
||||
status_change_end(bl, SC_SHAPESHIFT, INVALID_TIMER);
|
||||
status_change_end(bl, SC_HOVERING, INVALID_TIMER);
|
||||
status_change_end(bl, SC_ACCELERATION, INVALID_TIMER);
|
||||
status_change_end(bl, SC_OVERHEAT_LIMITPOINT, INVALID_TIMER);
|
||||
status_change_end(bl, SC_OVERHEAT, INVALID_TIMER);
|
||||
status_change_end(bl, SC_MAGNETICFIELD, INVALID_TIMER);
|
||||
status_change_end(bl, SC_NEUTRALBARRIER_MASTER, INVALID_TIMER);
|
||||
status_change_end(bl, SC_STEALTHFIELD_MASTER, INVALID_TIMER);
|
||||
if (sd)
|
||||
pc_bonus_script_clear(sd, BSF_REM_ON_MADOGEAR);
|
||||
break;
|
||||
}
|
||||
|
||||
opt_flag = 1;
|
||||
|
@ -940,6 +940,7 @@ enum sc_type : int16 {
|
||||
SC_EP16_2_BUFF_AC,
|
||||
|
||||
SC_EMERGENCY_MOVE,
|
||||
SC_MADOGEAR,
|
||||
|
||||
#ifdef RENEWAL
|
||||
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
|
||||
|
Loading…
x
Reference in New Issue
Block a user