summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2021-04-17 16:07:04 -0300
committerJesusaves <cpntb1@ymail.com>2021-04-17 16:07:04 -0300
commit14f7af0b7b3839f0e1b35c31bf3bd17e70cf366f (patch)
treed9a501ffc748bca4cf19a56942d91bdd82d5eeb5 /npc
parentbd9d7c6142986a30f6fcd355efe22704f5bf4be4 (diff)
downloadserverdata-14f7af0b7b3839f0e1b35c31bf3bd17e70cf366f.tar.gz
serverdata-14f7af0b7b3839f0e1b35c31bf3bd17e70cf366f.tar.bz2
serverdata-14f7af0b7b3839f0e1b35c31bf3bd17e70cf366f.tar.xz
serverdata-14f7af0b7b3839f0e1b35c31bf3bd17e70cf366f.zip
Refactor Sagatha functions. Add shear spell (reusing ML code)
Diffstat (limited to 'npc')
-rw-r--r--npc/002-1/elanore.txt12
-rw-r--r--npc/013-1/sagatha.txt27
-rw-r--r--npc/functions/global_event_handler.txt2
-rw-r--r--npc/functions/mob_points.txt72
-rw-r--r--npc/functions/quests.txt37
-rw-r--r--npc/magic/final.txt2
-rw-r--r--npc/magic/level2-shear.txt54
-rw-r--r--npc/scripts.conf2
8 files changed, 127 insertions, 81 deletions
diff --git a/npc/002-1/elanore.txt b/npc/002-1/elanore.txt
index 67018a3f..cc9ce146 100644
--- a/npc/002-1/elanore.txt
+++ b/npc/002-1/elanore.txt
@@ -1,16 +1,4 @@
-function script elanore_decrease_exp {
- .@heal_exp = getq2(MagicQuest_Healing);
-
- if (.@heal_exp < 8)
- .@heal_exp = 0;
- else
- .@heal_exp -= 8;
-
- setq2(MagicQuest_Healing, .@heal_exp);
- return;
-}
-
002-1,75,62,0 script Elanore#_M NPC108,{
@has_magic = getskilllv(SKILL_MAGIC);
diff --git a/npc/013-1/sagatha.txt b/npc/013-1/sagatha.txt
index 786da773..702e261c 100644
--- a/npc/013-1/sagatha.txt
+++ b/npc/013-1/sagatha.txt
@@ -1,26 +1,4 @@
-
-function script QuestSagathaHappy {
- .@value = getarg(0, @value);
- .@unhappiness = (QUEST_MAGIC & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT;
- if (.@unhappiness < .@value)
- .@unhappiness = 0;
-
- .@unhappiness = .@unhappiness - .@value;
-
- QUEST_MAGIC = (QUEST_MAGIC & ~NIBBLE_3_MASK) | (.@unhappiness << NIBBLE_3_SHIFT);
- return;
-}
-
-function script QuestSagathaAnnoy {
- .@value = getarg(0, @value);
- .@unhappiness = (QUEST_MAGIC & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT;
- if ((.@unhappiness + .@value) > 15)
- .@unhappiness = 15;
-
- .@unhappiness = .@unhappiness + .@value;
- QUEST_MAGIC = (QUEST_MAGIC & ~NIBBLE_3_MASK) | (.@unhappiness << NIBBLE_3_SHIFT);
- return;
-}
+// (C) The Mana World Developers
function script SagathaStatus {
if (isequippedcnt(MoubooHead, FluffyHat))
@@ -242,7 +220,8 @@ L_Teach_N14:
mes "\"Some forest creatures sometimes overgrow their fur or hide. That makes them uncomfortable.\"";
next;
mesn .@n$;
- 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.");
+ mesq l("You can help them with shearing magic. Press your hands together and say '%s'. Then touch them with your hands, and brush off any excess.", b("Chipchip"));
+ learnskill SKILL_CHIPCHIP;
next;
mesn .@n$;
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.");
diff --git a/npc/functions/global_event_handler.txt b/npc/functions/global_event_handler.txt
index e832623f..d0014b87 100644
--- a/npc/functions/global_event_handler.txt
+++ b/npc/functions/global_event_handler.txt
@@ -13,7 +13,7 @@ OnPCLoginEvent:
end;
OnPCKillEvent:
- callfunc "elanore_decrease_exp"; // decrease heal exp for doing bad things
+ elanore_decrease_exp(); // decrease heal exp for doing bad things
end;
OnNPCKillEvent:
diff --git a/npc/functions/mob_points.txt b/npc/functions/mob_points.txt
index 2a39fbee..a9f6f1d4 100644
--- a/npc/functions/mob_points.txt
+++ b/npc/functions/mob_points.txt
@@ -48,50 +48,34 @@ function script MobPoints {
callfunc("AddValonCntMask");
- if ((@mobId == 1003) || (@mobId == 1004) || (@mobId == 1009) || (@mobId == 1057)
- || (@mobId == 1104) || (@mobId == 1105) || (@mobId == 1106) || (@mobId == 1107))
- goto L_Good;
-
- // Attitude adjustment for the witch (can we refactor this to another function? Not sure about max. recursion depth)
-
- @value = 0;
- if (@mobId == 1018)
- @value = 3;
-
- if (@mobId == 1020)
- @value = 3;
- if (@mobId == 1027)
- @value = 3;
- if (@mobId == 1028)
- @value = 4;
- if (@mobId == 1038)
- @value = 2;
- if (@mobId == 1094)
- @value = 3;
- if (@mobId == 1112)
- @value = 3;
- if (@mobId == 1113)
- @value = 3;
-
- if (@value == 0)
- goto L_Celestia;
-
- callfunc "QuestSagathaAnnoy";
- goto L_Celestia;
-
-L_Good:
- @value = 1;
- callfunc "QuestSagathaHappy";
- goto L_Celestia;
-
-L_Celestia:
- if (QL_CELESTIA < 5 || QL_CELESTIA >= 205 || @mobId != 1072) goto L_Return;
- QL_CELESTIA = QL_CELESTIA + 1;
- if (QL_CELESTIA == 205)
- message strcharinfo(0), "Yeti : ##3This should be enough yetis killed to please Celestia.";
- goto L_Return;
+ // Attitude adjustment for Sagatha
+ switch (@mobId) {
+ case 1018:
+ case 1020:
+ case 1027:
+ case 1094:
+ case 1112:
+ case 1113:
+ QuestSagathaAnnoy(3); break;
+ case 1028:
+ QuestSagathaAnnoy(4); break;
+ case 1038:
+ QuestSagathaAnnoy(2); break;
+ case 1003:
+ case 1004:
+ case 1009:
+ case 1057:
+ case 1104:
+ case 1105:
+ case 1106:
+ case 1107:
+ QuestSagathaHappy(1); break;
+ }
-L_Return:
- @value = 0;
+ if (QL_CELESTIA >= 5 && QL_CELESTIA < 205 && @mobId == Yeti) {
+ QL_CELESTIA = QL_CELESTIA + 1;
+ if (QL_CELESTIA == 205)
+ message strcharinfo(0), "Yeti : ##3This should be enough yetis killed to please Celestia.";
+ }
return;
}
diff --git a/npc/functions/quests.txt b/npc/functions/quests.txt
new file mode 100644
index 00000000..3f0c40ef
--- /dev/null
+++ b/npc/functions/quests.txt
@@ -0,0 +1,37 @@
+// The Mana World quest functions script
+
+function script QuestSagathaHappy {
+ .@value = getarg(0, @value);
+ .@unhappiness = (QUEST_MAGIC & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT;
+ if (.@unhappiness < .@value)
+ .@unhappiness = 0;
+
+ .@unhappiness = .@unhappiness - .@value;
+
+ QUEST_MAGIC = (QUEST_MAGIC & ~NIBBLE_3_MASK) | (.@unhappiness << NIBBLE_3_SHIFT);
+ return;
+}
+
+function script QuestSagathaAnnoy {
+ .@value = getarg(0, @value);
+ .@unhappiness = (QUEST_MAGIC & NIBBLE_3_MASK) >> NIBBLE_3_SHIFT;
+ if ((.@unhappiness + .@value) > 15)
+ .@unhappiness = 15;
+
+ .@unhappiness = .@unhappiness + .@value;
+ QUEST_MAGIC = (QUEST_MAGIC & ~NIBBLE_3_MASK) | (.@unhappiness << NIBBLE_3_SHIFT);
+ return;
+}
+
+function script elanore_decrease_exp {
+ .@heal_exp = getq2(MagicQuest_Healing);
+
+ if (.@heal_exp < 8)
+ .@heal_exp = 0;
+ else
+ .@heal_exp -= 8;
+
+ setq2(MagicQuest_Healing, .@heal_exp);
+ return;
+}
+
diff --git a/npc/magic/final.txt b/npc/magic/final.txt
index 78c171b6..87971b65 100644
--- a/npc/magic/final.txt
+++ b/npc/magic/final.txt
@@ -59,6 +59,8 @@ function script HUB_SkillInvoke {
// Level 2
case SKILL_INMA:
SK_Inma(); break;
+ case SKILL_CHIPCHIP:
+ SK_Shear(); break;
case SKILL_KALAKARENK:
case SKILL_KALBOO:
case SKILL_KALGINA:
diff --git a/npc/magic/level2-shear.txt b/npc/magic/level2-shear.txt
new file mode 100644
index 00000000..f848b36d
--- /dev/null
+++ b/npc/magic/level2-shear.txt
@@ -0,0 +1,54 @@
+// The Mana World script
+// Author: Jesusalva <jesusalva@themanaworld.org>
+//
+// Magic Script: SKILL_CHIPCHIP (Level 1)
+// School: Nature 2
+
+function script SK_Shear {
+ .@mobGD=getarg(0, @skillTarget);
+ if (.@mobGD <= 0)
+ return;
+
+ // We only want monsters
+ if (getunittype(.@mobGD) != UNITTYPE_MOB) {
+ dispbottom l("This skill can only be used on monsters!");
+ return;
+ }
+
+ // Global data
+ setarray .@valid, Fluffy, EasterFluffy, SpikyMushroom, Mouboo, MauvePlant, CobaltPlant, GambogePlant, AlizarinPlant, Silkworm, Pinkie;
+ setarray .@prize, WhiteFur, WhiteFur, HardSpike, CottonCloth, MauveHerb, CoblatHerb, GambogeHerb, AlizarinHerb, SilkCocoon, PinkAntenna;
+ setarray .@score, 300, 300, 250, 175, 700, 700, 700, 700, 300, 180;
+
+ // Specific data
+ .@mobID=getunitdata(.@mobGD, UDT_CLASS);
+ .@matk=AdjustSpellpower(40+(10*@skillLv));
+ .@idx=array_find(.@valid, .@mobID);
+
+ // Invalid target
+ if (.@idx < 0) return;
+
+ // Not yet sheared
+ if (array_rfind(@shear, .@mobGD) < 0) {
+ array_push(@shear, @mobGD);
+ if (.@matk > .@score[.@idx])
+ getitem .@prize[.@idx], 1;
+ }
+
+ // Sagratha bonus
+ if (.@mobId == Fluffy || .@mobId == Mouboo || .@mobId == Pinkie)
+ QuestSagathaHappy(any(true, true, false));
+
+ // Special effect
+ specialeffect(FX_MAGIC_SHEAR_CAST, AREA, getcharid(3));
+ specialeffect(FX_MAGIC_SHEAR_CAST, AREA, .@mobGD);
+
+ // Truncate.
+ // We're saving the GID so it must be "big enough"
+ // But not too big so rfind() is not expensive
+ if (getarraysize(@study) > 99) {
+ deletearray(@study, 30);
+ }
+ return;
+}
+
diff --git a/npc/scripts.conf b/npc/scripts.conf
index c975d301..7f3980e6 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -19,6 +19,7 @@
"npc/functions/inc_sc_bonus.txt",
"npc/commands/kami.txt",
"npc/functions/filters.txt",
+"npc/functions/quests.txt",
// Main Functions
"npc/functions/banker.txt",
@@ -85,6 +86,7 @@
"npc/magic/level2-magic-knuckles.txt",
"npc/magic/level2-protect.txt",
"npc/magic/level2-rain.txt",
+"npc/magic/level2-shear.txt",
"npc/magic/level2-summon-monsters.txt",
"npc/magic/level2-toxic-dart.txt",
"npc/magic/final.txt",