Преглед изворни кода

Added setpcblock to some official scripts (#4067)

* Added setpcblock to official scripts to mimic some npc interaction.
* Clean-up the docs.
* Added the WORK_IN_PROGRESS message when PCBLOCK_USEITEM and PCBLOCK_SKILL are enabled.

Thanks to @aleos89 for the review!
Atemo пре 6 година
родитељ
комит
e172c4365d

+ 13 - 12
doc/script_commands.txt

@@ -6145,18 +6145,19 @@ The action is blocked when the <state> is true, while false allows the action ag
 'getpcblock' command return the bit-mask value of the currently
 enabled block flags.
 
-The available <type> are:
-	PCBLOCK_MOVE
-	PCBLOCK_ATTACK
-	PCBLOCK_SKILL
-	PCBLOCK_USEITEM
-	PCBLOCK_CHAT
-	PCBLOCK_IMMUNE
-	PCBLOCK_SITSTAND
-	PCBLOCK_COMMANDS
-	PCBLOCK_NPCCLICK
-	PCBLOCK_EMOTION
-	PCBLOCK_ALL
+Available <type>:
+	PCBLOCK_MOVE				Prevent the player from moving.
+	PCBLOCK_ATTACK				Prevent the player from attacking.
+	PCBLOCK_SKILL				Prevent the player from using skills/itemskills.
+	PCBLOCK_USEITEM				Prevent the player from using usable items.
+	PCBLOCK_CHAT				Prevent the player from sending global/guild/party/whisper messages.
+	PCBLOCK_IMMUNE				Prevent the player from being hit by monsters.
+	PCBLOCK_SITSTAND			Prevent the player from sitting/standing.
+	PCBLOCK_COMMANDS			Prevent the player from using atcommands/charcommands.
+	PCBLOCK_NPCCLICK			Prevent the player from clicking/touching any NPC/shop/warp.
+	PCBLOCK_EMOTION				Prevent the player from using emotions.
+	PCBLOCK_NPC				Simulate NPC interaction. Useful for NPC with no mes window. Sum of PCBLOCK_MOVE|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK.
+	PCBLOCK_ALL				Sum of all the flags.
 
 Examples:
 

+ 28 - 2
npc/re/custom/lasagna/lasagna_npcs.txt

@@ -15,7 +15,9 @@ lasa_fild01,47,297,0	script	#doint_evt01	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (Class == Job_Summoner && isbegin_quest(7711) == 0) {
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 100;
+		setpcblock PCBLOCK_NPC, false;
 		npctalk "Hey, newbie! Get over here!", "Vigilante Ajegna#doram0", bc_self;
 		npctalk "Come on over here! Click me, quick!", "Vigilante Ajegna#doram0", bc_self;
 		setquest 7711;// Beginning
@@ -151,10 +153,12 @@ lasa_fild01,53,322,3	script	Applicant Paul#doramt13	4_M_MERCAT1,4,4,{
 	}
 OnTouch:
 	if (Class == Job_Summoner && isbegin_quest(7723) == 0) {
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You, dimwit! Nothing beats damage! You should boost your STR first!", "Applicant Paul#doramt13", bc_self;
 		sleep2 2000;
 		npctalk "You have no idea! DEX comes first if you want your attack to be successful!!", "Applicant MacCarnie#doramt13", bc_self;
 		sleep2 1000;
+		setpcblock PCBLOCK_NPC, false;
 		emotion ET_STARE, getnpcid(0, "Applicant Paul#doramt13");
 		emotion ET_OHNO, getnpcid(0, "Applicant MacCarnie#doramt13");
 	}
@@ -774,6 +778,7 @@ lasa_fild01,103,344,3	script	Well-known Troublemaker	4_DR_KID_01,3,3,{
 		completequest 7721;// Cat showoff contest
 		getexp 120,120;
 		close2;
+		setpcblock PCBLOCK_NPC, true;
 		classchange( 4_DR_AGLIO, "Vigilante Aglio#doram12", bc_self );
 		sleep2 1000;
 		npctalk "You! You're picking a fight with another innocent passerby?", "Vigilante Aglio#doram12", bc_self;
@@ -791,6 +796,7 @@ lasa_fild01,103,344,3	script	Well-known Troublemaker	4_DR_KID_01,3,3,{
 		sleep2 2000;
 		npctalk "You're just full of it.", "Well-known Troublemaker", bc_self;
 		classchange( HIDDEN_WARP_NPC, "Vigilante Aglio#doram12", bc_self );
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	case 2:
 		mes "[Well-known Kittie]";
@@ -1911,6 +1917,7 @@ lasagna,186,231,3	script	Youngster meow#dorcon05	4_DR_KID_01,{
 }
 
 lasagna,226,196,5	script	Aram#dorcon01	4_DR_F_02,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Is this the famous Pub-Oven?", "Tos#dorcon01", bc_self;
 	sleep2 2000;
 	npctalk "Stop looking around like a hillbilly!", "", bc_self;
@@ -1954,10 +1961,12 @@ lasagna,226,196,5	script	Aram#dorcon01	4_DR_F_02,{
 	npctalk "......", "", bc_self;
 	sleep2 2000;
 	npctalk "Cheesy...", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 lasagna,228,193,5	script	Porto#dorcon01	4_DR_M_01,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Since I've come all the way here, I should try the kaluna milk!", "", bc_self;
 	sleep2 2000;
 	npctalk "Don't be so loud! Everyone is looking!", "Aram#dorcon01", bc_self;
@@ -1965,13 +1974,16 @@ lasagna,228,193,5	script	Porto#dorcon01	4_DR_M_01,{
 	npctalk "You know, you're the one who's louder.", "", bc_self;
 	sleep2 2000;
 	npctalk "Right, right.", "Tos#dorcon01", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 lasagna,229,197,5	script	Tos#dorcon01	4_DR_M_02,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Befitting to its fame, this place is packed with people.", "", bc_self;
 	sleep2 2000;
 	npctalk "Stop looking around like a hillbilly!", "Aram#dorcon01", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -1983,6 +1995,7 @@ lasagna,230,192,3	script	Perky Doram#do_hint03	4_CAT_ADV2,{
 }
 
 lasagna,235,193,3	script	Customer#dorcon02	4_DR_TORTEL,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Always right-click when it comes to information! Right-click a human, item and cat to know more about them!", "", bc_self;
 	sleep2 1000;
 	emotion ET_THROB;
@@ -1990,6 +2003,7 @@ lasagna,235,193,3	script	Customer#dorcon02	4_DR_TORTEL,{
 	sleep2 2000;
 	emotion ET_SLEEPY;
 	npctalk "We're full, so there's only one thing to do. Sleep.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -4463,7 +4477,6 @@ lasa_in01,61,91,5	script	Basilisk Prisoner#lasai	4_BASIL_SLAVE,{
 		next;
 		mes "[Enriched Foxtail]";
 		mes "MATK + 70, MSP + 50.";
