diff options
author | Jesusaves <cpntb1@ymail.com> | 2020-04-28 15:56:39 -0300 |
---|---|---|
committer | Jesusaves <cpntb1@ymail.com> | 2020-04-28 15:56:39 -0300 |
commit | afe5b865e4efa38d62d23cf66c1d8d765fe7b61f (patch) | |
tree | 7bc66c98eac8dbe701ed705654d0160cb4ea7860 | |
parent | 3024c0f7b83599e4e321e4516baa00f8828909e2 (diff) | |
download | serverdata-afe5b865e4efa38d62d23cf66c1d8d765fe7b61f.tar.gz serverdata-afe5b865e4efa38d62d23cf66c1d8d765fe7b61f.tar.bz2 serverdata-afe5b865e4efa38d62d23cf66c1d8d765fe7b61f.tar.xz serverdata-afe5b865e4efa38d62d23cf66c1d8d765fe7b61f.zip |
This should be enough configuration
-rw-r--r-- | npc/014-4/kamelot.txt | 1 | ||||
-rw-r--r-- | npc/042-1/door.txt | 130 |
2 files changed, 130 insertions, 1 deletions
diff --git a/npc/014-4/kamelot.txt b/npc/014-4/kamelot.txt index 851bd0838..90b1bb50a 100644 --- a/npc/014-4/kamelot.txt +++ b/npc/014-4/kamelot.txt @@ -8,6 +8,7 @@ // Variable structure: // $@KAMELOT_ID [ guild_id ] = instance id +// $@KAMELOT_WAVE [ guild_id ] = contains a temporary control value // $KAMELOT_MX [ guild_id ] = player average level - difficulty record // $KAMELOT_QUEST [ guild_id ] = quest status (bitmask) // 0 - Not started diff --git a/npc/042-1/door.txt b/npc/042-1/door.txt index eed06b522..110a0321d 100644 --- a/npc/042-1/door.txt +++ b/npc/042-1/door.txt @@ -14,6 +14,7 @@ OnTouch: warp "042-3@"+.@g, 44, 59; } else { dispbottom l("This door is locked."); + doevent instance_npcname(.name$)+"::OnKillMob"; // Double-check } end; @@ -22,8 +23,10 @@ OnKillBoss: dispbottom l("You found a key."); getitem TreasureKey, 1; $KAMELOT_KEYMASK[.@g]=$KAMELOT_KEYMASK[.@g]|16; - // Reward for completing this stage + // 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]+=500; @@ -39,6 +42,131 @@ OnKillBoss: 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) + percentheal -100, -100; + + // 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]; + // 2 is meaningless, as we're not using their acc ids, but sounded faster + getguildmember(.@g, 2); + .@gcount=$@guildmembercount; + .@m$=getmap(); + + // Maybe we should advance the wave + if ($@KAMELOT_WAVE == 3) { + debugmes "Boss Spawn"; + initnpctimer; + setd("$@GTEMP_"+getmap(), .@avg); + .@mcount=.@gcount; + } else if ($@KAMELOT_WAVE == 2) { + .@mcount=.@gcount*2; + mapannounce getmap(), "Don't make me come there myself!! GET RID OF THEM ALREADY!", 0; + } else if ($@KAMELOT_WAVE == 1) { + .@mcount=.@gcount*3/2; + mapannounce getmap(), "Guards! What are you waiting for?? Arrest them!!", 0; + } else if ($@KAMELOT_WAVE == 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*4); + setunitdata(.@mob, UDT_ATKMAX, .@avg*6); + setunitdata(.@mob, UDT_DEF, 1+.@avg*8/10); + setunitdata(.@mob, UDT_MDEF, 1+.@avg*4/10); + setunitdata(.@mob, UDT_HIT, .@avg*3); // 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+=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$, 27, 67, any("Lancelot", "Galahard", "Gawain"), .@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*50); + setunitdata(.@mob, UDT_HP, .@avg*50); + 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; } |