From 14e4b85e119173989d0eb85bf596b7d0e7013ff7 Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Mon, 15 Jul 2019 17:21:30 -0300 Subject: Fix bugs, move Colin and Luca to second building, change restrictions of second building, add Professor and Researcher for new feature. --- npc/003-0-1/_import.txt | 4 +- npc/003-0-1/colin.txt | 371 ---------------------------------------- npc/003-0-1/luca.txt | 371 ---------------------------------------- npc/003-0-1/professor.txt | 25 +++ npc/003-0-1/researcher.txt | 17 ++ npc/003-0/_import.txt | 2 + npc/003-0/colin.txt | 371 ++++++++++++++++++++++++++++++++++++++++ npc/003-0/luca.txt | 371 ++++++++++++++++++++++++++++++++++++++++ npc/003-1/magic.txt | 7 +- npc/003-8/intensebeard.txt | 1 - npc/functions/clientversion.txt | 1 - 11 files changed, 792 insertions(+), 749 deletions(-) delete mode 100644 npc/003-0-1/colin.txt delete mode 100644 npc/003-0-1/luca.txt create mode 100644 npc/003-0-1/professor.txt create mode 100644 npc/003-0-1/researcher.txt create mode 100644 npc/003-0/colin.txt create mode 100644 npc/003-0/luca.txt (limited to 'npc') diff --git a/npc/003-0-1/_import.txt b/npc/003-0-1/_import.txt index b84f500c4..5aa9264e7 100644 --- a/npc/003-0-1/_import.txt +++ b/npc/003-0-1/_import.txt @@ -2,8 +2,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/003-0-1/_warps.txt", "npc/003-0-1/audsbel.txt", -"npc/003-0-1/colin.txt", "npc/003-0-1/guards.txt", -"npc/003-0-1/luca.txt", "npc/003-0-1/maxime.txt", +"npc/003-0-1/professor.txt", +"npc/003-0-1/researcher.txt", "npc/003-0-1/statues.txt", diff --git a/npc/003-0-1/colin.txt b/npc/003-0-1/colin.txt deleted file mode 100644 index ab484dbaf..000000000 --- a/npc/003-0-1/colin.txt +++ /dev/null @@ -1,371 +0,0 @@ -// TMW2 script. -// Author: -// Saulc -// Jesusalva -// Description: -// Luca and Colin assigns player a class. Colin is the Wizard Master. - -003-0-1,58,29,0 script Colin NPC_PLAYER,{ - mesn; - mesq l("I am the @@ master.", l("Wizard Mages")); - if (!MAGIC_LVL) goto L_NoMagic; - if (getskilllv(MAGIC_WARRIOR) && !is_admin()) close; - if (getskilllv(WIZARD_MAGE) == 0) goto L_SignUp; - - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 0) goto L_Tier2; - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER >= 1) goto L_T2_S0; - - // Sanity check - if (getskilllv(WIZARD_MAGE) >= 1) { - mesn; - mesq l("The Wizards have three other subclasses:"); - mesn lg("Wizard"); - mesc l("The offensive guy, with every attack skill a mage could need."); - mesn lg("Sage"); - mesc l("The wise guy, which doesn't relies on magic, and loves summon."); - mesn lg("Priest"); - mesc l("The defensive guy, with every support skill a mage could need."); - } - close; - -L_SignUp: - next; - mesn; - mesq l("You have some magic power. Do you want to join the @@? ##BThis cannot be undone##b.", l("Wizard Mages")); - next; - mesn; - mesq l("We use swords and bows to protect the people, and we use magic to spice things up! Because we're strong even without it!"); - next; - menu - l("What do I need to do to join?"), L_JoinReq, - l("I'm not interested, sorry."), -; - close; - -L_JoinReq: - mesn; - mesq l("Ah, nothing too major, as you already have magic."); - next; - mesn; - mesq l("We only require a small fee of 1 @@, or 40 @@, or 500 @@ if you are poor adventurer.", getitemlink(DivineApple), getitemlink(SnakeEgg), getitemlink(MaggotSlime)); - next; - switch(select( - rif(countitem(DivineApple) >= 1, l("I got the apple.")), - rif(countitem(SnakeEgg) >= 40, l("I got the eggs.")), - rif(countitem(MaggotSlime) >= 500, l("I got the maggots slimes.")), - l("I will apply later."))) { - - case 1: - delitem DivineApple, 1; - getexp $MANA_BLVL*100, $MANA_JLVL*10; - goto L_Tier1Ok; - break; - case 2: - // If player had 40 eggs, and eat 1 - they are clearly cheating. - // It will delete all 39 eggs, and when it tries to delete the 40th, - // it won't find and will terminate the script. No lame cheating. - // Of course, all 39 eggs are gone for and I can't do anything about it. - delitem SnakeEgg, 40; - getexp $MANA_BLVL*100, $MANA_JLVL*10; - goto L_Tier1Ok; - break; - case 3: - delitem MaggotSlime, 500; - goto L_Tier1Ok; - break; - default: - break; - } - - close; - -L_Tier1Ok: - // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1. - skill(MG_FIREBALL,1,0); - skill(WIZARD_MAGE,1,0); - mes ""; - mesn; - mesq l("Here, learn this awesome skill. It is on the skills tab. You can drag it to the shortcut list. Use it to protect people!"); - close; - -L_NoMagic: - next; - mesn; - mesq l("Your lack of magical power is critical. I dare say, you might never in your life get access to a Mana Stone."); - next; - mesn; - mesq l("Besides the Magic Council, Andrei Sakar have his own Mana Stone, but I doubt he would train the likes of you, or share his Mana Stone."); - next; - mesn; - mesq l("Perhaps, in the city, someone knows rumors about Mana Stones and can teach you. Other than that, you're on your own."); - close; - -// progressbar("", ) -// Script will be canceled if character moves :D -// So I probably could *try* to reuse TMW-BR Magic Tier 2 Scripts. -L_Tier2: - next; - mesn; - mesq l("Wha, your magic power increased! How?! Ah, nevermind. You are eligible to get tier 2!"); - next; - mesn; - mesq l("But whoa, not so fast! You must pass the seven steps of a trial first!"); - next; - mesn; - mesq l("The first trial is simple, I'm not doing anything in special. Bring me 1 @@, or 200 @@ and 20 @@.", getitemlink(DivineApple), getitemlink(SilkCocoon), getitemlink(ChocolateMouboo)); - next; - switch(select( - rif(countitem(DivineApple) >= 1, l("I got the apple.")), - rif(countitem(SilkCocoon) >= 200 && countitem(ChocolateMouboo) >= 20, l("I got the silk and chocolate.")), - l("I will apply later."))) { - - case 1: - delitem DivineApple, 1; - goto L_Tier2Ok; - break; - case 2: - delitem SilkCocoon, 200; - delitem ChocolateMouboo, 20; - goto L_Tier2Ok; - break; - default: - break; - } - - close; - -L_Tier2Ok: - // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1. - addtoskill(MG_FIREBALL,2,0); - getexp 10000, 0; - ST_TIER=1; - mes ""; - mesn; - mesq l("Good, good. The skill you got earlier just raised a single level. I'll also impair some experience on you, no biggies."); - next; - mesn; - mesq l("Now, the real challenge will start. You have a lot of raw power, but that doesn't gives you a lot of skills to learn."); - next; - mesn; - mesq l("I can make a nice, simple potion for you. That will help the raw mana to settle on your body."); - next; - mesn; - mesq l("However, beware! That potion is short-lived, you'll be running against time. Get ready to travel a lot."); - next; - if (nard_reputation() < 8) { - mesn; - mesq l("I advise you to do more quests on Tulimshar and Candor, otherwise, you might fail right at the end."); - next; - } - mesn; - mesq l("Come talk to me when you're ready, and we can begin."); - close; - -L_T2_Fail: - if (ST_TIER == 3) { - if (countitem(SunnyCrystal) > 0) { - delitem SunnyCrystal, 1; - } else { - mesn; - mesc l("WARNING. YOU ARE CHEATING THE SUNNY CRYSTAL QUEST."), 1; - next; - mesn; - mesc l("YOU WILL BE PENALIZED WITH 60% OF HEALTH."), 1; - mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1; - percentheal -60, -100; - close; - } - } - - if (ST_TIER == 10) { - if (countitem(JesusalvaGrimorium) > 0) { - delitem JesusalvaGrimorium, 1; - } else { - mesn; - mesc l("WARNING. YOU ARE CHEATING THE GRIMORIE QUEST."), 1; - next; - mesn; - mesc l("YOU WILL BE PENALIZED WITH 70% OF HEALTH."), 1; - mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1; - percentheal -70, -100; - close; - } - } - - mesc l(".:: Mission Failed ::."), 1; - mesc l("You ran out of time."), 1; - mes ""; - mes l("You should have gotten here @@.", FuzzyTime(QUEST_ELEVARTEMPO,0,2)); - ST_TIER=1; - close; - -L_T2_S0: - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 1) goto L_T2_S1; - if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail; - - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 2) goto L_T2_S2; - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 3) goto L_T2_S3; - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 4) goto L_T2_S4; - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 5) goto L_T2_S5; - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 6) goto L_T2_S6; - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER <= 9) goto L_T2_S7; - if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 10) goto L_T2_Final; - mesc l("Error, error, L_T2_S0 General Error, REPORT ME"); - close; - -L_T2_S1: - //WIZARD_MAGE l("Wizard Mages") MAGIC_WARRIOR - mes ""; - mesn; - mesq l("So, young disciple! I wish I could just chant some gibberish words and that automatically granted you more skills, but alas, that won't work."); - next; - if (nard_reputation() < 8) { - mesn; - mesc l("I advise you to do more quests on Tulimshar and Candor, otherwise, you will fail right at the end."), 1; - next; - } - mesn; - mesq l("I can, however, prepare you a potion. But beware, that potion will only last 35 minutes once baked."); - next; - mesn; // PiberriesInfusion - mesq l("If it expires, you'll need to do another. To bake it I need 1 @@, 10 @@ and a @@. Have Mauve and Money, lots of it.", getitemlink(EverburnPowder), getitemlink(MaggotSlime), getitemlink(EmptyBottle)); - next; - select - rif(countitem(MaggotSlime) >= 10 && countitem(EverburnPowder) && countitem(EmptyBottle), l("I have everything.")), - l("I'm not ready."); - - mes ""; - if (@menu == 2) { - mesn; - mesq l("Yes, as you see, the costs are high. Prepare yourself."); - close; - } - - delitem EmptyBottle, 1; - delitem EverburnPowder, 1; - delitem MaggotSlime, 10; - ST_TIER=2; - set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35); - getexp 400, 0; - mesn; - mesc l("The class master mix the powder with the slime inside the bottle, and makes some weird mixture."); - next; - mesn; - mesc l("He pours something on it, you're not sure what. He then utters some magic words."); - next; - // Reset timer, this is the place where it should really happen. - set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35); - mesn; - mesq l("The potion is baked, you have thirty five minutes! Read as fast as you can, don't miss details!"); - next; - mesn; - mesq l("First thing is to get a @@. One from black market won't do, go to Halinarzo!", getitemlink(SunnyCrystal)); - next; - mesn; - mesq l("Speak with ##BBarzil##b. Tell him I need it, he'll give you one from my inventory. HURRY UP!"); - close; - -L_T2_S2: - mesn; - mesq l("Hurry up! Bring my @@ from Barzil in Halinarzo!! You only have @@ left!", getitemlink(SunnyCrystal), FuzzyTime(QUEST_ELEVARTEMPO,2,2)); - close; - -L_T2_S3: - if (countitem(SunnyCrystal) == 0) { - mesn; - mesq l("Where's the Sunny Crystal? Hurry up, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); - } - delitem SunnyCrystal, 1; - ST_TIER=4; - getexp 250, 0; - mesn; - mesq l("Good, you did it!"); - next; - mesn; - mesc l("*chants more words, while the crystal hovers the potion*"); - next; - -L_T2_S4: - mesn; - mesq l("I will need many Mauve Herbs! Do you have them with you? If you don't have enough, we'll lose everything! You need at most @@!", BaseLevel+40); - select - rif(countitem(MauveHerb), l("Yes, I have herbs. I assume the risks.")), - l("No I don't have herbs. I'll be back."); - - if (@menu == 2) - close; - - if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail; - .@req=rand(BaseLevel-20, BaseLevel+40); - // Minimum is 40, max is unknown, defaults to 100 - - mesn; - mesq l("I need @@ Herbs!", .@req); - //next; // If you comment this next, you'll allow players to logout and prevent penalty. - mes ""; - - if (countitem(MauveHerb) < .@req) goto L_T2_Fail; - delitem MauveHerb, .@r; - ST_TIER=5; - getexp .@r*3, 0; - //getitem MagicPotion, 1; - - mesc l("You quickly give him the herbs, and he skillfully mix them on a potion."); - next; - // You'll get a random amount of time, based on spent herbs - // Usually, 10~73 sec, being 73 sec = 1m13s - QUEST_ELEVARTEMPO=QUEST_ELEVARTEMPO+rand(10,.@r-27); - -L_T2_S5: - mesn; - mesq l("Good! Last step! West of Hurnscald, there is a magic fountain."); - next; - mesn; - mesq l("Talk to the Fountain. Pour the potion on it. I advise you to put all your points on int if possible."); - next; - mesn; - mesq l("Hurry up, you'll run out of time in @@!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); - close; - -L_T2_S6: - ST_TIER=7; - mesn; - mesq l("You did it! You're now on the last stage of this BORING and LONG quest!"); - next; - -L_T2_S7: - mesn; - mesq l("Jesusaves wrote a grimorie, with ancient secrets of our world."); - next; - mesn; - mesq l("Captain Nard have it. Fetch it with him! Quick, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); - close; - -// You gain two skills: Provoke (works better, but limited usability) and the class skill -L_T2_Final: - skill(AL_DP,1,0); - skill(SM_PROVOKE, 1, 0); - addtoskill(WIZARD_MAGE,2,0); - getexp 40000, 0; // Yes, 40k experience points. Waw. - mesc l(".:: Congratulations! ::."), 2; - mesc l("You advanced your tier!"), 2; - next; - mesn; - mesq l("Keep the Grimorie with you. It's the proof you are now Tier 2. The book shall guide your advances!"); - next; - mesn; - mesq lg("Yes, courageous and worthy adventurer. You did well. I won't babysit you anymore. Embrace the new world opening before you!"); - close; - -OnInit: - .@npcId = getnpcid(.name$); - setunitdata(.@npcId, UDT_HEADTOP, NPCEyes); - setunitdata(.@npcId, UDT_HEADMIDDLE, SorcererRobe); - setunitdata(.@npcId, UDT_HEADBOTTOM, JeansShorts); - setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots); - setunitdata(.@npcId, UDT_HAIRSTYLE, 21); - setunitdata(.@npcId, UDT_HAIRCOLOR, 20); - - .sex = G_MALE; - .distance = 5; - end; -} diff --git a/npc/003-0-1/luca.txt b/npc/003-0-1/luca.txt deleted file mode 100644 index 77863c3ec..000000000 --- a/npc/003-0-1/luca.txt +++ /dev/null @@ -1,371 +0,0 @@ -// TMW2 script. -// Author: -// Saulc -// Jesusalva -// Description: -// Luca and Colin assigns player a class. Luca is the Warrior Master. - -003-0-1,35,29,0 script Luca NPC_PLAYER,{ - mesn; - mesq l("I am the @@ master.", l("Magic Warriors")); - if (!MAGIC_LVL) goto L_NoMagic; - if (getskilllv(WIZARD_MAGE) && !is_admin()) close; - if (getskilllv(MAGIC_WARRIOR) == 0) goto L_SignUp; - - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 0) goto L_Tier2; - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER >= 1) goto L_T2_S0; - - // Sanity check - if (getskilllv(MAGIC_WARRIOR) >= 1) { - mesn; - mesq l("The Warriors have three other subclasses:"); - mesn lg("Paladin"); - mesc l("The well-round guy, with reasonable def, attack, and support skills."); - mesn lg("Berserker"); - mesc l("The full-attack guy. Two hand swords works best!"); - mesn lg("Tanker"); - mesc l("The full-defense guy. Most skills require a shield."); - } - close; - -L_SignUp: - next; - mesn; - mesq l("You have some magic power. Do you want to join the @@? ##BThis cannot be undone##b.", l("Magic Warriors")); - next; - mesn; - mesq l("We use swords and bows to protect the people, and we use magic to spice things up! Because we're strong even without it!"); - next; - menu - l("What do I need to do to join?"), L_JoinReq, - l("I'm not interested, sorry."), -; - close; - -L_JoinReq: - mesn; - mesq l("Ah, nothing too major, as you already have magic."); - next; - mesn; - mesq l("We only require a small fee of 1 @@, or 40 @@, or 500 @@ if you are poor adventurer.", getitemlink(DivineApple), getitemlink(SnakeEgg), getitemlink(MaggotSlime)); - next; - switch(select( - rif(countitem(DivineApple) >= 1, l("I got the apple.")), - rif(countitem(SnakeEgg) >= 40, l("I got the eggs.")), - rif(countitem(MaggotSlime) >= 500, l("I got the maggots slimes.")), - l("I will apply later."))) { - - case 1: - delitem DivineApple, 1; - getexp $MANA_BLVL*100, $MANA_JLVL*10; - goto L_Tier1Ok; - break; - case 2: - // If player had 40 eggs, and eat 1 - they are clearly cheating. - // It will delete all 39 eggs, and when it tries to delete the 40th, - // it won't find and will terminate the script. No lame cheating. - // Of course, all 39 eggs are gone for and I can't do anything about it. - delitem SnakeEgg, 40; - getexp $MANA_BLVL*100, $MANA_JLVL*10; - goto L_Tier1Ok; - break; - case 3: - delitem MaggotSlime, 500; - goto L_Tier1Ok; - break; - default: - break; - } - - close; - -L_Tier1Ok: - // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1. - skill(SM_BASH,1,0); - skill(MAGIC_WARRIOR,1,0); - mes ""; - mesn; - mesq l("Here, learn this awesome skill. It is on the skills tab. You can drag it to the shortcut list. Use it to protect people!"); - close; - -L_NoMagic: - next; - mesn; - mesq l("Your lack of magical power is critical. I dare say, you might never in your life get access to a Mana Stone."); - next; - mesn; - mesq l("Besides the Magic Council, Andrei Sakar have his own Mana Stone, but I doubt he would train the likes of you, or share his Mana Stone."); - next; - mesn; - mesq l("Perhaps, in the city, someone knows rumors about Mana Stones and can teach you. Other than that, you're on your own."); - close; - -// progressbar("", ) -// Script will be canceled if character moves :D -// So I probably could *try* to reuse TMW-BR Magic Tier 2 Scripts. -L_Tier2: - next; - mesn; - mesq l("Wha, your magic power increased! How?! Ah, nevermind. You are eligible to get tier 2!"); - next; - mesn; - mesq l("But whoa, not so fast! You must pass the seven steps of a trial first!"); - next; - mesn; - mesq l("The first trial is simple, I'm not doing anything in special. Bring me 1 @@, or 200 @@ and 20 @@.", getitemlink(DivineApple), getitemlink(SilkCocoon), getitemlink(ChocolateMouboo)); - next; - switch(select( - rif(countitem(DivineApple) >= 1, l("I got the apple.")), - rif(countitem(SilkCocoon) >= 200 && countitem(ChocolateMouboo) >= 20, l("I got the silk and chocolate.")), - l("I will apply later."))) { - - case 1: - delitem DivineApple, 1; - goto L_Tier2Ok; - break; - case 2: - delitem SilkCocoon, 200; - delitem ChocolateMouboo, 20; - goto L_Tier2Ok; - break; - default: - break; - } - - close; - -L_Tier2Ok: - // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1. - addtoskill(SM_BASH,2,0); - getexp 10000, 0; - ST_TIER=1; - mes ""; - mesn; - mesq l("Good, good. The skill you got earlier just raised a single level. I'll also impair some experience on you, no biggies."); - next; - mesn; - mesq l("Now, the real challenge will start. You have a lot of raw power, but that doesn't gives you a lot of skills to learn."); - next; - mesn; - mesq l("I can make a nice, simple potion for you. That will help the raw mana to settle on your body."); - next; - mesn; - mesq l("However, beware! That potion is short-lived, you'll be running against time. Get ready to travel a lot."); - next; - if (nard_reputation() < 8) { - mesn; - mesq l("I advise you to do more quests on Tulimshar and Candor, otherwise, you might fail right at the end."); - next; - } - mesn; - mesq l("Come talk to me when you're ready, and we can begin."); - close; - -L_T2_Fail: - if (ST_TIER == 3) { - if (countitem(SunnyCrystal) > 0) { - delitem SunnyCrystal, 1; - } else { - mesn; - mesc l("WARNING. YOU ARE CHEATING THE SUNNY CRYSTAL QUEST."), 1; - next; - mesn; - mesc l("YOU WILL BE PENALIZED WITH 60% OF HEALTH."), 1; - mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1; - percentheal -60, -100; - close; - } - } - - if (ST_TIER == 10) { - if (countitem(JesusalvaGrimorium) > 0) { - delitem JesusalvaGrimorium, 1; - } else { - mesn; - mesc l("WARNING. YOU ARE CHEATING THE GRIMORIE QUEST."), 1; - next; - mesn; - mesc l("YOU WILL BE PENALIZED WITH 70% OF HEALTH."), 1; - mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1; - percentheal -70, -100; - close; - } - } - - mesc l(".:: Mission Failed ::."), 1; - mesc l("You ran out of time."), 1; - mes ""; - mes l("You should have gotten here @@.", FuzzyTime(QUEST_ELEVARTEMPO,0,2)); - ST_TIER=1; - close; - -L_T2_S0: - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 1) goto L_T2_S1; - if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail; - - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 2) goto L_T2_S2; - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 3) goto L_T2_S3; - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 4) goto L_T2_S4; - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 5) goto L_T2_S5; - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 6) goto L_T2_S6; - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER <= 9) goto L_T2_S7; - if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 10) goto L_T2_Final; - mesc l("Error, error, L_T2_S0 General Error, REPORT ME"); - close; - -L_T2_S1: - //MAGIC_WARRIOR l("Magic Warriors") WIZARD_MAGE - mes ""; - mesn; - mesq l("So, young disciple! I wish I could just chant some gibberish words and that automatically granted you more skills, but alas, that won't work."); - next; - if (nard_reputation() < 8) { - mesn; - mesc l("I advise you to do more quests on Tulimshar and Candor, otherwise, you will fail right at the end."), 1; - next; - } - mesn; - mesq l("I can, however, prepare you a potion. But beware, that potion will only last 35 minutes once baked."); - next; - mesn; // PiberriesInfusion - mesq l("If it expires, you'll need to do another. To bake it I need 1 @@, 10 @@ and a @@. Have Mauve and Money, lots of it.", getitemlink(EverburnPowder), getitemlink(MaggotSlime), getitemlink(EmptyBottle)); - next; - select - rif(countitem(MaggotSlime) >= 10 && countitem(EverburnPowder) && countitem(EmptyBottle), l("I have everything.")), - l("I'm not ready."); - - mes ""; - if (@menu == 2) { - mesn; - mesq l("Yes, as you see, the costs are high. Prepare yourself."); - close; - } - - delitem EmptyBottle, 1; - delitem EverburnPowder, 1; - delitem MaggotSlime, 10; - ST_TIER=2; - set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35); - getexp 400, 0; - mesn; - mesc l("The class master mix the powder with the slime inside the bottle, and makes some weird mixture."); - next; - mesn; - mesc l("He pours something on it, you're not sure what. He then utters some magic words."); - next; - // Reset timer, this is the place where it should really happen. - set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35); - mesn; - mesq l("The potion is baked, you have thirty five minutes! Read as fast as you can, don't miss details!"); - next; - mesn; - mesq l("First thing is to get a @@. One from black market won't do, go to Halinarzo!", getitemlink(SunnyCrystal)); - next; - mesn; - mesq l("Speak with ##BBarzil##b. Tell him I need it, he'll give you one from my inventory. HURRY UP!"); - close; - -L_T2_S2: - mesn; - mesq l("Hurry up! Bring my @@ from Barzil in Halinarzo!! You only have @@ left!", getitemlink(SunnyCrystal), FuzzyTime(QUEST_ELEVARTEMPO,2,2)); - close; - -L_T2_S3: - if (countitem(SunnyCrystal) == 0) { - mesn; - mesq l("Where's the Sunny Crystal? Hurry up, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); - } - delitem SunnyCrystal, 1; - ST_TIER=4; - getexp 250, 0; - mesn; - mesq l("Good, you did it!"); - next; - mesn; - mesc l("*chants more words, while the crystal hovers the potion*"); - next; - -L_T2_S4: - mesn; - mesq l("I will need many Mauve Herbs! Do you have them with you? If you don't have enough, we'll lose everything! You need at most @@!", BaseLevel+40); - select - rif(countitem(MauveHerb), l("Yes, I have herbs. I assume the risks.")), - l("No I don't have herbs. I'll be back."); - - if (@menu == 2) - close; - - if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail; - .@req=rand(BaseLevel-20, BaseLevel+40); - // Minimum is 40, max is unknown, defaults to 100 - - mesn; - mesq l("I need @@ Herbs!", .@req); - //next; // If you comment this next, you'll allow players to logout and prevent penalty. - mes ""; - - if (countitem(MauveHerb) < .@req) goto L_T2_Fail; - delitem MauveHerb, .@r; - ST_TIER=5; - getexp .@r*3, 0; - //getitem MagicPotion, 1; - - mesc l("You quickly give him the herbs, and he skillfully mix them on a potion."); - next; - // You'll get a random amount of time, based on spent herbs - // Usually, 10~73 sec, being 73 sec = 1m13s - QUEST_ELEVARTEMPO=QUEST_ELEVARTEMPO+rand(10,.@r-27); - -L_T2_S5: - mesn; - mesq l("Good! Last step! West of Hurnscald, there is a magic fountain."); - next; - mesn; - mesq l("Talk to the Fountain. Pour the potion on it. I advise you to put all your points on int if possible."); - next; - mesn; - mesq l("Hurry up, you'll run out of time in @@!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); - close; - -L_T2_S6: - ST_TIER=7; - mesn; - mesq l("You did it! You're now on the last stage of this BORING and LONG quest!"); - next; - -L_T2_S7: - mesn; - mesq l("Jesusaves wrote a grimorie, with ancient secrets of our world."); - next; - mesn; - mesq l("Captain Nard have it. Fetch it with him! Quick, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); - close; - -// You gain two skills: Provoke (works better, but limited usability) and the class skill -L_T2_Final: - skill(NV_TRICKDEAD,1,0); - skill(SM_PROVOKE, 1, 0); - addtoskill(MAGIC_WARRIOR,2,0); - getexp 40000, 0; // Yes, 40k experience points. Waw. - mesc l(".:: Congratulations! ::."), 2; - mesc l("You advanced your tier!"), 2; - next; - mesn; - mesq l("Keep the Grimorie with you. It's the proof you are now Tier 2. The book shall guide your advances!"); - next; - mesn; - mesq lg("Yes, courageous and worthy adventurer. You did well. I won't babysit you anymore. Embrace the new world opening before you!"); - close; - -OnInit: - .@npcId = getnpcid(.name$); - setunitdata(.@npcId, UDT_HEADTOP, NPCEyes); - setunitdata(.@npcId, UDT_HEADMIDDLE, BromenalChest); - setunitdata(.@npcId, UDT_HEADBOTTOM, JeansShorts); - setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots); - setunitdata(.@npcId, UDT_HAIRSTYLE, 21); - setunitdata(.@npcId, UDT_HAIRCOLOR, 6); - - .sex = G_MALE; - .distance = 5; - end; -} diff --git a/npc/003-0-1/professor.txt b/npc/003-0-1/professor.txt new file mode 100644 index 000000000..d4c088d2f --- /dev/null +++ b/npc/003-0-1/professor.txt @@ -0,0 +1,25 @@ +// TMW2 Script +// Author: +// Jesusalva +// Description: +// Professor - allows you to gain EXP for idling (Speech skill) + +003-0-1,35,29,0 script Professor NPC_PLAYER,{ + mesn; + mesq l("I've mastered the art of speech and communication."); + close; + +OnInit: + .@npcId = getnpcid(.name$); + setunitdata(.@npcId, UDT_HEADTOP, GraduationCap); + setunitdata(.@npcId, UDT_HEADMIDDLE, GraduationRobe); + setunitdata(.@npcId, UDT_HEADBOTTOM, DeepBlackBoots); + setunitdata(.@npcId, UDT_WEAPON, CottonGloves); + setunitdata(.@npcId, UDT_HAIRSTYLE, 2); + setunitdata(.@npcId, UDT_HAIRCOLOR, 4); + + .sex=G_MALE; + .distance=5; + end; +} + diff --git a/npc/003-0-1/researcher.txt b/npc/003-0-1/researcher.txt new file mode 100644 index 000000000..dc6a4f978 --- /dev/null +++ b/npc/003-0-1/researcher.txt @@ -0,0 +1,17 @@ +// TMW2 Script +// Author: +// Jesusalva +// Description: +// Researcher - allows you to decrypt Ancient Blueprints (Ancient Lang. skill) + +003-0-1,58,29,0 script Researcher NPC_BLACKALCHEMIST,{ + mesn; + mesq l("I've mastered the art of reading ancient languages."); + close; + +OnInit: + .sex=G_MALE; + .distance=5; + end; +} + diff --git a/npc/003-0/_import.txt b/npc/003-0/_import.txt index ea9a90d35..7f54a7b79 100644 --- a/npc/003-0/_import.txt +++ b/npc/003-0/_import.txt @@ -2,6 +2,8 @@ // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/003-0/_warps.txt", "npc/003-0/berserk.txt", +"npc/003-0/colin.txt", +"npc/003-0/luca.txt", "npc/003-0/mages.txt", "npc/003-0/paladin.txt", "npc/003-0/priest.txt", diff --git a/npc/003-0/colin.txt b/npc/003-0/colin.txt new file mode 100644 index 000000000..526f0d2ef --- /dev/null +++ b/npc/003-0/colin.txt @@ -0,0 +1,371 @@ +// TMW2 script. +// Author: +// Saulc +// Jesusalva +// Description: +// Luca and Colin assigns player a class. Colin is the Wizard Master. + +003-0,41,25,0 script Colin NPC_PLAYER,{ + mesn; + mesq l("I am the @@ master.", l("Wizard Mages")); + if (!MAGIC_LVL) goto L_NoMagic; + if (getskilllv(MAGIC_WARRIOR) && !is_admin()) close; + if (getskilllv(WIZARD_MAGE) == 0) goto L_SignUp; + + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 0) goto L_Tier2; + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER >= 1) goto L_T2_S0; + + // Sanity check + if (getskilllv(WIZARD_MAGE) >= 1) { + mesn; + mesq l("The Wizards have three other subclasses:"); + mesn lg("Wizard"); + mesc l("The offensive guy, with every attack skill a mage could need."); + mesn lg("Sage"); + mesc l("The wise guy, which doesn't relies on magic, and loves summon."); + mesn lg("Priest"); + mesc l("The defensive guy, with every support skill a mage could need."); + } + close; + +L_SignUp: + next; + mesn; + mesq l("You have some magic power. Do you want to join the @@? ##BThis cannot be undone##b.", l("Wizard Mages")); + next; + mesn; + mesq l("We use swords and bows to protect the people, and we use magic to spice things up! Because we're strong even without it!"); + next; + menu + l("What do I need to do to join?"), L_JoinReq, + l("I'm not interested, sorry."), -; + close; + +L_JoinReq: + mesn; + mesq l("Ah, nothing too major, as you already have magic."); + next; + mesn; + mesq l("We only require a small fee of 1 @@, or 40 @@, or 500 @@ if you are poor adventurer.", getitemlink(DivineApple), getitemlink(SnakeEgg), getitemlink(MaggotSlime)); + next; + switch(select( + rif(countitem(DivineApple) >= 1, l("I got the apple.")), + rif(countitem(SnakeEgg) >= 40, l("I got the eggs.")), + rif(countitem(MaggotSlime) >= 500, l("I got the maggots slimes.")), + l("I will apply later."))) { + + case 1: + delitem DivineApple, 1; + getexp $MANA_BLVL*100, $MANA_JLVL*10; + goto L_Tier1Ok; + break; + case 2: + // If player had 40 eggs, and eat 1 - they are clearly cheating. + // It will delete all 39 eggs, and when it tries to delete the 40th, + // it won't find and will terminate the script. No lame cheating. + // Of course, all 39 eggs are gone for and I can't do anything about it. + delitem SnakeEgg, 40; + getexp $MANA_BLVL*100, $MANA_JLVL*10; + goto L_Tier1Ok; + break; + case 3: + delitem MaggotSlime, 500; + goto L_Tier1Ok; + break; + default: + break; + } + + close; + +L_Tier1Ok: + // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1. + skill(MG_FIREBALL,1,0); + skill(WIZARD_MAGE,1,0); + mes ""; + mesn; + mesq l("Here, learn this awesome skill. It is on the skills tab. You can drag it to the shortcut list. Use it to protect people!"); + close; + +L_NoMagic: + next; + mesn; + mesq l("Your lack of magical power is critical. I dare say, you might never in your life get access to a Mana Stone."); + next; + mesn; + mesq l("Besides the Magic Council, Andrei Sakar have his own Mana Stone, but I doubt he would train the likes of you, or share his Mana Stone."); + next; + mesn; + mesq l("Perhaps, in the city, someone knows rumors about Mana Stones and can teach you. Other than that, you're on your own."); + close; + +// progressbar("", ) +// Script will be canceled if character moves :D +// So I probably could *try* to reuse TMW-BR Magic Tier 2 Scripts. +L_Tier2: + next; + mesn; + mesq l("Wha, your magic power increased! How?! Ah, nevermind. You are eligible to get tier 2!"); + next; + mesn; + mesq l("But whoa, not so fast! You must pass the seven steps of a trial first!"); + next; + mesn; + mesq l("The first trial is simple, I'm not doing anything in special. Bring me 1 @@, or 200 @@ and 20 @@.", getitemlink(DivineApple), getitemlink(SilkCocoon), getitemlink(ChocolateMouboo)); + next; + switch(select( + rif(countitem(DivineApple) >= 1, l("I got the apple.")), + rif(countitem(SilkCocoon) >= 200 && countitem(ChocolateMouboo) >= 20, l("I got the silk and chocolate.")), + l("I will apply later."))) { + + case 1: + delitem DivineApple, 1; + goto L_Tier2Ok; + break; + case 2: + delitem SilkCocoon, 200; + delitem ChocolateMouboo, 20; + goto L_Tier2Ok; + break; + default: + break; + } + + close; + +L_Tier2Ok: + // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1. + addtoskill(MG_FIREBALL,2,0); + getexp 10000, 0; + ST_TIER=1; + mes ""; + mesn; + mesq l("Good, good. The skill you got earlier just raised a single level. I'll also impair some experience on you, no biggies."); + next; + mesn; + mesq l("Now, the real challenge will start. You have a lot of raw power, but that doesn't gives you a lot of skills to learn."); + next; + mesn; + mesq l("I can make a nice, simple potion for you. That will help the raw mana to settle on your body."); + next; + mesn; + mesq l("However, beware! That potion is short-lived, you'll be running against time. Get ready to travel a lot."); + next; + if (nard_reputation() < 8) { + mesn; + mesq l("I advise you to do more quests on Tulimshar and Candor, otherwise, you might fail right at the end."); + next; + } + mesn; + mesq l("Come talk to me when you're ready, and we can begin."); + close; + +L_T2_Fail: + if (ST_TIER == 3) { + if (countitem(SunnyCrystal) > 0) { + delitem SunnyCrystal, 1; + } else { + mesn; + mesc l("WARNING. YOU ARE CHEATING THE SUNNY CRYSTAL QUEST."), 1; + next; + mesn; + mesc l("YOU WILL BE PENALIZED WITH 60% OF HEALTH."), 1; + mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1; + percentheal -60, -100; + close; + } + } + + if (ST_TIER == 10) { + if (countitem(JesusalvaGrimorium) > 0) { + delitem JesusalvaGrimorium, 1; + } else { + mesn; + mesc l("WARNING. YOU ARE CHEATING THE GRIMORIE QUEST."), 1; + next; + mesn; + mesc l("YOU WILL BE PENALIZED WITH 70% OF HEALTH."), 1; + mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1; + percentheal -70, -100; + close; + } + } + + mesc l(".:: Mission Failed ::."), 1; + mesc l("You ran out of time."), 1; + mes ""; + mes l("You should have gotten here @@.", FuzzyTime(QUEST_ELEVARTEMPO,0,2)); + ST_TIER=1; + close; + +L_T2_S0: + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 1) goto L_T2_S1; + if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail; + + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 2) goto L_T2_S2; + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 3) goto L_T2_S3; + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 4) goto L_T2_S4; + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 5) goto L_T2_S5; + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 6) goto L_T2_S6; + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER <= 9) goto L_T2_S7; + if (getskilllv(WIZARD_MAGE) == 1 && MAGIC_LVL >= 2 && ST_TIER == 10) goto L_T2_Final; + mesc l("Error, error, L_T2_S0 General Error, REPORT ME"); + close; + +L_T2_S1: + //WIZARD_MAGE l("Wizard Mages") MAGIC_WARRIOR + mes ""; + mesn; + mesq l("So, young disciple! I wish I could just chant some gibberish words and that automatically granted you more skills, but alas, that won't work."); + next; + if (nard_reputation() < 8) { + mesn; + mesc l("I advise you to do more quests on Tulimshar and Candor, otherwise, you will fail right at the end."), 1; + next; + } + mesn; + mesq l("I can, however, prepare you a potion. But beware, that potion will only last 35 minutes once baked."); + next; + mesn; // PiberriesInfusion + mesq l("If it expires, you'll need to do another. To bake it I need 1 @@, 10 @@ and a @@. Have Mauve and Money, lots of it.", getitemlink(EverburnPowder), getitemlink(MaggotSlime), getitemlink(EmptyBottle)); + next; + select + rif(countitem(MaggotSlime) >= 10 && countitem(EverburnPowder) && countitem(EmptyBottle), l("I have everything.")), + l("I'm not ready."); + + mes ""; + if (@menu == 2) { + mesn; + mesq l("Yes, as you see, the costs are high. Prepare yourself."); + close; + } + + delitem EmptyBottle, 1; + delitem EverburnPowder, 1; + delitem MaggotSlime, 10; + ST_TIER=2; + set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35); + getexp 400, 0; + mesn; + mesc l("The class master mix the powder with the slime inside the bottle, and makes some weird mixture."); + next; + mesn; + mesc l("He pours something on it, you're not sure what. He then utters some magic words."); + next; + // Reset timer, this is the place where it should really happen. + set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35); + mesn; + mesq l("The potion is baked, you have thirty five minutes! Read as fast as you can, don't miss details!"); + next; + mesn; + mesq l("First thing is to get a @@. One from black market won't do, go to Halinarzo!", getitemlink(SunnyCrystal)); + next; + mesn; + mesq l("Speak with ##BBarzil##b. Tell him I need it, he'll give you one from my inventory. HURRY UP!"); + close; + +L_T2_S2: + mesn; + mesq l("Hurry up! Bring my @@ from Barzil in Halinarzo!! You only have @@ left!", getitemlink(SunnyCrystal), FuzzyTime(QUEST_ELEVARTEMPO,2,2)); + close; + +L_T2_S3: + if (countitem(SunnyCrystal) == 0) { + mesn; + mesq l("Where's the Sunny Crystal? Hurry up, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); + } + delitem SunnyCrystal, 1; + ST_TIER=4; + getexp 250, 0; + mesn; + mesq l("Good, you did it!"); + next; + mesn; + mesc l("*chants more words, while the crystal hovers the potion*"); + next; + +L_T2_S4: + mesn; + mesq l("I will need many Mauve Herbs! Do you have them with you? If you don't have enough, we'll lose everything! You need at most @@!", BaseLevel+40); + select + rif(countitem(MauveHerb), l("Yes, I have herbs. I assume the risks.")), + l("No I don't have herbs. I'll be back."); + + if (@menu == 2) + close; + + if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail; + .@req=rand(BaseLevel-20, BaseLevel+40); + // Minimum is 40, max is unknown, defaults to 100 + + mesn; + mesq l("I need @@ Herbs!", .@req); + //next; // If you comment this next, you'll allow players to logout and prevent penalty. + mes ""; + + if (countitem(MauveHerb) < .@req) goto L_T2_Fail; + delitem MauveHerb, .@r; + ST_TIER=5; + getexp .@r*3, 0; + //getitem MagicPotion, 1; + + mesc l("You quickly give him the herbs, and he skillfully mix them on a potion."); + next; + // You'll get a random amount of time, based on spent herbs + // Usually, 10~73 sec, being 73 sec = 1m13s + QUEST_ELEVARTEMPO=QUEST_ELEVARTEMPO+rand(10,.@r-27); + +L_T2_S5: + mesn; + mesq l("Good! Last step! West of Hurnscald, there is a magic fountain."); + next; + mesn; + mesq l("Talk to the Fountain. Pour the potion on it. I advise you to put all your points on int if possible."); + next; + mesn; + mesq l("Hurry up, you'll run out of time in @@!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); + close; + +L_T2_S6: + ST_TIER=7; + mesn; + mesq l("You did it! You're now on the last stage of this BORING and LONG quest!"); + next; + +L_T2_S7: + mesn; + mesq l("Jesusaves wrote a grimorie, with ancient secrets of our world."); + next; + mesn; + mesq l("Captain Nard have it. Fetch it with him! Quick, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); + close; + +// You gain two skills: Provoke (works better, but limited usability) and the class skill +L_T2_Final: + skill(AL_DP,1,0); + skill(SM_PROVOKE, 1, 0); + addtoskill(WIZARD_MAGE,2,0); + getexp 40000, 0; // Yes, 40k experience points. Waw. + mesc l(".:: Congratulations! ::."), 2; + mesc l("You advanced your tier!"), 2; + next; + mesn; + mesq l("Keep the Grimorie with you. It's the proof you are now Tier 2. The book shall guide your advances!"); + next; + mesn; + mesq lg("Yes, courageous and worthy adventurer. You did well. I won't babysit you anymore. Embrace the new world opening before you!"); + close; + +OnInit: + .@npcId = getnpcid(.name$); + setunitdata(.@npcId, UDT_HEADTOP, NPCEyes); + setunitdata(.@npcId, UDT_HEADMIDDLE, SorcererRobe); + setunitdata(.@npcId, UDT_HEADBOTTOM, JeansShorts); + setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots); + setunitdata(.@npcId, UDT_HAIRSTYLE, 21); + setunitdata(.@npcId, UDT_HAIRCOLOR, 20); + + .sex = G_MALE; + .distance = 5; + end; +} diff --git a/npc/003-0/luca.txt b/npc/003-0/luca.txt new file mode 100644 index 000000000..882ffeead --- /dev/null +++ b/npc/003-0/luca.txt @@ -0,0 +1,371 @@ +// TMW2 script. +// Author: +// Saulc +// Jesusalva +// Description: +// Luca and Colin assigns player a class. Luca is the Warrior Master. + +003-0,31,26,0 script Luca NPC_PLAYER,{ + mesn; + mesq l("I am the @@ master.", l("Magic Warriors")); + if (!MAGIC_LVL) goto L_NoMagic; + if (getskilllv(WIZARD_MAGE) && !is_admin()) close; + if (getskilllv(MAGIC_WARRIOR) == 0) goto L_SignUp; + + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 0) goto L_Tier2; + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER >= 1) goto L_T2_S0; + + // Sanity check + if (getskilllv(MAGIC_WARRIOR) >= 1) { + mesn; + mesq l("The Warriors have three other subclasses:"); + mesn lg("Paladin"); + mesc l("The well-round guy, with reasonable def, attack, and support skills."); + mesn lg("Berserker"); + mesc l("The full-attack guy. Two hand swords works best!"); + mesn lg("Tanker"); + mesc l("The full-defense guy. Most skills require a shield."); + } + close; + +L_SignUp: + next; + mesn; + mesq l("You have some magic power. Do you want to join the @@? ##BThis cannot be undone##b.", l("Magic Warriors")); + next; + mesn; + mesq l("We use swords and bows to protect the people, and we use magic to spice things up! Because we're strong even without it!"); + next; + menu + l("What do I need to do to join?"), L_JoinReq, + l("I'm not interested, sorry."), -; + close; + +L_JoinReq: + mesn; + mesq l("Ah, nothing too major, as you already have magic."); + next; + mesn; + mesq l("We only require a small fee of 1 @@, or 40 @@, or 500 @@ if you are poor adventurer.", getitemlink(DivineApple), getitemlink(SnakeEgg), getitemlink(MaggotSlime)); + next; + switch(select( + rif(countitem(DivineApple) >= 1, l("I got the apple.")), + rif(countitem(SnakeEgg) >= 40, l("I got the eggs.")), + rif(countitem(MaggotSlime) >= 500, l("I got the maggots slimes.")), + l("I will apply later."))) { + + case 1: + delitem DivineApple, 1; + getexp $MANA_BLVL*100, $MANA_JLVL*10; + goto L_Tier1Ok; + break; + case 2: + // If player had 40 eggs, and eat 1 - they are clearly cheating. + // It will delete all 39 eggs, and when it tries to delete the 40th, + // it won't find and will terminate the script. No lame cheating. + // Of course, all 39 eggs are gone for and I can't do anything about it. + delitem SnakeEgg, 40; + getexp $MANA_BLVL*100, $MANA_JLVL*10; + goto L_Tier1Ok; + break; + case 3: + delitem MaggotSlime, 500; + goto L_Tier1Ok; + break; + default: + break; + } + + close; + +L_Tier1Ok: + // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1. + skill(SM_BASH,1,0); + skill(MAGIC_WARRIOR,1,0); + mes ""; + mesn; + mesq l("Here, learn this awesome skill. It is on the skills tab. You can drag it to the shortcut list. Use it to protect people!"); + close; + +L_NoMagic: + next; + mesn; + mesq l("Your lack of magical power is critical. I dare say, you might never in your life get access to a Mana Stone."); + next; + mesn; + mesq l("Besides the Magic Council, Andrei Sakar have his own Mana Stone, but I doubt he would train the likes of you, or share his Mana Stone."); + next; + mesn; + mesq l("Perhaps, in the city, someone knows rumors about Mana Stones and can teach you. Other than that, you're on your own."); + close; + +// progressbar("", ) +// Script will be canceled if character moves :D +// So I probably could *try* to reuse TMW-BR Magic Tier 2 Scripts. +L_Tier2: + next; + mesn; + mesq l("Wha, your magic power increased! How?! Ah, nevermind. You are eligible to get tier 2!"); + next; + mesn; + mesq l("But whoa, not so fast! You must pass the seven steps of a trial first!"); + next; + mesn; + mesq l("The first trial is simple, I'm not doing anything in special. Bring me 1 @@, or 200 @@ and 20 @@.", getitemlink(DivineApple), getitemlink(SilkCocoon), getitemlink(ChocolateMouboo)); + next; + switch(select( + rif(countitem(DivineApple) >= 1, l("I got the apple.")), + rif(countitem(SilkCocoon) >= 200 && countitem(ChocolateMouboo) >= 20, l("I got the silk and chocolate.")), + l("I will apply later."))) { + + case 1: + delitem DivineApple, 1; + goto L_Tier2Ok; + break; + case 2: + delitem SilkCocoon, 200; + delitem ChocolateMouboo, 20; + goto L_Tier2Ok; + break; + default: + break; + } + + close; + +L_Tier2Ok: + // The last argument is duration: 0 - permanent 1- temporary. If omitted, defaults to 1. + addtoskill(SM_BASH,2,0); + getexp 10000, 0; + ST_TIER=1; + mes ""; + mesn; + mesq l("Good, good. The skill you got earlier just raised a single level. I'll also impair some experience on you, no biggies."); + next; + mesn; + mesq l("Now, the real challenge will start. You have a lot of raw power, but that doesn't gives you a lot of skills to learn."); + next; + mesn; + mesq l("I can make a nice, simple potion for you. That will help the raw mana to settle on your body."); + next; + mesn; + mesq l("However, beware! That potion is short-lived, you'll be running against time. Get ready to travel a lot."); + next; + if (nard_reputation() < 8) { + mesn; + mesq l("I advise you to do more quests on Tulimshar and Candor, otherwise, you might fail right at the end."); + next; + } + mesn; + mesq l("Come talk to me when you're ready, and we can begin."); + close; + +L_T2_Fail: + if (ST_TIER == 3) { + if (countitem(SunnyCrystal) > 0) { + delitem SunnyCrystal, 1; + } else { + mesn; + mesc l("WARNING. YOU ARE CHEATING THE SUNNY CRYSTAL QUEST."), 1; + next; + mesn; + mesc l("YOU WILL BE PENALIZED WITH 60% OF HEALTH."), 1; + mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1; + percentheal -60, -100; + close; + } + } + + if (ST_TIER == 10) { + if (countitem(JesusalvaGrimorium) > 0) { + delitem JesusalvaGrimorium, 1; + } else { + mesn; + mesc l("WARNING. YOU ARE CHEATING THE GRIMORIE QUEST."), 1; + next; + mesn; + mesc l("YOU WILL BE PENALIZED WITH 70% OF HEALTH."), 1; + mesc l("IF YOU DIE, YOU'LL SUFFER THE EXP PENALTY."), 1; + percentheal -70, -100; + close; + } + } + + mesc l(".:: Mission Failed ::."), 1; + mesc l("You ran out of time."), 1; + mes ""; + mes l("You should have gotten here @@.", FuzzyTime(QUEST_ELEVARTEMPO,0,2)); + ST_TIER=1; + close; + +L_T2_S0: + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 1) goto L_T2_S1; + if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail; + + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 2) goto L_T2_S2; + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 3) goto L_T2_S3; + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 4) goto L_T2_S4; + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 5) goto L_T2_S5; + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 6) goto L_T2_S6; + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER <= 9) goto L_T2_S7; + if (getskilllv(MAGIC_WARRIOR) == 1 && MAGIC_LVL >= 2 && ST_TIER == 10) goto L_T2_Final; + mesc l("Error, error, L_T2_S0 General Error, REPORT ME"); + close; + +L_T2_S1: + //MAGIC_WARRIOR l("Magic Warriors") WIZARD_MAGE + mes ""; + mesn; + mesq l("So, young disciple! I wish I could just chant some gibberish words and that automatically granted you more skills, but alas, that won't work."); + next; + if (nard_reputation() < 8) { + mesn; + mesc l("I advise you to do more quests on Tulimshar and Candor, otherwise, you will fail right at the end."), 1; + next; + } + mesn; + mesq l("I can, however, prepare you a potion. But beware, that potion will only last 35 minutes once baked."); + next; + mesn; // PiberriesInfusion + mesq l("If it expires, you'll need to do another. To bake it I need 1 @@, 10 @@ and a @@. Have Mauve and Money, lots of it.", getitemlink(EverburnPowder), getitemlink(MaggotSlime), getitemlink(EmptyBottle)); + next; + select + rif(countitem(MaggotSlime) >= 10 && countitem(EverburnPowder) && countitem(EmptyBottle), l("I have everything.")), + l("I'm not ready."); + + mes ""; + if (@menu == 2) { + mesn; + mesq l("Yes, as you see, the costs are high. Prepare yourself."); + close; + } + + delitem EmptyBottle, 1; + delitem EverburnPowder, 1; + delitem MaggotSlime, 10; + ST_TIER=2; + set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35); + getexp 400, 0; + mesn; + mesc l("The class master mix the powder with the slime inside the bottle, and makes some weird mixture."); + next; + mesn; + mesc l("He pours something on it, you're not sure what. He then utters some magic words."); + next; + // Reset timer, this is the place where it should really happen. + set QUEST_ELEVARTEMPO, gettimetick(2) + (60 * 35); + mesn; + mesq l("The potion is baked, you have thirty five minutes! Read as fast as you can, don't miss details!"); + next; + mesn; + mesq l("First thing is to get a @@. One from black market won't do, go to Halinarzo!", getitemlink(SunnyCrystal)); + next; + mesn; + mesq l("Speak with ##BBarzil##b. Tell him I need it, he'll give you one from my inventory. HURRY UP!"); + close; + +L_T2_S2: + mesn; + mesq l("Hurry up! Bring my @@ from Barzil in Halinarzo!! You only have @@ left!", getitemlink(SunnyCrystal), FuzzyTime(QUEST_ELEVARTEMPO,2,2)); + close; + +L_T2_S3: + if (countitem(SunnyCrystal) == 0) { + mesn; + mesq l("Where's the Sunny Crystal? Hurry up, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); + } + delitem SunnyCrystal, 1; + ST_TIER=4; + getexp 250, 0; + mesn; + mesq l("Good, you did it!"); + next; + mesn; + mesc l("*chants more words, while the crystal hovers the potion*"); + next; + +L_T2_S4: + mesn; + mesq l("I will need many Mauve Herbs! Do you have them with you? If you don't have enough, we'll lose everything! You need at most @@!", BaseLevel+40); + select + rif(countitem(MauveHerb), l("Yes, I have herbs. I assume the risks.")), + l("No I don't have herbs. I'll be back."); + + if (@menu == 2) + close; + + if (gettimetick(2) > QUEST_ELEVARTEMPO) goto L_T2_Fail; + .@req=rand(BaseLevel-20, BaseLevel+40); + // Minimum is 40, max is unknown, defaults to 100 + + mesn; + mesq l("I need @@ Herbs!", .@req); + //next; // If you comment this next, you'll allow players to logout and prevent penalty. + mes ""; + + if (countitem(MauveHerb) < .@req) goto L_T2_Fail; + delitem MauveHerb, .@r; + ST_TIER=5; + getexp .@r*3, 0; + //getitem MagicPotion, 1; + + mesc l("You quickly give him the herbs, and he skillfully mix them on a potion."); + next; + // You'll get a random amount of time, based on spent herbs + // Usually, 10~73 sec, being 73 sec = 1m13s + QUEST_ELEVARTEMPO=QUEST_ELEVARTEMPO+rand(10,.@r-27); + +L_T2_S5: + mesn; + mesq l("Good! Last step! West of Hurnscald, there is a magic fountain."); + next; + mesn; + mesq l("Talk to the Fountain. Pour the potion on it. I advise you to put all your points on int if possible."); + next; + mesn; + mesq l("Hurry up, you'll run out of time in @@!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); + close; + +L_T2_S6: + ST_TIER=7; + mesn; + mesq l("You did it! You're now on the last stage of this BORING and LONG quest!"); + next; + +L_T2_S7: + mesn; + mesq l("Jesusaves wrote a grimorie, with ancient secrets of our world."); + next; + mesn; + mesq l("Captain Nard have it. Fetch it with him! Quick, you only have @@ left!", FuzzyTime(QUEST_ELEVARTEMPO,2,2)); + close; + +// You gain two skills: Provoke (works better, but limited usability) and the class skill +L_T2_Final: + skill(NV_TRICKDEAD,1,0); + skill(SM_PROVOKE, 1, 0); + addtoskill(MAGIC_WARRIOR,2,0); + getexp 40000, 0; // Yes, 40k experience points. Waw. + mesc l(".:: Congratulations! ::."), 2; + mesc l("You advanced your tier!"), 2; + next; + mesn; + mesq l("Keep the Grimorie with you. It's the proof you are now Tier 2. The book shall guide your advances!"); + next; + mesn; + mesq lg("Yes, courageous and worthy adventurer. You did well. I won't babysit you anymore. Embrace the new world opening before you!"); + close; + +OnInit: + .@npcId = getnpcid(.name$); + setunitdata(.@npcId, UDT_HEADTOP, NPCEyes); + setunitdata(.@npcId, UDT_HEADMIDDLE, BromenalChest); + setunitdata(.@npcId, UDT_HEADBOTTOM, JeansShorts); + setunitdata(.@npcId, UDT_WEAPON, DeepBlackBoots); + setunitdata(.@npcId, UDT_HAIRSTYLE, 21); + setunitdata(.@npcId, UDT_HAIRCOLOR, 6); + + .sex = G_MALE; + .distance = 5; + end; +} diff --git a/npc/003-1/magic.txt b/npc/003-1/magic.txt index 03a89de24..cd0366739 100644 --- a/npc/003-1/magic.txt +++ b/npc/003-1/magic.txt @@ -7,13 +7,14 @@ 003-1,34,33,0 script #MagicSchoolGate1 NPC_HIDDEN,0,0,{ end; OnTouch: + /* if (countitem(JesusalvaGrimorium) <= 0 || MAGIC_LVL < 2) { slide 36, 39; percentheal -5, -10; dispbottom l("Powerful magic repels you away from this magic place!"); - } else { - warp "003-0", 48, 51; - dispbottom col(l("CONDEMNED: This building has been condemned. The roof may fall. Be careful!"), 1); } + */ + warp "003-0", 48, 51; + dispbottom col(l("CONDEMNED: This building has been condemned. The roof may fall. Be careful!"), 1); end; } diff --git a/npc/003-8/intensebeard.txt b/npc/003-8/intensebeard.txt index 040ec9b1d..0ee951b68 100644 --- a/npc/003-8/intensebeard.txt +++ b/npc/003-8/intensebeard.txt @@ -262,7 +262,6 @@ OnInit: npcsit; end; - } diff --git a/npc/functions/clientversion.txt b/npc/functions/clientversion.txt index 21054c3fa..d79a58aaf 100644 --- a/npc/functions/clientversion.txt +++ b/npc/functions/clientversion.txt @@ -281,7 +281,6 @@ function script clientupdater { } // Bounty Hunter Helmet if (MERCENARY_DAILYQUEST > 100) { - inventoryplace BountyHunterHelmet, 1; getitem BountyHunterHelmet, 1; } -- cgit v1.2.3-70-g09d2