summaryrefslogblamecommitdiff
path: root/npc/functions/gmbot.txt
blob: b5ab387ae5dc9b2a30ad1ecb1c48ea992f20b1b2 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                    
                                                                        














                                                                                                                   
                










                                                                 
                                                     
                                                                                       
                                                      






















                                                                                                                                          
                        





                                                                                                   





                                     
                 








                                                     

                    













                                       




                                              
                                                   

                        
                        







                            
                                   


                        
                        





















                                                                                                                        
// TMW-2 Script
// Author:
//  Jesusalva
// Description:
//  GM Bot for the Monster King.

000-0,0,0,0	script	Monster King	NPC_HIDDEN,{
OnSlaveDie:
    end;
OnBourneAgain:
    channelmes("#world", strcharinfo(0)+" did an act worth of notice.");
    dispbottom l("Oh well, this sucks, but that was only an illusion.");
    dispbottom l("The real Monster King is probably on his fortress. It'll take more than that to take him down.");
    getexp BaseLevel**3, 0;
    Mobpt = Mobpt + 165;
    // We need to start over
OnInit:
    $@MK=monster("boss", 45, 45, "The Monster King", MonsterKing, 1, "Monster King::OnBourneAgain");

    // Variables which other NPCs must take in account
    $@MK_AGGRO=0;
    $@MK_SCENE=0;

    // Variables only for this NPC
    .users=getusers(1);
    .nearby=getusers(8);
    .mp$="boss";
    .aid="200000";
    .cid="150002";
    // Constants
    .MK_SIEGE=1;
    .MK_BONUS=2;
    .MK_MANAF=3;

    // We should jump straight to loop (it runs every 62 seconds)
OnTimer62000:
    // Regenerate some data, and kill spurious mobs
    .users=getusers(1);
    if (mobcount(.mp$, "Monster King::OnSlaveDie")) {
        announce ("Monster King: Noobs, you are all a bunch of noobs!"), bc_map|bc_npc;
        killmonster(.mp$, "Monster King::OnSlaveDie");
    }

    // We are on an event, so skip this loop
    if ($@MK_SCENE)
        initnpctimer;

    // The Monster King is online. This loop is not needed
    if (isloggedin(.aid, .cid)) {
        if (!$@MK_SCENE)
            unitwarp($@MK, "boss", 45, 45);
        else
            rodex_sendmail(.cid, "MKBot", "Running Event", "An event is currently running by the MK Bot. Please logout and suppress it.");
        initnpctimer;
    }

    // If too few players are online, we don't need an event AT ALL!
    if (.users < rand(2,4))
        initnpctimer;

    // Raise aggro
    $@MK_AGGRO+=.users;

    // Mana Stone
    if (.mp$ == "011-1")
        enablenpc "Mana Stone";

    // Select a random map. Never shows up at Candor and cities, nor indoors. Not all caves either.
    .@m=rand(1,30);
    switch (.@m) {
        // MPE
        case  1: .mp$="001-1"; break;
        case  2: .mp$="001-3"; break;
        case  3: .mp$="001-4"; break;
        case  4: .mp$="001-5"; break;
        case  5: .mp$="001-6"; break;
        case  6: .mp$="001-7"; break;
        // Desert
        case  7: .mp$="003-1"; break;
        case  8: .mp$="003-1-3"; break;
        case  9: .mp$="004-1"; break;
        case 10: .mp$="004-2"; break;
        case 11: .mp$="007-1"; break;
        case 12: .mp$="010-1"; break;
        case 13: .mp$="010-1-1"; break;
        case 14: .mp$="010-2"; break;
        case 15: .mp$="011-1"; break; // Special case

        // Woodlands
        case 16: .mp$="014-1"; break;
        case 17: .mp$="014-2"; break;
        case 18: .mp$="014-3"; break;
        case 19: .mp$="014-4"; break;
        case 20: .mp$="014-5"; break;
        case 21: .mp$="015-1"; break;
        case 22: .mp$="015-2"; break;
        case 23: .mp$="015-3"; break;
        case 24: .mp$="018-1-1"; break;
        case 25: .mp$="018-2"; break;
        case 26: .mp$="018-3"; break;
        case 27: .mp$="018-4"; break;
        case 28: .mp$="018-4-1"; break;
        default: .mp$="boss"; break;

    }

    // Try to warp randomly, up to 30 attempts
    .@e=0;
   while (!checkcell(.mp$, .@x, .@y, cell_chkpass))
    {
        if (.@e == 30) {
            .mp$="boss";
            .@x=45;
            .@y=45;
            break;
        }
        .@x = rand(20, 300);
        .@y = rand(20, 300);
        ++.@e;
    }
    unitwarp($@MK, .mp$, .@x, .@y);
    .nearby=getusers(8);

    // Handle Mana Stone
    if (.mp$ == "011-1")
        disablenpc "Mana Stone";

    // Decide if we should have an event here
    if (.nearby > 1 && $@MK_AGGRO >= rand(0,100)){
        // We should decide event kind, but that's NYI
        announce ("Monster King: I smell humans! Humans must die!"), bc_map|bc_npc;

        getmapxy(.@m$, .@x, .@y, UNITTYPE_MOB, $@MK);
        // 50% more monsters at night time
        if (is_night())
            $@MK_AGGRO=$@MK_AGGRO*3/2;

        // Spawn stuff
        areamonster(.@m$, .@x-20, .@y-20, .@x+20, .@y+20, "Monster", ManaGhost, $@MK_AGGRO, "Monster King::OnSlaveDie");
        $@MK_AGGRO=0;
    }

    // We're done, restart loop timer
    initnpctimer;
    end;
}