summaryrefslogblamecommitdiff
path: root/npc/003-13/arnea.txt
blob: c5f9ea08ea2627c3c4ddeb461c7b65ec3208a6d8 (plain) (tree)
1
2
3
4
5
6
7
8
9






                                             
                                                   
      
            
                          
          
      








                                                    
     
                             
                      






                                                                                                                      

                                  
 



          

                       

                                                       


                    

               
                                  

                  
                                                                      

                                                                                                                                

                                                                                    

                                                                                                      


                                     

                                                                                     
                               





                                      












































                                                                 


                                                           
                                                                 


                              




                                                                


                  
 


                                                                                                                         




                                                                    
                                                    






















                                                                     
             




                                                                                       

                        

        





















                                                       
                                                         

        
       
                               
                                               
                                                      

                                                     




                                            


               
                                                 
                                               
                                                      

                                                     




                                            
 
// TMW2 Scripts
// Author:
//    4144
//    Jesusalva
// Description:
//    Arena for Duels and PVP (temporary map)

003-13,29,29,0	script	Arnea#003-13	NPC_ELF_F,{
    /*
    // FIXME
    warp "003-10", 22, 62;
    close;
    */
    if (is_staff()) {
        mes "npc name: " + .name$;
        mes "npc ext name: " + .extname$;
        mes "npc id: " + .id;
        mes "npc parent id: " + .parent;
        mes "npc src id: " + .srcId;
        mes "char id 3: " + getcharid(3);
        mes "instance id: " + instance_id();
        mes "Map ID: " + instance_mapname("003-13");
    }
    if (instance_id() >= 0) {
        goto L_Manage;
    } else {
        // Non staff and on 003-13? That's a bug!
        if (!is_staff()) {
            atcommand "@request Hey hey hey, player found in 003-13 - regular map! Report this to Jesusalva at once!";
            warp "Save", 0, 0;
            close;
        }
        mes "npc not in instance";
    }

    close;

