Ver código fonte

Block dynamic NPCs in instances (#7429)

Fixes #7420

Thanks to @attackjom
Lemongrass3110 2 anos atrás
pai
commit
96efb0e426

+ 1 - 1
db/pre-re/instance_db.yml

@@ -67,7 +67,7 @@ Body:
   - Id: 3
     Name: Orc's Memory
     Enter:
-      Map: 1@orcs 
+      Map: 1@orcs
       X: 179
       Y: 15
     AdditionalMaps:

+ 1 - 1
db/re/instance_db.yml

@@ -67,7 +67,7 @@ Body:
   - Id: 3
     Name: Orc's Memory
     Enter:
-      Map: 1@orcs 
+      Map: 1@orcs
       X: 179
       Y: 15
     AdditionalMaps:

+ 27 - 0
npc/mapflag/nodynamicnpc.txt

@@ -0,0 +1,27 @@
+//===== rAthena Script =======================================
+//= Mapflag: No dynamic NPC map setting.
+//===== Description: ========================================= 
+//= Blocks the use of dynamic NPCs on a map.
+//===== Additional Comments: ================================= 
+//= 1.0 Initial script. [Lemongrass]
+//============================================================
+
+// Endless Tower
+1@tower	mapflag	nodynamicnpc
+2@tower	mapflag	nodynamicnpc
+3@tower	mapflag	nodynamicnpc
+4@tower	mapflag	nodynamicnpc
+5@tower	mapflag	nodynamicnpc
+6@tower	mapflag	nodynamicnpc
+
+// Sealed Catacomb
+1@cata	mapflag	nodynamicnpc
+2@cata	mapflag	nodynamicnpc
+
+// Orc's Memory
+1@orcs	mapflag	nodynamicnpc
+2@orcs	mapflag	nodynamicnpc
+
+// Nidhoggur's Nest
+1@nyd	mapflag	nodynamicnpc
+2@nyd	mapflag	nodynamicnpc

+ 140 - 0
npc/re/mapflag/nodynamicnpc.txt

@@ -0,0 +1,140 @@
+//===== rAthena Script =======================================
+//= Mapflag: No dynamic NPC map setting.
+//===== Description: ========================================= 
+//= Blocks the use of dynamic NPCs on a map.
+//===== Additional Comments: ================================= 
+//= 1.0 Initial script. [Lemongrass]
+//============================================================
+
+// Mistwood Maze
+1@mist	mapflag	nodynamicnpc
+
+// Culvert
+1@pump	mapflag	nodynamicnpc
+2@pump	mapflag	nodynamicnpc
+
+// Octopus Cave
+1@cash	mapflag	nodynamicnpc
+
+// Bangungot Hospital 2F
+1@ma_h	mapflag	nodynamicnpc
+
+// Buwaya Cave
+1@ma_c	mapflag	nodynamicnpc
+
+// Bakonawa Lake
+1@ma_b	mapflag	nodynamicnpc
+
+// Wolfchev's Laboratory
+1@lhz	mapflag	nodynamicnpc
+
+// Old Glast Heim
+1@gl_k	mapflag	nodynamicnpc
+2@gl_k	mapflag	nodynamicnpc
+
+// Eclage Interior
+1@ecl	mapflag	nodynamicnpc
+
+// Sara's Memories
+1@sara	mapflag	nodynamicnpc
+
+// Geffen Magic Tournament
+1@gef	mapflag	nodynamicnpc
+1@gef_in	mapflag	nodynamicnpc
+1@ge_st	mapflag	nodynamicnpc
+
+// Horror Toy Factory
+1@xm_d	mapflag	nodynamicnpc
+
+// Faceworm's Nest
+1@face	mapflag	nodynamicnpc
+
+// Ghost Palace
+1@spa	mapflag	nodynamicnpc
+
+// Devil's Tower
+1@tnm1	mapflag	nodynamicnpc
+1@tnm2	mapflag	nodynamicnpc
+1@tnm3	mapflag	nodynamicnpc
+
+// Assault on the Airship
+1@air1	mapflag	nodynamicnpc
+1@air2	mapflag	nodynamicnpc
+
+// Fenrir and Sarah
+1@glast	mapflag	nodynamicnpc
+
+// Wave Mode - Forest
+1@def01	mapflag	nodynamicnpc
+
+// Wave Mode - Sky
+1@def02	mapflag	nodynamicnpc
+
+// Nightmarish Jitterbug
+1@jtb	mapflag	nodynamicnpc
+
+// Isle of Bios
+1@dth1	mapflag	nodynamicnpc
+1@dth2	mapflag	nodynamicnpc
+1@dth3	mapflag	nodynamicnpc
+
+// Morse's Cave
+1@rev	mapflag	nodynamicnpc
+
+// Temple of the Demon God
+1@eom	mapflag	nodynamicnpc
+
+// Central Laboratory
+1@lab	mapflag	nodynamicnpc
+
+// Last room
+1@uns	mapflag	nodynamicnpc
+
+// Charleston in Distress
+1@mcd	mapflag	nodynamicnpc
+
+// Ritual of Blessing
+2@mir	mapflag	nodynamicnpc
+
+// Room of Consciousness
+1@mir	mapflag	nodynamicnpc
+
+// Sky Fortress Invasion
+1@sthb	mapflag	nodynamicnpc
+1@sthc	mapflag	nodynamicnpc
+1@sthd	mapflag	nodynamicnpc
+
+// Heart Hunter War Base 1 + 2
+1@swat	mapflag	nodynamicnpc
+
+// Werner Laboratory central room#1 + 2
+1@slw	mapflag	nodynamicnpc
+
+// Infinite Space
+1@infi	mapflag	nodynamicnpc
+
+// Regenschirm
+1@rgsr	mapflag	nodynamicnpc
+
+// Sealed OS
+1@os_b	mapflag	nodynamicnpc
+
+// OS Occupation + 2nd OS Search
+1@os_a	mapflag	nodynamicnpc
+
+// Cor Memorial
+1@cor	mapflag	nodynamicnpc
+
+// Half Moon In The Daylight
+1@pop1	mapflag	nodynamicnpc
+1@pop2	mapflag	nodynamicnpc
+1@pop3	mapflag	nodynamicnpc
+
+// Weekend Dungeon
+1@md_pay	mapflag	nodynamicnpc
+
+// Friday Dungeon
+1@md_gef	mapflag	nodynamicnpc
+
+// Poring Village
+1@begi	mapflag	nodynamicnpc

+ 2 - 1
src/map/map.hpp

@@ -645,12 +645,13 @@ enum e_mapflag : int16 {
 	MF_PRIVATEAIRSHIP_SOURCE,
 	MF_PRIVATEAIRSHIP_DESTINATION,
 	MF_SKILL_DURATION,
-	MF_NOCASHSHOP,
+	MF_NOCASHSHOP, // 70
 	MF_NORODEX,
 	MF_NORENEWALEXPPENALTY,
 	MF_NORENEWALDROPPENALTY,
 	MF_NOPETCAPTURE,
 	MF_NOBUYINGSTORE,
+	MF_NODYNAMICNPC,
 	MF_MAX
 };
 

+ 4 - 1
src/map/npc.cpp

@@ -5805,7 +5805,10 @@ struct npc_data* npc_duplicate_npc_for_player( struct npc_data& nd, struct map_s
 		return nullptr;
 	}
 
-	// TODO: check maps that might forbid usage? maybe create mapflag?
+	if( map_getmapflag( sd.bl.m, MF_NODYNAMICNPC ) ){
+		// It has been confirmed that there is no reply to the client
+		return nullptr;
+	}
 
 	int16 new_x, new_y;
 

+ 1 - 0
src/map/script_constants.hpp

@@ -536,6 +536,7 @@
 	export_constant(MF_NORENEWALEXPPENALTY);
 	export_constant(MF_NOPETCAPTURE);
 	export_constant(MF_NOBUYINGSTORE);
+	export_constant(MF_NODYNAMICNPC);
 
 	/* setcell types */
 	export_constant(CELL_WALKABLE);