summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2021-12-25 14:24:54 -0300
committerJesusaves <cpntb1@ymail.com>2021-12-25 14:24:54 -0300
commitaf1a78ecf9fc2e316f8d71b2d50ddbbead6104ac (patch)
treeb502d3de7b4c5781842d78ec9e820bcabf34d893 /npc
parentb44b9cd3b2a87aedbf8bf8623f5bf857e06481b3 (diff)
downloadserverdata-af1a78ecf9fc2e316f8d71b2d50ddbbead6104ac.tar.gz
serverdata-af1a78ecf9fc2e316f8d71b2d50ddbbead6104ac.tar.bz2
serverdata-af1a78ecf9fc2e316f8d71b2d50ddbbead6104ac.tar.xz
serverdata-af1a78ecf9fc2e316f8d71b2d50ddbbead6104ac.zip
It is coded. Now it only needs testing.
Diffstat (limited to 'npc')
-rw-r--r--npc/006-7/ctrl.txt61
1 files changed, 47 insertions, 14 deletions
diff --git a/npc/006-7/ctrl.txt b/npc/006-7/ctrl.txt
index 8271b1634..f7cec590d 100644
--- a/npc/006-7/ctrl.txt
+++ b/npc/006-7/ctrl.txt
@@ -40,13 +40,21 @@ OnRw:
closeclientdialog;
close;
}
+ if (@menu == 2)
+ .hard = false;
+ else
+ .hard = true;
+ // Der Schneemann
.ticks = gettimetick(2) + 5400; // 90 minutes
- .BOSS = monster("006-7", 44, 36, "Der Schneemann", SnowmanBoss, 1);
- .@mlt = (@menu == 2 ? 10 : 15);
+ .BOSS = monster("006-7", 44, 36, "The Icicle", SnowmanBoss, 1);
+ .@mlt = (.hard ? 15 : 10);
+ // Basic attributes
setunitdata(.BOSS, UDT_MAXHP, 1000000 * .@mlt / 10); // 1M ~ 1.5M
setunitdata(.BOSS, UDT_HP, 1000000 * .@mlt / 10);
+ setunitdata(.BOSS, UDT_ATKRANGE, (.hard ? 7 : 6));
+
// Reconfigure the AI
.@opt=getunitdata(.BOSS, UDT_MODE);
// Disable looting
@@ -87,7 +95,11 @@ OnRw:
closeclientdialog;
close;
-// Heart
+// Fail-safe Mechanism (will never happen)
+OnTimer15000:
+OnTimer10000:
+ consolewarn("Warning, fail-safe mechanism triggered to Icicle.");
+// This is the boss' core
OnTimer5000:
/* Maybe the fight is over */
if (!mobcount("006-7", "all"))
@@ -238,6 +250,28 @@ OnTimer5000:
case 5:
case 11:
case 17:
+ specialeffect(60, AREA, .BOSS);
+ sleep(500);
+ switch (rand2(3)) {
+ case 1:
+ unittalk(.BOSS, "I shall ##Bpoison##b you all!");
+ .@sc = (.@hp < 1 ? SC_DPOISON : SC_POISON);
+ break;
+ case 2:
+ unittalk(.BOSS, "I shall ##Bhurt##b you all!");
+ .@sc = SC_BLOODING;
+ break;
+ case 3:
+ unittalk(.BOSS, "I shall ##Bsilence##b you all!");
+ .@sc = SC_SILENCE;
+ break;
+ default:
+ unittalk(.BOSS, "I shall ##Bcripple##b you all!");
+ .@sc = SC_BLIND;
+ break;
+ }
+ areasc((.hard ? 7 : 6), 45000, .@sc, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .BOSS, 95000);
+ areaharm(.BOSS, (.hard ? 7 : 6), 100, HARM_MAGI, Ele_Water, "filter_always", BL_PC|BL_MER|BL_HOM);
break;
}
// Strong AOE: Every 3 minutes (case = 0)
@@ -245,35 +279,35 @@ OnTimer5000:
if (.beats % 18 == 0) {
specialeffect(66, AREA, .BOSS);
unittalk(.BOSS, "I am the Icicle, the immortal.");
- sleep(1500);
+ sleep((.hard ? 1000 : 1500));
specialeffect(700, AREA, .BOSS);
unittalk(.BOSS, "You're no match for me, so...");
- sleep(1500);
+ sleep((.hard ? 1000 : 1500));
specialeffect(700, AREA, .BOSS);
if (.@hp <= 3) {
unittalk(.BOSS, "Perish! ##BSnowstorm##b!");
- .@dmg=rand2(750, 1000);
+ .@dmg=rand2(900, 1100);
areasc(3, 5000, SC_FREEZE, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .BOSS, 2000);
areasc(6, 10000, SC_BLIND, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .BOSS, 2000);
} else if (.@hp <= 7) {
unittalk(.BOSS, "Perish! ##BBlizzard##b!");
- .@dmg=rand2(500, 750);
+ .@dmg=rand2(650, 900);
areasc(3, 5000, SC_FREEZE, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .BOSS, 1500);
} else {
unittalk(.BOSS, "Perish! ##BShattering Winds##b!");
- .@dmg=rand2(350, 500);
+ .@dmg=rand2(400, 650);
}
/* Three blocks */
specialeffect(66, AREA, .BOSS);
- areaharm(.BOSS, 6, .@dmg, HARM_MAGI, Ele_Neutral, "filter_always", BL_PC|BL_MER|BL_HOM);
+ areaharm(.BOSS, (.hard ? 7 : 6), .@dmg, HARM_MAGI, Ele_Neutral, "filter_always", BL_PC|BL_MER|BL_HOM);
sleep(500);
specialeffect(66, AREA, .BOSS);
- areaharm(.BOSS, 12, .@dmg, HARM_MAGI, Ele_Water, "filter_always", BL_PC|BL_MER|BL_HOM);
+ areaharm(.BOSS, (.hard ? 18 : 12), .@dmg, HARM_MAGI, Ele_Water, "filter_always", BL_PC|BL_MER|BL_HOM);
sleep(500);
specialeffect(66, AREA, .BOSS);
specialeffect(312, AREA, .BOSS);
- areaharm(.BOSS, 18, .@dmg, HARM_MAGI, Ele_Holy, "filter_always", BL_PC|BL_MER|BL_HOM);
- areasc(18, .@dmg*rand2(50, 100), SC_COLD, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .BOSS, 10001 - (.@hp * 1000));
+ areaharm(.BOSS, (.hard ? 24 : 18), .@dmg, HARM_MAGI, Ele_Holy, "filter_always", BL_PC|BL_MER|BL_HOM);
+ areasc((.hard ? 24 : 18), .@dmg*rand2(50, 100), SC_COLD, BL_PC|BL_HOM|BL_MER, 1, "filter_always", .BOSS, 10001 - (.@hp * 1000));
}
initnpctimer;
@@ -283,8 +317,7 @@ OnInit:
.distance = 4;
.ticks = gettimetick(2);
.beats = 0;
- .mvp = 0;
- .def = 0;
+ .hard = 0;
end;
}