//===== Hercules Script ======================================
//= Eden iRO NPCs
//===== By: ==================================================
//= -SkittleNugget-
//===== Current Version: =====================================
//= 1.1
//===== Description: =========================================
//= Eden scripts custom to iRO (disabled by default).
//= You may need iRO's data.grf to view some of the items.
//===== Additional Comments: =================================
//= 1.0 First version.
//= 1.1 Edited and added more NPCs, lots of placeholders. [Euphy]
//============================================================
// Acolyte Warper (part of other/acolyte_warp.txt)
//============================================================
moc_para01,14,32,5 script Aperture#acolytewarp 4_F_01,{
mes "[Aperture]";
mes "Hello there, adventurer.";
mes "I've been studying magic from all over Rune-Midgard to upgrade what I believe to be one of the greatest skills available to the acolyte class.";
next;
mes "[Aperture]";
mes "I am the one and only Acolyte that has attained the Level 10 Warp Portal skill!";
emotion e_dots,1;
next;
mes "[Aperture]";
mes "That's right! And...";
mes "I promise you that I don't forget locations that I have already memorized.";
mes "One day I will level up my skills to warp to wherever I please~";
next;
mes "[Aperture]";
mes "I am willing to warp you to the many locations that I have memorized for a small fee.";
mes "Would you like to use this service?";
next;
switch(select("Yes:No")) {
case 1:
mes "[Aperture]";
mes "Where would you like to go to?";
mes "I wish you goodluck on your journey.";
next;
setarray .@towns$[0], "Prontera", "Izlude", "Geffen", "Payon", "Morroc", "Alberta", "Al De Baran", "Comodo", "Umbala", "Juno", "Einbroch", "Lighthalzen", "Hugel", "Rachel";
setarray .@cost[0], 600, 600, 1200, 1200, 1200, 1800, 2200, 2200, 2200, 1800, 2200, 2200, 2200, 2200;
set .@size, getarraysize(.@towns$);
for(set .@i,0; .@i<.@size; set .@i,.@i+1)
set .@menu$, .@menu$+.@towns$[.@i]+" -> "+.@cost[.@i]+"z:";
set .@i, select(.@menu$+"Cancel")-1;
if (.@i == .@size) {
mes "[Aperture]";
mes "Come back when you need a warp.";
close;
}
if (Zeny < .@cost[.@i]) {
mes "[Aperture]";
mes "I'm sorry, but you don't have";
mes "enough zeny for the Teleport";
mes "Service. The fee to teleport";
mes "to "+.@towns$[.@i]+" is "+.@cost[.@i]+" zeny.";
close;
}
specialeffect2 EF_READYPORTAL;
specialeffect2 EF_TELEPORTATION;
specialeffect2 EF_PORTAL;
next;
set Zeny, Zeny - .@cost[.@i];
switch(.@i) {
case 0: warp "prontera",116,72; break;
case 1: warp "izlude",128,98; break;
case 2: warp "geffen",120,39; break;
case 3: warp "payon",161,58; break;
case 4: warp "morocc",156,46; break;
case 5: warp "alberta",117,56; break;
case 6: warp "aldebaran",168,112; break;
case 7: warp "comodo",209,143; break;
case 8: warp "umbala",100,154; break;
case 9: warp "yuno",158,125; break;
case 10: warp "einbroch",67,195; break;
case 11: warp "lighthalzen",159,90; break;
case 12: warp "hugel",98,150; break;
case 13: warp "rachel",119,135; break;
}
close;
case 2:
mes "[Aperture]";
mes "Come back when you need a warp.";
close;
}
}
// Carrot & Red Potion Traders
//============================================================
moc_para01,166,51,3 script Phelix#edco 4_M_03,{
mes "[Phelix]";
mes "Oh... I see from that look that you want me to work and give you Meat and Carrots...";
mes "Well my friend Izaac here has some Red Potions with him, but I only have some Carrots.";
mes "So I can trade you ^0000CC1 Carrot for 3 Jellopy^000000.";
next;
mes "[Phelix]";
mes "If you're interested in my offer, get me the Jellopies I mentioned.";
next;
select("Carrots please.");
mes "[Phelix]";
mes "Alright, let's see what ya got...";
next;
if (countitem(909) < 3) {
mes "[Phelix]";
mes "Hmm, look dude, I said 3 Jellopies for 1 Carrot... got it?";
close;
}
mes "[Phelix]";
mes "Not too bad...";
mes "How many do you want?";
next;
switch(select("As many as I can get, please.:I want to choose.:Never mind, I like my Jellopy.")) {
case 1:
set .@amount, countitem(909) / 3;
break;
case 2:
set .@available, countitem(909) / 3;
mes "[Phelix]";
mes "How many do you want?";
mes "^ff0000You have enough for up to " + .@available + " Carrots.^000000";
input .@input;
next;
if (.@input < 1 || .@input > 10000) {
mes "[Phelix]";
mes "Don't want to deal? Fair enough...";
close;
}
if (.@input > .@available) {
mes "[Phelix]";
mes "Dude, I said for every 3 Jellopy I'll give you 1 Carrot.";
close;
}
set .@amount, .@input;
break;
case 3:
mes "[Phelix]";
mes "Don't bother me if you don't want to trade.";
close;
}
if (checkweight(515,.@amount) == 0) {
mes "[Phelix]";
mes "You are overweight.";
close;
}
mes "[Phelix]";
mes "There you go~! As I promised.";
mes "Try not to stuff yer face.";
delitem 909,.@amount*3; //Jellopy
getitem 515,.@amount; //Carrot
end;
}
moc_para01,163,51,7 script Izaac#edco 4_M_04,{
mes "[Izaac]";
mes "Good day!";
mes "Have you collected any weird stuff from monsters?";
mes "I want things like Jellopy, Fluff, Shell, Feather of Birds, Tree Root, Worm Peelings, and Chrysalis.";
mes "I need those for something.";
next;
mes "[Izaac]";
mes "Of course, I won't ask you to give me that stuff for free. What if I traded the following for ^CC00001 Red Potion^000000:";
mes "^00CC005 Shell^000000";
mes "^0000CC10 Fluff^000000";
mes "^00CC0010 Jellopy^000000";
mes "^0000CC6 Tree Root^000000";
mes "^00CC001 Worm Peeling^000000";
mes "^0000CC7 Feather of Birds^000000";
mes "^00CC006 Chrysalis^000000";
next;
switch(select("Sure!:I think it's a rip-off!:No, thanks.")) {
case 1:
mes "[Izaac]";
mes "So which items do";
mes "you want to bring me?";
next;
setarray .@items[0], 935, 914, 909, 902, 955, 916, 915;
setarray .@count[0], 5, 10, 10, 6, 1, 7, 6;
set .@size, getarraysize(.@items);
for(set .@i,0; .@i<.@size; set .@i,.@i+1)
set .@menu$, .@menu$+getitemname(.@items[.@i])+":";
set .@select, select(.@menu$+"Cancel")-1;
if (.@select == .@size) {
mes "[Izaac]";
mes "Sure~";
mes "No problem.";
close;
}
set .@item, .@items[.@select];
set .@item$, getitemname(.@item);
set .@price, .@count[.@select];
if (countitem(.@item) < .@price) {
mes "[Izaac]";
mes "Hey, where's all";
mes "that "+.@item$+" that";
mes "you promised me?";
mes "Give me "+.@item$+"!";
close;
}
mes "[Izaac]";
mes "Okay, let me check";
mes "how much "+.@item$;
mes "you have on you.";
mes "Hmm...";
next;
set .@amount, countitem(.@item) / .@price;
set .@trade_amount, .@amount * .@price;
mes "[Izaac]";
mes "You have";
mes "a total of "+countitem(.@item)+" "+.@item$+"...";
mes "For all those, I can give you";
mes "a total of "+.@amount+" Red Potion(s).";
next;
mes "[Izaac]";
mes "What do you say?";
mes "Do we have a deal?";
next;
if(select("Deal.:No deal.") == 2) {
mes "[Izaac]";
mes "Huh~";
mes "Alright.";
mes "Though are";
mes .@item$ + " more useful";
mes "to an adventurer like you?";
close;
}
if (checkweight(501,.@amount) == 0) { //custom check
mes "[Izaac]";
mes "You are overweight.";
close;
}
delitem .@item,.@trade_amount;
getitem 501,.@amount; //Red_Potion
mes "[Izaac]";
mes "There you go!";
mes "Check how many "+.@item$;
mes "I've given you, it should be good.";
mes "Thanks, that was a good deal~";
close;
case 2:
mes "[Izaac]";
mes "A rip-off...?";
mes "If you check the market value";
mes "of the items being traded, I'm actually the one getting";
mes "ripped off here.";
close;
case 3:
mes "[Izaac]";
mes "Alright, No problem.";
mes "But come back to me if you change your mind.";
close;
}
}
// Safe to 7 Certificate Exchanger
//============================================================
moc_para01,50,39,4 script Eve Natalia 4_F_SITDOWN,{
mes "[Eve Natalia]";
mes "So I'm in town for a while to see if I can strike up some commerce with MVP hunters!";
mes "I'm willing to take some MVP gear and give you these upgrade Certificates I have in exchange;";
mes "if things go well enough I'll open up further business opportunities!";
next;
mes "[Eve Natalia]";
mes "So do you have any of the gears I'm looking for to get some random Safe to 7 Certificates?";
next;
switch(select("What gear?:Yes I am!:Never mind.")) {
case 1:
mes "[Eve Natalia]";
mes "Nidhoggur's Shadow Garb 4 Random Safe to 7 Certificates";
mes "Valkyrja's Shield 4 Random Safe to 7 Certificates";
mes "Valkyrian Armor 5 Random Safe to 7 Certificates";
mes "Diabolus Robe 5 Random Safe to 7 Certificates";
mes "Diabolus Armor 2 Random Safe to 7 Certificates";
mes "Diabolus Boots 2 Random Safe to 7 Certificates";
mes "Diabolus Manteau 4 Random Safe to 7 Certificates";
mes "Twin Edge of Naght Sieger Blue 2 Random Safe to 7 Certificates";
mes "Twin Edge of Naght Sieger Red 2 Random Safe to 7 Certificates";
close;
case 2:
mes "[Eve Natalia]";
mes "I'm going to ask you which piece of gear you want to trade in, please verify that the 1st one in your inventory is one you want to give up.";
mes "^CC0000So if it is carded, upgraded, enchanted etc, you should put it in storage before we continue.^000000";
next;
set .@i, select("Wait a minute:Nidhoggur's Shadow Garb 4:Valkyrja's Shield 4:Valkyrian Armor 5:Diabolus Robe 5:Diabolus Armor 2:Diabolus Boots 2:Diabolus Manteau 4:Twin Edge of Naght Sieger Blue 2:Twin Edge of Naght Sieger Red 2")-2;
if (.@i == -1)
break;
setarray .@items[0], 2554, 2115, 2357, 2374, 2375, 2433, 2537, 13412, 13413;
setarray .@tickets[0], 4, 4, 5, 5, 2, 2, 4, 2, 2;
set .@item, .@items[.@i];
set .@amount, .@tickets[.@i];
mes "[Eve Natalia]";
mes "I see you have "+countitem(.@item)+" "+getitemname(.@item)+".";
mes "So do you want to trade the 1st one in your inventory for ^00CC00"+.@amount+" Random Safe to 7 Certificates^000000?";
mes "Tell me '1' if you do, or '0' to cancel.";
next;
input .@input;
if (.@input < 0 || .@input > 1) {
mes "[Eve Natalia]";
mes "It is a 0 or 1, it can't be that difficult.";
close;
} else if (.@input == 0) {
mes "[Eve Natalia]";
mes "It's best to be sure before trading, have a good day.";
close;
}
if (countitem(.@item) == 0) {
mes "[Eve Natalia]";
mes "You don't even have 1... stop wasting my time.";
close;
}
mes "[Eve Natalia]";
mes "Oh perfect, you get ^CC0000" + .@amount + "^000000 Safe to 7 Certificates!";
delitem .@item,1;
for(set .@i,0; .@i<.@amount; set .@i,.@i+1) {
// Note: iRO lists item 6235 as "Safe to 7 Headgear Certificate", but it's Guarantee_Armor_6Up in our database.
if (rand(2))
getitem 6230,1; //Guarantee_Weapon_7Up
else
getitem 6234,1; //Guarantee_Armor_7Up
}
close;
case 3:
break;
}
mes "[Eve Natalia]";
mes "Fair enough, if you have business with me in the future don't be shy!";
close;
}
// Bubble Gum & Battle Manual Exchanger
//============================================================
moc_para01,48,184,2 script Gum & Manual Exchanger 2_DROP_MACHINE,{
if (Weight < MaxWeight / 2) {
mes "You're carrying too many items right now.";
close;
}
mes "[Trader Machine]";
mes "Insert Bubble Gums and/or Battle Manuals to trade for higher efficiency Gums and Manuals.";
next;
mes "[Trader Machine]";
mes "Exchange rate:";
mes "2 Bubble Gum -> 1 HE Bubble Gum";
mes "2 Battle Manual -> 1 HE Battle Manual";
mes "4 HE Battle Manual -> 1 Battle Manual X3";
mes "3 Thick Battle Manual -> 2 Battle Manual X3";
mes "What would you like to exchange for?";
next;
switch(select("HE Bubble Gum:HE Battle Manual:1 Battle Manual X3:2 Battle Manual X3:1 Costume Corsair:Nothing")) {
case 1:
callsub L_Exchange,12210,2,12412,1;
break;
case 2:
callsub L_Exchange,12208,2,12411,1;
break;
case 3:
callsub L_Exchange,12411,4,14545,1;
break;
case 4:
callsub L_Exchange,12312,3,14545,2;
break;
case 5:
mes "[Trader Machine]";
mes "I can give you 1 Battle Manual X3 for 1 Costume Corsair.";
next;
if (countitem(19619) == 0) {
mes "[Trader Machine]";
mes "You don't have a Costume Corsair hat to make that trade.";
close;
}
next;
if(select("Yes, give it to me!:No, wait not yet.") == 2)
close;
// Unofficial dialogue.
mes "[Trader Machine]";
mes "You place the required items into the machine...";
next;
mes "[Trader Machine]";
mes "The Machine has given you an item in return!";
delitem 19619,1; //C_Corsair
getitem 14545,1; //Battle_Manual_X3
close;
case 6:
close;
}
//callsub L_Exchange,<Insert Item>,<Amount>,<Return Item>,<Amount>
L_Exchange:
mes "[Trader Machine]";
mes "How many "+getitemname(getarg(2))+" do you want?";
mes "I can give you up to 60.";
mes "Type 0 to cancel.";
next;
input .@amount;
if (.@amount == 0) {
mes "[Trader Machine]";
mes "Cancelled.";
close;
} else if (.@amount < 0 || .@amount > 60) {
mes "[Trader Machine]";
mes "I said only 60 max.";
close;
}
mes "[Trader Machine]";
mes "That's a total of "+.@amount;
mes getitemname(getarg(2))+".";
mes "Is this correct?";
next;
if(select("Yes, give them to me!:No, wait not yet.") == 2)
close;
set .@cost, getarg(1) * .@amount;
set .@total_amount, getarg(3) * .@amount;
if (countitem(getarg(0)) < .@cost) {
mes "[Trader Machine]";
mes "You don't have enough "+getitemname(getarg(0))+" to make that trade.";
close;
}
delitem getarg(0),.@cost;
getitem getarg(2),.@total_amount;
close;
}
// Kafra Stacker
//============================================================
moc_para01,41,169,2 script Kafra Stacker#eden 4_M_ALCHE_B,{
mes "[Toma]";
mes "I can take your non-stacking Kafra Consumables";
mes "and make them fit neatly into stacks!";
next;
mes "[Toma]";
mes "Please understand that I can";
mes "only stack 10 groups at a time";
mes "so keep talking to me until";
mes "you have 1 stack of each!";
next;
while(1) {
if(select("Do it!:Never mind.") == 2)
break;
// Something strange goes on here, haven't quite figured it out...
mes "[Toma]";
mes "Ten stack down!";
mes "Want to do another?";
next;
}
mes "[Toma]";
mes "Ok then, laterz.";
close;
}
// Code Redeemer
//============================================================
moc_para01,38,162,2 script Code the Redeemer#Give1 4_M_YOUNGKNIGHT,{
mes "[Code the Redeemer]";
mes "Welcome, "+strcharinfo(0)+"!";
mes "I've been expecting you.";
next;
mes "[Code the Redeemer]";
mes "I am a distributor of all the";
mes "items that adventurers like";
mes "yourself purchase on websites";
mes "or receive as promotions.";
next;
mes "[Code the Redeemer]";
mes "^0000FFIf the list is empty,";
mes "that means that you have";
mes "not purchased, or inputted";
mes "your serial code from the purchasing website.^000000";
next;
// If you have a code redemption system, write your SQL queries here.
select("");
close;
}
// Cash Shops
//============================================================
/* Due to the irregularity of iRO's databases, some of these sprites may not display properly. */
moc_para01,32,171,4 cashshop Kafra Headgears#eden1 4_F_KAFRA3,14024:500,14098:150,17081:300,14097:500,14094:1000,14017:400,14099:300
moc_para01,35,174,2 cashshop Kafra Dye Shop#dyes2 4_F_KAFRA4,6287:150
moc_para01,36,170,2 cashshop Kafra Consumables#eden3 4_F_KAFRA6,13810:5,14167:400,16556:100,14111:75,14075:25,16419:30,14107:70,14104:50,14112:25,14082:30,14091:60,14088:30,14085:60,14169:40,14170:40,14172:40,14173:40,14171:40,14174:40,14159:100,14160:100,14161:100,14162:100,14163:100:14164:100,16420:1500
moc_para01,32,174,2 cashshop Kafra Rental Items#eden 4_F_KAFRA7,16683:150,16682:50,14126:250,14125:250,16430:250,14137:250,14127:250,14118:250,14119:250,14132:250,16425:250,14124:250,14133:250,14130:250,16424:250,14136:250,14122:250,16426:250,14135:250,14134:250,14138:250,16428:250,16431:250,14139:250,14131:250,16429:250,16427:250
moc_para01,36,172,2 cashshop Kafra Costume#eden5 4_F_KAFRA8,16974:300,16972:600,16973:150,16975:150,16977:150,17014:150,17015:150
moc_para01,35,168,1 cashshop Kafra Utility Shop#eden 4_F_KAFRA5,16677:25,13990:400,16396:100,16394:100,17106:500,6241:10,6240:10,6225:15,6226:15,14002:5,6294:500,7776:50,7619:30,7620:30,12208:40,14156:400,12210:40,14158:400,14042:50,14044:50,14046:50,14048:50,14114:50,14166:40,16418:500,16381:400,14165:100,14157:100,14178:100
// Duplicate NPCs
//============================================================
/* Technically these NPC names are different, but it's not worth editing the original scripts. */
// Weapon/Armor Refiner "Normalson" (merchants/refine.txt)
moc_para01,14,185,4 script Normalson#ed 4_M_DWARF,{
callfunc "refinemain","Normalson",0;
end;
}
// Advanced Refiner "Suhnmi" (merchants/advanced_refiner.txt)
moc_para01,26,185,4 duplicate(Suhnbi#cash) Suhnmi#eden 4_M_03
// HD Refiner "Blacksmith Mighty Hammer" (re/merchants/hd_refiner.txt)
// A combination of the +7~9 and +10 and up refiner, currently a placeholder.
moc_para01,38,185,4 duplicate(MightyHammer) Mighty Hammer#ed 4_M_DWARF
// Refiner Effect
- script #eden_refine_effect -1,{
OnInit:
initnpctimer;
end;
OnTimer5000:
specialeffect EF_REFINEOK,AREA,"Suhnmi#eden";
specialeffect EF_REFINEOK,AREA,"Mighty Hammer#ed";
initnpctimer;
end;
}
// Gym Pass Trainer "Ripped Cabus" (other/gympass)
moc_para01,33,162,4 duplicate(Ripped Cabus#GymPass) Ripped Callus#ed 4_M_HUMAN_02
// RWC 2012 Enchanter "Goldenthiefberg" (events/RWC_2012.txt)
// A combination of the slotter and enchanter, currently a placeholder.
moc_para01,27,179,4 script RWC Enchanter#new10 4_M_BARBER,{ end; }
// Cash Headgear Dyer "Alora" (merchants/cashheadgear_dye.txt)
// Also converts some +8 and up headgears into costumes, currently a placeholder.
moc_para01,21,185,4 duplicate(Alora) Alora#headgear_dye2 4_F_LGTGIRL
// Stylist "Dinorah Lacostt" (?)
// Dyes clothing for an Omni Clothing Dye, currently a placeholder.
moc_para01,33,185,4 script Dinorah Lacostt#ed 4_F_LGTGIRL,{ end; }
// Commonly Updated NPCs
//============================================================
/* These scripts change on a regular basis, so they're mostly just placeholders for now. */
moc_para01,29,35,4 script Gramps#huntquests 4_M_LGTGRAND,{
mes "[Gramps]";
mes "When you get to being my";
mes "age, you become bitter.";
mes "Too long I've done nothing about the monsters that roam around";
mes "Rune Midgard.";
next;
mes "[Gramps]";
mes "That's why I'm asking you wippersnappers to help";
mes "me hunt some monsters.";
mes "Will you help me, young adventurer?";
close;
//next;
//switch(select("Yes, I'll help.:Reward Me!:^ff0000I want to quit hunting^000000:^0000ffCan you warp me?^000000:Can you erase the timer?:What missions are you giving?:Give me Limited 3 day VIP:Tell me more about the VIP Access:No thanks, pops.")) {
}
moc_para01,13,22,4 script Merry Badger#xch 4_F_SITDOWN,{
mes "[Merry Badger]";
mes "Hello there! I'm Merry Badger and I was hired to exchange the ^00CC00Eden Merit Badges^000000!";
next;
mes "[Merry Badger]";
mes "I can take your Merit Badges and give you some useful stuff, or I can take some of your stuff and give you some Eden Merit Badges.";
mes "As I get more authorization I can offer more things to trade with you, so definitely keep me in mind when visiting the Eden Group.";
close;
//next;
//switch(select("Redeem Badges:Trade in FOR badges:Exchange Rates:15 Job Manuals - 1 JM Box")) {
}
moc_para01,174,33,3 script Bathory#2012spirits 1102,{
mes "[Bathory]";
mes "Eheeheeheehee! The spotlight is on Glast Heim this week, so I'm ferrying people there for a mere 1,000z!";
next;
mes "[Bathory]";
mes "How about it? Want to take a ride on a beautiful Bathory's broom?";
next;
switch(select("Prepare for Takeoff!:No thanks.")) {
case 1:
if (Zeny < 1000) {
mes "[Bathory]";
mes "Come on dearie...";
mes "You don't even have 1,000 zeny?";
close;
}
mes "[Bathory]";
mes "Alright, hold on tight!";
close2;
set Zeny, Zeny-1000;
warp "niflheim",194,185;
end;
case 2:
mes "["+strcharinfo(0)+"]";
mes "No thanks, maybe later.";
close;
}
}
moc_para01,26,174,4 script Grandma Boxter#boxx 4_F_THAISHAMAN,{ end; }