// TMW2 scripts.
// Authors:
// Jesusalva
// Description:
// Nivalis Liberation Day
// The Walking Monster King
023-2,121,35,0 script The Monster King#NLib NPC_MONSTERKING,{
end;
OnTouch:
npctalk3 get_race() + "!";
die();
end;
OnInit:
.sex = G_MALE;
.distance = 5;
.sakar = 0;
.MK = 0;
OnHour00:
OnReprocess:
if (!$NLIB_DAY) {
disablenpc .name$;
end;
}
switch ($NLIB_DAY) {
case 1:
movenpc(.name$, 121, 35, DIR_WEST); break;
case 2:
movenpc(.name$, 105, 37, DIR_NORTH); break;
case 3:
movenpc(.name$, 105, 51, DIR_SOUTH); break;
case 4:
movenpc(.name$, 102, 63, DIR_WEST); break;
case 5:
movenpc(.name$, 81, 59, DIR_NORTH); break;
case 6:
movenpc(.name$, 53, 53, DIR_SOUTH); break;
case 7:
movenpc(.name$, 36, 99, DIR_SOUTH); break;
default:
channelmes("#world", "A bug happened: Monster King # Nivalis Liberation Day - Value Out of Range."); disablenpc .name$; break;
}
end;
// Event Handler
L_Finish:
$MANA_BLVL-=10; // Set level to 30
// Just being bigger is not enough. Must be over the double for the advantage draw (about 1 player for 10m)
if (.victory_count > (.defeat_count*2)) {
announce "The fight ends in draw! The Monster King did accomplish what he set, though...", bc_all|bc_npc;
channelmes("#world", "Congratulations for the draw, that was a good fight.");
channelmes("#world", "The Monster King stole whatever he wanted and left.");
// Reproduce the same bonus from Alpha Server
$@EXP_EVENT=25;
donpcevent "@exprate::OnPlayerCall";
$MANA_BLVL-=5; // Set level to 25
} else if (.victory_count < 100) { // 1 player for 5 minutes is enough to prevent this loss
announce "The Monster King, after moping the floor with the players, accomplish what he set, and left...", bc_all|bc_npc;
channelmes("#world", "The players failed miserably in stopping the Monster King.");
// Reproduce the same penalty from Beta Server
$@EXP_EVENT=rand2(-50, -25);
donpcevent "@exprate::OnPlayerCall";
} else {
announce "The fight ends in draw, with advantage to the Monster King...", bc_all|bc_npc;
channelmes("#world", "The players weren't capable to really harm the Monster King.");
}
L_Finish2:
killmonsterall("023-2");
.wcycle=0;
maptimer("023-2", 10, "The Monster King#NLib::OnReturn");
channelmes("#world", "*FINAL SCORE - PLAYERS "+.victory_count+" : "+.defeat_count+" MONSTERS*");
// Game Storyline advances: The Town Blockade Stage is now over
$GAME_STORYLINE=1;
$MK_TEMPVAR=gettimeparam(GETTIME_DAYOFMONTH)+
MK_IDLE_DURATION+rand2(MK_IDLE_VARIATION);
// Clean up the event
$NIVALIS_LIBDATE=gettimetick(2);
$NLIB_DAY=0;
$NLIB_HIGHTIME=0;
$NLIB_HIGHNAME$="";
disablenpc "Lightbringer#NLib";
enablenpc "#019-1_70_21";
enablenpc "#019-2_37_55";
enablenpc "#020-1_70_128";
enablenpc "#020-1_107_55";
removemapflag("019-3", mf_bexp);
removemapflag("019-3", mf_nosave);
removemapflag("020-1", mf_bexp);
removemapflag("020-1", mf_nosave);
removemapflag("023-2", mf_bexp);
removemapflag("023-2", mf_nosave);
removemapflag("023-2", mf_nopenalty);
removemapmask "019-3", MASK_MATTACK;
setmapflag("019-3",mf_bexp,100);
setmapflag("020-1",mf_bexp,100);
setmapflag("023-2",mf_bexp,100);
stopnpctimer;
end;
OnTimer3000:
.wcycle+=3;
.@pl=getareausers("023-2", 21, 109, 31, 114);
.@pla=getmapusers("023-2");
if (.@pl <= 0 && .@pla > 0)
mapannounce "023-2", "##1WARNING: Players outside the Monster King room counts toward DEFEAT count!", 0;
.victory_count+=.@pl;
// Processment
if (.@pl <= 0) {
.defeat_count+=1;
} else if (.wcycle % 30 == 3) {
areamonster "023-2", 21, 109, 31, 114, "Monster", any(AngryScorpion, BlackSlime, BlackScorpion, Wolvern, BlueSlime, SlimeBlast, CaveMaggot), .@pl;
} else if (.wcycle % 30 == 18) {
areamonster "023-2", 21, 109, 31, 114, "Monster", any(BlackSlime, BlueSlime, SlimeBlast), 1; // PS. Drop “Demure Dark Soul” ¬.¬
} else if (.wcycle % 60 == 0) {
mapannounce "023-2", str(15-(.wcycle/60))+" minute(s) remaining", 0;
}
if (.wcycle >= 900) goto L_Finish;
initnpctimer;
// Andrei Sakar's Fake Chant
if (.wcycle % 15 < 3) {
unittalk(.sakar, sprintf("Come %s %s, and %s %s!", any("great", "magnificent"), any("light", "oath", "sacrament"), any("devastate", "annihilate", "obliterate", "liquidate", "eviscerate"), "nearby"));
harm(.MK, 100, HARM_MISC, Ele_Holy, .sakar);
}
end;
OnVictory:
channelmes("#world", "The Monster King was defeated by players, and had to flee!");
channelmes("#world", "Getting magic is now easier!");
announce "Players have defeated the Monster King! He fleed from the cave after leaving a decoy!", bc_all|bc_npc;
$MANA_BLVL-=10; // Set level to 20
$@EXP_EVENT=25;
donpcevent "@exprate::OnPlayerCall";
goto L_Finish2;
end;
OnBegin:
.defeat_count=0;
.victory_count=0;
.wcycle=0;
channelmes("#world", "The fight against the Monster King ends in 15 minutes. If he is forced to flee, that'll result as victory.");
channelmes("#world", "Each cycle there are players fighting against him will result in victory points. The opposite will result in defeat points.");
channelmes("#world", "More players fighting will result in more victory points. This may affect drastically the result.");
channelmes("#world", "Defeat, decided by a certain threshold of points, will result in MAGIC BEING PERMANENTLY HARDER TO OBTAIN.");
announce "The Alliance attacks the Monster King! 15 minutes! Rules in #world", bc_all|bc_npc;
movenpc(.name$, 0, 0);
.MK=monster("023-2", 24, 111, "The Monster King", MonsterKing, 1, "The Monster King#NLib::OnVictory");
.sakar=monster("023-2", 30, 109, "Andrei Sakar", AndreiSakar, 1, "The Monster King#NLib::OnSkip", Size_Medium, 1);
areamonster "023-2", 21, 109, 31, 114, "Monster", AngryScorpion, 1;
areamonster "023-2", 21, 109, 31, 114, "Monster", BlackSlime, 2;
areamonster "023-2", 21, 109, 31, 114, "Monster", BlueSlime, 1;
areamonster "023-2", 21, 109, 31, 114, "Monster", CaveMaggot, 1;
initnpctimer;
end;
OnReturn:
warp "019-2", 43, 55;
end;
OnSkip:
end;
}
// Floor triggers
023-2,121,35,0 script #NLIB_T01 NPC_HIDDEN,1,2,{
OnTouch:
if ($NLIB_DAY == 1) {
@QNL3=1;
dispbottom l("I've found the Monster King.");
}
end;
}
023-2,110,36,0 script #NLIB_T02 NPC_HIDDEN,2,2,{
OnTouch:
if ($NLIB_DAY == 2) {
@QNL3=1;
dispbottom l("I've found the Monster King.");
} else if ($NLIB_DAY < 2) {
slide 114, 36;
dispbottom l("I should not veer off too much the path.");
}
end;
}
023-2,105,50,0 script #NLIB_T03 NPC_HIDDEN,2,2,{
OnTouch:
if ($NLIB_DAY == 3) {
@QNL3=1;
dispbottom l("I've found the Monster King.");
} else if ($NLIB_DAY < 3) {
slide 104, 48;
dispbottom l("I should not veer off too much the path.");
}
end;
}
023-2,104,62,0 script #NLIB_T04 NPC_HIDDEN,0,0,{
OnTouch:
if ($NLIB_DAY == 4) {
@QNL3=1;
dispbottom l("I've found the Monster King.");
} else if ($NLIB_DAY < 4) {
slide 104, 61;
dispbottom l("I should not veer off too much the path.");
}
end;
}
023-2,86,59,0 script #NLIB_T05 NPC_HIDDEN,2,5,{
OnTouch:
if ($NLIB_DAY == 5) {
@QNL3=1;
dispbottom l("I've found the Monster King.");
} else if ($NLIB_DAY < 5) {
slide 91, 61;
dispbottom l("I should not veer off too much the path.");
}
end;
}
023-2,53,49,0 script #NLIB_T06 NPC_HIDDEN,0,5,{
OnTouch:
if ($NLIB_DAY == 6) {
@QNL3=1;
dispbottom l("I've found the Monster King.");
} else if ($NLIB_DAY < 6) {
slide 55, 48;
dispbottom l("I should not veer off too much the path.");
}
end;
}
023-2,35,90,0 script #NLIB_T07 NPC_HIDDEN,1,3,{
OnTouch:
if ((gettime(2) < 25 || gettime(2) > 45) && !$@GM_OVERRIDE) {
slide 39, 89;
dispbottom l("I should not go ahead... yet.");
}
end;
}