-		mes "";
 		mes "[Long Foxtail]";
 		mes "Ranged physical ATK +5%, MHP + 200.";
 		next;
@@ -10090,7 +10103,7 @@ conch_in,122,61,5	script	Crewman#dorcon01	4_CAT_ADV1,{
 
 // in C_D
 conch_in,59,29,5	script	Engineer#dorcon01	4_CAT_SAILOR5,{
-	// pcblocknpc
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Are you an adventurer heading to the new world? Welcome. Have you heard about how our ship moves?", "", bc_self;
 	sleep2 2000;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : No, I have not.", bc_self;
@@ -10104,24 +10117,29 @@ conch_in,59,29,5	script	Engineer#dorcon01	4_CAT_SAILOR5,{
 	sleep2 1000;
 	emotion ET_SWEAT;
 	npctalk "Oh, wait. You're not taking me seriously, are you? It's a joke, a joke!", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 // in E_F
 conch_in,59,91,5	script	Passenger#dorcon04	4_F_ALCHE_A,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Heading to Midgard? It's my first time in Lasagna and It's great, really! So I'm just going to stay here for good. I found a place to live and signed the papers, too!", "", bc_self;
 	sleep2 2000;
 	npctalk "I'm on my way to pack up my stuff in Midgard. It's great, really.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 // in_I_J
 conch_in,97,96,5	script	Merchant#dorcon01	4_M_MERCAT2,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "You can tell from this bundle, right? I'm not a rookie adventurer. I'm a merchant who travels to different places and sells stuff.", "", bc_self;
 	sleep2 2000;
 	npctalk "I heard that Igdrasil is rare in the new world since there are none. So I'm going to try selling it over there.", "", bc_self;
 	sleep2 2000;
 	npctalk "If there is anything else that might sell, I'm going to buy some and sell them there. I'm going be a millionaire.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -10131,20 +10149,25 @@ conch_in,135,91,5	script	Passenger#dorcon01	4_CAT_ADV2,{
 	end;
 }
 conch_in,135,93,5	script	Passenger#dorcon03	4_DR_TORTEL,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Is this your first time on Con-Chliina? I was on this ship before to get to the new world once my training was over. Back then, the food was really good, so...", "", bc_self;
 	sleep2 2000;
 	npctalk "The minute I landed on the new world, I went right back to the boat. Just loved the food...", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 conch_in,137,98,3	script	Passenger#dorcon02	4_DR_F_01,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "It's my first time in the new world and I'm really excited. Did you decide what you'll do first when you get there? I want to go to the Mjolnir Mountains first!", "", bc_self;
 	sleep2 2000;
 	npctalk "The minute I saw it on [A Guide for New Adventurers to the New World], I promised myself that I would go! I heard It's got wonderful landscapes!", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 // in_P_O
 conch_in,169,70,3	script	Crewman#dorcon02	4_CAT_SAILOR2,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Midgard has been discovered, so I wonder if there's any other place out there. Place where we've never been to and not on the map.", "", bc_self;
 	sleep2 2000;
 	npctalk "You think there's such a place?", "Crewman#dorcon03", bc_self;
@@ -10154,13 +10177,16 @@ conch_in,169,70,3	script	Crewman#dorcon02	4_CAT_SAILOR2,{
 	npctalk "Do you think It's looking for us too?", "Crewman#dorcon03", bc_self;
 	sleep2 2000;
 	npctalk "Oh, my heart is beating just from the thought of it.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 conch_in,166,68,6	script	Crewman#dorcon03	4_CAT_SAILOR1,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "You know, I think First Officer Stello may be able to find another sea route to the new world That's not on the map.", "", bc_self;
 	sleep2 2000;
 	npctalk "Indeed, if it does exist then we can find it and sail on it someday!", "Crewman#dorcon02", bc_self;
 	sleep2 2000;
 	npctalk "I should stay on Con-Chliina for a long time and witness the moment when we make a discovery.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }

+ 11 - 5
npc/re/instances/DevilTower.txt

@@ -466,12 +466,14 @@ OnTimer26000:
 		mes "Do you hear that?";
 		mes "Help Fama take care of the injured soldiers.";
 		mes "Fama will give you first aid-kits, use it to help the injured people.";
-		// close2;// still attached
+		close2;
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "Officer Heim: Do you hear that?";
 		sleep2 2000;
 		npctalk "Officer Heim: Help Fama take care of the injured soldiers.";
 		sleep2 2000;
 		npctalk "Healer Fama: Okay~ You are going to help me? Come here and receive the first aid kit~!";
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	case 1:
 		mes "[Officer Heim]";
@@ -648,7 +650,7 @@ OnTouch:
 		.@lucile$ = instance_npcname("Lucile#tnm01");
 		.@heim$ = instance_npcname("Officer Heim#heim");
 		'devil_tower = 3;
-		mes "";	// todo fix me "workinprogress"
+		setpcblock PCBLOCK_NPC, true;
 		cutin "tnm_lucile01.bmp",2;
 		sleep2 1500;
 		npctalk "Lucile: I am Lucile from the Assassin Guild.", .@lucile$;
@@ -699,6 +701,7 @@ OnTouch:
 		npctalk "Officer Heim: They are so unpredictable. You know what is going on right? Back them up...", .@heim$;
 		sleep2 2500;
 		npctalk "Officer Heim: Help us take care of the demons coming down from upstairs.", .@heim$;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 }
