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



                    

                                        
                                 


















                                         



                                          























                                                                   
                       



                                           











                                                
                                        





















                                                                                    
                                   










































                                                    
                               
                                                  
                        




                                         





                                           













                                               







                                              


                                        




                




                                                                 
                  

                                 
                         

     
                     

                                  
                         
                                 








                                  






                                                                          
                   
 
 














                                              





                                                                                                          
 























                                                









                                                 
                                       

 











                                                                         
                           



                                    







                                                     
 







                                                                                                
// TMW2 Script.
// Authors:
//    Jesusalva
// Description:
//    Util functions



// Returns Nard reputation for discounts
// Currently ranges from 0 to 15.
function	script	nard_reputation	{
    .@nr=0; // Base reputation

    // Valon Quest (+1 rep)
    if (getq(CandorQuest_Trainer) >= 14)
        .@nr=.@nr+1;

    // Zegas Quest (+1 rep)
    if (getq(CandorQuest_Barrel) >= 4)
        .@nr=.@nr+1;

    // Hide And Seek Quest (+1 rep)
    if (getq(CandorQuest_HAS) >= 4)
        .@nr=.@nr+1;

    // Sailors Quest (+1 rep)
    if (getq(CandorQuest_Sailors) >= 3)
        .@nr=.@nr+1;

    // Sailors Quest, part 2 (+1 rep)
    if (getq(CandorQuest_SailorCure) >= 3)
        .@nr=.@nr+1;

    // Vincent Quest (+1 rep)
    if (getq(CandorQuest_Vincent) >= 2)
        .@nr=.@nr+1;

    // Tolchi Quest (+1 rep)
    if (getq(CandorQuest_Tolchi) >= 4)
        .@nr=.@nr+1;

    // Maya Quest (+1 rep)
    if (getq(CandorQuest_Maya) >= 4)
        .@nr=.@nr+1;

    // Dan Quest (+1 rep)
    if (getq(ShipQuests_Dan) >= 3)
        .@nr=.@nr+1;

    // Chef Gado Quest (+1 rep)
    if (getq(ShipQuests_ChefGado) >= 2)
        .@nr=.@nr+1;

    // Peter Quest (+1 rep)
    if (getq(ShipQuests_Peter) == 3 || getq(ShipQuests_Peter) == 5)
        .@nr=.@nr+1;

    // Tulimshar Quests
    // Swezanne Quest (+1 rep)
    if (getq(TulimsharQuest_Swezanne) >= 1)
        .@nr=.@nr+1;

    // Sailors Quest (+1 rep)
    if (getq(TulimsharQuest_Sailors) >= 2)
        .@nr=.@nr+1;

    // Hasan Quest (+1 rep)
    if (getq(TulimsharQuest_Hasan) >= 5)
        .@nr=.@nr+1;

    // Dausen Quest (+1 rep)
    if (getq(TulimsharQuest_WaterForGuard) >= 3)
        .@nr=.@nr+1;

    //debugmes "Reputation: "+str(.@nr);
    return .@nr;

}

/*
// Calcs maximum reputation for each destination
function	script	marine_maxre	{
    if (getarg(0) == "Tulim")
        return 10;
    if (getarg(0) == "Hurns")
        return 3;
    dispbottom l("Error, marine_maxre invalid @@", getarg(0, "-NO ARGS SUPPLIED-"));
    return -1;
}
*/

// Returns reputation with the La Marine for discounts
// Takes one argument (PC_DEST$). Grep for "getarg".
// Before updating this, update marine_maxre too!
function	script	marine_reputation	{
    .@nr=0; // Base reputation

    // Tulimshar Quests (12 points)
    if (getarg(0) == "Tulim") {
        // Swezanne Quest (+1 rep)
        if (getq(TulimsharQuest_Swezanne) >= 1)
            .@nr=.@nr+1;

        // Sailors Quest (+1 rep)
        if (getq(TulimsharQuest_Sailors) >= 2)
            .@nr=.@nr+1;

        // Hasan Quest (+1 rep)
        if (getq(TulimsharQuest_Hasan) >= 5)
            .@nr=.@nr+1;

        // Dausen Quest (+1 rep)
        if (getq(TulimsharQuest_WaterForGuard) >= 3)
            .@nr=.@nr+1;

        // Eugene Quest (+1 rep)
        if (getq(TulimsharQuests_Fishman) >= 2)
            .@nr=.@nr+1;

        // Sarah Quest (+1 rep)
        if (getq(TulimsharQuest_Sarah) >= 1)
            .@nr=.@nr+1;

        // Silvia Quest (+1 rep)
        if (getq(TulimsharQuest_Lifestone) >= 2)
            .@nr=.@nr+1;

        /*
        // Eisten Quest (+1 rep)
        if (getq(TulimsharQuest_Eistein) >= 6)
            .@nr=.@nr+1;
        */

        // Devoir Quest (+1 rep)
        if (getq(TulimsharQuest_Devoir) >= 1)
            .@nr=.@nr+1;

        // Zarkor Quest (+1 rep)
        if (getq(TulimsharQuest_DarkInvocator) >= 7)
            .@nr=.@nr+1;

        // Anwar Quest (+1 rep)
        if (getq(TulimsharQuest_AnwarField) >= 10)
            .@nr=.@nr+1;

        // Tycoon Quest (+1 rep)
        if (getq(MineQuest_Tycoon) >= 15)
            .@nr=.@nr+1;

        // Neko Quest (+1 rep)
        if (getq(TulimsharQuest_Neko) >= 2)
            .@nr=.@nr+1;


    // Hurnscald Quests (5 points)
    } else if (getarg(0) == "Hurns") {

        // Alan Quest (+1 rep)
        if (getq(HurscaldQuest_ForestBow) >= 2)
            .@nr=.@nr+1;

        // Gwendolyn Quest (+1 rep)
        if (getq(HurnscaldQuest_HarkEye) >= 6)
            .@nr=.@nr+1;

        // Celestia Quest (+1 rep)
        if (getq(HurnscaldQuest_TeaParty) >= 2)
            .@nr=.@nr+1;

        // Farmers Quest (+1 rep)
        if (getq(HurnscaldQuest_Farmers) >= 5)
            .@nr=.@nr+1;

        // Helena Quest (+1 rep)
        if (getq(HurnscaldQuest_Bandits) >= 8)
            .@nr=.@nr+1;

    }

    //debugmes "Reputation: "+str(.@nr);
    return .@nr;

}


