summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDastgir <dastgirpojee@rocketmail.com>2015-06-04 20:13:07 +0530
committerHaru <haru@dotalux.com>2015-07-12 02:07:09 +0200
commit146247c3e466542949a9ebee709633360a67778c (patch)
tree085f5212185a44e6fe7663a4dbfe768c11feec65
parentce39818f67e15d38511fff5b5dd7fc20f8940092 (diff)
downloadhercules-146247c3e466542949a9ebee709633360a67778c.tar.gz
hercules-146247c3e466542949a9ebee709633360a67778c.tar.bz2
hercules-146247c3e466542949a9ebee709633360a67778c.tar.xz
hercules-146247c3e466542949a9ebee709633360a67778c.zip
Implemented 2012 Headgears Quest
Based on the rAthena version, improved and cleaned up. Signed-off-by: Haru <haru@dotalux.com>
-rw-r--r--db/quest_db.conf233
-rw-r--r--db/re/item_db.conf20
-rw-r--r--npc/re/quests/newgears/2012_headgears.txt729
-rw-r--r--npc/re/scripts.conf2
4 files changed, 982 insertions, 2 deletions
diff --git a/db/quest_db.conf b/db/quest_db.conf
index 04a530a55..a834d4294 100644
--- a/db/quest_db.conf
+++ b/db/quest_db.conf
@@ -3566,6 +3566,239 @@ quest_db: (
Id: 5146
Name: "Battle test"
},
+// 2012 Headgear Quests
+{
+ Id: 5161
+ Name: "Low Level collection request[Stand by]"
+ TimeLimit: 86400
+},
+{
+ Id: 5162
+ Name: "Low Level collection request"
+ Targets: (
+ {
+ MobId: 1164
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5163
+ Name: "Low Level collection request"
+ Targets: (
+ {
+ MobId: 1102
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5164
+ Name: "Low Level collection request"
+ Targets: (
+ {
+ MobId: 1322
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5165
+ Name: "Low Level collection request"
+ Targets: (
+ {
+ MobId: 1386
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5166
+ Name: "Low Level collection request"
+ Targets: (
+ {
+ MobId: 1117
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5167
+ Name: "Low Level collection request"
+ Targets: (
+ {
+ MobId: 1155
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5168
+ Name: "Low Level collection request"
+ Targets: (
+ {
+ MobId: 1269
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5169
+ Name: "Mid-Level collection request[Stand by]"
+ TimeLimit: 86400
+},
+{
+ Id: 5170
+ Name: "Mid-Level collection request"
+ Targets: (
+ {
+ MobId: 1776
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5171
+ Name: "Mid-Level collection request"
+ Targets: (
+ {
+ MobId: 1198
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5172
+ Name: "Mid-Level collection request"
+ Targets: (
+ {
+ MobId: 1784
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5173
+ Name: "Mid-Level collection request"
+ Targets: (
+ {
+ MobId: 1316
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5174
+ Name: "High level collectiong request[Stand by]"
+ TimeLimit: 86400
+},
+{
+ Id: 5175
+ Name: "High level collection request"
+ Targets: (
+ {
+ MobId: 1106
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5176
+ Name: "High level collection request"
+ Targets: (
+ {
+ MobId: 1148
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5177
+ Name: "High level collection request"
+ Targets: (
+ {
+ MobId: 1995
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5178
+ Name: "High level collection request"
+ Targets: (
+ {
+ MobId: 1310
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5179
+ Name: "Highest level collection request"
+ Targets: (
+ {
+ MobId: 1163
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5180
+ Name: "Highest level collection request"
+ Targets: (
+ {
+ MobId: 1993
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5181
+ Name: "Highest level collection request"
+ Targets: (
+ {
+ MobId: 1297
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5182
+ Name: "Highest level collection request"
+ Targets: (
+ {
+ MobId: 1699
+ Count: 100
+ },
+ )
+},
+{
+ Id: 5222
+ Name: "Saving the energy crystals"
+},
+{
+ Id: 5223
+ Name: "Saving the energy crystals"
+},
+{
+ Id: 5224
+ Name: "Saving the energy crystals"
+},
+{
+ Id: 5225
+ Name: "Saving energy crystal[Stand by]"
+ TimeLimit: 7200
+},
+{
+ Id: 5226
+ Name: "Saving energy crystal[Stand by]"
+ TimeLimit: 7200
+},
+{
+ Id: 5227
+ Name: "Saving energy crystal[Stand by]"
+ TimeLimit: 7200
+},
{
Id: 6000
Name: "Job Change to Taekwon"
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 9de05f96b..8c91888cf 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -65372,11 +65372,27 @@ item_db: (
Weight: 10
},
{
+ Id: 6623
+ AegisName: "Rough_Energy_Crystal"
+ Name: "Rough Energy Crystal"
+ Type: 3
+ Buy: 0
+ Weight: 10
+},
+{
+ Id: 6624
+ AegisName: "Purified_Energy_Crystal"
+ Name: "Purified Energy Crystal"
+ Type: 3
+ Buy: 0
+ Weight: 10
+},
+{
Id: 6625
- AegisName: "High_Energy_Crystal"
+ AegisName: "High_Purity_Energy_Xtal"
Name: "High Energy Crystal"
Type: 3
- Buy: 20
+ Buy: 0
Weight: 10
Trade: {
nodrop: true
diff --git a/npc/re/quests/newgears/2012_headgears.txt b/npc/re/quests/newgears/2012_headgears.txt
new file mode 100644
index 000000000..c96c47ede
--- /dev/null
+++ b/npc/re/quests/newgears/2012_headgears.txt
@@ -0,0 +1,729 @@
+//===== Hercules Script ======================================
+//= 2012 Headgear Quests
+//===== By: ==================================================
+//= Euphy, -SkittleNugget-
+//===== Current Version: =====================================
+//= 1.0
+//===== Description: =========================================
+//= [Official Conversion]
+//= Enhance gears by synthesizing them with Energy Crystals.
+//===== Additional Comments: =================================
+//= 1.0 First version. [Euphy]
+//= Script is a little messy, could use some cleaning.
+//============================================================
+
+// Main NPC :: 2012_hat_quest
+//============================================================
+moc_para01,41,169,3 script Reno#2012hat 64,{
+ // iRO has (very) minor differences in dialogue from the original script.
+ // To use iRO's version, uncomment the line below.
+ //.@features_iRO = 1;
+
+ //custom translation - all checks below
+ if (checkweight(Axe,1) == 0 || MaxWeight - Weight < 800) {
+ mes "- Carrying too many items, cannot proceed. -";
+ close;
+ }
+
+ setarray .@type$,"lower","intermediate","advanced","highest";
+ setarray .@crystal$,"Rough","Purified","High";
+
+ // playtime checks
+ setarray .@quests,
+ // base, first, count
+ 5161, 5162, 7, // Lower
+ 5169, 5170, 4, // Intermediate
+ 5174, 5175, 8; // High
+ setarray .@crystal_quests, 5225,5226,5227;
+
+ setarray .@min_level,60,80,90,100;
+
+ // hunting quest wait time
+ for (.@i = 0; .@i < getarraysize(.@quests); .@i += 3) {
+ if (questprogress(.@quests[.@i],PLAYTIME) == 2) {
+ erasequest .@quests[.@i];
+ mes "[Reno]";
+ mes "The waiting time for a "+.@type$[.@i]+" collection quest has expired."
+ " You can now take another request.";
+ close;
+ }
+ }
+ // buff wait time
+ for (.@i = 0; .@i < getarraysize(.@crystal_quests); ++.@i) {
+ if (questprogress(.@crystal_quests[.@i],PLAYTIME) == 2) {
+ erasequest .@crystal_quests[.@i];
+ mes "[Reno]";
+ mes "The waiting time for storing "+.@crystal$[.@i]+" Energy Crystals has expired."
+ " You can now store them again.";
+ close;
+ }
+ }
+
+ // hunting quest checks
+ callsub(S_CheckHunting, 5161, 5162, 7, .@type$[0], Rough_Energy_Crystal, 10);
+ callsub(S_CheckHunting, 5169, 5170, 4, .@type$[1], Purified_Energy_Crystal, 10);
+ callsub(S_CheckHunting, 5174, 5175, 4, .@type$[2], High_Purity_Energy_Xtal, 5);
+ callsub(S_CheckHunting, 5174, 5179, 4, .@type$[3], High_Purity_Energy_Xtal, 10);
+
+ // buff checks
+ .@energy_buf00 = (getstatus(SC_QUEST_BUFF1) || getstatus(SC_QUEST_BUFF2) || getstatus(SC_QUEST_BUFF3));
+ if (!.@energy_buf00) {
+ for (.@i = 0; .@i < 3; ++.@i) {
+ if (questprogress(5222 + .@i)) {
+ .@item = Rough_Energy_Crystal + .@i;
+ .@amount = 2 + rand(3);
+ mes "[Reno]";
+ mes getitemname(.@item)+" storage is now complete.";
+ next;
+ setquest .@crystal_quests[.@i];
+ erasequest 5222 + .@i;
+ getitem .@item, .@amount;
+ mes "[Reno]";
+ mes "^0000FF"+.@amount+" "+getitemname(.@item)+"s^000000 were extracted.";
+ close;
+ }
+ }
+ }
+
+ mes "[Reno]";
+ mes "Hi? I am Reno from the Energy Crystal Research Association, or ECRA.";
+ next;
+ .@opt$ = "ECRA?"
+ ":Quest to get Energy Crystals"
+ ":Energy Crystal Buffs"
+ ":Compress Energy Crystals"
+ ":Exchange Crystals for Headgear"
+ ":Random Gear for Crystals";
+ if (.@features_iRO)
+ .@opt$ += ":See Equipment List";
+ switch (select(.@opt$)) {
+ case 1:
+ mes "[Reno]";
+ mes "ECRA is the institute that researches '^0000FFEnergy Crystals^000000' that"
+ " shall be used as an alternative energy source in the Rune Midgart"
+ " Kingdom, which suffers from a shortage of energy.";
+ next;
+ select("The reason for doing this?");
+ mes "[Reno]";
+ mes "I would like to explain that we are not trying to make an excuse to get away"
+ " from facing problem before I explain the reason. Never! So please let me"
+ " finish.";
+ next;
+ mes "[Reno]";
+ mes "The Research Team has sent me the results they found.";
+ next;
+ mes "[Reno]";
+ mes "Energy Crystals turned out to be ^0000FFgenerated inside the bodies of some"
+ " monsters^000000, and according to the research, stronger monsters"
+ " generate higher-class energy crystals in their bodies.";
+ next;
+ mes "[Reno]";
+ mes "The Research Team decided to collect Energy Crystals by giving requests to"
+ " adventurers, with appropriate rewards. That enables us to collect better"
+ " and be more ^FF0000efficient^000000.";
+ next;
+ mes "[Reno]";
+ mes "Energy Crystals, accumulated through hunting monsters by my request, shall be"
+ " used for my research. ^0000FFSome of them are planned to be returned to"
+ " adventurers.^000000";
+ next;
+ mes "[Reno]";
+ mes "Adventurers can use collected Energy Crystals for ^FF0000upgrading"
+ " equipments^000000 through me.";
+ next;
+ mes "[Reno]";
+ mes "If it works well, it seems to be good for both ECRA and adventurers.";
+ close;
+ case 2:
+ mes "[Reno]";
+ mes "The hunting quests are ranked by monster level and difficulty. The ranges are"
+ " lower, intermediate, high quests and can only be taken once per day.";
+ next;
+
+ .@opt$ = "Lower level hunting [61-80]"
+ ":Intermediate level hunting [80-99]"
+ ":High level hunting [90 and up]"
+ ":Cancel my current quest.";
+ .@choice = select(.@opt$) - 1;
+ if (.@choice < 3) {
+ if (BaseLevel < .@min_level[.@choice]) {
+ mes "[Reno]";
+ mes "I am sorry but the request for the "+.@type$[.@choice]
+ + " collection is only available for those level "
+ + .@min_level[.@choice] + " and higher. You do not seem to"
+ " be capable of carrying out this request.";
+ close;
+ }
+ if (callsub(S_CheckQuestStatus, .@quests[.@choice*3], .@quests[.@choice*3+1], .@quests[.@choice*3+2])) {
+ mes "[Reno]";
+ mes "You seem to be under the other request of "+.@type$[.@choice]
+ + " collection. If the quest seems to be too hard... how"
+ " about you ^FF0000give up on the request^000000?";
+ close;
+ }
+ if (questprogress(.@quests[.@choice*3], PLAYTIME) == 1) {
+ mes "[Reno]";
+ mes "Currently waiting for the "+.@type$[.@choice]+" collection"
+ " commission. Tasks in each collection can only be"
+ " completed once per day."; //custom translation
+ close;
+ }
+ mes "[Reno]";
+ mes "You selected to hunt a monster from the "+.@type$[.@choice]
+ + " collection. After hunting these monsters you will receive "
+ + ((.@features_iRO)?"10 ":"")+"^0000FF"+.@crystal$[.@choice]
+ + " Energy Crystals^000000 when you return to me.";
+ next;
+ mes "[Reno]";
+ mes "Please select the monster that you think you can easily hunt from the list.";
+ next;
+ switch (.@choice) {
+ case 0:
+ .@quest = select(
+ "[Lower class] Requiem",
+ "[Lower class] Bathory",
+ "[Lower class] Spring Rabbit",
+ "[Lower class] Sleeper",
+ "[Lower class] Evil Druid",
+ "[Lower class] Ground Petite",
+ "[Lower class] Clock"
+ );
+ break;
+ case 1:
+ .@quest = select(
+ "[Intermediate class] Siroma",
+ "[Intermediate class] Dark Priest",
+ "[Intermediate class] Stapo",
+ "[Intermediate class] Solider"
+ );
+ break;
+ case 2:
+ .@quest = select(
+ "[Advanced] Desert Wolf",
+ "[Advanced] Medusa",
+ "[Advanced] Pinguicula",
+ "[Advanced] Majoruros",
+ "[Highest] Raydric",
+ "[Highest] Naga",
+ "[Highest] Ancient Mummy",
+ "[Highest] Ancient Mimic"
+ );
+ if (.@quest > 4 && BaseLevel < .@min_level[3]) {
+ mes "[Reno]";
+ mes "I am sorry but the request for the most advanced"
+ " collection is only available for those level "
+ + .@min_level[3]+" and higher. You do not seem to"
+ " be capable of carrying out this request.";
+ close;
+ }
+ break;
+ }
+ setquest .@quests[.@choice*3+1] + .@quest - 1;
+ mes "[Reno]";
+ mes "The request for "+.@type$[.@choice]+" collection monsters has been"
+ " issued. Please check the details on the issued document.";
+ close;
+ }
+ // else: Cancel
+ for (.@i = 0; .@i<3; ++.@i) {
+ if (callsub(S_CheckQuestStatus, .@quests[.@i*3], .@quests[.@i*3+1], .@quests[.@i*3+2])) {
+ mes "[Reno]";
+ mes "You are currently under the request of the "
+ +.@type$[.@i]+" collection. If you give up now,"
+ " all your history will be lost. Do you really"
+ " want to give up?";
+ next;
+ if (select("Yes:No") != 1) {
+ .@erase_quest = 2;
+ continue;
+ }
+ .@erase_quest = 1;
+ for (.@quest = .@quests[.@i*3+1]; .@quest < .@quests[.@i*3+1]+.@quests[.@i*3+2]; ++.@quest) {
+ if (questprogress(.@quest))
+ erasequest .@quest;
+ }
+ }
+ }
+ switch (.@erase_quest) {
+ case 0:
+ mes "[Reno]";
+ mes "You are not under any request.";
+ case 1:
+ mes "[Reno]";
+ mes "The written request for you has been withdrawn.";
+ case 2:
+ mes "[Reno]";
+ mes "Please keep up on it.";
+ }
+ close;
+ case 3:
+ mes "[Reno]";
+ mes "Do you want to accumulate Energy Crystals inside of your body to receive a buff?";
+ next;
+ .@choice = select("Accumulating Energy Crystals?"
+ ":Accumulate Rough Energy Crystal"
+ ":Accumulate Purified Energy Crystal"
+ ":Accumulate High Energy Crystal") - 1;
+ if (!.@choice) {
+ mes "[Reno]";
+ mes "Energy Crystals are accumulated in your body when you hunt the"
+ " monsters we ask you to.";
+ next;
+ mes "[Reno]";
+ mes "Our research shows that some methods enable humans to accumulate the"
+ " energy crystals inside of the body in the form of a buff.";
+ next;
+ mes "[Reno]";
+ mes "If you spend about 3 hours, you will be able to gain a small amount"
+ " of Energy Crystals. So do you want to receive the buff?";
+ close;
+ }
+ .@quest = 5222 + .@choice;
+ .@rate = 1 + .@choice;
+ setarray .@buffs, SC_QUEST_BUFF1, SC_QUEST_BUFF2, SC_QUEST_BUFF3;
+ if (questprogress(.@crystal_quests[.@choice], PLAYTIME) == 1) {
+ mes "[Reno]";
+ mes "Were you successful? While storing other Energy Crystals will not have"
+ " much effect on your body, storing the same one may cause you harm."; //custom translation
+ close;
+ }
+ if (BaseLevel < .@min_level[.@choice]) {
+ mes "[Reno]";
+ mes "With a body like that, you can't accumulate "+.@crystal$[.@choice]
+ +" Energy Crystals. You must be level "+.@min_level[.@choice]+" or"
+ " your body will be harmed in the process."; //custom translation
+ close;
+ }
+ if (.@energy_buf00) {
+ mes "[Reno]";
+ mes "Accumulating Energy Crystal has already begun. I am sorry but it is"
+ " impossible to accumulate two different types of Energy Crystals"
+ " at a time.";
+ close;
+ }
+ if (questprogress(.@quest) > 0) {
+ erasequest .@quest;
+ mes "[Reno]";
+ mes "An error has occurred. Please forgive me for the inconvenience."; //custom translation
+ close;
+ }
+ mes "[Reno]";
+ mes "It takes 3 hours for your body to accumulate 2 to 4 "+.@crystal$[.@choice]
+ +" Energy Crystals. Do you want to start?";
+ next;
+ if (select("Cancel:Start") == 1) {
+ mes "[Reno]";
+ mes "I recommend that you try to accumulate Energy Crystal when you have time.";
+ close;
+ }
+ mes "[Reno]";
+ mes "You might feel a slight tingle.";
+ next;
+ specialeffect2 EF_BASH3D;
+ percentheal .@rate * -5,0;
+ //consumeitem ??; //Keep_Connection_[.@rate]
+ sc_start .@buffs[.@choice], 10800000, .@rate; // Atk/Matk + 5*rate (+5, +10, +15)
+ setquest .@quest;
+ mes "[Reno]";
+ mes "- Puck -";
+ next;
+ mes "[Reno]";
+ mes "Everything seems to be in order. Let's start accumulating "+.@crystal$[.@choice]
+ +" Energy Crystals. Remember to come back to me after 3 hours to get the "
+ +.@crystal$[.@choice]+" Energy Crystals.";
+ close;
+ case 4:
+ mes "[Reno]";
+ mes "Do you want to compress the Energy Crystals?";
+ next;
+ switch(select("What does compressing do?"
+ ":Compress Rough to Purified Crystal"
+ ":Compress Purified to High Crystal")) {
+ case 1:
+ mes "[Reno]";
+ mes "Are you curious about Energy Crystal compression? I can compress"
+ " lower level Energy Crystals into higher ones.";
+ next;
+ mes "[Reno]";
+ mes "Here is what I can make.";
+ mes "^FF000010 Rough Energy Crystals^000000 = ^FF00001 Purified Energy Crystal^000000";
+ mes "^FF00005 Purified Energy Crystals^000000 = ^FF00001 High Energy Crystal^000000";
+ next;
+ mes "[Reno]";
+ mes "If you need higher grade Energy Crystals, this is a good way to get"
+ " them since the lower ones are easier to get.";
+ close;
+ case 2:
+ .@crystal = Rough_Energy_Crystal;
+ .@crystal_ = Purified_Energy_Crystal;
+ .@rate = 10;
+ break;
+ case 3:
+ .@crystal = Purified_Energy_Crystal;
+ .@crystal_ = High_Purity_Energy_Xtal;
+ .@rate = 5;
+ break;
+ }
+ .@crystal_count = countitem(.@crystal);
+ .@crystal_get = .@crystal_count / .@rate;
+ mes "[Reno]";
+ mes sprintf("^FF0000%d %s^000000 = ^FF00001 %s^000000",.@rate,getitemname(.@crystal),getitemname(.@crystal_));
+ next;
+ mes "[Reno]";
+ mes sprintf("%d %ss will be compressed to %d %ss.",.@crystal_count,getitemname(.@crystal),.@crystal_get,getitemname(.@crystal_));
+ mes "Do you want to compress?";
+ next;
+ if (select("Compress:Stop") == 2) {
+ mes "[Reno]";
+ mes "Okay, please contact if you need me in the future.";
+ close;
+ }
+ while (true) {
+ //custom translation
+ if (countitem(.@crystal) < .@rate) {
+ mes "[Reno]";
+ mes "You don't have enough "+getitemname(.@crystal)+".";
+ next;
+ break;
+ }
+ delitem .@crystal,.@rate;
+ getitem .@crystal_,1;
+ .@crystal_count = countitem(.@crystal);
+ .@crystal_get = .@crystal_count / .@rate;
+ mes "[Reno]";
+ mes "The compression was very successful.";
+ mes "There are "+.@crystal_count+" Energy Crystals left, which can"
+ " compress into "+.@crystal_get+" Energy Crystals. Do you"
+ " want to continue?";
+ next;
+ if (select("Compress:Stop") == 2)
+ break;
+ }
+ mes "[Reno]";
+ mes "Compression completed.";
+ close;
+ case 5:
+ disable_items;
+ mes "[Reno]";
+ mes "Do you want to exchange Energy Crystals for equipment? Please select the type"
+ " of Energy Crystal that you wish to exchange.";
+ next;
+ switch (select("See Equipment List"
+ ":["+countitem(Rough_Energy_Crystal)+"] Rough Energy Crystal"
+ ":["+countitem(Purified_Energy_Crystal)+"] Purified Energy Crystal"
+ ":["+countitem(High_Purity_Energy_Xtal)+"] High Energy Crystal")) {
+ case 1:
+ mes "[Reno]";
+ mes "This is the brochure regarding the equipment upgrade that our Energy"
+ " Crystal research association provides. Please take a look around.";
+ close2;
+ readbook Energy_Xtal_Combi_Book,1;
+ end;
+
+ // Variable descriptions
+ // .@crystal: Energy Crystal used
+ // .@items: Array of tuples <material, showslot, cost, reward>, where:
+ // material: equipment to upgrade
+ // showslot: display slots with equipment name (-1 to disable)
+ // cost: amount of Energy Crystals needed
+ // rewards: upgraded equipment
+ case 2:
+ .@crystal = Rough_Energy_Crystal;
+ setarray .@items,
+ // Material,showslot,cost,rewards
+ Wizardry_Hat, -1, 100, Remodel_Wizardry_Hat,
+ Magician_Hat, -1, 100, Remodel_Magician_Hat,
+ Mask_Of_Fox, -1, 100, Remodel_Mask_Of_Fox,
+ Joker_Jester, -1, 100, Remodel_Joker_Jester,
+ Bunny_Band, -1, 100, Remodel_Bunny_Band,
+ Munak_Turban_, -1, 100, Remodel_Munak_Turban,
+ Bongun_Hat_, -1, 100, Remodel_Bongun_Hat,
+ Opera_Ghost_Mask, -1, 100, Remodel_Opera_Mask;
+ break;
+ case 3:
+ .@crystal = Purified_Energy_Crystal;
+ setarray .@items,
+ // Material,showslot,cost,rewards
+ Binoculars, -1, 200, Improved_Binoculars,
+ Fin_Helm, -1, 200, Improved_Fin_Helm,
+ Assassin_Mask_, -1, 200, Improved_Assassin_Mask,
+ Welding_Mask, -1, 200, Improved_Welding_Mask,
+ Safety_Ring, -1, 200, Safety_Ring_,
+ Angel's_Protection, 1, 100, Im_Angel's_Protection,
+ Angel's_Safeguard, 1, 100, Impr_Angel's_Safeguard,
+ Angel's_Arrival, 1, 100, Impr_Angel's_Arrival,
+ Angel's_Warmth, 1, 100, Impr_Angel's_Warmth,
+ Kiss_Of_Angel, 1, 100, Improved_Kiss_Of_Angel;
+ break;
+ case 4:
+ .@crystal = High_Purity_Energy_Xtal;
+ setarray .@items,
+ // Material,showslot,cost,rewards
+ Corsair, -1, 300, Enhanced_Corsair,
+ Bone_Helm_, 1, 300, Enhanced_Bone_Helm,
+ Helm_Of_Angel, -1, 300, Enhanced_Helm_Of_Angel,
+ Helm_Of_Sun, 0, 1000, Enhanced_Helm_Of_Sun,
+ Helm_Of_Sun_, 1, 100, Enhanced_Helm_Of_Sun,
+ Variant_Shoes, -1, 300, Enhanced_Variant_Shoes,
+ Ring_Of_Flame_Lord,-1, 300, Good_Ring_Of_Flame_Lord,
+ Ring_Of_Resonance, -1, 300, Good_Ring_Of_Resonance,
+ Angel's_Protection, 1, 20, Im_Angel's_Protection,
+ Angel's_Safeguard, 1, 20, Impr_Angel's_Safeguard,
+ Angel's_Arrival, 1, 20, Impr_Angel's_Arrival,
+ Angel's_Warmth, 1, 20, Impr_Angel's_Warmth,
+ Kiss_Of_Angel, 1, 20, Improved_Kiss_Of_Angel;
+ break;
+ }
+
+ mes "[Reno]";
+ mes "Please select the equipment to exchange for "+getitemname(.@crystal)+"s.";
+ next;
+ .@crystal_count = countitem(.@crystal);
+ .@opt$ = "";
+ for (.@i = 0; .@i < getarraysize(.@items); .@i += 4) {
+ .@item_name$ = getitemname(.@items[.@i]) + ((.@items[.@i+1] > -1)?"["+.@items[.@i+1]+"]":"");
+ .@opt$ += sprintf("%s (%d/%d):",.@item_name$,.@crystal_count,.@items[.@i+2]);
+ }
+ .@index = select(.@opt$) - 1;
+ .@material = .@items[.@index*4];
+ .@item_name$ = getitemname(.@material) + ((.@items[.@index*4+1] > -1)?"["+.@items[.@index*4+1]+"]":"");
+ .@cost = .@items[.@index*4+2];
+ .@reward = .@items[.@index*4+3];
+
+ //custom translations
+ if (.@material == Safety_Ring) {
+ // Special case: Safety Ring
+ if (countitem(Safety_Ring) < 1 || countitem(Ring_) < 1
+ || countitem(Earring_) < 1 || countitem(Glove_) < 1
+ || countitem(Brooch_) < 1 || countitem(Necklace_) < 1
+ || countitem(Rosary_) < 1 || countitem(.@crystal) < .@cost) {
+ mes "[Reno]";
+ mes "The materials to make a Safety Ring[1] are insufficient."
+ " Please check your inventory.";
+ close;
+ }
+ mes "[Reno]";
+ mes "Before upgrading your Safety Ring, please listen to these"
+ " ^FF0000precautions^000000.";
+ next;
+ mes "[Reno]";
+ mes "^FF0000In addition to the Safety Ring, all refinements and cards of"
+ " the required materials will also disappear.^000000";
+ next;
+ } else {
+ if (countitem(.@material) < 1 || countitem(.@crystal) < .@cost) {
+ mes "[Reno]";
+ mes "The materials are insufficient. Please check your materials.";
+ close;
+ }
+ mes "[Reno]";
+ mes "Before upgrading your equipment, please listen to these"
+ " ^FF0000precautions^000000.";
+ next;
+ mes "[Reno]";
+ mes "^FF0000When using Energy Crystals to upgrade equipment, all previous"
+ " refinements, enchantments, and cards will be lost.^000000";
+ next;
+ }
+ mes "[Reno]";
+ mes "Are you familiar with the ^FF0000precautions^000000?";
+ next;
+ if (select("I am.:No.") == 2) {
+ mes "[Reno]";
+ mes "Okay. Next time, then.";
+ close;
+ }
+ mes "[Reno]";
+ mes "Then let's begin to upgrade "+.@item_name$+".";
+ next;
+ if (countitem(.@material) < 1 || countitem(.@crystal) < .@cost) {
+ mes "[Reno]";
+ mes "The materials are insufficient. Please check your materials.";
+ close;
+ }
+ if (.@material == Safety_Ring) {
+ // Special case: Safety Ring
+ if (countitem(Safety_Ring) < 1 || countitem(Ring_) < 1
+ || countitem(Earring_) < 1 || countitem(Glove_) < 1
+ || countitem(Brooch_) < 1 || countitem(Necklace_) < 1
+ || countitem(Rosary_) < 1 || countitem(.@crystal) < .@cost) {
+ mes "[Reno]";
+ mes "The materials to make a Safety Ring[1] are insufficient."
+ " Please check your inventory.";
+ close;
+ }
+ }
+ specialeffect2 EF_REPAIRWEAPON;
+ progressbar "ffff00",2;
+ delitem .@material,1;
+ if (.@material == Safety_Ring) {
+ delitem Ring_,1;
+ delitem Earring_,1;
+ delitem Glove_,1;
+ delitem Brooch_,1;
+ delitem Necklace_,1;
+ delitem Rosary_,1;
+ }
+ delitem .@crystal,.@cost;
+ getitem .@reward,1;
+ mes "[Reno]";
+ mes "The upgrade was successful. Your Energy Crystals will help our research greatly.";
+ close;
+ case 6:
+ mes "[Reno]";
+ mes "Do you want to donate Energy Crystals to get a random new headgear?";
+ next;
+ switch (select("Donate Energy Crystals?"
+ ":Donate 300 Rough Energy Crystals."
+ ":Donate 600 Purified Energy Crystals."
+ ":Donate 900 High Energy Crystals.")) {
+ case 1:
+ mes "[Reno]";
+ mes "We are collecting Energy Crystals so that we can research more"
+ " combinations of headgears for adventurers.";
+ next;
+ mes "[Reno]";
+ mes "Thanks to the support of adventurers we can use these Energy"
+ " Crystals to further our research.";
+ next;
+ mes "[Reno]";
+ mes "So we receive a minimum of 300 Rough Energy Crystals, 600 Purified"
+ " Energy Crystals, and 900 High Energy Crystals.";
+ if (!.@features_iRO) {
+ next;
+ mes "[Reno]";
+ mes "You may feel that this is a burden, but for the sake of our"
+ " research, please continue."; //custom translation
+ close;
+ }
+ mes "For the donation, I'll give you a random new headgear.";
+ next;
+ mes "[Reno]";
+ mes "300 Rough Energy Crystals";
+ mes "- New Mage Hat";
+ mes "- New Magician Hat";
+ mes "- New Kitsune Mask";
+ mes "- New Joker Jester";
+ mes "- New Bunny Band";
+ mes "- New Munak Hat";
+ mes "- New Bongun Hat";
+ mes "- New Phantom Opera Mask";
+ next;
+ mes "[Reno]";
+ mes "600 Purified Energy Crystals";
+ mes "- Good Binoculars";
+ mes "- Good Fin Helm";
+ mes "- Good Assassin Mask";
+ mes "- Good Welding Mask";
+ mes "- Good Safety Ring";
+ mes "- Good Angelic Protection";
+ mes "- Good Angelic Guard";
+ mes "- Good Angelic Cardigan";
+ mes "- Good Angel's Reincarnation";
+ next;
+ mes "[Reno]";
+ mes "900 High Energy Crystals";
+ mes "- Enhanced Corsair";
+ mes "- Enhanced Bone Helm";
+ mes "- Enhanced Helm of Angel";
+ mes "- Enhanced Variant Shoes";
+ mes "- Enhanced Ring of Flame Lord";
+ mes "- Enhanced Ring of Resonance";
+ close;
+ case 2:
+ if (countitem(Rough_Energy_Crystal) < 300) {
+ mes "[Reno]";
+ mes "Thank for your support, but we need 300 Rough Energy Crystals.";
+ close;
+ }
+ delitem Rough_Energy_Crystal,300;
+ .@r = rand(1,17);
+ if (.@r <= 2) getitem Remodel_Wizardry_Hat,1;
+ else if (.@r <= 4) getitem Remodel_Magician_Hat,1;
+ else if (.@r <= 6) getitem Remodel_Mask_Of_Fox,1;
+ else if (.@r <= 8) getitem Remodel_Joker_Jester,1;
+ else if (.@r <= 10) getitem Remodel_Bunny_Band,1;
+ else if (.@r <= 13) getitem Remodel_Munak_Turban,1;
+ else if (.@r <= 16) getitem Remodel_Bongun_Hat,1;
+ else getitem Remodel_Opera_Mask,1;
+ break;
+ case 3:
+ if (countitem(Purified_Energy_Crystal) < 600) {
+ mes "[Reno]";
+ mes "Thank for your support, but we need 600 Purified Energy Crystals.";
+ close;
+ }
+ delitem Purified_Energy_Crystal,600;
+ .@r = rand(1,18);
+ if (.@r <= 3) getitem Improved_Binoculars,1;
+ else if (.@r <= 6) getitem Improved_Fin_Helm,1;
+ else if (.@r <= 9) getitem Improved_Assassin_Mask,1;
+ else if (.@r <= 12) getitem Improved_Welding_Mask,1;
+ else if (.@r <= 13) getitem Safety_Ring_,1;
+ else if (.@r <= 14) getitem Im_Angel's_Protection,1;
+ else if (.@r <= 15) getitem Impr_Angel's_Safeguard,1;
+ else if (.@r <= 16) getitem Impr_Angel's_Arrival,1;
+ else if (.@r <= 17) getitem Impr_Angel's_Warmth,1;
+ else getitem Improved_Kiss_Of_Angel,1;
+ break;
+ case 4:
+ if (countitem(High_Purity_Energy_Xtal) < 900) {
+ mes "[Reno]";
+ mes "Thank for your support, but we need 900 High Energy Crystals.";
+ close;
+ }
+ delitem High_Purity_Energy_Xtal,900;
+ .@r = rand(1,33);
+ if (.@r <= 10) getitem Enhanced_Corsair,1;
+ else if (.@r <= 20) getitem Enhanced_Bone_Helm,1;
+ else if (.@r <= 25) getitem Enhanced_Helm_Of_Angel,1;
+ else if (.@r <= 30) getitem Enhanced_Variant_Shoes,1;
+ else if (.@r <= 31) getitem Good_Ring_Of_Flame_Lord,1;
+ else getitem Good_Ring_Of_Resonance,1;
+ break;
+ }
+ mes "[Reno]";
+ mes "Thank you very much. The Energy Crystals you donated will be greatly helpful"
+ " for our research. This is your reward for your donation."; //custom translation
+ close;
+ case 7: // iRO only
+ mes "[Reno]";
+ mes "This is the brochure regarding the equipment upgrade that our Energy Crystal"
+ " research association provides. Please take a look around.";
+ close2;
+ readbook Energy_Xtal_Combi_Book,1;
+ end;
+ }
+ end;
+
+// callsub(S_CheckHunting, <quest index>, <start quest>, <number of quests>, "<type>", <reward id>, <reward amount>);
+S_CheckHunting:
+ .@basequest = getarg(0);
+ .@first = getarg(1);
+ .@last = .@first + getarg(2) - 1;
+ for (.@i = .@first; .@i <= .@last; ++.@i) {
+ if (questprogress(.@i, HUNTING) == 2) {
+ mes "[Reno]";
+ mes "Finished "+ getarg(3) +" collection hunting quest.";
+ next;
+ setquest .@basequest;
+ erasequest .@i;
+ getitem getarg(4), getarg(5);
+ mes "You receive "+ getarg(5) +" "+ getitemname(getarg(4)) +" as the "+ getarg(3) +" collection reward.";
+ close;
+ }
+ }
+ return;
+
+// callsub(S_CheckQuestStatus, <quest index>, <start quest>, <number of quests>
+S_CheckQuestStatus:
+ .@basequest = getarg(0);
+ .@first = getarg(1);
+ .@last = .@first + getarg(2) - 1;
+ .@status = false;
+ for (.@i = .@first; .@i <= .@last; ++.@i) {
+ if (questprogress(.@i))
+ return true;
+ }
+ return false;
+}
diff --git a/npc/re/scripts.conf b/npc/re/scripts.conf
index 1faace664..0774428e2 100644
--- a/npc/re/scripts.conf
+++ b/npc/re/scripts.conf
@@ -142,3 +142,5 @@ npc: npc/re/quests/quests_mora.txt
npc: npc/re/quests/quests_morocc.txt
npc: npc/re/quests/quests_nameless.txt
npc: npc/re/quests/quests_veins.txt
+// - New Gears --------------------------------------------------
+npc: npc/re/quests/newgears/2012_headgears.txt