Block dynamic NPCs in instances (#7429)

Fixes #7420

Thanks to @attackjom
This commit is contained in:
Lemongrass3110 2022-11-10 22:14:42 +01:00 committed by GitHub
parent 4cb1af31f8
commit 96efb0e426
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 176 additions and 4 deletions

View File

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

View File

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

View File

@ -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

View File

@ -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

View File

@ -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
};

View File

@ -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;

View File

@ -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);