Selaa lähdekoodia

Implemented Ghost Palace exchange NPC (#4003)

Fixed #3936

Thanks to @aleos89 @Angelic234 and @zackdreaver !
Atemo 3 vuotta sitten
vanhempi
commit
df65d5ddfc

+ 3 - 2
db/re/item_db_etc.yml

@@ -21039,9 +21039,10 @@ Body:
       NoAuction: true
   - Id: 6672
     AegisName: Shard_of_Gray
-    Name: Shard of Gray
+    Name: Gray Shard
     Type: Etc
-    Buy: 10
+    Sell: 1
+    Weight: 1
     Flags:
       BuyingStore: true
     Trade:

+ 10 - 9
npc/re/instances/GhostPalace.txt

@@ -883,15 +883,16 @@ OnTimer28500:
 	mes "Hey there, are you alive?";
 	mes "I did not expect to meet someone who is still alive.";
 	next;
+	.@item_name_req$ = getitemname(6672);// Shard_of_Gray
 	mes "[King]";
-	mes "Do you possibly have the ^006400Gray Shard^000000?";
+	mes "Do you possibly have the ^006400" + .@item_name_req$ + "^000000?";
 	mes "Can you give it to me?";
 	mes "The memories of the faithful royal guard";
 	mes "and the memories of everyone he loved";
 	mes "are contained inside of these shards.";
 	next;
 	mes "[King]";
-	mes "Will you give the ^006400Gray Shard^000000 to me?";
+	mes "Will you give the ^006400" + .@item_name_req$ + "^000000 to me?";
 	mes "The guilt is eating my soul.";
 	mes "My soul is trapped inside the Ghost Palace.";
 	next;
@@ -899,7 +900,7 @@ OnTimer28500:
 	mes "I am collecting Sakray's abandoned memories from these shards.";
 	next;
 	mes "[King]";
-	mes "If you give any ^006400Gray Shard^000000s to me, I can make equipment for you.";
+	mes "If you give any ^006400" + .@item_name_req$ + "^000000s to me, I can make equipment for you.";
 	next;
 	mes "[King]";
 	mes "The cursed knight...";
@@ -923,16 +924,16 @@ OnTimer28500:
 			mes "Someday, Sakray will";
 			mes "get out of this curse for sure.";
 			mes "I believe";
-			mes "^006400Gray Shard^000000s are the only method";
+			mes "^006400" + .@item_name_req$ + "^000000s are the only method";
 			mes "to save him....";
 			close;
 		}
 		.@cost = ( .@s > 13 ? 100 : 200 );
 		mes "[King]";
 		mes "To make a ^FF0000" + .@item_name$[.@s] + "^000000";
-		mes "I need " + .@cost + " ^006400Gray Shard^000000.";
+		mes "I need " + .@cost + " ^006400" + .@item_name_req$ + "^000000.";
 		next;