@@ -1413,13 +1416,14 @@ OnTimer7000:
 OnTouch:
 	if ('devil_tower != 9)
 		end;
-	mes "";	// todo fix me "workinprogress"
+	setpcblock PCBLOCK_NPC, true;
 	disablenpc instance_npcname("#tnm3event01");
 	enablenpc instance_npcname("Young Girl#tnm01");
 	sleep2 4000;
 	mapannounce 'map_tnm3$, "Young Girl: Odin Preserve me! A demon!! Help me!", bc_map,0xFF00;
 	'mob_count = 12;
 	initnpctimer;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnTimer1000:
 	monster 'map_tnm3$,33,171,"Evil Shadow",2939,1, instance_npcname("Young Girl#tnm01") + "::OnMobDead";// MM_EVIL_SHADOW1
@@ -1596,7 +1600,7 @@ OnMobDead:
 OnTouch_:
 	if ('devil_tower == 11) {
 		'devil_tower = 12;
-		mes "";	// todo fix me "workinprogress"
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 1000;
 		npctalk "Evil Shadow: I thought I smelled rats sneaking in here. I was right!!";
 		sleep2 3000;
@@ -1605,6 +1609,7 @@ OnTouch_:
 		npctalk "Evil Shadow: I summon the Darkness!!";
 		disablenpc instance_npcname("Evil Shadow#tnm3mob01");
 		donpcevent instance_npcname("Evil Shadow kill#tnm3mob01") + "::OnSummon";
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -1647,7 +1652,7 @@ OnTouch_:// possibility to skip this step
 		end;
 	if ('shade == 0) {
 		'shade = 1;
-		mes "";	// todo fix me "workinprogress"
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 1000;
 		npctalk "Demonic Shade: So you are the trouble makers!";
 		sleep2 2000;
@@ -1656,6 +1661,7 @@ OnTouch_:// possibility to skip this step
 		npctalk "Demonic Shade: The eternal truth is I will turn your deaths into the Demon's life with your hearts' blood!!!";
 		disablenpc instance_npcname("Demonic Shade#mobmaster");
 		donpcevent instance_npcname("#mobmaster_kill") + "::OnSummon";
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }

+ 2 - 4
npc/re/instances/HorrorToyFactory.txt

@@ -701,8 +701,7 @@ OnStart:
 			close;
 		}
 		close2;
-		pcblockmove getcharid(3),1;// todo : not able to talk to npc
-		pcblockskill getcharid(3),1;
+		setpcblock PCBLOCK_NPC, true;
 		switch(.@num) {
 		case 1:
 			npctalk "Worker: Ah! Grandpa? He's a real good man. He oiled us everyday and cleaned the dust very often.";
@@ -760,8 +759,7 @@ OnStart:
 			'worker[.@num] = 1;
 			donpcevent instance_npcname("#fac2wpc") + "::OnStart";
 		}
-		pcblockmove getcharid(3),0;
-		pcblockskill getcharid(3),0;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 	mes "[Worker]";

+ 30 - 19
npc/re/instances/MorseCave.txt

@@ -224,7 +224,7 @@ OnTouch:
 	// note : party member can also trigger this event
 	disablenpc instance_npcname("#RZ Memorial Start");
 	'soul_name$ = strcharinfo(0);	// name displayed on soul is defined at entrance
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 500;
 	mapannounce 'map_rev$, "Morocc: Who dares to disrupt my sleep?!", bc_map,0xEBFF;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : We came to the right place!";
@@ -234,6 +234,7 @@ OnTouch:
 	specialeffect2 EF_LOCKON;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : Are these hideous monsters Morocc's lackeys?";
 	donpcevent instance_npcname("#RZ Event_1") + "::OnStart";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -291,7 +292,7 @@ OnStart:
 1@rev,104,176,0	script	#RZ Event_3	HIDDEN_WARP_NPC,4,4,{
 	end;
 OnTouch:	// note : party member can also trigger this event
-	mes "";	// fix me
+	setpcblock PCBLOCK_NPC, true;
 	disablenpc instance_npcname("#RZ Event_3");
 	enablenpc instance_npcname("Weakened Morocc#RZ1");
 	unittalk getcharid(3), "" + strcharinfo(0) + " : Finally, here we are, Morocc.";
@@ -301,7 +302,8 @@ OnTouch:	// note : party member can also trigger this event
 	unittalk getcharid(3), "" + strcharinfo(0) + " : but it doesn't matter; you'll die today!";
 	sleep2 3000;
 	specialeffect2 EF_LOCKON;
-	donpcevent instance_npcname("Weakened Morocc#RZ1") + "::OnTalk1";
+	donpcevent instance_npcname("Weakened Morroc#RZ1") + "::OnTalk1";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -392,11 +394,13 @@ OnMobDead:
 1@rev,35,119,0	script	#Battle_1RZ1	HIDDEN_WARP_NPC,2,2,{
 	end;
 OnTouch:
-	pcblockmove 0, true;
-	if ('status_battle[0] == 0) {
+	if ('status_battle[0] != 0)
+		setpcblock PCBLOCK_MOVE, true;
+	else {
 		'status_battle[0] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
-		mapannounce 'map_rev$, "Morocc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
+		setpcblock PCBLOCK_NPC, true;
+		mapannounce 'map_rev$, "Morroc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
 		sleep2 3000;
 		mapannounce 'map_rev$, "Morocc: You're trespassing! Riff-raff like you have no business in here!", bc_map,0xEBFF;
 		sleep2 3000;
@@ -406,6 +410,7 @@ OnTouch:
 		sleep2 3000;
 		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	end;
 }
@@ -415,7 +420,7 @@ OnTouch:
 1@rev,112,116,0	script	#Battle_1RZ2	HIDDEN_WARP_NPC,2,2,{
 	end;
 OnTouch:
-	pcblockmove 0, true;
+	setpcblock PCBLOCK_MOVE, true;
 	if ('status_battle[1] == 0) {
 		'status_battle[1] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
@@ -497,7 +502,7 @@ OnStart:
 			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
 				continue;
 			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
-				pcblockmove .@account_id[.@i], false;
+				setpcblock PCBLOCK_MOVE, false, .@account_id[.@i];
 		}
 		mapwarp 'map_rev$,"prontera",97,167;
 	}
@@ -573,9 +578,9 @@ OnTouch:
 		specialeffect EF_ICEWALL;
 		initnpctimer;
 	}
-	pcblockmove 0, true;
+	setpcblock PCBLOCK_MOVE, true;
 	if (.@num < 7 && 'status_battle[0] == 0) {
-		mes "";	// fix me
+		setpcblock PCBLOCK_NPC, true;
 		'status_battle[0] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
 		mapannounce 'map_rev$, "Morocc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
@@ -588,13 +593,14 @@ OnTouch:
 		sleep2 3000;
 		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	else if (.@num >= 7 && .@num < 13 && 'status_battle[1] == 0) {
 		'status_battle[1] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
 	}
 	else if (.@num >= 21 && .@num < 33 && 'status_battle[2] == 0) {
-		mes "";	// fix me
+		setpcblock PCBLOCK_NPC, true;
 		'status_battle[2] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
 		mapannounce 'map_rev$, "Morocc: This world of mine is evolving.", bc_map,0xEBFF;
@@ -605,6 +611,7 @@ OnTouch:
 		sleep2 3000;
 		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_2") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	end;
 OnTimer30000:
@@ -648,10 +655,10 @@ OnStop:
 1@rev,33,111,0	script	#RZ Debuff_1	HIDDEN_WARP_NPC,12,4,{
 	end;
 OnTouch:
-	pcblockmove 0, true;
 	.@num = atoi( replacestr( strnpcinfo(2), "RZ Debuff_", "" ) );
+	setpcblock PCBLOCK_MOVE, true;
 	if (.@num < 5 && 'status_battle[0] == 0) {
-		mes "";	// fix me
+		setpcblock PCBLOCK_NPC, true;
 		'status_battle[0] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 1") + "::OnStart";
 		mapannounce 'map_rev$, "Morocc: How do you like to be separated from each other and have your bodies and minds bound?", bc_map,0xEBFF;
@@ -664,13 +671,14 @@ OnTouch:
 		sleep2 3000;
 		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_1") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	else if (.@num >= 5 && .@num < 9 && 'status_battle[1] == 0) {
 		'status_battle[1] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 2") + "::OnStart";
 	}
 	else if (.@num >= 9 && .@num < 16 && 'status_battle[2] == 0) {
-		mes "";	// fix me
+		setpcblock PCBLOCK_NPC, true;
 		'status_battle[2] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
 		mapannounce 'map_rev$, "Morocc: This world of mine is evolving.", bc_map,0xEBFF;
@@ -681,6 +689,7 @@ OnTouch:
 		sleep2 3000;
 		mapannounce 'map_rev$, "Morocc: My soldiers, tear their bodies asunder and bring their souls to me!", bc_map,0xEBFF;
 		donpcevent instance_npcname("#morse_cave_wave_2") + "::OnStart";
+		setpcblock (PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_COMMANDS|PCBLOCK_NPCCLICK), false;
 	}
 	end;
 }
@@ -732,7 +741,7 @@ OnTouch:
 1@rev,34,47,0	script	#Battle_2RZ1	HIDDEN_WARP_NPC,3,3,{
 	end;
 OnTouch:
-	pcblockmove 0, true;
+	setpcblock PCBLOCK_MOVE, true;
 	if ('status_battle[2] == 0) {
 		'status_battle[2] = 1;
 		donpcevent instance_npcname("#RZ Memorial Effect 3") + "::OnStart";
@@ -832,7 +841,7 @@ OnStart:
 			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
 				continue;
 			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
-				pcblockmove .@account_id[.@i], false;
+				setpcblock PCBLOCK_MOVE, false, .@account_id[.@i];
 		}
 		mapwarp 'map_rev$,"prontera",97,167;
 	}
@@ -849,7 +858,7 @@ OnStart:
 			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
 				continue;
 			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
-				pcblockmove .@account_id[.@i], false;
+				setpcblock PCBLOCK_MOVE, false, .@account_id[.@i];
 		}
 		// enablenpc instance_npcname("#RZ Debuff Recovery_1");
 		// enablenpc instance_npcname("#RZ Debuff Recovery_2");
