Ver código fonte

* Updated Magic Gear rental script and added many new locations.
* Split Geneticist Manuals shop (Renewal only) from main Alchemist shop script, and updated dialogue.
* Moved Izlude Bulletin Board and Signs to Pre-Renewal path.
* Updated Warlock book quest NPC name, and fixed a bug for Baby classes.
* Fixed unittalk displaying messages twice for players. (bugreport:7903)

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

Euphy 11 anos atrás
pai
commit
0fba5cb4a1

+ 4 - 4
doc/script_commands.txt

@@ -7214,7 +7214,7 @@ The command returns 0 upon success, and these values upon failure:
 
 ---------------------------------------
 
-*instance_npcname("<npc name>"{,<instance id>});
+*instance_npcname("<npc name>"{,<instance id>})
 
 Returns the unique name of the instanced script. If no ID is specified,
 the instance the script is attached to is used. If the script is not attached to
@@ -7223,7 +7223,7 @@ that fails, the script will come to a halt.
 
 ---------------------------------------
 
-*instance_mapname("<map name>"{,<instance id>});
+*instance_mapname("<map name>"{,<instance id>})
 
 Returns the unique name of the instanced map. If no instance ID is specified,
 the instance the script is attached to is used. If the script is not attached to
@@ -7232,7 +7232,7 @@ that fails, the command returns an empty string instead.
 
 ---------------------------------------
 
-*instance_id();
+*instance_id()
 
 Returns the unique instance id of the attached script. If the script is not
 attached to an instance, the instance of the currently attached player's party is
@@ -7250,7 +7250,7 @@ come to a halt.
 
 ---------------------------------------
 
-*instance_check_party(<party id>{,<amount>{,<min>{,<max>}}});
+*instance_check_party(<party id>{,<amount>{,<min>{,<max>}}})
 
 This function checks if a party meets certain requirements, returning 1 if all
 conditions are met and 0 otherwise. It will only check online characters.

+ 5 - 114
npc/merchants/alchemist.txt

@@ -1,134 +1,25 @@
 //===== rAthena Script ======================================= 
 //= Alchemist Shop
 //===== By: ================================================== 
-//= rAthena Team
+//= rAthena Dev Team
 //===== Current Version: ===================================== 
-//= 1.7
+//= 1.8
 //===== Compatible With: ===================================== 
 //= rAthena SVN
 //===== Description: ========================================= 
-//= Selling Alchemist Materials and Manuals
+//= Merchants for Alchemist Materials and Manuals.
 //===== Additional Comments: ================================= 
 //= 1.1 fixed Medicine Bowl issue, thanx 2 MasterOfMuppets
 //= 1.2 Reddozen's fixes of typos. added optional Elemental
-//= Potion Guide. [Lupus]
+//=     Potion Guide. [Lupus]
 //= 1.3 Deleted Elemental Potions Guide due to original quest [Lupus]
 //= 1.4 Alchemists can now purchase 2000 Medicine Bowls at once. [SinSloth]
 //= 1.5 Updated to Aegis 10.3 Standards. [L0ne_W0lf]
 //= 1.6 Corrected canceling purchase. [L0ne_W0lf]
 //= 1.7 Updated to match AEGIS script. [Masao]
+//= 1.8 Moved Craft Book Merchant to Renewal path. [Euphy]
 //============================================================ 
 
