summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2020-04-29 04:58:57 -0300
committerJesusaves <cpntb1@ymail.com>2020-04-29 04:58:57 -0300
commitd2a88d6620167504ee6f37e572b117fdf7190f9c (patch)
tree757ab91c9ab12fddf87446864d37f47738e71f9a /npc
parent5ac010ea65c20843f5bb5fd61cffd4eb8643946e (diff)
downloadserverdata-d2a88d6620167504ee6f37e572b117fdf7190f9c.tar.gz
serverdata-d2a88d6620167504ee6f37e572b117fdf7190f9c.tar.bz2
serverdata-d2a88d6620167504ee6f37e572b117fdf7190f9c.tar.xz
serverdata-d2a88d6620167504ee6f37e572b117fdf7190f9c.zip
General Krukan Boss Battle
Diffstat (limited to 'npc')
-rw-r--r--npc/042-1/door.txt4
-rw-r--r--npc/042-2/boss.txt98
2 files changed, 92 insertions, 10 deletions
diff --git a/npc/042-1/door.txt b/npc/042-1/door.txt
index c6d21551b..d884b1e30 100644
--- a/npc/042-1/door.txt
+++ b/npc/042-1/door.txt
@@ -160,8 +160,8 @@ OnTimer10000:
setunitdata(.@mob, UDT_ADELAY, 1672);
setunitdata(.@mob, UDT_ATKRANGE, (.@mobId == CursedArcher ? any(6,7,8) : 2));
// Battle Status
- setunitdata(.@mob, UDT_MAXHP, .@avg*50);
- setunitdata(.@mob, UDT_HP, .@avg*50);
+ setunitdata(.@mob, UDT_MAXHP, .@avg*150);
+ setunitdata(.@mob, UDT_HP, .@avg*150);
setunitdata(.@mob, UDT_ATKMIN, .@avg*5);
setunitdata(.@mob, UDT_ATKMAX, .@avg*7);
setunitdata(.@mob, UDT_DEF, 1+.@avg*11/10);
diff --git a/npc/042-2/boss.txt b/npc/042-2/boss.txt
index 49e31f28a..75fcfe1b0 100644
--- a/npc/042-2/boss.txt
+++ b/npc/042-2/boss.txt
@@ -40,28 +40,109 @@ OnArrival:
OnTimer1000:
.@m$=instance_mapname("042-2");
- mapannounce .@m$, "??? : Where's Micksha? WHRE IS ARTHUR MICKSHA??", 0;
+ mapannounce .@m$, "??? : What's this? Why do I hear a commotion up there??", 0;
.@gcount=$KAMELOT_PC[.@g];
- kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59);
+ kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59); // Prologue monsters
end;
OnTimer30000:
.@m$=instance_mapname("042-2");
- mapannounce .@m$, "??? : MICKSHAAAAAAA!! YOU NEED TO FIX STUFF!!", 0;
+ mapannounce .@m$, "??? : WHAT?! It is not possible. Who are you, and how did you manage to come down here?", 0;
.@gcount=$KAMELOT_PC[.@g];
- kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59);
+ end;
+
+OnTimer35000:
+ .@m$=instance_mapname("042-2");
+ .@n$=instance_npcname(.name$);
+ mapannounce .@m$, "??? : The sheer power of our lord should prevent anyone not under his control to go here.", 0;
+ maptimer .@m$, 5000, .@n$+"::OnVerifyIntent";
end;
OnTimer60000:
.@m$=instance_mapname("042-2");
+ mapannounce .@m$, "??? : HAHAHA! Meh, you will die anyways, so I can tell you that you never will even see our Lord.", 0;
+ end;
+
+OnTimer67000:
+ .@m$=instance_mapname("042-2");
+ mapannounce .@m$, "??? : You require the key hidden in the caves, additionally you must overcome the magical seal.", 0;
+ end;
+
+OnTimer74000:
+ .@m$=instance_mapname("042-2");
+ mapannounce .@m$, "??? : Both is impossible for weaklings like you lot.", 0;
+ end;
+
+OnTimer80000:
+ .@m$=instance_mapname("042-2");
+ mapannounce .@m$, "General Krukan : Both is impossible for weaklings like you lot. Minions, ATTACK!", 0;
+ kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59);
+ end;
+
+OnTimer100000:
+ .@m$=instance_mapname("042-2");
+ mapannounce .@m$, "General Krukan : MUhahahahaha! Minions, Dispose of these Adventurers! Kill them already!", 0;
+ kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59);
+ end;
+
+OnTimer120000:
+ .@m$=instance_mapname("042-2");
+ mapannounce .@m$, "General Krukan : *facepalm* Now, you're just being pathetic minions. How about you try a different approach and kill them already!", 0;
+ kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59);
+ end;
+
+OnTimer180000:
+ .@m$=instance_mapname("042-2");
.@n$=instance_npcname(.name$);
- mapannounce .@m$, "General Krukan : NO WAY I'M GOING OUT UNTIL I'M FIXED!!!!", 0;
+ mapannounce .@m$, "General Krukan : Looks like if you want something done right you have to do it yourself. Charge!", 0;
.@gcount=$KAMELOT_PC[.@g];
kdoor0422Spawn(.@gcount*3, 20, 24, 59, 59);
- .@mob=monster(.@m$, 34, 26, strmobinfo(1, GeneralKrukan), GeneralKrukan, 1, .@n$+"::OnKillBoss"); // FIXME
+ .@mob=monster(.@m$, 34, 26, strmobinfo(1, GeneralKrukan), GeneralKrukan, 1, .@n$+"::OnKillBoss");
+ // Reconfigure the monster
+ setunitdata(.@mob, UDT_LEVEL, .@avg);
+ setunitdata(.@mob, UDT_STR, 1+.@avg/3);
+ setunitdata(.@mob, UDT_AGI, 1+.@avg/3);
+ setunitdata(.@mob, UDT_VIT, 1+.@avg/3);
+ setunitdata(.@mob, UDT_INT, 1+.@avg/3);
+ setunitdata(.@mob, UDT_DEX, 1+.@avg/3);
+ setunitdata(.@mob, UDT_LUK, 1+.@avg/3);
+ setunitdata(.@mob, UDT_ADELAY, 1372);
+ setunitdata(.@mob, UDT_ATKRANGE, 3);
+ // Battle Status
+ setunitdata(.@mob, UDT_MAXHP, .@avg*300);
+ setunitdata(.@mob, UDT_HP, .@avg*400);
+ setunitdata(.@mob, UDT_ATKMIN, .@avg*65/10);
+ setunitdata(.@mob, UDT_ATKMAX, .@avg*85/10);
+ setunitdata(.@mob, UDT_DEF, 1+.@avg);
+ setunitdata(.@mob, UDT_MDEF, 1+.@avg*8/10);
+ setunitdata(.@mob, UDT_HIT, .@avg*12); // Advised: x3
+ setunitdata(.@mob, UDT_FLEE, .@avg*39/10); // Advised: x4
+ // Critical calculation
+ .@min=15;
+ .@max=max(.@min, min(50, .@avg/4));
+ setunitdata(.@mob, UDT_CRIT, rand2(.@min, .@max));
+ // Loop through
+ setd("$@GTEMP_"+.@m$, .@mob);
+ setd("$@GTEMP1_"+.@m$, 10);
+ setd("$@GTEMP2_"+.@m$, .@gdcount);
+ end;
+
+OnTimer185000:
+ .@m$=instance_mapname("042-2");
+ .@mob=getd("$@GTEMP_"+.@m$);
+ .@gdcount=getd("$@GTEMP2_"+.@m$);
+ .@ratio=getunitdata(.@mob, UDT_HP)*10/getunitdata(.@mob, UDT_MAXHP);
+ if (.@ratio < getd("$@GTEMP1_"+.@m$)) {
+ mapannounce .@m$, "General Krukan : "+any("Charge!", "To the Abyss with you already!", "Kill them already!", "More of them are coming!", "Minions, ATTACK!"), 0;
+ kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59);
+ setd("$@GTEMP1_"+.@m$, .@ratio);
+ }
+ setnpctimer 180001;
end;
OnVerifyIntent:
+ .@g=getcharid(2);
+ if (.@g < 1) percentheal -100, -100;
mesq l("Who are you, and how did you manage to come down here? The sheer power of our Lord prevents anyone not under his control to go here.");
select
l("We are strong fighters, and we want to free the King from his obsession."),
@@ -96,6 +177,9 @@ OnKillMob:
end;
OnKillBoss:
+ setd("$@GTEMP_"+.@m$, 0);
+ setd("$@GTEMP1_"+.@m$, 0);
+ setd("$@GTEMP2_"+.@m$, 0);
.@g=getcharid(2);
dispbottom l("This is all in KAMELOT for now.");
$KAMELOT_QUEST[.@g]=$KAMELOT_QUEST[.@g]|4; // FIXME
@@ -129,8 +213,6 @@ function kdoor0422Spawn {
.@y1=getarg(2);
.@x2=getarg(3);
.@y2=getarg(4);
- .@g=getcharid(2);
- if (.@g < 1) percentheal -100, -100;
.@avg=$KAMELOT_MX[.@g];
.@m$=getmap();
freeloop(true);