@@ -919,7 +928,8 @@ OnStop:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#Battle_3RZ1");
-	mapannounce 'map_rev$, "Morocc: I can't let you go unscathed!", bc_map,0xEBFF;
+	setpcblock PCBLOCK_NPC, true;
+	mapannounce 'map_rev$, "Morroc: I can't let you go unscathed!", bc_map,0xEBFF;
 	sleep2 3000;
 	mapannounce 'map_rev$, "Morocc: Hah hah, my Necromancer. I'll leave them to you.", bc_map,0xEBFF;
 	sleep2 3000;
@@ -942,6 +952,7 @@ OnTouch:
 	sleep2 3000;
 	disablenpc .@necromancer$;
 	donpcevent instance_npcname("#morse_cave_3") + "::OnStart";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -1162,7 +1173,7 @@ OnInstanceInit:
 			if (isloggedin(.@account_id[.@i],.@char_id[.@i]) == false)
 				continue;
 			if (strcharinfo(3,.@char_id[.@i]) == 'map_rev$)
-				pcblockmove .@account_id[.@i], false;
+				setpcblock PCBLOCK_MOVE, false, .@account_id[.@i];
 		}
 	}
 	end;

+ 18 - 9
npc/re/instances/SarahAndFenrir.txt

@@ -500,7 +500,7 @@ dali02,93,146,6	script	Assistant Professor#a1	4_M_REPAIR,{
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_1");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	specialeffect2 EF_HIT2;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : Huh? Somebody there? Hello~ You must be a traveler.";
 	sleep2 3000;
@@ -525,6 +525,7 @@ OnTouch:
 	npctalk "Fenrith Fenrir: Buy me some time while I cast magic! I will handle this!", 'fenrir_1$;
 	donpcevent instance_npcname("#glast_event_1") + "::OnBar";
 	donpcevent instance_npcname("#glast_event_1") + "::OnEvent";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnBar:
 	progressbar_npc "000000",10, 'fenrir_1$;
@@ -563,7 +564,7 @@ OnMobDead:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_3");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "fenrir_a.bmp",2;
 	npctalk "Fenrith Fenrir: By the way, I know it was sudden but thank you for helping.", 'fenrir_1$;
 	sleep2 2000;
@@ -593,6 +594,7 @@ OnTouch:
 	enablenpc instance_npcname("#glast_move_01");
 	enablenpc instance_npcname("#glast_event_5");
 	enablenpc 'fenrir_2$;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -705,7 +707,7 @@ OnTouch:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_5");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "fenrir_a.bmp",2;
 	npctalk "Fenrith Fenrir: You are still in Glast Heim? Why aren't you leaving this dangerous place?", 'fenrir_2$;
 	sleep2 2000;
