summaryrefslogblamecommitdiff
path: root/npc/042-1/door.txt
blob: 110a0321d5c358610cc5956f541f57d7b8213eb6 (plain) (tree)
1
2
3
4
5
6
7
8






                                       
                                                        







                                             
                                                                       







                                                   
                                              
                                                   

                                                   
                                 
                             
                          
                                                                     
               
                                                                               
                                




                                       
                                                                                         
        
 



























































































                                                                                              
 
































                                                                                             

 
// 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-3@"+.@g, 44, 59;
    } 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]+=500;
    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)
        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;
}