Jelajahi Sumber

Added 'warp2' NPC

Unlike 'warp', 'warp2' NPC will also be triggered by hidden player.
Thanks @secretdataz and @Lemongrass3110 !

* Replace script using OnTouch:([\r\n\t]+)warp by warp2

* Removed sprite id from warp duplicates in Bangungot instance

* Fixed a bug where warp/warp2 parsing is too greedy
Atemo 8 tahun lalu
induk
melakukan
809754379b

+ 4 - 1
doc/script_commands.txt

@@ -208,6 +208,7 @@ ex: if your NPC is named 'Hunter#hunter1', it will be displayed as 'Hunter'
 ** Define a warp point
 
 <from mapname>,<fromX>,<fromY>,<facing>%TAB%warp%TAB%<warp name>%TAB%<spanx>,<spany>,<to mapname>,<toX>,<toY>
+<from mapname>,<fromX>,<fromY>,<facing>%TAB%warp2%TAB%<warp name>%TAB%<spanx>,<spany>,<to mapname>,<toX>,<toY>
 
 This will define a warp NPC that will warp a player between maps, and while most 
 arguments of that are obvious, some deserve special mention.
@@ -223,6 +224,8 @@ with 'enablenpc'/'disablenpc'
 Facing of a warp object is irrelevant, it is not used in the code and all 
 current scripts have a zero in there.
 
+Unlike 'warp', 'warp2' will also be triggered by hidden player.
+
 ** Define an NPC object.
 
 <map name>,<x>,<y>,<facing>%TAB%script%TAB%<NPC Name>%TAB%<sprite id>,{<code>}
@@ -313,7 +316,7 @@ optional value which makes the price at that shop become affected by discount sk
 
 ** Define an warp/shop/cashshop/itemshop/pointshop/NPC duplicate.
 
-warp: <map name>,<x>,<y>,<facing>%TAB%duplicate(<label>)%TAB%<NPC Name>%TAB%<spanx>,<spany>
+warp/warp2: <map name>,<x>,<y>,<facing>%TAB%duplicate(<label>)%TAB%<NPC Name>%TAB%<spanx>,<spany>
 shop/cashshop/itemshop/pointshop/npc: -%TAB%duplicate(<label>)%TAB%<NPC Name>%TAB%<sprite id>
 shop/cashshop/itemshop/pointshop/npc: <map name>,<x>,<y>,<facing>%TAB%duplicate(<label>)%TAB%<NPC Name>%TAB%<sprite id>
 npc: -%TAB%duplicate(<label>)%TAB%<NPC Name>%TAB%<sprite id>,<triggerX>,<triggerY>

+ 3 - 6
npc/battleground/kvm/kvm01.txt

@@ -36,12 +36,9 @@ OnEnterBG:
 	set $@KvM01BG_id2, waitingroom2bg("bat_c01",147,55,"KvM01_BG::OnCroixQuit","KvM01_BG::OnCroixDie");
 	end;
 }
-bat_room,169,220,0	script	#kvm801	WARPNPC,2,2,{
-OnTouch:
-	warp "bat_room",154,150;
-	end;
-}
-bat_room,169,211,0	duplicate(#kvm801)	#kvm802	WARPNPC,2,2
+
+bat_room,169,220,0	warp2	#kvm801	2,2,bat_room,154,150
+bat_room,169,211,0	warp2	#kvm802	2,2,bat_room,154,150
 
 // Starting Line
 //============================================================

+ 3 - 6
npc/battleground/kvm/kvm02.txt

@@ -36,12 +36,9 @@ OnEnterBG:
 	set $@KvM02BG_id2, waitingroom2bg("bat_c02",147,55,"KvM02_BG::OnCroixQuit","KvM02_BG::OnCroixDie");
 	end;
 }
-bat_room,197,220,0	script	#kvm601	WARPNPC,2,2,{
-OnTouch:
-	warp "bat_room",154,150;
-	end;
-}
-bat_room,197,21,0	duplicate(#kvm601)	#kvm602	WARPNPC,2,2
+
+bat_room,197,220,0	warp2	#kvm601	2,2,bat_room,154,150
+bat_room,197,21,0	warp2	#kvm602	2,2,bat_room,154,150
 
 // Starting Line
 //============================================================

+ 2 - 6
npc/battleground/kvm/kvm03.txt

@@ -35,12 +35,8 @@ OnEnterBG:
 	set $@KvM03BG_id2, waitingroom2bg("bat_c03",147,55,"KvM03_BG::OnCroixQuit","KvM03_BG::OnCroixDie");
 	end;
 }