@@ -741,6 +743,7 @@ OnTouch:
 	enablenpc 'fenrir_3$;
 	enablenpc instance_npcname("#glast_event_7");
 	disablenpc instance_npcname("#glast_move_01");	// officially player can be stucked in entrance
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -753,12 +756,13 @@ OnTouch:
 	if (is_party_leader() == false)
 		npctalk "Fenrith Fenrir: I would like your party leader to come and help me!", 'fenrir_3$;
 	else {
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		disablenpc instance_npcname("#glast_event_7");
 		npctalk "Fenrith Fenrir: You came! I was waiting!", 'fenrir_3$;
 		sleep2 2000;
 		npctalk "Fenrith Fenrir: We don't have much time! We have to go search for it now! Let's go in!", 'fenrir_3$;
 		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
 		if ('skip_left_part == 0) {// 5 mins have passed?
 			donpcevent instance_npcname("#fenrir_left_final_2") + "::OnStop";
 			disablenpc 'fenrir_3$;
@@ -777,7 +781,7 @@ OnTouch:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_9");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "fenrir_a.bmp",2;
 	npctalk "Fenrith Fenrir: The sword of Baldur, Sentinel Breeze... even after 1000 years..", 'fenrir_4$;
 	sleep2 3000;
@@ -820,6 +824,7 @@ OnTouch:
 	monster 'map_glast$,49,363, "Gigantes#semi1", 3191,1, instance_npcname("#fenrir_left_final_1") + "::OnMobDead";// MM_M_GIGAN1
 	monster 'map_glast$,41,363, "Gigantes#semi2", 3192,1, instance_npcname("#fenrir_left_final_1") + "::OnMobDead";// MM_M_GIGAN2
 	donpcevent instance_npcname("#glast_event_9") + "::OnEvent";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnEvent:
 	sleep 15000;
@@ -1028,7 +1033,7 @@ OnTouch:
 	disablenpc instance_npcname("#glast_event_13");
 	//for ( .@i = 1; .@i < 8; .@i++ )
 	//	disablenpc instance_npcname("#glast_event_warp_" + .@i);
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "fenrir_a.bmp",2;
 	sleep2 1000;
 	npctalk "Fenrith Fenrir: I need to go to Glast Heim Castle to retrieve the sword of Baldur.", 'fenrir_5$;
@@ -1045,6 +1050,7 @@ OnTouch:
 	npctalk "Fenrith Fenrir: Then I will go on ahead! Warp!", 'fenrir_5$;
 	cutin "",255;
 	donpcevent instance_npcname("#glast_event_13") + "::OnBar";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnBar:
 	progressbar_npc "000000",3, 'fenrir_5$;
@@ -1117,7 +1123,7 @@ OnTouch:
 	disablenpc instance_npcname("#glast_move_03");
 	disablenpc instance_npcname("#glast_event_15");
 	donpcevent instance_npcname("#fenrir_boss_final_2") + "::OnStop";
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 1000;
 	npctalk "Fenrith Fenrir: I was waiting. Thank you for not being late.", 'fenrir_6$;
 	sleep2 3000;
@@ -1128,6 +1134,7 @@ OnTouch:
 	enablenpc instance_npcname("#glast_event_18");
 	enablenpc instance_npcname("Sarah Irene#glast_17");
 	enablenpc 'fenrir_7$;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -1138,7 +1145,7 @@ OnTouch:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_18");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	cutin "sarah_hero3.bmp",0;
 	sleep2 1000;
 	npctalk "Sarah Irene: It seemed like forever waiting for you~ Fenrith Fenrir.", 'sarah_17$;
@@ -1179,6 +1186,7 @@ OnTouch:
 	donpcevent instance_npcname("#glast_event_19") + "::OnEvent";
 	monster 'map_glast$,200,336, "Sarah Irene#1",3190,1, instance_npcname("#fenrir_boss_final_1") + "::OnBossDead";	// MM_SARAH
 	'boss_id = $@mobid[0];
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnBar:
 	progressbar_npc "000000",3, 'fenrir_7$;
@@ -1628,7 +1636,7 @@ OnMobDead:
 	end;
 OnTouch:
 	disablenpc instance_npcname("#glast_event_24");
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 1500;
 	cutin "fenrir_b.bmp",2;
 	npctalk "Fenrith Fenrir: Hehe.. You are certainly skilled but I think you have underestimated me, Valkyrie.", 'fenrir_10$;
@@ -1648,6 +1656,7 @@ OnTouch:
 	cutin "",255;
 	disablenpc 'fenrir_10$;
 	donpcevent instance_npcname("#sarah_wrath") + "::OnStart";
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 

+ 0 - 2
npc/re/merchants/nightmare_biolab.txt

@@ -173,8 +173,6 @@ lighthalzen,321,218,4	script	Ohno Tohiro#1	4_M_RASWORD,{
 			if (countitem(7347) < 10) {
 				mes "[Ohno Tohiro]";
 				mes "It seems 10 research charts are missing now.";
-				mes "";
-				mes "";
 				mes "Maybe you didn't pick them up from the warehouse.";
 				next;
 				mes "[Ohno Tohiro]";

+ 0 - 2
npc/re/quests/quests_15_2.txt

@@ -20,9 +20,7 @@ function	script	F_time_limit_recorder	{
 function	script	F_erase_datas_recorder	{
 	if (callfunc("F_time_limit_recorder") == 1)
 		return;
-	mes "";
 	mes "Your whole body suddenly becomes heavy and time seems to be passing faster around you.";
-	mes "";
 	for ( .@quest_id = 5341; .@quest_id < 5371; .@quest_id++ ) {
 		if (isbegin_quest(.@quest_id) > 0)
 			erasequest .@quest_id;

+ 46 - 11
npc/re/quests/quests_16_1.txt

@@ -184,9 +184,11 @@ prt_cas,215,146,0	script	#ep16_evt_01_on	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (banquet_main_quest == 1) {
+		setpcblock PCBLOCK_NPC, true;
 		classchange( 4_M_RUSMAN1, "Chamberlain Bell#ep16_0_0", bc_self );
 		sleep2 2000;
 		npctalk "I've been waiting for you. Sir " + strcharinfo(0) + "...", "Chamberlain Bell#ep16_0_0", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -471,7 +473,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 	case 11:
 	case 12:
 	case 13:
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You are back already?", "", bc_self;
 		sleep2 1000;
 		classchange( 4_M_JOB_WIZARD, "Court Mage Nillem#ep16_1", bc_self );
@@ -494,6 +496,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 		sleep2 1000;
 		npctalk "One!", "Court Mage Nillem#ep16_1", bc_self;
 		sleep2 1000;
+		setpcblock PCBLOCK_NPC, false;
 		warp "prt_lib",89,44;
 		end;
 	case 14:
@@ -580,11 +583,13 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 		mes "Court Mage Nillem opened the door and left right away.";
 		mes "Saying, 'Where are you?' " + strcharinfo(0) + " The magician must be looking for you.";
 		close2;
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 50;
 		classchange( 4_M_JOB_WIZARD, "Court Mage Nillem#ep16_1", bc_self );
 		npctalk "There you are!", "Court Mage Nillem#ep16_1", bc_self;
 		sleep2 50;
 		npctalk "What an impeccable timing...", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	case 19:
 	case 20:
@@ -604,6 +609,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 			mes "Wait a second.";
 			mes "I have just sent a message. The magician will arrive here soon.";
 			close2;
+			setpcblock PCBLOCK_NPC, true;
 			sleep2 1000;
 			classchange( 4_M_JOB_WIZARD, "Court Mage Nillem#ep16_1", bc_self );
 			if (banquet_main_quest < 25) {
@@ -633,6 +639,7 @@ prt_cas_q,26,30,3	script	Chamberlain Bell#ep16_m	4_M_RUSMAN1,{
 					break;
 				}
 			}
+			setpcblock PCBLOCK_NPC, false;
 			end;
 		case 2:
 			mes "[Belle]";
@@ -1371,7 +1378,7 @@ prt_cas,183,164,0	script	#ep16_evt_7689	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (banquet_main_quest == 5) {
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		unittalk getcharid(3), "" + strcharinfo(0) + " : ...Hum? Who's coming?", bc_self;
 		sleep2 2000;
 		classchange( 4_LGTSCIENCE, "#ep16_7689_01", bc_self );
@@ -1415,6 +1422,7 @@ OnTouch:
 		}
 		sleep2 2000;
 		classchange( HIDDEN_WARP_NPC, "Skia Nerius#ep16_7689", bc_self );
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -1501,10 +1509,12 @@ prt_cas,27,43,0	script	#ep16_evt_7690	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (banquet_main_quest == 6) {
+		setpcblock PCBLOCK_NPC, true;
 		classchange( 4_EP16_NIHIL, "Unstable Nyhill#ep16_76", bc_self );
 		classchange( 4_EP16_SKIA, "Skia Nerius#ep16_7690", bc_self );
 		sleep2 1000;
 		npctalk "Are you OK?", "Skia Nerius#ep16_7690", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -1826,10 +1836,12 @@ OnTouch:
 		classchange( 4_EP16_GRANZ, "Kronecker G. Heine#ep16_1", bc_self );
 		classchange( 4_EP16_NIHIL, "Nyhill M. Heine#ep16_li", bc_self );
 		classchange( 1_M_JOBTESTER, "Ian Walther#ep16_lib01", bc_self );
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 2000;
 		npctalk "You are here at last.", "Ian Walther#ep16_lib01", bc_self;
 		sleep2 3000;
 		npctalk "I have something to tell you, special guest.", "Ian Walther#ep16_lib01", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 	}
 	if (banquet_main_quest == 24)
 		classchange( 4_EP16_GRANZ, "Kronecker G. Heine#ep16_1", bc_self );
@@ -2176,6 +2188,7 @@ prt_lib,85,82,5	script	Ian Walther#ep16_lib01	HIDDEN_WARP_NPC,{
 		erasequest 7693;// Surprise Attack
 		banquet_main_quest = 10;
 		close2;
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "Magician! Activate the gate.", "Ian Walther#ep16_lib01", bc_self;
 		sleep2 2000;
 		npctalk "Oh, yes. The gate has been activated since others used it earlier.", "Mage Nillem#ep16_warp", bc_self;
@@ -2189,6 +2202,7 @@ prt_lib,85,82,5	script	Ian Walther#ep16_lib01	HIDDEN_WARP_NPC,{
 		sleep2 2000;
 		classchange( HIDDEN_WARP_NPC, "Kronecker G. Heine#ep16_2", bc_self );
 		classchange( HIDDEN_WARP_NPC, "Nyhill M. Heine#ep16_li", bc_self );
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -3917,7 +3931,8 @@ prt_cas_q,20,139,3	script	Spica Nerius#ep16_room01_a	4_EP16_SPICA,{
 		cutin "ep16_crux_findel02",2;
 		mes "[Crux]";
 		mes "See you later.";
-		// close2;// player still talking
+		close2;
+		setpcblock PCBLOCK_NPC, true;
 		cutin "",255;
 		npctalk "Why are you letting the guest out?", "", bc_self;
 		sleep2 1000;
@@ -3930,6 +3945,7 @@ prt_cas_q,20,139,3	script	Spica Nerius#ep16_room01_a	4_EP16_SPICA,{
 		npctalk "I don't mean that!", "", bc_self;
 		sleep2 3000;
 		unittalk getcharid(3), "" + strcharinfo(0) + " : (Oh my, I'd better get out now.)", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 
@@ -5679,7 +5695,7 @@ OnTouch:
 	if (banquet_main_quest < 17)
 		classchange( HIDDEN_WARP_NPC, "Peter Heine#ep16_02", bc_self );	// custom - officially hidden from #ep16_heine_evt01. However the npc is not hidden when the player is not in npc visual range
 	if (banquet_heine_quest == 0 && banquet_main_quest == 2) {
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You are in no place to say such a thing!", "Kronecker G. Heine#ep16", bc_self;
 		sleep2 3000;
 		npctalk "I'll go back to the head house. Please give me your permission.", "Nyhill M. Heine#ep16_01", bc_self;
@@ -5707,6 +5723,7 @@ OnTouch:
 			banquet_heine_quest = 1;
 			setquest 7683;// Visit the Heines
 		}
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -5718,7 +5735,7 @@ prt_cas_q,141,36,0	script	#ep16_evt_7686	HIDDEN_WARP_NPC,1,1,{
 	end;
 OnTouch:
 	if (banquet_heine_quest >= 1 && isbegin_quest(7686) == 0) {
-		mes "";
+		setpcblock PCBLOCK_NPC, true;
 		classchange( 4_EP16_NIHIL, "Nyhill#ep16_7686", bc_self );
 		classchange( 4_EP16_SKIA, "Skia#ep16_7686", bc_self );
 		npctalk "Are you the shadow princess whom people talk about?", "Nyhill#ep16_7686", bc_self;
@@ -5774,6 +5791,7 @@ OnTouch:
 			setquest 7686;// Nyhill and Skia
 			completequest 7686;// Nyhill and Skia
 		}
+		setpcblock PCBLOCK_NPC, false;
 	}
 	end;
 }
@@ -12715,10 +12733,11 @@ prt_cas,89,244,7	script	Banquet Hall Guest#6	4_M_NOV_HUNT,{
 }
 
 prt_cas,91,237,3	script	Ekinasia#ep16_etc01	1_F_SIGNZISK,{
