diff options
Diffstat (limited to 'npc')
-rw-r--r-- | npc/006-7/ctrl.txt | 61 |
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; } |