summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoams <toams85@gmail.com>2019-04-14 21:06:58 +0200
committertoams <toams85@gmail.com>2019-04-14 21:25:49 +0200
commit006218ce0e009055ce9919240c7379b6644fc18d (patch)
tree21109a2555a536aef3aa216346ad60d8850a215e
parent180d19b1883a16977784934ce88ca5396b2473e3 (diff)
downloadserverdata-006218ce0e009055ce9919240c7379b6644fc18d.tar.gz
serverdata-006218ce0e009055ce9919240c7379b6644fc18d.tar.bz2
serverdata-006218ce0e009055ce9919240c7379b6644fc18d.tar.xz
serverdata-006218ce0e009055ce9919240c7379b6644fc18d.zip
first fully functional version after rewrite.
-rw-r--r--db/re/item_db.conf8
-rw-r--r--maps/re/001-1.mcachebin3191 -> 3198 bytes
-rw-r--r--maps/re/008-1.mcachebin6880 -> 6897 bytes
-rw-r--r--maps/re/008-3-0.mcachebin2584 -> 2603 bytes
-rw-r--r--npc/001-2-34/doors.txt4
-rw-r--r--npc/001-2-36/hector.txt329
-rw-r--r--npc/001-3-0/_warps.txt2
-rw-r--r--npc/008-1-1/_mobs.txt52
-rw-r--r--npc/commands/debug-quest.txt2
-rw-r--r--npc/functions/quest-debug/034-ArtisQuests_TrainingLegion.txt10
10 files changed, 229 insertions, 178 deletions
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/maps/re/001-1.mcache b/maps/re/001-1.mcache
index 7795236e..6ce64adc 100644
--- a/maps/re/001-1.mcache
+++ b/maps/re/001-1.mcache
Binary files differ
diff --git a/maps/re/008-1.mcache b/maps/re/008-1.mcache
index bd439b3c..6938421a 100644
--- a/maps/re/008-1.mcache
+++ b/maps/re/008-1.mcache
Binary files differ
diff --git a/maps/re/008-3-0.mcache b/maps/re/008-3-0.mcache
index 9e1e9179..5a291c6f 100644
--- a/maps/re/008-3-0.mcache
+++ b/maps/re/008-3-0.mcache
Binary files differ
diff --git a/npc/001-2-34/doors.txt b/npc/001-2-34/doors.txt
index e9d9e395..d53dfc82 100644
--- a/npc/001-2-34/doors.txt
+++ b/npc/001-2-34/doors.txt
@@ -17,7 +17,7 @@ OnTouch:
warp(.@CharID+.@trainingMap$, 36, 30);
end;
}
-
+
// else create new instance
.instid = instance_create("training@instance", getcharid(CHAR_ID_ACCOUNT), IOT_CHAR);
if (.instid < 0)
@@ -32,7 +32,7 @@ OnTouch:
debugmes "Error: instance attach map error";
end;
}
-
+
instance_set_timeout(1000000, 1000000, .instid);
instance_init(.instid);
diff --git a/npc/001-2-36/hector.txt b/npc/001-2-36/hector.txt
index c82d1eef..bca2bea5 100644
--- a/npc/001-2-36/hector.txt
+++ b/npc/001-2-36/hector.txt
@@ -2,36 +2,37 @@
// Author:
// jak1
// omatt
+// toams
// Story:
// Reid
// Teru
// Spellchecking & Dialogs:
// Reid
+// toams
// Variable:
// 'fightingActive
-// 0 = no wave, end of timer or end of waves
-// 1 = waves activated, then fence block escape to player
+// 0 = no fight active
+// 1 = swordfight active
+// 2 = bowfight active
+// 3 = skillfight
// ArtisQuests_TrainingLegion
// 0 not started at all
-// 1 start first waves got sword
-// 2 got bow
-// 3 second wave
-// 4 got skill
-// 5 third wave
-// 6 end of training
+// 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
-// 3 1107 dummy for bow wave
-// 5 1106 dummy for skill 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 in basiControl few tips are not enough related to recent change of game
+// TODO replace basicControl with GameRules()/@tutorial see !166
001-2-36,32,36,0 script Hector#001-2-36 NPC_LUCAS,{
- 'currentWaveLevel = 1;
'instanceID = instance_id();
'npcName$ = strnpcinfo(NPC_NAME_UNIQUE); // required for call the label in the npc of this one instance
@@ -133,43 +134,72 @@
function waveEnded {
- npctalk3("Con. u finished it...");
+ 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);
+ }
- delcells("training_fence"+'npcName$);
+ 'currentWaveLevel = 1;
'fightingActive = 0;
'mobDead = 0;
-
- setq(.quest_training, getq(.quest_training) + 1);
-
end;
}
function mobSpawn {
- if ('fightingActive == 1)
+ if ('fightingActive != 0)
{
if ('currentWaveLevel == .maxWaves)
{
- npctalk3("Last Wave!");
+ npctalk3(l("Last Wave!"));
}
else
{
- npctalk3("Wave " + 'currentWaveLevel + "!");
+ npctalk3(l("Wave " + 'currentWaveLevel + "!"));
}
areamonster('map$, .mobCoordinate[0], .mobCoordinate[1], .mobCoordinate[2], .mobCoordinate[3],
/* map x1 y1 x2 y2 */
- .mobName$, .mobID['trainingQuest], 'currentWaveLevel, 'npcName$+"::OnTrainingMobDead");
+ .mobName$, .mobID['fightingActive], 'currentWaveLevel, 'npcName$+"::OnTrainingMobDead");
/* mob display mob id amount label */
}
- else
- {
- 'currentWaveLevel = 0;
- }
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
@@ -179,17 +209,29 @@
waveEnded;
}
- // here check if the player don't use the sword of training and are in wave of sword training
- if (getequipid(EQI_HAND_R) != .sword && getq(.quest_training) == 1)
+ // check for sword in swordtraining
+ if (getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) != W_1HSWORD && 'fightingActive == 1)
{
- npctalk3("Hey ! I gave you a sword no ? Equip it now !");
- sleep2(3000);
- npctalk3("Well...");
- sleep2(1000);
+ 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 )
+ {
+ 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 (getq(.quest_training) == 5 && 'currentWaveLevel == 1)
+ if ('fightingActive == 3 && 'currentWaveLevel == 1)
{
setcamnpc(strnpcinfo(NPC_NAME_UNIQUE)); // focus the npc when he talk to the player
speech(4,
@@ -209,151 +251,187 @@
mobSpawn;
}
- function waitFight {
+ function trainingActive {
speech(6,
- l("Then? Are you ready for some training? Don't be shy and attack my dummys!"));
+ l("Don't be shy and attack the dummies!"));
- askyesno;
- if (@menu == 2)
- {
- closedialog;
- end;
}
- }
- function firstTraining {
+ function swordTraining {
speech(6,
- l("You seem weak, lemme training you !"),
- l("But, first you have to see what weapon you prefer..."),
- l("Let's give a try, i have 3 type of weapon for you, after you can make a proper choice."));
- setq(.quest_training, 1);
-
- inventoryplace(.sword, 1);
- getitem(.sword, 1);
+ 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! Do it now or come back later."));
+ end;
+ }
speech(10,
- l("A beautiful sword, no?"),
- l("It's time to use this sword, i call a dummy for you, @@ waves of dummy, kill them and we see what weapon we can try after.", .maxWaves),
- l("Ready ?"));
+ 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 == 2)
+ if (@menu == ASK_NO)
{
closedialog;
end;
}
+ 'fightingActive = 1;
}
- function secondTraining {
-
+ function bowTraining {
speech(6,
- l("Ok, now you have mastered the sword, let's try to bow !"));
- setq(.quest_training, 3);
+ l("So you chose the bow for this training, make sure to equip it or we can't start."));
- inventoryplace(.bow, 2);
- getitem(.bow, 1);
- getitem(.arrow, 300);
+ if (getiteminfo(getequipid(EQI_HAND_R), ITEMINFO_SUBTYPE) != W_BOW)
+ {
+ speech(6,
+ l("I told you to equip a bow! Do it now or come back later."));
+ end;
+ }
speech(10,
- l("Not bad bow, no?"),
- l("You know the system of my training, now. Prepare yourself for the fight against dummy!"),
- l("Fight with a bow is not a close fight, use your range for kill them."),
- l("Ready ?"));
+ 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 == 2)
+ if (@menu == ASK_NO)
{
closedialog;
end;
}
+ 'fightingActive = 2;
}
- function thirdTraining {
-
- speech(6,
- l("Then, you know how to use a sword and a bow."),
- l("the last weapon is a skill!"));
- setq(.quest_training, 5);
+ function skillTraining {
// give SM_BASH skill
skill(.skill_name, 1, 0);
speech(10,
- l("@@ waves of dummys, you know how that end.", .maxWaves),
- l("Ready ?"));
+ l("@@ waves of dummies, you know how that ends.", .maxWaves),
+ l("Ready?"));
askyesno;
- if (@menu == 2)
+ if (@menu == ASK_NO)
{
closedialog;
end;
}
+ 'fightingActive = 3;
}
- function trainingStart {
+ function checkCombatZone {
- switch (getq(.quest_training))
- {
- case 0: firstTraining; break;
- case 1: waitFight; break;
- case 2: secondTraining; break;
- case 3: waitFight; break;
- case 4: thirdTraining; break;
- case 5: waitFight; break;
- default:
- speech(6, l("It's all for my job, i learned all i know. Now try to use your brain and be a wonderful member of Legion"));
- closedialog;
- end;
- }
+ getmapxy('map$, @x, @y, 0);
+ if (@x < 24 || @x > 32 || @y < 33 || @y > 43)
+ return 1;
+ return 0;
+ }
- closedialog;
+ function trainingStart {
- getmapxy('map$, @x, @y, 0);
- if (@x < 24 || @x > 32 || @y < 33 || @y > 43)
+ if (checkCombatZone())
{
- speech(1, l("Please enter the combat zone on the left."));
-
+ npctalk3(l("Please enter the combat zone on the left."));
closedialog;
end;
}
-
- // the fence for block the player to leave the training, here mask 3 for water
- setcells('map$, 33, 35, 33, 38, 3, "training_fence"+'npcName$);
+ 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; mes("left 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. TODO: explain this skill and how to use it"));
+
+ 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"));
- 'trainingQuest = getq(.quest_training); // required for spawn the good one mob
- 'fightingActive = 1;
-
mobSpawn;
+ }
}
function firstCheck {
- // here different messages, when the player are in fight and talk to npc, message is realted to the state fo quest
- if ('fightingActive)
+ // 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 (getq(.quest_training))
+ switch ('fightingActive)
{
- case 1: npctalk3("Attack with your sword, and kill them!"); end;
- case 3: npctalk3("Use your bow, and kill them!"); end;
- case 5: npctalk3("You have a skill, use it for kill them! If your spell point are too low for use the skill, use the mana potion what i gave you."); end;
+ 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
- speech(5,
- l(.mockingGreeting$[rand(getarraysize(.mockingGreeting$))]),
- l("Do you want some training ? To be honnest, it seem that you need..."));
+ switch (getq(.quest_training))
+ {
+ case 0: speech(5,
+ l(.mockingGreeting$[rand(getarraysize(.mockingGreeting$))]),
+ l("Do you want some training? To be honest, it seems 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("Yeah, I like to want training 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("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)
{
@@ -361,38 +439,40 @@
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 good player, who can use a sword, a bow, and a skill."),
- l("For this, i give you weapons of you need."),
- l("Then i call few dummy, use what i learned you on them."));
+ 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:
- .arrow = TrainingArrow;
- .bow = WoodenBow;
- .sword = WoodenSword;
.mana_potion = Croconut; // here need to change the potion
.skill_name = SM_BASH;
.quest_training = ArtisQuests_TrainingLegion;
@@ -400,11 +480,20 @@ OnInit:
.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, 0, 1107, 0, 1106; // mob id, in array because change for different state of quest
+ 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-3-0/_warps.txt b/npc/001-3-0/_warps.txt
index 65b56ff5..d192e4ef 100644
--- a/npc/001-3-0/_warps.txt
+++ b/npc/001-3-0/_warps.txt
@@ -3,6 +3,6 @@
001-3-0,196,35,0 warp #001-3-0_196_35 0,0,001-1,197,35
001-3-0,172,41,0 warp #001-3-0_172_41 0,0,001-3-1,34,58
001-3-0,162,40,0 warp #001-3-0_162_40 0,0,001-3-1,23,57
-001-3-0,198,61,0 warp #001-3-0_198_61 0,0,001-1,199,61
+001-3-0,198,60,0 warp #001-3-0_198_60 0,0,001-1,199,61
001-3-0,152,55,0 warp #001-3-0_152_55 0,0,001-1,152,51
001-3-0,85,130,0 warp #001-3-0_85_130 0,0,001-1,86,130
diff --git a/npc/008-1-1/_mobs.txt b/npc/008-1-1/_mobs.txt
index a34ccc1c..4bb14ace 100644
--- a/npc/008-1-1/_mobs.txt
+++ b/npc/008-1-1/_mobs.txt
@@ -20,47 +20,11 @@
008-1-1,68,29,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,94,41,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,94,38,0,0 monster Blue Rose 1061,1,20000,15000
-008-1-1,94,48,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,93,45,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,93,39,0,0 monster Blue Rose 1061,1,20000,15000
-008-1-1,94,39,0,0 monster Blue Rose 1061,1,20000,15000
-008-1-1,95,39,0,0 monster Blue Rose 1061,1,20000,15000
-008-1-1,94,40,0,0 monster Blue Rose 1061,1,20000,15000
-008-1-1,93,42,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,94,42,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,94,43,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,95,42,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,96,42,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,96,41,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,97,42,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,97,43,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,98,42,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,99,42,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,99,41,0,0 monster Yellow Tulip 1059,1,20000,15000
-008-1-1,94,45,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,94,46,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,95,45,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,95,44,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,96,45,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,97,45,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,97,46,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,97,44,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,98,45,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,99,45,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,98,46,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,95,46,0,0 monster Red Rose 1062,1,20000,15000
-008-1-1,93,48,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,94,47,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,95,48,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,96,48,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,96,47,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,97,48,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,98,48,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,98,47,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,99,48,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,98,49,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,97,49,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,95,49,0,0 monster Yellow Rose 1060,1,20000,15000
-008-1-1,94,49,0,0 monster Yellow Rose 1060,1,20000,15000
+008-1-1,94,39,0,0 monster Blue Rose 1061,1,250000,100000
+008-1-1,98,42,0,0 monster Yellow Tulip 1059,1,180000,85000
+008-1-1,95,45,0,0 monster Red Rose 1062,1,210000,95000
+008-1-1,98,48,0,0 monster Yellow Rose 1060,1,195000,65000
+008-1-1,95,43,0,0 monster Yellow Tulip 1059,1,180000,85000
+008-1-1,97,46,0,0 monster Red Rose 1062,1,210000,95000
+008-1-1,96,49,0,0 monster Yellow Rose 1060,1,195000,65000
+008-1-1,93,48,0,0 monster Yellow Rose 1060,1,195000,65000
diff --git a/npc/commands/debug-quest.txt b/npc/commands/debug-quest.txt
index 52854883..ee2b3a3d 100644
--- a/npc/commands/debug-quest.txt
+++ b/npc/commands/debug-quest.txt
@@ -81,7 +81,7 @@ function script GlobalQuestDebug {
"Lloyd", ArtisQuests_Lloyd,
l("Mona's dad"), ArtisQuests_MonaDad,
l("Artis legion progress"), Artis_Legion_Progress,
- l("Training legion"), ArtisQuests_TrainingLegion;
+ 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
index cecd6725..ba72fd07 100644
--- a/npc/functions/quest-debug/034-ArtisQuests_TrainingLegion.txt
+++ b/npc/functions/quest-debug/034-ArtisQuests_TrainingLegion.txt
@@ -14,12 +14,10 @@ function script QuestDebug34 {
GenericQuestDebug ArtisQuests_TrainingLegion,
l("Does not have the quest"), 0,
- l("Start first waves got sword"), 1,
- l("Got bow"), 2,
- l("Second wave"), 3,
- l("Got skill"), 4,
- l("Third wave"), 5,
- l("End of training"), 6;
+ 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)
{