Browse Source

* Script updates.
- Added Renewal features to PVP script and removed duplicate warps.
- Added "Acolyte Warpers" script (Keiki and Isalei), disabled since it may be an event script.
- Added "Mergician" NPC, but it currently doesn't function and is disabled.
- Moved "Stone Change" script from merchants/ to other/.
- Follow-up 8acde7e: further bug fixes.

Signed-off-by: Euphy <euphy@rathena.org>

Euphy 11 years ago
parent
commit
02d67498b1

+ 1 - 1
doc/script_commands.txt

@@ -926,7 +926,7 @@ This special label triggers when a player kills another player. The variable
 OnNPCKillEvent:
 
 This special label triggers when a player kills a monster. The variable
-'killedrid' is set to the Class of the monster killed.
+'killedrid' is set to the Class (mob ID) of the monster killed.
 
 OnPCLoadMapEvent:
 

+ 139 - 0
npc/other/acolyte_warp.txt

@@ -0,0 +1,139 @@
+//===== rAthena Script =======================================
+//= Acolyte Warpers
+//===== By: ==================================================
+//= Euphy
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: ========================================= 
+//= [Official Conversion]
+//= Warpers to various towns.
+//===== Additional Comments: =================================
+//= 1.0 First version. [Euphy]
+//=     Unsure if this is on kRO, so disabled for now.
+//============================================================
+
+prontera,98,121,4	script	Acolyte#Prtclear	90,{
+	mes "[Keiki]";
+	mes "Hello there, adventurer.";
+	mes "I've been studying magic from all over Rune-Midgard to upgrade what I believe to be one of the greatest skills available to the acolyte class.";
+	next;
+	mes "[Keiki]";
+	mes "I am the one and only Acolyte that has attained the Level 10 Warp Portal skill!";
+	emotion e_dots,1;
+	next;
+	mes "[Keiki]";
+	mes "That's right! And...";
+	mes "I promise you that I don't forget locations that I have already memorized.";
+	mes "One day I will level up my skills to warp to wherever I please~";
+	next;
+	mes "[Keiki]";
+	mes "I am willing to warp you to the many locations that I have memorized for a small fee.";
+	mes "Would you like to use this service?";
+	next;
+	switch(select("Yes:No")) {
+	case 1:
+		mes "[Keiki]";
+		mes "Where would you like to go to?";
+		mes "I wish you goodluck on your journey.";
+		next;
+
+		setarray .@towns$[0], "Izlude", "Geffen", "Payon", "Morroc", "Alberta", "Al De Baran", "Comodo", "Umbala", "Juno";
+		setarray .@maps$[0],  "izlude", "geffen", "payon", "morocc", "alberta",   "aldebaran", "comodo", "umbala", "yuno";
+		setarray .@cost[0],        600,     1200,    1200,     1200,      1800,          2200,     2200,     2200,   1800;
+
+		set .@size, getarraysize(.@towns$);
+		for(set .@i,0; .@i<.@size; set .@i,.@i+1)
+			set .@menu$, .@menu$+.@towns$[.@i]+" -> "+.@cost[.@i]+"z:";
+		set .@i, select(.@menu$+"Cancel")-1;
+		if (.@i == .@size)
+			close;
+		if (Zeny < .@cost[.@i]) {
+			mes "[Keiki]";
+			mes "I'm sorry, but you don't have";
+			mes "enough zeny for the Teleport";
+			mes "Service. The fee to teleport";
+			mes "to "+.@towns$[.@i]+" is "+.@cost[.@i]+" zeny.";
+			close;
+		}
+		specialeffect2 EF_READYPORTAL;
+		specialeffect2 EF_TELEPORTATION;
+		specialeffect2 EF_PORTAL;
+		next;
+		set Zeny, Zeny - .@cost[.@i];
+		switch(.@i) {
+			case 0: if (checkre(0)) warp "izlude",128,98; else warp "izlude",91,105; break;
+			case 1: warp "geffen",120,39; break;
+			case 2: warp "payon",161,58; break;
+			case 3: warp "morocc",156,46; break;
+			case 4: warp "alberta",117,56; break;
+			case 5: warp "aldebaran",168,112; break;
+			case 6: warp "comodo",209,143; break;
+			case 7: warp "umbala",100,154; break;
+			case 8: warp "yuno",158,125; break;
+		}
+		close;
+	case 2:
+		close;
+	}
+}
+
+yuno,142,184,6	script	Acolyte#Junoclear	90,{
+	mes "[Isalei]";
+	mes "Hello, adventurer.";
+	mes "My companion Keiki and I have discovered a way to increase our warp portal abilities.";
+	next;
+	mes "[Isalei]";
+	mes "Though I have not mastered up to the level that she has, I have been able to attain Level 5.";
+	emotion e_dots,1;
+	next;
+	mes "[Isalei]";
+	mes "Maybe one day I can level up my skills enough so that I can use Warp portal to more saved locations.";
+	next;
+	mes "[Isalei]";
+	mes "I am willing to warp you to the many locations that I have memorized for a small fee.";
+	mes "Would you like to use this service?";
+	next;
+	switch(select("Yes:No")) {
+	case 1:
+		mes "[Isalei]";
+		mes "Where would you like to go to?";
+		mes "I wish you goodluck on your journey.";
+		next;
+
+		setarray .@towns$[0], "Einbroch", "Lighthalzen", "Hugel", "Rachel", "Prontera";
+		setarray .@maps$[0],  "einbroch", "lighthalzen", "hugel", "rachel", "prontera";
+		setarray .@cost[0],         2200,          2200,    2200,     2200,       1800;
+
+		set .@size, getarraysize(.@towns$);
+		for(set .@i,0; .@i<.@size; set .@i,.@i+1)
+			set .@menu$, .@menu$+.@towns$[.@i]+" -> "+.@cost[.@i]+"z:";
+		set .@i, select(.@menu$+"Cancel")-1;
+		if (.@i == .@size)
+			close;
+		if (Zeny < .@cost[.@i]) {
+				mes "[Isalei]";
+			mes "I'm sorry, but you don't have";
+			mes "enough zeny for the Teleport";
+			mes "Service. The fee to teleport";
+			mes "to "+.@towns$[.@i]+" is "+.@cost[.@i]+" zeny.";
+			close;
+		}
+		specialeffect2 EF_READYPORTAL;
+		specialeffect2 EF_TELEPORTATION;
+		specialeffect2 EF_PORTAL;
+		next;
+		set Zeny, Zeny - .@cost[.@i];
+		switch(.@i) {
+			case 0: warp "einbroch",67,195; break;
+			case 1: warp "lighthalzen",159,90; break;
+			case 2: warp "hugel",98,150; break;
+			case 3: warp "rachel",119,135; break;
+			case 4: warp "prontera",116,72; break;
+		}
+		close;
+	case 2:
+		close;
+	}
+}

