You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

288 lines
7.9 KiB
Plaintext

//===== rAthena Script =======================================
//= Enchants NPCs.
//===== Description: =========================================
//= [Official Conversion]
//= Hero Ring enchants NPCs
//===== Changelogs: ==========================================
//= 1.0 First Version. [Capuche]
//= 1.1 Slight change to match official script. [Capuche]
//============================================================
moro_cav,32,73,5 script Hero Token Exchanger#1 4_F_SHADOWCHASER,{
disable_items;
mes "[Hero Token Exchanger]";
mes "If you fought Morocc";
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;
if (checkweight(2163,2) == 0) {
mes "[Hero Token Exchanger]";
mes "Your pack has a lot of items,";
mes "Please come again after arrange it!";
close;
}
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 "Morocc.";
mes "Any more questions?";
continue;
case 2:
mes "- Hero Ring -";
mes "^006400A ring made for warriors^000000";
mes "^006400on the quest to defeat Morocc..^000000";
mes "^006400When Enchanted,^000000";
mes "^006400it lends its owner^000000";
mes "^006400the power to confront Morocc.^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 Morocc.";
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.";
delitem 6684,3;
delequip .@eqi_slot[.@s];
getitem 2981,1;
close;
case 3:
close;
}
}