浏览代码

* Script updates.
- Added Malangdo Card Separation NPC "Richard", who refines weapons and shields.
- Added new "Job Repair" script, which fixes potential errors with job data (RE).
- Marriage script changes:
-- Permanent global variables are now temporary.
-- Added GM NPCs (The King of Midgart, Divorce Staff, Remarry Staff), commented. (bugreport:6795)
- Added some missing [Official Conversion] comments.

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

Euphy 11 年之前
父节点
当前提交
cbdbda1f0e

+ 6 - 6
npc/merchants/quivers.txt

@@ -9,11 +9,11 @@
 //===== Description: =========================================
 //===== Description: =========================================
 //= [Official Conversion]
 //= [Official Conversion]
 //= Turns arrows into Arrow Quivers.
 //= Turns arrows into Arrow Quivers.
-// Breakdown of Subroutine "S_BuyQuiver"
-// arg(0): Type of Arrow to be packaged (item ID).
-// arg(1): How many of each 'getarg(0)' arrow per quiver.
-// arg(2): The cost of making a 'getarg(0)' quiver.
-// arg(3): The quiver given by the NPC (item ID).
+//= Breakdown of Subroutine "S_BuyQuiver"
+//= arg(0): Type of Arrow to be packaged (item ID).
+//= arg(1): How many of each 'getarg(0)' arrow per quiver.
+//= arg(2): The cost of making a 'getarg(0)' quiver.
+//= arg(3): The quiver given by the NPC (item ID).
 //===== Additional Comments: =================================
 //===== Additional Comments: =================================
 //= 07/06/05 : Added 1st Version. [Muad_Dib]
 //= 07/06/05 : Added 1st Version. [Muad_Dib]
 //= Converted to rAthena format by Dr.Evil
 //= Converted to rAthena format by Dr.Evil
@@ -21,7 +21,7 @@
 //= Fixed a few spelling errors. [Nexon]
 //= Fixed a few spelling errors. [Nexon]
 //= 1.1 Added Holy Arrow Quivers [Playtester]
 //= 1.1 Added Holy Arrow Quivers [Playtester]
 //= 1.2 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
 //= 1.2 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
