summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/re/mob_db.conf16
-rw-r--r--npc/006-7/ctrl.txt65
2 files changed, 77 insertions, 4 deletions
diff --git a/db/re/mob_db.conf b/db/re/mob_db.conf
index c8579c2ec..d7bd605c3 100644
--- a/db/re/mob_db.conf
+++ b/db/re/mob_db.conf
@@ -11934,7 +11934,7 @@ mob_db: (
Def: 349
Mdef: 57
Race: 2
- Element: (1, 4)
+ Element: (8, 1)
Stats: {
Str: 99
Agi: 99
@@ -11963,6 +11963,20 @@ mob_db: (
FluoPowder: 900
FluoPowder: 50
}
+ WeaponAttacks: {
+ All: 4000
+ Bows: 2000
+ }
+ EleResist: {
+ Ele_Neutral: 5000
+ Ele_Water: 2500
+ Ele_Fire: 10000
+ Ele_Wind: 10000
+ Ele_Earth: 7500
+ Ele_Holy: 7500
+ Ele_Dark: 7500
+ Ele_Ghost: 7500
+ }
},
// System
{
diff --git a/npc/006-7/ctrl.txt b/npc/006-7/ctrl.txt
index da46197aa..67223e25d 100644
--- a/npc/006-7/ctrl.txt
+++ b/npc/006-7/ctrl.txt
@@ -9,19 +9,76 @@ OnTouch:
if (!$@ICICLE_CHALLENGE)
warp "006-6", 40, 36;
end;
+
+OnRw:
+ getexp 1000000, 0;
+ Mobpt += 10000;
+ dispbottom l("Der Schneemann has been defeated: %s Monster Points gained.", fnum(10000));
+ end;
}
006-7,44,50,0 script Ice Lord NPC_YETIFLY,{
- if (.ticks > gettimetick(2)) end;
+ if (.ticks > gettimetick(2)) {
+ mesn;
+ mesq l("This challenge will be available in %s. Please wait until then.", FuzzyTime(.ticks));
+ close;
+ }
mesn;
mesq l("With Magic and Blades, The Icicle shall break. Do you undertake the challenge?");
mesc l("Advised: 6+ players"), 1;
mesc l("Advised: 1+ mage, 1+ tanker"), 1;
mesc l("Time Limit: 90 minutes"), 1;
+ mesc l("Enter/Leave after start: %s", b(l("NO"))), 1;
next;
- if (askyesno() == ASK_NO) { closeclientdialog; close; }
+ select
+ l("Not yet."),
+ l("Bring it on!"),
+ rif(REBIRTH, l("Bring me, my worst nightmare."));
+ mes "";
+ if (@menu == 1) {
+ closeclientdialog;
+ close;
+ }
.ticks = gettimetick(2) + 5400; // 90 minutes
+ .BOSS = monster("006-7", 44, 36, "Der Schneemann", SnowmanBoss, 1);
+ .@mlt = (@menu == 2 ? 10 : 15);
+
+ setunitdata(.BOSS, UDT_MAXHP, 1000000 * .@mlt / 10);
+ setunitdata(.BOSS, UDT_HP, 1000000 * .@mlt / 10);
+ // Reconfigure the AI
+ .@opt=getunitdata(.BOSS, UDT_MODE);
+ // Disable looting
+ if (.@opt & MD_LOOTER)
+ .@opt=.@opt^MD_LOOTER;
+ // Add knockback immunity
+ .@opt=.@opt|MD_NOKNOCKBACK;
+ // Mark as boss
+ .@opt=.@opt|MD_BOSS;
+ // Mark as aggressive
+ .@opt=.@opt|MD_AGGRESSIVE;
+ .@opt=.@opt|MD_ANGRY;
+ // Make it more op
+ .@opt=.@opt|MD_DETECTOR;
+ .@opt=.@opt|MD_CASTSENSOR_CHASE;
+ .@opt=.@opt|MD_CASTSENSOR_IDLE;
+ .@opt=.@opt|MD_CHANGECHASE;
+ .@opt=.@opt|MD_CHANGETARGET_MELEE;
+ .@opt=.@opt|MD_CHANGETARGET_CHASE;
+ setunitdata(.BOSS, UDT_MODE, .@opt);
+
+ // Nerf the damage, but never miss a hit
+ setunitdata(.BOSS, UDT_ATKMIN, 60 * .@mlt / 10);
+ setunitdata(.BOSS, UDT_ATKMAX, 60 * .@mlt / 10);
+ setunitdata(.BOSS, UDT_ADELAY, 2220 / .@mlt * 10); // 2220 or 1480ms
+ setunitdata(.BOSS, UDT_HIT, 2400);
+
+ // Boosting the defense is not necessary
+ // It nerfs weapons to 40% (bows to 20%)
+ // Then it resists 50% of Neutral element.
+ // Note it is strong against Water (25% dmg)
+ // And weak against Fire (snow) and Wind (100% dmg)
+ // Otherwise, behave as Ghost element
disablenpc .name$;
initnpctimer;
@@ -30,10 +87,12 @@ OnTouch:
// Heart
OnTimer5000:
+ if (!mobcount("006-7", "all"))
+ maptimer2("006-7", 10, "#OutOf0067::OnRw");
if (.ticks < gettimetick(2) || !mobcount("006-7", "all")) {
killmonsterall("006-7");
enablenpc .name$;
- .ticks = gettimetick(2);
+ .ticks = min(.ticks, gettimetick(2) + 1800); // Min. Cooldown: 30 min
.beats = 0;
stopnpctimer;
end;