summaryrefslogtreecommitdiff
path: root/npc/042-11
diff options
context:
space:
mode:
authorJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
committerJesusaves <cpntb1@ymail.com>2022-10-23 21:44:22 -0300
commita7c45a192268da2601cef47a4cdba987ae2327ca (patch)
treec5fb5b97db109fe7106496dd96498c475881046b /npc/042-11
downloadserverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.gz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.bz2
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.tar.xz
serverdata-a7c45a192268da2601cef47a4cdba987ae2327ca.zip
Initial commit (Moubootaur Legends fork)
Diffstat (limited to 'npc/042-11')
-rw-r--r--npc/042-11/_import.txt3
-rw-r--r--npc/042-11/boss.txt220
2 files changed, 223 insertions, 0 deletions
diff --git a/npc/042-11/_import.txt b/npc/042-11/_import.txt
new file mode 100644
index 0000000..fde2ef7
--- /dev/null
+++ b/npc/042-11/_import.txt
@@ -0,0 +1,3 @@
+// Map 042-11: Camelot Sewer West Path
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/042-11/boss.txt",
diff --git a/npc/042-11/boss.txt b/npc/042-11/boss.txt
new file mode 100644
index 0000000..5cc3b65
--- /dev/null
+++ b/npc/042-11/boss.txt
@@ -0,0 +1,220 @@
+// TMW 2 Script
+// Author:
+// Jesusalva
+// Micksha
+// Description:
+// Controls the showdown
+042-11,41,57,0 script #KDoor04211a NPC_HIDDEN,4,0,{
+ end;
+
+OnTouch:
+ .@g=getcharid(2);
+ if (.@g < 1) die();
+ if (!($KAMELOT_QUEST[.@g] & 64)) goto L_NoAccess;
+ warp "042-10@"+.@g, 143, 21;
+ end;
+
+L_NoAccess:
+ dispbottom l("Can't leave right now.");
+ end;
+}
+
+042-11,20,28,0 script #KDoor04211b NPC_HIDDEN,0,2,{
+ end;
+
+OnTouch:
+ .@g=getcharid(2);
+ if (.@g < 1) die();
+ if (!($KAMELOT_QUEST[.@g] & 64)) goto L_NoAccess;
+ mes l("Are you sure you want leave?");
+ mesc l("You wont be able to go back!");
+ next;
+ if (askyesno() == ASK_YES)
+ warp "042-0@"+.@g, 46, 25;
+ close;
+
+L_NoAccess:
+ dispbottom l("Can't leave right now.");
+ end;
+}
+
+042-11,0,0,0 script #KamelotBoss NPC_HIDDEN,{
+ end;
+
+OnDialog:
+ announce "??? : "+l("Who sent you here? Merlin?"), bc_self|bc_pc;
+ addtimer 8000, "#KamelotBoss::OnDialog2";
+ end;
+
+OnDialog2:
+ .@g=getcharid(2);
+ announce "??? : "+l("It matters not, because soon, all of you will be..."), bc_self|bc_pc;
+ addtimer 7000, instance_npcname("#KamelotBoss", $@KAMELOT_ID[.@g])+"::OnBegin";
+ end;
+
+// Spawns Terogan
+OnBegin:
+ .@g=getcharid(2);
+ .@m$=instance_mapname("042-11");
+ .@avg=$KAMELOT_MX[.@g]+10;
+ .@n$=instance_npcname("#KamelotBoss", $@KAMELOT_ID[.@g]);
+ debugmes "GID: %d Map: %s Power: %d Label: %s", .@g, .@m$, .@avg, .@n$;
+
+ // Dialog
+ announce l("General Terogan : DEAD! Muahahahaha!"), bc_self|bc_pc;
+
+ // Check if Terogan doesn't exists already
+ .@exist=getd("$@GTEMP_"+.@m$);
+ if (.@exist)
+ end;
+
+ // Check if quest isn't over already '-'
+ if ($KAMELOT_QUEST[.@g] & 64)
+ end;
+
+ // Bring Terogan into existence
+ .@mob=monster(.@m$, 40, 30, strmobinfo(1, GeneralTerogan), GeneralTerogan, 1, .@n$+"::OnKillBoss");
+ setd("$@GTEMP_"+.@m$, .@mob);
+ setd("$@GTEMP_HP_"+.@m$, 20);
+
+ // Reconfigure the monster
+ setunitdata(.@mob, UDT_LEVEL, .@avg);
+ setunitdata(.@mob, UDT_STR, 1+.@avg/2);
+ setunitdata(.@mob, UDT_AGI, 1+.@avg/2);
+ setunitdata(.@mob, UDT_VIT, 1+.@avg/2);
+ setunitdata(.@mob, UDT_INT, 1+.@avg/2);
+ setunitdata(.@mob, UDT_DEX, 1+.@avg/2);
+ setunitdata(.@mob, UDT_LUK, 1+.@avg/2);
+ setunitdata(.@mob, UDT_ADELAY, 1072);
+ setunitdata(.@mob, UDT_ATKRANGE, 4);
+ // Battle Status
+ setunitdata(.@mob, UDT_MAXHP, .@avg*700);
+ setunitdata(.@mob, UDT_HP, .@avg*700);
+ setunitdata(.@mob, UDT_ATKMIN, .@avg*7);
+ setunitdata(.@mob, UDT_ATKMAX, .@avg*9);
+ setunitdata(.@mob, UDT_DEF, 4+.@avg);
+ setunitdata(.@mob, UDT_MDEF, 1+.@avg);
+ setunitdata(.@mob, UDT_HIT, .@avg*18); // Advised: x3
+ setunitdata(.@mob, UDT_FLEE, .@avg*5); // Advised: x4
+ setunitdata(.@mob, UDT_CRIT, 120);
+ // Initial batch of reinforcements
+ KamelotCaveSpawn(6, 30, 20, 50, 40, .@avg, "042-11");
+
+ // Save info again
+ setd("$@GTEMP_"+.@m$, .@mob);
+ setd("$@GTEMP_HP_"+.@m$, 20);
+ initnpctimer;
+ end;
+
+// Checks HP ratio again
+OnTimer5000:
+ explode(.@map$, .map$, "@");
+ .@g=atoi(.@map$[1]);
+ if (.@g < 1) {
+ consolebug "[ERROR] [KAMELOT] Unable to find Terogan - Kamelot %s", .map$;
+ .@g=0;
+ }
+
+ // Retrieve Terogan's GUID and MAP ID
+ .@m$=instance_mapname("042-11");
+ .@mob=getd("$@GTEMP_"+.@m$);
+
+ // Prepare the reinforcement strength data (min 3 Lv 22 spawn)
+ .@gcount=$KAMELOT_PC[.@g]+2;
+ .@avg=$KAMELOT_MX[.@g]+rand2(22, 27);
+
+ // Calculate current HP ratio and the difference
+ .@ratio=getunitdata(.@mob, UDT_HP)*20/getunitdata(.@mob, UDT_MAXHP);
+ .@hplos=getd("$@GTEMP_HP_"+.@m$)-.@ratio;
+
+ //debugmes "Ratio %d/%d", .@ratio, getd("$@GTEMP_HP_"+.@m$);
+ if (.@ratio < getd("$@GTEMP_HP_"+.@m$)) {
+ mapannounce .@m$, "General Terogan : "+any("Charge!", "To the Abyss with you already!", "Kill them already!", "More of them might be coming!", "Minions, ATTACK!", "Muahahaha, Pathetic!"), 0;
+
+ // Unlike Krukan, spawn according to HP loss (no use fast killing)
+ KamelotCaveSpawn(.@gcount*max(1, .@hplos), 20, 20, 57, 40, .@avg, "042-11");
+ }
+
+ // TODO: Special skills
+
+ // Always update the ratio - Terogan could have been healed
+ setd("$@GTEMP_HP_"+.@m$, .@ratio);
+ initnpctimer;
+ end;
+
+// Monks Rewards
+OnKillMob:
+ // Maybe a reward is due
+ .@g=getcharid(2);
+ if (.@g < 1) die();
+ getexp $KAMELOT_MX[.@g]*8, $KAMELOT_MX[.@g]*4; // Lower than previously
+ end;
+
+// Boss rewards
+OnKillBoss:
+ stopnpctimer;
+ if (playerattached()) {
+ // Setup
+ .@g=getcharid(2);
+ .@m$=getmap();
+ .@hero$=strcharinfo(0);
+ // Player Reward for completing this stage
+ getitem GuildCoin, 10;
+ getexp $KAMELOT_MX[.@g]*150, $KAMELOT_MX[.@g]*30;
+ specialeffect(FX_FANFARE, AREA, getcharid(3));
+ } else {
+ explode(.@map$, .map$, "@");
+ .@g=atoi(.@map$[1]);
+ if (.@g < 1) {
+ consolebug "[ERROR] [KAMELOT] Unable to find Terogan Death %s", .map$;
+ .@g=0;
+ }
+ .@m$=.map$;
+ .@hero$="The guild";
+ }
+
+ // Mark quest as completed
+ $KAMELOT_QUEST[.@g]=$KAMELOT_QUEST[.@g]|64;
+
+ // Get rid of temporary variables
+ setd("$@GTEMP_"+.@m$, 0);
+ setd("$@GTEMP_HP_"+.@m$, 0);
+ killmonsterall(.@m$);
+
+ // Guild Reward for completing this stage
+ .@ggp=2000+$KAMELOT_MX[.@g]*100;
+ .@gxp=$KAMELOT_MX[.@g]*250;
+ $GUILD_BANK[.@g]+=.@ggp;
+ guildgetexp(.@gxp); // Silently fails if no char attached
+
+ // Announce
+ mapannounce .@m$, .@hero$+" has defeated the evil in Kamelot!", 0;
+
+ // Spawn GMGiftBox upon end
+ .@gf=min(30, $KAMELOT_MX[.@g]/5);
+ areamonster(.@m$, 20, 20, 57, 40, strmobinfo(1, GMGiftBox), GMGiftBox, .@gf);
+
+ // Spawn Treasure Chests upon end
+ .@gl=$KAMELOT_MX[.@g];
+ .@gtype=(.@gl > 100 ? SupremeChest : (.@gl > 75 ? PrismChest : (.@gl > 50 ? GoldenChest : (.@gl > 25 ? SilverChest : BronzeChest))));
+ .@gf=$KAMELOT_PC[.@g];
+ areamonster(.@m$, 20, 20, 57, 40, strmobinfo(1, .@gtype), .@gtype, .@gf);
+
+ // Possibly, we forgot stuff in Throne Room...
+ killmonsterall("042-0@"+.@g);
+
+ // 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 the boss: Guild GP +"+.@ggp+" Guild XP +"+.@gxp;
+ end;
+
+// Instance
+OnInstanceInit:
+ end;
+
+}
+