summaryrefslogtreecommitdiff
path: root/npc/042-1
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-1
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-1')
-rw-r--r--npc/042-1/_import.txt3
-rw-r--r--npc/042-1/door.txt204
2 files changed, 207 insertions, 0 deletions
diff --git a/npc/042-1/_import.txt b/npc/042-1/_import.txt
new file mode 100644
index 0000000..9e6aaff
--- /dev/null
+++ b/npc/042-1/_import.txt
@@ -0,0 +1,3 @@
+// Map 042-1: Camelot - Weapon Room
+// This file is generated automatically. All manually added changes will be removed when running the Converter.
+"npc/042-1/door.txt",
diff --git a/npc/042-1/door.txt b/npc/042-1/door.txt
new file mode 100644
index 0000000..cbdf085
--- /dev/null
+++ b/npc/042-1/door.txt
@@ -0,0 +1,204 @@
+// TMW 2 Script
+// Author:
+// Jesusalva
+// Micksha
+// Description:
+// Controls Weapons Room basement door
+
+042-1,51,23,0 script #KDoor0421 NPC_HIDDEN,0,0,{
+ end;
+
+OnTouch:
+ .@g=getcharid(2);
+ if ($KAMELOT_KEYMASK[.@g] & 16) {
+ warp "042-2@"+.@g, 44, 59;
+
+ // Maybe event must be fired
+ if (!($KAMELOT_QUEST[.@g] & 4)) {
+ .@label$=instance_npcname("#KDoor0422", $@KAMELOT_ID[.@g])+"::OnArrival";
+ deltimer .@label$;
+ addtimer 5000, .@label$;
+ }
+ } else {
+ dispbottom l("This door is locked.");
+ //doevent instance_npcname(.name$)+"::OnKillMob"; // Double-check
+ }
+ end;
+
+OnKillBoss:
+ .@g=getcharid(2);
+ dispbottom l("You found a key.");
+ getitem TreasureKey, 1;
+ $KAMELOT_KEYMASK[.@g]=$KAMELOT_KEYMASK[.@g]|16;
+ // Player Reward for completing this stage
+ getitem GuildCoin, min(1, $KAMELOT_MX[.@g]/20);
+ getexp $KAMELOT_MX[.@g]*25, $KAMELOT_MX[.@g]*5;
+ // Guild Reward for completing this stage
+ .@ggp=300+$KAMELOT_MX[.@g]*4;
+ .@gxp=$KAMELOT_MX[.@g]*5;
+ $GUILD_BANK[.@g]+=.@ggp;
+ guildgetexp(.@gxp); // 5xp per player average level (max 500/750)
+ // Announce
+ mapannounce getmap(), strcharinfo(0)+" has found the key for the door!", 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)+" found the key: Guild GP +"+.@ggp+" Guild XP +"+.@gxp;
+ end;
+
+OnKillMob:
+ .@label$=instance_npcname(.name$)+"::OnKillMob";
+ // Oh noes! No player attached D:
+ // This kill is meaningless, RESPAWN IT, RESPAWN IT
+ if (!playerattached()) {
+ //.@i=instance_id();
+ .@m$=instance_mapname("042-1");
+ monster .@m$, 27, 67, "Intruder", Troll, 1, .@label$;
+ debugmes "Kamelot: Mob killed without player attached. Troll spawned.";
+ end;
+ }
+
+ // Now we have a player attached, we can do all checks.
+ // For example, if you're lame cheater
+ .@g=getcharid(2);
+ if (.@g < 1)
+ die();
+
+ // I also want to give you exp
+ getexp $KAMELOT_MX[.@g]*3, $KAMELOT_MX[.@g];
+
+ // And finally, check if you're still not done killing it.
+ if (mobcount(getmap(), .@label$))
+ end;
+
+ // Configure the wave
+ .@avg=$KAMELOT_MX[.@g];
+ .@gcount=$KAMELOT_PC[.@g];
+ .@m$=getmap();
+ sleep2(800); // Give ~1 second before respawn
+
+ // Maybe we should advance the wave
+ if ($@KAMELOT_WAVE[.@g] == 3) {
+ debugmes "Kamelot %d: Boss Spawn", .@g;
+ initnpctimer;
+ setd("$@GTEMP_"+getmap(), .@avg);
+ .@mcount=.@gcount;
+ } else if ($@KAMELOT_WAVE[.@g] == 2) {
+ .@mcount=.@gcount*2;
+ mapannounce getmap(), "Don't make me come there myself!! GET RID OF THEM ALREADY!", 0;
+ } else if ($@KAMELOT_WAVE[.@g] == 1) {
+ .@mcount=.@gcount*3/2;
+ mapannounce getmap(), "Guards! What are you waiting for?? Arrest them!!", 0;
+ } else if ($@KAMELOT_WAVE[.@g] == 0) {
+ .@mcount=.@gcount;
+ mapannounce getmap(), "Guards!! Attack the intruders!!!", 0;
+ } else {
+ end;
+ }
+ 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/5);
+ setunitdata(.@mob, UDT_AGI, 1+.@avg/5);
+ setunitdata(.@mob, UDT_VIT, 1+.@avg/5);
+ setunitdata(.@mob, UDT_INT, 1+.@avg/5);
+ setunitdata(.@mob, UDT_DEX, 1+.@avg/5);
+ setunitdata(.@mob, UDT_LUK, 1+.@avg/5);
+ setunitdata(.@mob, UDT_ADELAY, 1872);
+ setunitdata(.@mob, UDT_ATKRANGE, (.@mobId == CursedArcher ? any(5,6,7) : any(1,1,2)));
+ // Battle Status
+ setunitdata(.@mob, UDT_MAXHP, .@avg*30);
+ setunitdata(.@mob, UDT_HP, .@avg*30);
+ setunitdata(.@mob, UDT_ATKMIN, .@avg*35/10);
+ setunitdata(.@mob, UDT_ATKMAX, .@avg*55/10);
+ setunitdata(.@mob, UDT_DEF, 1+.@avg*8/10);
+ setunitdata(.@mob, UDT_MDEF, 1+.@avg*4/10);
+ setunitdata(.@mob, UDT_HIT, .@avg*35/10); // Advised: x3
+ setunitdata(.@mob, UDT_FLEE, .@avg*3); // Advised: x4
+ // Critical calculation
+ .@min=1;
+ .@max=max(.@min, min(20, .@avg/5));
+ setunitdata(.@mob, UDT_CRIT, rand2(.@min, .@max));
+ // Loop through
+ }
+ freeloop(false);
+ $@KAMELOT_WAVE[.@g]+=1;
+ end;
+
+OnTimer100:
+ .@m$=instance_mapname("042-1");
+ mapannounce .@m$, "*sigh* You force me to come...", 0;
+ end;
+
+OnTimer5000:
+ .@m$=instance_mapname("042-1");
+ mapannounce .@m$, "Stupid fools...", 0;
+ end;
+
+OnTimer10000:
+ .@label$=instance_npcname(.name$)+"::OnKillBoss";
+ .@m$=instance_mapname("042-1");
+ mapannounce .@m$, "I'll get rid of you myself!!", 0;
+ .@mobId=any(CursedSoldier, CursedArcher);
+ .@mob=monster(.@m$, 40, 30, any("Lancelot", "Galahard", "Gareth", "Percival"), .@mobId, 1, .@label$);
+ .@avg=getd("$@GTEMP_"+.@m$);
+ setd("$@GTEMP_"+.@m$, 0);
+ // Reconfigure the monster
+ setunitdata(.@mob, UDT_LEVEL, .@avg);
+ setunitdata(.@mob, UDT_STR, 1+.@avg/5);
+ setunitdata(.@mob, UDT_AGI, 1+.@avg/5);
+ setunitdata(.@mob, UDT_VIT, 1+.@avg/5);
+ setunitdata(.@mob, UDT_INT, 1+.@avg/5);
+ setunitdata(.@mob, UDT_DEX, 1+.@avg/5);
+ setunitdata(.@mob, UDT_LUK, 1+.@avg/5);
+ setunitdata(.@mob, UDT_ADELAY, 1672);
+ setunitdata(.@mob, UDT_ATKRANGE, (.@mobId == CursedArcher ? any(6,7,8) : 2));
+ // Battle Status
+ setunitdata(.@mob, UDT_MAXHP, .@avg*150);
+ setunitdata(.@mob, UDT_HP, .@avg*150);
+ setunitdata(.@mob, UDT_ATKMIN, .@avg*5);
+ setunitdata(.@mob, UDT_ATKMAX, .@avg*7);
+ setunitdata(.@mob, UDT_DEF, 1+.@avg*11/10);
+ setunitdata(.@mob, UDT_MDEF, 1+.@avg*6/10);
+ setunitdata(.@mob, UDT_HIT, .@avg*8); // Advised: x3
+ setunitdata(.@mob, UDT_FLEE, .@avg*35/10); // Advised: x4
+ // Critical calculation
+ .@min=15;
+ .@max=max(.@min, min(40, .@avg/5));
+ setunitdata(.@mob, UDT_CRIT, rand2(.@min, .@max));
+ stopnpctimer;
+ end;
+
+OnArrival:
+ .@g=getcharid(2);
+ if (.@g < 1)
+ die();
+ if (getmap() != "042-1@"+.@g)
+ end;
+ if ($@KAMELOT_WAVE[.@g] == 0)
+ goto OnKillMob;
+ end;
+}
+
+
+// Required exit
+042-1,55,100,0 script #KDoor0421B NPC_HIDDEN,0,0,{
+ end;
+
+OnTouch:
+ .@g=getcharid(2);
+ if ($KAMELOT_KEYMASK[.@g] & 16) {
+ dispbottom l("WARNING: If you walk out the main gate you WON'T be able to return!");
+ warp "042-0@"+.@g, 69, 25;
+ } else {
+ dispbottom l("Oh noes! The guards locked the door!");
+ }
+ end;
+}
+