summaryrefslogtreecommitdiff
path: root/npc/002-1
diff options
context:
space:
mode:
authorSaulc <lucashelaine14@gmail.com>2018-02-06 21:09:35 +0100
committerSaulc <lucashelaine14@gmail.com>2018-02-06 21:09:35 +0100
commitf127d9cc42a1a1431dff8ca39d7d3f515216d1a2 (patch)
tree94b8a3f4716d99259c5f2e37bac741b1762b81fe /npc/002-1
parentb3bf92fd561ef1a9514841817c94b1060dc7063b (diff)
downloadserverdata-f127d9cc42a1a1431dff8ca39d7d3f515216d1a2.tar.gz
serverdata-f127d9cc42a1a1431dff8ca39d7d3f515216d1a2.tar.bz2
serverdata-f127d9cc42a1a1431dff8ca39d7d3f515216d1a2.tar.xz
serverdata-f127d9cc42a1a1431dff8ca39d7d3f515216d1a2.zip
add npc's on 002-1
Diffstat (limited to 'npc/002-1')
-rw-r--r--npc/002-1/_import.txt11
-rw-r--r--npc/002-1/alige.txt320
-rw-r--r--npc/002-1/arpan.txt272
-rw-r--r--npc/002-1/chefgado.txt213
-rw-r--r--npc/002-1/chest.txt72
-rw-r--r--npc/002-1/dan.txt94
-rw-r--r--npc/002-1/devis.txt17
-rw-r--r--npc/002-1/hammock.txt125
-rw-r--r--npc/002-1/knife.txt48
-rw-r--r--npc/002-1/mapflags.txt1
-rw-r--r--npc/002-1/peter.txt339
-rw-r--r--npc/002-1/story_save.txt30
12 files changed, 1542 insertions, 0 deletions
diff --git a/npc/002-1/_import.txt b/npc/002-1/_import.txt
index 7812ced5f..fc6ddd14e 100644
--- a/npc/002-1/_import.txt
+++ b/npc/002-1/_import.txt
@@ -3,3 +3,14 @@
"npc/002-1/_mobs.txt",
"npc/002-1/_savepoints.txt",
"npc/002-1/_warps.txt",
+"npc/002-1/alige.txt",
+"npc/002-1/arpan.txt",
+"npc/002-1/chefgado.txt",
+"npc/002-1/chest.txt",
+"npc/002-1/dan.txt",
+"npc/002-1/devis.txt",
+"npc/002-1/hammock.txt",
+"npc/002-1/knife.txt",
+"npc/002-1/mapflags.txt",
+"npc/002-1/peter.txt",
+"npc/002-1/story_save.txt",
diff --git a/npc/002-1/alige.txt b/npc/002-1/alige.txt
new file mode 100644
index 000000000..4830ad0b2
--- /dev/null
+++ b/npc/002-1/alige.txt
@@ -0,0 +1,320 @@
+// Evol scripts.
+// Authors:
+// Ablu
+// Alige
+// Qwerty Dragon
+// Reid
+// Vasily_Makarov
+// Description:
+// Hidden in a ship's hole.
+// 2 bits array:
+// ShipQuests
+// Variable:
+// ShipQuests_Alige
+// Values:
+// 0 Never talk.
+// 1 First talk.
+// 2 Accept the task.
+// 3 Bring first food.
+
+002-1,45,27,0 script AligeTrigger NPC_HIDDEN,1,1,{
+
+OnTouch:
+ if (getareausers() <= 1)
+ {
+ setnpcdir "Alige", 2;
+ stopnpctimer;
+ initnpctimer;
+ }
+
+ if (getq(ShipQuests_Alige) > 0) close;
+ doevent "Alige::OnFirstEncounter";
+
+ close;
+
+OnUnTouch:
+ if (getareausers() == 0)
+ {
+ setnpcdir "Alige", 4;
+ stopnpctimer;
+ initnpctimer;
+ }
+ close;
+
+OnTimer190:
+ stopnpctimer;
+
+ if (getnpcdir("Alige") == 2) setnpcdir "Alige", 6;
+ if (getnpcdir("Alige") == 4) setnpcdir "Alige", 8;
+
+ end;
+}
+
+002-1,45,26,0 script Alige NPC_ALIGE,{
+ .@q = getq(ShipQuests_Alige);
+ if (.@q > 1) goto L_AskForFood;
+
+ goto OnFirstEncounter;
+
+OnFirstEncounter:
+ setq ShipQuests_Alige, 1;
+
+ setcamnpc;
+ mesn "Hidden Person";
+ mesq l("Hey, psst! You're not a sailor, right?");
+ next;
+ restorecam;
+
+ menu
+ lg("I am, who are you?"), -,
+ lg("Indeed, I am not."), L_NeedHelp;
+
+ mes "";
+ mesn "Narrator";
+ mes col(l("The stowaway doesn't answer."), 9);
+
+ close;
+
+L_NeedHelp:
+ setcamnpc;
+ mes "";
+ mesn "Hidden Person";
+ mesq l("Good, good... Hey, could you help me please? I beg you, please, pleeeease...");
+ next;
+ restorecam;
+
+ menu
+ l("Why not, but who are you, and what kind of help do you need?"), L_CanHelp;
+ l("Sorry but I have no time for this."), -;
+
+ closedialog;
+ close;
+
+L_CanHelp:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("My name is Alige, I've been hiding here for weeks. All I have to eat are these berries... berries... berries...");
+ next;
+ mesq l("I'm losing my mind here, I need something else to eat!");
+ next;
+ mesq l("Could you please bring me something which isn't a berry, and I'm not big on vegetables either. I need proteins!");
+ next;
+ restorecam;
+
+ menu
+ l("Sure, but what will you give me in exchange?"), L_AboutReward,
+ l("Why don't you come out?"), -;
+
+L_ExplainHiding:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("No, I can't. I won't! All I wanted was to travel across the seas for fun, growl... sniff. And in this hole in the floor, as you can see, I have lots of fun.");
+ next;
+ mesq l("Oh... um... actually... all I wanted was to get to Artis. Err... but I didn't, uhm... have enough money to pay for the ferry!");
+ next;
+ mesq l("Please don't tell people you saw me. I don't want to be decapitated or get thrown into the sea as food for sharks, or get my hair mussed!");
+ next;
+ restorecam;
+
+ if (getq(ShipQuests_Alige) == 2) goto L_SoAskForFood;
+ goto L_Accept;
+
+L_AboutReward:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("I'll share my berries with you if you help me.");
+ next;
+ restorecam;
+
+L_Accept:
+ menu
+ l("Understood, I will help you."), L_FirstAccepted,
+ l("What is Artis?"), L_Artis,
+ l("I think I should report you to the crew members."), -;
+
+ setcamnpc;
+ mesq lg("Growl, sniff, grr! You'd better not tell anyone you saw me!");
+
+ close;
+
+L_Artis:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("It's a commercial port of Andorra, it's weird that you don't know about it since it is one of the most famous cities throughout the whole world. But hey, back to me. Remember me telling you that I'm hun...grrr...eee!");
+ next;
+ restorecam;
+
+ if (.@q == 2) goto L_SoAskForFood;
+ goto L_Accept;
+
+L_FirstAccepted:
+ if (getq(ShipQuests_Alige) >= 2) goto L_Accepted;
+ setq ShipQuests_Alige, 2;
+
+ goto L_Accepted;
+
+L_Accepted:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq lg("Great, what food do you have for me today?");
+ next;
+ restorecam;
+
+L_GiveFood:
+ mes "";
+ menuint
+ rif(countitem(Acorn), l(getitemname(Acorn))), 0,
+ rif(countitem(Bread), l(getitemname(Bread))), 502,
+ rif(countitem(Fungus), l(getitemname(Fungus))), 503,
+ rif(countitem(Cheese), l(getitemname(Cheese))), 504,
+ rif(countitem(PiouLegs), l(getitemname(PiouLegs))), 505,
+ rif(countitem(LettuceLeaf), l(getitemname(LettuceLeaf))), 0,
+ rif(countitem(Piberries), l(getitemname(Piberries))), 2,
+ rif(countitem(SeaDrops), l(getitemname(SeaDrops))), 1,
+ rif(countitem(Aquada), l(getitemname(Aquada))), 509,
+ rif(countitem(PinkBlobime), l(getitemname(PinkBlobime))), 1,
+ rif(countitem(HalfCroconut), l(getitemname(HalfCroconut))), 512,
+ rif(countitem(Croconut), l(getitemname(Croconut))), 0,
+ rif(countitem(Plushroom), l(getitemname(Plushroom))), 515,
+ rif(countitem(PumpkinSeeds), l(getitemname(PumpkinSeeds))), 1,
+ rif(countitem(UrchinMeat), l(getitemname(UrchinMeat))), 1,
+ rif(countitem(EasterEgg), l(getitemname(EasterEgg))), 1,
+ rif(countitem(PumpkishJuice), l(getitemname(PumpkishJuice))), 527,
+ rif(countitem(Manana), l(getitemname(Manana))), 528,
+ rif(countitem(Curshroom), l(getitemname(Curshroom))), 529,
+ rif(countitem(Carrot), l(getitemname(Carrot))), 530,
+ rif(countitem(RedPlushWine), l(getitemname(RedPlushWine))), 3,
+ l("I don't have anything good for you today."), -1;
+
+ .@id = @menuret;
+ if (.@id == -1) goto L_Quit; // Quit message.
+ if (.@id == 0) goto L_NoReward; // In case of wrong food.
+ if (.@id == 1) goto L_Poison; // In case of poisoned food.
+ if (.@id == 2) goto L_NoMore; // In case of Piberries.
+ if (.@id == 3) goto L_Drunk; // In case of Alcohol.
+ if (countitem(.@id) == 0) goto L_Quit;
+// if (.@id == item's ID) then food is correct.
+// Do not put any other number than -1, 0, 1, 2 or the item's ID, that'll avoid confusion.
+
+ inventoryplace Piberries, 3;
+ delitem .@id, 1;
+
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("Thank you so much! Here, have some of my berries.");
+
+ setq ShipQuests_Alige, 3;
+ getitem Piberries, rand(1, 3);
+ next;
+
+ goto L_ReturnMenu;
+
+L_NoReward:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("You don't expect me to eat that, do you? Give me something else!");
+ next;
+ restorecam;
+
+ goto L_GiveFood;
+
+L_Drunk:
+ setcamnpc;
+ speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
+ l("I asked for food but... *hips* Ah, that'll do!");
+ restorecam;
+
+ goto L_GiveFood;
+
+L_ReturnMenu:
+ setcamnpc;
+ mesq l("Do you have anything else for me?");
+ next;
+ restorecam;
+
+ goto L_GiveFood;
+
+L_NoMore:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("Grr, don't give me more berries! I don't want them, stupid berries, stupid... Stupid... Stupid!");
+ next;
+
+ goto L_ReturnMenu;
+
+L_Poison:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("Don't try to poison me! I know what that does!");
+ next;
+ restorecam;
+ goto L_ReturnMenu;
+
+L_SoAskForFood:
+ setcamnpc;
+ mesn;
+ mesq l("So, do you have anything for me today?");
+ next;
+ restorecam;
+ goto L_IntroMenu;
+
+L_AskForFood:
+ setcamnpc;
+ mesn;
+ mesq l("Do you have anything for me today?");
+ next;
+ restorecam;
+
+L_IntroMenu:
+ menu
+ l("Yes."), L_GiveFood,
+ l("Where can I find some food?"), L_FindFood,
+ l("Why are you hiding?") + " " + l("Why don't you come out?"), L_ExplainHiding,
+ l("What is Artis?"), L_Artis,
+ l("I think I should report you to the crew members."), -;
+
+ setcamnpc;
+ mesq lg("Growl, sniff, grr! You'd better not tell anyone you saw me!");
+
+ close;
+
+L_FindFood:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("There are some flying yellow plushes around you. They're called pious. Getting a roasted leg of one of them would be perfect.");
+ next;
+ mesq l("I'd like to catch one of them, but they fly away when I try.");
+ next;
+ mesq l("Walking around a bit, it'll be easy for you to catch one, I bet. Impale one of them for me please.");
+ next;
+ restorecam;
+ mesn "Narrator";
+ mes col(l("You can attack a monster by clicking on it, or from your keyboard you can press the 'A' key to select the monster followed by 'Ctrl' to attack it."), 9);
+ next;
+ mes col(l("Once the monster is dead, click on the dropped items to add them to your inventory. You can also use the 'Z' key to claim the drops."), 9);
+
+ close;
+
+L_Quit:
+ setcamnpc;
+ mes "";
+ mesn;
+ mesq l("Too bad... Come back when you'll have some nice food for me. Growl... grumble... grumble.");
+
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 2;
+ end;
+}
diff --git a/npc/002-1/arpan.txt b/npc/002-1/arpan.txt
new file mode 100644
index 000000000..61662fcea
--- /dev/null
+++ b/npc/002-1/arpan.txt
@@ -0,0 +1,272 @@
+// Evol scripts.
+// Authors:
+// Ablu
+// Qwerty Dragon
+// Description:
+// Explains to the player how he got here.
+// Variable:
+// 0 ShipQuests_Arpan
+// 1 ShipQuests_Julia
+// Values:
+// 00 Has not talked to Arpan yet.
+// 01 Talked to Arpan and needs to get the clothes.
+// 02 Has the clothes.
+// 03 Has and equipped the clothes.
+// 10 Has not talked to Julia
+// 11 Need to see Julia
+// 12 Has been registered by Julia
+
+002-1,49,36,0 script LeftDoorCheck NPC_HIDDEN,0,0,{
+ .@q = getq(ShipQuests_Arpan);
+ if (.@q == 0) doevent "Magic Arpan::OnTalk";
+
+ close;
+}
+
+002-1,54,36,0 script RightDoorCheck NPC_HIDDEN,0,0,{
+ .@q = getq(ShipQuests_Arpan);
+ if (.@q == 0) doevent "Magic Arpan::OnTalk";
+
+ close;
+}
+
+002-1,47,32,0 script LeftBarrierCheck NPC_HIDDEN,0,2,{
+ .@q = getq(ShipQuests_Arpan);
+ if (.@q > 2) close;
+ if (.@q == 2 && getequipid(equip_torso) == 1300 && getequipid(equip_legs) == 2200) goto L_EquipDone;
+ if (.@q == 2) goto L_Equip;
+ if (.@q == 1) goto L_GetCloth;
+
+ doevent "Magic Arpan::OnClothNotTaken";
+
+L_Equip:
+ warp "002-1", 49, 32;
+ doevent "Magic Arpan::OnEquip";
+
+ close;
+
+L_GetCloth:
+ warp "002-1", 49, 32;
+ doevent "Magic Arpan::OnClothNotTaken";
+
+ close;
+
+L_EquipDone:
+ setq ShipQuests_Arpan, 3;
+
+ close;
+}
+
+002-1,56,32,0 script RightBarrierCheck NPC_HIDDEN,0,2,{
+ .@q = getq(ShipQuests_Arpan);
+ if (.@q > 2) close;
+ if (.@q == 2 && getequipid(equip_torso) == 1300 && getequipid(equip_legs) == 2200) goto L_EquipDone;
+ if (.@q == 2) goto L_Equip;
+ if (.@q == 1) goto L_GetCloth;
+
+ doevent "Magic Arpan::OnClothNotTaken";
+
+L_Equip:
+ warp "002-1", 55, 32;
+ doevent "Magic Arpan::OnEquip";
+
+ close;
+
+L_GetCloth:
+ warp "002-1", 55, 32;
+ doevent "Magic Arpan::OnClothNotTaken";
+
+ close;
+
+L_EquipDone:
+ setq ShipQuests_Arpan, 3;
+
+ close;
+}
+
+002-1,49,33,0 script Magic Arpan NPC_MAGIC_ARPAN,{
+ .@q = getq(ShipQuests_Arpan);
+ .@q_nard = getq(ShipQuests_Nard);
+ .@q_julia = getq(ShipQuests_Julia);
+ if (.@q == 2 && getequipid(equip_torso) == 1300 && getequipid(equip_legs) == 2200) goto L_EquipDone;
+
+OnTalk:
+ mesn;
+
+ if (.@q > 0) goto L_Menu;
+
+ mesq lg("Yeye, you are really lucky to be alive. You are in good enough shape for walking, do you remember what happened?");
+ next;
+ setq ShipQuests_Arpan, 1;
+
+ menu
+ lg("I only remember I was rescued by you."), L_Story,
+ lg("I can't remember anything."), L_OhWell;
+
+OnClothNotTaken:
+ mesn;
+ mesq lg("Yeye, you still did not get your new clothes from the chest next to your bed!");
+
+ close;
+
+OnEquip:
+ mesn "Narrator";
+ mes col(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
+ next;
+ mes col(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to remove an item by clicking on 'Unequip'."), 9);
+ next;
+ mes col(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
+
+ close;
+
+L_OhWell:
+ mes "";
+ mesq lg("Oh well, we rescued you when you were yaying adrift in the sea.");
+ next;
+
+ select
+ l("And then what happened?");
+
+L_Story:
+ mes "";
+ mesq lg("You were yaying sleeping for quite some time there. Our shipkeeper, Julia, was here with you, and she did her best to heal your injuries.");
+ next;
+ if (.@q_julia == 0) setq ShipQuests_Julia, 1;
+ mesq lg("Yaya, you should go see her! She'll be happy to see you.");
+ next;
+ mesq lg("Also, we took your yayed clothes, as they were... Yeyeye... In a bad shape. Go check the chest near your bed, there are some other ones inside.");
+ setcamnpc "Chest";
+
+ close;
+
+L_Menu:
+ mesq l("What yeye could I do for you today?");
+ next;
+ .@equipped = getequipid(equip_torso) == 1300 && getequipid(equip_legs) == 2200;
+
+ menu
+ rif(.@q_nard == 5 && getq(General_Narrator) < 1, l("What can I do now?")), L_GotoSleep,
+ lg("Could you tell me where I am?"), L_Where,
+ lg("Where can I find Julia?"), L_Julia,
+ l("Who are you?"), L_Who,
+ rif(getq(ShipQuests_ArpanMoney) == 1, lg("Do you know what happened to the gold I had when you guys saved me?")), L_WhereMoney,
+ rif(getq(ShipQuests_ArpanMoney) < 2, l("Where are my old clothes?")), L_WhereOldClothes,
+ rif(!.@equipped, lg("What should I do after taking these clothes?")), L_WhatCloth,
+ rif(!.@equipped, l("Thank you, I'll take them and put them on.")), -,
+ l("Nothing, sorry."), -;
+
+ closedialog;
+ close;
+
+L_Where:
+ mes "";
+ mesn;
+ mesq lg("You're on our ship, we made port to a little island and we're actually yeyending our long merchant traveling adventure at the city of Artis.");
+ next;
+ mesq l("We will be yaying there in a few days, so we will drop you off there.");
+ next;
+ mesq l("You will see, citizens are polite and you can still ask for help in the Legion of Aemil. They can help find a job for you or maybe help you find out what happened to you out at sea!");
+ next;
+
+ goto L_Menu;
+
+L_Julia:
+ mes "";
+ mesn;
+ mesq lg("She's on the upper level, yeye can't miss her. She's the only girl in this crew, oh well, except for you now yeyeye!", "She's on the upper level, yeye can't miss her. She's the only girl in this crew.");
+ next;
+
+ mesn "Narrator";
+ mes col(l("Julia is on the upper level of the ship, use the arrow keys to walk to the stairs or click on the stairs at the top right of your screen."), 9);
+ next;
+
+ goto L_Menu;
+
+L_Who:
+ mes "";
+ mesn;
+ mesq l("Sorry! I forgot to introduce myself. My name is Arpan, but other sailors call me Magic Arpan because I know one or two yaing magic spells.");
+ next;
+
+ goto L_Menu;
+
+L_WhereOldClothes:
+ mes "";
+ mesn;
+ mesq lg("We tried to clean them but the sea water mostly destroyed them. It's why we gave you these clothes. They're not very nice, but that's all that we have for you.");
+ next;
+ mes lg("Oh, now that I remember, we also found some money in your pockets, here it is!");
+ next;
+
+ setq ShipQuests_ArpanMoney, 2;
+ .@q = getq(ShipQuests_Arpan);
+ Zeny = Zeny + 10;
+ message strcharinfo(0), l("You receive @@ E!", 10);
+
+ goto L_BeforeMenu;
+
+L_WhereMoney:
+ mes "";
+ mesn;
+ mesq l("Oh right, I totally forgot about that, here you go.");
+ next;
+
+ setq ShipQuests_ArpanMoney, 2;
+ .@q = getq(ShipQuests_Arpan);
+ Zeny = Zeny + 10;
+ message strcharinfo(0), l("You receive @@ E!", 10);
+
+ goto L_BeforeMenu;
+
+L_WhatCloth:
+ mes "";
+ mesn;
+ mesq lg("Oh yeyeye... As they are not edible, you can maybe try to equip them?");
+ next;
+
+ mesn "Narrator";
+ mes col(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
+ next;
+ mes col(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to unequip an item by clicking on 'Unequip'."), 9);
+ next;
+ mes col(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
+ next;
+
+L_BeforeMenu:
+ mesn;
+ goto L_Menu;
+
+L_EquipDone:
+ setq ShipQuests_Arpan, 3;
+ goto L_Menu;
+
+L_GotoSleep:
+ speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
+ l("You already did enough for us, do you want to follow Nard's advice and get some rest?");
+
+ switch (select(l("Yes."), l("No.")))
+ {
+ case 1:
+ speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
+ l("Fine."),
+ l("We are at half a day from our final destination, by the time that you wake up I'm sure that we will be there!");
+
+ closedialog;
+ doevent "#name3::OnClick";
+ close;
+
+ break;
+ case 2:
+ speech S_FIRST_BLANK_LINE | S_LAST_NEXT,
+ l("Alright, take your time we are not in a hurry.");
+
+ break;
+ }
+
+ goto L_Menu;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 5;
+ end;
+}
diff --git a/npc/002-1/chefgado.txt b/npc/002-1/chefgado.txt
new file mode 100644
index 000000000..dd98a91de
--- /dev/null
+++ b/npc/002-1/chefgado.txt
@@ -0,0 +1,213 @@
+// Evol scripts.
+// Authors:
+// Hal9000
+// Qwerty Dragon
+// Description:
+// La Johanne Chef.
+// Variable:
+// ShipQuests_ChefGado
+// ShipQuests_Nard
+// Values:
+// 0 Default, no quest given.
+// 1 Quest accepted.
+// 2 Ingredients collected, ready to poison Julia.
+// 3 Julia poisoned.
+// 4 Quest complete. Chef Gago wins.
+// 5 Quest complete. Julia wins (poison dish returned).
+// 6 Quest complete. Julia wins.
+
+002-1,27,28,0 script Chef Gado NPC_CHEF_GADO,{
+ .@q = getq(ShipQuests_ChefGado);
+ .@n = getq(ShipQuests_Nard);
+ if (.@q == 1) goto L_QuestAccepted;
+ if (.@q == 2) goto L_PoisonAccepted;
+ if (.@q == 3) goto L_PoisonJulia;
+ if (.@q == 4) goto L_QuestComplete;
+ if (.@q == 5 && countitem(PoisonedDish) > 0) goto L_Aborting;
+ if (.@q > 4) goto L_QuestAborted;
+ if (.@n == 3) goto L_QuestStart;
+
+ mesn;
+ .@r = rand(3);
+ if (.@r == 0) mesq l("What are you doing in my kitchen?! Get out, it's not a place for kids!");
+ if (.@r == 1) mesq l("Where is the damn salt?! Give me the salt, I know you have it!");
+ if (.@r == 2) mesq l("Are you going to stand here all day long? Do the dishes or go away.");
+
+ close;
+
+L_QuestStart:
+ mesn;
+ mesq l("So it seems I have another stomach to fill. Those bastards have no respect for who feeds them every damn day!");
+ next;
+
+ menu
+ l("How rude! What is the reason behind your malice?"), L_Rude,
+ l("I swear, I do not eat so much."), -;
+
+ mes "";
+ mesn;
+ mesq l("Yeah, yeah, of course you don't...");
+
+ close;
+
+L_Rude:
+ mes "";
+ mesn;
+ mesq l("UAHAHAHAAH! I am the cook of that bunch of donkeys, and I can be rude with everyone from this bossy captain to that harpy-lady!");
+ next;
+
+ select
+ l("Harpy-lady?");
+
+ mes "";
+ mesn;
+ mesq l("I am sure you know her. Nice dress, large smile and a constant flux of orders and rules. Julia they call her!");
+ next;
+ mesq l("You have to know that there was a time during which I was the unopposed lieutenant of this crew. Then one day one of those damn sailors brought that 'nice' lady here.");
+ next;
+ mesq l("I will not tell you all the details, but after a month, she was ruling the ship and I was sent down here, cooking for those traitors!");
+ next;
+ mesq l("But I swear that one day... Oh... My tasty revenge! Hhm, actually I wonder if... Maybe...");
+ next;
+
+ select
+ l("M... Maybe?");
+
+ mes "";
+ mesn;
+ mesq lg("Well, eh-heh... Welcome aboard, cutie!", "Well, eh-heh... Welcome aboard, son!");
+ next;
+ mesq l("I just realized I am lacking some common things, and one key ingredient, to prepare a... A special recipe.");
+ next;
+ mesq l("I only need 2 @@, 2 @@s, 1 @@...", getitemlink(PiouLegs), getitemlink(HalfCroconut), getitemlink(Aquada));
+ next;
+ mesq l("... and 1 @@.", getitemlink(SeaDrops));
+ next;
+
+ menu
+ l("Sea water?! I will not help you with your evil plan!"), L_Quit,
+ l("Sure, why not?"), -;
+
+ setq ShipQuests_ChefGado, 1;
+ mes "";
+ mesn;
+ mesq lg("Well done! Collect all the ingredients and then come back here. You will be rewarded once I am satisfied that they understand who rules this ship!");
+ next;
+ mesq l("Before you go, let me tell you how to get @@s, because you don't look very smart.", getitemlink(HalfCroconut));
+
+ goto L_OpenCroconut;
+
+L_QuestAccepted:
+ mesn;
+ mesq l("Have you collected all the ingredients for my recipe? The special one too?");
+ next;
+
+ menu
+ rif(countitem(PiouLegs) > 1 && countitem(HalfCroconut) > 1 && countitem(Aquada) > 0 && countitem(SeaDrops) > 0, l("All your... Fresh ingredients are ready to be cooked.")), L_GotAll,
+ l("What are your needs?"), L_Need,
+ l("Where can I find a half croconut?"), L_OpenCroconut,
+ l("Not yet. I will be back soon."), L_Quit;
+
+L_OpenCroconut:
+ mes "";
+ mesn;
+ mesq lg("Take a @@ and try opening it using something like a sharp knife. I doubt you'll succeed, you're being so weak in everything.",
+ "Take a @@ and try opening it using something like a sharp knife. I doubt you'll succeed, you're being so weak in everything.", getitemlink(Croconut));
+ next;
+ mesq l("Now move!");
+
+ close;
+
+L_GotAll:
+ mes "";
+
+ inventoryplace PoisonedDish, 1;
+
+ delitem PiouLegs, 2;
+ delitem HalfCroconut, 1;
+ delitem Aquada, 1;
+ delitem SeaDrops, 1;
+
+ mesn;
+ mesq l("Let me see... Crispy legs, disgusting liquids... Let's start!");
+ next;
+ mesq l("Water, salt, spicy herbs and meat stuffed with my special surprise!");
+ next;
+ mesq l("Done. Here, take it! Now, here is the plan. Go talk to her and offer our beautiful lady a bite of her arrogance!");
+
+ setq ShipQuests_ChefGado, 2;
+ getitem PoisonedDish, 1;
+ close;
+
+L_Need:
+ mes "";
+ mesn;
+ mesq l("Shhht, don't say it that loud...");
+ next;
+ mesq l("I only need 2 @@, 2 @@s, 1 @@...", getitemlink(PiouLegs), getitemlink(HalfCroconut), getitemlink(Aquada));
+ next;
+ mesq l("... and 1 @@.", getitemlink(SeaDrops));
+
+ close;
+
+L_PoisonAccepted:
+ mesn;
+ mesq l("Fool! Just come back here when you'll be done with our little... 'Secret mission'.");
+
+ close;
+
+L_PoisonJulia:
+ mesn;
+ mesq l("The usurper has been punished! This is a great day! Take this reward as a prize for your loyalty to the old commander!");
+
+ setq ShipQuests_ChefGado, 4;
+ Zeny = Zeny + 200;
+ message strcharinfo(0), l("You receive @@ E!", 200);
+ inventoryplace Bread, 1;
+ getitem Bread, 1;
+ getexp 15, 0;
+
+ close;
+
+L_QuestComplete:
+ mesn;
+ mesq l("Oh, it's you. I think it's better we do not talk for a while. They suspect something.");
+
+ close;
+
+L_Aborting:
+ mesn;
+ mesq l("Wait, why do you still have the dish with you?!");
+ next;
+
+ select
+ l("I informed Julia about your monstrous plan.");
+
+ mes "";
+ mesn;
+ mesq l("Are you mad?!");
+ next;
+ mesq lg("Give me back this dish, you dirty liar!");
+
+ if (countitem(PoisonedDish) > 0) delitem PoisonedDish, 1;
+
+ next;
+ mesq l("You're like the rest of this filthy crew, I can't trust you!");
+
+ close;
+
+L_QuestAborted:
+ mesn;
+ mesq lg("You're like the rest of this filthy crew. Your name is now on the traitors list!");
+
+ close;
+
+L_Quit:
+ closedialog;
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 2;
+ end;
+}
diff --git a/npc/002-1/chest.txt b/npc/002-1/chest.txt
new file mode 100644
index 000000000..031a578de
--- /dev/null
+++ b/npc/002-1/chest.txt
@@ -0,0 +1,72 @@
+// Evol scripts.
+// Authors:
+// 4144
+// gumi
+// omatt
+// Reid
+// Description:
+// A box with clothes for new players.
+// Variable:
+// ShipQuests_Arpan
+// Values:
+// 1 Talked to Arpan and needs to get clothes.
+// 2 Has the clothes.
+
+002-1,51,37,0 script Chest#002-1 NPC_CHEST_BIG,2,4,{
+
+ .@questState = getq(ShipQuests_Arpan);
+
+ if (.@questState == 0)
+ {
+ npctalk3 l("You should talk to Magic Arpan first.");
+ end;
+ }
+
+ if (.busy == false)
+ {
+ if (.@questState <= 1)
+ {
+ inventoryplace CreasedShirt, 2;
+ setq ShipQuests_Arpan, 2;
+ getitem CreasedShirt, 1;
+ getitem CreasedShorts, 1;
+ npctalk3 l("You take the clothes from the chest.");
+ }
+
+ specialeffect(.dir == 0 ? 24 : 25, AREA, getnpcid(0)); // closed ? opening : closing
+ .dir = .dir == 0 ? 2 : 6; // closed ? opening : closing
+ .busy = true; // lock the animation
+ initnpctimer;
+ }
+ end;
+
+OnTimer220:
+ .dir = .dir == 6 ? 0 : 4; // closing ? closed : open
+ end;
+
+OnTimer500:
+ .busy = false; // unlock
+
+ if (.dir == 0)
+ {
+ stopnpctimer; // stop here if the chest is closed
+ }
+ end;
+
+OnUnTouch:
+ if (getareausers(.x - 2, .y - 4, .x + 2, .y + 6) > 0 || .dir == 0)
+ {
+ end;
+ }
+OnTimer30000:
+ .busy = true;
+ .dir = 6; // closing
+ specialeffect(25, AREA, getnpcid(0)); // closing
+ setnpctimer 0;
+OnTouch:
+ end;
+
+OnInit:
+ .distance = 2;
+ end;
+}
diff --git a/npc/002-1/dan.txt b/npc/002-1/dan.txt
new file mode 100644
index 000000000..bc2191c16
--- /dev/null
+++ b/npc/002-1/dan.txt
@@ -0,0 +1,94 @@
+// Evol scripts.
+// Authors:
+// Qwerty Dragon
+// Reid
+// Description:
+// There are two kinds of dialogues in this script.
+// Dan will randomly choose between a useless sentence, and a quest in Artis.
+
+002-1,32,31,0 script Dan#002-1 NPC_DEMON_MAN,{
+ if (getq(General_Narrator) > 0)
+ {
+ sailortalk;
+ close;
+ }
+
+ mesn;
+ .@q = rand(3);
+ if (.@q == 0) goto L_QuestStory;
+
+ mesq l("You see these pious around us?");
+ next;
+ mesq l("It seems that we are close to an island, we should take a look at the upper level.");
+
+ close;
+
+L_QuestStory:
+ mesq l("It's so hard to find the motivation...");
+ next;
+
+ menu
+ l("Why?"), -,
+ l("I guess so... I will leave you alone."), L_Quit;
+
+ mes "";
+ mesn;
+ mesq l("Oh, it's you.");
+ next;
+ mesq lg("So, you finally woke up? We all thought you were in something like... You know, one of these long comas.");
+ next;
+
+ menu
+ l("I'm still in a coma, but my ghost is haunting you!"), L_Quit,
+ l("It was something like a long nap."), -;
+
+ mes "";
+ mesn;
+ mesq l("It's good, good... I have a friend who is still in a coma, but I can't be with her without working...");
+ next;
+ mesq l("The fear to see her sleeping on this quiet and lonely bed is becoming more and more unbearable, I think that I won't get the bravery to see her this time...");
+ next;
+
+ menu
+ l("Who is she?"), L_She,
+ l("Do you want me to go see her instead of you?"), L_Quest;
+ l("I don't know what to say..."), -;
+
+ mes "";
+ mesn;
+ mesq lg("There's nothing to say, don't worry miss.", "There's nothing to say, don't worry sir.");
+
+ close;
+
+L_She:
+ mes "";
+ mesn;
+ mesq l("She is a good friend of mine... We wanted to marry a few weeks before her accident but...");
+ next;
+
+ goto L_Quit2;
+
+L_Quest:
+ mes "";
+ mesn;
+ mesq l("I don't think that we are in a good place to talk about this...");
+ next;
+
+L_Quit:
+ mes "";
+ mesn "Narrator";
+ mes col(l("Dan keeps silent since your last question."), 9);
+
+ close;
+
+L_Quit2:
+ mesn "Narrator";
+ mes col(l("Dan ends the conversation and resumes to write his letter."), 9);
+
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 2;
+ end;
+}
diff --git a/npc/002-1/devis.txt b/npc/002-1/devis.txt
new file mode 100644
index 000000000..47fc9a985
--- /dev/null
+++ b/npc/002-1/devis.txt
@@ -0,0 +1,17 @@
+// Evol scripts.
+// Authors:
+// Alige
+// Reid
+// Vasily_Makarov
+// Description:
+// Sleeping and grumbling NPC.
+
+002-1,32,38,0 script Devis NPC_HAMMOC,{
+ asleep;
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 2;
+ end;
+}
diff --git a/npc/002-1/hammock.txt b/npc/002-1/hammock.txt
new file mode 100644
index 000000000..c2423628d
--- /dev/null
+++ b/npc/002-1/hammock.txt
@@ -0,0 +1,125 @@
+// Evol scripts.
+// Author:
+// Reid
+// Description:
+// Animated hammock at the mid level of the ship.
+
+002-1,32,27,0 script #hammock1 NPC_LEFT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,32,25,0 script #hammock2 NPC_LEFT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,37,25,0 script #hammock3 NPC_RIGHT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,37,27,0 script #hammock4 NPC_RIGHT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,37,29,0 script #hammock5 NPC_RIGHT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,37,34,0 script #hammock6 NPC_RIGHT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,37,36,0 script #hammock7 NPC_RIGHT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,37,38,0 script #hammock8 NPC_RIGHT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,32,40,0 script #hammock9 NPC_LEFT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
+
+002-1,37,40,0 script #hammock10 NPC_RIGHT_HAMMOCK,1,0,{
+
+OnTouch:
+ hamTouchLeft;
+
+OnUnTouch:
+ hamUnTouch;
+
+OnTimer5440:
+ hamTimerLeft;
+}
diff --git a/npc/002-1/knife.txt b/npc/002-1/knife.txt
new file mode 100644
index 000000000..1280d0bed
--- /dev/null
+++ b/npc/002-1/knife.txt
@@ -0,0 +1,48 @@
+// Evol scripts.
+// Authors:
+// Ablu
+// Saulc
+// Qwerty Dragon
+// Description:
+// Knife on the table.
+// Variable:
+// ShipQuests_Knife
+// Values:
+// 0 Default, not taken.
+// 1 Knife taken.
+
+002-1,50,24,0 script #knife NPC_KNIVES,{
+ .@q = getq(ShipQuests_Knife);
+ if (.@q) close;
+
+ mesn "Narrator";
+ mes col(l("There are some old rusty knives on the table. Would you like to take one?"), 9);
+ next;
+
+ menu
+ l("Yeah !."), L_Give,
+ l("Na."), -;
+
+ closedialog;
+ close;
+
+L_Give:
+ mes "";
+ inventoryplace RustyKnife, 1;
+
+ setq ShipQuests_Knife, 1;
+ getitem RustyKnife, 1;
+
+ mesn "Narrator";
+ mes col(l("To open your inventory, use the F3 key or use your mouse to select it in the above menu in your client."), 9);
+ next;
+ mes col(l("When your inventory is open, you can equip an item by selecting it and clicking 'Equip'. You can do the same to unequip an item by clicking on 'Unequip'."), 9);
+ next;
+ mes col(l("Items have different effects. Some will heal you, some can be used as weapons or armor, and some can be sold for gold."), 9);
+
+ close;
+
+OnInit:
+ .distance = 2;
+ end;
+}
diff --git a/npc/002-1/mapflags.txt b/npc/002-1/mapflags.txt
new file mode 100644
index 000000000..c9d8f8db6
--- /dev/null
+++ b/npc/002-1/mapflags.txt
@@ -0,0 +1 @@
+002-1 mapflag town
diff --git a/npc/002-1/peter.txt b/npc/002-1/peter.txt
new file mode 100644
index 000000000..fc91e943e
--- /dev/null
+++ b/npc/002-1/peter.txt
@@ -0,0 +1,339 @@
+// Evol scripts.
+// Authors:
+// 4144
+// Ablu
+// Alastrim
+// Qwerty Dragon
+// Reid
+// Vasily_Makarov
+// Description:
+// Rat hunter.
+// 4+2 bits array:
+// ShipQuests
+// Variable:
+// ShipQuests_Peter
+// Values:
+// 0 Doesn't know the quest.
+// 1 Task given.
+// 2 Task given and reward expected.
+// 3 Task completed without reward.
+// 4 Asked for reward after completion of the task.
+// 5 Task done and reward given.
+// 6 Did not start the quest.
+// Others:
+// .@peter = Peter variable.
+// "002-2" - map with mobs.
+// "$@RAT_SAILOR_HELPER$" - Name of the participant.
+// "$@RAT_SAILOR_DEATHS - Number of deaths when the participant starts the fight.
+// "$@RAT_SAILOR_CONTROL" - Explanation of each index of the array.
+// "$@RAT_SAILOR_OLD_HELPER$" - Name of the participant.
+// "$@RAT_SAILOR_COUNTDOWN" - Seconds since the epoch of when the player done the quest.
+// [1] = Shows status of ratto number 1 (1 is dead and 0 is alive).
+// [2] = Shows status of ratto number 2 (1 is dead and 0 is alive).
+// [3] = Shows status of ratto number 3 (1 is dead and 0 is alive).
+// [4] = Shows status of ratto number 4 (1 is dead and 0 is alive).
+// [5] = Shows how many seconds passed since ratto number 1 died.
+// [6] = Shows how many seconds passed since ratto number 2 died.
+// [7] = Shows how many seconds passed since ratto number 3 died.
+// [8] = Shows how many seconds passed since ratto number 4 died.
+// [9] = Shows how many seconds passed since the player started the quest.
+// [10] = Shows how many seconds passed since the player done the quest.
+
+002-1,72,34,0 script AreaNPC NPC_HIDDEN,0,1,{
+
+OnTouch:
+ if (BaseLevel < 5) goto L_Stop;
+ if ($@RAT_SAILOR_COUNTDOWN == 0) goto L_NoCountDown;
+ if ((gettimetick(2) - $@RAT_SAILOR_COUNTDOWN) < 10) goto L_NoGoodTick;
+ if (($@RAT_SAILOR_OLD_HELPER$ == strcharinfo(0)) && ((gettimetick(2) - $@RAT_SAILOR_COUNTDOWN) < 60)) goto L_NoGoodTick;
+ $@RAT_SAILOR_COUNTDOWN = 0;
+
+L_NoCountDown:
+ if ($@RAT_SAILOR_HELPER$ != "") goto L_Occupied;
+ .@peter = getq(ShipQuests_Peter);
+ if (.@peter < 1 || .@peter > 5) goto L_Task;
+ if (.@peter == 1 || .@peter == 2) goto L_Rfail;
+ if (.@peter == 3 || .@peter == 4) goto L_Rwin;
+ if (.@peter > 5) goto L_SecondTime;
+ doevent "Peter::OnReturnWin";
+ close;
+
+L_Stop:
+ doevent "Peter::OnStop";
+
+ close;
+
+L_Occupied:
+ doevent "Peter::OnDontneedHelp";
+
+ close;
+
+L_Task:
+ doevent "Peter::OnGiveTask";
+
+ close;
+
+L_Rfail:
+ doevent "Peter::OnReturnFail";
+
+ close;
+
+L_Rwin:
+ doevent "Peter::OnReturnWin";
+
+ close;
+
+L_NoGoodTick:
+ doevent "Peter::OnNoGoodTick";
+
+ close;
+}
+
+002-1,70,35,0 script Peter NPC_RATTO_SAILOR,{
+ if (BaseLevel < 5) goto OnTooWeak;
+ if ($@RAT_SAILOR_COUNTDOWN == 0) goto L_NoCountDown;
+ if ((gettimetick(2) - $@RAT_SAILOR_COUNTDOWN) < 10) goto OnNoGoodTick;
+ if (($@RAT_SAILOR_OLD_HELPER$ == strcharinfo(0)) && ((gettimetick(2) - $@RAT_SAILOR_COUNTDOWN) < 60)) goto OnNoGoodTick;
+ $@RAT_SAILOR_COUNTDOWN = 0;
+
+L_NoCountDown:
+ .@peter = getq(ShipQuests_Peter);
+ if (.@peter == 1 || .@peter == 2) goto OnReturnFail;
+ if (.@peter == 3 || .@peter == 4 || .@peter == 5) goto OnReturnWin;
+
+OnGiveTask:
+ setq ShipQuests_Peter, 6;
+ .@peter = getq(ShipQuests_Peter);
+ mesn;
+ mesq lg("Hey, girl!", "Hey, man!");
+ next;
+ mesq l("I need somebody who can rid the hold of the ship of these rattos. Can you help me?");
+ next;
+
+ menu
+ l("Yeah, but what reward will I get?"), L_BonusTask,
+ l("Why not, I need to train anyway."), L_Task,
+ l("No, they are way too dangerous for me!"), -;
+
+ mes "";
+ mesn;
+ mesq l("Hehe, hehe. Well, come back if you change your mind.");
+
+ goto L_Quit;
+
+OnTooWeak:
+ mesn;
+ mesq lg("I need someone to help me clean the edge of the ship, but you aren't strong enough for now.");
+
+ goto L_Quit;
+
+OnStop:
+ warp "002-1", 72, 36;
+
+ mesn;
+ mesq l("You can't go there!");
+
+ close;
+
+OnReturnFail:
+ mesn;
+ mesq l("I see it's not so easy to get rid of these rattos. Do you want to try again?");
+ next;
+
+ menu
+ l("Yeah, but I would like to make sure I get a reward."), L_BonusTask,
+ l("Why not, I need to train anyway."), L_Task,
+ l("No, they are way too dangerous for me!"), -;
+
+ mes "";
+ mesn;
+ mesq l("Hehe, hehe. Well, come back if you change your mind.");
+
+ goto L_Quit;
+
+OnReturnWin:
+ .@peter = getq(ShipQuests_Peter);
+ mesn;
+ mesq l("Thanks again for helping me. Drats these rattos for infesting our fair vessal!");
+ next;
+ mesq l("They are a permanent problem so I will always need your help to exterminate them in order to keep their number under control.");
+ next;
+ mesq l("Your help is very welcome indeed. Unfortunately, I can give you a reward for the first extermination only.");
+ next;
+
+ if (.@peter == 3 || .@peter == 4)
+ menu
+ l("Did you say reward? I want it!"), L_BonusTask,
+ l("I am not worried about rewards. I just want to help."), L_Task,
+ l("Sorry, I am not in the mood for another fight with these rattos."), -;
+
+ if (.@peter == 5)
+ menu
+ l("No problem, I can help you anyway."), L_Task,
+ l("Sorry, I am not in the mood for another fight with these rattos."), -;
+
+ mes "";
+ mesn;
+ mesq l("Hehe, hehe. Well, come back if you change your mind.");
+
+ close;
+
+L_BonusTask:
+ mes "";
+ mesn;
+ mesq l("What if I give you 1000 Esperin for that job, is it ok?");
+ next;
+
+ menu
+ lg("Okay, I'm ready to work!"), -,
+ l("What? This reward is too small!"), L_Quit;
+
+ .@peter = getq(ShipQuests_Peter);
+ if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
+ if (.@peter == 6) setq ShipQuests_Peter, 2;
+ if (.@peter == 3) setq ShipQuests_Peter, 4;
+ .@peter = getq(ShipQuests_Peter);
+ goto L_Start;
+
+L_Task:
+ .@peter = getq(ShipQuests_Peter);
+ if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
+ if (.@peter == 6) setq ShipQuests_Peter, 1;
+ .@peter = getq(ShipQuests_Peter);
+
+L_Start:
+ mes "";
+ mesn;
+ mesq l("Okay, you can start!");
+
+OnStartOutside:
+ if ($@RAT_SAILOR_HELPER$ != "") goto OnDontneedHelp;
+ $@RAT_SAILOR_HELPER$ = strcharinfo(0);
+ $@RAT_SAILOR_DEATHS = PC_DIE_COUNTER;
+ initnpctimer;
+ warp "000-2-2", 48, 28;
+ doevent "RattosControl::OnSpawn";
+
+ goto L_Quit;
+
+OnTimer2000:
+ if (attachrid(getcharid(3, $@RAT_SAILOR_HELPER$)) == 0) goto L_Logoff;
+ $@RAT_SAILOR_CONTROL[9] = $@RAT_SAILOR_CONTROL[9] + 2;
+ if ($@RAT_SAILOR_CONTROL[9] > 100) goto L_Timeout;
+ if (PC_DIE_COUNTER > $@RAT_SAILOR_DEATHS) goto L_Dead;
+ if ($@RAT_SAILOR_CONTROL[1] && $@RAT_SAILOR_CONTROL[2] && $@RAT_SAILOR_CONTROL[3] && $@RAT_SAILOR_CONTROL[4]) goto L_Done;
+ if (getmapusers("000-2-2") == 0) goto L_CleaningEnd;
+ goto L_CheckRattos;
+
+ end;
+
+L_CheckRattos:
+ if ($@RAT_SAILOR_CONTROL[1]) $@RAT_SAILOR_CONTROL[5] = $@RAT_SAILOR_CONTROL[5] + 2;
+ if ($@RAT_SAILOR_CONTROL[2]) $@RAT_SAILOR_CONTROL[6] = $@RAT_SAILOR_CONTROL[6] + 2;
+ if ($@RAT_SAILOR_CONTROL[3]) $@RAT_SAILOR_CONTROL[7] = $@RAT_SAILOR_CONTROL[7] + 2;
+ if ($@RAT_SAILOR_CONTROL[4]) $@RAT_SAILOR_CONTROL[8] = $@RAT_SAILOR_CONTROL[8] + 2;
+ if ($@RAT_SAILOR_CONTROL[5] > 45) doevent "RattosControl::OnRatto1Respawn";
+ if ($@RAT_SAILOR_CONTROL[6] > 45) doevent "RattosControl::OnRatto2Respawn";
+ if ($@RAT_SAILOR_CONTROL[7] > 45) doevent "RattosControl::OnRatto3Respawn";
+ if ($@RAT_SAILOR_CONTROL[8] > 45) doevent "RattosControl::OnRatto4Respawn";
+
+L_NotYet:
+ setnpctimer 0;
+
+ end;
+
+OnDontneedHelp:
+ mesn;
+ mesq l("I don't need your help right now, come back later.");
+ next;
+ mesq l("@@ is helping me.", $@RAT_SAILOR_HELPER$);
+
+ goto L_Quit;
+
+L_Timeout:
+ mesn;
+ mesq l("Hey! Be careful. You can't stay in this basement for so long, you're going to get sick. Come outside and take a break, maybe you can try again later.");
+ warp "000-2-1", 72, 36;
+
+ goto L_CleaningClose;
+
+L_Logoff:
+ goto L_CleaningEnd;
+
+L_Dead:
+// Warps the dead body outside, so it does not interfere with the getmapusers check.
+ if (getmapusers("002-2") > 0) warp "002-1", 72, 36;
+
+ goto L_CleaningEnd;
+
+L_Done:
+ $@RAT_SAILOR_CONTROL[10] = $@RAT_SAILOR_CONTROL[10] + 2;
+ if($@RAT_SAILOR_CONTROL[10] < 5) goto L_NotYet;
+ .@peter = getq(ShipQuests_Peter);
+ if (.@peter == 2 || .@peter == 4) goto L_Reward;
+ warp "000-2-1", 72, 36;
+
+ goto L_Thanks;
+
+L_CleaningEnd:
+ stopnpctimer;
+ $@RAT_SAILOR_HELPER$ = "";
+ $@RAT_SAILOR_DEATHS = 0;
+ cleararray $@RAT_SAILOR_CONTROL, 0, 11;
+ killmonster "000-2-2", "RattosControl::OnRatto1Death";
+ killmonster "000-2-2", "RattosControl::OnRatto2Death";
+ killmonster "000-2-2", "RattosControl::OnRatto3Death";
+ killmonster "000-2-2", "RattosControl::OnRatto4Death";
+
+ end;
+
+L_CleaningClose:
+ stopnpctimer;
+ $@RAT_SAILOR_OLD_HELPER$ = $@RAT_SAILOR_HELPER$;
+ $@RAT_SAILOR_HELPER$ = "";
+ $@RAT_SAILOR_DEATHS = 0;
+ cleararray $@RAT_SAILOR_CONTROL, 0, 11;
+ killmonster "000-2-2", "RattosControl::OnRatto1Death";
+ killmonster "000-2-2", "RattosControl::OnRatto2Death";
+ killmonster "000-2-2", "RattosControl::OnRatto3Death";
+ killmonster "000-2-2", "RattosControl::OnRatto4Death";
+ $@RAT_SAILOR_COUNTDOWN = gettimetick(2);
+
+ close;
+
+L_Reward:
+ warp "002-1", 72, 36;
+ setq ShipQuests_Peter, 5;
+ .@peter = getq(ShipQuests_Peter);
+ mesn;
+ mesq l("Good job!") + " " + l("Here's your reward!");
+ getexp 100, 0;
+ Zeny = Zeny + 1000;
+ message strcharinfo(0), l("You receive @@ E!", 1000);
+
+ goto L_CleaningClose;
+
+L_Thanks:
+ mesn;
+ mesq l("Thanks for helping me!");
+ .@peter = getq(ShipQuests_Peter);
+ if (.@peter == 1) setq ShipQuests_Peter, 3;
+ .@peter = getq(ShipQuests_Peter);
+
+ goto L_CleaningClose;
+
+L_Quit:
+ .@peter = 0;
+
+ close;
+
+OnNoGoodTick:
+ mesn;
+ mesq l("I don't need your help right now, come back later.");
+ close;
+
+OnInit:
+ .sex = G_MALE;
+ .distance = 3;
+ end;
+}
diff --git a/npc/002-1/story_save.txt b/npc/002-1/story_save.txt
new file mode 100644
index 000000000..54c3222e3
--- /dev/null
+++ b/npc/002-1/story_save.txt
@@ -0,0 +1,30 @@
+// Evol scripts.
+// Author:
+// Reid
+// Description:
+// Scritpted save locations in 000-2-1 map.
+
+002-1,50,38,0 script #name3 NPC_FINAL_POINT,{
+ .@q_nard = getq(ShipQuests_Nard);
+ .@q_narr = getq(General_Narrator);
+
+ if(.@q_nard == 5 && .@q_narr < 1)
+ {
+OnClick:
+ narrator S_LAST_NEXT,
+ l("You lie in the bed."),
+ l("Your head is suddently heavy, your eyes are closing..."),
+ lg("You fell asleep.");
+
+ warp "000-0-1", 26, 28;
+ }
+ else
+ {
+ savepointparticle "002-1", 55, 40;
+ }
+ close;
+
+OnInit:
+ .distance = 2;
+ end;
+}