// Returns time for ship travel.
// Can be modified by a factor.
function	script	nard_time	{
    // Estimates time to move by ship from LOCATION$ to getarg(0)

    // From Candor
    if (LOCATION$ == "Candor") {
        if (getarg(0) == "Tulim")
            return 22000;

    }
    // From Tulimshar
    if (LOCATION$ == "Tulim") {
        if (getarg(0) == "Candor")
            return 22000;
        if (getarg(0) == "Hurns")
            return 24000;

    }
    // From Hurnscald
    if (LOCATION$ == "Hurns") {
        if (getarg(0) == "Candor")
            return 22000;
        if (getarg(0) == "Tulim")
            return 24000;

    }

    // Error
    debugmes "ERROR, INVALID LOCATION AND DESTINATION";
    debugmes l("@@ -> @@", LOCATION$, getarg(0));
    dispbottom l("An error on your travel time happened. Please report.");
    return INT_MAX;
}

// Determines if player is still in range.
// eg.
// if (reachable(.x, .y, .distance)) {
function	script	reachable	{
    .@x=getarg(0);
    .@y=getarg(1);
    .@z=getarg(2);
    getmapxy(.@mp$, .@xp, .@yp, 0);

    if (distance(.@x, .@y, .@xp, .@yp) <= .@z)
        return 1;
    else
        return 0;
}

// Determines if party exp sharing is enabled
// ( Party ID )
function	script	party_expon	{
    .@nb = query_sql("SELECT exp FROM `party` WHERE party_id="+escape_sql(getarg(0))+" LIMIT 2", .@value);
    return .@value[0];
}


// Gets how many subclasses were actually filled
// total_subclass(  )
function	script	total_subclass	{
    .@i=0;
    if (MAGIC_SUBCLASS & CL_PALADIN)
        .@i+=1;
    if (MAGIC_SUBCLASS & CL_TANKER)
        .@i+=1;
    if (MAGIC_SUBCLASS & CL_BERSEKER)
        .@i+=1;
    if (MAGIC_SUBCLASS & CL_RANGER)
        .@i+=1;
    if (MAGIC_SUBCLASS & CL_SNIPER)
        .@i+=1;
    if (MAGIC_SUBCLASS & CL_WIZARD)
        .@i+=1;
    if (MAGIC_SUBCLASS & CL_SAGE)
        .@i+=1;
    if (MAGIC_SUBCLASS & CL_PRIEST)
        .@i+=1;
    return .@i;
}

// Gets how many subclasses were actually allowed
// max_subclass()
function	script	max_subclass	{
    return (MAGIC_LVL/2);
}


// Gets subclass current degree
// degree_subclass()
function	script	degree_subclass	{
    return (MAGIC_LVL/2)+(MAGIC_LVL%2);
}

// Returns true if a skill can be leveled up, based on degree_subclass().
// sk_canlvup( sk )
function	script	sk_canlvup	{
    if (getskilllv(getarg(0)) <= degree_subclass())
        return 1;
    return 0;
}

// Level up a skill in 1 level
// sk_lvup( sk )
function	script	sk_lvup	{
    .@lvl=getskilllv(getarg(0));
    getexp 0, 50*(.@lvl+1);
    addtoskill(getarg(0),.@lvl+1,0);
    return;
}

// Returns the intelligence cost based on skill level
// sk_intcost( sk )
function	script	sk_intcost	{
    .@cost=(getskilllv(getarg(0))+1)*17;
    if (readparam(bInt) >= .@cost)
        return 1;
    return 0;
}

// Returns a value defining your current magic control (affects success ratio, higher is better)
// A value of '5' means perfect control, and a value of '0' means overwhelm.
// abizit()
function	script	abizit	{
    .@base=(MAGIC_LVL**3);
    return (MAGIC_EXP/.@base);
}