+ 214 - 197
npc/other/pvp.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= kobra_k88; L0ne_W0lf, Elias (og2)
 //===== Current Version: =====================================
-//= 2.4
+//= 2.5
 //===== Compatible With: =====================================
 //= rAthena SVN
 //===== Description: =========================================
@@ -15,8 +15,11 @@
 //= 2.2 Some cleaning. [Euphy]
 //= 2.3 Fixed grammatical errors. [Joseph]
 //= 2.4 Fixed incorrect use of 'close' and some cleaning. [Joseph]
+//= 2.5 Renewal/Pre-Renewal split. [Euphy]
 //============================================================
 
+// Information
+//============================================================ 
 -	script	PVP Narrator::pvpe	-1,{
 	mes "[PVP Narrator]";
 	mes "Hello and welcome!";
@@ -24,147 +27,145 @@
 	mes "explaining the PVP Modes.";
 	mes "I am the PVP Narrator!";
 	next;
-	switch(select("What is PVP?","What are the PVP Modes?","What are the rules for PVP?","Save Position.","End Dialog.")) {
-		case 1:
-			mes "[PVP Narrator]";
-			mes "In short, PVP means";
-			mes "' Player VS Player Mode '";
-			mes "It's a unique place for people";
-			mes "to duel with each other.";
-			next;
-			mes "[PVP Narrator]";
-			mes "Just tell the";
-			mes "^3355FFGate Keeper^000000";
-			mes "that you want to try. He will";
-			mes "let you enter the PVP square.";
-			next;
-			mes "[PVP Narrator]";
-			mes "But, you need to be at";
-			mes "least level 31. And you";
-			mes "must pay 500 zeny entrance fee in order";
-			mes "to enter a PVP fight square.";
-			break;
-		case 2:
-			mes "[PVP Narrator]";
-			mes "When you are qualified, you";
-			mes "can choose one of the two modes.";
-			mes "Yoyo Mode or Nightmare Mode.";
-			next;
-			mes "[PVP Narrator]";
-			mes "Yoyo Mode is risk free.";
-			mes "You can experience PVP";
-			mes "without any restriction or";
-			mes "punishment. It is recommended";
-			mes "that you practice your skills";
-			mes "here before you move on.";
-			next;
-			mes "[PVP Narrator]";
-			mes "Nightmare Mode is very";
-			mes "dangerous! Please be cautious,";
-			mes "you will lose some of your";
-			mes "EXP when you are defeated. And";
-			mes "there is a small chance that";
-			mes "you will drop some equipment.";
-			next;
-			mes "[PVP Narrator]";
-			mes "However, if you win, the";
-			mes "rewards can be great!";
-			mes "To avoid misunderstanding,";
-			mes "you should think twice";
-			mes "before you go there...";
-			mes "Good Luck!";
-			break;
-		case 3:
-			mes "[PVP Narrator]";
-			mes "Each of the fight squares";
-			mes "have a row of Narrators and";
-			mes "choose them based on your";
-			mes "qualifications.";
-			next;
-			mes "[PVP Narrator]";
-			mes "Each Narrator will ask";
-			mes "which of the five PVP maps";
-			mes "you wish to go to.";
-			mes "Choose, and go in!";
-			next;
-			mes "[PVP Narrator]";
-			mes "Each map has a limitation on";
-			mes "the number of people who can";
-			mes "participate. So you will see";
-			mes "figures in the corner showing";
-			mes "'Attendee/Total'.";
-			next;
-			mes "[PVP Narrator]";
-			mes "Also, there is a hidden EXP";
-			mes "value in PVP mode. This EXP";
-			mes "score will only apply inside";
-			mes "of the PVP zone, so do not";
-			mes "worry.";
-			next;
-			mes "[PVP Narrator]";
-			mes "Every player's EXP at the";
-			mes "beginning is usually 5 points.";
-			mes "If you win, it will";
-			mes "increase by 1 point";
-			next;
-			mes "[PVP Narrator]";
-			mes "In the same way, when you";
-			mes "lose... Your EXP will";
-			mes "drop by 5 points.";
-			mes "So be careful!";
-			next;
-			mes "[PVP Narrator]";
-			mes "When you are defeated";
-			mes "And your EXP is equal";
-			mes "to or less than 0,";
-			mes "You will be removed from PVP";
-			mes "and your duel is finished!";
-			next;
-			mes "[PVP Narrator]";
-			mes "However, if your EXP is more";
-			mes "than 0. You can still get help";
-			mes "through other players healing...";
-			mes "Do you get it?";
-			next;
-			mes "[PVP Narrator]";
-			mes "The fighting commands inside of";
-			mes "PVP are the same as the normal.";
-			mes "All the basic controls are the";
-			mes "same.";
-			next;
-			mes "[PVP Narrator]";
-			mes "However, there is one thing...";
-			mes "Within the PVP fight square";
-			mes "and PVP fighting zones,";
-			mes "you cannot save your position.";
-			mes "Remember well... These rules";
-			mes "can help to ensure your victory.";
-			break;
-		case 4:
-			mes "[PVP Narrator]";
-			mes "Position successfully saved...";
-			mes "Thank you very much!";
-			mes "We will see you again soon.";
-			if(strnpcinfo(4) == "morocc_in") { savepoint "morocc_in",141,139; }
-			if(strnpcinfo(4) == "alberta_in") { savepoint "alberta_in",22,148; }
-			if(strnpcinfo(4) == "prt_in") { savepoint "prt_in",54,137; }
-			if(strnpcinfo(4) == "geffen_in") { savepoint "geffen_in",70,59; }
-			if(strnpcinfo(4) == "payon_in01") { savepoint "payon_in01",142,46; }
-			break;
-		case 5:
-			mes "[PVP Narrator]";
-			mes "With war raging between monsters";
-			mes "and humans, this competition";
-			mes "among people - PVP -";
-			mes "encourages us all to get";
-			mes "stronger. Come again,";
-			mes "we welcome your challenge!";
-			break;
+	switch(select("What is PVP?:What are the PVP Modes?:What are the rules for PVP?:Save Position.:End Dialog.")) {
+	case 1:
+		mes "[PVP Narrator]";
+		mes "In short, PVP means";
+		mes "' Player VS Player Mode '";
+		mes "It's a unique place for people";
+		mes "to duel with each other.";
+		next;
+		mes "[PVP Narrator]";
+		mes "Just tell the";
+		mes "^3355FFGate Keeper^000000";
+		mes "that you want to try. He will";
+		mes "let you enter the PVP square.";
+		next;
+		mes "[PVP Narrator]";
+		mes "But, you need to be at";
+		mes "least level 31. And you";
+		mes "must pay 500 zeny entrance fee in order";
+		mes "to enter a PVP fight square.";
+		break;
+	case 2:
+		mes "[PVP Narrator]";
+		mes "When you are qualified, you";
+		mes "can choose one of the two modes.";
+		mes "Yoyo Mode or Nightmare Mode.";
+		next;
+		mes "[PVP Narrator]";
+		mes "Yoyo Mode is risk free.";
+		mes "You can experience PVP";
+		mes "without any restriction or";
+		mes "punishment. It is recommended";
+		mes "that you practice your skills";
+		mes "here before you move on.";
+		next;
+		mes "[PVP Narrator]";
+		mes "Nightmare Mode is very";
+		mes "dangerous! Please be cautious,";
+		mes "you will lose some of your";
+		mes "EXP when you are defeated. And";
+		mes "there is a small chance that";
+		mes "you will drop some equipment.";
+		next;
+		mes "[PVP Narrator]";
+		mes "However, if you win, the";
+		mes "rewards can be great!";
+		mes "To avoid misunderstanding,";
+		mes "you should think twice";
+		mes "before you go there...";
+		mes "Good Luck!";
+		break;
+	case 3:
+		mes "[PVP Narrator]";
+		mes "Each of the fight squares";
+		mes "have a row of Narrators and";
+		mes "choose them based on your";
+		mes "qualifications.";
+		next;
+		mes "[PVP Narrator]";
+		mes "Each Narrator will ask";
+		mes "which of the five PVP maps";
+		mes "you wish to go to.";
+		mes "Choose, and go in!";
+		next;
+		mes "[PVP Narrator]";
+		mes "Each map has a limitation on";
+		mes "the number of people who can";
+		mes "participate. So you will see";
+		mes "figures in the corner showing";
+		mes "'Attendee/Total'.";
+		next;
+		mes "[PVP Narrator]";
+		mes "Also, there is a hidden EXP";
+		mes "value in PVP mode. This EXP";
+		mes "score will only apply inside";
+		mes "of the PVP zone, so do not";
+		mes "worry.";
+		next;
+		mes "[PVP Narrator]";
+		mes "Every player's EXP at the";
+		mes "beginning is usually 5 points.";
+		mes "If you win, it will";
+		mes "increase by 1 point";
+		next;
+		mes "[PVP Narrator]";
+		mes "In the same way, when you";
+		mes "lose... Your EXP will";
+		mes "drop by 5 points.";
+		mes "So be careful!";
+		next;
+		mes "[PVP Narrator]";
+		mes "When you are defeated";
+		mes "And your EXP is equal";
+		mes "to or less than 0,";
+		mes "You will be removed from PVP";
+		mes "and your duel is finished!";
+		next;
+		mes "[PVP Narrator]";
+		mes "However, if your EXP is more";
+		mes "than 0. You can still get help";
+		mes "through other players healing...";
+		mes "Do you get it?";
+		next;
+		mes "[PVP Narrator]";
+		mes "The fighting commands inside of";
+		mes "PVP are the same as the normal.";
+		mes "All the basic controls are the";
+		mes "same.";
+		next;
+		mes "[PVP Narrator]";
+		mes "However, there is one thing...";
+		mes "Within the PVP fight square";
+		mes "and PVP fighting zones,";
+		mes "you cannot save your position.";
+		mes "Remember well... These rules";
+		mes "can help to ensure your victory.";
+		break;
+	case 4:
+		mes "[PVP Narrator]";
+		mes "Position successfully saved...";
+		mes "Thank you very much!";
+		mes "We will see you again soon.";
+		if(strnpcinfo(4) == "morocc_in") { savepoint "morocc_in",141,139; }
+		if(strnpcinfo(4) == "alberta_in") { savepoint "alberta_in",22,148; }
+		if(strnpcinfo(4) == "prt_in") { savepoint "prt_in",54,137; }
+		if(strnpcinfo(4) == "geffen_in") { savepoint "geffen_in",70,59; }
+		if(strnpcinfo(4) == "payon_in01") { savepoint "payon_in01",142,46; }
+		break;
+	case 5:
+		mes "[PVP Narrator]";
+		mes "With war raging between monsters";
+		mes "and humans, this competition";
+		mes "among people - PVP -";
+		mes "encourages us all to get";
+		mes "stronger. Come again,";
+		mes "we welcome your challenge!";
+		break;
 	}
 	close;
 }
-
-//PVP Narrator's Duplicates
 morocc_in,144,138,4	duplicate(pvpe)	PVP Narrator#pe1	84
 alberta_in,22,146,4	duplicate(pvpe)	PVP Narrator#pe2	84
 prt_in,56,140,4	duplicate(pvpe)	PVP Narrator#pe3	84
@@ -172,7 +173,8 @@ geffen_in,67,63,4	duplicate(pvpe)	PVP Narrator#pe4	84
 payon_in01,142,50,4	duplicate(pvpe)	PVP Narrator#pe5	84
 geffen_in,67,63,4	duplicate(pvpe)	PVP Narrator#pe6	84
 
-//Gate Keeper (Floating NPC, Locations below)
+// Mode Select
+//============================================================ 
 -	script	Gate Keeper::gkut	-1,{
 	mes "[Gate Keeper]";
 	mes "Glad to be of service.";
@@ -182,7 +184,7 @@ geffen_in,67,63,4	duplicate(pvpe)	PVP Narrator#pe6	84
 	mes "modes or rules, Please ask";
 	mes "the Narrator...";
 	next;
-	switch(select("^FF5533' PvP Nightmare Mode'^000000","^3355FF' PvP Yoyo Mode'^000000","^3355FF' PvP Event Mode'^000000","Quit")) {
+	switch(select("^FF5533' PvP Nightmare Mode'^000000:^3355FF' PvP Yoyo Mode'^000000:^3355FF' PvP Event Mode'^000000:Quit")) {
 		case 1:
 			mes "[Gate Keeper]";
 			mes "I am sorry, but currently the Nightmare mode service is not available.";
@@ -195,10 +197,11 @@ geffen_in,67,63,4	duplicate(pvpe)	PVP Narrator#pe6	84
 			mes "to the Yoyo Mode";
 			mes "fight square?";
 			next;
-			if(select("Move","Cancel")==1) {
+			switch(select("Move:Cancel")) {
+			case 1:
 				if ((Zeny > 499) && (BaseLevel > 30)) {
 					set Zeny, Zeny - 500;
-					warp "pvp_y_room",51,23;
+					callsub L_Warp,"pvp_y_room";
 				}
 				else {
 					mes "[Gate Keeper]";
@@ -209,15 +212,16 @@ geffen_in,67,63,4	duplicate(pvpe)	PVP Narrator#pe6	84
 					mes "that you are at least level 31!";
 				}
 				close;
+			case 2:
+				mes "[Gate Keeper]";
+				mes "With war raging between monsters";
+				mes "and humans, this competition";
+				mes "among people - PVP -";
+				mes "encourages us all to get";
+				mes "stronger. Come again,";
+				mes "we welcome your challenge!";
+				close;
 			}
-			mes "[Gate Keeper]";
-			mes "With war raging between monsters";
-			mes "and humans, this competition";
-			mes "among people - PVP -";
-			mes "encourages us all to get";
-			mes "stronger. Come again,";
-			mes "we welcome your challenge!";
-			close;
 		case 3:
 			mes "[Gate Keeper]";
 			mes "Welcome!";
@@ -235,7 +239,8 @@ geffen_in,67,63,4	duplicate(pvpe)	PVP Narrator#pe6	84
 			}
 			mes "[Gate Keeper]";
 			mes "Yes, thank you for participating. Have fun!";
-			warp "pvp_room",51,23;
+			if (Zeny >= 500) set Zeny, Zeny - 500;
+			callsub L_Warp,"pvp_room";
 			break;
 		case 4:
 			mes "[Gate Keeper]";
@@ -248,19 +253,48 @@ geffen_in,67,63,4	duplicate(pvpe)	PVP Narrator#pe6	84
 			break;
 	}
 	close;
-}
 
-//Gate Keeper Duplicates
+L_Warp:
+	set .@map$,getarg(0);
+	if (checkre(0)) {
+		switch(rand(1,10)) {
+			case 1: warp .@map$,34,38; break;
+			case 2: warp .@map$,46,38; break;
+			case 3: warp .@map$,58,38; break;
+			case 4: warp .@map$,70,38; break;
+			case 5: warp .@map$,82,38; break;
+			case 6: warp .@map$,82,58; break;
+			case 7: warp .@map$,65,58; break;
+			case 8: warp .@map$,49,58; break;
+			case 9: warp .@map$,33,58; break;
+			case 10: warp .@map$,52,24; break;
+		}
+	} else
+		warp .@map$,51,23;
+	return;
+}
 morocc_in,144,142,4	duplicate(gkut)	Gate Keeper#gke1	83
 alberta_in,26,146,4	duplicate(gkut)	Gate Keeper#gke2	83
 prt_in,52,140,4	duplicate(gkut)	Gate Keeper#gke3	83
 geffen_in,63,63,4	duplicate(gkut)	Gate Keeper#gke4	83
 payon_in01,140,53,4	duplicate(gkut)	Gate Keeper#gke5	83
 
-//Fight square Reception Staff (Locations below)
--	script	FSRS::fsr	-1,{
-	if(strnpcinfo(4) == "pvp_y_room") {
-		setarray .@Maps$[0],	"pvp_y_8-1",	"pvp_y_8-2",	"pvp_y_8-3",	"pvp_y_8-4",	"pvp_y_8-5";
+// PVP Warper Function
+//============================================================ 
+// Note: The warper NPCs are in the pre-re/re paths.
+
+//callfunc "F_PVP_FSRS"{,<min_lvl>,<max_lvl>};
+function	script	F_PVP_FSRS	{
+	if (getargcount()) {
+		if (BaseLevel < getarg(0) || BaseLevel > getarg(1)) {
+			mes "[PVP Fight Square Reception Staff]";
+			mes "Sorry, but you base level has to be between LV "+getarg(0)+" and LV "+getarg(1)+".";
+			close;
+		}
+	}
+	if (strnpcinfo(4) == "pvp_y_room") {
+		set .@base$, "pvp_y_"+strnpcinfo(2);
+		setarray .@Maps$[0],	.@base$+"-1",	.@base$+"-2",	.@base$+"-3",	.@base$+"-4",	.@base$+"-5";
 		setarray .@Name$[0],	"Prontera",		"Izlude",		"Payon",		"Alberta",		"Morroc";
 		setarray .@Limit[0],	128,			128,			128,			128,			128;
 	} else {
@@ -280,25 +314,9 @@ payon_in01,140,53,4	duplicate(gkut)	Gate Keeper#gke5	83
 	}
 	warp .@Maps$[.@i],0,0;
 	end;
-
-OnInit:
-	waitingroom "Free for all",0;
-	end;
 }
 
-//Fight Square Reception Staff
-pvp_y_room,86,85,4	duplicate(fsr)	Fight SQ Reception#f1	105
-pvp_n_room,30,85,4	duplicate(fsr)	Fight SQ Reception#f2	105
 
-pvp_n_8-4,33,122,0	warp	Link_1-11	0,2,pvp_n_8-4,0,0
-pvp_n_8-4,62,84,0	warp	Link_1-12	1,1,pvp_n_8-4,0,0
-pvp_n_8-4,49,71,0	warp	Link_1-21	1,1,pvp_n_8-4,0,0
-pvp_n_8-4,56,166,0	warp	Link_1-22	1,1,pvp_n_8-4,0,0
-pvp_n_8-4,99,180,0	warp	Link_1-31	2,1,pvp_n_8-4,0,0
-pvp_n_8-4,137,84,0	warp	Link_1-32	1,1,pvp_n_8-4,0,0
-pvp_n_8-4,150,71,0	warp	Link_1-41	1,1,pvp_n_8-4,0,0
-pvp_n_8-4,144,166,0	warp	Link_1-42	1,1,pvp_n_8-4,0,0
-pvp_n_8-5,30,30,0	warp	Link_1-99	3,3,pvp_n_8-5,100,100
 
 // Event Contestant Entrance
 //============================================================ 
@@ -310,14 +328,12 @@ pvp_room,54,85,4	script	Registration Staff#1	105,{
 		mes "For details about viewers please proceed to the Register Staff on your right.";
 		close;
 	}
-
 	set .@size, getarraysize(.warp_x);
 	if (.@size == 0) {
 		setarray .warp_x,40,59,20,40;
 		setarray .warp_y,59,40,40,20;
 	}
-
-	if (select("Combat Square one :Cancel") == 1) {
+	if (select("Combat Square one:Cancel") == 1) {
 		mes "[PVP Combat Square Register Staff]";
 		mes "'"+ strcharinfo(0) +"'";
 		mes "Are you ready?!";
@@ -354,17 +370,16 @@ OnInit:
 		mes "For details about players entrance please proceed to the Register Staff on your left.";
 		close;
 	}
-
 	if (select("Compete Square one:Cancel") == 1) {
 		mes "[PVP Combat Square Register Staff]";
 		mes "You got it, thanks for participating. Have fun!";
 		close2;
 		delitem 7029,1; //Admission_For_Duel
 		switch(rand(1,4)) {
-		case 1: warp "pvp_2vs2",39,7; end;
-		case 2: warp "pvp_2vs2",39,73; end;
-		case 3: warp "pvp_2vs2",7,39; end;
-		case 4: warp "pvp_2vs2",73,39; end;
+			case 1: warp "pvp_2vs2",39,7; end;
+			case 2: warp "pvp_2vs2",39,73; end;
+			case 3: warp "pvp_2vs2",7,39; end;
+			case 4: warp "pvp_2vs2",73,39; end;
 		}
 	}
 	close;
@@ -373,7 +388,6 @@ OnInit:
 	waitingroom "Compete Square viewer's entrance",0;
 	end;
 }
-
 pvp_room,62,85,4	duplicate(PVPSpectator)	Spectator's Entrance#1	105
 pvp_room,70,85,4	duplicate(PVPSpectator)	Spectator's Entrance#2	105
 pvp_room,78,85,4	duplicate(PVPSpectator)	Spectator's Entrance#3	105
@@ -392,23 +406,26 @@ OnTouch:
 	warp "pvp_room",84,39;
 	end;
 }
-
 pvp_2vs2,5,4,0	duplicate(PVPSpecWarp)	Combat Square Staff#1	45,1,1
 pvp_2vs2,5,74,0	duplicate(PVPSpecWarp)	Combat Square Staff#2	45,1,1
 pvp_2vs2,74,74,0	duplicate(PVPSpecWarp)	Combat Square Staff#3	45,1,1
 pvp_2vs2,74,5,0	duplicate(PVPSpecWarp)	Combat Square Staff#4	45,1,1
+
 pvp_2vs2,40,40,0	script	Combat Square Staff#5	45,1,1,{
 	mes "[Combat Square Staff]";
 	mes "May I help you?";
-	if (select("To the side viewer seat.:Leave Combat Square.") == 1)
+	switch(select("To the side viewer seat.:Leave Combat Square.")) {
+	case 1:
 		switch(rand(1,4)) {
-		case 1: warp "pvp_2vs2",39,7; end;
-		case 2: warp "pvp_2vs2",39,73; end;
-		case 3: warp "pvp_2vs2",7,39; end;
-		case 4: warp "pvp_2vs2",73,39; end;
+			case 1: warp "pvp_2vs2",39,7; end;
+			case 2: warp "pvp_2vs2",39,73; end;
+			case 3: warp "pvp_2vs2",7,39; end;
+			case 4: warp "pvp_2vs2",73,39; end;
 		}
-	warp "pvp_c_room",84,39;
-	end;
+	case 2:
+		warp "pvp_c_room",84,39;
+		end;
+	}
 }
 
 // PVP Area Exit warp