-		if (select( "Cancel", "Hand over " + .@cost + " Gray Shard." ) == 1) {
+		if (select( "Cancel", "Hand over " + .@cost + " " + .@item_name_req$ + "." ) == 1) {
 			mes "[King]";
 			mes "Someday, Sakray will";
 			mes "get out of this curse for sure.";
@@ -941,15 +942,15 @@ OnTimer28500:
 		}
 		if (countitem(6672) < .@cost) {
 			mes "[King]";
-			mes "You do not have enough ^006400Gray Shard^000000";
+			mes "You do not have enough ^006400" + .@item_name_req$ + "^000000";
 			mes "to make a ^FF0000" + .@item_name$[.@s] + "^000000.";
-			mes "I need " + .@cost + " ^006400Gray Shard^000000.";
+			mes "I need " + .@cost + " ^006400" + .@item_name_req$ + "^000000.";
 			next;
 			continue;
 		}
 		mes "[King]";
 		mes "I will make a ^FF0000" + .@item_name$[.@s] + "^000000";
-		mes "with " + .@cost + " ^006400Gray Shard^000000.";
+		mes "with " + .@cost + " ^006400" + .@item_name_req$ + "^000000.";
 		next;
 		mes "You see a light through the folded hands of the king and it gradually takes on a shape.";
 		next;

+ 121 - 0
npc/re/merchants/ghost_palace_exchange.txt

@@ -0,0 +1,121 @@
+//===== rAthena Script =======================================
+//= Ghost Palace Exchange NPC.
+//===== Description: =========================================
+//= Walkthrough Conversion.
+//===== Changelogs: ==========================================
+//= 1.0 First Version. [Capuche]
+//============================================================
+
+dali02,51,130,4	script	Dimension Traveler	4_F_SHABBY,{
+	if (checkweight(28100,1) == 0) {// Thanos Axe
+		mes "- You cannot proceed because you have too many items with you. -";
+		close;
+	}
+	.@item_name_req$ = getitemname(6672);// Shard_of_Gray
+	mes "[Dimension Traveler]";
+	mes "Adventurer friend, <ITEM>[" + .@item_name_req$ + "]<INFO>6672</INFO></ITEM> is what I need. How about exchanging it with something I have?";
+	next;
+	.@type = select( "Show me your weapon.", "Show me your armor.", "Anything special?", "I do not need." ) - 1;
+	mes "[Dimension Traveler]";
+	switch(.@type) {
+	case 0:
+		mes "Oh! Are you interested in weapons? We have all the weapons we can get from the Ghost Palace. Why don't you choose one?";
+		break;
+	case 1:
+		mes "Armor? We have all the armors we can get from the Ghost Palace. Why don't you choose one?";
+		break;
+	case 2:
+		mes "Huhh! It seems like many of them already heard that I have the best stuff. Feel free to check out my collections.";
+		break;
+	case 3:
+		mes "Goodbye friend~ Come again!";
+		close;
+	}
+	next;
+	mes "[Dimension Traveler]";
+	mes "Ah! The number that is written beside <ITEM>[" + .@item_name_req$ + "]<INFO>6672</INFO></ITEM> will be needed.";
+	mes "Please keep that in mind.";
+
+	switch(.@type) {
+	case 0:
+		setarray .@items[0],
+			13441, 200,		// Thanos Sword
+			21009, 200, 	// Thanos Great Sword
+			1438,  200,		// Thanos Spear
+			1496,  200,		// Thanos Long Spear
+			1669,  200,		// Thanos Staff
+			2023,  200,		// Thanos Rod
+			18119, 200,		// Thanos Bow
+			13093, 200,		// Thanos Dagger
+			28000, 200,		// Thanos Katar
+			1836,  200,		// Thanos Knuckle
+			16028, 200,		// Thanos Hammer
+			28100, 200,		// Thanos Axe
+			1933,  200,		// Thanos Violin
+			1988,  200;		// Thanos Whip
+		break;
+	case 1:
+		setarray .@items[0],
+			2187,  100,		// Shield Of Gray
+			15090, 100, 	// Armor Of Gray
+			15091, 100,		// Gray Robe
+			20721, 100,		// Cloak Of Gray
+			22033, 100,		// Boots Of Gray
+			18820, 100;		// Gray Helmet
+		break;
+	case 2:
+		setarray .@items[0],
+			27184, 10000,		// Knight Sakray Card
+			23676, 50, 			// Gray Charcoal Melee (Melee)
+			23677, 50,			// Gray Charcoal Magic (Magic)
+			23678, 50,			// Gray Charcoal Range (Range)
+			27184, 10000;		// Knight Sakray Card
+		break;
+	}
+	.@size = getarraysize(.@items);
+	for ( .@i = 0; .@i < .@size; .@i += 2 )
+		.@menu$ += getitemname(.@items[.@i]) + " - " + .@items[.@i+1] + ":";
+
+	while(true) {
+		next;
+		.@s = (select(.@menu$) - 1) * 2;
+		mes "[Dimension Traveler]";
+		if (.@type != 1)	// armor type doesn't display item info
+			mes "Do you mean <ITEM>[" + getitemname(.@items[.@s]) + "]<INFO>" + .@items[.@s] + "</INFO></ITEM>?";
+		mes "" + .@items[.@s+1] + " ^006400" + .@item_name_req$ + "^000000 are required in exchange.";
+		next;
+		switch( select( "Let's exchange.", "Let me see other stuff.", "I will come back later." ) ) {
+		case 1:
+			break;
+		case 2:
+			mes "[Dimension Traveler]";
+			switch(.@type) {
+			case 0:
+				mes "I have more than enough weapons.";
+				break;
+			case 1:
+				mes "We have many armors for you. Why don't you pick one?";
+				break;
+			case 2:
+				mes "If you bring me " + .@item_name_req$ + ", I will trade it with anything you want.";
+				break;
+			}
+			continue;
+		case 3:
+			mes "[Dimension Traveler]";
+			mes "Take care friend~ See you next time!";
+			close;
+		}
+		if (countitem(6672) < .@items[.@s+1]) {
+			mes "[Dimension Traveler]";
+			mes "You put me in a difficult situation, friend.";
+			mes "I am in need of " + .@item_name_req$ + ". I will exchange it for ^006400" + .@items[.@s+1] + " " + .@item_name_req$ + "^000000.";
+			close;
+		}
+		mes "[Dimension Traveler]";
+		mes "Thank you. Come back if you need anything else.";
+		delitem 6672, .@items[.@s+1];
+		getitem .@items[.@s], 1;
+		close;
+	}
+}

+ 1 - 0
npc/re/scripts_athena.conf

@@ -122,6 +122,7 @@ npc: npc/re/merchants/enchan_verus.txt
 npc: npc/re/merchants/Extended_Stylist.txt
 npc: npc/re/merchants/flute.txt
 npc: npc/re/merchants/gld_mission_exchange.txt
+npc: npc/re/merchants/ghost_palace_exchange.txt
 npc: npc/re/merchants/guild_warehouse.txt
 npc: npc/re/merchants/hd_refiner.txt
 npc: npc/re/merchants/HorrorToyFactory_merchants.txt