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





                         




                                                                                                                      
 
 








                                              
                               
                           









                                          



                                                                  






                                          












                                                                                                  
                                                               
                                 



                                          
                          





                                                                          
                                                
            
                                                

     






                                                                 
                   










                                                                               
// TMW2 Script
// Author:
//  Jesusalva
// Description:
//  PvP Honor Rank system

// Returns if a map is on PVP Mode or Not
// ispvpmap( {mapid} )
function	script	ispvpmap	{
    .@mapa$=getarg(0, getmapname());
    return (getmapflag(.@mapa$, mf_pvp) || getmapflag(.@mapa$, mf_pvp_noparty) || getmapflag(.@mapa$, mf_pvpnoguild));
}

// Numerical representation of player strength
// get_BR( getcharid(3) )
function	script	get_BR	{
    .@oid=getcharid(3);
    .@rid=getarg(0, .@oid);
    .@br=0;

    // attachrid() and detachrid()
    // readbattleparam(.@rid)
    // Or rather: battleparam()
    if (attachrid(.@rid)) {
        // 1 BR per allocated status point
        .@br+=battleparam(UDT_STR);
        .@br+=battleparam(UDT_AGI);
        .@br+=battleparam(UDT_VIT);
        .@br+=battleparam(UDT_DEX);
        .@br+=battleparam(UDT_INT);
        .@br+=battleparam(UDT_LUK);

        // 6 BR per level
        .@br+=BaseLevel*6;

        // 1 BR for 5 DMG points (average)
        .@br+=(battleparam(UDT_ATKMIN)+battleparam(UDT_ATKMAX))/5;
        .@br+=battleparam(UDT_MATKMAX)/5;

        // 8 BR for each attack range
        .@br+=battleparam(UDT_ATKRANGE)*8;

        // 1 BR for 10 DEF points
        .@br+=battleparam(UDT_DEF)/10;
        .@br+=battleparam(UDT_MDEF)/10;
    } else {
        Exception("GET_BR INVALID RID "+.@rid, RB_DEBUGMES|RB_IRCBROADCAST);
    }

    // Restore
    detachrid();
    if (!attachrid(.@oid))
        Exception("::FATAL :: GET_BR INVALID OID "+.@oid, RB_DEBUGMES|RB_IRCBROADCAST|RB_ISFATAL);

    return .@br;
}

// Calculate the Honor Points which are due
// calc_HR( get_BR(getcharid(3)), get_BR(killedrid), log=True )
function	script	calc_HR	{
    //.@atk_br=get_BR(getarg(0));
    //.@def_br=get_BR(getarg(1));
    .@atk=readparam(BaseLevel, getarg(0));
    .@def=readparam(BaseLevel, getarg(1));
    .@log=getarg(2, true);

    // Calculate how much levels you've used above needed
    .@overpower=.@atk-.@def;

    // Dishonorable: You used 15 levels above target, or target < level 30
    if (.@overpower > 15 || .@def < 30) {
        .@honor=-(limit(1, .@overpower-15, 15));
    } else {
        .@honor=limit(1, -(.@overpower)+15, 20);
    }

    // Log cooldown (30 minutes)
    // If cooldown already in effect, do not gain honor.
    if (.@log) {
        if (.@honor > 0 && PVP_COOLDOWN[.@def] >= gettimetick(2))
            .@honor=0;
        PVP_COOLDOWN[.@def]=gettimetick(2)+PVP_WAITTIME;
    }
    return .@honor;
}

// getvariableofpc(HONOR, .@rid, 0) < 0 → determine if other player is bandit
// is_bandit( account id )
function	script	is_bandit	{
    .@oid=getcharid(3);
    .@rid=getarg(0, .@oid);

    return getvariableofpc(HONOR, .@rid, 0) < 0;
}