@@ -420,11 +437,11 @@ OnTouch:
 	mes "May I ask where you want to go?";
 	next;
 	switch(select("Prontera.:Morocc.:Geffen.:Payon.:Alberta.:Cancel.")) {
-	case 1: warp "prontera",107,60; end;
-	case 2: warp "morocc",157,96; end;
-	case 3: warp "geffen",120,36; end;
-	case 4: warp "payon",96,100; end;
-	case 5: warp "alberta",41,243; end;
-	case 6: close;
+		case 1: warp "prontera",107,60; end;
+		case 2: warp "morocc",157,96; end;
+		case 3: warp "geffen",120,36; end;
+		case 4: warp "payon",96,100; end;
+		case 5: warp "alberta",41,243; end;
+		case 6: close;
 	}
 }

+ 34 - 0
npc/pre-re/other/pvp.txt

@@ -0,0 +1,34 @@
+//===== rAthena Script ======================================= 
+//= PvP NPCs
+//===== By: ==================================================
+//= Euphy
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= PvP NPCs that are found in the Inns in major cities.
+//= Includes Yoyo Mode, Nightmare Mode, and Event Mode.
+//===== Additional Comments: ================================= 
+//= 1.0 First version, Pre-Renewal.
+//============================================================
+
+// PVP Warpers
+//============================================================ 
+pvp_y_room,86,85,4	script	Fight Square Reception#8	105,{
+	callfunc "F_PVP_FSRS";
+	end;
+
+OnInit:
+	waitingroom "Free for all",0;
+	end;
+}
+
+pvp_n_room,30,85,4	script	Fight Square Reception#n	105,{
+	callfunc "F_PVP_FSRS";
+	end;
+
+OnInit:
+	waitingroom "Free for all",0;
+	end;
+}