L_Manage:
    mesn;
    select
        l("warp back"),
        rif(!'UDTf, l("begin Doppelganger Challenge")),
        l("Doppelganger Challenge Ranking"),
        l("cancel");

    switch (@menu)
    {
        case 1:
            warp "003-10", 22, 62;
            break;
        case 2:
            mesc l("spawn challenge monster! How far can you go?"), 2;
            mesc l("The Doppelganger Challenge will create a Gladiator Monster which should somehow emulate a PvP experience.");
            mesc l("In other words, it'll make a copy of youself.");
            mesc l("Defeating it will advance the round. How far can you survive?");
            next;
            mesc l("Really begin the Doppelganger Challenge?");
            mesc l("Switching from strong to weak equipments WON'T make it go any easier on you!"), 1;
            if (askyesno() == ASK_NO)
                break;

            npctalk l("Doppelganger Challenge, @@ began the fight!", strcharinfo(0));
            // Save permanent data
            'udt_blv=BaseLevel;
            'udt_Str=readparam2(bStr);
            'udt_Agi=readparam2(bAgi);
            'udt_Vit=readparam2(bVit);
            'udt_Int=readparam2(bInt);
            'udt_Dex=readparam2(bDex);
            'udt_Luk=readparam2(bLuk);
            'udt_Dly=readbattleparam(UDT_ADELAY);
            'udt_Rng=readbattleparam(UDT_ATKRANGE);

            // Save (b)ase data
            'udt_bhp=MaxHp;
            'udt_bAtk1=readbattleparam(UDT_ATKMIN);
            'udt_bAtk2=readbattleparam(UDT_ATKMAX);
            'udt_bMatk=readbattleparam(UDT_MATKMAX);
            'udt_bDef=readbattleparam(UDT_DEF);
            'udt_bMdef=readbattleparam(UDT_MDEF);
            'udt_bHit=readbattleparam(UDT_HIT);
            'udt_bFlee=readbattleparam(UDT_FLEE);

            // Save (p)rogression data
            'udt_php='udt_bhp/4;
            'udt_pAtk1='udt_bAtk1/4;
            'udt_pAtk2='udt_bAtk2/4;
            'udt_pMatk='udt_bMatk/4;
            'udt_pDef='udt_bDef/4;
            'udt_pMdef='udt_bMdef/4;
            'udt_pHit='udt_bHit/4;
            'udt_pFlee='udt_bFlee/4;

            /*
            .@a1=readbattleparam(UDT_ATKRANGE);
            .@a2=readbattleparam(UDT_ATKMIN);
            .@a3=readbattleparam(UDT_ATKMAX);
            .@d1=readbattleparam(UDT_DEF);
            .@d2=readbattleparam(UDT_MDEF);
            .@c1=readbattleparam(UDT_HIT);
            .@c2=readbattleparam(UDT_FLEE);
            .@m1=readbattleparam(UDT_MATKMIN);
            .@m2=readbattleparam(UDT_MATKMAX);
            .@m3=readbattleparam(UDT_ELETYPE);
            .@s1=readbattleparam(UDT_STR);
            .@s2=readbattleparam(UDT_ADELAY);
            .@s3=readbattleparam(UDT_DMOTION);

            debugmes "Unit Data %d (Str %d)", getcharid(3), .@s1;
            debugmes "Atk (%d~%d) Range %d", .@a2, .@a3, .@a1;
            debugmes "Def %d MDef %d", .@d1, .@d2;
            debugmes "Hit %d Flee %d", .@c1, .@c2;
            debugmes "MAtk (%d~%d) Element %d", .@m1, .@m2, .@m3;
            debugmes "Attack delay %d Stun %d", .@s2, .@s3;
            */

            // Begin the fight
            doevent instance_npcname(.name$)+"::OnGladius";
            addtimer 5000, instance_npcname(.name$)+"::OnVerify";
            closeclientdialog;
            break;
        case 3:
            mesc l("All leaderboards are refreshed hourly."), 1;
            mesc l("Your current score: @@", UDTRANK), 3;
            HallOfUDT();
            break;
        case 4:
            break;
    }
    close;

OnGladius:
    sleep(800);
    .@mg=monster(instance_mapname("003-13"), 38, 32, "Gladiator", TestingMob, 1, instance_npcname(.name$)+"::OnGladius");
    // Set "permanent" data
    setunitdata(.@mg, UDT_ADELAY, 'udt_Dly-'UDTf);
    setunitdata(.@mg, UDT_ATKRANGE, 'udt_Rng+limit(0, 'UDTf/10, 3));

    // Set base data
    setunitdata(.@mg, UDT_LEVEL,    'udt_blv+'UDTf);
    setunitdata(.@mg, UDT_STR, 'udt_Str+'UDTf);
    setunitdata(.@mg, UDT_AGI, 'udt_Agi+'UDTf);
    setunitdata(.@mg, UDT_VIT, 'udt_Vit+'UDTf);
    setunitdata(.@mg, UDT_INT, 'udt_Int+'UDTf);
    setunitdata(.@mg, UDT_DEX, 'udt_Dex+'UDTf);
    setunitdata(.@mg, UDT_LUK, 'udt_Luk+'UDTf);

    // Set variable data
    setunitdata(.@mg, UDT_MAXHP,    'udt_bhp+'udt_php*('UDTf-1));
    setunitdata(.@mg, UDT_HP,       'udt_bhp+'udt_php*('UDTf-1));

    setunitdata(.@mg, UDT_ATKMIN,   'udt_bAtk1+'udt_pAtk1*('UDTf-1));
    setunitdata(.@mg, UDT_ATKMAX,   'udt_bAtk2+'udt_pAtk2*('UDTf-1));
    setunitdata(.@mg, UDT_MATKMIN,  'udt_bMatk+'udt_pMatk*('UDTf-1));
    setunitdata(.@mg, UDT_MATKMAX,  'udt_bMatk+'udt_pMatk*('UDTf-1));
    setunitdata(.@mg, UDT_DEF,      'udt_bDef+'udt_pDef*('UDTf-1));
    setunitdata(.@mg, UDT_MDEF,     'udt_Mdef+'udt_pMDef*('UDTf-1));
    setunitdata(.@mg, UDT_HIT,      'udt_bHit+'udt_pHit*('UDTf-1));
    setunitdata(.@mg, UDT_FLEE,     'udt_bFlee+'udt_pFlee*('UDTf-1));
    setunitdata(.@mg, UDT_CRIT,     'udt_bCrit+'udt_pCrit*('UDTf-1));

    setunitdata(.@mg, UDT_PDODGE,   min(30, 'udt_Luk/10+('UDTf/3)));

    'UDTf+=1;
    npctalk ("Doppelganger Challenge, wave " + 'UDTf + "!");
    maptimer(instance_mapname("003-13"), 10, instance_npcname(.name$)+"::OnUDTUpdate");
    end;

OnUDTUpdate:
    if ('UDTf > UDTRANK)
        UDTRANK='UDTf;
    end;

// Check for possible cheats, and update default values
OnVerify:
    if (readbattleparam(UDT_ATKRANGE) > 'udt_Rng)
        'udt_Rng=readbattleparam(UDT_ATKRANGE);

    if (readbattleparam(UDT_ATKMAX) > 'udt_bAtk1) {
        'udt_bAtk1=readbattleparam(UDT_ATKMIN);
        'udt_bAtk2=readbattleparam(UDT_ATKMAX);
    }

    if (readbattleparam(UDT_DEF) > 'udt_bDef)
        'udt_bDef=readbattleparam(UDT_DEF);

    if (readbattleparam(UDT_MDEF) > 'udt_bMdef)
        'udt_bMdef=readbattleparam(UDT_MDEF);

    if (readbattleparam(UDT_MATKMAX) > 'udt_bMatk)
        'udt_bMatk=readbattleparam(UDT_MATKMAX);

    if (readbattleparam(UDT_ADELAY) < 'udt_bDly)
        'udt_bDly=readbattleparam(UDT_DELAY);

    addtimer 5000, instance_npcname(.name$)+"::OnVerify";
    end;

OnInit:
    .@npcId = getnpcid(.name$);
    setunitdata(.@npcId, UDT_HEADTOP, Darkelm);
    setunitdata(.@npcId, UDT_HEADMIDDLE, CopperArmor);
    setunitdata(.@npcId, UDT_HEADBOTTOM, JeansChaps);
    setunitdata(.@npcId, UDT_WEAPON, RockKnife);
    setunitdata(.@npcId, UDT_HAIRSTYLE, 14);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 18);

    .sex = G_FEMALE;
    .distance = 9;
    end;

OnInstanceInit:
    .@npcId = getnpcid(instance_npcname(.name$));
    setunitdata(.@npcId, UDT_HEADTOP, Darkelm);
    setunitdata(.@npcId, UDT_HEADMIDDLE, CopperArmor);
    setunitdata(.@npcId, UDT_HEADBOTTOM, JeansChaps);
    setunitdata(.@npcId, UDT_WEAPON, RockKnife);
    setunitdata(.@npcId, UDT_HAIRSTYLE, 14);
    setunitdata(.@npcId, UDT_HAIRCOLOR, 18);
    end;

}