-	// pcblocknpc
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "It's been a while since the last time a royal banquet like this was held.", "Ekinasia#ep16_etc01", bc_self;
 	sleep2 3000;
 	npctalk "We need to blow off some steam like this from time to time.", "Ekinasia#ep16_etc01", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -12741,12 +12760,13 @@ prt_cas,78,255,3	script	Mayssel#ep16_etc05	4_F_MAYSEL,{
 }
 
 prt_cas,78,252,2	script	Verkhasel#ep_etc06	4_M_GUILLOTINE,{
-	// pcblocknpc
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "I want to go back now.", "Verkhasel#ep_etc06", bc_self;
 	sleep2 3000;
 	npctalk "...You can't.", "Mayssel#ep16_etc05", bc_self;
 	sleep2 3000;
 	npctalk "You made that very clear, hahahaha!", "Vicente#ep16_etc07", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -13370,7 +13390,7 @@ prt_cas,379,124,3	script	Glamorous Girl#pop	4_F_ARUNA_POP,{
 }
 
 prt_cas,368,125,3	script	Dumk#ep16_etc03	4_M_SHADOWCHASER,{
-	mes "";
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Where is he?", "Dumk#ep16_etc03", bc_self;
 	sleep2 3000;
 	npctalk "I don't know.", "Kid#ep16_etc04", bc_self;
