diff options
-rw-r--r-- | db/quest_db.conf | 3 | ||||
-rw-r--r-- | db/re/item_db.conf | 8 | ||||
-rw-r--r-- | db/re/mob_db.conf | 122 | ||||
-rw-r--r-- | npc/001-2-34/doors.txt | 54 | ||||
-rw-r--r-- | npc/001-2-36/_import.txt | 2 | ||||
-rw-r--r-- | npc/001-2-36/hector.txt | 502 | ||||
-rw-r--r-- | npc/001-2-36/training_room_npc.txt | 165 | ||||
-rw-r--r-- | npc/commands/debug-quest.txt | 3 | ||||
-rw-r--r-- | npc/functions/quest-debug/034-ArtisQuests_TrainingLegion.txt | 28 | ||||
-rw-r--r-- | npc/scripts.conf | 2 |
10 files changed, 700 insertions, 189 deletions
diff --git a/db/quest_db.conf b/db/quest_db.conf index 9d87df84..2353115e 100644 --- a/db/quest_db.conf +++ b/db/quest_db.conf @@ -162,6 +162,9 @@ quest_db: ( Name: "Artis_Legion_Progress" }, { + Id: 34 Name: "ArtisQuests_TrainingLegion" + }, +{ Id: 36 Name: "HurnscaldQuests_Hinnak" }, diff --git a/db/re/item_db.conf b/db/re/item_db.conf index 96293603..35d97ec1 100644 --- a/db/re/item_db.conf +++ b/db/re/item_db.conf @@ -4124,7 +4124,7 @@ item_db: ( WeaponLv: 1 EquipLv: 5 Refine: false - Subtype: "W_DAGGER" + Subtype: "W_1HSWORD" BindOnEquip: false Delay: 0 Sprite: 0 @@ -4146,7 +4146,7 @@ item_db: ( WeaponLv: 1 EquipLv: 5 Refine: false - Subtype: "W_DAGGER" + Subtype: "W_1HSWORD" BindOnEquip: false Delay: 0 Sprite: 0 @@ -4168,7 +4168,7 @@ item_db: ( WeaponLv: 1 EquipLv: 15 Refine: false - Subtype: "W_DAGGER" + Subtype: "W_1HSWORD" BindOnEquip: false Delay: 0 Sprite: 0 @@ -4332,7 +4332,7 @@ item_db: ( WeaponLv: 1 EquipLv: 10 Refine: false - Subtype: "W_DAGGER" + Subtype: "W_STAFF" BindOnEquip: false Delay: 0 Sprite: 0 diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf index 9b70f689..90b3623f 100644 --- a/db/re/mob_db.conf +++ b/db/re/mob_db.conf @@ -2974,4 +2974,126 @@ mob_db: ( Moss: 400 } }, +{ + Id: 1107 + SpriteName: "Dummy2" + Name: "Dummy" + Lv: 1 + Hp: 8 + Sp: 0 + Exp: 1 + JExp: 0 + AttackRange: 1 + Attack: [1, 1] + Def: 1 + Mdef: 1 + Stats: { + Str: 1 + Agi: 1 + Vit: 1 + Int: 1 + Dex: 1 + Luk: 1 + } + ViewRange: 1 + ChaseRange: 12 + Size: 1 + Race: 3 + Element: (2, 1) + MoveSpeed: 1000 + AttackDelay: 800 + AttackMotion: 672 + DamageMotion: 480 + MvpExp: 0 + SkillAttacks: { + SM_BASH: 10000 + } + WeaponAttacks: { + NoWeapon: 0 + Daggers: 0 + 1HSwords: 0 + 2HSwords: 0 + 1HSpears: 0 + 2HSpears: 0 + 1HAxes: 0 + 2HAxes: 0 + Maces: 0 + 2HMaces: 0 + Staves: 0 + Bows: 0 + Knuckles: 0 + Instruments: 0 + Whips: 0 + Books: 0 + Katars: 0 + Revolvers: 0 + Rifles: 0 + GatlingGuns: 0 + Shotguns: 0 + GrenadeLaunchers: 0 + FuumaShurikens: 0 + } +}, +{ + Id: 1108 + SpriteName: "Dummy3" + Name: "Dummy" + Lv: 1 + Hp: 3 + Sp: 0 + Exp: 1 + JExp: 0 + AttackRange: 1 + Attack: [1, 1] + Def: 100 + Mdef: 1 + Stats: { + Str: 1 + Agi: 1 + Vit: 1 + Int: 1 + Dex: 1 + Luk: 1 + } + ViewRange: 1 + ChaseRange: 12 + Size: 1 + Race: 3 + Element: (2, 1) + Mode: { + Plant: true + } + MoveSpeed: 1000 + AttackDelay: 800 + AttackMotion: 672 + DamageMotion: 480 + MvpExp: 0 + SkillAttacks: { + SM_BASH: 0 + } + WeaponAttacks: { + NoWeapon: 0 + Daggers: 0 + 1HSwords: 0 + 2HSwords: 0 + 1HSpears: 0 + 2HSpears: 0 + 1HAxes: 0 + 2HAxes: 0 + Maces: 0 + 2HMaces: 0 + Staves: 0 + Bows: 10000 + Knuckles: 0 + Instruments: 0 + Whips: 0 + Katars: 0 + Revolvers: 0 + Rifles: 0 + GatlingGuns: 0 + Shotguns: 0 + GrenadeLaunchers: 0 + FuumaShurikens: 0 + } +}, ) diff --git a/npc/001-2-34/doors.txt b/npc/001-2-34/doors.txt index ca513945..d53dfc82 100644 --- a/npc/001-2-34/doors.txt +++ b/npc/001-2-34/doors.txt @@ -5,25 +5,45 @@ // Doors NPCs. 001-2-34,23,29,0 script ToTrainingRoom#001-2-34 NPC_HIDDEN,0,0,{ - OnTouch: - if ((getmapusers($@MAP_NAME$) == 0) && ($@FightingIsActive > 0)) - { - set $@FightingIsActive, 0; - killmonsterall "001-2-36"; - } - if (mobcount("001-2-36","all") > 0 && $@FightingIsActive > 0) - { - narrator - l("You hear some sound behind the door."), - l("Somebody is probably training, better wait for him to finish."); - } - else - { - warp "001-2-36", 36, 30; + function doorBlock { + .@trainingMap$ = "001-2-36"; // map to create + .@CharID = getcharid(CHAR_ID_CHAR); // character ID used for set the name of instance + + // check if a valid instance exists and warp + if (.instid >= 0 && isinstance(.instid)) + { + warp(.@CharID+.@trainingMap$, 36, 30); + end; + } + + // else create new instance + .instid = instance_create("training@instance", getcharid(CHAR_ID_ACCOUNT), IOT_CHAR); + if (.instid < 0) + { + debugmes "Error: creating instance"; + end; + } + + .@instanceMapName$ = instance_attachmap(.@trainingMap$, .instid, 0, .@CharID+.@trainingMap$ ); + if (.@instanceMapName$ == "") + { + debugmes "Error: instance attach map error"; + end; + } + + instance_set_timeout(1000000, 1000000, .instid); + instance_init(.instid); + + // respawn the player in front of door of training room if the player relog inside the instance + // do not effect the savepoint + setmapflagnosave(.@instanceMapName$, .map$, 24, 29); + + warp(.@CharID+.@trainingMap$, 36, 30); + end; } - closeclientdialog; - close; + doorBlock; + end; } diff --git a/npc/001-2-36/_import.txt b/npc/001-2-36/_import.txt index 222e5a7f..57397efd 100644 --- a/npc/001-2-36/_import.txt +++ b/npc/001-2-36/_import.txt @@ -1,5 +1,5 @@ // Map 001-2-36: unnamed // This file is generated automatically. All manually added changes will be removed when running the Converter. "npc/001-2-36/_warps.txt", +"npc/001-2-36/hector.txt", "npc/001-2-36/mapflags.txt", -"npc/001-2-36/training_room_npc.txt", diff --git a/npc/001-2-36/hector.txt b/npc/001-2-36/hector.txt new file mode 100644 index 00000000..b5551d1e --- /dev/null +++ b/npc/001-2-36/hector.txt @@ -0,0 +1,502 @@ +// TrainingRoom +// Author: +// jak1 +// omatt +// toams +// Story: +// Reid +// Teru +// Spellchecking & Dialogs: +// Reid +// toams +// Variable: +// .fightingActive +// 0 = no fight active +// 1 = swordfight active +// 2 = bowfight active +// 3 = skillfight +// ArtisQuests_TrainingLegion +// 0 not started at all +// 1 swordTraining finished +// 2 bowTraining finished +// 3 bow and sword finished +// 4 end of training +// .mobID is related to quest state +// 1 1021 dummy for sword wave +// 2 1108 dummy for bow wave +// 3 1107 dummy for skill wave +// +// TODO adding rand messages like "try hit it harder..." for wave's +// TODO in first, second, and third training, input some tips about related weapon given. +// TODO replace basicControl with GameRules()/@tutorial see !166 + + +001-2-36,32,36,0 script Hector#001-2-36 NPC_LUCAS,{ + + 'instanceID = instance_id(); + 'npcName$ = strnpcinfo(NPC_NAME_UNIQUE); // required for call the label in the npc of this one instance + + function basicControl { + + // same text of Ian npc of tmw + // feel free to adapt text + // a case for skill need to be add + do + { + clear; + speech(3, + l("Would you like to know about something?")); + + select( + l("Fighting."), + l("Items."), + l("Monsters."), + l("Commands."), + l("Attributes."), + l("Quick Keys."), + l("Laws."), + l("I know everything!")); + + switch (@menu) + { + case 1: + speech(7, + l("People live in this world by living off of monsters."), + l("You can fight monsters and even players by hitting the [CTRL] key, or left mouse click."), + l("If you get tired of pressing the key too much, you can also type [SHIFT]+[CTRL]."), + l("This will make your character attack continuously for the time you are inactive.")); + break; + + case 2: + speech(7, + l("There are three types of items."), + l("They can be Consumables, Equipment or Miscellaneous."), + l("Consumable items such as Potions, can be used only once. After use, they will disappear from your inventory."), + l("Equipment items like Armors, Weapons, Accessories can be equipped for fashionable purposes or to raise your status."), + l("Miscellaneous items such as maggot slime, are used in creating other items, or just to trade and sell.")); + break; + + case 3: + speech(7, + l("In every world, there are beasts. Monsters can be found almost anywhere!~"), + l("To fight them, please read [Fighting] if you do not know how."), + l("There a several types of monsters, Aggressive, Neutral, and Assistants."), + l("Aggressive monsters know that they are always in danger so therefore they always keep their guard up, making them attack anybody in sight."), + l("Neutral monsters tend to just lounge around until attacked. They will leave everything alone unless they are threatened."), + l("Assistants are monsters who help each other. You should always check how many are around you before attacking a single one!")); + break; + + case 4: + speech(7, + l("/clear clears the text box."), + l("/help displays the client commands (ones starting with a /) in the chat box."), + l("/whisper [name] allows you to message someone privately."), + l("/who displays the current number of online users."), + l("/where displays the current map's name.")); + break; + + case 5: + // tips about stats is about tmw, then pre renowal, then not good for here who are renewal + // but since i don't play of renewal, i can't change them for better fit .__. + speech(7, + l("People vary greatly by how much strength, agility, dexterity, intelligence, vitality, and luck they have."), + l("Strength helps you carry items, and it also allows you to hit harder – but it is not too helpful if you focus on missile weapons."), + l("More agility allows you to attack faster, and to dodge attacks more easily."), + l("Your dexterity determines how likely you are to hit a monster, and how effective you are with missile weapons."), + l("Vitality determines how resistant to injuries you are, and how much damage you can take before you die."), + l("Intelligence is useful for alchemy and magic, but there are few opportunities for either at the moment."), + l("Luck determines many small things, including the likelihood of both recieving and dealing critical hits."), + l("I recommend that you practice your dexterity, since some of the more dangerous monsters are very hard to hit otherwise."), + l("Don't bother trying to work on your luck, and your intelligence is probably not something anyone cares about either.")); + break; + + case 6: + speech(7, + l("There are many key combinations, press F1 for a short list of them!")); + break; + + case 7: + narrator(7, + l("There is a paper with some rules written on it."), + l("1. ##BDo not bot##b, this means you are not allowed to perform any AFK (away from keyboard) activity, apart from standing idle."), + l("2. ##BDo not use offensive/rude language##b in the chats or in your character(s) name(s)."), + l("3. ##BDo not spam/flood other players.##b This includes chat spam and spam by trade requests."), + l("4. ##BSpeak only English in public areas.##b You can speak whatever language you want through whispers or whenever everyone in the area can speak said language."), + l("5. ##BDo not beg others##b for money, items or favours of any kind. If you want to ask for something, do it politely and only once. Try not to annoy other players."), + l("6. ##BFollow the [@@http://wiki.evolonline.org/rules/esc|ESC@@]##b (Evol Social Convention)."), + l("7. ##BDo not multibox.##b You are not allowed to engage in combat while controlling more than one character at a time.")); + break; + + default: return 1; + } + } while (1); + } + + function waveEnded { + + if (.fightingActive == 1 && getq(.quest_training) == 2) + { + npctalk3(l("Well done, you aren't even bleeding that much!")); + setq(.quest_training, 3); + } + if (.fightingActive == 1 && getq(.quest_training) == 0) + { + npctalk3(l("Well done, you aren't even bleeding that much!")); + setq(.quest_training, 1); + } + if (.fightingActive == 2 && getq(.quest_training) == 0) + { + npctalk3(l("Great! Don't mind those scorched hairs, they will grow back.")); + setq(.quest_training, 2); + } + if (.fightingActive == 2 && getq(.quest_training) == 1) + { + npctalk3(l("Great! Don't mind those scorched hairs, they will grow back.")); + setq(.quest_training, 3); + } + if (.fightingActive == 3) + { + npctalk3(l("Congratulations, you have finished your training.")); + sleep2(2000); + npctalk3(l("The only way to improve yourself is practice, practice and some more practice.")); + setq(.quest_training, 4); + } + + .currentWaveLevel = 1; + .fightingActive = 0; + 'mobDead = 0; + end; + } + + function mobSpawn { + + if (.fightingActive != 0) + { + if (.currentWaveLevel == .maxWaves) + { + npctalk3(l("Last Wave!")); + } + else + { + npctalk3(l("Wave " + .currentWaveLevel + "!")); + } + + areamonster('map$, .mobCoordinate[0], .mobCoordinate[1], .mobCoordinate[2], .mobCoordinate[3], + /* map x1 y1 x2 y2 */ + .mobName$, .mobID[.fightingActive], .currentWaveLevel, 'npcName$+"::OnTrainingMobDead"); + /* mob display mob id amount label */ + } + + end; + } + + function trainingEnd { + sleep2(2000); + npctalk3(l("This training is over!")); + .fightingActive = 0; + .currentWaveLevel = 1; + killmonster('map$, "All"); + end; + } + + + function mobKilled { + + 'mobDead = 0; // reset the count + + if (.currentWaveLevel == .maxWaves ) + { + waveEnded; + } + + // check for sword in swordtraining + if (getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) != W_1HSWORD && .fightingActive == 1) + { + npctalk3(l("Hey! Use your sword!")); + trainingEnd; + } + + // check for bow in bowtraining + if (getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) != W_BOW && .fightingActive == 2) + { + npctalk3(l("Hey! Use your bow!")); + trainingEnd; + } + + // no weapons may be equiped when training skill + if (getequipid(EQI_HAND_R) != -1 && .fightingActive == 3) + { + npctalk3(l("Hey! No weapons allowed this round!")); + trainingEnd; + } + + // check if wave of skill, and if in first wave, then after kill the first dummy, the player receive explain and mana potion + if (.fightingActive == 3 && .currentWaveLevel == 1) + { + setcamnpc(strnpcinfo(NPC_NAME_UNIQUE)); // focus the npc when he talk to the player + speech(4, + l("This skill consume some spell points."), + l("And for regain spell point you have to wait."), + l("The speed of regen depend of your intelligence (i don't suspect you are stupid...)."), + l("If you sit, you can regain your spell points more faster."), + l("Or you can drink a mana potion for restore some spell point when you need."), + l("And, i'm a good guy, then i give you few of mine for free, take !")); + closedialog; + getitem(.mana_potion, 1); + sleep2(3000); + } + + .currentWaveLevel++; // next wave after killed dummy + + mobSpawn; + } + + function trainingActive { + + speech(6, + l("Don't be shy and attack the dummies!")); + + } + + function swordTraining { + speech(6, + l("So you chose the sword for this training, make sure to equip it or we can't start.")); + if (getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) != W_1HSWORD) + { + speech(6, + l("I told you to equip a sword! Come back later with a sword in your hands.")); + end; + } + + speech(10, + l("It's time to use this sword, I will place some dummies in the fighting arena. @@ waves of dummies, kill them to finish this training.", .maxWaves), + l("Ready?")); + + askyesno; + if (@menu == ASK_NO) + { + closedialog; + end; + } + .fightingActive = 1; + } + + function bowTraining { + speech(6, + l("So you chose the bow for this training, make sure to equip it or we can't start.")); + + if (getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) != W_BOW) + { + speech(6, + l("I told you to equip a bow! Come back later with a bow in your hands.")); + end; + } + + speech(10, + l("Prepare yourself for fighting the dummies!"), + l("I've set these dummies on fire. Don't get to close to the dummies or the fire will hurt you."), + l("The range of your bow makes it possible to kill them from a distance."), + l("Ready?")); + + askyesno; + if (@menu == ASK_NO) + { + closedialog; + end; + } + .fightingActive = 2; + } + + function skillTraining { + + // give SM_BASH skill + skill(.skill_name, 1, 0); + + speech(10, + l("For this skill no weapons are used, so make sure to unequip them."), + l("TODO: explain how skills work"), + l("@@ waves of dummies, you know how that ends.", .maxWaves), + l("Ready?")); + + askyesno; + if (@menu == ASK_NO) + { + closedialog; + end; + } + .fightingActive = 3; + } + + function checkCombatZone { + + getmapxy('map$, @x, @y, 0); + if (@x < 24 || @x > 32 || @y < 33 || @y > 43) + return 1; + return 0; + } + + function trainingStart { + + if (checkCombatZone()) + { + npctalk3(l("Please enter the combat zone on the left.")); + closedialog; + end; + } + if (.fightingActive == 0) + { + switch (getq(.quest_training)) + { + case 0: speech(3, + l("Which weapon do you want to train? Bow or sword?")); + + switch (select(l("Sword."), + l("Bow."), + l("I don't feel like training today, see you later."))) + { + case 1: swordTraining; break; + case 2: bowTraining; break; + case 3: closedialog; end; + } + break; + case 1: speech(3, + l("You have finished the sword training. Do you want to start train the bow?")); + + switch (select(l("Yes."), + l("I don't feel like training today, see you later."))) + { + case 1: bowTraining; break; + case 2: closedialog; end; + } + break; + case 2: speech(3, + l("You have finished the bow training. Do you want to start train the sword?")); + + switch (select(l("Yes."), + l("I don't feel like training today, see you later."))) + { + case 1: swordTraining; break; + case 2: closedialog; end; + } + break; + case 3: speech(3, + l("Congratulations, you have mastered both the bow and the sword. The only thing left to teach you is the bashing skill.")); + + switch (select(l("Yes."), + l("I don't feel like training today, see you later."))) + { + case 1: skillTraining; break; + case 2: end; + } + break; + } + closedialog; + + npctalk3(l("Let's begin")); + + mobSpawn; + } + } + + function firstCheck { + + // here different messages, when the player are in fight and talk to npc, message is realted to the state of quest + if (.fightingActive != 0) + { + switch (.fightingActive) + { + case 1: npctalk3(l("Attack with your sword and kill them!")); end; + case 2: npctalk3(l("Use your bow and kill them!")); end; + case 3: npctalk3(l("Hey lazy bum! Attack the dummies")); end; + default: break; + } + } + + // start menu + switch (getq(.quest_training)) + { + case 0: speech(5, + l(.mockingGreeting$[rand(getarraysize(.mockingGreeting$))]), + l("Do you want some training? To be honest, it looks like you can use some...")); + break; + case 4: speech(5, + l("Your training is finished, I teached you all I know."), + l("So now go and explore the world!")); + closedialog; + end; + default: speech(5, + l("Hello again, ready to continue your lessions?")); break; + } + + do + { + selectd( + l("Yes, train me!"), + l("Hmm... But what is exactly this training?"), + l("I'm a bit lost in this game, can you first give me few tips?"), + l("Not right now, it looks like I got other stuff to do.")); + + switch (@menu) + { + case 1: trainingStart; break; + case 2: + // here text who explain what is the training of this npc + speech(15, + l("In this training, my goal is to learn you how to be a skilled warrior, who can use a sword, a bow and a skill."), + l("For this, you need a sword and a bow."), + l("After you gathered your weapons, I will teach you how to use them.")); + break; + case 3: basicControl; break; + case 4: closedialog; end; + + default: closedialog; end; + } + } while (1); + } + + // Here called function who start dialog + firstCheck; + closedialog; + end; + +OnTrainingMobDead: + // the amount of mob spawned depend of currentwave + if (++'mobDead == .currentWaveLevel) + { + mobKilled; + } + end; + +OnLeaveCombatZone: + if (.fightingActive > 0) + { + npctalk3(l("You left the combat zone!")); + trainingEnd; + } + end; + +OnInit: + .mana_potion = Croconut; // here need to change the potion + .skill_name = SM_BASH; + .quest_training = ArtisQuests_TrainingLegion; + .quest_debug = .quest_training; + .maxWaves = 3; + .mobName$ = "Dummy"; + + .currentWaveLevel = 1; + .fightingActive = 0; + + // here input some sentences "hello noob" like, the npc pick randomly a sentence + setarray .mockingGreeting$[0], "Hy noob !", "Hey somethingwholooklikeawarrior...", "Sup' chibi."; + setarray .mobID[0],0, 1021, 1108, 1107; // mob id, in array because change for different state of quest + setarray .mobCoordinate[0], 24, 34, 31, 41; // this represent the square of "ring" training + + end; + +} + +001-2-36,33,37,0 script combatzonechecker NPC_HIDDEN,0,1,{ +OnTouch: + doevent instance_npcname("Hector#001-2-36",instance_id()) + "::OnLeaveCombatZone"; +end; +} diff --git a/npc/001-2-36/training_room_npc.txt b/npc/001-2-36/training_room_npc.txt deleted file mode 100644 index 022b5d2e..00000000 --- a/npc/001-2-36/training_room_npc.txt +++ /dev/null @@ -1,165 +0,0 @@ -// TrainingRoom -// -// Author: -// jak1 -// -// Story: -// Akko Teru -// Reid -// -// Spellchecking & Dialogs -// Reid - -// ~~ VARS ~~ -// $@FightingIsActive -// 0 = can Warp in Room (non active fight) -// 1 = can't Warp in Room (active fight) - -//TODO adding rand messages like "try hit it harder..." for wave's - - -001-2-36,32,36,0 script FightNPCName NPC_LUCAS,{ - - set $@NPCNAME$, "FightNPCName"; - set $@NPCNEXTNAME$, "Samantha"; - set $@MOB_ID, 1021; - set $@MOB_NAME$, "Dummy"; - set $@CURRENT_WAVE_LEVEL, 1; - set $@MAX_WAVES, 10; - - //Room and Mobspawn Coordinates - // TL BR - setarray $@MOB_SPAWN_COORDINATES, 24, 34, 31, 41; - setarray $@MAP_NAME$, "001-2-36"; - - set @roomPlayers, getmapusers($@MAP_NAME$); - - if(@roomPlayers > 1) - goto NotAlone; - - if ($@FightingIsActive == 1) - { - npctalk3 "You are not done now!"; - end; - } - - //call in Warp door if (1 = block) - set $@FightingIsActive, 1; - - if (!debug || !is_dev()) - goto start; - - //can be removed later! - menu - "get debug vars", debug_it, - "reset char var", resetVar, - "start training", -; - - -start: - if (FIGHT_TRAINING >= 1) - goto JobIsDone; - - getmapxy(.@map$, .@x, .@y, 0); - if (.@x < 24 || .@x > 32 || .@y < 33 || .@y > 43) - { - speech S_FIRST_BLANK_LINE, l("Please enter the combat zone on the left."); - close; - } - - setcells "001-2-36", 33, 35, 33, 38, 1, "fence"; - initnpctimer; - setnpctimer 0; - startnpctimer; - - npctalk3 l("Let's begin"); - end; - - -//cancel all actions, the Player needs to be alone in this Room -NotAlone: - npctalk3 "You dont feel so great with audience!"; - set $@FightingIsActive, 0; - end; - - -//If a Spawned Mob gets Killed -OnTrainingMobDead: - if ($@CURRENT_WAVE_LEVEL == $@MAX_WAVES ) - goto FinishedTraining; - - set $@CURRENT_WAVE_LEVEL, $@CURRENT_WAVE_LEVEL + 1; - setnpctimer 0; - startnpctimer; - end; - - -SpawnMonster: - if ( $@FightingIsActive == 1 ) - { - if ($@CURRENT_WAVE_LEVEL == $@MAX_WAVES) - { - npctalk "Last Wave!", $@NPCNAME$; - } - else - { - npctalk "Wave " + $@CURRENT_WAVE_LEVEL + "!", $@NPCNAME$; - } - - areamonster "001-2-36", $@MOB_SPAWN_COORDINATES[0], $@MOB_SPAWN_COORDINATES[1], $@MOB_SPAWN_COORDINATES[2], $@MOB_SPAWN_COORDINATES[3], $@MOB_NAME$, $@MOB_ID, 1, $@NPCNAME$ + "::OnTrainingMobDead"; - stopnpctimer; - setnpctimer 0; - } - else - { - set $@CURRENT_WAVE_LEVEL, 0; - } - stopnpctimer; - setnpctimer 0; - end; - - -//15 Secounds Waiting (Regeneration for fightRoom) -OnTimer5000: - goto SpawnMonster; - - -FinishedTraining: - //... TODO - - npctalk "Con. u finished it...", $@NPCNAME$; - stopnpctimer; - setnpctimer 0; - set $@CURRENT_WAVE_LEVEL, 0; - delcells "fence"; - if (FIGHT_TRAINING >= 1) - end; - set FIGHT_TRAINING, 1; - end; - -JobIsDone: - mes "Well done, you should talk to \"" + $@NPCNEXTNAME$ + "\"..."; - close; - - -// ----- DEBUG START ! ----- - -debug_it: - mes "DEBUG INFO"; - mes "- CharVariable:FIGHT_TRAINING "+ FIGHT_TRAINING; - mes "- maxWaves "+ $@MAX_WAVES; - mes "- currentWave "+ $@CURRENT_WAVE_LEVEL; - mes "- npcName "+ $@NPCNAME$; - mes "- mobName "+ $@MOB_NAME$; - mes "- mobID "+ $@MOB_ID; - close; - -resetVar: - set FIGHT_TRAINING , 0; -// ----- DEBUG END ! ----- - - -OnInit: - end; - -} diff --git a/npc/commands/debug-quest.txt b/npc/commands/debug-quest.txt index 96a8e290..34bdf63b 100644 --- a/npc/commands/debug-quest.txt +++ b/npc/commands/debug-quest.txt @@ -80,7 +80,8 @@ function script GlobalQuestDebug { "Fexil", ArtisQuests_Fexil, "Lloyd", ArtisQuests_Lloyd, l("Mona's dad"), ArtisQuests_MonaDad, - l("Artis legion progress"), Artis_Legion_Progress; + l("Artis legion progress"), Artis_Legion_Progress, + l("Legion training"), ArtisQuests_TrainingLegion; switch (@menuret) { diff --git a/npc/functions/quest-debug/034-ArtisQuests_TrainingLegion.txt b/npc/functions/quest-debug/034-ArtisQuests_TrainingLegion.txt new file mode 100644 index 00000000..ba72fd07 --- /dev/null +++ b/npc/functions/quest-debug/034-ArtisQuests_TrainingLegion.txt @@ -0,0 +1,28 @@ +// Training Legion quest +// Authors: +// omatt + +function script QuestDebug34 { + do + { + clear; + setnpcdialogtitle l("Quest debug"); + mes "ArtisQuests_TrainingLegion"; + mes "---"; + mes l("Quest state: @@", getq(ArtisQuests_TrainingLegion)); + next; + + GenericQuestDebug ArtisQuests_TrainingLegion, + l("Does not have the quest"), 0, + l("Finished sword training"), 1, + l("Finished bow training"), 2, + l("Both sword and bow training are finished"), 3, + l("Skill training finished, end of quest"), 4; + + if (@menuret < 0) + { + return; + } + + } while (1); +} diff --git a/npc/scripts.conf b/npc/scripts.conf index ca2bf288..74e0f0e0 100644 --- a/npc/scripts.conf +++ b/npc/scripts.conf @@ -86,7 +86,7 @@ "npc/functions/quest-debug/031-General_Janus.txt", "npc/functions/quest-debug/032-ArtisQuests_MonaDad.txt", "npc/functions/quest-debug/033-Artis_Legion_Progress.txt", -// 034: ??? +"npc/functions/quest-debug/034-ArtisQuests_TrainingLegion.txt", // 035: ??? "npc/functions/quest-debug/036-HurnscaldQuests_Hinnak.txt", "npc/functions/quest-debug/037-HurnscaldQuests_Soup.txt", |