diff options
author | Jesusaves <cpntb1@ymail.com> | 2019-07-29 20:44:16 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2019-07-29 20:44:16 -0300 |
commit | 3af9de993f36b69fb7da3c4eacae5e16a5fcc2ec (patch) | |
tree | 3958fecb4545194a7ed1eb2141a82668747020d1 /npc/boss/throne.txt | |
parent | cd6610e32f60b51b06e27d6c87900ea021b806a1 (diff) | |
parent | 66203e9bba74774457133d8df8e0f7dd7e11c566 (diff) | |
download | serverdata-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.txt | 145 |
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 + + |