summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2021-04-15 14:45:36 -0300
committerJesusaves <cpntb1@ymail.com>2021-04-15 14:45:36 -0300
commit67543201d8646c059b3928d14c2591c02168237a (patch)
treefca28d81e39f5bcbf313dca3542af0aafd945483
parent827a9f2be696ece2984776fcc77ebd1439db9032 (diff)
downloadserverdata-67543201d8646c059b3928d14c2591c02168237a.tar.gz
serverdata-67543201d8646c059b3928d14c2591c02168237a.tar.bz2
serverdata-67543201d8646c059b3928d14c2591c02168237a.tar.xz
serverdata-67543201d8646c059b3928d14c2591c02168237a.zip
Joyplim, Frillyar and Kalmurk
-rw-r--r--db/pre-re/skill_db.conf67
-rw-r--r--npc/008-1/hinnak.txt78
-rw-r--r--npc/009-3/sword.txt6
-rw-r--r--npc/012-3/mana-seed.txt2
-rw-r--r--npc/017-4/waric.txt4
-rw-r--r--npc/magic/config.txt5
-rw-r--r--npc/magic/final.txt16
-rw-r--r--npc/magic/level1-summon-maggots.txt15
-rw-r--r--npc/magic/level2-arrow-hail.txt44
-rw-r--r--npc/magic/level2-happy-curse.txt30
-rw-r--r--npc/scripts.conf3
11 files changed, 206 insertions, 64 deletions
diff --git a/db/pre-re/skill_db.conf b/db/pre-re/skill_db.conf
index 1a2ab65a..1ef5c931 100644
--- a/db/pre-re/skill_db.conf
+++ b/db/pre-re/skill_db.conf
@@ -39109,9 +39109,72 @@ skill_db: (
}
}
},
+{
+ Id: 20044
+ Name: "SKILL_FRILLYAR"
+ Description: "Frillyar"
+ MaxLevel: 10
+ Range: 4
+ SkillType: {
+ Enemy: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ Hit: "BDT_SKILL"
+ AttackType: "Magic"
+ Element: "Ele_Neutral"
+ DamageType: {
+ NoDamage: true
+ }
+ CoolDown: 2000
+ Requirements: {
+ SPCost: 25
+ Items: {
+ SulphurPowder: 0
+ }
+ }
+},
+{
+ Id: 20045
+ Name: "SKILL_JOYPLIM"
+ Description: "Joyplim"
+ MaxLevel: 9
+ SkillType: {
+ Self: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ CoolDown: 200
+ Requirements: {
+ SPCost: 13
+ Items: {
+ GingerBreadMan: 0
+ }
+ }
+},
+{
+ Id: 20046
+ Name: "SKILL_KALMURK"
+ Description: "Kalmurk"
+ MaxLevel: 9
+ SkillType: {
+ Self: true
+ }
+ SkillInfo: {
+ Quest: true
+ }
+ CoolDown: 20000
+ Requirements: {
+ SPCost: 21
+ Items: {
+ Root: 0
+ MaggotSlime: 0
+ }
+ }
+},
// MakeSulphur Parum EnchantLifestone MakeArrow MakeIronPowder MakeShirt MakeTanktop MakeSTanktop
-// Kalmurk
-// ArrowHail Joyplim
// FlyingBackpack(?) Shear
)
diff --git a/npc/008-1/hinnak.txt b/npc/008-1/hinnak.txt
index 3672ed93..2cf07931 100644
--- a/npc/008-1/hinnak.txt
+++ b/npc/008-1/hinnak.txt
@@ -12,7 +12,7 @@ L_No_NohMask:
if (@state == 2) goto L_ThanksAgain;
if (getequipid(equip_head) == 751) goto L_Intro_Hat;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Argh! I hate them! I @#$% hate them! I @#$% hate these @#$% pinkies!\"";
next;
menu
@@ -28,13 +28,13 @@ L_Intro_Hat:
"Whoa, what are you doing?", L_Intro_Hat_Explain;
L_Intro_Hat_Explain:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Sorry, you look like a pinkie. They've been destroying my fields, and I guess I got a bit worked up.\"";
next;
goto L_Help;
L_Reason:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"These @#$% beasts are jumping around in my fields destroying all my harvest.";
mes "But they are too fast. I can't catch them.\"";
next;
@@ -43,7 +43,7 @@ L_Reason:
"Well, life ain't fair.", L_close;
L_Help:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Yes, you look quite fast. Maybe you can catch some of them. That will pay them a lesson.";
mes "Slay some of them and bring me 10 of their antennae.\"";
@state = 1;
@@ -54,7 +54,7 @@ L_Help:
"How much is this worth to you?", L_Reward;
L_Reward:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Well, I can't offer you much. But I got an old scythe laying around. Maybe you can use it as a weapon.\"";
goto L_close;
@@ -66,7 +66,7 @@ L_Exchange:
goto L_Exchange_Start;
L_Exchange_Start:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Have you got the 10 antennae?\"";
next;
menu
@@ -83,36 +83,36 @@ L_Exchange_Exchange:
getitem "Scythe", 1;
@state = 2;
callsub S_Update_Mask;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Thank you very much. I've got something for you. My old scythe. Maybe you can use it as a weapon. It is a bit cumbersome but its strikes are deadly.\"";
goto L_close;
L_Exchange_Notenough:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"It doesn't look like you do.\"";
goto L_close;
L_Exchange_TooMany:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Looks like you don't have room for this. Come back later to receive your reward. Hold on to the antennea until then.\"";
goto L_close;
L_ThanksAgain:
if (getequipid(equip_head) == 751)
goto L_ThanksHat;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Good to see you again, and thanks again for helping me with the pinkies!\"";
next;
goto L_ThanksMenu;
L_ThanksHat:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"That better be a trophy on your head.\"";
menu
"It is.", L_Next;
L_Next:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Good then. Thanks for your help with the pinkies.\"";
goto L_ThanksMenu;
@@ -123,7 +123,7 @@ L_ThanksMenu:
"You're welcome. Bye!", L_Bye;
L_Next1:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Actually, it's been a long day. If it's no trouble, could you get me a beer?\"";
next;
menu
@@ -132,7 +132,7 @@ L_Next1:
"You shouldn't drink while working!", L_Next2;
L_Next2:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Well, I'm done for the day, and I'm quite old enough to decide when I can have a beer, thank you!\"";
next;
menu
@@ -143,52 +143,52 @@ L_GiveBeer:
if (countitem("Beer") < 1)
goto L_NoBeer;
delitem "Beer", 1;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "Hinnak takes a sip.";
mes "\"Aaah! Nothing like a well-deserved beer after a long day of tending the crops!\"";
mes "\"Thanks, that was very kind of you!\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "He takes another sip.";
mes "\"Thanks! You know, I had the strangest thing happen to me. I had this patch of ground that was really clumpy; lots of clay, you see.\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Right over there.\"";
mes "He points to a stretch of soft, raked ground.";
mes "\"Looks much better now, doesn't it? But how I got there is kind-a scary...\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"I'd been trying to break it up for a while, but that kind of work is a pain. So my wife said that I should go and see the witch, just in case she knows something.\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"And sure enough I ask the witch, and she has a look at it. 'Nothing I can do', she says, 'but I can ask a friend'.\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"So the next day another witch shows up. Gorgeous woman, but when she looked at me, the scares went scuttling down my spine....\"";
mes "\"First thing she asked was if I'm a farmer. Said her friend had told her that I needed help.\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"I show her what the problem is, and she tells me to go inside and wait.\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Hinnak drains his beer in one long sip, then hesitates.";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"So I go inside. I'm barely in when it starts raining outside, pouring cats and mouboos!\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Not so weird, perhaps, except that it was been bright and sunny just a second before! So I rush out, my wife telling me to leave the witch alone, and I see her standing there in the middle of the rain...\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"None of the raindrops touched her, as if they was afraid!\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Then she yells out some gobbledygook word, and out of the ground there comes a swarm of maggots, crawling and digging and climbing over each other's backs...\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"And then she turns to me! Seeing her stare, for a moment there I think that she'll turn me into a pinkie, for sure...\"";
next;
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"But all she says is, 'if you'd stayed inside, you wouldn't be wet now'.\"";
next;
menu
@@ -198,29 +198,31 @@ L_GiveBeer:
"I better go now.", L_Bye;
L_Sagatha_hahaha:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Yeah, funny now... But you should've seen that stare! Ah, well, never mind.\"";
goto L_close;
L_Sagatha_scary:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Yeah, you could say that...\"";
mes "He stares into his empty beer jug, as if wishing it weren't empty yet.";
goto L_close;
L_Sagatha_word:
- mes "[Farmer Hinnak]";
- mes "\"Oh, I can't be sure... but something like '" + get(.invocation$, "summon-maggots") + "', I think.\"";
+ mesn l("Farmer Hinnak");
+ mesq l("Oh, I can't be sure... but something like '%s', I think.", b("kalmurk"));
+ if (getskilllv(SKILL_MAGIC))
+ learnskill SKILL_KALMURK;
goto L_close;
L_NoBeer:
- mes "[Farmer Hinnak]";
- mes "\"Ah... no beer? Oh well.\"";
+ mesn l("Farmer Hinnak");
+ mesq l("Ah... no beer? Oh well.");
goto L_close;
L_Bye:
- mes "[Farmer Hinnak]";
- mes "\"Bye!\"";
+ mesn l("Farmer Hinnak");
+ mesq l("Bye!");
goto L_close;
L_NohMask:
@@ -230,12 +232,12 @@ L_NohMask:
"Hello.", L_No_NohMask;
L_NohMask_Mask:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"No. It tends to be too dark to see a mask.\"";
goto L_close;
L_NohMask_Satchel:
- mes "[Farmer Hinnak]";
+ mesn l("Farmer Hinnak");
mes "\"Yes, I saw someone with a large sack on their back go to the mining camp.\"";
goto L_close;
diff --git a/npc/009-3/sword.txt b/npc/009-3/sword.txt
index a22fba60..eacd490e 100644
--- a/npc/009-3/sword.txt
+++ b/npc/009-3/sword.txt
@@ -152,12 +152,12 @@ L_Next3:
mes "\"The spell I shall teach thee is the hail of arrows spell. It will make arrows fall down from the heavens unto thy enemies.\"";
next;
mesn l("Magic Sword");
- mes "\"Take twenty arrows, sprinkle sulphur powder over them, and then speak '" + get(.invocation$, "arrow-hail") + "'. Throw them high up in the air, and watch the hail unfold before thy feet.\"";
+ mesq l("Take %s arrows, sprinkle sulphur powder over them, and then speak '%s'. Throw them high up in the air, and watch the hail unfold before thy feet.", l("fifteen"), b("Frillyar"));
close;
L_L2_almost_done:
mesn l("Magic Sword");
- mes "\"Return to my sister now. I expect that she shall teach thee one more spell.\"";
+ mesq l("Return to my sister now. I expect that she shall teach thee one more spell.");
close;
L_lacking_mobpoints:
@@ -167,7 +167,7 @@ L_lacking_mobpoints:
L_Farewell2:
mesn l("Magic Sword");
- mes "\"Please leave me in peace.\"";
+ mesq l("Please leave me in peace.");
close;
S_Update_Var:
diff --git a/npc/012-3/mana-seed.txt b/npc/012-3/mana-seed.txt
index 8c960a56..ea6dabcf 100644
--- a/npc/012-3/mana-seed.txt
+++ b/npc/012-3/mana-seed.txt
@@ -187,7 +187,7 @@ L_Magic_levelup:
next;
@nr = rand(@visions_nr);
if (@nr == 0)
- mes "FIXME get happy-curse";
+ learnskill SKILL_JOYPLIM;
mes @visions$[@nr];
next;
mes "The image fades.";
diff --git a/npc/017-4/waric.txt b/npc/017-4/waric.txt
index b2508c9d..1ada69ff 100644
--- a/npc/017-4/waric.txt
+++ b/npc/017-4/waric.txt
@@ -242,9 +242,9 @@ L_Next4:
goto L_close;
L_Snakes:
- mes "Waric nods at you.";
+ mesc l("Waric nods at you.");
mesn;
- mes "\"Have you practiced enough?\"";
+ mesq l("Have you practiced enough?");
menu
"Yes, I'm an outstanding Dark Mage!", L_Next5,
"No. I'm too lazy.", L_ComeBackLater;
diff --git a/npc/magic/config.txt b/npc/magic/config.txt
index 2cede16a..a179982c 100644
--- a/npc/magic/config.txt
+++ b/npc/magic/config.txt
@@ -160,13 +160,14 @@ function script SK_summon {
.@amt=getarg(1);
.@mex=getarg(2, 1);
.@sum=getarg(3, true);
+ .@lvl=getskilllv(SKILL_MAGIC);
if ($@GM_OVERRIDE || debug) debugmes "Skill "+@skillId+" Lv "+@skillLv;
- if (ispcdead())
+ if (ispcdead() || !.@lvl || !@skillLv)
return;
if (rand2(10) < abizit()) {
// Summon Magic (with magic level bonus)
- SummonMagic(@skillId, .@mob, .@amt, MAGIC_LVL+@skillLv-1, @skillLv, .@sum);
+ SummonMagic(@skillId, .@mob, .@amt, .@lvl+@skillLv-1, @skillLv, .@sum);
} else if (rand2(10) < abizit()) {
// Re-roll
dispbottom l("You cannot complete the casting correctly!");
diff --git a/npc/magic/final.txt b/npc/magic/final.txt
index e22aa6e7..a4de3bc8 100644
--- a/npc/magic/final.txt
+++ b/npc/magic/final.txt
@@ -82,14 +82,6 @@ function script HUB_SkillInvoke {
////////////////////////////////
/* XXX: Fire Class
// (May burn targets for damage over time)
- case TMW2_FIREBALL:
- .@PW=140+(10*@skillLv);
- .@RG=2+(@skillLv/5);
- // 22% chance, 2.5s
- areaharm(@skillTarget, .@RG, AdjustSpellpower(.@PW), HARM_MAGI, Ele_Fire);
- sc_start SC_BLOODING, 2500, 1, 4200, SCFLAG_NONE, @skillTarget;
- GetManaExp(TMW2_FIREBALL, 2);
- break;
case TMW2_ARMAGEDDON:
.@PW=140+(10*@skillLv);
.@RG=5+(@skillLv/5);
@@ -137,14 +129,6 @@ function script HUB_SkillInvoke {
GetManaExp(@skillId, 1);
break;
////////////////////////////////
- // XXX: Physical Class (Archery)
- case TMW2_ARROWSHOWER:
- .@PW=150+(10*@skillLv);
- .@dmg=AdjustAttackpower(.@PW);
- .@RG=1+(@skillLv/3);
- areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral);
- GetManaExp(@skillId, 1);
- break;
// Summons which never fail
case TMW2_ZARKOR:
SummonMagic(@skillId, CaveMaggot, 2, @skillLv);
diff --git a/npc/magic/level1-summon-maggots.txt b/npc/magic/level1-summon-maggots.txt
new file mode 100644
index 00000000..7ca9f74d
--- /dev/null
+++ b/npc/magic/level1-summon-maggots.txt
@@ -0,0 +1,15 @@
+// The Mana World script
+// Author: Jesusalva <jesusalva@themanaworld.org>
+//
+// Magic Script: SKILL_KALMURK (Level 1)
+// School: Astral 1
+
+function script SK_Kalmurk {
+ delitem Root, 1;
+ delitem .@it, 1;
+ specialeffect(FX_MAGIC_MAGGOT_CAST, AREA, getcharid(3));
+ sleep2(cap_value(5400-AdjustSpellpower(100)-@skillLv*400, 500, 5000));
+ SK_summon(Maggot, 2, 1);
+ return;
+}
+
diff --git a/npc/magic/level2-arrow-hail.txt b/npc/magic/level2-arrow-hail.txt
new file mode 100644
index 00000000..217f7fb0
--- /dev/null
+++ b/npc/magic/level2-arrow-hail.txt
@@ -0,0 +1,44 @@
+// The Mana World script
+// Author: Jesusalva <jesusalva@themanaworld.org>
+//
+// Magic Script: SKILL_FRILLYAR (Level 1)
+// School: War 2
+
+function script SK_Frillyar {
+ // Additional check for ammo
+ .@it=getequipid(EQI_AMMO);
+ if (.@it < 1) {
+ dispbottom l("Please equip your ammo first!");
+ return;
+ }
+ if (countitem(.@it) < 15) {
+ dispbottom l("You need at least %d %s to use this spell!",
+ 15, getitemname(.@it));
+ return;
+ }
+ // Delete items
+ delitem(SulphurPowder, 1);
+ delitem(.@it, 15);
+ // Proccess attack power
+ .@RG=4+(@skillLv/2);
+ .@PW=90+(10*@skillLv);
+ .@PW+=getiteminfo(.@it, ITEMINFO_ATK);
+ // Weather modifiers
+ if ("#WeatherCore"::weather(MASK_RAIN))
+ .@PW-=10;
+ if ("#WeatherCore"::weather(MASK_SANDSTORM))
+ .@PW-=10;
+ if ("#WeatherCore"::weather(MASK_SNOW))
+ .@PW-=10;
+ // Effective magic code
+ .@dmg=AdjustSpellpower(.@PW);
+ .@dmg+=getiteminfo(.@it, ITEMINFO_ATK);
+ specialeffect(FX_MAGIC_AHAIL_CAST, AREA, @skillTarget);
+ areaharm(@skillTarget, .@RG, .@dmg, HARM_PHYS, Ele_Neutral);
+ harm(@skillTarget, .@dmg/20, HARM_MAGI, Ele_Holy);
+ specialeffect(FX_ARROW_HAIL, AREA, @skillTarget);
+ GetManaExp(@skillId, 2);
+ return;
+}
+
+
diff --git a/npc/magic/level2-happy-curse.txt b/npc/magic/level2-happy-curse.txt
new file mode 100644
index 00000000..08987293
--- /dev/null
+++ b/npc/magic/level2-happy-curse.txt
@@ -0,0 +1,30 @@
+// The Mana World script
+// Author: Jesusalva <jesusalva@themanaworld.org>
+//
+// Magic Script: SKILL_JOYPLIM (Level 1)
+// School: General 2
+
+function script SK_Joyplim {
+ delitem GingerBreadMan, 1;
+ .@b=(BL_PC | BL_PET | BL_MER | BL_HOM); // | BL_MOB
+ .@r=3+cap_value(getskilllv(SKILL_MAGIC)+(@skillLv/2), 1, 12); // Your radius
+ .@s=AdjustSpellpower(100); // Your magical stamina
+ .@c=cap_value(11-@skillLv, 1, 10)*2; // MATK stamina cost per char
+ .@e=(getskilllv(SKILL_MAGIC_DARK) ? E_EVIL : E_HAPPY); // Emote
+
+ getmapxy(.@m$, .@x, .@y, 0);
+
+ // TODO: Maybe put this loop in a timer, etc? But... Do we want to?
+ .@c=getunits(.@b, .@mbs, false, .@m$, .@x-.@r, .@y-.@r, .@x+.@r, .@y+.@r);
+ for (.@i = 0; .@i < .@c; .@i++) {
+ unitemote(.@mbs[.@i], E_HAPPY);
+ // Stamina cost
+ .@s-=.@c;
+ if (.@s < 0)
+ break;
+ }
+ specialeffect(FX_MAGIC_JOY_CAST, AREA, getcharid(3));
+ GetManaExp(@skillId, 2);
+ return;
+}
+
diff --git a/npc/scripts.conf b/npc/scripts.conf
index 18d3a1e1..1c17a4a5 100644
--- a/npc/scripts.conf
+++ b/npc/scripts.conf
@@ -76,6 +76,9 @@
"npc/magic/level1-grow-plants.txt",
"npc/magic/level1-lesser-heal.txt",
"npc/magic/level1-magic-blade.txt",
+"npc/magic/level1-summon-maggots.txt",
+"npc/magic/level2-arrow-hail.txt",
+"npc/magic/level2-happy-curse.txt",
"npc/magic/level2-lay-on-hands.txt",
"npc/magic/level2-lightning-strike.txt",
"npc/magic/level2-magic-knuckles.txt",