From c079edf4b4fcdc64700ade996d9e88f6da26de70 Mon Sep 17 00:00:00 2001 From: Jesusaves Date: Wed, 29 Apr 2020 02:28:45 -0300 Subject: Provide minimum functionality --- npc/042-2/boss.txt | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'npc/042-2') diff --git a/npc/042-2/boss.txt b/npc/042-2/boss.txt index 6698d31cb..49219e9c5 100644 --- a/npc/042-2/boss.txt +++ b/npc/042-2/boss.txt @@ -6,6 +6,7 @@ // Basement Boss Fight 042-2,41,22,0 script #KDoor0422 NPC_HIDDEN,0,0,{ + function kdoor0422Spawn; end; OnTouch: @@ -26,6 +27,10 @@ OnArrival: percentheal -100, -100; if (getmap() != "042-2@"+.@g) end; + if ($@KAMELOT_WAVE[.@g] != 3) + end; + $@KAMELOT_WAVE[.@g]+=1; + initnpctimer; //if ($@KAMELOT_WAVE == 0) // goto OnKillMob; // TODO: Fire dialog @@ -33,6 +38,16 @@ OnArrival: // ... end; +OnTimer1000: + .@m$=instance_mapname("042-2"); + .@n$=instance_npcname(.name$); + mapannounce .@m$, "??? : Where's Micksha? WHRE IS ARTHUR MICKSHA", 0; + // 2 is meaningless, as we're not using their acc ids, but sounded faster + getguildmember(.@g, 2); + .@gcount=$@guildmembercount; + kdoor0422Spawn(.@gcount*2, 20, 24, 59, 59); + end; + OnKillMob: if (!playerattached()) end; @@ -66,6 +81,51 @@ OnKillBoss: // TODO: maptimer to give EXP to helpers/survivors end; +function kdoor0422Spawn { + .@label$=instance_npcname(.name$)+"::OnKillMob"; + .@gcount=getarg(0); + .@x1=getarg(1); + .@y1=getarg(2); + .@x2=getarg(3); + .@y2=getarg(4); + .@g=getcharid(2); + if (.@g < 1) percentheal -100, -100; + .@avg=$KAMELOT_MX[.@g]; + .@m$=getmap(); + freeloop(true); + for (.@i=0; .@i < .@gcount; .@i++) { + .@mobId=any(CursedSoldier, CursedArcher); // 50-50 ratio + .@mob=areamonster(.@m$, 21, 24, 59, 99, strmobinfo(1, .@mobId), .@mobId, 1, .@label$); + // Reconfigure the monster + setunitdata(.@mob, UDT_LEVEL, .@avg); + setunitdata(.@mob, UDT_STR, 1+.@avg/4); + setunitdata(.@mob, UDT_AGI, 1+.@avg/4); + setunitdata(.@mob, UDT_VIT, 1+.@avg/4); + setunitdata(.@mob, UDT_INT, 1+.@avg/4); + setunitdata(.@mob, UDT_DEX, 1+.@avg/4); + setunitdata(.@mob, UDT_LUK, 1+.@avg/4); + setunitdata(.@mob, UDT_ADELAY, 1672); + setunitdata(.@mob, UDT_ATKRANGE, (.@mobId == CursedArcher ? any(6,7) : any(1,2))); + // Battle Status + setunitdata(.@mob, UDT_MAXHP, .@avg*33); + setunitdata(.@mob, UDT_HP, .@avg*33); + setunitdata(.@mob, UDT_ATKMIN, .@avg*45/10); + setunitdata(.@mob, UDT_ATKMAX, .@avg*65/10); + setunitdata(.@mob, UDT_DEF, 1+.@avg*9/10); + setunitdata(.@mob, UDT_MDEF, 1+.@avg*5/10); + setunitdata(.@mob, UDT_HIT, .@avg*4); // Advised: x3 + setunitdata(.@mob, UDT_FLEE, .@avg*35/10); // Advised: x4 + // Critical calculation + .@min=2; + .@max=max(.@min, min(25, .@avg/5)); + setunitdata(.@mob, UDT_CRIT, rand2(.@min, .@max)); + // Loop through + } + freeloop(false); + return; +} + +// Script end } -- cgit v1.2.3-60-g2f50