+ 1 - 0
npc/pre-re/scripts_athena.conf

@@ -45,6 +45,7 @@ npc: npc/pre-re/merchants/shops.txt
 // --------------------------- Others ---------------------------
 npc: npc/pre-re/other/bulletin_boards.txt
 npc: npc/pre-re/other/mercenary_rent.txt
+npc: npc/pre-re/other/pvp.txt
 npc: npc/pre-re/other/msg_boards.txt
 npc: npc/pre-re/other/resetskill.txt
 npc: npc/pre-re/other/turbo_track.txt

+ 15 - 14
npc/quests/okolnir.txt

@@ -3,7 +3,7 @@
 //===== By: ================================================== 
 //= Joseph
 //===== Current Version: ===================================== 
-//= 1.0
+//= 1.1
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //===== Description: ========================================= 
@@ -12,6 +12,7 @@
 //===== Additional Comments: ================================= 
 //= 0.x Previous author: L0ne_W0lf
 //= 1.0 Merged Okolnir. [Joseph]
+//= 1.1 Some bug fixes. [Toshiro90/Euphy]
 //============================================================ 
 
 function	script	F_Okolnir	{
@@ -407,10 +408,10 @@ OnTouch:
 			case 18: setarray .@n, 57,255,57,258,19; break;
 			case 19: setarray .@n, 84,277,84,280,20; break;
 		}
