summaryrefslogtreecommitdiff
path: root/npc
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2020-04-30 00:26:59 -0300
committerJesusaves <cpntb1@ymail.com>2020-04-30 00:26:59 -0300
commit6efb97a3aa229315d7c927d876898c6d2863eabd (patch)
tree1703df9ed43201eb8b49c3690263174c6a0000c9 /npc
parente5b2352f872148d5e89922b9d19399308c10963c (diff)
downloadserverdata-6efb97a3aa229315d7c927d876898c6d2863eabd.tar.gz
serverdata-6efb97a3aa229315d7c927d876898c6d2863eabd.tar.bz2
serverdata-6efb97a3aa229315d7c927d876898c6d2863eabd.tar.xz
serverdata-6efb97a3aa229315d7c927d876898c6d2863eabd.zip
This should warrant players to be arrested, finishing the jail as well.
After this, players can go back and fight Razha (not advised!!) Or they can go forward and step on Kamelot Sewers for the first time...
Diffstat (limited to 'npc')
-rw-r--r--npc/042-2/boss.txt118
-rw-r--r--npc/042-3/jail.txt16
2 files changed, 125 insertions, 9 deletions
diff --git a/npc/042-2/boss.txt b/npc/042-2/boss.txt
index 7a3ef4599..3479b7f2c 100644
--- a/npc/042-2/boss.txt
+++ b/npc/042-2/boss.txt
@@ -16,6 +16,7 @@
OnTouch:
.@label$=instance_npcname(.name$)+"::OnKillBoss";
.@g=getcharid(2);
+ if (.@g < 1) percentheal -100, -100;
if (($KAMELOT_QUEST[.@g] & 4) && !mobcount(getmap(), .@label$)) {
warp "042-3@"+.@g, 58, 139;
} else {
@@ -191,6 +192,8 @@ OnKillMob:
OnKillBoss:
.@m$=instance_mapname("042-2");
+ .@n$=instance_npcname(.name$);
+ stopnpctimer;
setd("$@GTEMP_"+.@m$, 0);
setd("$@GTEMP_HP_"+.@m$, 0);
setd("$@GTEMP_PC_"+.@m$, 0);
@@ -214,11 +217,120 @@ OnKillBoss:
.@gmb=getcharid(0, .@gm$);
if (!isloggedin(.@gma, .@gmb)) end;
message .@gm$, strcharinfo(0)+" defeated Krukan: Guild GP +"+.@ggp+" Guild XP +"+.@gxp;
+ // Arrest scene + exp
+ maptimer .@m$, 1500, .@n$+"::OnReward";
+ setd("$@GTEMP_"+.@m$, $KAMELOT_ID[.@g]);
+ setnpctimer 1000000; // Prefix 1M
+ startnpctimer;
+ end;
+
+
+///////////////////////////////////////////////////////////////////////
+OnTimer1002000:
+ .@m$=instance_mapname("042-2");
+ .@n$=instance_npcname(.name$);
+ // Bring Razha (the only mob with fixed difficulty in Kamelot)
+ .@raz=monster(.@m$, 41, 23, strmobinfo(1, GeneralRazha), GeneralRazha, 1,
+ .@n$+"::OnOptionalBoss");
+ // Configure the optional boss
+ setunitdata(.@raz, UDT_LEVEL, 150);
+ setunitdata(.@raz, UDT_STR, 150);
+ setunitdata(.@raz, UDT_AGI, 150);
+ setunitdata(.@raz, UDT_VIT, 150);
+ setunitdata(.@raz, UDT_INT, 150);
+ setunitdata(.@raz, UDT_DEX, 150);
+ setunitdata(.@raz, UDT_LUK, 150);
+ setunitdata(.@raz, UDT_ADELAY, 1072);
+ setunitdata(.@raz, UDT_ATKRANGE, 3);
+ // Battle Status
+ setunitdata(.@raz, UDT_MAXHP, 150000);
+ setunitdata(.@raz, UDT_HP, 150000);
+ setunitdata(.@raz, UDT_ATKMIN, 400);
+ setunitdata(.@raz, UDT_ATKMAX, 750);
+ setunitdata(.@raz, UDT_DEF, 300);
+ setunitdata(.@raz, UDT_MDEF, 300);
+ setunitdata(.@raz, UDT_HIT, 32767); // Advised: x3
+ setunitdata(.@raz, UDT_FLEE, 420); // Advised: x4
+ setunitdata(.@raz, UDT_CRIT, 70);
+ // Loop through
+
+ sc_start(SC_STUN, 15000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@raz);
+ unittalk(.@raz, "What is happening here??");
+ mapannounce .@m$, "General Razha : ##1What's happening here??", 0;
+ end;
+
+OnTimer1007000:
+ .@m$=instance_mapname("042-2");
+ mapannounce .@m$, "General Razha : GUARDS!!", 0;
+ end;
+
+OnTimer1007500:
+ .@m$=instance_mapname("042-2");
+ .@r1=monster(.@m$, 40, 24, strmobinfo(1, CursedSoldier), CursedSoldier, 1);
+ .@r2=monster(.@m$, 42, 24, strmobinfo(1, CursedArcher), CursedArcher, 1);
+ sc_start(SC_STUN, 15000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@r1);
+ sc_start(SC_STUN, 15000, 1, 10000, SCFLAG_NOAVOID|SCFLAG_FIXEDTICK, .@r2);
+ kdoor0422Spawn(49, 20, 24, 59, 59); // 1225 tiles, 1 per 25 tiles
+ end;
+
+OnTimer1012000:
+ .@m$=instance_mapname("042-2");
+ mapannounce .@m$, "General Razha : Arrest them all!!", 0;
+ end;
+
+OnTimer1015000:
+ .@m$=instance_mapname("042-2");
+ .@t$=instance_mapname("042-3");
+ .@n$=instance_npcname("#KSlimeSpawn", getd("$@GTEMP_"+.@m$));
+ setarray .@x, 33, 84, 41, 74, 36, 57, 79, 43, 24, 86, 59, 38;
+ setarray .@y, 135, 127, 119, 107, 96, 84, 63, 67, 67, 22, 49, 27;
+ .@c=getunits(BL_PC, .@unt, false, .@m$, 20, 24, 59, 59);
+ for (.@i = 0; .@i < .@c; .@i++) {
+ specialeffect(FX_HIT, AREA, .@unt[.@i]);
+ .@v = (.@i % 12);
+ .@r=attachrid(.@unt[.@i]);
+ if (.@r) {
+ warp .@t$, .@x[.@v], .@y[.@v];
+ if (!countitem(Lockpicks))
+ addtimer 700, .@n$+"::OnFirstSlime";
+ setpcblock(255, false);
+ } else {
+ unitwarp(.@unt[.@i], .@t$, .@x[.@v], .@y[.@v]); // And good luck D:
+ debugmes "FATAL: Could not attach: %d", .@unt[.@i];
+ }
+ }
+ setd("$@GTEMP_"+.@m$, 0);
stopnpctimer;
+ end;
- // TODO: maptimer to give EXP to helpers/survivors
- // TODO: Arrest scene
- // TODO: Actual arresting
+OnReward:
+ .@g=getcharid(2);
+ if (.@g < 1) percentheal -100, -100;
+ setpcblock(255, true);
+ getitem GuildCoin, min(1, $KAMELOT_MX[.@g]/25);
+ getexp $KAMELOT_MX[.@g]*50, $KAMELOT_MX[.@g]*10;
+ dispbottom l("Wait- Something is happening!");
+ end;
+
+OnOptionalBoss:
+ .@g=getcharid(2);
+ // Player Reward for completing this stage
+ getitem GuildCoin, 5;
+ getexp 50000, 10000;
+ // Guild Reward for completing this stage
+ .@ggp=12000;
+ .@gxp=100000;
+ $GUILD_BANK[.@g]+=.@ggp;
+ guildgetexp(.@gxp); // 10xp per player average level (max 1000/1500)
+ // Announce
+ mapannounce getmap(), strcharinfo(0)+" has defeated Razha!", 0;
+ // Guild Master Notification
+ .@gm$=getguildmaster(.@g);
+ if (!getcharid(3, .@gm$)) end;
+ .@gma=getcharid(3, .@gm$);
+ .@gmb=getcharid(0, .@gm$);
+ if (!isloggedin(.@gma, .@gmb)) end;
+ message .@gm$, strcharinfo(0)+" defeated Razha: Guild GP +"+.@ggp+" Guild XP +"+.@gxp;
end;
function kdoor0422Spawn {
diff --git a/npc/042-3/jail.txt b/npc/042-3/jail.txt
index 9c6f065b3..5108d459a 100644
--- a/npc/042-3/jail.txt
+++ b/npc/042-3/jail.txt
@@ -16,18 +16,22 @@ OnKillSlime:
if (@lockpicks)
end;
if (rand2(10000) > 1000) {
- getmapxy(.@m$, .@x, .@y, 0);
- sleep2(1800);
- .@mob=monster(.@m$, .@x, .@y, strmobinfo(1, CopperSlime), CopperSlime, 1, .@label$);
- // This should wipe the monster experience value
- setunitdata(.@mob, UDT_LEVEL, 1);
- end;
+ goto OnFirstSlime;
}
@lockpicks=true;
getitem Lockpicks, 1;
getitem TreasureKey, 1;
end;
+OnFirstSlime:
+ getmapxy(.@m$, .@x, .@y, 0);
+ sleep2(1800);
+ .@mob=monster(.@m$, .@x, .@y, strmobinfo(1, CopperSlime), CopperSlime, 1, .@label$);
+ // This should wipe the monster experience value
+ setunitdata(.@mob, UDT_LEVEL, 1);
+ end;
+
+
// Spawn Siege Towers
OnInstanceInit:
.@m$=instance_mapname(.map$);