-alde_alche,31,186,3	script	Craft Book Salesman#alde	883,{
-
-	mes "[Craft Book Salesman]";
-	mes "Welcome.";
-	mes "I'm here to sell";
-	mes "^0000FFspecial craft books^000000 for Geneticists.";
-	next;
-	mes "[Craft Book Salesman]";
-	mes "Geneticists have some skills";
-	mes "that require craft books to activate.";
-	next;
-	mes "[Craft Book Salesman]";
-	mes "The more craft books you have,";
-	mes "the more skills you can use.";
-	next;
-	mes "[Craft Book Salesman]";
-	mes "Please understand that";
-	mes "I specialize in the sale of these special books and";
-	mes "I ^FF0000don't sell other items^000000.";
-	next;
-	mes "[Craft Book Salesman]";
-	mes "Okay then, here's the list of available craft books.";
-	next;
-	switch(select("[Apple Bomb Craft Book] 100,000 zeny:[Pineapple Bomb Craft Book] 100,000 zeny:[Coconut Bomb Craft Book] 100,000 zeny:[Melon Bomb Craft Book] 100,000 zeny:[Banana Bomb Craft Book] 100,000 zeny:[Plant Gene Cultivation Method] 100,000 zeny:[Superior Potion Craft Manual] 100,000 zeny:[Mix Cooking Book] 100,000 zeny:[Health Improvement Research Book] 100,000 zeny:[Vigor Drink Recipe] 100,000 zeny:Close")){
-	case 1:
-		callsub S_SellManual,6279,100000;
-		break;
-	case 2:
-		callsub S_SellManual,6280,100000;
-		break;
-	case 3:
-		callsub S_SellManual,6281,100000;
-		break;
-	case 4:
-		callsub S_SellManual,6282,100000;
-		break;
-	case 5:
-		callsub S_SellManual,6283,100000;
-		break;
-	case 6:
-		callsub S_SellManual,6284,100000;
-		break;
-	case 7:
-		callsub S_SellManual,6285,100000;
-		break;
-	case 8:
-		callsub S_SellManual,11022,100000;
-		break;
-	case 9:
-		callsub S_SellManual,11023,100000;
-		break;
-	case 10:
-		callsub S_SellManual,11024,100000;
-		break;
-	case 11:
-		mes "[Craft Book Salesman]";
-		mes "Thank you for your patronage.";
-		mes "Please come again.";
-		close;
-	}
-
-S_SellManual:
-	mes "[Craft Book Salesman]";
-	mes ""+getitemname(getarg(0))+"?";
-	mes "That'll be "+getarg(1)+" zeny ea.";
-	mes "How many of these books would you like to purchase?";
-	next;
-	input .@amount;
-	if (.@amount == 0) {
-		mes "[Craft Book Salesman]";
-		mes "Would you like to see some different books?";
-		close;
-	}
-	if (.@amount < 1 || .@amount > 99 ){
-		mes "[Craft Book Salesman]";
-		mes "You cannot purchase more than 100 at a time.";
-		close;
-	}
-	mes "[Craft Book Salesman]";
-	mes "You've entered "+.@amount+"x "+getitemname(getarg(0))+".";
-	mes "That'll be "+getarg(1) * .@amount+" Zeny.";
-	mes "Would you like to continue?";
-	next;
-	if (select("Yes:No") == 1) {
-		if (Zeny < getarg(1) * .@amount) {
-			mes "[Craft Book Salesman]";
-			mes "You don't";
-			mes "have enough zeny.";
-			mes "Check how much zeny";
-			mes "you have first.";
-			close;
-		}
-		if (checkweight(getarg(0),.@amount) == 0){
-			mes "[Craft Book Salesman]";
-			mes "It doesn't seem like you can carry everything.";
-			mes "Please check the space in your inventory.";
-			close;
-		}
-		mes "[Craft Book Salesman]";
-		mes "Thank you for your patronage.";
-		set Zeny,Zeny - getarg(1) * .@amount;
-		getitem getarg(0),.@amount;
-		close;
-	}
-	mes "[Craft Book Salesman]";
-	mes "Please take your time";
-	mes "before you make your decision.";
-	close;
-}
-
 alde_alche,24,188,3	script	Guild Dealer	740,{
 	if (checkweight(1201,1) == 0) {
 		mes "- Wait a minute! -";

+ 7 - 22
npc/other/bulletin_boards.txt

@@ -3,12 +3,12 @@
 //===== By: ==================================================
 //= MasterOfMuppets
 //===== Current Version: =====================================
-//= 1.8
+//= 1.9
 //===== Compatible With: =====================================
 //= Any Athena Version
 //===== Additional Comments: =================================
 //= 1.0 Added Alberta, Prontera, Izlude, Payon, Byalan Island,
-//= 	Archer Village, Payon Cave and Coal Mine
+//=     Archer Village, Payon Cave and Coal Mine
 //= 1.1 Geffen, Orc Dungeon
 //= 1.2 Added 5 more Boards [MasterOfMuppets]
 //= 1.3 Fixed spelling mistakes. [Nexon]
@@ -18,8 +18,9 @@
 //= 1.5a Fixed a small screw up with the color codes in the Glastheim BB [MasterOfMuppets]
 //= 1.5b Fixed another small screw up with the color codes in the Glastheim BB [Kayla]
 //= 1.6 Removed Duplicates [Silent]
-//= 1.7 Updated MOrroc NPCs to reflect episode 12.1 changes. [L0ne_W0lf]
+//= 1.7 Updated Morroc NPCs to reflect episode 12.1 changes. [L0ne_W0lf]
 //= 1.8 Updated Payon Cave Bulletion Board Locations. [Masao]
+//= 1.9 Moved Izlude NPC to Pre-RE path. [Euphy]
 //============================================================
 
 alberta,111,59,5	script	Bulletin Board#1	837,{
@@ -93,23 +94,7 @@ izlu2dun,104,92,5	script	Bulletin Board#4	837,{
 	mes "With a few exceptions, most of the monsters in this dungeon are of the Water attribute. Therefore, a Wind attribute weapon will help you greatly";
 	close;
 }
-	
-izlude,131,116,4	script	Bulletin Board#5	837,{
-	mes "[Izlude: The Satellite City]";
-	mes "Welcome to Izlude, the satellite of Prontera. Izlude was built to support Prontera's defense and to accommodate its burgeoning population";
-	next;
-	mes "[Izlude: The Satellite City]";
-	mes "Points of interest include the Swordsman Association building which allows adventurers to change their job to Swordsman, and the Battle Area that is North of Izlude.";
-	next;
-	mes "[Izlude: The Satellite City]";
-	mes "At the docks, you may take a ship and travel to ^123972Alberta^000000 or ^2F0400Byalan Island^000000.";
-	next;
-	mes "[Izlude: The Satellite City]";
-	mes "From Izlude, ^6D6FE0Prontera^000000 is located to the Northwest, and ^1F3A11Payon^000000 is located to the South.";
-	mes "Enjoy your travels in the Rune-Midgarts Kingdom.";
-	close;
-}
-	
+
 payon,178,108,5	script	Bulletin Board#06	837,{
 	mes "[Payon: The Mountain City]";
 	mes "Welcome to Payon, the mountain city. Payon has recently been renovated, so we hope you enjoy the clean, nice streets and buildings.";