-			SMonster(.@sub$,.@n[0],.@n[1]);
-			setd "$@gqse_"+.@sub$+"_miro",.@n[4];
-			warp "que_q"+.@sub$,.@n[2],.@n[3];
-			end;
+		SMonster(.@sub$,.@n[0],.@n[1]);
+		setd "$@gqse_"+.@sub$+"_miro",.@n[4];
+		warp "que_q"+.@sub$,.@n[2],.@n[3];
+		end;
 	}
 	else {
 		mes "There are too many people, you can't enter.";
@@ -1645,7 +1646,7 @@ OnTimer55000:
 OnTimer85000:
 OnTimer120000:
 	set .@sub$,callfunc("F_Okolnir");
-	setarray .xy2, 226,294,227,294,228,294,229,294,230,295,231,296,231,297,231,298,231,299,230,300,229,301,228,301,227,301,226,301,225,300,224,299,224,298,224,297,224,296,225,295;
+	setarray .@xy2, 226,294,227,294,228,294,229,294,230,295,231,296,231,297,231,298,231,299,230,300,229,301,228,301,227,301,226,301,225,300,224,299,224,298,224,297,224,296,225,295;
 	for (set .@i, 0; .@i < getarraysize(.@xy2); set .@i, .@i + 2)
 		monster "que_q"+.@sub$,.@xy2[.@i],.@xy2[.@i+1],"Guard of Shadow",1752,1,"#nmsom"+.@sub$+"_jin01::OnMyMobDead";	
 	end;
@@ -1811,22 +1812,22 @@ OnTimer5000:
 OnTimer120000:
 	set .@sub$,callfunc("F_Okolnir");
 	setarray .@xy2, 251,343,252,343,255,341,255,340,254,337,253,336,250,336,249,337,248,340,248,341;
-	for (set .@i, 0; .@i < getarraysize(.@xy); set .@i, .@i + 2)
+	for (set .@i, 0; .@i < getarraysize(.@xy2); set .@i, .@i + 2)
 		monster "que_q"+.@sub$,.@xy2[.@i],.@xy2[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead";
 	end;
 
 OnTimer240000:
 	set .@sub$,callfunc("F_Okolnir");
 	setarray .@xy3, 250,343,252,343,254,342,255,340,255,338,253,336,250,336,248,338,248,340,249,342;
-	for (set .@i, 0; .@i < getarraysize(.@xy); set .@i, .@i + 2)
-		monster "que_q"+.@sub$,.@xy2[.@i],.@xy2[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead";
+	for (set .@i, 0; .@i < getarraysize(.@xy3); set .@i, .@i + 2)
+		monster "que_q"+.@sub$,.@xy3[.@i],.@xy3[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead";
 	end;
 
 OnTimer360000:
 	set .@sub$,callfunc("F_Okolnir");
 	setarray .@xy4, 250,343,252,343,254,342,255,340,255,338,253,336,251,336,249,337,248,339,248,341;
-	for (set .@i, 0; .@i < getarraysize(.@xy); set .@i, .@i + 2)
-		monster "que_q"+.@sub$,.@xy2[.@i],.@xy2[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead";
+	for (set .@i, 0; .@i < getarraysize(.@xy4); set .@i, .@i + 2)
+		monster "que_q"+.@sub$,.@xy4[.@i],.@xy4[.@i+1],"Keeper Of The Temple",1933,1,"#nmsom"+.@sub$+"_jin03::OnMyMobDead";
 	stopnpctimer;
 	end;
 
@@ -2148,10 +2149,10 @@ que_qsch05,251,255,3	duplicate(Wish Maiden#main_boss)	Wish Maiden#sch05_boss	193
 		if (strcharinfo(0) == getguildmaster(.@GID)) {
 			if (compare(.@sub$,"aru")) {
 				setarray .@n, 7835,1,7836,1,7837,1,7838,1,2513,1,7291,10,7293,10,7063,100,985,20;
-				set .@rwd, 2541;
+				set .@rwd, 2541; //Asprika
 			} else {
 				setarray .@n, 7830,1,7831,1,7832,1,7833,1,7834,1,2357,1,7510,100,969,10,985,20;
-				set .@rwd, 2383;
+				set .@rwd, 2383; //Brynhild
 			}
 			for (set .@i, 0; .@i < getarraysize(.@n); set .@i, .@i + 2) {
 				if (countitem(.@n[.@i]) >= .@n[.@i+1])
@@ -2180,7 +2181,7 @@ que_qsch05,251,255,3	duplicate(Wish Maiden#main_boss)	Wish Maiden#sch05_boss	193
 				for (set .@i, 0; .@i < getarraysize(.@n); set .@i, .@i + 2)
 					delitem .@n[.@i],.@n[.@i+1];
 				getitem .@rwd,1;
-				getitem 7840,1;
+				getitem 7840,1; //Valkyrie_Gift
 				announce "["+ strcharinfo(0) +"], of guild ["+ GetGuildName(.@GID) +"] has brought a "+getitemname(.@rwd)+" into this world.",bc_all,"0x70dbdb";
 				close2;
 				cutin "wish_maiden11",255;

+ 71 - 0
npc/re/other/item_merge.txt

@@ -0,0 +1,71 @@
+//===== rAthena Script =======================================
+//= Mergician
+//===== By: ==================================================
+//= Euphy
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= [Official Conversion]
+//= Merges items taking up multiple slots in a player's
+//= inventory.
+//===== Additional Comments: =================================
+//= 1.0 First version, currently useless/disabled.
+//============================================================
+
+prontera,146,95,3	script	Mergician#pron	64,{
+	if (checkweight(1301,1) == 0) {
+		mes "- Wait a second !! -";
+		mes "- You are carrying too many items -";
+		mes "- or too much weight to proceed. -";
+		mes "- Come back after -";
+		mes "- arranging your inventory. -";
+		close;
+	}
+	mes "[Mergician]";
+	mes "Do you believe in the miracle of Merge god?? If so, repeat my spell loudly as I pronunce it!!!";
+	mes "Merge Merge, Merrrrge!!!";
+	next;
+	switch(select("What is the miracle of Merge?:Merrrrge!!!!:Abandon...")) {
+	case 1:
+		mes "[Mergician]";
+		mes "There is an order which rules the world and keeps the world to go well.";
+		next;
+		mes "[Mergician]";
+		mes "But there has been a bad factor which totally jeopardised this rule!!";
+		next;
+		mes "[Mergician]";
+		mes "Those things which are separated even if they are composed by the same material!!";
+		next;
+		mes "[Mergician]";
+		mes "Have you never experienced this bad incident??";
+		mes "The fact that I had ^3131FFthe same potion, but appearing more than twice in your inventory!!^000000 So unpleasant!!!";
+		next;
+		mes "[Mergician]";
+		mes "Believe in Mergism. That is the truth.";
+		mes "Then I can help you be happy and content.";
+		close;
+	case 2:
+		mes "[Mergician]";
+		mes "This is the total holy ritual to pray to the Great God, Merge! and I am borrowing the power for a while!!";
+		next;
+		mes "[Mergician]";
+		mes "And if you eagerly want to be blessed by Merge, be humble and shout out loud! Merge Merge, Merrrrge!!!";
+		next;
+		switch(select("Merrrrge!:Don't follow what he says.")) {
+		case 1:
+//			MergeItem
+			mes "[Mergician]";
+			mes "Merge just heard your wish and let it be realised!";
+			mes "Open your inventory to check the miracle!";
+			close;
+		case 2:
+			mes "[Mergician]";
+			mes "You jerk!!! You just broke the whole rhythm! Why can't you get my flow and follow me?! Idiot!";
+			close;
+		}
+	case 3:
+		close;
+	}
+}

+ 93 - 0
npc/re/other/pvp.txt

@@ -0,0 +1,93 @@
+//===== rAthena Script ======================================= 
+//= PvP NPCs
+//===== By: ==================================================
+//= Euphy
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena SVN
+//===== Description: =========================================
+//= PvP NPCs that are found in the Inns in major cities.
+//= Includes Yoyo Mode, Nightmare Mode, and Event Mode.
+//===== Additional Comments: ================================= 
+//= 1.0 First version, Renewal.
+//============================================================
+
+// PVP Warpers
+//============================================================ 
+pvp_y_room,30,85,4	script	Fight Square Reception#1	105,{ //5,5
+	callfunc "F_PVP_FSRS",50,69;
+	end;
+
+OnInit:
+	waitingroom "LV 50 ~ LV 69",0;
+	end;
+}
+
+pvp_y_room,38,85,4	script	Fight Square Reception#2	105,{ //5,5
+	callfunc "F_PVP_FSRS",70,89;
+	end;
+
+OnInit:
+	waitingroom "LV 70 ~ LV 89",0;
+	end;
+}
+
+pvp_y_room,46,85,4	script	Fight Square Reception#3	105,{ //5,5
+	callfunc "F_PVP_FSRS",90,99;
+	end;
+
+OnInit:
+	waitingroom "LV 90 ~ LV 99",0;
+	end;
+}
+
+pvp_y_room,54,85,4	script	Fight Square Reception#8	105,{
+	callfunc "F_PVP_FSRS";
+	end;
+
+OnInit:
+	waitingroom "Free for all",0;
+	end;
+}
+
+pvp_y_room,62,85,4	script	Fight Square Reception#4	105,{
+	//if (ADVJOB > 0) {
+	if (Upper == 1) {
+		mes "[PVP Fight Square Reception Staff]";
+		mes "You have been transcended.";
+		mes "You are not allowed to enter.";
+		close;
+	}
+	callfunc "F_PVP_FSRS";
+	end;
+
+OnInit:
+	waitingroom "Normal Jobs Only",0;
+	end;
+}
+
+pvp_y_room,70,85,4	script	Fight Square Reception#5	105,{
+	//if (ADVJOB == 0) {
+	if (Upper != 1) {
+		mes "[PVP Fight Square Reception Staff]";
+		mes "You have not transcended.";
+		mes "You are not allowed to enter.";
+		close;
+	}
+	callfunc "F_PVP_FSRS";
+	end;
+
+OnInit:
+	waitingroom "Trans Jobs Only",0;
+	end;
+}
+
+pvp_n_room,86,85,4	script	Fight Square Reception#n	105,{
+	callfunc "F_PVP_FSRS";
+	end;
+
+OnInit:
+	waitingroom "Free for all",0;
+	end;
+}

+ 0 - 0
npc/re/merchants/stone_change.txt → npc/re/other/stone_change.txt


+ 3 - 1
npc/re/scripts_athena.conf

@@ -81,15 +81,17 @@ npc: npc/re/merchants/quivers.txt
 npc: npc/re/merchants/refine.txt
 npc: npc/re/merchants/renters.txt
 npc: npc/re/merchants/shops.txt
-npc: npc/re/merchants/stone_change.txt
 //npc: npc/re/merchants/ticket_refiner.txt
 //npc: npc/re/merchants/enchan_upg.txt
 
 // --------------------------- Others ---------------------------
 npc: npc/re/other/bulletin_boards.txt
+//npc: npc/re/other/item_merge.txt
 npc: npc/re/other/mail.txt
 npc: npc/re/other/mercenary_rent.txt
+npc: npc/re/other/pvp.txt
 npc: npc/re/other/resetskill.txt
+npc: npc/re/other/stone_change.txt
 npc: npc/re/other/turbo_track.txt
 
 // --------------------------- Quests ---------------------------

+ 1 - 0
npc/scripts_athena.conf

@@ -170,6 +170,7 @@ npc: npc/other/arena/arena_party.txt
 npc: npc/other/arena/arena_point.txt
 npc: npc/other/arena/arena_room.txt
 // --------------------------------------------------------------
+//npc: npc/other/acolyte_warp.txt
 npc: npc/other/auction.txt
 npc: npc/other/books.txt
 npc: npc/other/bulletin_boards.txt