瀏覽代碼

Hero ring exchanger and enchant npcs (#3203)

* Some texts and system are customs
Atemo 7 年之前
父節點
當前提交
6c0da909d8
共有 3 個文件被更改,包括 280 次插入2 次删除
  1. 1 1
      db/re/item_db.txt
  2. 1 1
      db/re/item_trade.txt
  3. 278 0
      npc/re/merchants/moro_cav_exchange.txt

+ 1 - 1
db/re/item_db.txt

@@ -4703,7 +4703,7 @@
 6681,XMAS_Cookie,Christmas Cookie,3,20,,10,,,,,,,,,,,,,{},{},{}
 6682,Bag_Of_Selling_Goods,Bag Of Selling Goods,3,20,,10,,,,,,,,,,,,,{},{},{}
 6683,Dried_Flower,Dried Flower,3,10,,10,,,,,,,,,,,,,{},{},{}
-6684,Proof_of_The_Heroic,Proof of The Heroic,3,10,,0,,,,,,,,,,,,,{},{},{}
+6684,TokenOfHero,Token Of Hero,3,10,,0,,,,,,,,,,,,,{},{},{}
 6685,Morocc_Certification,Morocc Certification,3,10,,0,,,,,,,,,,,,,{},{},{}
 6686,Brick,Brick,3,10,,2000,,,,,,,,,,,,,{},{},{}
 6687,Rope__,Rope,3,10,,2000,,,,,,,,,,,,,{},{},{}

+ 1 - 1
db/re/item_trade.txt

@@ -799,7 +799,7 @@
 6674,507,100	// GM_Coin
 6681,467,100	// XMAS_Cookie
 6682,499,100	// Bag_Of_Selling_Goods
-6684,467,100	// Proof_of_The_Heroic
+6684,403,100	// TokenOfHero
 6685,499,100	// Morocc_Certification
 6686,507,100	// Brick
 6687,507,100	// Rope

+ 278 - 0
npc/re/merchants/moro_cav_exchange.txt

@@ -0,0 +1,278 @@
+//===== rAthena Script =======================================
+//= Enchants NPCs.
+//===== Description: =========================================
+//= Hero Ring enchants NPCs - Walkthrough Conversion.
+//===== Changelogs: ==========================================
+//= 1.0 First Version. [Capuche]
+//============================================================
+
+moro_cav,32,73,5	script	Hero Token Exchanger#1	4_F_SHADOWCHASER,{
+	disable_items;
+	mes "[Hero Token Exchanger]";
+	mes "If you fought Morroc";
+	mes "and collected";
+	mes "Hero Tokens,";
+	mes "I can exchange them with a special ring for you.";
+	mes "Do you want to take a look at my ring?";
+	while(true) {
+		next;
+		switch( select( "Ring description", "Exchange with the ring.", "End conversation." ) ) {
+		case 1:
+			mes "[Hero Token Exchanger]";
+			mes "This Hero Ring";
+			mes "may not";
+			mes "look";
+			mes "impressive,";
+			next;
+			mes "[Hero Token Exchanger]";
+			mes "but take it to";
+			mes "Expert Enchanter Byrnes,";
+			mes "and he can Enchant";
+			mes "all 4 sockets in it";
+			mes "and bring out";
+			mes "its latent abilities.";
+			next;
+			mes "[Hero Token Exchanger]";
+			mes "Hero Ring";
+			mes "can aid you";
+			mes "in subjugating";
+			mes "Morroc.";
+			mes "Any more questions?";
+			continue;
+		case 2:
+			mes "- Hero Ring -";
+			mes "^006400A ring made for warriors^000000";
+			mes "^006400on the quest to defeat Morroc..^000000";
+			mes "^006400When Enchanted,^000000";
+			mes "^006400it lends its owner^000000";
+			mes "^006400the power to confront Morroc.^000000";
+			mes "^006400Clas: Accessory/DEF: 0^000000";
+			mes "^006400Weight: 20/Required Level: 160^000000";
+			mes "^006400Slot: 0/Equip To: All Jobs^000000";
+			next;
+			mes "[Hero Token Exchanger]";
+			mes "Hero Ring requires";
+			mes "30 Hero Tokens";
+			mes "for the exchange.";
+			mes "Do you want to exchange?";
+			next;
+			if (select( "Previous menu.", "Exchange 30 Hero Tokens." ) == 1) {
+				mes "[Hero Token Exchanger]";
+				mes "Think";
+				mes "again.";
+				continue;
+			}
+			if (countitem(6684) < 30) {
+				mes "[Hero Token Exchanger]";
+				mes "^006400Hero Token^000000";
+				mes "is given to";
+				mes "those who bravely fought Morroc.";
+				mes "You don't have";
+				mes "30 ^006400Hero Tokens^000000,";
+				mes "and therefore I can't assist you.";
+				continue;
+			}
+			mes "[Hero Token Exchanger]";
+			mes "I'll exchange";
+			mes "30 ^006400Hero Tokens^000000";
+			mes "with 1 ^006400Hero Ring^000000.";
+			mes "Anything else?";
+			delitem 6684,30;	// TokenOfHero
+			getitem 2981,1;		// RingOfHero
+			continue;
+		case 3:
+			mes "[Hero Token Exchanger]";
+			mes "One day";
+			mes "you'll find yourself";
+			mes "in need of Hero Ring.";
+			close;
+		}
+	}
+}
+
+moro_cav,34,65,5	script	Expert Enchanter Byrnes	1_M_03,{
+	disable_items;
+	mes "[Byrnes]";
+	mes "Have you heard of Hero Ring? Only true heroes deserve to possess that magnificent ring, and I've been waiting for one.";
+	mes "What can I do for you?";
+	next;
+	switch( select( "Enchant Hero Ring.", "Reset Enchantments on Hero Ring.", "Cancel." ) ) {
+	case 1:
+		mes "[Byrnes]";
+		mes "I can Enchant only equipped rings. Which one of the equipped rings do you want to Enchant?";
+		next;
+		setarray .@eqi_slot[0], EQI_ACC_L, EQI_ACC_R;
+		.@s = select( "Left", "Right" ) - 1;
+		switch( getequipid(.@eqi_slot[.@s]) ) {
+		case -1:
+			mes "[Byrnes]";
+			mes "Please equip the Hero Ring that you want to enchant.";
+			close;
+		case 2981:
+			break;
+		default:
+			mes "[Byrnes]";
+			mes "Please equip your Hero Ring. I can't Enchant anything else.";
+			close;
+		}
+		// custom at this point
+		setarray .@card[0],
+			getequipcardid(.@eqi_slot[.@s],0),
+			getequipcardid(.@eqi_slot[.@s],1),
+			getequipcardid(.@eqi_slot[.@s],2),
+			getequipcardid(.@eqi_slot[.@s],3);
+
+		if (.@card[0] > 0) {
+			mes "[Byrnes]";
+			mes "A fully enchanted Hero Ring cannot be enchanted any further.";
+			close;
+		}
+		if (.@card[3] == 0) {
+			setarray .@enchant_list$[0], "DEF", "MDEF";
+			.@slot = 4;
+		}
+		else if (.@card[2] == 0) {
+			setarray .@enchant_list$[0], "Max HP", "Max SP";
+			.@slot = 3;
+		}
+		else if (.@card[1] == 0) {
+			setarray .@enchant_list$[0], "Atk", "MAtk";
+			.@slot = 2;
+		}
+		else {
+			setarray .@enchant_list$[0], "STR", "INT", "AGI", "VIT", "DEX", "LUK";
+			.@slot = 1;
+		}
+		mes "[Byrnes]";
+		mes "Which ability do you want as an enchantment on slot " + .@slot + "?";
+		next;
+		.@enchant_list_size = getarraysize(.@enchant_list$);
+		for ( .@i = 0; .@i < .@enchant_list_size; ++.@i )
+			.@menu$ += .@enchant_list$[.@i] + ":";
+		.@type = select(.@menu$) - 1;
+
+		switch(.@slot) {
+		case 4:
+			switch(.@type) {// enchant list index
+			case 0:	// DEF
+				setarray .@bonus[0], 4791, 4792, 4793, 4794, 4893;
+				break;
+			default:	// MDEF
+				setarray .@bonus[0], 4890, 4786, 4891, 4787, 4892;
+				break;
+			}
+			break;
+		case 3:
+			switch(.@type) {
+			case 0:	// Max HP
+				setarray .@bonus[0], 4861, 4862, 4867, 4868, 4900;
+				break;
+			default:	// Max SP
+				setarray .@bonus[0], 4800, 4870, 4871, 4801, 4802;
+				break;
+			}
+			break;
+		case 2:
+			switch(.@type) {
+			case 0:	// Atk
+				setarray .@bonus[0], 4882, 4766, 4767, 4894, 4895;
+				break;
+			default:	// Matk
+				setarray .@bonus[0], 4883, 4896, 4897, 4898, 4899;
+				break;
+			}
+			break;
+		case 1:
+			switch(.@type) {
+			case 0:	// STR
+				setarray .@bonus[0], 4700, 4701, 4702, 4703, 4704;
+				break;
+			case 1:	// INT
+				setarray .@bonus[0], 4710, 4711, 4712, 4713, 4714; 
+				break;
+			case 2:	// AGI
+				setarray .@bonus[0], 4730, 4731, 4732, 4733, 4734;
+				break;
+			case 3:	// VIT
+				setarray .@bonus[0], 4740, 4741, 4742, 4743, 4744;
+				break;
+			case 4:	// DEX
+				setarray .@bonus[0], 4720, 4721, 4722, 4723, 4724;
+				break;
+			default:	// LUK
+				setarray .@bonus[0], 4750, 4751, 4752, 4753, 4754;
+				break;
+			}
+			break;
+		}
+
+		// anti-hack
+		if (callfunc("F_IsEquipIDHack", .@eqi_slot[.@s], 2981) || callfunc("F_IsEquipCardHack", .@eqi_slot[.@s], .@card[0], .@card[1], .@card[2], .@card[3]))
+			close;
+
+		.@bonus_size = getarraysize(.@bonus);
+		.@card[.@slot-1] = .@bonus[ rand(.@bonus_size) ];	// unknown rates
+		specialeffect2 EF_ANGEL2;
+		mes "[Byrnes]";
+		mes "Enchantment completed!";
+		delequip .@eqi_slot[.@s];
+		getitem2 2981,1,1,0,0,.@card[0],.@card[1],.@card[2],.@card[3];
+		close;
+	case 2:
+		mes "[Byrnes]";
+		mes "To reset Enchantments on your Hero Ring, I need 3 Hero Tokens.";
+		next;
+		if (countitem(6684) < 3) {
+			mes "[Byrnes]";
+			mes "You don't have enough Hero Tokens. I can't reset your Hero Ring.";
+			close;
+		}
+		mes "[Byrnes]";
+		mes "I can reset only equipped rings. Which one of the equipped rings do you want to reset?";
+		next;
+		setarray .@eqi_slot[0], EQI_ACC_L, EQI_ACC_R;
+		.@s = select( "Left", "Right" ) - 1;
+		switch( getequipid(.@eqi_slot[.@s]) ) {
+		case -1:
+			mes "[Byrnes]";
+			mes "You first have to equip the item to reset its Enchantment status.";
+			close;
+		case 2981:
+			break;
+		default:
+			mes "[Byrnes]";
+			mes "Please equip your Hero Ring. I can't reset anything else.";
+			close;
+		}
+		// custom at this point
+		if (countitem(6684) < 3) {
+			mes "[Byrnes]";
+			mes "You don't have enough Hero Tokens. I can't reset your Hero Ring.";
+			close;
+		}
+		setarray .@card[0],
+			getequipcardid(.@eqi_slot[.@s],0),
+			getequipcardid(.@eqi_slot[.@s],1),
+			getequipcardid(.@eqi_slot[.@s],2),
+			getequipcardid(.@eqi_slot[.@s],3);
+
+		if (.@card[3] == 0) {
+			mes "[Byrnes]";
+			mes "Your Hero Ring is currently in a state without enchantment.";
+			close;
+		}
+
+		// anti-hack
+		if (callfunc("F_IsEquipIDHack", .@eqi_slot[.@s], 2981) || callfunc("F_IsEquipCardHack", .@eqi_slot[.@s], .@card[0], .@card[1], .@card[2], .@card[3]))
+			close;
+
+		specialeffect2 EF_ANGEL2;
+		mes "[Byrnes]";
+		mes "Initialization completed.";
+		delequip .@eqi_slot[.@s];
+		getitem 2981,1;
+		close;
+	case 3:
+		close;
+	}
+}