-bat_room,225,220,0	script	#kvm701	WARPNPC,2,2,{
-OnTouch:
-	warp "bat_room",154,150;
-	end;
-}
-bat_room,225,211,0	duplicate(#kvm701)	#kvm702	WARPNPC,2,2
+bat_room,225,220,0	warp2	#kvm701	2,2,bat_room,154,150
+bat_room,225,211,0	warp2	#kvm702	2,2,bat_room,154,150
 
 // Starting Line
 //============================================================

+ 8 - 87
npc/custom/official/GeffenMagicTournament.txt

@@ -453,93 +453,14 @@ OnTouch_:
 1@gef,120,98,4	duplicate(#gmt_quotes)	Dwigh#z1_0et	4_GEFFEN_12,4,4
 
 //WARPS
-1@gef_in,70,132,0	script	#gef_a4_0et	45,2,2,{
-	end;
-OnTouch:
-	warp instance_mapname("1@gef"),46,88;
-	end;
-OnInstanceInit:
-OnEnable:
-	enablenpc instance_npcname("#gef_a4_0et");
-	end;
-}
-
-1@gef_in,106,181,0	script	#gef_a3_0et	45,2,2,{
-	end;
-OnTouch:
-	warp instance_mapname("1@gef"),178,63;
-	end;
-OnInstanceInit:
-OnEnable:
-	enablenpc instance_npcname("#gef_a3_0et");
-	end;
-}
-
-1@gef,182,59,0	script	#gef_a1_0et	45,2,2,{
-	end;
-OnTouch:
-	warp instance_mapname("1@gef_in"),106,177;
-	end;
-OnInstanceInit:
-OnEnable:
-	enablenpc instance_npcname("#gef_a1_0et");
-	end;
-}
-
-1@gef_in,70,158,0	script	#gef_a5_0et	45,2,2,{
-	end;
-OnTouch:
-	warp instance_mapname("1@gef_in"),70,146;
-	end;
-OnInstanceInit:
-OnEnable:
-	enablenpc instance_npcname("#gef_a5_0et");
-	end;
-}
-
-1@gef_in,70,149,0	script	#gef_a6_0et	45,2,2,{
-	end;
-OnTouch:
-	warp instance_mapname("1@gef_in"),70,161;
-	end;
-OnInstanceInit:
-OnEnable:
-	enablenpc instance_npcname("#gef_a6_0et");
-	end;
-}
-
-1@gef,43,85,0	script	#gef_a2_0et	45,2,2,{
-	end;
-OnTouch:
-	warp instance_mapname("1@gef_in"),70,138;
-	end;
-OnInstanceInit:
-OnEnable:
-	enablenpc instance_npcname("#gef_a2_0et");
-	end;
-}
-
-1@gef,98,141,0	script	#gef_a8_0et	45,2,2,{
-	end;
-OnTouch:
-	warp instance_mapname("1@gef_in"),28,160;
-	end;
-OnInstanceInit:
-OnEnable:
-	enablenpc instance_npcname("#gef_a8_0et");
-	end;
-}
-
-1@gef_in,28,156,0	script	#gef_a7_0et	45,2,2,{
-	end;
-OnTouch:
-	warp instance_mapname("1@gef"),101,138;
-	end;
-OnInstanceInit:
-OnEnable:
-	enablenpc instance_npcname("#gef_a7_0et");
-	end;
-}
+1@gef_in,70,132,0	warp2	#gef_a4_0et	2,2,1@gef,46,88
+1@gef_in,106,181,0	warp2	#gef_a3_0et	2,2,1@gef,178,63
+1@gef,182,59,0	warp2	#gef_a1_0et	2,2,1@gef_in,106,177
+1@gef_in,70,158,0	warp2	#gef_a5_0et	2,2,1@gef_in,70,146
+1@gef_in,70,149,0	warp2	#gef_a6_0et	2,2,1@gef_in,70,161
+1@gef,43,85,0	warp2	#gef_a2_0et	2,2,1@gef_in,70,138
+1@gef,98,141,0	warp2	#gef_a8_0et	2,2,1@gef_in,28,160
+1@gef_in,28,156,0	warp2	#gef_a7_0et	2,2,1@gef,101,138
 
 //SPECTATORS
 

+ 53 - 78
npc/re/instances/BangungotHospital.txt

@@ -1031,85 +1031,60 @@ OnTimer30000:
 
 // Warp Portals
 //============================================================
