summaryrefslogblamecommitdiff
path: root/npc/025-1/ihclot.txt
blob: 210581e06f153ea8b11612f1da35a2aba3cea546 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                
                       














                                                                                                                                                                                                                     
              











                                                                          
              





                                                                          
              









                                                                                                                   
              





                                                                                      
              























                                                          
              








                                                         


                               
                                                                                   



                                             








                                                                                 
                  




                      



                                               



















                                                             
// TMW2 scripts.
// Author:
//    Jesusalva
// Description:
//   Ihclot is Tolchi spelled backwards

025-1,96,66,0	script	Ihclot	NPC_RAIJIN_FEMALE_LEGION_ARTIS,{
    function apRefresh;
    function getPrice;
    function getPriceInt;

    .@left=apRefresh();
    mesn;
    mesq l("I put options on items upon request, but I am very expensive! This is deducted from your tweaking quota.");
    if (!.@left) {
        mesc l("You currently have no Tweaking AP, so you will need to wait %02d minute(s).", 60-gettime(GETTIME_MINUTE)), 1;
        close;
    }
    next;
    mesn;
    mesq l("I'll read the options from you, but the level will be paid by me, and failure rate is non-existant. I am the best. blacksmith. in. the. universe! Use %s if you need to change any options.", b("@ucp"));
    csysGUI_Report();

    mesc l("Please select the item you plan in tweaking."), 1;
    // Request and confirm
    .@id=requestitemindex();
    if (!csys_Confirm(.@id))
        close;

    // Find numeric ID
    delinventorylist();
    getinventorylist();
    .@handle=@inventorylist_id[.@id];
    .@lv=getiteminfo(.@handle, ITEMINFO_ELV);

    // Invalid (absolutely should never happen)
    if (.@handle < 1) {
        mesn;
        mesq l("...What? Which item? Sorry, too much smoke around here.");
        next;
        close;
    }
    // Multiple
    if (countitem(.@handle) != 1) {
        mesn;
        mesq l("Sorry, but you have multiple %s.", getitemlink(.@handle));
        next;
        close;
    }
    // Permission NG: (Not Granted)
    if (.@lv < .minLevel) {
        mesn;
        mesq l("Sorry, but I won't dare touch a %s.", getitemlink(.@handle));
        next;
        mesn;
        mesq l("Depending on the case, Nicholas, in Hurnscald, can do a better job than me.");
        tutmes l("The selected item is too weak. %s will only tweak items level %d or higher.", .name$, .minLevel);
        next;
        close;
    }
    // Aleady slotted
    if (getitemoptionidbyindex(.@id, 0) > 0) {
        mesn;
        mesq l("I'm not going to try to improve this masterpiece. Look its options!");
        next;
        close;
    }

    // Calculate price
    .@price=.@lv**3; // Cubic function to determine price.
    mesn;
    mesq l("Please select the level I should use.");
    menuint
        l("Abort (%d GP)", fnum(.@price*0)), 0,
        getPrice(.@price, 10), 10,
        getPrice(.@price, 20), 20,
        getPrice(.@price, 30), 30,
        getPrice(.@price, 40), 40,
        getPrice(.@price, 50), 50,
        getPrice(.@price, 60), 60,
        getPrice(.@price, 70), 70,
        getPrice(.@price, 80), 80,
        getPrice(.@price, 90), 90,
        getPrice(.@price, 100), 100;
    mes "";
    if (@menuret == 0)
        close;

    // Ask player to confirm
    if (!csys_Confirm(.@id))
        close;

    // Perform payment
    Zeny-=getPriceInt(.@price, @menuret);
    SMITH_TWEAKS+=1;

    // Apply the bonuses
    csys_ApplyPerfect(.@id, .@level);
    mesn;
    mesc l("Well, here you are. I hope you enjoy ^^", 3);
    // Act 5+ Grace Reroll
    if ($GAME_STORYLINE >= 4) {
        next;
        mesc l("DO YOU WANT TO REROLL THE ITEM? THIS CANNOT BE UNDONE! (free)"), 1;
        next;
        if (askyesno() == ASK_YES)
            csys_ApplyPerfect(.@id, .@level);
    }
    close;

/* *************************************************************************** */
function apRefresh {
    .@left=gettimeparam(GETTIME_HOUR)-SMITH_TWEAKS;
    if (.@left > 6) {
        .@left=6;
        SMITH_TWEAKS=gettimeparam(GETTIME_HOUR)-6;
    }
    return .@left;
}

function getPriceInt {
    .@price=getarg(0);
    .@level=getarg(1);
    .@final=.@price*.@level/5;
    if (strcharinfo(0) == $MOST_HEROIC$)
        .@final=max(1, .@final-(.@level*5000));
    return .@final;
}

function getPrice {
    .@price=getarg(0);
    .@level=getarg(1);
    .@final=getPriceInt(.@price, .@level);
    if (Zeny >= .@final)
        return l("Level %d (%d GP)", .@level, fnum(.@final));
    else
        return "";
}

OnInit:
    .sex = G_OTHER;
    .distance = 5;
    .minLevel = 50;
    end;
}