@@ -131,7 +116,7 @@ payon,178,108,5	script	Bulletin Board#06	837,{
 	mes "Enjoy your travels."; 
 	close;
 }
-	
+
 pay_arche,79,31,5	script	Bulletin Board#07	837,{
 	mes "[Archer Village]"; 
 	mes "Welcome to the Payon Archer Village where Novices can change their jobs to Archer.";
@@ -153,7 +138,7 @@ pay_arche,39,134,5	script	Bulletin Board#08	837,{
 	mes "In the fifth level, there is a pretty, yet dreadful boss monster known as ^6B1312Moonlight^000000 that spawns at certain times. Approach with extreme caution.";
 	close;
 }
-	
+
 prontera,148,49,5	script	Bulletin Board#09	837,{
 	mes "[Prontera: Capital of the]";
 	mes "[Rune-Midgards Kingdom]";

+ 2 - 15
npc/other/msg_boards.txt

@@ -4,7 +4,7 @@
 //= kobra_k88
 //= L0ne_W0lf
 //===== Current Version: ===================================== 
-//= 1.6
+//= 1.7
 //===== Compatible With: ===================================== 
 //= [Official Conversion]
 //= rAthena 7.15 +
@@ -24,6 +24,7 @@
 //= 1.5 Removed a duplicate related to the Sign Quest. [SinSloth]
 //= 1.5 Corrected NPC names to fall within proper restrictions. [L0ne_W0lf]
 //= 1.6 Commented out conflicting npcs. (bugreport:4093) [L0ne_W0lf]
+//= 1.7 Moved Izlude NPCs to Pre-RE path. [Euphy]
 //============================================================
 
 // Prontera
@@ -237,20 +238,6 @@ aldebaran,217,222,1	script	Sign#Alde5	111,{
 	close;
 }
 
-// Izlude
-//============================================================
-izlude,54,139,1	script	Sign#Iz1	111,{
-	mes "^993300- The Sign Reads -^000000";
-	mes "Welcome to the Swordsman Academy.";
-	close;
-}
-
-izlude,144,148,1	script	Sign#Iz2	111,{
-	mes "^993300- The Sign Reads -^000000";
-	mes "Welcome.";
-	close;
-}
-
 // Alberta
 //============================================================
 alberta,35,241,1	script	Billboard#Alb1	111,{

+ 27 - 0
npc/pre-re/other/bulletin_boards.txt

@@ -0,0 +1,27 @@
+//===== rAthena Script =======================================
+//= Official scripts for beginners from iRO
+//===== By: ==================================================
+//= Euphy
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= Any Athena Version
+//===== Additional Comments: =================================
+//= 1.0 Moved Izlude NPCs to Pre-RE path.
+//============================================================
+
+izlude,131,116,4	script	Bulletin Board#5	837,{
+	mes "[Izlude: The Satellite City]";
+	mes "Welcome to Izlude, the satellite of Prontera. Izlude was built to support Prontera's defense and to accommodate its burgeoning population";
+	next;
+	mes "[Izlude: The Satellite City]";
+	mes "Points of interest include the Swordsman Association building which allows adventurers to change their job to Swordsman, and the Battle Area that is North of Izlude.";
+	next;
+	mes "[Izlude: The Satellite City]";
+	mes "At the docks, you may take a ship and travel to ^123972Alberta^000000 or ^2F0400Byalan Island^000000.";
+	next;
+	mes "[Izlude: The Satellite City]";
+	mes "From Izlude, ^6D6FE0Prontera^000000 is located to the Northwest, and ^1F3A11Payon^000000 is located to the South.";
+	mes "Enjoy your travels in the Rune-Midgarts Kingdom.";
+	close;
+}

+ 29 - 0
npc/pre-re/other/msg_boards.txt

@@ -0,0 +1,29 @@
+//===== rAthena Script ======================================= 
+//= Misc. Message Boards
+//===== By: ================================================== 
+//= Euphy
+//===== Current Version: ===================================== 
+//= 1.0
+//===== Compatible With: ===================================== 
+//= [Official Conversion]
+//= rAthena 7.15 +
+//===== Description: ========================================= 
+//= Misc. Message Boards for:
+//=  - Izlude
+//===== Additional Comments: ================================= 
+//= 1.0 Moved Izlude NPCs to Pre-RE path.
+//============================================================
+
+// Izlude
+//============================================================
+izlude,54,139,1	script	Sign#Iz1	111,{
+	mes "^993300- The Sign Reads -^000000";
+	mes "Welcome to the Swordsman Academy.";
+	close;
+}
+
+izlude,144,148,1	script	Sign#Iz2	111,{
+	mes "^993300- The Sign Reads -^000000";
+	mes "Welcome.";
+	close;
+}

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

@@ -52,7 +52,9 @@ npc: npc/pre-re/other/arena/arena_party.txt
 npc: npc/pre-re/other/arena/arena_point.txt
 npc: npc/pre-re/other/arena/arena_room.txt
 // --------------------------------------------------------------
+npc: npc/pre-re/other/bulletin_boards.txt
 npc: npc/pre-re/other/mercenary_rent.txt
+npc: npc/pre-re/other/msg_boards.txt
 npc: npc/pre-re/other/resetskill.txt
 
 // --------------------------- Quests ---------------------------

