浏览代码

pc_isUseitem: update flywings list (#7487)

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
Balfear 2 年之前
父节点
当前提交
3b71f77c27
共有 5 个文件被更改,包括 139 次插入55 次删除
  1. 42 0
      db/pre-re/item_group_db.yml
  2. 46 0
      db/re/item_group_db.yml
  3. 3 13
      src/map/itemdb.hpp
  4. 45 42
      src/map/pc.cpp
  5. 3 0
      src/map/script_constants.hpp

+ 42 - 0
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

+ 46 - 0
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

+ 3 - 13
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,
 };

+ 45 - 42
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;
 
-	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( 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 (pd) {
-					int i;
+		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;
+		}
+	}
 
-					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;
-					}
+	if( itemdb_group.item_exists( MF_NORETURN, nameid ) ){
+		if( mapdata->flag[MF_NORETURN] ){
+			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));
-					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));
+		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;
 			}
-			if( mapdata->flag[MF_NORETURN] && nameid != ITEMID_WING_OF_FLY && nameid != ITEMID_GIANT_FLY_WING && nameid != ITEMID_N_FLY_WING )
+
+			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;
-			break;
+			}
+		}else{
+			clif_msg( sd, ITEM_PARTY_MEMBER_NOT_SUMMONED );
+			return false;
+		}
+	}
+
+	switch( nameid ) {
 		case ITEMID_MERCENARY_RED_POTION:
 		case ITEMID_MERCENARY_BLUE_POTION:
 		case ITEMID_M_CENTER_POTION:

+ 3 - 0
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);