diff options
author | Jesusaves <cpntb1@ymail.com> | 2021-04-09 11:00:49 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2021-04-09 11:00:49 -0300 |
commit | 8a4bf716002a017de77fe7df301ef8e4aaf00a2e (patch) | |
tree | 4947d0b015baad639fa07133369e9a09c8a468bc /npc/008-1-1 | |
download | serverdata-8a4bf716002a017de77fe7df301ef8e4aaf00a2e.tar.gz serverdata-8a4bf716002a017de77fe7df301ef8e4aaf00a2e.tar.bz2 serverdata-8a4bf716002a017de77fe7df301ef8e4aaf00a2e.tar.xz serverdata-8a4bf716002a017de77fe7df301ef8e4aaf00a2e.zip |
Initial commit
Diffstat (limited to 'npc/008-1-1')
-rw-r--r-- | npc/008-1-1/_import.txt | 11 | ||||
-rw-r--r-- | npc/008-1-1/_mobs.txt | 38 | ||||
-rw-r--r-- | npc/008-1-1/_warps.txt | 5 | ||||
-rw-r--r-- | npc/008-1-1/cutscene.txt | 180 | ||||
-rw-r--r-- | npc/008-1-1/galimatia.txt | 431 | ||||
-rw-r--r-- | npc/008-1-1/hal.txt | 131 | ||||
-rw-r--r-- | npc/008-1-1/koga.txt | 34 | ||||
-rw-r--r-- | npc/008-1-1/morcant.txt | 63 | ||||
-rw-r--r-- | npc/008-1-1/sign.txt | 22 | ||||
-rw-r--r-- | npc/008-1-1/soldiers.txt | 31 |
10 files changed, 946 insertions, 0 deletions
diff --git a/npc/008-1-1/_import.txt b/npc/008-1-1/_import.txt new file mode 100644 index 00000000..46f9ce78 --- /dev/null +++ b/npc/008-1-1/_import.txt @@ -0,0 +1,11 @@ +// Map 008-1-1: Woodland +// This file is generated automatically. All manually added changes will be removed when running the Converter. +"npc/008-1-1/_mobs.txt", +"npc/008-1-1/_warps.txt", +"npc/008-1-1/cutscene.txt", +"npc/008-1-1/galimatia.txt", +"npc/008-1-1/hal.txt", +"npc/008-1-1/koga.txt", +"npc/008-1-1/morcant.txt", +"npc/008-1-1/sign.txt", +"npc/008-1-1/soldiers.txt", diff --git a/npc/008-1-1/_mobs.txt b/npc/008-1-1/_mobs.txt new file mode 100644 index 00000000..928a2c6d --- /dev/null +++ b/npc/008-1-1/_mobs.txt @@ -0,0 +1,38 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-1-1: Woodland mobs +008-1-1,173,86,25,5 monster Forest Maggot 1028,12,500,2500 +008-1-1,132,56,7,5 monster Forest Maggot 1028,5,500,2500 +008-1-1,74,59,9,16 monster Butterfly 1032,4,20000,10000 +008-1-1,63,73,11,5 monster Maggot 1026,7,500,10000 +008-1-1,206,87,6,4 monster Mouboo 1023,3,30000,60000 +008-1-1,131,45,0,0 monster Beehive 1056,1,30000,100000 +008-1-1,156,51,10,4 monster Alizarin Plant 1037,3,1000,25000 +008-1-1,167,61,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,154,176,9,7 monster Silkworm 1040,4,3000,6000 +008-1-1,162,78,6,3 monster Gamboge Plant 1038,2,1000,10000 +008-1-1,197,67,7,5 monster Cobalt Plant 1039,2,1000,30000 +008-1-1,165,109,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,217,62,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,119,66,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,112,75,2,2 monster Pink Flower 1034,1,100,10000 +008-1-1,110,46,3,2 monster Mauve Plant 1036,3,1000,2000 +008-1-1,159,93,9,7 monster Silkworm 1040,4,3000,6000 +008-1-1,62,36,7,7 monster Mouboo 1023,3,30000,60000 +008-1-1,126,45,0,0 monster Beehive 1056,1,30000,100000 +008-1-1,121,45,0,0 monster Beehive 1056,1,30000,100000 +008-1-1,163,178,2,1 monster Red Rose 1062,1,50000,10000 +008-1-1,158,191,3,1 monster Yellow Rose 1060,1,20000,5000 +008-1-1,166,184,1,1 monster Blue Rose 1061,1,100000,20000 +008-1-1,137,86,11,16 monster Butterfly 1032,8,10000,10000 +008-1-1,75,41,14,4 monster Silkworm 1040,3,9000,6000 +008-1-1,122,75,8,4 monster Forest Maggot 1028,3,50000,2500 +008-1-1,161,67,45,11 monster Mouboo 1023,3,20000,125000 +008-1-1,180,77,11,21 monster Log Head 1031,3,10000,15000 +008-1-1,149,77,99,15 monster Mana Bug 1035,11,10000,20000 +008-1-1,144,107,11,5 monster Bee 1029,3,5000,10000 +008-1-1,149,59,11,5 monster Bee 1029,3,5000,10000 +008-1-1,156,183,11,5 monster Bee 1029,3,5000,10000 +008-1-1,161,186,9,7 monster Bandit 1063,2,9000,18000 +008-1-1,157,172,5,15 monster Robin Bandit 1064,2,9000,18000 +008-1-1,156,177,10,15 monster Small Frog 1086,2,3000,30000 +008-1-1,169,74,30,23 monster Squirrel 1041,5,10000,30000 diff --git a/npc/008-1-1/_warps.txt b/npc/008-1-1/_warps.txt new file mode 100644 index 00000000..cbf66f26 --- /dev/null +++ b/npc/008-1-1/_warps.txt @@ -0,0 +1,5 @@ +// This file is generated automatically. All manually added changes will be removed when running the Converter. +// Map 008-1-1: Woodland warps +008-1-1,247,85,0 warp #008-1-1_247_85 0,1,008-1,21,85 +008-1-1,51,57,0 warp #008-1-1_51_57 0,0,008-2-32,40,37 +008-1-1,181,198,0 warp #008-1-1_181_198 1,0,009-1,180,32 diff --git a/npc/008-1-1/cutscene.txt b/npc/008-1-1/cutscene.txt new file mode 100644 index 00000000..a9d39a6c --- /dev/null +++ b/npc/008-1-1/cutscene.txt @@ -0,0 +1,180 @@ +// TMW Script +// Author: +// Jesusalva +// Description: +// Cutscenes for Main Story + +008-1-1,42,63,0 script #MQ2Cutscene NPC_HIDDEN,0,1,{ + end; + +OnTouch: + .@q=getq(General_Narrator); + if (.@q != 2) + end; + if (getmap() != "008-1-1") + end; + // Cutscene time! + // m (from main quest) 02 map 1 + .@mapn$="m021@"+getcharid(0); + .@mapx$="m022@"+getcharid(0); + // Build instance if it doesn't exists or has been reallocated + // (This only happens if you escape the map - edge case scenarios) + if (instanceowner(@mainquestinst) != getcharid(3)) { + @mainquestinst = instance_create("m102@a"+getcharid(0), getcharid(3), IOT_CHAR); + instance_attachmap("008-1-1", @mainquestinst, false, .@mapn$); + instance_attachmap("008-2-32", @mainquestinst, false, .@mapx$); + // Instance lasts 60 minutes + instance_set_timeout(3600, 3600, @mainquestinst); + instance_init(@mainquestinst); + } else { + // Restart instance timer if it already exists + instance_set_timeout(3600, 3600, @mainquestinst); + } + getmapxy(.@m$, .@x, .@y, 0); + warp(.@mapn$, .@x, .@y); + addtimer(500, instance_npcname(.name$, @mainquestinst)+"::OnBegin"); + end; + +OnBegin: + .@n$=instance_npcname(.name$); + .@mc$=instance_npcname("Morcant"); + + // Freeze player + // (M+ may render this incorrectly but it is not my job to care with that) + setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, true); + sc_start(SC_STUN, 360000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK); + + // Begin moving Morcant + npcwalkto(58, 64, .@mc$); + sleep2(3000); + getmapxy(.@m$, .@x, .@y, 0); + npcwalkto(.@x + 1, .@y, .@mc$); + sleep2(1000); + unitwarp(getnpcid(.@mc$), .@m$, .@x + 1, .@y); // FIXME PLACEHOLDER + npctalk l("Hoho!"), .@mc$; + sleep2(2500); + npctalk l("Look what the shore brought me!"), .@mc$; + sleep2(3000); + npctalk l("Rarely anyone uses this port."), .@mc$; + sleep2(3000); + npctalk l("...Well, anyone adhering to the law, at least! Hahahah!"), .@mc$; + sleep2(3000); + npctalk l("Anyway, come in! You must be hungry."), .@mc$; + sleep2(3000); + npcwalkto(51, 57, .@mc$); + sleep2(1000); + sc_end(SC_STUN); + setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, false); + dispbottom col(l("1-1. Follow Morcant into his house."), 1); + sleep2(500); + .@mapx$="m022@"+getcharid(0); + unitwarp(getnpcid(.@mc$), .@mapx$, 40, 24); + end; +} + +// Series 2 +008-1-1,51,58,0 script #MQ2Cutscene2 NPC_HIDDEN,0,1,{ + end; +OnTouch: + if (getmap() == "008-1-1") end; + .@n$=instance_npcname(.name$); + .@mapx$="m022@"+getcharid(0); + warp(.@mapx$, 40, 36); + addtimer(3000, .@n$+"::OnStunlock"); + end; + +OnStunlock: + .@n$=instance_npcname(.name$); + addtimer(300, .@n$+"::OnBegin"); + // Freeze player + // (M+ may render this incorrectly but it is not my job to care with that) + setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, true); + sc_start(SC_STUN, 360000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK); + end; + +OnBegin: + .@n$=instance_npcname(.name$); + .@mc$=instance_npcname("Morcant"); + .@tm$=instance_npcname("Thamas"); + npctalk l("Welcome to my humble abode."), .@mc$; + sleep2(500); + npctalk l("Who is that fellow?"), .@tm$; + sleep2(2500); + npctalk l("Thamas, this is a stowaway who reached here from Artis."), .@mc$; + sleep2(2500); + npctalk l("Yes, I remember."), .@tm$; + sleep2(3000); + npctalk l("Anyway, I assume you're trying to get into Hurnscald?"), .@mc$; + sleep2(2100); + npctalk l("Really? You should be careful, then."), .@tm$; + sleep2(2500); + npctalk l("Hurnscald is under the domain of the Brotherhood."), .@tm$; + sleep2(3000); + npctalk l("Shaddy fellas, I do not trust them the sightliest."), .@tm$; + sleep2(3500); + npctalk l("*ahem*!"), .@mc$; + sleep2(2000); + npctalk l("Hurnscald is just east of here."), .@mc$; + sleep2(2000); + npctalk l("Keep following the road, you can't miss it."), .@mc$; + sleep2(3000); + npctalk l("Do not venture into south, though."), .@mc$; + sleep2(2000); + npctalk l("It is haunted."), .@mc$; + sleep2(2500); + //atcommand("@refresh"); // FIXME -> Hercules upstream broke @refresh + // TODO FIXME: Check if x-1 is a collision, move to x+1 if it is + getmapxy(.@m$, .@x, .@y, 0); + npcwalkto(.@x - 1, .@y, .@mc$); + sleep2(1000); + unitwarp(getnpcid(.@mc$), .@m$, .@x - 1, .@y); // FIXME PLACEHOLDER + npctalk col(l("*Hey, psst.*"), 9), .@mc$; + sleep2(1000); + npctalk col(l("*I assume you're here for the Brotherhood, right?*"), 9), .@mc$; + sleep2(2500); + npctalk col(l("*Reaching Hurnscald, look for a girl called Airlia.*"), 9), .@mc$; + sleep2(2500); + npctalk col(l("*Whisper her the... password, and she'll lead you to Jonatas.*"), 9), .@mc$; + sleep2(3100); + npctalk col(l("*I don't know why Sophiahalla sent you here...*"), 9), .@mc$; + sleep2(2200); + npctalk col(l("*But I am just a retired merchant, hohoho!*"), 9), .@mc$; + sleep2(2200); + npctalk l("Anyway, that's it. Here, have a bowl of stew, Morcant special!"), .@mc$; + sleep2(2500); + npctalk l("I'll be back to the port, so see you later!"), .@mc$; + npcwalkto(40, 38, .@mc$); + sleep2(2000); + .@mapx$="m021@"+getcharid(0); + unitwarp(getnpcid(.@mc$), .@mapx$, 51, 58); + sc_end(SC_STUN); + setpcblock(PCBLOCK_ATTACK|PCBLOCK_SKILL|PCBLOCK_USEITEM|PCBLOCK_MOVE, false); + sleep2(1000); + getmapxy(.@m$, .@x, .@y, 0); + warp "008-2-32", .@x, .@y; + getitembound SailorStew, 1, IBT_ACCOUNT; + setq General_Narrator, 3; + end; +} + +// WHAT ARE YOU DOING +008-1-1,83,65,0 script #MQ2CutsceneWAYD NPC_HIDDEN,0,10,{ + end; + +OnTouch: + if (getmap() == "008-1-1") end; + // What are you doing?! + slide 51, 63; + mesc l("I really should follow Morcant into his house."); + close; +} + +008-2-32,40,37,0 script #MQ2Cutscene2WAYD NPC_HIDDEN,1,0,{ + end; +OnTouch: + if (getmap() == "008-2-32") end; + slide 40, 36; + dispbottom l("But you just arrived! Seriously. Stop."); + end; +} + diff --git a/npc/008-1-1/galimatia.txt b/npc/008-1-1/galimatia.txt new file mode 100644 index 00000000..6b3bfabe --- /dev/null +++ b/npc/008-1-1/galimatia.txt @@ -0,0 +1,431 @@ +// Evol scripts. +// Author: +// Micksha +// The other player I've forgot the name +// Livio +// Jesusalva +// Description: +// Galimatia the beekeeper. +// KEEP item_db.conf updated as well + +function script usePurificationPotion { + // Check quest status, if not in a quest provide default item behaviour + if (getq(ArgaesQuest_Galimatia) == 1) { + // Do as requested by quest + if (isin("008-1-1", 95, 45, 99, 48)) { + setq(ArgaesQuest_Galimatia, 2); + message strcharinfo(0), l("Done. Maybe it's time to ask Galimatia what to do now."); + delitem PurificationPotion, 1; + } else { + message strcharinfo(0), l("Hmm... I'm sure that is not the right place to put it."); + return true; + } + } else return false; +} + +function script useFertilityPotion { + // Check quest status, if not in a quest provide default item behaviour + if (getq(ArgaesQuest_Galimatia) == 3) { + // Do as requested by quest + if (isin("008-1-1", 95, 45, 99, 48)) { + setq(ArgaesQuest_Galimatia, 4); + message strcharinfo(0), l("All right! I've poured even this one.."); + delitem FertilityPotion, 1; + } else { + message strcharinfo(0), l("Hmm... This one is supposed to be poured where the other one were."); + return true; + } + } else return false; +} + +// ------------------------------------ +008-1-1,113,59,0 script Galimatia NPC_GALIMATIA,{ + function advanceQuest; + function NPCdemandsIngredients; + function QuestPart0; + function QuestPart1; + function QuestPart2; + function QuestPart3; + function QuestPart4; + function QuestPart5; + function QuestPart6; + function galimatiaQuestDaily; + + switch(getq(ArgaesQuest_Galimatia)) { + case 0: QuestPart0(); break; + case 1: QuestPart1(); break; + case 2: QuestPart2(); break; + case 3: QuestPart3(); break; + case 4: QuestPart4(); break; + case 5: QuestPart5(); break; + case 6: QuestPart6(); break; + case 7: galimatiaQuestDaily(); break; + default: + mesq l("[Invalid quest status! %d, check script]", getq(ArgaesQuest_Galimatia)); + } + close; + + +// FIXME comment better +// Makes NPC to ask for ingredients +function NPCdemandsIngredients { + mesq l("Fine. The land is healthy now but nothing will grow yet. This time I need you to get:"); + printIngredients(.REQ1_INGREDIENTS, .REQ1_INGREDIENTS_AMOUNT); + mesq l("So making a %s will make things easier.", getitemlink(.REQ1_OUTPUT)); + if (NPCcrafting( + .REQ0_INGREDIENTS, .REQ0_INGREDIENTS_AMOUNT, + .REQ0_OUTPUT, .REQ0_OUTPUT_AMOUNT, + l("Okay. Give me a second..."), + l("Nope. You don't have enough ingredients for that."), + l("I can't give you nothing if you don't leave some room for it!") + ) + ) { + advanceQuest(); + mesq l("You must now pour it over the land again in the same spot."); + } + close; + return; +} + + +//----------------- + +function advanceQuest { + setq(ArgaesQuest_Galimatia, getq(ArgaesQuest_Galimatia) + 1); + return; +} + +/* +You arrive and get off the boat and walk down a path to a farm where there is a Bee farmer named Galimatia. +Her Bees have moved to somewhere else, because his field of flowers has died from a blight. He needs some way to still gather honey to earn his living. +Galimatia needs to tend to other work and can’t get away, so she asks player for some help. She sends player after 5 Pink Petals and 1 Bottle of Water. +*/ + +function QuestPart0 { + speech + l("Hello."), + l("If only someone could help me to make my flowers bloom again."), + l("I just dont know what to do. Perhaps all gets better when I stay here, whining and waiting. Please, leave me alone."); + next; + + select( + l("What about making some fertilizing-something?"), + l("I don't have time to spend on flowers.") + ); + mes ""; + mesn; + + switch(@menu) { + case 1: + mesq l("All right! I need you to get:"); + printIngredients(.REQ0_INGREDIENTS, .REQ0_INGREDIENTS_AMOUNT); + mesq l("So I can make a %s out of it.", getitemlink(.REQ0_OUTPUT)); + if (NPCcrafting( + .REQ0_INGREDIENTS, .REQ0_INGREDIENTS_AMOUNT, + .REQ0_OUTPUT, .REQ0_OUTPUT_AMOUNT, + l("Have you got those things with you?"), + l("Okay. Give me a second..."), + l("Nope. You don't have enough ingredients for that."), + l("I can't give you nothing if you don't leave some room for it!") + ) + ) { + advanceQuest(); + mesq l("You must now pour it over the land."); + } + close; + break; + default: + // FIXME This got to be improved in other script parts as well + mesq + any( + l("Gave up already?"), + l("Okay..."), + l("Go stay afk in TMW Legacy if you don't want to make yourself useful."), + l("Hehe, hehe. Well, come back if you change your mind." + ) + ); + close; + } + return; +} + +/* +She made a Purification Potion out of ingredients to heal the land and gives it to the player and says it must be poured over the land (marked in some way. Like in the Orum and Waric follow-up quest). +*/ +function QuestPart1 { + if(checkForItems(.REQ0_OUTPUT, .REQ0_OUTPUT_AMOUNT)) { + speech + l("What's up? You want me to show how to open a bottle and pour its content on the ground?"); + } else { + speech + l("Why you don't have a %s with you? You need me to make another one?", getitemlink(.REQ0_OUTPUT)); + if (askyesno() == ASK_NO) { + mesq l("Come on, stop wasting my time!"); + close; + } else{ + if (NPCcrafting( + .REQ0_INGREDIENTS, .REQ0_INGREDIENTS_AMOUNT, + .REQ0_OUTPUT, .REQ0_OUTPUT_AMOUNT, + l("Again, do you have what I need to make that?"), + l("Here we go again..."), + l("No! Have you already forgot what I need for it?"), + l("You don't even have the space in your inventory to carry it!!! Oh, man you are a disaster...") + ) + ) { + // FIXME Put some messages about making again the potion so the NPC can look different and react like it was somewhat disturbed by player failure + mesq l("Remember: you must pour it over the land."); + } + } + } + close; + return; +} + +/* +If you weren't able to trash the potion, the land is now healed, but nothing grows. Galimatia is happy the land is well and wants to help. She sends player to get 1 Bottle of Water, 10 Maggot Slime and 5 Mauve Herb. From this she makes a Fertility Potion. Again she gives it to the player and says it must be poured in the same place. Player uses it and the effect comes again. +*/ + + +function QuestPart2 { + mesn; + mesq l("Fine. The land is healthy now but nothing will grow yet. This time I need you to get:"); + printIngredients(.REQ1_INGREDIENTS, .REQ1_INGREDIENTS_AMOUNT); + mesq l("So making a %s will make things easier.", getitemlink(.REQ1_OUTPUT)); + if (NPCcrafting( + .REQ1_INGREDIENTS, .REQ1_INGREDIENTS_AMOUNT, + .REQ1_OUTPUT, .REQ1_OUTPUT_AMOUNT, + l("Have you got what we need?"), + l("Here it is!"), + l("No! You haven't!"), + l("I can't give you nothing if you don't leave some room for it!") + ) + ) { + advanceQuest(); + mesq l("You must now pour it over the land again in the same spot."); + } + close; + return; +} + + +function QuestPart3 { + if(checkForItems(.REQ1_OUTPUT, .REQ1_OUTPUT_AMOUNT)) { + speech + l("Come on pal, what's the matter?"); + } else { + speech + l("Got drunk with the %s? You need me to make another one?", getitemlink(.REQ1_OUTPUT)); + if (askyesno() == ASK_NO) { + mesn; + mesq l("Come on, stop wasting my time!"); + close; + } else{ + if (NPCcrafting( + .REQ1_INGREDIENTS, .REQ1_INGREDIENTS_AMOUNT, + .REQ1_OUTPUT, .REQ1_OUTPUT_AMOUNT, + l("Again, do you have what I need to make that?"), + l("Here we go again..."), + l("No! Have you already forgot what I need for it?"), + l("I can't give you nothing if you don't leave some room for it!") + ) + ) { + // FIXME Put some messages about making again the potion so the NPC can look different and react like it was somewhat disturbed by player failure + mesq l("Remember: you must now pour it over the land."); + } + } + } + close; + return; +} + +/* +Part 3 +Flowers now can be planted. Therefore Galimatia needs help of Blossom. She sends the player to her to get 5 packages of flower seeds. +NOTE: Flower seeds are dropped directly from Clover Patches, however grass seeds are more common. +*/ + +function QuestPart4 { + speech + l("Thanks for the help earlier. The soil is now fertile thanks to your efforts."), + l("Do you know Blossom? She is the flower girl. Bees won't come without flowers."), + l("So, now I need %d %s.", .REQ2_INGREDIENTS_AMOUNT, getitemlink(.REQ2_INGREDIENTS)); + next; + // We don't take player items without asking + mesc l("Deliver items to Blossom?"); + if (askyesno() == ASK_NO) close; + if(checkForItems(.REQ2_INGREDIENTS, .REQ2_INGREDIENTS_AMOUNT)) { + advanceQuest(); + speech + l("Nice, gimme that!"), + l("I'll go plant them. Now go, maybe I need your help again later."); + } else { + speech + l("Go get some!"); + } + close; + return; +} + +/* +The fields are in bloom and the Bees hard at work bringing stuff to the Beehives. +Galimatia is thankful for your help and offers to pay you a larger reward if you help her collect honey as well. +Honey is dropped by Beehives. To gather honey from Beehives you must defeat the bees protecting it, which will attack you when you attack their hive. When you kill a hive, 2 - 3 aggro bees spawn. The player must kill them (which is not so easy). (Some hives don't have Honey and some do - 50% drop rate should do the trick). The hive is a mob just like the pink flowers. Four honey jars complete the quest. +Galimatia reassures you that these are giant bees and they will rebuild their hives quickly so it's not all as cruel as it may seem. + +Galimatia gives the player their reward: Player must select a simple Magic Wand (provides Healing Spell) or a Mana Torch (provides Fire Attack Spell), both can be used as a torch to keep angry bees away and a Jar of Honey. +*/ + +function QuestPart5 { + speech + l("Nice job."), + l("I've heard bees are scared of fire, you know."), + l("So, what do you want?"), + l("A %s or a %s?", getitemlink(.QUESTPRIZES[0]) , getitemlink(.QUESTPRIZES[1])); + select( + l("I want the %s!", getitemname(.QUESTPRIZES[0])), + l("A %s?!? Cool!!!", getitemname(.QUESTPRIZES[1])) + ); + if (!checkweight(.QUESTPRIZES[@menu-1], .QUESTPRIZES_AMOUNT[@menu-1])) { + mesq l("I can't give you a prize if you are overburdened. Make room in your inventory!"); + } + else{ + getitem(.QUESTPRIZES[@menu-1], .QUESTPRIZES_AMOUNT[@menu-1]); + advanceQuest(); + mesq l("Use those wisely and use safety glasses."); + } + close; + return; +} + +/* +Part 6 (Extra Quest) +This enables the player to receive a Rose Hat. Fighting the flowers that were just planted, the player will receive roses and / or tulips as a drop. in Part 3 Blossom may mention that she always is happy about receiving the rare Blue Rose. She trades the Rose Hat for 10 Blue Roses and a preparation fee of 1.000 GP. She offer this only after everything before is finished. +*/ + +function QuestPart6 { + mesn; + mesq l("Hello again! Do you want me to exchange %d %s and %d GP for a %s?", + .REQ3_INGREDIENTS_AMOUNT[0], getitemlink(.REQ3_INGREDIENTS[0]), + .REQ3_COST, getitemlink(.REQ3_OUTPUT) + ); + if (askyesno() == ASK_NO) { + mesq l("As you wish."); + close; + } else { + if(Zeny>=.REQ3_COST) { + if(NPCcrafting( + .REQ3_INGREDIENTS, .REQ3_INGREDIENTS_AMOUNT, + .REQ3_OUTPUT, .REQ3_OUTPUT_AMOUNT, + l("Do you have what I need?"), + l("Have fun!"), + l("Nope. I wont exchange for such less."), + l("I can't give you nothing if you don't leave some room for it!") + )) { + Zeny-=(.REQ3_COST); + advanceQuest(); + } + } else { + mesq l("Ain't working for free, pal!"); + } + } + close; + return; +} + +/* +Daily Part +Allows players to sell Honey for Galimatia +*/ +function galimatiaQuestDaily { + // DailyQuest(lvl, cost, count, item) + DailyQuest(10, 3, 1, Honey); + return; +} + +OnInit: + // NPC ITEM REQUESTS + setarray(.REQ0_INGREDIENTS, + BottleOfWater, + PinkPetal + ); + setarray(.REQ0_INGREDIENTS_AMOUNT, + 1, + 5 + ); + .REQ0_OUTPUT = PurificationPotion; + .REQ0_OUTPUT_AMOUNT = 1 ; + + setarray(.REQ1_INGREDIENTS, + BottleOfWater, + MaggotSlime, + MauveHerb + ); + setarray(.REQ1_INGREDIENTS_AMOUNT, + 1, + 10, + 5 + ); + .REQ1_OUTPUT = FertilityPotion; + .REQ1_OUTPUT_AMOUNT = 1; + + setarray(.REQ2_INGREDIENTS, FlowerSeeds); + setarray(.REQ2_INGREDIENTS_AMOUNT, 5); + + setarray(.QUESTPRIZES, + TrainingWand, + ManaTorch + ); + setarray(.QUESTPRIZES_AMOUNT, + 1, + 1 + ); + + setarray(.REQ3_INGREDIENTS, ABlueRose); + setarray(.REQ3_INGREDIENTS_AMOUNT, 10); + .REQ3_COST = 1000; + .REQ3_OUTPUT = RoseHat; + .REQ3_OUTPUT_AMOUNT = 1; + + .distance = 4; + end; +} + +// ------------------------------------ +// Bees Hotspot +008-1-1,93,46,0 script #GalimatiaInst NPC_HIDDEN,0,1,{ + end; + +// Transport +OnTouch: + if (getq(ArgaesQuest_Galimatia) >= 5) { + if (getmap() == "008-1-1") + warp "gali@matia", 94, 46; + else + warp "008-1-1", 92, 46; + } + end; + +// Populate +OnInstanceInit: + areamonster("gali@matia", 95, 45, 97, 46, strmobinfo(1, RedRose), RedRose, 1, "#GalimatiaInst::OnRed"); + areamonster("gali@matia", 95, 47, 99, 48, strmobinfo(1, YellowRose), YellowRose, 1, "#GalimatiaInst::OnYellow"); + monster("gali@matia", 99, 45, strmobinfo(1, BlueRose), BlueRose, 1, "#GalimatiaInst::OnBlue"); + end; + +// Respawn +OnRed: + sleep(60000); + areamonster("gali@matia", 95, 45, 97, 46, strmobinfo(1, RedRose), RedRose, 1, "#GalimatiaInst::OnRed"); + end; + +OnBlue: + sleep(120000); + monster("gali@matia", 99, 45, strmobinfo(1, BlueRose), BlueRose, 1, "#GalimatiaInst::OnBlue"); + end; + +OnYellow: + sleep(25000); + areamonster("gali@matia", 95, 47, 99, 48, strmobinfo(1, YellowRose), YellowRose, 1, "#GalimatiaInst::OnYellow"); + end; +} + diff --git a/npc/008-1-1/hal.txt b/npc/008-1-1/hal.txt new file mode 100644 index 00000000..88b93a79 --- /dev/null +++ b/npc/008-1-1/hal.txt @@ -0,0 +1,131 @@ +// Evol scripts. +// Author: +// Livio +// Micksha +// Description: +// Hal, former Captain of the Legion. +// Following: https://gitlab.com/evol/evol-narrative/-/raw/e819b2a213802f6ded9f9b7efd18b09b0bc27570/Storylines/4.West%20Argaes.txt +// THIS IS A PLACEHOLDER! + +008-1-1,58,27,0 script Hal NPC_HAL,{ +// Private function declarations +function advanceQuest; +function advanceQuest { + setq(General_CptHal, getq(General_CptHal) + 1); + return; +} + +function QuestPart0; +function QuestPart1; +function QuestPart2; +function QuestPart3; +function QuestPart4; +function QuestPart5; + + switch(getq(General_CptHal)) { + case 0: QuestPart0(); break; + case 1: QuestPart1(); break; + case 2: QuestPart2(); break; + case 3: QuestPart3(); break; + case 4: QuestPart4(); break; + case 5: QuestPart5(); break; + default: + mesq l("[Invalid quest status: %d, check script]", getq(General_CptHal)); + } + close; + +// Haven't met Thamas? MOVE ALONG CITIZEN!!! +function QuestPart0 { + speech l("MOVE ALONG CITIZEN!!!"); +// l("I was just having a nap, now WildX summons me to stand here! What a crap."), +// l("Please, ask elanore to !slap him for me when you see them."); + close; +} + +function QuestPart1 { + speech l("MOVE ALONG C..."); + select l("Hey, hey... I've been talking with one of your comrades, Thamas."); + speech l("So what?"); + select l("What's so special about a mission assigned to a picky soldier?"); + mesq l("You see the soldiers staring each other and then at you."); + speech l("You think that I'm going to disclose that to you???"); + select + l("I just want to earn something to make a living."), + l("Ah, so special mission is secret mission too? Sorry if I've bothered you."); + + if (@menu==1) { + speech l("You look like anything but military personnel... Okay since the Brotherhood will discharge their quivers on us at the very first encounter I guess that we can make a good use of you."); + speech l("We cannot get close to Hurnscald in Legion uniforms so we may need you to get some supplies. However, stay away from Hurnscald if you can."); + speech l("Bring us some food supplies to help us feed the troops. We need:"); + printIngredients(.REQ0_INGREDIENTS, .REQ0_INGREDIENTS_AMOUNT); + next; + advanceQuest(); + } + speech l("Now, get out of my face."); + close; +} + +function QuestPart2 { + if (checkForItems(.REQ0_INGREDIENTS, .REQ0_INGREDIENTS_AMOUNT)){ + if (NPCcrafting( + .REQ0_INGREDIENTS, .REQ0_INGREDIENTS_AMOUNT, + .REQ0_OUTPUT, .REQ0_OUTPUT_AMOUNT, + l("Have you got those things with you?"), + l("Fine. Here is your reward."), + l("Go find those supplies! Don't waste my time!"), + l("Your inventory is full, make room if you want your reward!") + ) + ) + { + BaseExp += 15 * BaseLevel; + Zeny += 150; + getitem(.REQ0_OUTPUT, .REQ0_OUTPUT_AMOUNT); + advanceQuest(); + speech l("Now I need you to explore the area looking for Sergeant Ryan. I'm not having any report from him since a lot of time."); + speech l("I want you to go find him. He should not be that far from here."); + } + } +} + +function QuestPart3 { + speech l("Any luck finding Ryan?"); + select l("Negative."); + speech l("Scout the zone better! He must be somewhere nearby."); + close; +} + +function QuestPart4 { + speech l("So?"); + select l("Found priv... Ehm, I've found Sergeant Ryan. He is hurt and cannot walk right now."); + speech l("I don't have enough men to send after Sergeant Ryan. Provide him some sort of support until he recovers."); + select l("Roger that. Private %s, over!", strcharinfo(PC_NAME)); + close; +} + + +function QuestPart5 { + select l("Good news! Sgt.Ryan is fine now and is going to go on with his mission."); + speech l("Well done."); + next; + speech l("MOVE ALONG!!! I don't need you anymore."); + close; +} + +OnInit: + // NPC ITEM REQUESTS + setarray(.REQ0_INGREDIENTS, + MoubooSteak, + MoubooMilk, + Honey + ); + setarray(.REQ0_INGREDIENTS_AMOUNT, + 5, + 5, + 1 + ); + .REQ0_OUTPUT = BottleOfWater; + .REQ0_OUTPUT_AMOUNT = 1 ; + + .distance = 4; + end; +}
\ No newline at end of file diff --git a/npc/008-1-1/koga.txt b/npc/008-1-1/koga.txt new file mode 100644 index 00000000..9908ff40 --- /dev/null +++ b/npc/008-1-1/koga.txt @@ -0,0 +1,34 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// The Koga in Argaes +// THIS IS A PLACEHOLDER! + +008-1-1,27,60,0 script Gema IV#008-1-1 NPC_LA_MARINE,{ + function kogaWrongMap; + if (getmap() != "008-1-1") + kogaWrongMap(); + + mesc l("Returning to Artis is free, but coming back to Argaes after doing this may not be so."); + next; + mesc l("Return to Artis?"); + if (askyesno() == ASK_YES) + { + closeclientdialog; + setmount 0; + EnterTown("Artis", true); + dispbottom l("The travel is a blur, you cannot remember much of it before reaching %s.", l("Artis")); + } + close; + +function kogaWrongMap { + mesc l("I've just arrived here. I should enter in Morcant's house I guess."); + close; +} + +OnInit: + .distance = 7; + .alwaysVisible = true; + end; +} diff --git a/npc/008-1-1/morcant.txt b/npc/008-1-1/morcant.txt new file mode 100644 index 00000000..5421c771 --- /dev/null +++ b/npc/008-1-1/morcant.txt @@ -0,0 +1,63 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Morcant the Captain, taking care on harbor issues. +// THIS IS A PLACEHOLDER! + +008-1-1,58,57,0 script Morcant NPC_MORCANT,{ + speech + l("Hello."), + l("My name is Morcant. I am a Captain, a bit bored since this harbor is not frequented much."), +// l("I would like to offer you food and tell you stories, but.. have you ever heard of WildX? I won't need to say more, do I?"); + l("The only floating ship I've seen so far was the one with Legion soldiers sent to scout around."), + l("It was my first time that I've met someone from Aemil."), + l("I don't like to see armed people lurking around but feel free to stay as long as you wish but don't cause trouble."), + next; + select + l("Not really but okay...?"), + l("Actually, I am after your Stew recipe!"), + l("Anything to do around these parts?"), + l("Can you tell me the directions again?"); + mes ""; + switch (@menu) + { + case 2: + mesn; + mesq l("Hohoho! That is a family's trade secret!"); // Merry Christmas? + if (!getq(General_SmearedHands)) { + next; + mesn; + mesq l("You don't even know how to cook. %s.. Ah, good old times.", any( + l("I've learned cooking with Yannika."), + l("I had tasty barbecue with Crane.") + )); + } + break; + case 3: + mesn; + mesq l("Hmm, you might want to ask Galimatia, my neighbor."); + next; + mesn; + mesq l("She is always taking care of her bees, though."); + break; + case 4: + mesn; + mesq l("There should be a fair number of signposts around. Anyway."); + next; + mesn; + mesq l("Go east to reach Hurnscald. Just follow the road, really."); + next; + mesn; + mesq l("And do not go south. It is haunted."); + break; + } + close; + +OnInit: +OnInstanceInit: + .distance = 4; + .speed=120; + //.alwaysVisible=true; + end; +} diff --git a/npc/008-1-1/sign.txt b/npc/008-1-1/sign.txt new file mode 100644 index 00000000..3b22dfa9 --- /dev/null +++ b/npc/008-1-1/sign.txt @@ -0,0 +1,22 @@ +// Evol scripts. +// Authors: +// Micksha +// Description: +// Sign pillars in West Woodland. + +008-1-1,53,58,0 script Sign#008-1-1-merchant NPC_NO_SPRITE,{ + npctalkonce l("Merchant House"); + close; + +OnInit: + .distance = 1; + end; +} +008-1-1,157,87,0 script Sign#008-1-1-central NPC_NO_SPRITE,{ + npctalkonce l("Right: Hurnscald | Down: Swamp"); + close; + +OnInit: + .distance = 2; + end; +} diff --git a/npc/008-1-1/soldiers.txt b/npc/008-1-1/soldiers.txt new file mode 100644 index 00000000..744635eb --- /dev/null +++ b/npc/008-1-1/soldiers.txt @@ -0,0 +1,31 @@ +// Evol scripts. +// Author: +// Micksha +// Description: +// Legion Guards serving Hal. +// THIS IS A PLACEHOLDER! + + +// FIXME We better put some more random answers + +008-1-1,62,28,0 script Soldier#1 NPC_RAIJIN_FEMALE_LEGION_ARTIS,{ + speech + l("Hi!"), + l("I am not allowed to talk to strangers."); + close; + +OnInit: + .distance = 4; + end; +} + +008-1-1,54,30,0 script Soldier#2 NPC_HUMAN_MALE_LEGION_ARTIS,{ + speech + l("Hi!"), + l("I am not allowed to talk to strangers."); + close; + +OnInit: + .distance = 4; + end; +} |