+ 1 - 1
npc/re/instances/OldGlastHeim.txt

@@ -233,7 +233,7 @@ OnEnable:
 		select("The Ymir's Heart. Himmelmez...");
 		mes "["+strcharinfo(0)+"]";
 		mes "Himmelmez, the Valkyrie of the dead is looking to get a piece of the Ymir's heart hidden in the castle!";
-		unittalk getcharid(3),"Himmelmez, the Valkyrie of the dead is looking to get a piece of the Ymir's heart hidden in the castle";
+		unittalk getcharid(3),"Himmelmez, the Valkyrie of the dead is looking to get a piece of the Ymir's heart hidden in the castle!";
 		next;
 		mes "[Heinrich]";
 		mes "Haha. That's a nice joke. Now tell me what brings you here.";

+ 3 - 3
npc/re/merchants/3rd_trader.txt

@@ -21,7 +21,7 @@
 // Poison Herb Merchants (Guillotine Cross)
 //============================================================
 -	script	::phs	-1,{
-	if (checkweight(1201,1) == 0 || MaxWeight - Weight < 20000) {
+	if (checkweight(1201,1) == 0 || MaxWeight - Weight < 2000) {
 		mes "- Wait a minute !! -";
 		mes "- Currently you're carrying -";
 		mes "- too many items with you. -";
@@ -87,7 +87,7 @@ lhz_in02,16,205,4	duplicate(phs)	Poison Herb Merchant#lhz	877
 // Rune Stone Merchants (Rune Knight)
 //============================================================
 -	script	::runesale	-1,{
-	if (checkweight(1201,1) == 0 || MaxWeight - Weight < 20000) {
+	if (checkweight(1201,1) == 0 || MaxWeight - Weight < 2000) {
 		mes "- Wait a minute !! -";
 		mes "- Currently you're carrying -";
 		mes "- too many items with you. -";
@@ -218,7 +218,7 @@ job3_guil01,91,93,3	script	Rare Herb Collector	49,{
 // Point Merchants (Sorcerer)
 //============================================================
 -	script	::pss	-1,{
-	if (checkweight(1201,1) == 0 || MaxWeight - Weight < 20000) {
+	if (checkweight(1201,1) == 0 || MaxWeight - Weight < 2000) {
 		mes "- Wait a minute !! -";
 		mes "- Currently you're carrying -";
 		mes "- too many items with you. -";

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

@@ -0,0 +1,118 @@
+//===== rAthena Script ======================================= 
+//= Alchemist Shop
+//===== By: ================================================== 
+//= rAthena Dev Team
+//===== Current Version: ===================================== 
+//= 1.0
+//===== Compatible With: ===================================== 
+//= rAthena SVN
+//===== Description: ========================================= 
+//= Merchants for Alchemist Materials and Manuals.
+//===== Additional Comments: ================================= 
+//= 1.0 Split Geneticist shop from main file. [Euphy]
+//=     Updated dialogue to match the official script.
+//============================================================ 
+
+alde_alche,31,186,3	script	Craft Book Merchant#alde	883,{
+	mes "[Craft Book Merchant]";
+	mes "Welcome.";
+	mes "I'm here to sell";
+	mes "^0000FFspecial craft books^000000 for Geneticists.";
+	next;
+	mes "[Craft Book Merchant]";
+	mes "Geneticists have some skills";
+	mes "that require craft books to activate.";
+	next;
+	mes "[Craft Book Merchant]";
+	mes "The more craft books you have,";
+	mes "the more skills you can use.";
+	next;
+	mes "[Craft Book Merchant]";
+	mes "Please understand that";
+	mes "I specialize in the sale of these special books and";
+	mes "I ^FF0000don't sell other items^000000.";
+	next;
+	mes "[Craft Book Merchant]";
+	mes "Would you like to take a look at my craft books?";
+	next;
+	if(select("Sure.:No.") == 2) {
+		mes "[Craft Book Merchant]";
+		mes "Thank you for visiting my shop.";
+		mes "Please be safe on your travels.";
+		close;
+	}
+	if (checkweight(1201,1) == 0) {
+		mes "[Craft Book Merchant]";
+		mes "I'm sorry, but your inventory is almost full.";
+		mes "Please empty your inventory first.";
+		close;
+	}
+	if (MaxWeight - Weight < 2500) {
+		mes "[Craft Book Merchant]";
+		mes "Please empty your inventory first.";
+		close;
+	}
+	mes "[Craft Book Merchant]";
+	mes "Okay then, here's the list of available craft books.";
+	next;
+	switch(select("[Apple Bomb Craft Book] 100,000 zeny:[Pineapple Bomb Craft Book] 100,000 zeny:[Coconut Bomb Craft Book] 100,000 zeny:[Melon Bomb Craft Book] 100,000 zeny:[Banana Bomb Craft Book] 100,000 zeny:[Plant Gene Cultivation Method] 100,000 zeny:[Superior Potion Craft Manual] 100,000 zeny:[Mix Cooking Book] 100,000 zeny:[Health Improvement Research Book] 100,000 zeny:[Vigor Drink Recipe] 100,000 zeny:Close")){
+	case 1: set .@item,6279; break;
+	case 2: set .@item,6280; break;
+	case 3: set .@item,6281; break;
+	case 4: set .@item,6282; break;
+	case 5: set .@item,6283; break;
+	case 6: set .@item,6284; break;
+	case 7: set .@item,6285; break;
+	case 8: set .@item,11022; break;
+	case 9: set .@item,11023; break;
+	case 10: set .@item,11024; break;
+	case 11:
+		mes "[Craft Book Merchant]";
+		mes "Thank you for your patronage.";
+		mes "Please come again.";
+		close;
+	}
+	mes "[Craft Book Merchant]";
+	mes "^0000FF["+getitemname(.@item)+"] costs";
+	mes "100,000 zeny.";
+	mes "How many would you like to purchase?";
+	next;
+	input .@amount;
+	if (.@amount == 0) {
+		mes "[Craft Book Merchant]";
+		mes "Would you like to see some different books?";
+		close;
+	}
+	if (.@amount < 1 || .@amount > 99 ){
+		mes "[Craft Book Merchant]";
+		mes "You cannot purchase more than 100 at a time.";
+		close;
+	}
+	mes "[Craft Book Merchant]";
+	mes "You've entered "+.@amount+"x ^0000FF["+getitemname(.@item)+"]^000000 to be purchased.";
+	mes "Would you like to continue?";
+	next;
+	if (select("Yes:No") == 1) {
+		set .@total, .@amount * 100000;
+		if (Zeny < .@total) {
+			mes "[Craft Book Merchant]";
+			mes "I'm sorry, but you don't have enough money.";
+			close;
+		}
+		if (checkweight(.@item,.@amount) == 0){
+			mes "[Craft Book Merchant]";
+			mes "It doesn't seem like you can carry everything.";
+			mes "Please check the space in your inventory.";
+			close;
+		}
+		mes "[Craft Book Merchant]";
+		mes "Thank you for your patronage.";
+		set Zeny,Zeny - .@total;
+		getitem .@item,.@amount;
+		close;
+	}
+	mes "[Craft Book Merchant]";
+	mes "Please take your time";
+	mes "before you make your decision.";
+	close;
+}

+ 37 - 12
npc/re/merchants/renters.txt

@@ -10,9 +10,10 @@
 //= Renewal-specific breeder NPCs.
 //===== Additional Comments: ================================= 
 //= 2.1 Moved some renters to a separate renewal file. [Daegaladh]
+//= 2.2 Updated to match the official scripts. [Euphy]
 //============================================================ 
 
-// Dragon Breeder on the Rune Knight job change map, couldn't find NPC on iRO.
+// Dragon Breeder
 //============================================================
 job3_rune01,88,62,5	script	Dragon Breeder	105,{
 	mes "[Dragon Breeder]";
@@ -148,21 +149,35 @@ prontera,125,208,5	script	Peco Peco Remover	105,{
 
 // Magic Gear Renter
 //============================================================
-prontera,163,178,3	script	Magic Gear Master	105,{
+-	script	::mgm	-1,{
 	mes "[Magic Gear Master]";
 	if (Class == Job_Mechanic || Class == Job_Mechanic_T || Class == Job_Baby_Mechanic) {
-		mes "Welcome. Would you like to rent a Magic Gear?";
+		mes "Welcome, Mechanic.";
+		mes "Would you like to rent a Pushcart or";
+		mes "ride a Magic Gear?";
 		next;
-		switch(select("Yes:No")) {
+		switch(select("Rent a Pushcart:Ride a Magic Gear:Cancel")) {
 		case 1:
-			if (!getskilllv("NC_MADOLICENCE")) {
+			if (checkcart()) {
+				mes "[Magic Gear Master]";
+				mes "I'm sorry, but you already";
+				mes "have a Pushcart.";
+				close;
+			}
+			setcart;
+			mes "[Magic Gear Master]";
+			mes "There you go!";
+			close;
+		case 2:
+			if (checkmadogear()) {
 				mes "[Magic Gear Master]";
-				mes "Please learn how to use a Magic Gear first.";
+				mes "I'm sorry, but you're already";
+				mes "riding a Magic Gear.";
 				close;
 			}
-			else if (checkmadogear()) {
+			else if (!getskilllv("NC_MADOLICENCE")) {
 				mes "[Magic Gear Master]";
-				mes "You already have a Magic Gear.";
+				mes "Please learn the skill to get the Magic Gear License first.";
 				close;
 			}
 			else if(ismounting()) {
@@ -171,14 +186,24 @@ prontera,163,178,3	script	Magic Gear Master	105,{
 				close;
 			}
 			setmadogear;
-			close;
-		case 2:
 			mes "[Magic Gear Master]";
-			mes "I see. Then have a great day.";
+			mes "Have fun, and please come again!";
+			close;
+		case 3:
 			close;
 		}
 	}
 	mes "How may I help you?";
 	mes "Magic Gears are only available for Mechanics.";
 	close;
-}
+}
+prontera,163,178,3	duplicate(mgm)	Magic Gear Master#prt	105
+geffen,103,55,5	duplicate(mgm)	Magic Gear Master#gef	105
+payon,166,106,5	duplicate(mgm)	Magic Gear Master#pay	105
+aldebaran,133,112,5	duplicate(mgm)	Magic Gear Master#alde	105
+yuno,167,187,3	duplicate(mgm)	Magic Gear Master#yuno	105
+rachel,106,134,5	duplicate(mgm)	Magic Gear Master#ra	105
+dicastes01,187,207,3	duplicate(mgm)	Magic Gear Master#dic	105
+manuk,273,212,5	duplicate(mgm)	Magic Gear Master#man	105
+splendide,180,174,5	duplicate(mgm)	Magic Gear Master#spl	105
+mid_camp,242,243,3	duplicate(mgm)	Magic Gear Master#mid	105

+ 79 - 81
npc/re/quests/magic_books.txt

@@ -4,7 +4,7 @@
 //= Masao
 //= Credits to Muad_Dib for the translation.
 //===== Current Version: ===================================== 
-//= 1.1
+//= 1.1a
 //===== Compatible With: ===================================== 
 //= rAthena
 //===== Description: ========================================= 
@@ -13,9 +13,10 @@
 //===== Additional Comments: ================================= 
 //= 1.0 First Version. [Masao]
 //= 1.1 Optimized. [Euphy]
+//= 1.1a Updated NPC name to "Master Velofos". [Euphy]
 //============================================================ 
 
-geffen_in,176,105,4	script	Magic Book Master Velof	64,{
+geffen_in,176,105,4	script	Master Velofos	64,{
 	if (checkweight(1201,1) == 0) {
 		mes "You're carrying too many items. Please make some room in your bag first.";
 		close;
@@ -25,249 +26,246 @@ geffen_in,176,105,4	script	Magic Book Master Velof	64,{
 		close;
 	}
 	if ((Upper == 2) && (Class != Job_Baby_Warlock)) {
-		mes "[Magic Book Master Velof]";
+		mes "[Master Velofos]";
 		mes "What are you, a baby?";
 		mes "I'm not here to babysit. Get lost!";
 		close;
 	}
 	if ((Class != Job_Warlock) && (Class != Job_Warlock_T) && (Class != Job_Baby_Warlock)) {
-		mes "[Magic Book Master Velof]";
+		mes "[Master Velofos]";
 		mes "Ha ha, are you also seeking new knowledge?";
 		next;
-		mes "[Magic Book Master Velof]";
+		mes "[Master Velofos]";
 		mes "I'm sorry, but my knowledge doesn't concern you.";
 		close;
 	}
 	if (getskilllv(2230) < 1) {
-		mes "[Magic Book Master Velof]";
-		mes "Well you've met all the qualifications except one: you need the Release spell.";
+		mes "[Master Velofos]";
+		mes "Well, you've met all the qualifications except one: you need the Release spell.";
 		next;
-		mes "[Magic Book Master Velof]";
+		mes "[Master Velofos]";
 		mes "Learn the spell first. I've got so many things to tell you.";
 		close;
 	}
 	if ((getskilllv(2230) > 0) && (Class == Job_Warlock) || (Class == Job_Warlock_T) || (Class == Job_Baby_Warlock)) {
-		mes "[Magic Book Master Velof]";
+		mes "[Master Velofos]";
 		mes "Welcome, my friend.";
 		mes "Congratulations on entering a brand new world of magic.";
 		next;
-		mes "[Magic Book Master Velof]";
+		mes "[Master Velofos]";
 		mes "We magic practitioners are always thirsty for new knowledge and power.";
 		next;
-		mes "[Magic Book Master Velof]";
+		mes "[Master Velofos]";
 		mes "We endure great hardship and pain to achieve what we want. When we finally do, the sense of accomplishment defies description. That's why both you and I have chosen the way of magic.";
 		next;
-		mes "[Magic Book Master Velof]";
+		mes "[Master Velofos]";
 		mes "By the way, what brings you to me today?";
 		next;
 		switch (select("Nothing.:Do you know the Reading Spell Book?:What's the Freezing Spell?:Can I have a Magic Book?:Can I use the Reading Spell Book without the Freezing Spell?:About the Ultimate Magic Book")) {
 		case 1:
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Hah! You're silly.";
 			close;
 		case 2:
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Reading Spell Book literally means 'read a spell book.' Do you know how to use Magic Books?";
 			next;
 			switch (select("Yes, I do.:No, I don't.")) {
 			case 1:
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Well then, you don't need an additional lecture.";
 				close;
 			case 2:
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Magic Books are an advanced type of magic scroll. While spells on scrolls disappear after one use, the ones in Magic Books can be cast multiple times.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Let's compare a spell on a scroll to a wire. When the wire is used to open a door or do something else, it's bent and crushed, losing its original shape. A spell from a Magic Book is more like a shape memory alloy.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Huh, don't you now what shape memory alloy is? Eh, just remember this: a wire made from shape memory alloy restores its shape over time.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Like the alloy, a spell on a Magic Book remains after a use, although reusing the spell has a downtime for its restoration.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "...Oh, I didn't mean to talk for too long. Anyways, you can use Magic Books to cast spells that you've learned. Its concept is different from normal spells.";
 				next;
 				select("What's the difference?");
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Why do you have to write your existing spells in Magic Books, you asked?";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "That's a good question. It's related to Magic Binding.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "You already learned Release, which allows you to hold the energy of the four different elements before the actual casting. Magic Binding is similar to Release.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Since you've learned Release, you're capable of using Magic Binding as well. Well, let's talk about that later.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "You know how to hold an existing spell, and then cast it at a desired timing via Release.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Carrying the globes of the four elements is also related to Magic Binding.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "As you know, the four elements are Fire, Water, Wind, and Earth. Being able to employ them freely is the essential principle of magic.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "We Humans use torches to keep fire, fans to blow wind, and bowls to hold water. We also use clay to make earthenware.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Those activities may differ from magic, but both are the same in the sense of employing the four elements.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "When you use complex magic spells to summon a storm, drop lightning, or burn an area, that consumes a lot of your energy, both physically and mentally.";
 				next;
-				mes "[Magic Book Master Velof]";
-				mes "When you fail to bind such powerful magic spells or fail to control them,";
+				mes "[Master Velofos]";
+				mes "When you fail to bind such powerful magic spells or fail to control them, you can receive irreparable damage to your mind and body.";
 				next;
-				mes "[Magic Book Master Velof]";
-				mes "you can receive irreparable damage to your mind and body.";
-				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "That's why we use Magic Books to reduce that burden. It helps summon pre-cast spells while you're focusing on binding their magic power.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "There's one downside though: Magic Books cannot be used for spells that you haven't learned.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "As I said earlier, spells in Magic Books tend to go back to what they are.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "That said, as a Circler, you cannot change or create spells in Magic Books.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Even if you create one, its power will be beyond your capacity.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "In order to use the Reading Spell Book, you must learn the Freezing Spell to bind magic.";
 				close;
 			}
 		case 3:
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "The Freezing Spell is used for Magic Binding. It helps you to insert a magic spell to a circle.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Circles of magic work organically with each other. When you use the Freezing Spell to bind a spell, the spell won't activate until you cast the release spell.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Of course, binding a spell continuously consumes your mana, but it consumes less mana than conventional magic spells.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Magic Binding becomes more difficult when you use more powerful magic spells.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "For weak spells, you can bind two to three of them with your circle. For more powerful spells, maybe one or two is possible.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "That all depends on your ability to control your spells. You'll have to try and experience Magic Binding after you first learn it to really understand.";
 			close;
 		case 4:
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "I'm sorry, but I only have Magic Books for beginners, but they're obviously not suitable for you. Do you still want one?";
 			next;
 			switch (select("Sure thing.:Where can I find advanced books?")) {
 			case 1:
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "Please go talk to [Lea] in the Archive. Tell her that you need one of the Magic Books that I've stored in there.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "For your information, she won't give it to you without anything in return. Expect her to ask you for something!";
 				if (wm_book < 1) set wm_book, 1;
 				close;
 			case 2:
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "I'm sorry, but our management has recently decided to limit the availability of Magic Books for Multi Circlers. It's because their numbers are increasing more quickly than we expected.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "You could find one if you try hard, but I don't have any with me.";
 				next;
-				mes "[Magic Book Master Velof]";
+				mes "[Master Velofos]";
 				mes "If our management releases the restriction, you'll be the first one to know. Don't worry.";
 				close;
 			}
 		case 5:
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Nothing will happen when you try to bind magic without using Magic Binding because you have nothing to hold magic.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "It's like water that needs a bowl to stay in place.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "The problem is when you try to forcefully cast a spell that you haven't learned. It'll definately backfire on you.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Of course, the damage won't be severe: you'll fall asleep or be thrown into confusion. This is all because there's a conflict between your Magic Book and the force of Magic Binding when you're trying to summon and hold a unlearned spell.";
 			next;
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Don't try it out just to see what happens for yourself! Falling asleep while casting a spell? There's nothing more humiliating than that to magic practitioners like us.";
 			close;
 		case 6:
 			if ((BaseLevel > 139) && (getskilllv(2217) > 0) || (getskilllv(2213) > 0)) {
 				if(mac_book < 1){
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "I'm sorry, but could you ask someone else? I'm kind of busy right now.";
 					close;
 				}
 				if (mac_book == 1) {
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "Huh, are you looking for the Ultimate Magic Book? Who sent you?";
 					next;
 					select("Ms. Lea.");
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "I'm sorry, but there's not much information left about the Ultimate Magic Book.";
 					next;
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "A few scholars in the Midgard Continent once tried to collect ancient Magic Books and reproduce that book, but...";
 					next;
 					select("But what?");
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "Oh yes, perhaps he might know something.";
 					next;
 					select("Yes, I knew this was coming!");
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "My brother is just like you. He's very interested in recreating the Ultimate Magic Book.";
 					next;
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "His name is Galfos.";
 					mes "He's been taking a great interest in the ancient Magic Books.";
 					next;
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "I didn't support him or give him any advice for his research since I thought he'd give on it pretty quickly, but...";
 					next;
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "If he's discovered anything useful, maybe it can helpful to you.";
 					next;
 					select("Where's Galfos now?");
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "I've heard that he's near the Expedition Camp beyond the Dimensional Rift to seek information about the ancient Magic Books.";
 					next;
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "If you want to see him, you should prepare for a long journey.";
 					set mac_book,2;
 					close;
 				}
 				if (mac_book > 1) {
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "Galfos is near the Expedition Camp beyond the Dimensional Rift.";
 					next;
-					mes "[Magic Book Master Velof]";
+					mes "[Master Velofos]";
 					mes "If you want to see him, you should prepare for a long journey.";
 					close;
 				}
 			}
-			mes "[Magic Book Master Velof]";
+			mes "[Master Velofos]";
 			mes "Ha ha, I'm sorry, but you should focus on strengthening your body rather than creating Magic Books.";
 			close;
 		}
 	}
-	mes "[Magic Book Master Velof]";
+	mes "[Master Velofos]";
 	mes "Ha ha, are you also seeking new knowledge?";
 	next;
-	mes "[Magic Book Master Velof]";
+	mes "[Master Velofos]";
 	mes "I'm sorry, but my knowledge doesn't concern you.";
 	close;
 }
@@ -281,14 +279,14 @@ geffen_in,175,112,4	script	Lea	123,{
 		mes "You're overweight with items. Please lose some item weight first.";
 		close;
 	}
-	if ((wm_book > 0) && (Class == Job_Warlock) || (Class == Job_Warlock_T) || (Class == Job_Baby_Warlock)) {
+	if (wm_book > 0 && (Class == Job_Warlock || Class == Job_Warlock_T || Class == Job_Baby_Warlock)) {
 		mes "[Lea]";
 		mes "You can only read books here. If you'd like to borrow any books, please receive an approval from 1 manager and 1 High Mage.";
 		next;
 		mes "[Lea]";
 		mes "How may I help you?";
 		next;
-		select("Master Velof asked me to bring his Magic Book.");
+		select("Master Velofos asked me to bring his Magic Book.");
 		mes "[Lea]";
 		mes "Are you borrowing a book?";
 		next;
@@ -480,7 +478,7 @@ geffen_in,175,112,4	script	Lea	123,{
 				mes "Frankly, I've never even seen the Ultimate Magic Book.";
 				next;
 				mes "[Lea]";
-				mes "You should ask Master Velof if you want to know more about that book.";
+				mes "You should ask Master Velofos if you want to know more about that book.";
 				next;
 				mes "[Lea]";
 				mes "I'm sorry that I can't help you more than that.";
@@ -489,7 +487,7 @@ geffen_in,175,112,4	script	Lea	123,{
 			}
 			if ((BaseLevel > 139) && (mac_book > 0) && ((getskilllv(2217) > 0) || (getskilllv(2213) > 0))) {
 				mes "[Lea]";
-				mes "You should ask Master Velof for some information about that book.";
+				mes "You should ask Master Velofos for some information about that book.";
 				close;
 			}
 			mes "[Lea]";
@@ -517,7 +515,7 @@ mid_camp,255,244,4	script	Galfos	735,{
 		mes "You're overweight with items. Please lose some item weight first.";
 		close;
 	}
-	if (Upper == 2) {
+	if ((Upper == 2) && (Class != Job_Baby_Warlock)) {
 		mes "[Galfos]";
 		mes "What are you, a baby?";
 		mes "I'm not here to babysit. Get lost!";
@@ -533,7 +531,7 @@ mid_camp,255,244,4	script	Galfos	735,{
 		mes "Ah, I'll get myself in trouble if I stay here any longer. Maybe I'm already in...";
 		close;
 	}
-	if ((BaseLevel < 140) || (getskilllv(2217) < 1) && (getskilllv(2213) < 1)) {
+	if (BaseLevel < 140 || (getskilllv(2217) < 1 && getskilllv(2213) < 1)) {
 		mes "[Galfos]";
 		mes "I'm sorry, but I don't talk to people that aren't even ready for this.";
 		close;
@@ -554,7 +552,7 @@ mid_camp,255,244,4	script	Galfos	735,{
 		next;
 		select("You're Velof's brother, right?");
 		mes "[Galfos]";
-		mes "Yes, I'm Galfos, and Velof is my brother.";
+		mes "Yes, I'm Galfos, and Velofos is my brother.";
 		next;
 		mes "[Galfos]";
 		mes "Wait a minute,";

+ 1 - 1
npc/re/quests/quests_malaya.txt

@@ -17,7 +17,7 @@
 //=     quests [DeadlySilence]
 //============================================================
 
-// Cautious Village and subsequent :: malaya_hi
+// Cautious Village and subsequent quests :: malaya_hi
 //============================================================
 malaya,266,76,3	script	Rodel the Guard#malaya	570,4,4,{
 	if (MaxWeight - Weight < 1000 || checkweight(1201,1) == 0) {

+ 1 - 0
npc/re/scripts_athena.conf

@@ -62,6 +62,7 @@ npc: npc/re/kafras/kafras.txt
 // -------------------------- Merchant --------------------------
 npc: npc/re/merchants/3rd_trader.txt
 npc: npc/re/merchants/advanced_refiner.txt
+npc: npc/re/merchants/alchemist.txt
 npc: npc/re/merchants/ammo_boxes.txt
 npc: npc/re/merchants/ammo_dealer.txt
 //npc: npc/re/merchants/blessed_refiner.txt

+ 0 - 2
src/map/script.c

@@ -15596,8 +15596,6 @@ BUILDIN_FUNC(unittalk)
 		StringBuf_Init(&sbuf);
 		StringBuf_Printf(&sbuf, "%s : %s", status_get_name(bl), message);
 		clif_disp_overhead(bl, StringBuf_Value(&sbuf));
-		if( bl->type == BL_PC )
-			clif_displaymessage(((TBL_PC*)bl)->fd, StringBuf_Value(&sbuf));
 		StringBuf_Destroy(&sbuf);
 	}