-1@ma_h,35,156,0	script	#Boss Room Exit	WARPNPC,2,2,{
-OnTouch:
-	warp "ma_dun01",150,9;
-	end;
-}
-1@ma_h,105,157,0	script	#Boss Room Door	WARPNPC,2,2,{
-OnTouch:
-	warp 'map_name$,116,157;
-	end;
-}
-1@ma_h,112,157,0	script	#Boss Room Door1	WARPNPC,2,2,{
-OnTouch:
-	warp 'map_name$,100,157;
-	end;
-}
-1@ma_h,112,63,0	script	#Boss Room Door3	WARPNPC,2,2,{
-OnTouch:
-	warp 'map_name$,100,63;
-	end;
-}
+1@ma_h,35,156,0	warp2	#Boss Room Exit	2,2,ma_dun01,150,9
+1@ma_h,105,157,0	warp2	#Boss Room Door	2,2,1@ma_h,116,157
+1@ma_h,112,157,0	warp2	#Boss Room Door1	2,2,1@ma_h,100,157
+1@ma_h,112,63,0	warp2	#Boss Room Door3	2,2,1@ma_h,100,63
+1@ma_h,104,63,0	warp2	#Boss Room Door2	2,2,1@ma_h,117,63
+1@ma_h,36,157,0	duplicate(#Boss Room Door2)	#Patternwarp1	7,7
+1@ma_h,46,157,0	duplicate(#Boss Room Door2)	#Patternwarp2	7,7
+1@ma_h,57,157,0	duplicate(#Boss Room Door2)	#Patternwarp3	7,7
+1@ma_h,67,157,0	duplicate(#Boss Room Door2)	#Patternwarp4	7,7
+1@ma_h,79,157,0	duplicate(#Boss Room Door2)	#Patternwarp5	7,7
+1@ma_h,89,157,0	duplicate(#Boss Room Door2)	#Patternwarp6	7,7
+1@ma_h,100,157,0	duplicate(#Boss Room Door2)	#Patternwarp7	7,7
+1@ma_h,51,173,0	duplicate(#Boss Room Door2)	#Patternwarp8	10,10
+1@ma_h,52,140,0	duplicate(#Boss Room Door2)	#Patternwarp34	10,10
+1@ma_h,73,173,0	duplicate(#Boss Room Door2)	#Patternwarp35	10,10
+1@ma_h,73,140,0	duplicate(#Boss Room Door2)	#Patternwarp36	10,10
+1@ma_h,95,173,0	duplicate(#Boss Room Door2)	#Patternwarp37	10,10
+1@ma_h,95,140,0	duplicate(#Boss Room Door2)	#Patternwarp38	10,10
+//1@ma_h,70,170,0	duplicate(#Boss Room Door2)	#Patternwarp39	10,10
+//1@ma_h,77,169,0	duplicate(#Boss Room Door2)	#Patternwarp40	10,10
+1@ma_h,117,171,0	duplicate(#Boss Room Door2)	#Patternwarp41	10,10
+1@ma_h,131,171,0	duplicate(#Boss Room Door2)	#Patternwarp42	10,10
+1@ma_h,146,171,0	duplicate(#Boss Room Door2)	#Patternwarp43	10,10
+1@ma_h,117,157,0	duplicate(#Boss Room Door2)	#Patternwarp44	10,10
+1@ma_h,131,157,0	duplicate(#Boss Room Door2)	#Patternwarp45	10,10
+1@ma_h,146,157,0	duplicate(#Boss Room Door2)	#Patternwarp46	10,10
+1@ma_h,117,143,0	duplicate(#Boss Room Door2)	#Patternwarp47	10,10
+1@ma_h,131,143,0	duplicate(#Boss Room Door2)	#Patternwarp48	10,10
+1@ma_h,146,143,0	duplicate(#Boss Room Door2)	#Patternwarp49	10,10
 
-1@ma_h,104,63,0	script	#Boss Room Door2	WARPNPC,2,2,{
-OnTouch:
-	warp 'map_name$,117,63;
-	end;
-}
-1@ma_h,36,157,0	duplicate(#Boss Room Door2)	#Patternwarp1	WARPNPC,7,7
-1@ma_h,46,157,0	duplicate(#Boss Room Door2)	#Patternwarp2	WARPNPC,7,7
-1@ma_h,57,157,0	duplicate(#Boss Room Door2)	#Patternwarp3	WARPNPC,7,7
-1@ma_h,67,157,0	duplicate(#Boss Room Door2)	#Patternwarp4	WARPNPC,7,7
-1@ma_h,79,157,0	duplicate(#Boss Room Door2)	#Patternwarp5	WARPNPC,7,7
-1@ma_h,89,157,0	duplicate(#Boss Room Door2)	#Patternwarp6	WARPNPC,7,7
-1@ma_h,100,157,0	duplicate(#Boss Room Door2)	#Patternwarp7	WARPNPC,7,7
-1@ma_h,51,173,0	duplicate(#Boss Room Door2)	#Patternwarp8	WARPNPC,10,10
-1@ma_h,52,140,0	duplicate(#Boss Room Door2)	#Patternwarp34	WARPNPC,10,10
-1@ma_h,73,173,0	duplicate(#Boss Room Door2)	#Patternwarp35	WARPNPC,10,10
-1@ma_h,73,140,0	duplicate(#Boss Room Door2)	#Patternwarp36	WARPNPC,10,10
-1@ma_h,95,173,0	duplicate(#Boss Room Door2)	#Patternwarp37	WARPNPC,10,10
-1@ma_h,95,140,0	duplicate(#Boss Room Door2)	#Patternwarp38	WARPNPC,10,10
-//1@ma_h,70,170,0	duplicate(#Boss Room Door2)	#Patternwarp39	WARPNPC,10,10
-//1@ma_h,77,169,0	duplicate(#Boss Room Door2)	#Patternwarp40	WARPNPC,10,10
-1@ma_h,117,171,0	duplicate(#Boss Room Door2)	#Patternwarp41	WARPNPC,10,10
-1@ma_h,131,171,0	duplicate(#Boss Room Door2)	#Patternwarp42	WARPNPC,10,10
-1@ma_h,146,171,0	duplicate(#Boss Room Door2)	#Patternwarp43	WARPNPC,10,10
-1@ma_h,117,157,0	duplicate(#Boss Room Door2)	#Patternwarp44	WARPNPC,10,10
-1@ma_h,131,157,0	duplicate(#Boss Room Door2)	#Patternwarp45	WARPNPC,10,10
-1@ma_h,146,157,0	duplicate(#Boss Room Door2)	#Patternwarp46	WARPNPC,10,10
-1@ma_h,117,143,0	duplicate(#Boss Room Door2)	#Patternwarp47	WARPNPC,10,10
-1@ma_h,131,143,0	duplicate(#Boss Room Door2)	#Patternwarp48	WARPNPC,10,10
-1@ma_h,146,143,0	duplicate(#Boss Room Door2)	#Patternwarp49	WARPNPC,10,10
-
-1@ma_h,36,63,0	script	#Patternwarp10	WARPNPC,7,7,{
-OnTouch:
-	warp 'map_name$,116,157;
-	end;
-}
-1@ma_h,46,63,0	duplicate(#Patternwarp10)	#Patternwarp11	WARPNPC,7,7
-1@ma_h,56,63,0	duplicate(#Patternwarp10)	#Patternwarp12	WARPNPC,7,7
-1@ma_h,67,63,0	duplicate(#Patternwarp10)	#Patternwarp13	WARPNPC,7,7
-1@ma_h,78,63,0	duplicate(#Patternwarp10)	#Patternwarp14	WARPNPC,7,7
-1@ma_h,89,63,0	duplicate(#Patternwarp10)	#Patternwarp15	WARPNPC,7,7
-1@ma_h,100,63,0	duplicate(#Patternwarp10)	#Patternwarp16	WARPNPC,7,7
-1@ma_h,51,79,0	duplicate(#Patternwarp10)	#Patternwarp17	WARPNPC,10,10
-1@ma_h,51,46,0	duplicate(#Patternwarp10)	#Patternwarp18	WARPNPC,10,10
-1@ma_h,73,80,0	duplicate(#Patternwarp10)	#Patternwarp19	WARPNPC,10,10
-1@ma_h,73,46,0	duplicate(#Patternwarp10)	#Patternwarp20	WARPNPC,10,10
-1@ma_h,95,79,0	duplicate(#Patternwarp10)	#Patternwarp21	WARPNPC,10,10
-1@ma_h,95,46,0	duplicate(#Patternwarp10)	#Patternwarp22	WARPNPC,10,10
-//1@ma_h,193,82,0	duplicate(#Patternwarp10)	#Patternwarp23	WARPNPC,7,7
-//1@ma_h,193,82,0	duplicate(#Patternwarp10)	#Patternwarp24	WARPNPC,7,7
-1@ma_h,117,77,0	duplicate(#Patternwarp10)	#Patternwarp25	WARPNPC,10,10
-1@ma_h,131,77,0	duplicate(#Patternwarp10)	#Patternwarp26	WARPNPC,10,10
-1@ma_h,146,77,0	duplicate(#Patternwarp10)	#Patternwarp27	WARPNPC,10,10
-1@ma_h,117,63,0	duplicate(#Patternwarp10)	#Patternwarp28	WARPNPC,10,10
-1@ma_h,131,63,0	duplicate(#Patternwarp10)	#Patternwarp29	WARPNPC,10,10
-1@ma_h,146,63,0	duplicate(#Patternwarp10)	#Patternwarp30	WARPNPC,10,10
-1@ma_h,117,49,0	duplicate(#Patternwarp10)	#Patternwarp31	WARPNPC,10,10
-1@ma_h,131,49,0	duplicate(#Patternwarp10)	#Patternwarp32	WARPNPC,10,10
-1@ma_h,146,49,0	duplicate(#Patternwarp10)	#Patternwarp33	WARPNPC,10,10
+1@ma_h,36,63,0	warp2	#Patternwarp10	7,7,1@ma_h,116,157
+1@ma_h,46,63,0	duplicate(#Patternwarp10)	#Patternwarp11	7,7
+1@ma_h,56,63,0	duplicate(#Patternwarp10)	#Patternwarp12	7,7
+1@ma_h,67,63,0	duplicate(#Patternwarp10)	#Patternwarp13	7,7
+1@ma_h,78,63,0	duplicate(#Patternwarp10)	#Patternwarp14	7,7
+1@ma_h,89,63,0	duplicate(#Patternwarp10)	#Patternwarp15	7,7
+1@ma_h,100,63,0	duplicate(#Patternwarp10)	#Patternwarp16	7,7
+1@ma_h,51,79,0	duplicate(#Patternwarp10)	#Patternwarp17	10,10
+1@ma_h,51,46,0	duplicate(#Patternwarp10)	#Patternwarp18	10,10
+1@ma_h,73,80,0	duplicate(#Patternwarp10)	#Patternwarp19	10,10
+1@ma_h,73,46,0	duplicate(#Patternwarp10)	#Patternwarp20	10,10
+1@ma_h,95,79,0	duplicate(#Patternwarp10)	#Patternwarp21	10,10
+1@ma_h,95,46,0	duplicate(#Patternwarp10)	#Patternwarp22	10,10
+//1@ma_h,193,82,0	duplicate(#Patternwarp10)	#Patternwarp23	7,7
+//1@ma_h,193,82,0	duplicate(#Patternwarp10)	#Patternwarp24	7,7
+1@ma_h,117,77,0	duplicate(#Patternwarp10)	#Patternwarp25	10,10
+1@ma_h,131,77,0	duplicate(#Patternwarp10)	#Patternwarp26	10,10
+1@ma_h,146,77,0	duplicate(#Patternwarp10)	#Patternwarp27	10,10
+1@ma_h,117,63,0	duplicate(#Patternwarp10)	#Patternwarp28	10,10
+1@ma_h,131,63,0	duplicate(#Patternwarp10)	#Patternwarp29	10,10
+1@ma_h,146,63,0	duplicate(#Patternwarp10)	#Patternwarp30	10,10
+1@ma_h,117,49,0	duplicate(#Patternwarp10)	#Patternwarp31	10,10
+1@ma_h,131,49,0	duplicate(#Patternwarp10)	#Patternwarp32	10,10
+1@ma_h,146,49,0	duplicate(#Patternwarp10)	#Patternwarp33	10,10
 
 // Disable select warps.
 // Custom, but saves processing and lines.

+ 18 - 66
npc/re/instances/HorrorToyFactory.txt

@@ -320,6 +320,13 @@ OnStart2:
 
 OnInstanceInit:
 	disablenpc instance_npcname( strnpcinfo(0) );
+	// disable some warps
+	disablenpc instance_npcname("#fac3wp");
+	disablenpc instance_npcname("#fac3wp2");
+	disablenpc instance_npcname("#fac4wp");
+	disablenpc instance_npcname("#fac4wp2");
+	disablenpc instance_npcname("#fac5wp");
+	disablenpc instance_npcname("#fac6wp");
 	end;
 }
 
@@ -458,12 +465,6 @@ OnTouch:
 	end;
 }
 
-1@xm_d,79,129,0	script	#fac1wp2	WARPNPC,2,2,{
-OnTouch:
-	warp 'xm_d_map$,73,129;
-	end;
-}
-
 1@xm_d,179,129,0	script	#fac2wp	WARPNPC,2,2,{
 OnTouch:
 	if (getstatus(SC_MONSTER_TRANSFORM,1) == 1249) {
@@ -473,12 +474,6 @@ OnTouch:
 	end;
 }
 
-1@xm_d,184,109,0	script	#fac2wp2	WARPNPC,2,2,{
-OnTouch:
-	warp 'xm_d_map$,170,129;
-	end;
-}
-
 1@xm_d,1,5,3	script	#alert1	CLEAR_NPC,{
 	end;
 OnStart:
@@ -718,24 +713,6 @@ OnInstanceInit:
 	end;
 }
 
-1@xm_d,130,178,0	script	#fac3wp	WARPNPC,2,2,{
-OnTouch:
-	warp 'xm_d_map$,130,193;
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname( strnpcinfo(0) );
-	end;
-}
-
-1@xm_d,130,184,0	script	#fac3wp2	WARPNPC,2,2,{
-OnTouch:
-	warp 'xm_d_map$,129,173;
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname( strnpcinfo(0) );
-	end;
-}
-
 1@xm_d,1,2,3	script	#fac2wpc	CLEAR_NPC,{
 	end;
 OnStart:
@@ -984,24 +961,6 @@ OnInstanceInit:
 	end;
 }
 
-1@xm_d,107,208,0	script	#fac4wp	WARPNPC,2,2,{
-OnTouch:
-	warp 'xm_d_map$,87,208;
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname( strnpcinfo(0) );
-	end;
-}
-
-1@xm_d,95,208,0	script	#fac4wp2	WARPNPC,2,2,{
-OnTouch:
-	warp 'xm_d_map$,115,208;
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname( strnpcinfo(0) );
-	end;
-}
-
 1@xm_d,1,5,3	script	#fac3ct	CLEAR_NPC,{
 	end;
 OnEnd:
@@ -1086,15 +1045,6 @@ OnInstanceInit:
 	end;
 }
 
-1@xm_d,152,208,0	script	#fac5wp	WARPNPC,2,2,{
-OnTouch:
-	warp 'xm_d_map$,167,208;
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname( strnpcinfo(0) );
-	end;
-}
-
 /*
 // never enabled
 1@xm_d,160,208,0	script	#fac5wp2	WARPNPC,2,2,{
@@ -1490,15 +1440,6 @@ OnInstanceInit:
 	end;
 }
 
-1@xm_d,205,159,0	script	#fac6wp	WARPNPC,2,2,{
-OnTouch:
-	warp 'xm_d_map$,205,147;
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname( strnpcinfo(0) );
-	end;
-}
-
 1@xm_d,218,145,0	script	#jeton2	-1,4,4,{
 OnTouch_:
 	disablenpc instance_npcname("#jeton2");
@@ -1687,6 +1628,17 @@ OnInstanceInit:
 1@xm_d,222,136,3	duplicate(Packaged Present#1)	Packaged Present#9	4_TREASURE_BOX
 1@xm_d,226,136,3	duplicate(Packaged Present#1)	Packaged Present#10	4_TREASURE_BOX
 
+// Warps
+//==========================================
+1@xm_d,79,129,0	warp2	#fac1wp2	2,2,1@xm_d,73,129
+1@xm_d,184,109,0	warp2	#fac2wp2	2,2,1@xm_d,170,129
+1@xm_d,130,178,0	warp2	#fac3wp	2,2,1@xm_d,130,193
+1@xm_d,130,184,0	warp2	#fac3wp2	2,2,1@xm_d,129,173
+1@xm_d,107,208,0	warp2	#fac4wp	2,2,1@xm_d,87,208
+1@xm_d,95,208,0	warp2	#fac4wp2	2,2,1@xm_d,115,208
+1@xm_d,152,208,0	warp2	#fac5wp	2,2,1@xm_d,167,208
+1@xm_d,205,159,0	warp2	#fac6wp	2,2,1@xm_d,205,147
+
 // Instance GM Functions :: mx_xm_ad
 //==========================================
 1@xm_d,1,1,3	script	#adsw	CLEAR_NPC,{

+ 2 - 9
npc/re/instances/MalangdoCulvert.txt

@@ -515,6 +515,7 @@ L_Enter:
 	end;
 OnInstanceInit:
 	disablenpc instance_npcname("Culvert Entrance#i");
+	disablenpc instance_npcname("Culvert Entrance#n");	// disable warp out
 	end;
 OnTouch:
 	if (BaseLevel >= 140)
@@ -878,15 +879,7 @@ OnInstanceInit:
 	end;
 }
 
-1@pump,32,100,0	script	Culvert Entrance#n	45,3,3,{
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname(strnpcinfo(0));
-	end;
-OnTouch:
-	warp "mal_in01",161,32;
-	end;
-}
+1@pump,32,100,0	warp2	Culvert Entrance#n	3,3,mal_in01,161,32
 
 //MD_Putmob "1@pump" 0 0 0 0 20 HYDRA 0 0 2
 1@pump,1,1,4	script	Hydra#n	-1,{

+ 21 - 67
npc/re/instances/OctopusCave.txt

@@ -171,6 +171,11 @@ OnTouch_:
 1@cash,1,1,0	script	oct_enter_broad	-1,{
 	end;
 OnInstanceInit:
+	disablenpc instance_npcname("oct_foot_exit1");
+	disablenpc instance_npcname("oct_foot_exit2");
+	disablenpc instance_npcname("oct_foot_exit3");
+	disablenpc instance_npcname("oct_foot_exit4");
+	disablenpc instance_npcname("oct_boss_warp");
 	donpcevent instance_npcname("oct_enter_broad")+"::OnDisable";
 	end;
 OnEnable:
@@ -332,7 +337,7 @@ OnTimer30000:
 	setd "."+strnpcinfo(0)+instance_id(),0;
 	stopnpctimer;
 	set .@i, atoi(charat(strnpcinfo(0),8));
-	donpcevent instance_npcname("oct_foot_exit"+.@i)+"::OnEnable";
+	enablenpc instance_npcname("oct_foot_exit"+.@i);
 	donpcevent instance_npcname(strnpcinfo(0))+"::OnDisable";
 	end;
 OnMyMobDead:
@@ -342,7 +347,7 @@ OnMyMobDead:
 		setd "."+strnpcinfo(0)+instance_id(),0;
 		stopnpctimer;
 		set .@i, atoi(charat(strnpcinfo(0),8));
-		donpcevent instance_npcname("oct_foot_exit"+.@i)+"::OnEnable";
+		enablenpc instance_npcname("oct_foot_exit"+.@i);
 		donpcevent instance_npcname(strnpcinfo(0))+"::OnDisable";
 		end;
 	}
@@ -352,22 +357,6 @@ OnMyMobDead:
 1@cash,307,215,0	duplicate(oct_foot1)	oct_foot3	139,6,6
 1@cash,372,131,0	duplicate(oct_foot1)	oct_foot4	139,6,6
 
-1@cash,16,117,0	script	oct_foot_exit1	45,2,2,{
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname(strnpcinfo(0));
-	end;
-OnEnable:
-	enablenpc instance_npcname(strnpcinfo(0));
-	end;
-OnTouch:
-	warp instance_mapname("1@cash"),198,99;
-	end;
-}
-1@cash,77,193,0	duplicate(oct_foot_exit1)	oct_foot_exit2	45,2,2
-1@cash,312,214,0	duplicate(oct_foot_exit1)	oct_foot_exit3	45,2,2
-1@cash,370,139,0	duplicate(oct_foot_exit1)	oct_foot_exit4	45,2,2
-
 1@cash,15,15,0	script	oct_mob_con	-1,{
 	end;
 OnInstanceInit:
@@ -671,15 +660,6 @@ OnMyMobDead:
 	end;
 }
 
-1@cash,198,116,0	script	oct_boss_warp	45,2,2,{
-	end;
-OnInstanceInit:
-	disablenpc instance_npcname("oct_boss_warp");
-	end;
-OnTouch:
-	warp instance_mapname("1@cash"),210,172;
-	end;
-}
 
 1@cash,190,208,0	script	oct_exit_1	45,2,2,{
 	end;
@@ -699,43 +679,17 @@ OnTouch:
 
 // Warp Portals
 //============================================================
-1@cash,193,82,0	script	oct_door1	WARPNPC,2,2,{
-OnTouch:
-	warp instance_mapname("1@cash"),151,48;
-	end;
-}
-1@cash,154,53,0	script	oct_door2	WARPNPC,2,2,{
-OnTouch:
-	warp instance_mapname("1@cash"),197,87;
-	end;
-}
-1@cash,187,99,0	script	oct_door3	WARPNPC,2,2,{
-OnTouch:
-	warp instance_mapname("1@cash"),148,128;
-	end;
-}
-1@cash,153,133,0	script	oct_door4	WARPNPC,2,2,{
-OnTouch:
-	warp instance_mapname("1@cash"),197,99;
-	end;
-}
-1@cash,209,100,0	script	oct_door5	WARPNPC,2,2,{
-OnTouch:
-	warp instance_mapname("1@cash"),250,111;
-	end;
-}
-1@cash,244,118,0	script	oct_door6	WARPNPC,2,2,{
-OnTouch:
-	warp instance_mapname("1@cash"),199,100;
-	end;
-}
-1@cash,209,83,0	script	oct_door7	WARPNPC,2,2,{
-OnTouch:
-	warp instance_mapname("1@cash"),252,46;
-	end;
-}
-1@cash,246,53,0	script	oct_door8	WARPNPC,2,2,{
-OnTouch:
-	warp instance_mapname("1@cash"),203,83;
-	end;
-}
+1@cash,16,117,0	warp2	oct_foot_exit1	2,2,1@cash,198,99
+1@cash,77,193,0	warp2	oct_foot_exit2	2,2,1@cash,198,99
+1@cash,312,214,0	warp2	oct_foot_exit3	2,2,1@cash,198,99
+1@cash,370,139,0	warp2	oct_foot_exit4	2,2,1@cash,198,99
+1@cash,198,116,0	warp2	oct_boss_warp	2,2,1@cash,210,172
+
+1@cash,193,82,0	warp2	oct_door1	2,2,1@cash,151,48
+1@cash,154,53,0	warp2	oct_door2	2,2,1@cash,197,87
+1@cash,187,99,0	warp2	oct_door3	2,2,1@cash,148,128
+1@cash,153,133,0	warp2	oct_door4	2,2,1@cash,197,99
+1@cash,209,100,0	warp2	oct_door5	2,2,1@cash,250,111
+1@cash,244,118,0	warp2	oct_door6	2,2,1@cash,199,100
+1@cash,209,83,0	warp2	oct_door7	2,2,1@cash,252,46
+1@cash,246,53,0	warp2	oct_door8	2,2,1@cash,203,83

+ 18 - 101
npc/re/instances/SaraMemory.txt

@@ -361,7 +361,7 @@ dali,139,118,4	script	Dimensional Device#sara	10007,{
 		next;
 		donpcevent instance_npcname("Strange Old Man#01", instance_id())+"::OnDisable";
 		donpcevent instance_npcname("Mysterious Old Man#02", instance_id())+"::OnDisable";
-		donpcevent instance_npcname("#sara_warp01", instance_id())+"::OnEnable";
+		enablenpc instance_npcname("#sara_warp01");
 		donpcevent instance_npcname("Sara Irene#01", instance_id())+"::OnEnable";
 		donpcevent instance_npcname("Sara's Mother", instance_id())+"::OnEnable";
 		donpcevent instance_npcname("Doyen Irene#02", instance_id())+"::OnEnable";
@@ -678,7 +678,7 @@ OnEnable:
 		mapannounce instance_mapname("1@sara"), "We must find Sara. You seem to remember her running in the 8 O'clock direction.",bc_map,"0xffff00";
 		viewpoint 1,88,188,1,0x00FF00;
 		donpcevent instance_npcname("Doyen Irene#04", instance_id())+"::OnDisable";
-		donpcevent instance_npcname("#sara_warp06", instance_id())+"::OnEnable";
+		enablenpc instance_npcname("#sara_warp06");
 		donpcevent instance_npcname("Sara Irene#03", instance_id())+"::OnEnable";
 		donpcevent instance_npcname("?????#01", instance_id())+"::OnEnable";
 		end;
@@ -1168,7 +1168,7 @@ OnMyMobDead:
 		mapannounce instance_mapname("1@sara"), "Sara ran away again! You think she went in the 2 O'clock direction!",bc_map,"0xffff00";
 		if (playerattached() > 0)
 			viewpoint 1,208,250,1,0x00FF00;
-		donpcevent instance_npcname("#sara_warp02", instance_id())+"::OnEnable";
+		enablenpc instance_npcname("#sara_warp02");
 		donpcevent instance_npcname("#MobsSara02", instance_id())+"::OnEnable";
 		donpcevent instance_npcname("#MobsSara01", instance_id())+"::OnDisable";
 	}
@@ -1214,7 +1214,7 @@ OnMyMobDead:
 		mapannounce instance_mapname("1@sara"), "Sara ran away yet again! You think she went in the 5 O'clock direction!",bc_map,"0xffff00";
 		if (playerattached() > 0)
 			viewpoint 1,226,190,1,0x00FF00;
-		donpcevent instance_npcname("#sara_warp03", instance_id())+"::OnEnable";
+		enablenpc instance_npcname("#sara_warp03");
 		donpcevent instance_npcname("#MobsSara03", instance_id())+"::OnEnable";
 		donpcevent instance_npcname("#MobsSara02", instance_id())+"::OnDisable";
 	}
@@ -1292,7 +1292,7 @@ OnMyMobDead:
 		mapannounce instance_mapname("1@sara"), "Sara ran away yet again! *sigh* You think she went in the 12 O'clock direction!",bc_map,"0xffff00";
 		if (playerattached() > 0)
 			viewpoint 1,166,67,1,0x00FF00;
-		donpcevent instance_npcname("#sara_warp04", instance_id())+"::OnEnable";
+		enablenpc instance_npcname("#sara_warp04");
 		donpcevent instance_npcname("#MobsSara04", instance_id())+"::OnEnable";
 		donpcevent instance_npcname("#MobsSara03", instance_id())+"::OnDisable";
 	}
@@ -1369,7 +1369,7 @@ OnMyMobDead:
 		mapannounce instance_mapname("1@sara"), "Sara continues to run away! You think she went in the 12 O'clock direction!",bc_map,"0xffff00";
 		if (playerattached() > 0)
 			viewpoint 1,155,180,1,0x00FF00;
-		donpcevent instance_npcname("#sara_warp05", instance_id())+"::OnEnable";
+		enablenpc instance_npcname("#sara_warp05");
 		donpcevent instance_npcname("Sara Irene#02", instance_id())+"::OnEnable";
 		donpcevent instance_npcname("Doyen Irene#03", instance_id())+"::OnEnable";
 		donpcevent instance_npcname("Sara Irene#talk01", instance_id())+"::OnDisable";
@@ -1448,101 +1448,12 @@ OnMyMobDead:
 }
 
 //= Warps
-1@sara,240,145,4	script	#sara_warp01	45,2,2,{
-	end;
-
-OnTouch:
-	warp instance_mapname("1@sara"),94,320;
-	end;
-
-OnInstanceInit:
-OnDisable:
-	disablenpc instance_npcname("#sara_warp01");
-	end;
-OnEnable:
-	enablenpc instance_npcname("#sara_warp01");
-	end;
-}
-
-1@sara,208,250,4	script	#sara_warp02	45,2,2,{
-	end;
-
-OnTouch:
-	warp instance_mapname("1@sara"),230,311;
-	end;
-
-OnInstanceInit:
-OnDisable:
-	disablenpc instance_npcname("#sara_warp02");
-	end;
-OnEnable:
-	enablenpc instance_npcname("#sara_warp02");
-	end;
-}
-
-1@sara,226,190,4	script	#sara_warp03	45,2,2,{
-	end;
-
-OnTouch:
-	warp instance_mapname("1@sara"),263,94;
-	end;
-
-OnInstanceInit:
-OnDisable:
-	disablenpc instance_npcname("#sara_warp03");
-	end;
-OnEnable:
-	enablenpc instance_npcname("#sara_warp03");
-	end;
-}
-
-1@sara,166,67,4	script	#sara_warp04	45,2,2,{
-	end;
-
-OnTouch:
-	warp instance_mapname("1@sara"),164,81;
-	end;
-
-OnInstanceInit:
-OnDisable:
-	disablenpc instance_npcname("#sara_warp04");
-	end;
-OnEnable:
-	enablenpc instance_npcname("#sara_warp04");
-	end;
-}
-
-1@sara,155,180,4	script	#sara_warp05	45,2,2,{
-	end;
-
-OnTouch:
-	warp instance_mapname("1@sara"),155,196;
-	end;
-
-OnInstanceInit:
-OnDisable:
-	disablenpc instance_npcname("#sara_warp05");
-	end;
-OnEnable:
-	enablenpc instance_npcname("#sara_warp05");
-	end;
-}
-
-1@sara,88,188,4	script	#sara_warp06	45,2,2,{
-	end;
-
-OnTouch:
-	warp instance_mapname("1@sara"),89,175;
-	end;
-
-OnInstanceInit:
-OnDisable:
-	disablenpc instance_npcname("#sara_warp06");
-	end;
-OnEnable:
-	enablenpc instance_npcname("#sara_warp06");
-	end;
-}
+1@sara,240,145,0	warp2	#sara_warp01	2,2,1@sara,94,320
+1@sara,208,250,0	warp2	#sara_warp02	2,2,1@sara,230,311
+1@sara,226,190,0	warp2	#sara_warp03	2,2,1@sara,263,94
+1@sara,166,67,0	warp2	#sara_warp04	2,2,1@sara,164,81
+1@sara,155,180,0	warp2	#sara_warp05	2,2,1@sara,155,196
+1@sara,88,188,0	warp2	#sara_warp06	2,2,1@sara,89,175
 
 1@sara,16,143,4	script	#sara_warp07	45,2,2,{
 	end;
@@ -1558,6 +1469,12 @@ OnTouch:
 	end;
 
 OnInstanceInit:
+	disablenpc instance_npcname("#sara_warp01");
+	disablenpc instance_npcname("#sara_warp02");
+	disablenpc instance_npcname("#sara_warp03");
+	disablenpc instance_npcname("#sara_warp04");
+	disablenpc instance_npcname("#sara_warp05");
+	disablenpc instance_npcname("#sara_warp06");
 OnDisable:
 	disablenpc instance_npcname("#sara_warp07");
 	end;

+ 1 - 5
npc/re/warps/cities/rachel.txt

@@ -123,8 +123,4 @@ ra_in01,375,109,0	warp	rachel85	1,1,rachel,116,154
 rachel,116,158,0	warp	rachel86	1,1,ra_in01,375,114
 
 //Additional Temple warp
-ra_temin,275,243,0	script	rachel87	WARPNPC,1,1,{
-OnTouch:
-	warp "ra_temin",131,131;
-	end;
-}
+ra_temin,275,243,0	warp2	rachel87	1,1,ra_temin,131,131

+ 1 - 5
npc/re/warps/other/jobquests.txt

@@ -24,11 +24,7 @@ job_sage,55,154,0	warp	sage_out	1,1,yuno_in03,169,171
 //==============================================================================
 //Arch Bishop
 //==============================================================================
-job3_arch01,29,24,0	script	#archout	WARPNPC,1,1,{
-OnTouch:
-	warp "odin_tem02",282,263;
-	end;
-}
+job3_arch01,29,24,0	warp2	#archout	1,1,odin_tem02,282,263
 
 //==============================================================================
 //Guillotine Cross

+ 11 - 55
npc/re/warps/other/paradise.txt

@@ -12,58 +12,14 @@
 //= 1.0 First Release
 //============================================================
 
-moc_para01,57,27,0	script	#warp_2_pub	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",162,26;
-	end;
-}
-moc_para01,158,26,0	script	#warp_2_din_1	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",55,27;
-	end;
-}
-moc_para01,48,16,0	script	#warp_2_2f	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",48,164;
-	end;
-}
-moc_para01,47,161,0	script	#warp_2_1f	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",47,18;
-	end;
-}
-moc_para01,107,12,0	script	#warp_2_din_2	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",47,37;
-	end;
-}
-moc_para01,100,27,0	script	#warp_2_gym	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",47,85;
-	end;
-}
-moc_para01,49,86,0	script	#warp_2_pass_1	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",103,27;
-	end;
-}
-moc_para01,113,32,0	script	#warp_2_ware	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",105,92;
-	end;
-}
-moc_para01,102,92,0	script	#warp_2_pass_2	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",109,33;
-	end;
-}
-moc_para01,41,187,0	script	#warp_2_room2	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",179,93;
-	end;
-}
-moc_para01,179,90,0	script	#warp_2_2fhall_3	WARPNPC,1,1,{
-OnTouch:
-	warp "moc_para01",41,185;
-	end;
-}
+moc_para01,57,27,0	warp2	#warp_2_pub	1,1,moc_para01,162,26
+moc_para01,158,26,0	warp2	#warp_2_din_1	1,1,moc_para01,55,27
+moc_para01,48,16,0	warp2	#warp_2_2f	1,1,moc_para01,48,164
+moc_para01,47,161,0	warp2	#warp_2_1f	1,1,moc_para01,47,18
+moc_para01,107,12,0	warp2	#warp_2_din_2	1,1,moc_para01,47,37
+moc_para01,100,27,0	warp2	#warp_2_gym	1,1,moc_para01,47,85
+moc_para01,49,86,0	warp2	#warp_2_pass_1	1,1,moc_para01,103,27
+moc_para01,113,32,0	warp2	#warp_2_ware	1,1,moc_para01,105,92
+moc_para01,102,92,0	warp2	#warp_2_pass_2	1,1,moc_para01,109,33
+moc_para01,41,187,0	warp2	#warp_2_room2	1,1,moc_para01,179,93
+moc_para01,179,90,0	warp2	#warp_2_2fhall_3	1,1,moc_para01,41,185

+ 1 - 5
npc/warps/dungeons/mosk_dun.txt

@@ -18,11 +18,7 @@
 
 mosk_fild02,190,257,0	warp	moscoviawarp0401	1,1,mosk_dun01,189,45
 mosk_dun01,189,42,0	warp	moscoviawarp0501	1,1,mosk_fild02,190,254
-mosk_in,215,36,0	script	babayagaout	WARPNPC,1,1,{
-OnTouch:
-	warp "mosk_dun02",53,217;
-	end;
-}
+mosk_in,215,36,0	warp2	babayagaout	1,1,mosk_dun02,53,217
 
 mosk_dun02,53,220,4	script	#babayagain	WARPNPC,1,1,{
 	end;

+ 1 - 5
npc/warps/dungeons/ra_san.txt

@@ -40,8 +40,4 @@ ra_san04,35,221,0	warp	sanctuary13	1,1,ra_san02,213,9
 ra_san02,30,21,0	warp	sanctuary14	1,1,ra_san05,14,149
 
 //Additional Dungeon warp. (Exit)
-ra_san01,139,139,0	script	sanctuary15	WARPNPC,1,1,{
-OnTouch:
-	warp "ra_temin",27,314;
-	end;
-}
+ra_san01,139,139,0	warp2	sanctuary15	1,1,ra_temin,27,314

+ 10 - 3
src/map/npc.c

@@ -992,7 +992,7 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y)
 	}
 	switch(map[m].npc[i]->subtype) {
 		case NPCTYPE_WARP:
-			if (pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]) || pc_isdead(sd))
+			if ((!map[m].npc[i]->trigger_on_hidden && (pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]))) || pc_isdead(sd))
 				break; // hidden or dead chars cannot use warps
 			if (!pc_job_can_entermap((enum e_job)sd->status.class_, map_mapindex2mapid(map[m].npc[i]->u.warp.mapindex), sd->group_level))
 				break;
@@ -1011,7 +1011,7 @@ int npc_touch_areanpc(struct map_session_data* sd, int16 m, int16 x, int16 y)
 
 				if ((sd->bl.x >= (map[m].npc[j]->bl.x - map[m].npc[j]->u.warp.xs) && sd->bl.x <= (map[m].npc[j]->bl.x + map[m].npc[j]->u.warp.xs)) &&
 					(sd->bl.y >= (map[m].npc[j]->bl.y - map[m].npc[j]->u.warp.ys) && sd->bl.y <= (map[m].npc[j]->bl.y + map[m].npc[j]->u.warp.ys))) {
-					if( pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]) || pc_isdead(sd) )
+					if ((!map[m].npc[i]->trigger_on_hidden && (pc_ishiding(sd) || (sd->sc.count && sd->sc.data[SC_CAMOUFLAGE]))) || pc_isdead(sd))
 						break; // hidden or dead chars cannot use warps
 					pc_setpos(sd,map[m].npc[j]->u.warp.mapindex,map[m].npc[j]->u.warp.x,map[m].npc[j]->u.warp.y,CLR_OUTSIGHT);
 					found_warp = 1;
@@ -2440,6 +2440,7 @@ struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short
 	nd->u.warp.ys = xs;
 	nd->bl.type = BL_NPC;
 	nd->subtype = NPCTYPE_WARP;
+	nd->trigger_on_hidden = false;
 	npc_setcells(nd);
 	if(map_addblock(&nd->bl))
 		return NULL;
@@ -2518,6 +2519,10 @@ static const char* npc_parse_warp(char* w1, char* w2, char* w3, char* w4, const
 	npc_warp++;
 	nd->bl.type = BL_NPC;
 	nd->subtype = NPCTYPE_WARP;
+	if (strcasecmp("warp2", w2) == 0)
+		nd->trigger_on_hidden = true;
+	else
+		nd->trigger_on_hidden = false;
 	npc_setcells(nd);
 	if(map_addblock(&nd->bl)) //couldn't add on map
 		return strchr(start,'\n');
@@ -3151,6 +3156,7 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
 			nd->u.warp.mapindex = dnd->u.warp.mapindex;
 			nd->u.warp.x = dnd->u.warp.x;
 			nd->u.warp.y = dnd->u.warp.y;
+			nd->trigger_on_hidden = dnd->trigger_on_hidden;
 			break;
 	}
 
@@ -3245,6 +3251,7 @@ int npc_duplicate4instance(struct npc_data *snd, int16 m) {
 		wnd->u.warp.ys = snd->u.warp.ys;
 		wnd->bl.type = BL_NPC;
 		wnd->subtype = NPCTYPE_WARP;
+		wnd->trigger_on_hidden = snd->trigger_on_hidden;
 		wnd->src_id = snd->src_id ? snd->src_id : snd->bl.id;
 		npc_setcells(wnd);
 		if(map_addblock(&wnd->bl))
@@ -4391,7 +4398,7 @@ int npc_parsesrcfile(const char* filepath, bool runOnInit)
 			}
 		}
 
-		if( strcasecmp(w2,"warp") == 0 && count > 3 )
+		if((strcasecmp(w2,"warp") == 0 || strcasecmp(w2,"warp2") == 0) && count > 3)
 			p = npc_parse_warp(w1,w2,w3,w4, p, buffer, filepath);
 		else if( (!strcasecmp(w2,"shop") || !strcasecmp(w2,"cashshop") || !strcasecmp(w2,"itemshop") || !strcasecmp(w2,"pointshop") || !strcasecmp(w2,"marketshop") ) && count > 3 )
 			p = npc_parse_shop(w1,w2,w3,w4, p, buffer, filepath);

+ 1 - 0
src/map/npc.h

@@ -60,6 +60,7 @@ struct npc_data {
 	void* chatdb; // pointer to a npc_parse struct (see npc_chat.c)
 	char* path;/* path dir */
 	enum npc_subtype subtype;
+	bool trigger_on_hidden;
 	int src_id;
 	union {
 		struct {