summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2021-04-14 17:31:15 -0300
committerJesusaves <cpntb1@ymail.com>2021-04-14 17:31:15 -0300
commit721b6d2f39bbddd228d534114ea0ba8393990ffa (patch)
treebb11d05a3f147987f2120d7f4d7e1a577bdcfa99
parent9ac3aa578729997fa7a7714ec8d783e9966669a0 (diff)
downloadserverdata-721b6d2f39bbddd228d534114ea0ba8393990ffa.tar.gz
serverdata-721b6d2f39bbddd228d534114ea0ba8393990ffa.tar.bz2
serverdata-721b6d2f39bbddd228d534114ea0ba8393990ffa.tar.xz
serverdata-721b6d2f39bbddd228d534114ea0ba8393990ffa.zip
Implement the second tier summoning magic (Astral and Dark)
Kalakarenk, Kalboo, Kalgina, Kalrenk, Halhiss and Helorp. Update Sagatha, Pauline and Waric on the way.
-rw-r--r--db/pre-re/skill_db.conf122
-rw-r--r--db/pre-re/skill_tree.conf6
-rw-r--r--npc/001-2/pauline.txt167
-rw-r--r--npc/013-1/sagatha.txt22
-rw-r--r--npc/017-4/waric.txt138
-rw-r--r--npc/magic/config.txt2
-rw-r--r--npc/magic/final.txt152
-rw-r--r--npc/magic/level1-grow-plants.txt1
-rw-r--r--npc/magic/level2-summon-monsters.txt53
-rw-r--r--npc/scripts.conf1
10 files changed, 337 insertions, 327 deletions
diff --git a/db/pre-re/skill_db.conf b/db/pre-re/skill_db.conf
index bbbe02b9..a5e6d359 100644
--- a/db/pre-re/skill_db.conf
+++ b/db/pre-re/skill_db.conf
@@ -38816,6 +38816,126 @@ skill_db: (
SPCost: 10
}
},
-// MagicBlade Sulphur Kalmurk Parum ArrowHail Barrier(OK?) EnchantLifestone FlyingBackpack(?) Joyplim Hide(?) Rain Ingrav Knuclkes MakeArrow MakeIronPowder MakeShirt MakeTanktop MakeSTanktop Protect Shear SFluffy SMouboo SPinkie SSnake SSPiky SWicked ToxicDart Necro
+{
+ Id: 20031
+ Name: "SKILL_KALAKARENK"
+ Description: "Kalakarenk"
+ MaxLevel: 9
+ SkillType: {
+ Self: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ CoolDown: 20000
+ Requirements: {
+ SPCost: 39
+ Items: {
+ Root: 0
+ WhiteFur: 0
+ }
+ }
+},
+{
+ Id: 20032
+ Name: "SKILL_KALBOO"
+ Description: "Kalboo"
+ MaxLevel: 9
+ SkillType: {
+ Self: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ CoolDown: 20000
+ Requirements: {
+ SPCost: 35
+ Items: {
+ Root: 0
+ MoubooFigurine: 0
+ }
+ }
+},
+{
+ Id: 20033
+ Name: "SKILL_KALGINA"
+ Description: "Kalgina"
+ MaxLevel: 9
+ SkillType: {
+ Self: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ CoolDown: 20000
+ Requirements: {
+ SPCost: 35
+ Items: {
+ Root: 0
+ PinkAntenna: 0
+ }
+ }
+},
+{
+ Id: 20034
+ Name: "SKILL_KALRENK"
+ Description: "Kalrenk"
+ MaxLevel: 9
+ SkillType: {
+ Self: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ CoolDown: 20000
+ Requirements: {
+ SPCost: 33
+ Items: {
+ Root: 0
+ HardSpike: 0
+ }
+ }
+},
+{
+ Id: 20035
+ Name: "SKILL_HALHISS"
+ Description: "Halhiss"
+ MaxLevel: 9
+ SkillType: {
+ Self: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ CoolDown: 15000
+ Requirements: {
+ SPCost: 40
+ Items: {
+ DarkCrystal: 0
+ SnakeEgg: 0
+ }
+ }
+},
+{
+ Id: 20036
+ Name: "SKILL_HELORP"
+ Description: "Helorp"
+ MaxLevel: 9
+ SkillType: {
+ Self: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ CoolDown: 15000
+ Requirements: {
+ SPCost: 35
+ Items: {
+ DarkCrystal: 0
+ SmallMushroom: 0
+ }
+ }
+},
+// MagicBlade Sulphur Kalmurk Parum ArrowHail Barrier(OK?) EnchantLifestone FlyingBackpack(?) Joyplim Hide(?) Rain Ingrav Knuclkes MakeArrow MakeIronPowder MakeShirt MakeTanktop MakeSTanktop Protect Shear SFluffy SMouboo SPinkie SSnake SSPiky SWicked ToxicDart
)
diff --git a/db/pre-re/skill_tree.conf b/db/pre-re/skill_tree.conf
index 87c3654e..d7e4bd33 100644
--- a/db/pre-re/skill_tree.conf
+++ b/db/pre-re/skill_tree.conf
@@ -79,6 +79,12 @@ Talpan: {
// Level 2
EVOL_PHYSICAL_SHIELD: 5
SKILL_INMA: 9
+ SKILL_KALAKARENK: 9
+ SKILL_KALBOO: 9
+ SKILL_KALGINA: 9
+ SKILL_KALRENK: 9
+ SKILL_HALHISS: 9
+ SKILL_HELORP: 9
// Level 3
// Level 4
diff --git a/npc/001-2/pauline.txt b/npc/001-2/pauline.txt
index 9ec35396..992a371a 100644
--- a/npc/001-2/pauline.txt
+++ b/npc/001-2/pauline.txt
@@ -16,14 +16,14 @@
if (getskilllv(SKILL_MAGIC_ASTRAL) > 0)
goto L_Magic;
- mes "[Pauline]";
+ mesn;
mes "\"I've mastered several schools of magic and fought the Yeti in Kaizei.\"";
next;
mes "\"The path of magic is a long and difficult one.\"";
goto L_close;
L_Magic:
- mes "[Pauline]";
+ mesn;
mes "\"Ah. I see you are skilled in the Art of Astral Magic.\"";
mes "\"Who taught you?\"";
menu
@@ -38,7 +38,7 @@ L_Next:
"No, thanks.", L_close;
L_Sagatha:
- mes "[Pauline]";
+ mesn;
mes "\"Ah, that Witch!\"";
mes "\"Very well.\"";
next;
@@ -49,7 +49,7 @@ L_Sagatha:
"No.", L_close;
L_Back:
- mes "[Pauline]";
+ mesn;
mes "\"So, you're back. Are you ready to share knowledge now?\"";
menu
"Yes.", L_Spells,
@@ -58,7 +58,7 @@ L_Back:
L_Spells:
@pauline_state = 1;
callsub S_Update_Mask;
- mes "[Pauline]";
+ mesn;
mes "\"Okay.\"";
mes "\"Not long ago I discovered some new caves near Tulimshar. In an abandond chamber I found some paintings on the wall.\"";
next;
@@ -73,22 +73,22 @@ L_Spells:
"No, tell me more.", L_Next1;
L_Next1:
- mes "[Pauline]";
+ mesn;
mes "\"Well I could only read the invocations. So I don't exactly know what kind of ingredients you are going to need.\"";
- mes "\"The first one for the mouboo was " + get(.invocation$, "smmouboo") + " and the one for the pinkie was " + get(.invocation$, "smpinkie") +".\"";
+ mesq l("\"The first one for the mouboo was %s and the one for the pinkie was %s.", b("Kalboo"), b("Kalgina"));
next;
mes "\"For the pinkie spell my suggestion is to try similar ingredients to the other Astral spells. Try a root and some item typical for pinkies.\"";
mes "\"The mouboo spell might be more complicated. From what I could translate, one of the spell components is crafted by magic.\"";
next;
mes "\"When you find the right ingredients, come back and bring them to me to try those spells out.\"";
next;
- mes "\"Goodbye.\"";
+ mesq l("Goodbye.");
@pauline_state = 2;
callsub S_Update_Mask;
goto L_close;
L_Ingredients:
- mes "[Pauline]";
+ mesn;
mes "\"Hello, have you found out what ingredients to use yet?\"";
menu
"Yes.", L_KnowIngredientsMouboo,
@@ -105,149 +105,108 @@ L_KnowIngredientsMouboo:
"No.", L_ComeBackLater;
L_Next3:
- cleararray @items$, "", getarraysize(@items$);
- cleararray @item_names$, "", getarraysize(@item_names$);
- setarray @items$, "AlizarinHerb", "GambogeHerb", "SilkCocoon", "PinkAntenna", "MaggotSlime", "BugLeg", "GrassSeeds", "ReedBundle", "RoastedAcorn", "Candy", "Milk", "BottleOfWater", "ChickenLeg", "Steak", "Root", "RawLog", "Beer", "CactusDrink", "MoubooFigurine", "Acorn", "Iten", "WarpedLog";
- setarray @item_names$, "Alizarin Herb", "Gamboge Herb", "Silk Cocoon", "Pink Antenna", "Maggot Slime", "Bug Leg", "Grass Seeds", "Reed Bundle", "Roasted Acorn", "Candy", "Milk", "Bottle of Water", "Chicken Leg", "Steak", "Root", "Raw Log", "Beer", "Cactus Drink", "Mouboo Figurine", "Acorn", "Iten", "Warped Log";
- mes "\"Then tell me the ingredients for the mouboo summoning spell and give them to me. Start with the first ingredient and then tell me the second one separately.\"";
+ mesq l("Then tell me the ingredients for the mouboo summoning spell and give them to me. Start with the first ingredient and then tell me the second one separately.");
+ mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
next;
- callfunc "DynamicItemMenu$";
- @pauline_ingredient1$ = @item$;
- mes "Next ingredient.";
- callfunc "DynamicItemMenu$";
- @pauline_ingredient2$ = @item$;
- if (@pauline_ingredient1$ == "")
- goto L_Wrong;
- if (@pauline_ingredient2$ == "")
+ .@it1 = requestitem();
+ mes l("Next ingredient.");
+ mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
+ .@it2 = requestitem();
+
+ if (.@it1 < 1 || .@it2 < 1)
goto L_Wrong;
- if (countitem(@pauline_ingredient1$) < 1)
- goto L_NotEnough;
- if (countitem(@pauline_ingredient2$) < 1)
+ if (countitem(.@it1) < 1 || countitem(.@it2) < 1)
goto L_NotEnough;
- mes "\"Do you want to give me these items?\"";
+ mesq l("Do you want to give me these items?");
menu
- "No.", L_ComeBackLater,
- "Yes.", L_Next4;
+ l("No."), L_ComeBackLater,
+ l("Yes."), L_Next4;
L_Next4:
- delitem @pauline_ingredient1$, 1;
- delitem @pauline_ingredient2$, 1;
- mes "\"Okay let me try this.\"";
- if (@pauline_ingredient1$ == "Root")
- goto L_Pass1Mouboo;
- if (@pauline_ingredient1$ == "MoubooFigurine")
- goto L_Pass2Mouboo;
- goto L_DidNotWorkMouboo;
-
-L_DidNotWorkMouboo:
- mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-mouboo") + ".";
- mes "Nothing happens.";
- mes "[Pauline]";
- mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\"";
- goto L_close;
-
-L_Pass1Mouboo:
- if (@pauline_ingredient2$ == "MoubooFigurine")
+ delitem .@it1, 1;
+ delitem .@it2, 1;
+ mesq l("Okay let me try this.");
+ if ((.@it1 == Root && .@it2 == MoubooFigurine) ||
+ (.@it1 == MoubooFigurine && .@it2 == Root))
goto L_TrySpellMouboo;
- goto L_DidNotWorkMouboo;
-L_Pass2Mouboo:
- if (@pauline_ingredient2$ == "Root")
- goto L_TrySpellMouboo;
- goto L_DidNotWorkMouboo;
+ mesc l("The Witch takes %s and %s and put them togheter calling %s.", getitemlink(.@it1), getitemlink(.@it2), b("kalboo"));
+ mesc l("Nothing happens.");
+ mesn;
+ mesq l("It seems you did not tell me the correct ingredients. Come back when you find the correct ones.");
+ goto L_close;
L_TrySpellMouboo:
- mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-mouboo") + ".";
- monster "001-1", 55,68, "Good", 1028, 1;
- mes "[Pauline]";
- mes "\"It worked!\"";
+ mesc l("The Witch takes %s and %s and put them togheter calling %s.", getitemlink(.@it1), getitemlink(.@it2), b("kalboo"));
+ monster "001-1", 55,68, "Good", Mouboo, 1;
+ mesn;
+ mesq l("It worked!");
@pauline_state = 3;
callsub S_Update_Mask;
getexp @pauline_REWARD, 0;
goto L_close;
L_KnowIngredientsPinkie:
- cleararray @items$, "", getarraysize(@items$);
- cleararray @item_names$, "", getarraysize(@item_names$);
- setarray @items$, "AlizarinHerb", "GambogeHerb", "SilkCocoon", "PinkAntenna", "MaggotSlime", "BugLeg", "GrassSeeds", "ReedBundle", "RoastedAcorn", "Candy", "Milk", "BottleOfWater", "ChickenLeg", "Steak", "Root", "RawLog", "Beer", "CactusDrink", "MoubooFigurine", "Acorn", "Iten", "WarpedLog";
- setarray @item_names$, "Alizarin Herb", "Gamboge Herb", "Silk Cocoon", "Pink Antenna", "Maggot Slime", "Bug Leg", "Grass Seeds", "Reed Bundle", "Roasted Acorn", "Candy", "Milk", "Bottle of Water", "Chicken Leg", "Steak", "Root", "Raw Log", "Beer", "Cactus Drink", "Mouboo Figurine", "Acorn", "Iten", "Warped Log";
- mes "[Pauline]";
- mes "\"Now give me the ingredients for the pinkie spell.\"";
+ mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
next;
- callfunc "DynamicItemMenu$";
- @pauline_ingredient1$ = @item$;
- mes "Next ingredient.";
- callfunc "DynamicItemMenu$";
- @pauline_ingredient2$ = @item$;
- if (@pauline_ingredient1$ == "")
- goto L_Wrong;
- if (@pauline_ingredient2$ == "")
+ .@it1 = requestitem();
+ mes l("Next ingredient.");
+ mes "##B" + l("Drag and drop an item from your inventory.") + "##b";
+ .@it2 = requestitem();
+
+ if (.@it1 < 1 || .@it2 < 1)
goto L_Wrong;
- if (countitem(@pauline_ingredient1$) < 1)
- goto L_NotEnough;
- if (countitem(@pauline_ingredient2$) < 1)
+ if (countitem(.@it1) < 1 || countitem(.@it2) < 1)
goto L_NotEnough;
- mes "\"Do you want to give me these items?\"";
+ mesq l("Do you want to give me these items?");
menu
"No.", L_ComeBackLater,
"Yes.", L_Next5;
L_Next5:
- delitem @pauline_ingredient1$, 1;
- delitem @pauline_ingredient2$, 1;
- mes "\"Okay, let me try this.\"";
- if (@pauline_ingredient1$ == "Root")
- goto L_Pass1Pinkie;
- if (@pauline_ingredient1$ == "PinkAntenna")
- goto L_Pass2Pinkie;
- goto L_DidNotWorkPinkie;
-
-L_DidNotWorkPinkie:
- mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-pinkie") + ".";
- mes "Nothing happens.";
- mes "[Pauline]";
- mes "\"It seems you did not tell me the correct ingredients. Come back when you find the correct ones.\"";
- goto L_close;
-
-L_Pass1Pinkie:
- if (@pauline_ingredient2$ == "PinkAntenna")
+ delitem .@it1, 1;
+ delitem .@it2, 1;
+ mesq l("Okay let me try this.");
+ if ((.@it1 == Root && .@it2 == PinkAntenna) ||
+ (.@it1 == PinkAntenna && .@it2 == Root))
goto L_TrySpellPinkie;
- goto L_DidNotWorkPinkie;
-L_Pass2Pinkie:
- if (@pauline_ingredient2$ == "Root")
- goto L_TrySpellPinkie;
- goto L_DidNotWorkPinkie;
+ mesc l("The Witch takes %s and %s and put them togheter calling %s.", getitemlink(.@it1), getitemlink(.@it2), b("kalgina"));
+ mesc l("Nothing happens.");
+ mesn;
+ mesq l("It seems you did not tell me the correct ingredients. Come back when you find the correct ones.");
+ goto L_close;
+
L_TrySpellPinkie:
- mes "The Witch takes " + @pauline_ingredient1$ + " and " + @pauline_ingredient2$ + " and puts them together calling " + get(.invocation$, "summon-pinkie") + ".";
- monster "001-1", 54,68, "Good", 1018, 1;
- mes "[Pauline]";
- mes "\"It worked!\"";
+ mesc l("The Witch takes %s and %s and put them togheter calling %s.", getitemlink(.@it1), getitemlink(.@it2), b("kalgina"));
+ monster "001-1", 54,68, "Good", Pinkie, 1;
+ mesn;
+ mesq l("It worked!");
@pauline_state = 4;
callsub S_Update_Mask;
getexp @pauline_REWARD, 0;
goto L_close;
L_MoreMagic:
- mes "[Pauline]";
+ mesn;
mes "\"Thanks for telling me the ingredients. As soon as I find out more about those wall paintings I will let you know.\"";
goto L_close;
L_Wrong:
mes "The Witch looks at you and snorts.";
- mes "[Pauline]";
+ mesn;
mes "\"You told me the wrong ingredients. Come back as soon as you know the correct ones.\"";
goto L_close;
L_NotEnough:
- mes "[Pauline]";
+ mesn;
mes "\"Hey, you don't have this with you!\"";
mes "\"Come back when you have the right ingredients.\"";
goto L_close;
L_ComeBackLater:
- mes "[Pauline]";
+ mesn;
mes "\"Then come back later.\"";
goto L_close;
diff --git a/npc/013-1/sagatha.txt b/npc/013-1/sagatha.txt
index c0251ebd..460dcb7f 100644
--- a/npc/013-1/sagatha.txt
+++ b/npc/013-1/sagatha.txt
@@ -257,27 +257,27 @@ L_Teach_N14:
mes "\"Some forest creatures sometimes overgrow their fur or hide. That makes them uncomfortable.\"";
next;
mesn .@n$;
- mes "\"You can help them with shearing magic. Press your hands together and say '" + get(.invocation$, "shear") + "'. Then touch them with your hands, and brush off any excess.\"";
+ mesq l("You can help them with shearing magic. Press your hands together and say '" + get(.invocation$, "shear") + "'. Then touch them with your hands, and brush off any excess.");
next;
mesn .@n$;
- mes "\"The spell is strong, so you only need to do this once. Be careful not to cut them. Some things they shed are useful. Often they will leave them to you as a thank-you.\"";
+ mesq l("The spell is strong, so you only need to do this once. Be careful not to cut them. Some things they shed are useful. Often they will leave them to you as a thank-you.");
goto L_practice;
L_Teach_N10:
if (@mexp < 150 || getskilllv(SKILL_MAGIC) < 2)
goto L_Teach_noexp;
mesn .@n$;
- mes "\"Next, a nature spell. Take a cocoon shell. Hold it in your hand. Feel its lightness.\"";
+ mesq l("Next, a nature spell. Take a cocoon shell. Hold it in your hand. Feel its lightness.");
next;
mesn .@n$;
- mes "\"Now whisper '" + get(.invocation$, "flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.\"";
+ mesq l("Now whisper '" + get(.invocation$, "flying-backpack") + "', and if your backpack was pressing on you you should no longer feel it now.");
goto L_practice;
L_Teach_A10:
if (@mexp < 180 || getskilllv(SKILL_MAGIC) < 2)
goto L_Teach_noexp;
mesn .@n$;
- mes "\"To protect against others' magic, take a small mushroom from a shady place. Mushrooms draw things out of the earth. Rub your mushroom into pieces between your hands.\"";
+ mesq l("To protect against others' magic, take a small mushroom from a shady place. Mushrooms draw things out of the earth. Rub your mushroom into pieces between your hands.");
next;
mesn .@n$;
mesq l("Then say %s and let the mushroom's power take over.", b("betsanc"));
@@ -288,10 +288,11 @@ L_Teach_A11:
if (@mexp < 200 || getskilllv(SKILL_MAGIC) < 2)
goto L_Teach_noexp;
mesn .@n$;
- mes "\"If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '" + get(.invocation$, "smsmushrooms") + "'. Then press the root to the ground.\"";
+ mesq l("If you must fight, call allies. You can call spiky mushrooms out of the ground with a mushroom spike and a root. Hold up the spike and call out to them: '%s'. Then press the root to the ground.", b("Kalrenk"));
+ learnskill SKILL_KALRENK;
next;
mesn .@n$;
- mes "\"Spiky mushrooms often grow too many spikes, so you can shear the spikes off of some.\"";
+ mesq l("Spiky mushrooms often grow too many spikes, so you can shear the spikes off of some.");
next;
goto L_practice;
@@ -299,7 +300,8 @@ L_Teach_A12:
if (@mexp < 220 || getskilllv(SKILL_MAGIC) < 2)
goto L_Teach_noexp;
mesn .@n$;
- mes "\"You can call fluffies, too. But for them you must call out '" + get(.invocation$, "smfluffies") + "' instead, with white fluffy fur instead of a spike. And don't forget the root.\"";
+ mesq l("You can call fluffies, too. But for them you must call out '%s' instead, with white fluffy fur instead of a spike. And don't forget the root.", b("Kalakarenk"));
+ learnskill SKILL_KALAKARENK;
goto L_practice;
L_Teach_N11:
@@ -310,12 +312,12 @@ L_Teach_N11:
learnskill EVOL_PHYSICAL_SHIELD;
next;
mesn .@n$;
- mes "\"You can also remove this spell from yourself if you say '" + get(.invocation$, "antiprotect") + "'.\"";
+ mesq l("You can also remove this spell from yourself if you say '" + get(.invocation$, "antiprotect") + "'.");
goto L_practice;
L_Teach_noexp:
mesn .@n$;
- mes "\"You must practice more first.\"";
+ mesq l("You must practice more first.");
next;
goto L_Main;
diff --git a/npc/017-4/waric.txt b/npc/017-4/waric.txt
index 637f4526..1f7db840 100644
--- a/npc/017-4/waric.txt
+++ b/npc/017-4/waric.txt
@@ -27,17 +27,17 @@
if (OrumQuest > 17) goto L_Flower1;
if (OrumQuest > 15) goto L_Mistrust;
- mes "[Waric]";
+ mesn;
mes "\"You! You really are far too persistent to know what is good for you!\"";
mes "He turns towards Orum.";
next;
- mes "[Waric]";
+ mesn;
mes "\"It seems your ridiculous Guarding Spirit has failed at his task.";
mes "Deal with this. We cannot afford any more of these distractions.\"";
goto L_close;
L_Mistrust:
- mes "[Waric]";
+ mesn;
mes "\"So, you say you want to help us? You do not look very competent.";
mes "Also, I do not see what motivation you have to help.\"";
next;
@@ -45,7 +45,7 @@ L_Mistrust:
goto L_close;
L_Flower1:
- mes "[Waric]";
+ mesn;
mes "\"You placed the first flower. Why, I am surprised! I did not expect you to actually stay and become useful.\"";
if (!(getskilllv(SKILL_MAGIC)))
goto L_close;
@@ -58,34 +58,34 @@ L_Next:
goto L_Sagatha;
if (!@killed_mouboo && !@cut_tree)
goto L_Undecided;
- mes "[Waric]";
+ mesn;
mes "\"Hmm. I suppose I could do that. You seem to have some potential.";
mes "First, proceed with the task given by Orum.\"";
goto L_close;
L_Flower2:
- mes "[Waric]";
+ mesn;
mes "\"You placed the second flower? It seems Orum's choice of tools is better than expected.\"";
goto L_close;
L_Flower3:
- mes "[Waric]";
+ mesn;
mes "\"I saw that you helped to create and place the third flower. Good.\"";
goto L_close;
L_Flower4:
- mes "[Waric]";
+ mesn;
mes "\"Now that you have placed the fourth flower, we are very close to reaching our goal. Keep it up.\"";
goto L_close;
L_Flower5:
- mes "[Waric]";
+ mesn;
mes "\"Hahaha, excellent. You handled the creation of our pentagram very well. I will be keeping that in mind.";
mes "I have advised Orum to give you a reward. Go now and speak with him.\"";
goto L_close;
L_DarkMagic:
- mes "[Waric]";
+ mesn;
mes "\"So, you have gotten your reward and finished the task Orum had for you. Very good.\"";
menu
"Can you teach me some magic?", L_Next1,
@@ -96,18 +96,18 @@ L_Next1:
goto L_Sagatha;
if (!@killed_mouboo && !@cut_tree)
goto L_Undecided;
- mes "[Waric]";
+ mesn;
mes "\"You appear to be trustworthy. I will allow you to become my apprentice.\"";
mes "\"I will teach you the basics of the branch of magic I practice. It is called Dark Magic. Very few people know of its existence these days, and hardly anyone is capable of teaching it.\"";
mes "\"You are very lucky that fate has brought us together.\"";
next;
- mes "[Waric]";
+ mesn;
mes "\"You cut the tree to please the Earth Spirit. You chose the Dark Side of magic, and this cannot be undone.\"";
mes "\"Dark Magic draws its power from hate and anger. Your magic will be stronger against good creatures, and weaker against the undead and the corrupt.\"";
next;
mes "\"Once you start practicing Dark Magic, using certain spells will be painful. Everything comes with a price.\"";
next;
- mes "[Waric]";
+ mesn;
mes "\"So, now that you know more about Dark Magic, are you still willing to become my apprentice?\"";
mes "\"Once you cross this line, there is no going back. Keep this in mind!\"";
OrumQuest = 33;
@@ -117,7 +117,7 @@ L_Next1:
L_DarkTalkAgain:
mes "The old wizard seems to be annoyed.";
- mes "[Waric]";
+ mesn;
mes "\"Very well. Once you start practicing Dark Magic, certain spells will be painful to cast. Your magic will be stronger against good creatures, and weaker against the undead and the corrupt.\"";
next;
mes "\"When you cross this line, there is no going back. Remember that!\"";
@@ -128,7 +128,7 @@ L_DarkTalkAgain:
"Yes. I want to be your apprentice.", L_Oath;
L_BackforOath:
- mes "[Waric]";
+ mesn;
mes "\"Ah, you're back. Have you decided yet if you want to become my apprentice?\"";
menu
"No." , L_ComeBackLater,
@@ -138,7 +138,7 @@ L_BackforOath:
L_LastChance:
mes "Waric looks at you, with despise evident on his face.";
next;
- mes "[Waric]";
+ mesn;
mes "\"I knew you were a coward.\"";
mes "\"I will give you one last chance to take the oath. If you refuse this time as well, I will no longer teach you.\"";
next;
@@ -149,7 +149,7 @@ L_LastChance:
"I have to reconsider.", L_ComeBackLater;
L_Next2:
- mes "[Waric]";
+ mesn;
mes "\"If you stop during the oath again, I will not teach you anything. If you are not sure whether you want to become my apprentice or not, take more time to reconsider. However, this is your last chance to do so.\"";
next;
menu
@@ -157,13 +157,13 @@ L_Next2:
"I am ready to take the oath. [last chance!]", L_Oath;
L_Oath:
- mes "[Waric]";
+ mesn;
mes "\"Now say the oath of the Dark.\"";
next;
mes "Suddenly the room turns darker and writing penned in flames appears in front of you. You feel yourself shaking and shivering.";
next;
mes "As Waric yells, the walls tremble.";
- mes "[Waric]";
+ mesn;
mes "\"Read it!\"";
mes "The sound of his voice echoes in the cave.";
next;
@@ -179,7 +179,7 @@ L_Oath:
mes "I shall prevail, other shall perish.";
next;
mes "Warric screams at your silence.";
- mes "[Waric]";
+ mesn;
mes "\"Say it! Say it now!\"";
next;
menu
@@ -209,26 +209,27 @@ L_NoOath:
goto L_close;
L_Mushroom:
- mes "[Waric]";
- mes "\"Now that you are a student of mine, I will teach you some spells.\"";
+ mesn;
+ mesq l("Now that you are a student of mine, I will teach you some spells.");
next;
- mes "\"We will start with an easy one. I will teach you how to summon a wicked mushroom.\"";
- mes "\"The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell " + get(.invocation$, "smwmushroom") +".\"";
+ mesq l("We will start with an easy one. I will teach you how to summon a wicked mushroom.");
+ mesq l("The spell consumes a Small Mushroom and a Dark Crystal. Shove the Dark Crystal into the Small Mushroom and yell %s.");
next;
- mes "\"A wicked mushroom will appear to fight for you.\"";
+ mesq l("A wicked mushroom will appear to fight for you. Usually.");
OrumQuest = 37;
+ learnskill SKILL_HELORP;
goto L_close;
L_ToxicDart:
- mes "[Waric]";
- mes "\"Welcome back, apprentice.\"";
- mes "\"Are you read for another spell?\"";
+ mesn;
+ mesq l("Welcome back, apprentice.");
+ mesq l("Are you read for another spell?");
menu
"No, I still have to practice the first one.", L_close,
"Yes. Show me some more!", L_Next4;
L_Next4:
- mes "[Waric]";
+ mesn;
mes "\"Very well. This spell is more complex than the last one. It is called toxic dart. Only your peers are susceptible to the dart's poison. If you hit an animal the dart will injure it, but the poison will not work.\"";
next;
mes "\"You have to use two roots for this spell. First you have to take one root and break off all the root hair. Shape it into a stick, if you will. Then put it on top of the other root and form an arrow-like structure.\"";
@@ -241,14 +242,14 @@ L_Next4:
L_Snakes:
mes "Waric nods at you.";
- mes "[Waric]";
+ mesn;
mes "\"Have you practiced enough?\"";
menu
"Yes, I'm an outstanding Dark Mage!", L_Next5,
"No. I'm too lazy.", L_ComeBackLater;
L_Next5:
- mes "[Waric]";
+ mesn;
mes "\"Very well. I shall teach you another spell.\"";
mes "\"This one is so complex that I have to show it to you before explaining it further. Bring me a snake egg and a root.\"";
next;
@@ -258,58 +259,59 @@ L_Next5:
L_SnakesIngredients:
OrumQuest = 39;
- mes "[Waric]";
+ mesn;
mes "\"Did you bring one Dark Crystal and a Snake Egg?\"";
menu
"Yes, I have what you want.", L_Next6,
"No, I need more time.", L_NoItem;
L_Next6:
- if ((countitem("DarkCrystal") < 0)
- || (countitem("SnakeEgg") < 0))
+ if ((countitem(DarkCrystal) < 0)
+ || (countitem(SnakeEgg) < 0))
goto L_NoItem;
- delitem "DarkCrystal", 1;
- delitem "SnakeEgg", 1;
- mes "[Waric]";
- mes "\"Observe!\"";
+ mesn;
+ mesq l("Observe!");
next;
- mes "The wizard takes the crystal and the egg, mumbling something you don't understand. Suddenly, he throws the egg into the air and throws the crystal right through it midair.";
+ mesc l("The wizard takes the crystal and the egg, mumbling something you don't understand. Suddenly, he throws the egg into the air and throws the crystal right through it midair.");
next;
- mes "The Egg cracks open and a living snake comes out of the egg.";
+ mesc l("The Egg cracks open and a living snake comes out of the egg.");
next;
- monster "017-4", 217,36, "Evil", 1010, 1;
- mes "The wizard looks at you, his eyes flashing, and laughs diabolically.";
+ delitem DarkCrystal, 1;
+ delitem SnakeEgg, 1;
OrumQuest = 40;
+ monster "017-4", 217,36, "Evil", Snake, 1;
+ mesc l("The wizard looks at you, his eyes flashing, and laughs diabolically.");
goto L_close;
L_SnakesSpell:
- mes "[Waric]";
- mes "\"Did you see how this spell is cast?\"";
+ mesn;
+ mesq l("Did you see how this spell is cast?");
menu
"Yes. What did you mumble?", L_Next7,
"No. Could you show me again?", L_SnakesAgain;
L_Next7:
- mes "[Waric]";
- mes "\"I said " + get(.invocation$, "summon-snakes") + ".\"";
- mes "\"Have fun with those spells and use them to cause hate, anger and death.\"";
+ mesn;
+ mesq l("I said %s.", b("Halhiss"));
+ mesq l("Have fun with those spells and use them to cause hate, anger and death.");
OrumQuest = 41;
+ learnskill SKILL_HALHISS;
goto L_close;
L_SnakesAgain:
- mes "[Waric]";
- mes "\"Do you really want me to show you the spell again? You will have to bring new ingredients.\"";
+ mesn;
+ mesq l("Do you really want me to show you the spell again? You will have to bring new ingredients.");
menu
"No.", L_SnakesSpell,
"Yes.", L_SnakesIngredients;
L_ComeBackLater:
- mes "[Waric]";
- mes "\"Then come back later.\"";
+ mesn;
+ mesq l("Then come back later.");
goto L_close;
L_MoreMagic:
- mes "[Waric]";
+ mesn;
mes "\"Hello, apprentice.\"";
mes "\"You must practice more! I will teach you more spells once you have mastered the ones I have already demonstrated.\"";
next;
@@ -318,37 +320,37 @@ L_MoreMagic:
"Thanks, master. I will come back later", L_close;
L_Next8:
- mes "[Waric]";
- mes "\"Yes, of course.\"";
- mes "\"To summon the snakes use " + get(.invocation$, "summon-snakes") + ".\"";
- mes "\"Say " + get(.invocation$, "toxic-dart") + " to make your roots into toxic darts.\"";
- mes "\"And the first spell, to summon wicked mushrooms, is " + get(.invocation$, "summon-wickedmushroom") + ".\"";
+ mesn;
+ mesq l("Yes, of course.");
+ mesq l("To summon the snakes use %s.", b("Halhiss"));
+ mesq l("Say %s to make your roots into toxic darts.", b("Phlex"));
+ mesq l("And the first spell, to summon wicked mushrooms, is %s.", b("Helorp"));
next;
- mes "\"Now leave. Spread chaos with the spells I have taught you!\"";
+ mesq l("Now leave. Spread chaos with the spells I have taught you!");
goto L_close;
L_Undecided:
- mes "[Waric]";
- mes "\"Well, I could. However, I am not sure you are trustworthy.\"";
+ mesn;
+ mesq l("Well, I could. However, I am not sure you are trustworthy.");
next;
- mes "\"How do I know you will not run off to Sagatha with what I would be teaching you?\"";
+ mesq l("How do I know you will not run off to Sagatha with what I would be teaching you?");
goto L_close;
L_Sagatha:
- mes "[Waric]";
- mes "\"You are already a student of Sagatha. I will not teach you anything!\"";
+ mesn;
+ mesq l("You are already a student of Sagatha. I will not teach you anything!");
goto L_close;
L_Banished:
- mes "The wizard looks at you with despise.";
- mes "[Waric]";
- mes "\"How did you...\"";
+ mesc l("The wizard looks at you with despise.");
+ mesn;
+ mesq l("How did you...");
heal -Hp, 0;
goto L_close;
L_NoItem:
- mes "[Waric]";
- mes "\"Why are you wasting my time? Come back when you got everything I need.\"";
+ mesn;
+ mesq l("Why are you wasting my time? Come back when you got everything I need.");
goto L_close;
L_close:
diff --git a/npc/magic/config.txt b/npc/magic/config.txt
index 89f9dd25..5a73317c 100644
--- a/npc/magic/config.txt
+++ b/npc/magic/config.txt
@@ -157,6 +157,8 @@ function script SK_summon {
.@mex=getarg(2, 1);
.@sum=getarg(3, true);
if ($@GM_OVERRIDE || debug) debugmes "Skill "+@skillId+" Lv "+@skillLv;
+ if (ispcdead())
+ return;
if (rand2(10) < abizit()) {
// Summon Magic (with magic level bonus)
diff --git a/npc/magic/final.txt b/npc/magic/final.txt
index 92fb65a4..e7d92da3 100644
--- a/npc/magic/final.txt
+++ b/npc/magic/final.txt
@@ -54,6 +54,14 @@ function script HUB_SkillInvoke {
// Level 2
case SKILL_INMA:
SK_Inma(); break;
+ case SKILL_KALAKARENK:
+ case SKILL_KALBOO:
+ case SKILL_KALGINA:
+ case SKILL_KALRENK:
+ SK_SummonLv2(); break;
+ case SKILL_HALHISS:
+ case SKILL_HELORP:
+ SK_SummonLv2(); break;
// Level 3
// Level 4
// Level 5
@@ -84,83 +92,6 @@ function script HUB_SkillInvoke {
GetManaExp(TMW2_FIREBALL, 3);
break;
////////////////////////////////
- // XXX: Holy Class
- // (Single DPS + AOE)
- case TMW2_NAPALMBEAT:
- .@PW=35+(5*@skillLv);
- .@dmg=AdjustSpellpower(.@PW);
- .@RG=2+(@skillLv/3);
- harm(@skillTarget, .@dmg/10, HARM_MAGI, Ele_Holy);
- areaharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Holy);
- GetManaExp(TMW2_HOLYLIGHT, 1);
- break;
- case TMW2_HOLYLIGHT:
- .@PW=125+(25*@skillLv);
- .@dmg=AdjustSpellpower(.@PW);
- harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Holy);
- areaharm(@skillTarget, 1, .@dmg/5, HARM_MAGI, Ele_Holy);
- GetManaExp(TMW2_HOLYLIGHT, 2);
- break;
- case TMW2_JUDGMENT:
- .@PW=250+(50*@skillLv);
- .@SPW=60+(15*@skillLv);
- .@dmg=AdjustSpellpower(.@PW);
- .@dsub=AdjustSpellpower(.@SPW);
- .@RG=3+(@skillLv/5);
- harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Holy);
- areaharm(@skillTarget, .@RG, .@dsub, HARM_MAGI, Ele_Holy);
- GetManaExp(TMW2_HOLYLIGHT, 3);
- break;
- ////////////////////////////////
- // XXX: Wind Class
- // (Smaller cooldown than others)
- case TMW2_MAGICSTRIKE:
- .@PW=125+(25*@skillLv);
- .@dmg=AdjustSpellpower(.@PW);
- harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Wind);
- GetManaExp(TMW2_LIGHTNINGBOLT, 1);
- break;
- case TMW2_LIGHTNINGBOLT:
- .@PW=150+(50*@skillLv);
- .@dmg=AdjustSpellpower(.@PW);
- harm(@skillTarget, .@dmg, HARM_MAGI, Ele_Wind);
- GetManaExp(TMW2_LIGHTNINGBOLT, 2);
- break;
- case TMW2_TEMPEST:
- .@PW=125+(25*@skillLv);
- .@dmg=AdjustSpellpower(.@PW);
- .@RG=2+(@skillLv/5);
- areaharm(@skillTarget, .@RG, .@dmg, HARM_MAGI, Ele_Wind);
- GetManaExp(TMW2_LIGHTNINGBOLT, 3);
- break;
- ////////////////////////////////
- // XXX: Ice Class
- // (May freeze the targets)
- case TMW2_FROSTDIVER:
- .@PW=80+(10*@skillLv);
- // 22% chance, 2.5s
- harm(@skillTarget, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water);
- sc_start SC_FREEZE, 2500, 1, 2200, SCFLAG_NONE, @skillTarget;
- GetManaExp(TMW2_NILFHEIM, 1);
- break;
- case TMW2_FROSTNOVA:
- .@PW=80+(10*@skillLv);
- .@RG=2+(@skillLv/5);
- // 18% chance, 3s, 3x3 radius
- areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water);
- areasc(.@RG, 3000, SC_FREEZE, BL_MOB|BL_PC|BL_HOM|BL_MER, 1, "filter_hostile", @skillTarget, 1800);
- GetManaExp(TMW2_NILFHEIM, 2);
- break;
- case TMW2_NILFHEIM:
- // Nilfheim cast on self?
- .@PW=80+(10*@skillLv);
- .@RG=4+(@skillLv/5);
- areaharm(getcharid(3), .@RG*3/2, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Water);
- areasc(.@RG, 15000, SC_FREEZE, BL_PC | BL_MOB | BL_MER | BL_HOM, 1, "filter_hostile");
- // Maybe filter_notme() would work better, indeed
- GetManaExp(TMW2_NILFHEIM, 3);
- break;
- ////////////////////////////////
// XXX: Earth Class
// DEF Effects at Gaia Break, more expensive
case TMW2_METEORSTRIKE:
@@ -230,73 +161,6 @@ function script HUB_SkillInvoke {
areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral);
GetManaExp(@skillId, 1);
break;
- ////////////////////////////////
- // XXX: Brawling Class
- case TMW2_BRAWLING:
- // 75x3 = 225
- .@PW=70+(5*@skillLv);
- // Using a shield, so power is halved
- if (getequipid(EQI_HAND_L) > 0)
- .@PW=.@PW/2;
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- break;
- case TMW2_BEARSTRIKE:
- // 60x5 = 300
- .@PW=55+(5*@skillLv);
- // Using a shield, so power is halved
- if (getequipid(EQI_HAND_L) > 0)
- .@PW=.@PW/2;
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- break;
- case TMW2_ALLINONE:
- // 45x8 = 360
- .@PW=40+(5*@skillLv);
- // Using a shield, so power is halved
- if (getequipid(EQI_HAND_L) > 0)
- .@PW=.@PW/2;
- //harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Neutral);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Fire);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Water);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Earth);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Wind);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Holy);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Shadow);
- sleep2(10);
- harm(@skillTarget, AdjustAttackpower(.@PW), HARM_PHYS, Ele_Ghost);
- sleep2(10);
- // The main elemental-less blast hits all in same square,
- // and also hits behind (and on your square)
- rectharm(@skillTarget, 0, 1, AdjustAttackpower(.@PW/2), HARM_PHYS, Ele_Neutral);
- break;
-
- ////////////////////////////////
- // CLASS_OTHER
- case TMW2_PARUM:
- SK_parum();
- break;
- case TMW2_DEMURE:
- SK_Demure();
- break;
- case TMW2_DRAGOKIN:
- SK_Dragokin();
- break;
// Summons which never fail
case TMW2_ZARKOR:
alignment_cansummon();
diff --git a/npc/magic/level1-grow-plants.txt b/npc/magic/level1-grow-plants.txt
index c3b21bad..d15f1276 100644
--- a/npc/magic/level1-grow-plants.txt
+++ b/npc/magic/level1-grow-plants.txt
@@ -15,6 +15,7 @@ function script SK_GrowPlants {
.@it = GambogeHerb; .@mobId = GambogePlant; break;
case SKILL_MODRILAX:
.@it = MauveHerb; .@mobId = MauvePlant; break;
+ default: return;
}
// Consume reagents
delitem Root, 1;
diff --git a/npc/magic/level2-summon-monsters.txt b/npc/magic/level2-summon-monsters.txt
new file mode 100644
index 00000000..9c28e639
--- /dev/null
+++ b/npc/magic/level2-summon-monsters.txt
@@ -0,0 +1,53 @@
+// The Mana World script
+// Author: Jesusalva <jesusalva@themanaworld.org>
+//
+// Magic Script: Multiple (Level 1)
+// School: Astral/Dark 2
+
+// SK_SummonLv2()
+function script SK_SummonLv2 {
+ // Setup
+ switch (@skillId) {
+ case SKILL_KALAKARENK:
+ .@it = WhiteFur; .@mobId = Fluffy; .@am = 3; .@cl = Root;
+ .@fx1 = FX_MAGIC_FLUFFY_CAST; .@fx2 = FX_MAGIC_FLUFFY_SPAWN; break;
+ case SKILL_KALBOO:
+ .@it = MoubooFigurine; .@mobId = Mouboo; .@am = 4; .@cl = Root;
+ .@fx1 = FX_MAGIC_MOUBOO_CAST; .@fx2 = FX_MAGIC_MOUBOO_SPAWN; break;
+ case SKILL_KALGINA:
+ .@it = PinkAntenna; .@mobId = Pinkie; .@am = 2; .@cl = Root;
+ .@fx1 = FX_MAGIC_PINKY_CAST; .@fx2 = FX_MAGIC_PINKY_SPAWN; break;
+ case SKILL_KALRENK:
+ .@it = HardSpike; .@mobId = SpikyMushroom; .@am = 2; .@cl = Root;
+ .@fx1 = FX_MAGIC_SPIKY_CAST; .@fx2 = FX_MAGIC_SPIKY_SPAWN; break;
+
+ // Should non-astral magic be here?
+ case SKILL_HALHISS:
+ .@it = SnakeEgg; .@mobId = Snake; .@am = 4; .@cl = DarkCrystal;
+ .@fx1 = FX_MAGIC_SNAKE_CAST; .@fx2 = FX_MAGIC_SNAKE_SPAWN; break;
+ case SKILL_HELORP:
+ .@it = SmallMushroom; .@am = 3; .@cl = DarkCrystal;
+ .@mobId = any(WickedMushroom, WickedMushroom, WickedMushroom,
+ WickedMushroom, WickedMushroom, WickedMushroom,
+ EvilMushroom, Moonshroom, Moonshroom, Moonshroom);
+ .@fx1 = FX_MAGIC_WICKED_CAST; .@fx2 = FX_MAGIC_WICKED_SPAWN; break;
+
+ default: return;
+ }
+ // Consume reagents
+ delitem .@cl, 1;
+ delitem .@it, 1;
+ // Estimate the cast time
+ if (.@cl == Root)
+ .@ct = 400+rand2(1001-getskilllv(MAGIC_SKILL_ASTRAL)*100);
+ else if (.@cl == DarkCrystal)
+ .@ct = 400+rand2(1001-getskilllv(MAGIC_SKILL_DARK)*100);
+ // Summon the monsters (or fail trying to)
+ specialeffect(.@fx1, AREA, getcharid(3));
+ sleep2(.@ct);
+ SK_summon(.@mobId, .@am, 2);
+ specialeffect(.@fx2, AREA, getcharid(3));
+ return;
+}
+
+
diff --git a/npc/scripts.conf b/npc/scripts.conf
index a625b547..b2535a06 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -74,6 +74,7 @@
"npc/magic/level1-grow-plants.txt",
"npc/magic/level1-lesser-heal.txt",
"npc/magic/level2-lay-on-hands.txt",
+"npc/magic/level2-summon-monsters.txt",
"npc/magic/final.txt",
// Commands