summaryrefslogtreecommitdiff
path: root/npc/boss/throne.txt
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2019-07-29 20:44:16 -0300
committerJesusaves <cpntb1@ymail.com>2019-07-29 20:44:16 -0300
commit3af9de993f36b69fb7da3c4eacae5e16a5fcc2ec (patch)
tree3958fecb4545194a7ed1eb2141a82668747020d1 /npc/boss/throne.txt
parentcd6610e32f60b51b06e27d6c87900ea021b806a1 (diff)
parent66203e9bba74774457133d8df8e0f7dd7e11c566 (diff)
downloadserverdata-3af9de993f36b69fb7da3c4eacae5e16a5fcc2ec.tar.gz
serverdata-3af9de993f36b69fb7da3c4eacae5e16a5fcc2ec.tar.bz2
serverdata-3af9de993f36b69fb7da3c4eacae5e16a5fcc2ec.tar.xz
serverdata-3af9de993f36b69fb7da3c4eacae5e16a5fcc2ec.zip
Merge branch 'master' into testserver
Diffstat (limited to 'npc/boss/throne.txt')
-rw-r--r--npc/boss/throne.txt145
1 files changed, 144 insertions, 1 deletions
diff --git a/npc/boss/throne.txt b/npc/boss/throne.txt
index e8f375bff..c34cbf6cd 100644
--- a/npc/boss/throne.txt
+++ b/npc/boss/throne.txt
@@ -2,7 +2,7 @@
// Author:
// Jesusalva
// Description:
-// Monster King Throne
+// Monster King Throne ($@MK_CHALLENGE)
boss,45,45,0 script #monsterthrone NPC_HIDDEN,0,0,{
end;
@@ -14,4 +14,147 @@ OnTouch:
dispbottom "The throne is cursed, only the Monster King may seat on it.";
end;
+// Controls the Event
+OnBegin:
+ .CYCLES=0;
+ $@MK_CHALLENGE=true;
+ .MK=monster("boss", 45, 45, "The Monster King", MonsterKing, 1, .name$+"::OnVictory");
+ .@bhp=getunitdata(.MK, UDT_MAXHP);
+ setunitdata(.MK, UDT_MAXHP, .@bhp+50000+2000*.FAILS);
+ setunitdata(.MK, UDT_HP, .@bhp+50000+2000*.FAILS);
+
+ // Spawn reinforcements
+ .@mobId=MonsterLieutenant;
+ .@ts$="Lieutenant";
+ monster("boss", 40, 40, strmobinfo(1, .@mobId), .@mobId, 1, "#SiegeCtrl::On"+.@ts$+"Death");
+ monster("boss", 50, 50, strmobinfo(1, .@mobId), .@mobId, 1, "#SiegeCtrl::On"+.@ts$+"Death");
+ monster("boss", 40, 50, strmobinfo(1, .@mobId), .@mobId, 1, "#SiegeCtrl::On"+.@ts$+"Death");
+ monster("boss", 50, 40, strmobinfo(1, .@mobId), .@mobId, 1, "#SiegeCtrl::On"+.@ts$+"Death");
+
+ initnpctimer;
+ end;
+
+function CheckFinalAssault {
+ if (!siege_calcdiff(5)) {
+ kamibroadcast("You noobs, you all deserve to die!", "Monster King");
+ stopnpctimer;
+ $@MK_CHALLENGE=false;
+ // Clean Up
+ mapwarp("boss", "017-1", 120, 88);
+ killmonsterall("boss");
+ // Raise difficulty
+ .FAILS+=1;
+ // Halt execution
+ end;
+ }
+ return;
}
+
+OnTimer120000:
+ .CYCLES+=1;
+ //areamonster("boss", 20, 20, 70, 70, "Monster King Slave", );
+ // Spawn several monsters on the Boss Room every 2 minutes
+ siege_cast("boss", .name$, .FAILS, TP_TULIM|TP_HURNS|TP_NIVAL);
+ // Spawn an extra mini-boss at minutes: 10 and 30
+ if (.CYCLES == 5) {
+ .@mobId=MonsterColonel;
+ .@ts$="Colonel";
+ monster("boss", 45, 44, strmobinfo(1, .@mobId), .@mobId, 1, "#SiegeCtrl::On"+.@ts$+"Death");
+ }
+ if (.CYCLES == 15) {
+ .@mobId=MonsterGeneral;
+ .@ts$="General";
+ monster("boss", 45, 44, strmobinfo(1, .@mobId), .@mobId, 1, "#SiegeCtrl::On"+.@ts$+"Death");
+ }
+ initnpctimer;
+OnTimer15000:
+ // Each fail raise curse duration in 0.1s - chance of curse is 15% each 15s
+ if (rand2(100) <= 15) {
+ areasc2("boss", 45, 45, 25, 3000+(.FAILS*100), SC_CURSE, BL_PC | BL_HOM | BL_MER);
+ //globalmes("MSG");
+ unittalk(.MK, "Be cursed, you fools! I am the mighty Monster King!!");
+ }
+OnTimer5000:
+OnTimer10000:
+OnTimer20000:
+OnTimer25000:
+OnTimer30000:
+OnTimer35000:
+OnTimer40000:
+OnTimer45000:
+OnTimer50000:
+OnTimer55000:
+OnTimer60000:
+OnTimer65000:
+OnTimer70000:
+OnTimer75000:
+OnTimer80000:
+OnTimer85000:
+OnTimer90000:
+OnTimer95000:
+OnTimer100000:
+OnTimer105000:
+OnTimer110000:
+OnTimer115000:
+ CheckFinalAssault();
+ end;
+
+// Monster King was defeated - game won
+OnVictory:
+ // Not killed by a player? It doesn't counts, then
+ if (!playerattached())
+ end;
+ $@MK_CHALLENGE=false;
+ kamibroadcast("has just defeated the Monster King.", strcharinfo(0));
+ stopnpctimer;
+ mapwarp("boss", "017-1", 120, 88);
+ $GAME_STORYLINE=5;
+ // Without the Monster King to rule monsters... TODO Isbamuth
+ setbattleflag("monster_ai", 0x209);
+ setbattleflag("monster_active_enable", false);
+ setbattleflag("mob_count_rate", 25);
+ charcommand("@reloadbattleconf"); // Careful!
+ donpcevent("@exprate::OnReload");
+ donpcevent("@droprate::OnReload");
+ // Player Reward
+ getitembound(AegisShield, 1, 1);
+ dispbottom l("For defeating the Monster King, you've got the Legendary @@.", getitemlink(AegisShield));
+ dispbottom l("This item cannot be traded normally and is a Legendary Item.");
+ dispbottom l("You can transfer it with \"@grantpower\" command. Please contact a GM for more info.");
+ dispbottom l("Protip: If you plan in selling it, it's adviseable to ask for GM mediation.");
+ end;
+}
+
+// Room Traps, only against players
+boss,0,0,0 script #MKBossTrap01 NPC_TRAP,0,0,{
+ end;
+
+OnTouch:
+ SteelTrap(rand2(10, 20));
+ end;
+
+OnTimer10000:
+ stopnpctimer;
+ setnpctimer 0;
+ setnpcdisplay .name$, NPC_TRAP;
+ //end;
+ // Move the trap away after it disarms
+
+OnMinute14:
+OnMinute26:
+OnMinute40:
+OnMinute54:
+OnInit:
+ .@x=rand2(20,70);
+ .@y=rand2(20,70);
+ movenpc .name$, .@x, .@y;
+ end;
+}
+
+// Create more traps. (They can be on walls)
+boss,0,0,0 duplicate(#MKBossTrap01) #MKBossTrap02 NPC_TRAP,0,0
+boss,0,0,0 duplicate(#MKBossTrap01) #MKBossTrap03 NPC_TRAP,0,0
+boss,0,0,0 duplicate(#MKBossTrap01) #MKBossTrap04 NPC_TRAP,0,0
+boss,0,0,0 duplicate(#MKBossTrap01) #MKBossTrap05 NPC_TRAP,0,0
+
+