diff options
author | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2022-10-23 21:44:22 -0300 |
commit | a7c45a192268da2601cef47a4cdba987ae2327ca (patch) | |
tree | c5fb5b97db109fe7106496dd96498c475881046b /npc/042-1 | |
download | serverdata-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.txt | 3 | ||||
-rw-r--r-- | npc/042-1/door.txt | 204 |
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; +} + |