@@ -13387,6 +13407,7 @@ prt_cas,368,125,3	script	Dumk#ep16_etc03	4_M_SHADOWCHASER,{
 	sleep2 1000;
 	unittalk getcharid(3), "" + strcharinfo(0) + " : (Shaking the head from side to side)", bc_self;
 	emotion ET_STARE_ABOUT, playerattached();
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 prt_cas,367,123,7	duplicate(Dumk#ep16_etc03)	Kid#ep16_etc04	4_M_ACROSS
@@ -13418,9 +13439,11 @@ prt_cas,161,168,5	script	Royal Guardian Knight#0_left	4_M_CRU,{
 prt_cas,152,163,0	script	prt_cas_1#0_left	WARPNPC,1,1,{
 OnTouch:
 	if (banquet_main_quest == 0) {
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "That way is a royal villa for VIPs. Outsiders cannot access the place.", "Royal Guardian Knight#0_left", bc_self;
 		sleep2 3000;
 		npctalk "If you are invited, a servant should be there to greet you. Please be guided officially.", "Royal Guardian Knight#0_left", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 	warp "prt_cas_q",150,8;
@@ -13434,9 +13457,11 @@ prt_cas,270,168,3	duplicate(Royal Guardian Knight#0_left)	Royal Guardian Knight#
 prt_cas,278,163,0	script	prt_cas_2#0_right	WARPNPC,1,1,{
 OnTouch:
 	if (banquet_main_quest == 0) {
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "That way is a royal villa for VIPs. Outsiders cannot access the place.", "Royal Guardian Knight#0_right", bc_self;
 		sleep2 3000;
 		npctalk "If you are invited, a servant should be there to greet you. Please be guided officially.", "Royal Guardian Knight#0_right", bc_self;
+		setpcblock PCBLOCK_NPC, false;
 		end;
 	}
 	warp "prt_cas_q",135,119;
@@ -13554,10 +13579,11 @@ prt_cas,180,264,3	script	Guardian Knight#ep16_pr_1	4_M_CRU,{
 }
 
 prt_cas,180,251,3	script	Guardian Knight#ep16_pr_2	4_M_CRU,{
-	// pcblocknpctalk
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "...On duty. No problem...", "Guardian Knight#ep16_pr_2", bc_self;
 	sleep2 2000;
 	npctalk "I want to go home now.", "Guardian Knight#ep16_pr_2", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -13566,9 +13592,10 @@ OnTouch_:
 	if (banquet_main_quest >= 2)
 		warp "prt_pri00",54,134;
 	else {
-		// pcblocknpctalk
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You shouldn't enter the place like that.", "Guardian Knight#ep16_pr_1", bc_self;
 		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
 		warp "prt_cas",182,258;
 	}
 	end;
@@ -14867,6 +14894,7 @@ OnTouch_:
 		break;
 	}
 	unittalk getcharid(3), "" + strcharinfo(0) + " : ?";
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 1000;
 	specialeffect EF_POISONSMOKE;
 	getmapxy .@map$, .@x, .@y, BL_NPC;
@@ -14875,6 +14903,7 @@ OnTouch_:
 	monster "prt_q",.@x,.@y,"Fly",1035,1, strnpcinfo(0) + "::OnMyMobDead";// HUNTER_FLY
 	setd ".mob_count_" + strnpcinfo(2), 1;
 	hideonnpc strnpcinfo(0);
+	setpcblock PCBLOCK_NPC, false;
 	end;
 OnMyMobDead:
 	.@hidden_name$ = strnpcinfo(2);
@@ -15766,15 +15795,19 @@ prt_pri00,58,128,4	script	Overwatcher Terketh#ep1	4_M_JOB_HUNTER,{
 	mes "What do you want?";
 	next;
 	if (select( "To the Past Memories of the Royal Family", "To the oudside" ) == 2) {
+		setpcblock PCBLOCK_NPC, true;
 		sleep2 2000;
 		npctalk "Well, sure.", "", bc_self;
 		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
 		warp "prt_pri00",53,128;
 		end;
 	}
+	setpcblock PCBLOCK_NPC, true;
 	sleep2 2000;
 	npctalk "Take care. Do not snoop around too much!", "", bc_self;
 	sleep2 2000;
+	setpcblock PCBLOCK_NPC, false;
 	warp "prt_lib",9,28;
 	end;
 }
@@ -15934,7 +15967,8 @@ prt_prison,243,265,6	script	Prisoner 243AD265#EP161	4_M_DRAKE,{
 			mes "Now that the fellow has become freer from death, I wonder what he's up to. I wonder what kind of memory he would write in his next letter.";
 			next;
 			mes "The prisoner started singing as if he was reminiscing about something.";
-			// close2;// still talk to npc
+			close2;
+			setpcblock PCBLOCK_NPC, true;
 			sleep2 30;
 			npctalk "Prisoner 243AD265: We're coming home~~ We're coming home~~", "", bc_self;
 			sleep2 2000;
@@ -15968,6 +16002,7 @@ prt_prison,243,265,6	script	Prisoner 243AD265#EP161	4_M_DRAKE,{
 			sleep2 2000;
 			emotion ET_HNG;
 			npctalk "Prisoner 243AD265: It is far from amusing when there is no fellow sailor around.", "", bc_self;
+			setpcblock PCBLOCK_NPC, false;
 			end;
 		case 2:
 			erasequest 5426;// [Stand by]To My Beloved Fellow

+ 18 - 8
npc/re/quests/quests_rockridge.txt

