From 3b71f77c27e47b966586efa8e0fba0c502cc9a63 Mon Sep 17 00:00:00 2001 From: Balfear Date: Tue, 20 Dec 2022 16:03:59 +0300 Subject: [PATCH] pc_isUseitem: update flywings list (#7487) Co-authored-by: Lemongrass3110 --- db/pre-re/item_group_db.yml | 42 ++++++++++++++++ db/re/item_group_db.yml | 46 +++++++++++++++++ src/map/itemdb.hpp | 16 ++---- src/map/pc.cpp | 97 +++++++++++++++++++----------------- src/map/script_constants.hpp | 3 ++ 5 files changed, 144 insertions(+), 60 deletions(-) diff --git a/db/pre-re/item_group_db.yml b/db/pre-re/item_group_db.yml index 85fde1612b..7ded9e51c5 100644 --- a/db/pre-re/item_group_db.yml +++ b/db/pre-re/item_group_db.yml @@ -7433,3 +7433,45 @@ Body: Rate: 1 - Item: Gold_Tiara_ Rate: 1 + - Group: MF_NOTELEPORT + SubGroups: + - SubGroup: 0 + List: + - Item: Wing_Of_Fly + - Item: Giant_Fly_Wing + - Item: N_Fly_Wing + - Item: E_Giant_Fly_Wing + - Item: F_Giant_Fly_Wing + - Group: MF_NORETURN + SubGroups: + - SubGroup: 0 + List: + - Item: Wing_Of_Butterfly + - Item: N_Butterfly_Wing + - Item: Dun_Tele_Scroll1 + - Item: Dun_Tele_Scroll2 + - Item: Dun_Tele_Scroll3 + - Item: E_Dun_Tele_Scroll1 + - Item: F_Dun_Tele_Scroll1 + - Item: WOB_Rune + - Item: E_WOB_Rune + - Item: F_WOB_Rune + - Item: WOB_Schwaltz + - Item: E_WOB_Schwaltz + - Item: F_WOB_Schwaltz + - Item: WOB_Rachel + - Item: E_WOB_Rachel + - Item: F_WOB_Rachel + - Item: WOB_Local + - Item: WOB_Local + - Item: WOB_Local + - Item: Siege_Teleport_Scroll + - Item: Siege_Teleport_Scroll2 + - Item: E_Siege_Teleport_Scroll + - Group: GIANT_FLY_WING + SubGroups: + - SubGroup: 0 + List: + - Item: Giant_Fly_Wing + - Item: E_Giant_Fly_Wing + - Item: F_Giant_Fly_Wing diff --git a/db/re/item_group_db.yml b/db/re/item_group_db.yml index 5e35255df3..c94c4e0ac9 100644 --- a/db/re/item_group_db.yml +++ b/db/re/item_group_db.yml @@ -48950,3 +48950,49 @@ Body: List: - Item: Poison_Bottle - Item: Poison_Bottle_B + - Group: MF_NOTELEPORT + SubGroups: + - SubGroup: 0 + List: + - Item: Wing_Of_Fly + - Item: Giant_Fly_Wing + - Item: N_Fly_Wing + - Item: E_Giant_Fly_Wing + - Item: F_Giant_Fly_Wing + - Item: C_Wing_Of_Fly + - Item: N_Fly_Wing_ + - Item: Compressed_Wing_Of_Fly + - Item: Comp_Wing_Of_Fly + - Group: MF_NORETURN + SubGroups: + - SubGroup: 0 + List: + - Item: Wing_Of_Butterfly + - Item: N_Butterfly_Wing + - Item: Dun_Tele_Scroll1 + - Item: Dun_Tele_Scroll2 + - Item: Dun_Tele_Scroll3 + - Item: E_Dun_Tele_Scroll1 + - Item: F_Dun_Tele_Scroll1 + - Item: WOB_Rune + - Item: E_WOB_Rune + - Item: F_WOB_Rune + - Item: WOB_Schwaltz + - Item: E_WOB_Schwaltz + - Item: F_WOB_Schwaltz + - Item: WOB_Rachel + - Item: E_WOB_Rachel + - Item: F_WOB_Rachel + - Item: WOB_Local + - Item: WOB_Local + - Item: WOB_Local + - Item: Siege_Teleport_Scroll + - Item: Siege_Teleport_Scroll2 + - Item: E_Siege_Teleport_Scroll + - Group: GIANT_FLY_WING + SubGroups: + - SubGroup: 0 + List: + - Item: Giant_Fly_Wing + - Item: E_Giant_Fly_Wing + - Item: F_Giant_Fly_Wing diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp index a0aa8e8165..a37659d98b 100644 --- a/src/map/itemdb.hpp +++ b/src/map/itemdb.hpp @@ -51,8 +51,6 @@ enum item_itemid : t_itemid ITEMID_RED_SLIM_POTION = 545, ITEMID_YELLOW_SLIM_POTION = 546, ITEMID_WHITE_SLIM_POTION = 547, - ITEMID_WING_OF_FLY = 601, - ITEMID_WING_OF_BUTTERFLY = 602, ITEMID_ANODYNE = 605, ITEMID_ALOEBERA = 606, ITEMID_MAGNIFIER = 611, @@ -101,28 +99,17 @@ enum item_itemid : t_itemid ITEMID_COOKIE_BAT = 11605, ITEMID_MERCENARY_RED_POTION = 12184, ITEMID_MERCENARY_BLUE_POTION = 12185, - ITEMID_GIANT_FLY_WING = 12212, ITEMID_NEURALIZER = 12213, ITEMID_M_CENTER_POTION = 12241, ITEMID_M_AWAKENING_POTION = 12242, ITEMID_M_BERSERK_POTION = 12243, - ITEMID_N_FLY_WING = 12323, - ITEMID_N_BUTTERFLY_WING = 12324, ITEMID_NOVICE_MAGNIFIER = 12325, ITEMID_ANCILLA = 12333, - ITEMID_DUN_TELE_SCROLL3 = 12352, ITEMID_REINS_OF_MOUNT = 12622, ITEMID_NOBLE_NAMEPLATE = 12705, ITEMID_SILVER_BULLET = 13201, ITEMID_PURIFICATION_BULLET = 13220, ITEMID_SILVER_BULLET_ = 13221, - ITEMID_DUN_TELE_SCROLL1 = 14527, - ITEMID_DUN_TELE_SCROLL2 = 14581, - ITEMID_WOB_RUNE = 14582, - ITEMID_WOB_SCHWALTZ = 14583, - ITEMID_WOB_RACHEL = 14584, - ITEMID_WOB_LOCAL = 14585, - ITEMID_SIEGE_TELEPORT_SCROLL = 14591, ITEMID_INVENTORY_EX_EVT = 25791, ITEMID_INVENTORY_EX_DIS = 25792, ITEMID_INVENTORY_EX = 25793, @@ -1836,6 +1823,9 @@ enum e_random_item_group { IG_BLACKSMITH_BLESS_BOX_3, IG_SHADOW_HAMMER_BOX_3, IG_EDP, + IG_MF_NOTELEPORT, + IG_MF_NORETURN, + IG_GIANT_FLY_WING, IG_MAX, }; diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 211259ab5e..c563e82add 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -6053,54 +6053,57 @@ bool pc_isUseitem(map_session_data *sd,int n) if (item->flag.dead_branch && (mapdata->flag[MF_NOBRANCH] || mapdata_flag_gvg2(mapdata))) return false; + if( itemdb_group.item_exists( IG_MF_NOTELEPORT, nameid ) ){ + if( ( mapdata->flag[MF_NOTELEPORT] || mapdata_flag_gvg2( mapdata ) ) ){ + clif_skill_teleportmessage( sd, 0 ); + return false; + } + + if( sd->duel_group && !battle_config.duel_allow_teleport ){ + clif_displaymessage( sd->fd, msg_txt( sd, 663 ) ); // Duel: Can't use this item in duel. + return false; + } + } + + if( itemdb_group.item_exists( MF_NORETURN, nameid ) ){ + if( mapdata->flag[MF_NORETURN] ){ + return false; + } + + if( sd->duel_group && !battle_config.duel_allow_teleport ){ + clif_displaymessage( sd->fd, msg_txt( sd, 663 ) ); // Duel: Can't use this item in duel. + return false; + } + } + + if( itemdb_group.item_exists( IG_GIANT_FLY_WING, nameid ) ){ + struct party_data *pd = party_search( sd->status.party_id ); + + if( pd ){ + int i; + + ARR_FIND( 0, MAX_PARTY, i, pd->data[i].sd == sd && pd->party.member[i].leader ); + + // User is not party leader + if( i == MAX_PARTY ){ + clif_msg( sd, ITEM_PARTY_MEMBER_NOT_SUMMONED ); + return false; + } + + ARR_FIND( 0, MAX_PARTY, i, pd->data[i].sd && pd->data[i].sd != sd && pd->data[i].sd->bl.m == sd->bl.m && !pc_isdead( pd->data[i].sd ) ); + + // No party members found on same map + if( i == MAX_PARTY ){ + clif_msg( sd, ITEM_PARTY_NO_MEMBER_IN_MAP ); + return false; + } + }else{ + clif_msg( sd, ITEM_PARTY_MEMBER_NOT_SUMMONED ); + return false; + } + } + switch( nameid ) { - case ITEMID_WING_OF_FLY: - case ITEMID_GIANT_FLY_WING: - case ITEMID_N_FLY_WING: - if( mapdata->flag[MF_NOTELEPORT] || mapdata_flag_gvg2(mapdata) ) { - clif_skill_teleportmessage(sd,0); - return false; - } - if (nameid == ITEMID_GIANT_FLY_WING) { - struct party_data *pd = party_search(sd->status.party_id); - - if (pd) { - int i; - - ARR_FIND(0, MAX_PARTY, i, pd->data[i].sd == sd && pd->party.member[i].leader); - if (i == MAX_PARTY) { // User is not party leader - clif_msg(sd, ITEM_PARTY_MEMBER_NOT_SUMMONED); - break; - } - - ARR_FIND(0, MAX_PARTY, i, pd->data[i].sd && pd->data[i].sd != sd && pd->data[i].sd->bl.m == sd->bl.m && !pc_isdead(pd->data[i].sd)); - if (i == MAX_PARTY) { // No party members found on same map - clif_msg(sd, ITEM_PARTY_NO_MEMBER_IN_MAP); - break; - } - } else { - clif_msg(sd, ITEM_PARTY_MEMBER_NOT_SUMMONED); - break; - } - } - // Fall through - case ITEMID_WING_OF_BUTTERFLY: - case ITEMID_N_BUTTERFLY_WING: - case ITEMID_DUN_TELE_SCROLL1: - case ITEMID_DUN_TELE_SCROLL2: - case ITEMID_DUN_TELE_SCROLL3: - case ITEMID_WOB_RUNE: - case ITEMID_WOB_SCHWALTZ: - case ITEMID_WOB_RACHEL: - case ITEMID_WOB_LOCAL: - case ITEMID_SIEGE_TELEPORT_SCROLL: - if( sd->duel_group && !battle_config.duel_allow_teleport ) { - clif_displaymessage(sd->fd, msg_txt(sd,663)); - return false; - } - if( mapdata->flag[MF_NORETURN] && nameid != ITEMID_WING_OF_FLY && nameid != ITEMID_GIANT_FLY_WING && nameid != ITEMID_N_FLY_WING ) - return false; - break; case ITEMID_MERCENARY_RED_POTION: case ITEMID_MERCENARY_BLUE_POTION: case ITEMID_M_CENTER_POTION: diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 106150f956..caa7296144 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -6634,6 +6634,9 @@ export_constant(IG_BLACKSMITH_BLESS_BOX_3); export_constant(IG_SHADOW_HAMMER_BOX_3); export_constant(IG_EDP); + export_constant(IG_MF_NOTELEPORT); + export_constant(IG_MF_NORETURN); + export_constant(IG_GIANT_FLY_WING); /* unit stop walking */ export_constant(USW_NONE);