-//=	Removed "Holy Arrows" from the list.
+//=     Removed "Holy Arrows" from the list.
 //============================================================
 //============================================================
 
 
 payon_in01,5,134,5	script	Inventor Jaax	89,{
 payon_in01,5,134,5	script	Inventor Jaax	89,{

+ 192 - 44
npc/other/marriage.txt

@@ -3,7 +3,7 @@
 //===== By: ================================================== 
 //===== By: ================================================== 
 //= L0ne_W0lf
 //= L0ne_W0lf
 //===== Current Version: ===================================== 
 //===== Current Version: ===================================== 
-//= 1.2
+//= 1.3
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
@@ -13,12 +13,14 @@
 //= Currently does not support same-sex marriages.
 //= Currently does not support same-sex marriages.
 //= Old script located in: npc/custom/marriage.txt
 //= Old script located in: npc/custom/marriage.txt
 //= - Variable in use: wedding_sign (max 1)
 //= - Variable in use: wedding_sign (max 1)
-//= - Variable in use: $Wedding (max 1) 
-//= - Variab;e in use: $wed_groom$ $wed_bride$
+//= - Variable in use: $@wedding (max 1) 
+//= - Variable in use: $@wed_groom$ $@wed_bride$
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 First version. [L0ne_W0lf]
 //= 1.0 First version. [L0ne_W0lf]
 //= 1.1 Fixed a missing ")" [L0ne_W0lf]
 //= 1.1 Fixed a missing ")" [L0ne_W0lf]
 //= 1.2 Corrected duration of Wedding status. [L0ne_W0lf]
 //= 1.2 Corrected duration of Wedding status. [L0ne_W0lf]
+//= 1.3 Changed permanent global variables to temporary ones. [Euphy]
+//=     Added GM NPCs (commented).
 //============================================================
 //============================================================
 
 
 prt_church,97,100,4	script	Wedding Staff#w	71,{
 prt_church,97,100,4	script	Wedding Staff#w	71,{
@@ -561,13 +563,13 @@ prt_church,100,128,4	script	Bishop#w	60,{
 	}
 	}
 
 
 	if (!getpartnerid()) {
 	if (!getpartnerid()) {
-		if (!$wedding) {
+		if (!$@wedding) {
 			if (wedding_sign == 1) {
 			if (wedding_sign == 1) {
 				getpartymember(getcharid(1));
 				getpartymember(getcharid(1));
 				set .@partymembercount,$@partymembercount;
 				set .@partymembercount,$@partymembercount;
 				if (.@partymembercount == 2) {
 				if (.@partymembercount == 2) {
 					if (sex) {
 					if (sex) {
-						set $wedding,1;
+						set $@wedding,1;
 						initnpctimer;
 						initnpctimer;
 						mes "[Vomars]";
 						mes "[Vomars]";
 						mes "Young lovers, please";
 						mes "Young lovers, please";
@@ -585,23 +587,23 @@ prt_church,100,128,4	script	Bishop#w	60,{
 						mes "her and protect her. Now, may";
 						mes "her and protect her. Now, may";
 						mes "I know the name of your bride?";
 						mes "I know the name of your bride?";
 						next;
 						next;
-						input $wed_bride$;
+						input $@wed_bride$;
 						mes "[Vomars]";
 						mes "[Vomars]";
 						mes "Mr. " + strcharinfo(0) + "...";
 						mes "Mr. " + strcharinfo(0) + "...";
 						mes "Do you swear on your life";
 						mes "Do you swear on your life";
 						mes "that you will forever cherish";
 						mes "that you will forever cherish";
 						mes "and care for your bride,";
 						mes "and care for your bride,";
-						mes "Miss " + $wed_bride$ + "?";
+						mes "Miss " + $@wed_bride$ + "?";
 						next;
 						next;
 						select("I do.");
 						select("I do.");
-						set $wed_groom$,strcharinfo(0);
+						set $@wed_groom$,strcharinfo(0);
 						mes "[Vomars]";
 						mes "[Vomars]";
 						mes "Now, it is time for";
 						mes "Now, it is time for";
 						mes "your bride to make";
 						mes "your bride to make";
 						mes "her wedding vows.";
 						mes "her wedding vows.";
 						mes "If she will come forward...";
 						mes "If she will come forward...";
 						close2;
 						close2;
-						mapannounce "prt_church","The groom, Mr. " + strcharinfo(0) + ", has made his vows to Miss " + $wed_bride$ + "...",bc_map;
+						mapannounce "prt_church","The groom, Mr. " + strcharinfo(0) + ", has made his vows to Miss " + $@wed_bride$ + "...",bc_map;
 						cutin "",255;
 						cutin "",255;
 						end;
 						end;
 					}
 					}
@@ -632,13 +634,13 @@ prt_church,100,128,4	script	Bishop#w	60,{
 			mes "to prepare for marriage.";
 			mes "to prepare for marriage.";
 			goto L_End;
 			goto L_End;
 		}
 		}
-		else if ($wedding == 1) {
+		else if ($@wedding == 1) {
 			if (wedding_sign == 1) {
 			if (wedding_sign == 1) {
 				getpartymember(getcharid(1));
 				getpartymember(getcharid(1));
 				set .@partymembercount,$@partymembercount;
 				set .@partymembercount,$@partymembercount;
 				if (.@partymembercount == 2) {
 				if (.@partymembercount == 2) {
 					if (sex == 0) {
 					if (sex == 0) {
-						if (strcharinfo(0) == $wed_bride$) {
+						if (strcharinfo(0) == $@wed_bride$) {
 							mes "[Vomars]";
 							mes "[Vomars]";
 							mes "Young lovers, please";
 							mes "Young lovers, please";
 							mes "remember this moment for";
 							mes "remember this moment for";
@@ -646,11 +648,11 @@ prt_church,100,128,4	script	Bishop#w	60,{
 							mes "and joy. May the love you share";
 							mes "and joy. May the love you share";
 							mes "grow with each passing day.";
 							mes "grow with each passing day.";
 							next;
 							next;
-							mapannounce "prt_church","Let's hear what the bride, Miss "+$wed_bride$+", has to say...",bc_map;
+							mapannounce "prt_church","Let's hear what the bride, Miss "+$@wed_bride$+", has to say...",bc_map;
 							mes "[Vomars]";
 							mes "[Vomars]";
-							mes "Miss "+$wed_bride$+"...";
+							mes "Miss "+$@wed_bride$+"...";
 							mes "Do you swear to stay";
 							mes "Do you swear to stay";
-							mes "true to "+$wed_groom$+",";
+							mes "true to "+$@wed_groom$+",";
 							mes "to be by his side, no matter";
 							mes "to be by his side, no matter";
 							mes "what the dangers may be?";
 							mes "what the dangers may be?";
 							next;
 							next;
@@ -658,12 +660,12 @@ prt_church,100,128,4	script	Bishop#w	60,{
 								cutin "wedding_bomars03",2;
 								cutin "wedding_bomars03",2;
 								mapannounce "prt_church","Next couple, please proceed...",bc_map;
 								mapannounce "prt_church","Next couple, please proceed...",bc_map;
 								mes "[Vomars]";
 								mes "[Vomars]";
-								mes "So "+$wed_groom$;
+								mes "So "+$@wed_groom$;
 								mes "isn't the one you";
 								mes "isn't the one you";
 								mes "want to marry? Hmm.";
 								mes "want to marry? Hmm.";
 								mes "I'm truly sorry for this";
 								mes "I'm truly sorry for this";
 								mes "misunderstanding...";
 								mes "misunderstanding...";
-								set $wedding,0;
+								set $@wedding,0;
 								close2;
 								close2;
 								stopnpctimer;
 								stopnpctimer;
 								cutin "",255;
 								cutin "",255;
@@ -672,25 +674,25 @@ prt_church,100,128,4	script	Bishop#w	60,{
 							mes "[Vomars]";
 							mes "[Vomars]";
 							mes "Do you truly swear";
 							mes "Do you truly swear";
 							mes "fidelity and patience?";
 							mes "fidelity and patience?";
-							mes "Will you marry "+$wed_groom$+"?";
+							mes "Will you marry "+$@wed_groom$+"?";
 							next;
 							next;
 							if (select("Yes, I do.:^FF0000No.^000000") == 1) {
 							if (select("Yes, I do.:^FF0000No.^000000") == 1) {
-								if (isloggedin(getcharid(3,$wed_groom$))) {
-									if (marriage($wed_groom$)) {
+								if (isloggedin(getcharid(3,$@wed_groom$))) {
+									if (marriage($@wed_groom$)) {
 										//Call Wedding effect
 										//Call Wedding effect
 										wedding;
 										wedding;
 										//Give ring to Bride, and change to wedding sprite.
 										//Give ring to Bride, and change to wedding sprite.
 										sc_start SC_Wedding,3600000,1;
 										sc_start SC_Wedding,3600000,1;
 										getitem 2635,1; //Bride_Ring
 										getitem 2635,1; //Bride_Ring
 										//Give ring to Groom, and change to wedding sprite.
 										//Give ring to Groom, and change to wedding sprite.
-										attachrid(getcharid(3,$wed_groom$));
+										attachrid(getcharid(3,$@wed_groom$));
 										sc_start SC_Wedding,3600000,1;
 										sc_start SC_Wedding,3600000,1;
 										getitem 2634,1; //Bridegroom_Ring
 										getitem 2634,1; //Bridegroom_Ring
 										detachrid;
 										detachrid;
 										//Switch Script progression back to Bride
 										//Switch Script progression back to Bride
-										attachrid(getcharid(3,$wed_bride$));
+										attachrid(getcharid(3,$@wed_bride$));
 										cutin "wedding_bomars02",2;
 										cutin "wedding_bomars02",2;
-										mapannounce "prt_church","I now pronounce you, "+$wed_groom$+" and "+$wed_bride$+", husband and wife.",bc_map;
+										mapannounce "prt_church","I now pronounce you, "+$@wed_groom$+" and "+$@wed_bride$+", husband and wife.",bc_map;
 										mes "[Vomars]";
 										mes "[Vomars]";
 										mes "By the power invested";
 										mes "By the power invested";
 										mes "in me as Royal Bishop of";
 										mes "in me as Royal Bishop of";
@@ -702,10 +704,10 @@ prt_church,100,128,4	script	Bishop#w	60,{
 										mes "[Vomars]";
 										mes "[Vomars]";
 										mes "And lastly...";
 										mes "And lastly...";
 										mes "Always be happy,";
 										mes "Always be happy,";
-										mes "dear "+$wed_bride$+"...";
-										set $wed_groom$,"";
-										set $wed_bride$,"";
-										set $wedding,0;
+										mes "dear "+$@wed_bride$+"...";
+										set $@wed_groom$,"";
+										set $@wed_bride$,"";
+										set $@wedding,0;
 										close2;
 										close2;
 										stopnpctimer;
 										stopnpctimer;
 										cutin "",255;
 										cutin "",255;
@@ -724,7 +726,7 @@ prt_church,100,128,4	script	Bishop#w	60,{
 							}
 							}
 							else {
 							else {
 								cutin "wedding_bomars03",2;
 								cutin "wedding_bomars03",2;
-								mapannounce "prt_church","Alas! "+$wed_bride$+" has rejected "+$wed_groom$+"'s marriage proposal!",bc_map;
+								mapannounce "prt_church","Alas! "+$@wed_bride$+" has rejected "+$@wed_groom$+"'s marriage proposal!",bc_map;
 								mes "[Vomars]";
 								mes "[Vomars]";
 								mes "Hm. It seems that";
 								mes "Hm. It seems that";
 								mes "you've changed your";
 								mes "you've changed your";
@@ -733,9 +735,9 @@ prt_church,100,128,4	script	Bishop#w	60,{
 								mes "must do what your heart";
 								mes "must do what your heart";
 								mes "tells you is right. Now, run!";
 								mes "tells you is right. Now, run!";
 							}
 							}
-							set $wed_groom$,"";
-							set $wed_bride$,"";
-							set $wedding,0;
+							set $@wed_groom$,"";
+							set $@wed_bride$,"";
+							set $@wedding,0;
 							close2;
 							close2;
 							stopnpctimer;
 							stopnpctimer;
 							cutin "",255;
 							cutin "",255;
@@ -747,7 +749,7 @@ prt_church,100,128,4	script	Bishop#w	60,{
 				}
 				}
 				callsub S_Busy;
 				callsub S_Busy;
 			}
 			}
-			if (strcharinfo(0) == $wed_bride$) {
+			if (strcharinfo(0) == $@wed_bride$) {
 				mes "[Vomars]";
 				mes "[Vomars]";
 				mes "Hm? It appears that";
 				mes "Hm? It appears that";
 				mes "Happy Marry still hasn't";
 				mes "Happy Marry still hasn't";
@@ -775,11 +777,11 @@ L_End:
 	end;
 	end;
 
 
 S_Busy:
 S_Busy:
-	if ($wed_groom$ != "" && $wed_bride$ != "") {
+	if ($@wed_groom$ != "" && $@wed_bride$ != "") {
 		mes "[Vomars]";
 		mes "[Vomars]";
 		mes "The wedding of";
 		mes "The wedding of";
-		mes "Miss "+ $wed_bride$ +" and";
-		mes "Mister "+ $wed_groom$;
+		mes "Miss "+ $@wed_bride$ +" and";
+		mes "Mister "+ $@wed_groom$;
 		mes "is currently in progress.";
 		mes "is currently in progress.";
 		mes "Please keep your voice down.";
 		mes "Please keep your voice down.";
 		goto L_End;
 		goto L_End;
@@ -791,25 +793,171 @@ S_Busy:
 	mes "turn. Thanks for understanding... ^FFFFFF ^000000";
 	mes "turn. Thanks for understanding... ^FFFFFF ^000000";
 	goto L_End;
 	goto L_End;
 
 
-OnInit:
-	set $wedding,0;
-	end;
-
 OnStop:
 OnStop:
 	stopnpctimer;
 	stopnpctimer;
 	end;
 	end;
 
 
 OnReset:
 OnReset:
-	set $wed_groom$,"";
-	set $wed_bride$,"";
-	set $wedding,0;
+	set $@wed_groom$,"";
+	set $@wed_bride$,"";
+	set $@wedding,0;
 	end;
 	end;
 
 
 OnTimer180000:
 OnTimer180000:
 	mapannounce "prt_church","You've responded too slowly... Next couple, please proceed.",bc_map;
 	mapannounce "prt_church","You've responded too slowly... Next couple, please proceed.",bc_map;
-	set $wed_groom$,"";
-	set $wed_bride$,"";
-	set $wedding,0;
+	donpcevent "Bishop#w::OnReset";
 	stopnpctimer;
 	stopnpctimer;
 	end;
 	end;
 }
 }
+
+/*
+prt_church,28,178,4	script	The King of Midgart	108,{
+	mes "[Vomars]";
+	mes "Wh-who are you?";
+	mes "You must know the";
+	mes "password to invoke";
+	mes "my awesome powers.";
+	next;
+	input .@input;
+	if (.@input != 1854) {
+		mes "[Vomars]";
+		mes "This is";
+		mes "no place for";
+		mes "fooling around.";
+		close2;
+		warp "prt_church",101,102;
+		end;
+	}
+	mes "[Wedding Switch]";
+	mes "Is there a problem with";
+	mes "the wedding ceremony?";
+	mes "I can reset the Bishop";
+	mes "Vomars NPC if you like.";
+	next;
+	switch(select("No, thanks:RESET")) {
+	case 1:
+		mes "[Wedding Switch]";
+		mes "Alright, then.";
+		mes "However, if the";
+		mes "Bishop Vomars";
+		mes "NPC is stuck, it may";
+		mes "be best to reset it.";
+		close;
+	case 2:
+		donpcevent "Bishop#w::OnStop";
+		donpcevent "Bishop#w::OnReset";
+		mapannounce "prt_church","You've responded too slowly... Next couple, please proceed.",bc_map;
+		mes "[Wedding Switch]";
+		mes "The Bishop Vomars NPC";
+		mes "has now been reactivated.";
+		mes "It should now be possible";
+		mes "to proceed with weddings.";
+		close;
+	}
+}
+
+prt_church,20,179,4	script	Divorce Staff	71,{
+	mes "[Bad Ending]";
+	mes "Uh oh...";
+	mes "You know I can't";
+	mes "do anything for you.";
+	next;
+	input .@input;
+	if (.@input != 1854) {
+		mes "[Bad Ending]";
+		mes "Hmm...";
+		mes "You really";
+		mes "shouldn't be";
+		mes "in this place...";
+		close;
+	}
+	mes "[Bad Ending]";
+	mes "Great, you know the";
+	mes "password! Now, did you";
+	mes "want me to remove the";
+	mes "Wedding Ring in your";
+	mes "inventory?";
+	next;
+	switch(select("Drop 1 Wedding Ring.:Keep it.")) {
+	case 1:
+		set .@ring, (Sex)?2634:2635; //Bridegroom_Ring, Bride_Ring
+		if (countitem(.@ring)) {
+			delitem .@ring,1;
+			mes "[Bad Ending]";
+			mes "It's done!";
+		} else {
+			mes "[Bad Ending]";
+			mes "I couldn't find";
+			mes "the Wedding Ring...";
+			mes "Please make sure";
+			mes "that it's not equipped.";
+		}
+		close;
+	case 2:
+		mes "[Bad Ending]";
+		mes "You sure you want";
+		mes "to keep that ring?";
+		mes "Alright, but if it becomes";
+		mes "a problem, you come to me.";
+		close;
+	}
+}
+
+prt_church,22,179,4	script	Remarry Staff	71,{
+	mes "[Wedding Again]";
+	mes "Hmm...?";
+	mes "What exactly are";
+	mes "you doing here?";
+	next;
+	input .@input;
+	if (.@input != 1854) {
+		mes "[Wedding Again]";
+		mes "Ahk!";
+		mes "An adventurer";
+		mes "like you shouldn't";
+		mes "be in this place!";
+		close;
+	}
+	if (getpartnerid()) {
+		mes "[Wedding Again]";
+		mes "Hmm...";
+		mes "I can only create";
+		mes "a Wedding Ring if the";
+		mes "character is married.";
+		close;
+	}
+	mes "[Wedding Again]";
+	mes "Ah, I see that you";
+	mes "know the password.";
+	mes "Alright, if you somehow";
+	mes "lost your Wedding Ring,";
+	mes "I can make you a new one.";
+	next;
+	switch(select("Make new Wedding Ring.:Cancel.")) {
+	case 1:
+		set .@ring, (Sex)?2634:2635; //Bridegroom_Ring, Bride_Ring
+		if (countitem(.@ring) || isequipped(.@ring)) {
+			mes "[Wedding Again]";
+			mes "Wait, wait...";
+			mes "You're wearing your";
+			mes "Wedding Ring. I better";
+			mes "not make you another since";
+			mes "you don't need more than one.";
+		} else {
+			getitem .@ring,1;
+			mes "[Wedding Again]";
+			mes "Here you go~";
+			mes "It's your brand";
+			mes "new Wedding Ring!";
+		}
+		close;
+	case 2:
+		mes "[Wedding Again]";
+		mes "Alright. If you ever";
+		mes "lose your Wedding Ring,";
+		mes "come to me if you happen";
+		mes "to need a new one, okay?";
+		close;
+	}
+}
+*/

+ 1 - 0
npc/other/turbo_track.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Turbo Track Course: 
 //= Turbo Track Course: 
 //= - Solo Mode/Time Attack
 //= - Solo Mode/Time Attack
 //= - Normal (Non-PVP) - 4/8/16 Person
 //= - Normal (Non-PVP) - 4/8/16 Person

+ 1 - 0
npc/pre-re/cities/alberta.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Alberta town NPCs.
 //= Alberta town NPCs.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 First Version.
 //= 1.0 First Version.

+ 1 - 0
npc/pre-re/cities/izlude.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Izlude town NPCs.
 //= Izlude town NPCs.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 First Version.
 //= 1.0 First Version.

+ 1 - 0
npc/pre-re/cities/jawaii.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Jawaii town NPCs.
 //= Jawaii town NPCs.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 First Version.
 //= 1.0 First Version.

+ 1 - 0
npc/pre-re/other/turbo_track.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Pre-Renewal duplicates.
 //= Pre-Renewal duplicates.
 //===== Additional Comments: =================================
 //===== Additional Comments: =================================
 //= 1.0 Split Peco Peco Manager NPC.
 //= 1.0 Split Peco Peco Manager NPC.

+ 1 - 0
npc/re/airports/izlude.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Izlude Airport NPCs
 //= Izlude Airport NPCs
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 Updated to match the new Izlude Map. [Masao]
 //= 1.0 Updated to match the new Izlude Map. [Masao]

+ 1 - 0
npc/re/cities/alberta.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: =========================================
 //===== Description: =========================================
+//= [Official Conversion]
 //= Alberta town NPCs.
 //= Alberta town NPCs.
 //===== Additional Comments: =================================
 //===== Additional Comments: =================================
 //= 1.0 First Version.
 //= 1.0 First Version.

+ 1 - 0
npc/re/cities/izlude.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Izlude town NPCs.
 //= Izlude town NPCs.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 First Version. Still missing many new NPCs and their dialogues. [Masao]
 //= 1.0 First Version. Still missing many new NPCs and their dialogues. [Masao]

+ 1 - 0
npc/re/cities/jawaii.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: =========================================
 //===== Description: =========================================
+//= [Official Conversion]
 //= Jawaii town NPCs.
 //= Jawaii town NPCs.
 //===== Additional Comments: =================================
 //===== Additional Comments: =================================
 //= 1.0 First Version. Renewal coordinates by Masao.
 //= 1.0 First Version. Renewal coordinates by Masao.

+ 1 - 0
npc/re/guild/invest_main.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: =========================================
 //===== Description: =========================================
+//= [Official Conversion]
 //= Expansion for War of Emperium FE.
 //= Expansion for War of Emperium FE.
 //= Invest in each realm to unlock new maps:
 //= Invest in each realm to unlock new maps:
 //= - Guild Dungeon F2, total 20,000,000z.
 //= - Guild Dungeon F2, total 20,000,000z.

+ 1 - 0
npc/re/guild/invest_npc.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: =========================================
 //===== Description: =========================================
+//= [Official Conversion]
 //= Expansion for War of Emperium FE.
 //= Expansion for War of Emperium FE.
 //= Invest in each realm to unlock new maps:
 //= Invest in each realm to unlock new maps:
 //= - Guild Dungeon F2, total 20,000,000z.
 //= - Guild Dungeon F2, total 20,000,000z.

+ 316 - 0
npc/re/jobs/repair.txt

@@ -0,0 +1,316 @@
+//===== rAthena Script ======================================= 
+//= Job Repairs
+//===== By: ==================================================
+//= Euphy
+//===== Current Version: ===================================== 
+//= 1.0
+//===== Compatible With: ===================================== 
+//= rAthena SVN
+//===== Description: ========================================= 
+//= [Official Conversion]
+//= Removes potentially conflicting job data.
+//===== Additional Comments: ================================= 
+//= 1.0 First version.
+//============================================================ 
+
+/*
+rAthena -> official job variable conversion
+-------------------------------------------
+
+Knight: KNIGHT_Q -> job_knight_q
+Priest: PRIEST_Q -> job_priest_q
+Wizard: WIZ_Q -> job_wizard_q
+Blacksmith: BSMITH_Q -> job_black
+Assassin: ASSIN_Q -> job_assasin
+Hunter: HNTR_Q -> job_hunter
+Crusader: CRUS_Q -> job_crusader_q
+Monk: MONK_Q -> job_monk
+Sage: SAGE_Q -> job_sage_q
+Alchemist: ALCH_Q -> job_alchemist_q
+Rogue: ROGUE_Q -> job_rogue
+Bard: BARD_Q -> job_bard_q
+Dancer: DANC_Q -> job_dancer
+
+Rebirth: ADVJOB -> job_karma
+
+Rune Knight: job_rune_edq
+Arch Bishop: job_arch
+Warlock: job_wl
+Mechanic: job__mechanic -> job_mechanic
+Guillotine Cross: job_3rd_gc
+Ranger: job_ranger01
+Royal Guard: job_royal -> job_roy
+Sura: job_shu
+Sorcerer: job_soc
+Geneticist: job_gen
+Shadow Chaser: job_sha -> job_3rd_sc
+Minstrel: job_min
+Wanderer: job_wan
+
+Gunslinger: GUNS_Q -> hg_gun
+Ninja: NINJ_Q -> hg_nin
+Taekwon: TK_Q -> job_taekwon
+Star Gladiator: STGL_Q -> job_star
+Soul Linker: SOUL_Q -> job_linker
+Super Novice: SUPNOV_Q -> job_super
+Expanded Super Novice: EXSUPNOV_Q -> job_super2
+*/
+
+prt_in,38,104,4	script	Valerie	811,{
+	if (checkweight(1201,1) == 0) {
+		mes "I think you have too many items. Let's try it again after you take some out.";
+		close;
+	}
+	if (MaxWeight - Weight < 1000) {
+		mes "You're overweight with items so I don't think we can proceed any further. Challenge me after you've taken some items off.";
+		close;
+	}
+	mes "[Valerie]";
+	mes "I am Valerie; I help those with abnormalities. I am friends with Valkyrie.";
+	next;
+	mes "[Valerie]";
+	mes "If both abnormalities disappear then we must start the test over from scratch. What would you like to do?";
+	next;
+	switch(select("I don't have any abnormalities:I think my body has some abnormalities")) {
+	case 1:
+		mes "[Valerie]";
+		mes "That's a relief. Then please take care.";
+		close;
+	case 2:
+		mes "[Valerie]";
+		mes "Are you sure you want to intialize it and start over?";
+		next;
+		if(select("Nope:Yes, I want to start completely over") == 1) {
+			mes "[Valerie]";
+			mes "I understand. I'll see you next time";
+			close;
+		}
+		mes "[Valerie]";
+		mes "All items related to the existing conditions will disappear. Are you okay with this?";
+		next;
+		if(select("Nope:Yes, I want to start completely over.") == 1) {
+			mes "[Valerie]";
+			mes "I understand. I'll see you next time.";
+			close;
+		}
+		mes "[Valerie]";
+		mes "It seems that there are a sea of people who seemed to be cursed of not being able to get a significant other after going through with this. Are you still okay with this? ";
+		next;
+		if(select("Nope:I still want to intialize.") == 1) {
+			mes "[Valerie]";
+			mes "I understand. I will see you next time.";
+			close;
+		}
+		mes "[Valerie]";
+		mes "In extreme cases, some become crippled and can get ulcers. Do you still want to intilize former processes?";
+		next;
+		if(select("Nope:Please intilize the former processes") == 1) {
+			mes "[Valerie]";
+			mes "I understand. I will see you next time";
+			close;
+		}
+		specialeffect2 EF_INVENOM;
+		progressbar "0xffff00",3;
+
+		// Warlock - quest items
+		if (isequipped(2796) || isequipped(2797)) {
+			mes "[Valerie]";
+			mes "Please unequip the Magical Stone or Magical Stone Ring and try again.";
+			close;
+		}
+		if (countitem(2796) || countitem(2797)) {
+			if (isequipped(2796) || isequipped(2797)) {
+				mes "[Valerie]";
+				mes "Please talk to me after your replace all Magical Stones.";
+				close;
+			}
+			setarray .@items[0], 2796, 2797, 6152, 6151; //Magical_Stone,Magical_Stone_,Glittering_Crystal,Peice_Of_Great_Bradium
+			for(set .@i,0; .@i<4; set .@i,.@i+1) {
+				if (countitem(.@items[.@i]))
+					delitem .@items[.@i], countitem(.@items[.@i]);
+			}
+			mes "[Valerie]";
+			mes "You're carrying something that is unnecessary. I will sort it out for you.";
+			close;
+		}
+
+		// Baby and third job characters meet no further conditions.
+		if (eaclass()&(EAJL_BABY|EAJL_THIRD)) {
+			mes "[Valerie]";
+			mes "I don't think you should have any further business with me.";
+			close;
+		}
+
+		// Rebirth - variable
+		if ((Class >= Job_Swordman && Class <= Job_Crusader2) && ADVJOB != 0) {
+			set ADVJOB,0;
+			mes "[Valerie]";
+			mes "You're carrying big karma- You should erase it.";
+			next;
+			mes "[Valerie]";
+			mes "Please talk to me again as there could be additional problems.";
+			close;
+		}
+
+		// Second job - variable and quests
+		// callsub L_Second, "<variable>", <quest>;
+		if (Class == Job_Swordman) {
+			callsub L_Second, "KNIGHT_Q", 9012;
+			callsub L_Second, "CRUS_Q", 3015;
+		} else if (Class == Job_Archer) {
+			callsub L_Second, "HNTR_Q", 4013;
+			callsub L_Second, "BARD_Q", 3004;
+			callsub L_Second, "DANC_Q", 7006;
+		} else if (Class == Job_Mage) {
+			callsub L_Second, "WIZ_Q", 9018;
+			callsub L_Second, "SAGE_Q", 2052;
+		} else if (Class == Job_Merchant) {
+			callsub L_Second, "BSMITH_Q", 2016;
+			callsub L_Second, "ALCH_Q", 2040;
+		} else if (Class == Job_Thief) {
+			callsub L_Second, "ASSIN_Q", 8008;
+			callsub L_Second, "ROGUE_Q", 2027;
+		} else if (Class == Job_Acolyte) {
+			callsub L_Second, "PRIEST_Q", 8016;
+			callsub L_Second, "MONK_Q", 3032;
+		}
+
+		// Third job - variable and quests
+		// callsub L_Third, "<variable>", <main quest>, <first quest>, <last quest>{, <additional quest>};
+		if (BaseJob == Job_Assassin)
+			callsub L_Third, "job_3rd_gc", 7100, 7091, 7116;
+		else if (BaseJob == Job_Blacksmith)
+			callsub L_Third, "job__mechanic", 10101, 10090, 10101;
+		else if (BaseJob == Job_Hunter)
+			callsub L_Third, "job_ranger01", 8262, 8254, 8262;
+		else if (BaseJob == Job_Knight)
+			callsub L_Third, "job_rune_edq", 3219, 3200, 3220;
+		else if (BaseJob == Job_Priest)
+			callsub L_Third, "job_arch", 2191, 2187, 2191;
+		else if (BaseJob == Job_Wizard)
+			callsub L_Third, "job_wl", 11112, 11106, 11112;
+		else if (BaseJob == Job_Alchemist)
+			callsub L_Third, "job_gen", 2223, 2209, 2217, 2223;
+		else if (BaseJob == Job_Bard)
+			callsub L_Third, "job_min", 11154, 11135, 11154;
+		else if (BaseJob == Job_Crusader)
+			callsub L_Third, "job_royal", 0, 12090, 12094;
+		else if (BaseJob == Job_Dancer)
+			callsub L_Third, "job_wan", 2222, 2218, 2222;
+		else if (BaseJob == Job_Monk)
+			callsub L_Third, "job_shu", 11158, 11155, 11158;
+		else if (BaseJob == Job_Rogue)
+			callsub L_Third, "job_sha", 7180, 7160, 7180;
+		else if (BaseJob == Job_Sage)
+			callsub L_Third, "job_soc", 12098, 12096, 12098;
+
+		mes "[Valerie]";
+		mes "I don't think you should have any further business with me.";
+		close;
+	}
+
+L_Second:
+	if (getd(getarg(0)) != 0) {
+		setd getarg(0),0;
+		if (checkquest(getarg(1)) == 2)
+			erasequest getarg(1);
+		mes "[Valerie]";
+		mes "I will help clear your problems for you that came from your former attempts.";
+		next;
+		mes "[Valerie]";
+		mes "Please talk to me again as there could be additional problems.";
+		close;
+	} else
+		return;
+
+L_Third:
+	if (getd(getarg(0)) != 0) {
+		setd getarg(0),0;
+		if (getarg(1)) {
+			if (checkquest(getarg(1)) == 2)
+				erasequest getarg(1);
+		}
+		for(set .@i,getarg(2); .@i<=getarg(3); set .@i,.@i+1) {
+			if (checkquest(.@i) > -1)
+				erasequest .@i;
+		}
+		if (getarg(4,0)) {
+			if (checkquest(getarg(4)) > -1)
+				erasequest getarg(4);
+		}
+		mes "[Valerie]";
+		mes "I will help clear your problems for you that came from your former attempts.";
+		next;
+		mes "[Valerie]";
+		mes "Please talk to me again as there could be additional problems.";
+		close;
+	} else
+		return;
+}
+
+-	script	Valerie#sign	-1,{
+	mes "^ff00ffI couldn't pay the office rent so I am temporarily relocating to the building across from the Prontera Refinery.^000000";
+	mes "";
+	mes "^ff00ffValerie^000000";
+	close;
+}
+in_moc_16,17,33,4	duplicate(Valerie#sign)	Valerie#asn	837
+ein_in01,13,28,4	duplicate(Valerie#sign)	Valerie#bls	837
+hu_in01,386,377,4	duplicate(Valerie#sign)	Valerie#hnt	837
+prt_in,88,108,4	duplicate(Valerie#sign)	Valerie#knt	837
+prt_church,19,36,4	duplicate(Valerie#sign)	Valerie#prst	837
+gef_tower,110,30,4	duplicate(Valerie#sign)	Valerie#wiz	837
+comodo,215,155,4	duplicate(Valerie#sign)	Valerie#danc	837
+prt_castle,45,167,4	duplicate(Valerie#sign)	Valerie#cru	837
+prt_monk,59,253,4	duplicate(Valerie#sign)	Valerie#mnk	837
+moc_ruins,90,104,4	duplicate(Valerie#sign)	Valerie#rg	837
+yuno_in02,43,62,4	duplicate(Valerie#sign)	Valerie#sag	837
+prt_church,103,86,4	duplicate(Valerie#sign)	Valerie#arch	837
+que_job01,75,92,4	duplicate(Valerie#sign)	Valerie#gc	837
+yuno,129,150,4	duplicate(Valerie#sign)	Valerie#mech	837
+tur_dun01,159,40,4	duplicate(Valerie#sign)	Valerie#ran	837
+prt_in,167,24,4	duplicate(Valerie#sign)	Valerie#rk	837
+spl_in02,81,102,4	duplicate(Valerie#sign)	Valerie#wl	837
+alde_alche,38,181,4	duplicate(Valerie#sign)	Valerie#alche	837
+alberta,198,129,4	duplicate(Valerie#sign)	Valerie#min	837
+in_rogue,376,104,4	duplicate(Valerie#sign)	Valerie#sc	837
+ve_in,244,122,4	duplicate(Valerie#sign)	Valerie#shu	837
+xmas,166,209,4	duplicate(Valerie#sign)	Valerie#wan	837
+
+/*
+sec_in02,12,40,5	script	Job Repair	57,1,1,{
+	mes "Please input your password.";
+	next;
+	input .@inputstr$;
+	if (.@inputstr$ == "1854") {
+		set job_arch,100;
+		set job_3rd_gc,100;
+		set job__mechanic,100;
+		set job_ranger01,100;
+		set job_rune_edq,100;
+		set job_wl,100;
+		set job_gen,100;
+		set job_min,100;
+		set job_royal,100;
+		set job_sha,100;
+		set job_soc,100;
+		set job_shu,100;
+		set job_wan,100;
+		set KNIGHT_Q,100;
+		set PRIEST_Q,100;
+		set WIZ_Q,100;
+		set BSMITH_Q,100;
+		set ASSIN_Q,100;
+		set HNTR_Q,100;
+		set CRUS_Q,100;
+		set MONK_Q,100;
+		set SAGE_Q,100;
+		set ALCH_Q,100;
+		set ROGUE_Q,100;
+		set BARD_Q,100;
+		set DANC_Q,100;
+		set ADVJOB,15;
+	}
+	close;
+}
+*/

+ 1 - 0
npc/re/merchants/alchemist.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Merchants for Alchemist Materials and Manuals.
 //= Merchants for Alchemist Materials and Manuals.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 Split Geneticist shop from main file. [Euphy]
 //= 1.0 Split Geneticist shop from main file. [Euphy]

+ 150 - 69
npc/re/merchants/card_separation.txt

@@ -3,7 +3,7 @@
 //===== By: ================================================== 
 //===== By: ================================================== 
 //= Muad_Dib
 //= Muad_Dib
 //===== Current Version: ===================================== 
 //===== Current Version: ===================================== 
-//= 1.0
+//= 1.1
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
@@ -11,9 +11,10 @@
 //= Separates cards from equipment.
 //= Separates cards from equipment.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 First Version. [Euphy]
 //= 1.0 First Version. [Euphy]
+//= 1.1 Added "Richard" NPC. [Euphy]
 //============================================================ 
 //============================================================ 
 
 
-malangdo,215,166,4	script	Jeremy#mal	553,{
+-	script	::CardSeparation_mal	-1,{
 	disable_items;
 	disable_items;
 	if (checkweight(1201,1) == 0) {
 	if (checkweight(1201,1) == 0) {
 		mes "You have too many kinds of objects. Let's try to continue after reducing those objects.";
 		mes "You have too many kinds of objects. Let's try to continue after reducing those objects.";
@@ -23,19 +24,32 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 		mes "Can't continue because you have too many heavy objects. Let's try to continue after reducing the weight.";
 		mes "Can't continue because you have too many heavy objects. Let's try to continue after reducing the weight.";
 		close;
 		close;
 	}
 	}
-	mes "[Jeremy]";
-	mes "Long time no see~";
-	mes "I have learned a new skill that separates cards from Armor, Shoes, Garment and Headgear. Do you want to try it?";
+	if (strnpcinfo(1) == "Jeremy") {
+		set .@Jeremy,1;
+		set .@n$, "[Jeremy]";
+		setarray .@equip_name$[0],  "Armor",  "Shoes",  "Garment", "Upper Hat";
+		setarray .@equip_slot[0], EQI_ARMOR,EQI_SHOES,EQI_GARMENT,EQI_HEAD_TOP;
+
+		mes .@n$;
+		mes "Long time no see~";
+		mes "I have learned a new skill that separates cards from Armor, Shoes, Garment and Headgear. Do you want to try it?";
+	} else {
+		set .@Jeremy,0;
+		set .@n$, "[Richard]";
+		setarray .@equip_name$[0], "Left hand", "Right hand";
+		setarray .@equip_slot[0],   EQI_HAND_L,   EQI_HAND_R;
+
+		mes .@n$;
+		mes "Silly Jeremy does not want to touch weapons and shields because of picking several cards that might be damaged. That is why I prepared a card separaion skill for weapons and shields...";
+	}
 	next;
 	next;
-	mes "[Jeremy]";
+	mes .@n$;
 	mes "Generally the fee is 1,000,000 Zeny. During the card separation, you can use ^990000special items that reduce the rate of destroying equipment or cards^000000. We don't charge additional zeny for this.";
 	mes "Generally the fee is 1,000,000 Zeny. During the card separation, you can use ^990000special items that reduce the rate of destroying equipment or cards^000000. We don't charge additional zeny for this.";
 	next;
 	next;
-	mes "[Jeremy]";
+	mes .@n$;
 	mes "There is a possibility of destroying them even using a special item. Also, ^ff0000the refine level might be lost^000000. Do you have any equipment to separate?";
 	mes "There is a possibility of destroying them even using a special item. Also, ^ff0000the refine level might be lost^000000. Do you have any equipment to separate?";
 	next;
 	next;
 
 
-	setarray .@equip_name$[0],  "Armor",  "Shoes",  "Garment", "Upper Hat";
-	setarray .@equip_slot[0], EQI_ARMOR,EQI_SHOES,EQI_GARMENT,EQI_HEAD_TOP;
 	for(set .@i,0; .@i<getarraysize(.@equip_slot); set .@i,.@i+1) {
 	for(set .@i,0; .@i<getarraysize(.@equip_slot); set .@i,.@i+1) {
 		if (getequipisequiped(.@equip_slot[.@i]))
 		if (getequipisequiped(.@equip_slot[.@i]))
 			set .@menu$, .@menu$+getequipname(.@equip_slot[.@i])+":";
 			set .@menu$, .@menu$+getequipname(.@equip_slot[.@i])+":";
@@ -43,62 +57,55 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 			set .@menu$, .@menu$+"^999999"+.@equip_name$[.@i]+" (empty)^000000:";
 			set .@menu$, .@menu$+"^999999"+.@equip_name$[.@i]+" (empty)^000000:";
 	}
 	}
 
 
-	set .@i, select("Stop the work:How is it possible?:"+.@menu$);
+	set .@i, select("Stop the work:"+((.@Jeremy)?"How is it possible?":"")+":"+.@menu$);
 	switch(.@i) {
 	switch(.@i) {
 	case 1:
 	case 1:
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "Whenever you need the work, visit me here.";
 		mes "Whenever you need the work, visit me here.";
 		close;
 		close;
 	case 2:
 	case 2:
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "You wonder what is so special. Well, I hate to give only a guide, so let me tell you the story...";
 		mes "You wonder what is so special. Well, I hate to give only a guide, so let me tell you the story...";
 		next;
 		next;
 		mes "^000099Jeremy is stretching his shoulders and hands. He might be waiting for someone to talk with him.^000000";
 		mes "^000099Jeremy is stretching his shoulders and hands. He might be waiting for someone to talk with him.^000000";
 		next;
 		next;
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "Do you know that Malangdo's specialty is canned food?";
 		mes "Do you know that Malangdo's specialty is canned food?";
 		next;
 		next;
 		select("I knew that well. Is it that limited?");
 		select("I knew that well. Is it that limited?");
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "Hehe... Everyone loves it. But there were some problems before.";
 		mes "Hehe... Everyone loves it. But there were some problems before.";
 		next;
 		next;
 		select("Problems? Is there any faulty fish?");
 		select("Problems? Is there any faulty fish?");
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "No, the fish does not have any problem. The problem is lots of fish oil produced after processing. That is such an industrial waste.";
 		mes "No, the fish does not have any problem. The problem is lots of fish oil produced after processing. That is such an industrial waste.";
 		next;
 		next;
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "However, after a revitalizing refining process, this fish oil became valuable to use for old equipment care and industrial lubricant.";
 		mes "However, after a revitalizing refining process, this fish oil became valuable to use for old equipment care and industrial lubricant.";
 		next;
 		next;
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "In addition, this oil is so useful to separate relics from equipped weapons that we can't buy Premium Lubricant and Ordinary Lubricant with Zeny.";
 		mes "In addition, this oil is so useful to separate relics from equipped weapons that we can't buy Premium Lubricant and Ordinary Lubricant with Zeny.";
 		next;
 		next;
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "Well, don't worry about money. Surely the Premium Lubricant is expensive. If you pay some zeny, I can give you cheaper lubricant.";
 		mes "Well, don't worry about money. Surely the Premium Lubricant is expensive. If you pay some zeny, I can give you cheaper lubricant.";
 		next;
 		next;
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "I'm not sure about the quality of success. Anyway, this is so cheap, right?";
 		mes "I'm not sure about the quality of success. Anyway, this is so cheap, right?";
 		close;
 		close;
 	default:
 	default:
 		set .@equip_num, .@equip_slot[.@i-3];
 		set .@equip_num, .@equip_slot[.@i-3];
 		if (!getequipisequiped(.@equip_num)) {
 		if (!getequipisequiped(.@equip_num)) {
-			mes "[Jeremy]";
-			mes "In this part, there is nothing?";
+			mes .@n$;
+			if (.@Jeremy)
+				mes "In this part, there is nothing?";
+			else
+				mes "There is nothing on that part?";
 			close;
 			close;
 		}
 		}
 		break;
 		break;
 	}
 	}
-	setarray .@equip_card[0], getequipcardid(.@equip_num,0),getequipcardid(.@equip_num,1),getequipcardid(.@equip_num,2),getequipcardid(.@equip_num,3);
-	for(set .@i,0; .@i<4; set .@i,.@i+1) {
-		if (.@equip_card[.@i] >= 4700) // Armor Enchant System
-			set .@equip_card[.@i],0;
-	}
-	if (!getarraysize(.@equip_card)) {
-		mes "[Jeremy]";
-		mes "The card is not equipped. Do you want to check again?";
-		close;
-	}
 
 
-	// Detect MVP cards.
+	setarray .@equip_card[0], getequipcardid(.@equip_num,0),getequipcardid(.@equip_num,1),getequipcardid(.@equip_num,2),getequipcardid(.@equip_num,3);
 	set .@mvp_list$,
 	set .@mvp_list$,
 		"|4408|4128|4456|4168|4142"+  //Gloom_Under_Night_Card, Golden_Bug_Card, Nidhogg_Shadow_Card, Dark_Lord_Card, Doppelganger_Card
 		"|4408|4128|4456|4168|4142"+  //Gloom_Under_Night_Card, Golden_Bug_Card, Nidhogg_Shadow_Card, Dark_Lord_Card, Doppelganger_Card
 		"|4134|4137|4386|4407|4357"+  //Dracula_Card, Drake_Card, Detale_Card, Randgris_Card, B_Seyren_Card
 		"|4134|4137|4386|4407|4357"+  //Dracula_Card, Drake_Card, Detale_Card, Randgris_Card, B_Seyren_Card
@@ -109,15 +116,64 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 		"|4403|4399|4376|4441|4302"+  //Kiel_Card, Thanatos_Card, Lady_Tanee_Card, Fallen_Bishop_Card, Tao_Gunka_Card
 		"|4403|4399|4376|4441|4302"+  //Kiel_Card, Thanatos_Card, Lady_Tanee_Card, Fallen_Bishop_Card, Tao_Gunka_Card
 		"|4305|4148|4318|4121|4365"+  //Turtle_General_Card, Pharaoh_Card, Knight_Windstorm_Card, Phreeoni_Card, B_Katrinn_Card
 		"|4305|4148|4318|4121|4365"+  //Turtle_General_Card, Pharaoh_Card, Knight_Windstorm_Card, Phreeoni_Card, B_Katrinn_Card
 		"|4363|4324|4361|4330|4342|"; //B_Magaleta_Card, Garm_Card, B_Harword_Card, Dark_Snake_Lord_Card, Rsx_0806_Card
 		"|4363|4324|4361|4330|4342|"; //B_Magaleta_Card, Garm_Card, B_Harword_Card, Dark_Snake_Lord_Card, Rsx_0806_Card
-	if ((.@equip_card[0] && compare(.@mvp_list$,"|"+.@equip_card[0]+"|")) ||
-	    (.@equip_card[1] && compare(.@mvp_list$,"|"+.@equip_card[1]+"|")) ||
-	    (.@equip_card[2] && compare(.@mvp_list$,"|"+.@equip_card[2]+"|")) ||
-	    (.@equip_card[3] && compare(.@mvp_list$,"|"+.@equip_card[3]+"|")))
-		set .@boss_chk,1;
 
 
+	if (.@Jeremy) {
+		for(set .@i,0; .@i<4; set .@i,.@i+1) {
+			if (.@equip_card[.@i] >= 4700) // Armor Enchant System
+				set .@equip_card[.@i],0;
+		}
+		if (!getarraysize(.@equip_card)) {
+			mes .@n$;
+			mes "The card is not equipped. Do you want to check again?";
+			close;
+		}
+		if ((.@equip_card[0] && compare(.@mvp_list$,"|"+.@equip_card[0]+"|")) ||
+			(.@equip_card[1] && compare(.@mvp_list$,"|"+.@equip_card[1]+"|")) ||
+			(.@equip_card[2] && compare(.@mvp_list$,"|"+.@equip_card[2]+"|")) ||
+			(.@equip_card[3] && compare(.@mvp_list$,"|"+.@equip_card[3]+"|")))
+			set .@boss_chk,1;
+	} else {
+		// Official "Richard" script uses a hardcoded list including every possible item.
+		//if (!getequipisequiped(.@equip_num)) {
+		//	mes "[Richard]";
+		//	mes "I'm sorry. We don't provide that equipmnet yet.";
+		//	close;
+		//}
+
+		mes "[Richard]";
+		mes "Which number socket do you want to separate the card? From the left socket, they are sorted 1,2,3,4.";
+		next;
+		set .@menu$,"";
+		for(set .@i,0; .@i<4; set .@i,.@i+1) {
+			if (.@equip_card[.@i] && .@equip_card[.@i] < 4700) // Armor Enchant System
+				set .@menu$, .@menu$+"Socket "+(.@i+1)+" - "+getitemname(.@equip_card[.@i])+":";
+			else
+				set .@menu$, .@menu$+"^777777Socket "+(.@i+1)+" - No card^000000:";
+		}
+		set .@i, select("Stop the work:"+.@menu$);
+		switch(.@i) {
+		case 1:
+			mes .@n$;
+			mes "Whenever you need to work, please come to me.";
+			close;
+		default:
+			set .@slot, .@i-2;
+			if (.@equip_card[.@slot] == 0 || .@equip_card[.@slot] >= 4700) {
+				mes .@n$;
+				mes "This socket is not equipped with any card. Why don't you check again?";
+				close;
+			}
+			break;
+		}
+		if (compare(.@mvp_list$,"|"+.@equip_card[.@slot]+"|"))
+			set .@boss_chk,1;
+	}
 	if (.@boss_chk == 0) {
 	if (.@boss_chk == 0) {
-		mes "[Jeremy]";
-		mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
+		mes .@n$;
+		if (.@Jeremy)
+			mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
+		else
+			mes "Please choose the working fee.";
 		next;
 		next;
 		set .@menu$,
 		set .@menu$,
 			"Next time...:"+
 			"Next time...:"+
@@ -126,20 +182,20 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 			((countitem(6440))?"Use Ordinary Lubricant":"^999999Ordinary Lubricant (Insufficient)^000000");
 			((countitem(6440))?"Use Ordinary Lubricant":"^999999Ordinary Lubricant (Insufficient)^000000");
 		switch(select(.@menu$)) {
 		switch(select(.@menu$)) {
 		case 1:
 		case 1:
-			mes "[Jeremy]";
+			mes .@n$;
 			mes "Whenever you need the work, visit me here.";
 			mes "Whenever you need the work, visit me here.";
 			close;
 			close;
 		case 2:
 		case 2:
 			if (Zeny < 1000000) {
 			if (Zeny < 1000000) {
-				mes "[Jeremy]";
+				mes .@n$;
 				mes "You don't have enough zeny. Please come back with enough fees.";
 				mes "You don't have enough zeny. Please come back with enough fees.";
 				close;
 				close;
 			}
 			}
-			mes "[Jeremy]";
+			mes .@n$;
 			mes "This is pretty old equipment. There is a high rate of destroying the cards or equipment during the work. Are you sure you want to continue?";
 			mes "This is pretty old equipment. There is a high rate of destroying the cards or equipment during the work. Are you sure you want to continue?";
 			next;
 			next;
 			if(select("Next time...:Continue") == 1) {
 			if(select("Next time...:Continue") == 1) {
-				mes "[Jeremy]";
+				mes .@n$;
 				mes "Whenever you need the work, visit me here.";
 				mes "Whenever you need the work, visit me here.";
 				close;
 				close;
 			}
 			}
@@ -150,15 +206,15 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 			break;
 			break;
 		case 3:
 		case 3:
 			if (countitem(6441) == 0) {
 			if (countitem(6441) == 0) {
-				mes "[Jeremy]";
+				mes .@n$;
 				mes "You don't have Premium Lubricant.";
 				mes "You don't have Premium Lubricant.";
 				close;
 				close;
 			}
 			}
-			mes "[Jeremy]";
+			mes .@n$;
 			mes "If you use the Premium Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
 			mes "If you use the Premium Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
 			next;
 			next;
 			if(select("Next time...:Continue") == 1) {
 			if(select("Next time...:Continue") == 1) {
-				mes "[Jeremy]";
+				mes .@n$;
 				mes "Whenever you need the work, visit me here.";
 				mes "Whenever you need the work, visit me here.";
 				close;
 				close;
 			}
 			}
@@ -169,15 +225,15 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 			break;
 			break;
 		case 4:
 		case 4:
 			if (countitem(6440) == 0) {
 			if (countitem(6440) == 0) {
-				mes "[Jeremy]";
+				mes .@n$;
 				mes "You don't have Ordinary Lubricant.";
 				mes "You don't have Ordinary Lubricant.";
 				close;
 				close;
 			}
 			}
-			mes "[Jeremy]";
+			mes .@n$;
 			mes "If you use the Ordinary Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
 			mes "If you use the Ordinary Lubricant, the rate of destruction will be decreased highly, but I can't give you a 100% guarantee. Are you sure you want to continue?";
 			next;
 			next;
 			if(select("Next time...:Continue") == 1) {
 			if(select("Next time...:Continue") == 1) {
-				mes "[Jeremy]";
+				mes .@n$;
 				mes "Whenever you need the work, visit me here.";
 				mes "Whenever you need the work, visit me here.";
 				close;
 				close;
 			}
 			}
@@ -188,28 +244,34 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 			break;
 			break;
 		}
 		}
 	} else if (.@boss_chk == 1) {
 	} else if (.@boss_chk == 1) {
-		mes "[Jeremy]";
+		mes .@n$;
 		mes "This equipment contains a precious MVP card. This card can't be separated with lubricant. If you bring the super surfactant ^0000ffSillit Pong^000000, I will be able to work.";
 		mes "This equipment contains a precious MVP card. This card can't be separated with lubricant. If you bring the super surfactant ^0000ffSillit Pong^000000, I will be able to work.";
 		next;
 		next;
 		switch(select("Next time...:I have a Sillit Pong.")) {
 		switch(select("Next time...:I have a Sillit Pong.")) {
 		case 1:
 		case 1:
-			mes "[Jeremy]";
+			mes .@n$;
 			mes "Whenever you need the work, visit me here.";
 			mes "Whenever you need the work, visit me here.";
 			close;
 			close;
 		case 2:
 		case 2:
 			if (countitem(6443) == 0) {
 			if (countitem(6443) == 0) {
-				mes "[Jeremy]";
+				mes .@n$;
 				mes "You don't have Sillit Pong.";
 				mes "You don't have Sillit Pong.";
 				close;
 				close;
 			}
 			}
 			break;
 			break;
 		}
 		}
-		mes "[Jeremy]";
-		mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
+		mes .@n$;
+		if (.@Jeremy) {
+			mes "Except cards, ^ff0000all enchanted effects will disappear.^000000 If you agree to this, please choose the work type:";
+			set .@menu$,"Alright, let's do it!";
+		} else {
+			mes "May I continue?";
+			set .@menu$,"I got it. Just do it quickly!";
+		}
 		next;
 		next;
-		switch(select("Next time...:Alright, let's do it!")) {
+		switch(select("Next time...:"+.@menu$)) {
 		case 1:
 		case 1:
-			mes "[Jeremy]";
+			mes .@n$;
 			mes "Whenever you need the work, visit me here.";
 			mes "Whenever you need the work, visit me here.";
 			close;
 			close;
 		case 2:
 		case 2:
@@ -229,20 +291,37 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 	if (rand(1,.@sf_r_num) >= 61)
 	if (rand(1,.@sf_r_num) >= 61)
 		set .@equip_refine,0;
 		set .@equip_refine,0;
 
 
-	// Chance of retaining equipment.
-	if (rand(1,.@sf_w_num) < 61) {
-		set .@equip_safe,1;
-		getitem2 .@equip_id,1,1,.@equip_refine,0,0,0,0,0;
-	}
+	if (.@Jeremy) {
+		// Chance of retaining equipment.
+		if (rand(1,.@sf_w_num) < 61) {
+			set .@equip_safe,1;
+			getitem2 .@equip_id,1,1,.@equip_refine,0,0,0,0,0;
+		}
 
 
-	// Chance of retaining cards.
-	for(set .@i,0; .@i<4; set .@i,.@i+1) {
-		if (.@equip_card[.@i]) {
-			if (rand(1,.@sf_c_num) < 61)
-				getitem .@equip_card[.@i],1;
-			else
-				set .@card_break,1;
+		// Chance of retaining cards.
+		for(set .@i,0; .@i<4; set .@i,.@i+1) {
+			if (.@equip_card[.@i]) {
+				if (rand(1,.@sf_c_num) < 61)
+					getitem .@equip_card[.@i],1;
+				else
+					set .@card_break,1;
+			}
 		}
 		}
+	} else {
+		set .@card, .@equip_card[.@slot];
+		set .@equip_card[.@slot],0;
+
+		// Chance of retaining equipment.
+		if (rand(1,.@sf_w_num) < 61) {
+			set .@equip_safe,1;
+			getitem2 .@equip_id,1,1,.@equip_refine,0,.@equip_card[0],.@equip_card[1],.@equip_card[2],.@equip_card[3];
+		}
+
+		// Chance of retaining card.
+		if (rand(1,.@sf_c_num) < 61)
+			getitem .@card,1;
+		else
+			set .@card_break,1;
 	}
 	}
 
 
 	// Display corresponding effect.
 	// Display corresponding effect.
@@ -273,7 +352,9 @@ malangdo,215,166,4	script	Jeremy#mal	553,{
 		mes "Card has been damaged. ^ff0000Unrecoverable.^000000";
 		mes "Card has been damaged. ^ff0000Unrecoverable.^000000";
 	}
 	}
 	next;
 	next;
-	mes "[Jeremy]";
+	mes .@n$;
 	mes "That is all for the results of the card separation. Please come again.";
 	mes "That is all for the results of the card separation. Please come again.";
 	close;
 	close;
 }
 }
+malangdo,215,166,4	duplicate(CardSeparation_mal)	Jeremy#pa0829	553
+malangdo,208,166,6	duplicate(CardSeparation_mal)	Richard#pa0829	559

+ 1 - 0
npc/re/merchants/catalog.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: =========================================
 //===== Description: =========================================
+//= [Official Conversion]
 //= Catalogs allow players to easily search for items in-game,
 //= Catalogs allow players to easily search for items in-game,
 //= and to buy/sell directly from the catalog interface.
 //= and to buy/sell directly from the catalog interface.
 //===== Additional Comments: =================================
 //===== Additional Comments: =================================

+ 1 - 0
npc/re/merchants/flute.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Sells Falcon Flute and Wolf Flute.
 //= Sells Falcon Flute and Wolf Flute.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 First Version. [Masao]
 //= 1.0 First Version. [Masao]

+ 6 - 5
npc/re/merchants/quivers.txt

@@ -7,12 +7,13 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: =========================================
 //===== Description: =========================================
+//= [Official Conversion]
 //= Turns arrows into Arrow Quivers.
 //= Turns arrows into Arrow Quivers.
-// Breakdown of Subroutine "S_BuyQuiver"
-// arg(0): Type of Arrow to be packaged (item ID).
-// arg(1): How many of each 'getarg(0)' arrow per quiver.
-// arg(2): The cost of making a 'getarg(0)' quiver.
-// arg(3): The quiver given by the NPC (item ID).
+//= Breakdown of Subroutine "S_BuyQuiver"
+//= arg(0): Type of Arrow to be packaged (item ID).
+//= arg(1): How many of each 'getarg(0)' arrow per quiver.
+//= arg(2): The cost of making a 'getarg(0)' quiver.
+//= arg(3): The quiver given by the NPC (item ID).
 //===== Additional Comments: =================================
 //===== Additional Comments: =================================
 //= 1.0 Added Mora NPC. [Euphy]
 //= 1.0 Added Mora NPC. [Euphy]
 //= 1.1 Updated to match the official scripts. [Euphy]
 //= 1.1 Updated to match the official scripts. [Euphy]

+ 1 - 0
npc/re/merchants/renters.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Renewal-specific breeder NPCs.
 //= Renewal-specific breeder NPCs.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 2.1 Moved some renters to a separate renewal file. [Daegaladh]
 //= 2.1 Moved some renters to a separate renewal file. [Daegaladh]

+ 1 - 0
npc/re/merchants/stone_change.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: ===================================== 
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Organizes ores in a player's inventory.
 //= Organizes ores in a player's inventory.
 //===== Additional Comments: ================================= 
 //===== Additional Comments: ================================= 
 //= 1.0 First version.
 //= 1.0 First version.

+ 1 - 0
npc/re/other/turbo_track.txt

@@ -7,6 +7,7 @@
 //===== Compatible With: =====================================
 //===== Compatible With: =====================================
 //= rAthena SVN
 //= rAthena SVN
 //===== Description: ========================================= 
 //===== Description: ========================================= 
+//= [Official Conversion]
 //= Renewal duplicates.
 //= Renewal duplicates.
 //===== Additional Comments: =================================
 //===== Additional Comments: =================================
 //= 1.0 Split Mount Manager NPC.
 //= 1.0 Split Mount Manager NPC.

+ 2 - 0
npc/re/scripts_jobs.conf

@@ -28,3 +28,5 @@ npc: npc/re/jobs/3-2/wanderer.txt
 // - Novice
 // - Novice
 npc: npc/re/jobs/novice/novice.txt
 npc: npc/re/jobs/novice/novice.txt
 npc: npc/re/jobs/novice/supernovice_ex.txt
 npc: npc/re/jobs/novice/supernovice_ex.txt
+// - Job Repairs
+npc: npc/re/jobs/repair.txt