@@ -174,11 +174,12 @@ harboro1,80,218,5	script	Costello#harboro1	10210,{
 		end;
 	}
 	if (rock_main_quest == 1) {
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		unittalk getcharid(3), "" + strcharinfo(0) + " : Mr. Costello?", bc_self;
 		sleep2 1000;
 		npctalk "*Gasp*", "", bc_self;;
 		sleep2 1000;
+		setpcblock PCBLOCK_NPC, false;
 		mes "[Costello]";
 		mes "*Ahem* Yes, this is him.";
 		mes "I'm Costello, mayor of Rock Ridge.";
@@ -550,7 +551,7 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		close;
 	}
 	if (rock_main_quest == 6) {
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "I say we turn him against the rest of his gang.", "Ivoka Skudi#rr03", bc_self;
 		sleep2 2000;
 		npctalk "Don't you think regular torture or threats would work?", "", bc_self;
@@ -559,6 +560,7 @@ har_in01,20,30,5	script	Wyatt Warp#har_in01	10211,{
 		sleep2 1000;
 		npctalk "I know. There's Albert.", "", bc_self;
 		sleep2 2000;
+		setpcblock PCBLOCK_NPC, false;
 		mes "[Wyatt Warp]";
 		mes "Welcome.";
 		mes "*Chuckle* You're so useful. Just having you standing next to us works like a charm.";
@@ -974,15 +976,16 @@ OnTouch:
 
 // Prison
 har_in01,100,14,3	script	Vigilante#srdg01	10220,{
-	mes "";// todo fix me
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "You'd better not do anything stupid.", "", bc_self;
 	sleep2 1000;
 	npctalk "I'm watching you like a hawk.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 har_in01,81,30,3	script	Harold#srdg01	4_TOWER_09,{
-	mes "";// todo fix me
+	setpcblock PCBLOCK_NPC, true;
 	emotion ET_OHNO;
 	npctalk "I can't believe you. Ugh!", "", bc_self;
 	sleep2 1000;
@@ -995,15 +998,17 @@ har_in01,81,30,3	script	Harold#srdg01	4_TOWER_09,{
 	npctalk "I can't help it when the food is so delicious.", "Egring#srdg01", bc_self;
 	sleep2 1000;
 	npctalk "Well, that I agree.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
 har_in01,78,25,5	script	Egring#srdg01	4_DR_TORTEL,{
-	mes "";// todo fix me
+	setpcblock PCBLOCK_NPC, true;
 	emotion ET_THROB;
 	npctalk "When are we eating today? What are we having? Beans?", "", bc_self;
 	sleep2 1000;
 	npctalk "It hasn't been even thirty minutes since our last meal!", "Harold#srdg01", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 
@@ -1018,10 +1023,11 @@ har_in01,89,26,5	script	Johnny James#har_in01	10213,{
 	if (rock_main_quest == 8) {
 		.@player_name$ = strcharinfo(0);
 
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		npctalk "You sneaky bastards, how dare you show up again? Go to hell!", "", bc_self;
 		sleep2 2000;
 		classchange( 10212, "Ivoka Skudi#har02", bc_self );
+		setpcblock PCBLOCK_NPC, false;
 		npctalk "Ah, you'd better show some respect to our future mayor.", "Ivoka Skudi#har02", bc_self;
 		mes "[Ivoka Skudi]";
 		mes "I told you I can take care of him.";
@@ -1224,7 +1230,7 @@ rockrdg1,164,306,3	duplicate(Johnny James#revt04)	Cactus Gunslinger#revt03	HIDDE
 
 rockrdg1,156,312,3	script	Unmoving Freight Train#	4_ENERGY_RED,{
 	if (rock_main_quest == 5) {
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		unittalk getcharid(3), "" + strcharinfo(0) + " : I think this is the place, but maybe I came too early.", bc_self;
 		sleep2 3000;
 		classchange( 10213, "Johnny James#revt04", bc_self );
@@ -1336,6 +1342,7 @@ rockrdg1,156,312,3	script	Unmoving Freight Train#	4_ENERGY_RED,{
 		erasequest 7795;
 		setquest 7796;// Unexpected Arrest
 		rock_main_quest = 6;
+		setpcblock PCBLOCK_NPC, false;
 		close;
 	}
 	mes "It's worthless and abandoned.";
@@ -3928,9 +3935,10 @@ harboro2,164,80,5	script	Demon#srdg01	4_M_NFMAN,{
 		.@account_id = getcharid(3);
 		.@player_name$ = strcharinfo(0);
 
-		mes "";// todo fix me
+		setpcblock PCBLOCK_NPC, true;
 		donpcevent "Traces of Fire#srdg01::OnEffect";
 		sleep2 1500;
+		setpcblock PCBLOCK_NPC, false;
 		mes "[Demon]";
 		mes "Alright, this should do. You know what I need, right? Are you sure you could sneak in? Maybe I should go.";
 		next;
@@ -5758,9 +5766,11 @@ harboro1,235,255,6	script	Wealthy Merchant's Came#6	4_DST_CAMEL,{
 }
 
 harboro1,210,219,5	script	Priest#srdg01	4_M_MINISTER,{
+	setpcblock PCBLOCK_NPC, true;
 	npctalk "Are you anguished or sad? Let me help you.", "", bc_self;
 	sleep2 1500;
 	npctalk "Every one of us is born to be loved.", "", bc_self;
+	setpcblock PCBLOCK_NPC, false;
 	end;
 }
 

+ 9 - 3
src/map/clif.cpp

@@ -11516,8 +11516,10 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd)
 		return;
 	}
 
-	if ( (!sd->npc_id && pc_istrading(sd)) || sd->chatID || (sd->state.block_action & PCBLOCK_USEITEM) )
+	if ( (!sd->npc_id && pc_istrading(sd)) || sd->chatID || (sd->state.block_action & PCBLOCK_USEITEM) ) {
+		clif_msg(sd, WORK_IN_PROGRESS);
 		return;
+	}
 
 	//Whether the item is used or not is irrelevant, the char ain't idle. [Skotlex]
 	if (battle_config.idletime_option&IDLE_USEITEM)
@@ -12230,8 +12232,10 @@ void clif_parse_skill_toid( struct map_session_data* sd, uint16 skill_id, uint16
 	if (inf&INF_GROUND_SKILL || !inf)
 		return; //Using a ground/passive skill on a target? WRONG.
 
-	if (sd->state.block_action & PCBLOCK_SKILL)
+	if (sd->state.block_action & PCBLOCK_SKILL) {
+		clif_msg(sd, WORK_IN_PROGRESS);
 		return;
+	}
 
 	if( SKILL_CHK_HOMUN(skill_id) ) {
 		clif_parse_UseSkillToId_homun(sd->hd, sd, tick, skill_id, skill_lv, target_id);
@@ -12346,8 +12350,10 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
 	if( !(skill_get_inf(skill_id)&INF_GROUND_SKILL) )
 		return; //Using a target skill on the ground? WRONG.
 
-	if (sd->state.block_action & PCBLOCK_SKILL)
+	if (sd->state.block_action & PCBLOCK_SKILL) {
+		clif_msg(sd, WORK_IN_PROGRESS);
 		return;
+	}
 
 	if( SKILL_CHK_HOMUN(skill_id) ) {
 		clif_parse_UseSkillToPos_homun(sd->hd, sd, tick, skill_id, skill_lv, x, y, skillmoreinfo);

+ 1 - 0
src/map/script.hpp

@@ -1911,6 +1911,7 @@ enum e_pcblock_action_flag : uint16 {
 	PCBLOCK_SITSTAND = 0x040,
 	PCBLOCK_COMMANDS = 0x080,
 	PCBLOCK_NPCCLICK = 0x100,
+	PCBLOCK_NPC      = 0x18D,
 	PCBLOCK_EMOTION  = 0x200,
 	PCBLOCK_ALL      = 0x3FF,
 };

+ 1 - 0
src/map/script_constants.hpp

@@ -7220,6 +7220,7 @@
 	export_constant(PCBLOCK_SITSTAND);
 	export_constant(PCBLOCK_COMMANDS);
 	export_constant(PCBLOCK_NPCCLICK);
+	export_constant(PCBLOCK_NPC);
 	export_constant(PCBLOCK_EMOTION);
 	export_constant(PCBLOCK_ALL);