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
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;
|
|
}
|
|
}
|