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


                  
               
              


                         







                                                                 
                                                           




                                                         

                                




                         



                                         



                                         


















                                         

                                                                                                

 



                                     





                                              
 



                                                 




















                                                                                         
                                                 



                                 
           
 
 



                                                                                        
 
                                                       

                                                            




                                                    
                                         
                


                           
                                                                     
                    
                            

     


                                              
 


                                         
 





                                              
     
 








                                               
 


           
                                                    




                                                            
                                   
                                 
                



                                        

                    
                            

     
                      

               


                         
                                            

                         


                             
     





                           

           
 


                                                           
                                                                       

           
 
                                         
                                        
                             

                 
 





                                         
                                     





                                  










                                                                      

                         
     





                                                                                                      
                                                         
                         
                                                                   
     


                         
     


                                               



                
 


















                                                 














































                                                                        

















                                                 
























                                                                                                                                             
// Evol functions.
// Authors:
//    4144
//    Jesusalva
//    Travolta
// Description:
//    Build in functions.

/**
 * checks whether the given argument is a char name or account id
 * and tries to convert it to an account id
 *
 * @arg 0 - char name or account id
 * @return the account id
 */
function	script	nameid2id	{
    if ((getdatatype(getarg(0, "")) & DATATYPE_STR) != 0) {
        if (getarg(0, "") == "") {
            return playerattached();
        } else {
            return getcharid(CHAR_ID_ACCOUNT, getarg(0));
        }
    } else if (getarg(0) == 0) {
        return playerattached();
    } else {
        return getarg(0);
    }
}

function	script	menuimage	{
    return getarg(0) + "|" + getarg(1);
}

function	script	menuaction	{
    return "[" + getarg(0) + "]";
}

function	script	mesn	{
    if (getargcount() > 0)
    {
        .@s$ = "[" + getarg(0) + "]";
    }
    else
    {
        .@s$ = "[" + strnpcinfo(1) + "]";
    }
    mes .@s$;
    return;
}

function	script	mesq	{
    mes "\"" + getarg(0)+  "\"";
    return;
}

function	script	g	{
    // TODO: remove gendered lines from NPCs, or use any(getarg(0), getarg(1)) to make it random
    return BodyType == 0 ? getarg(0) : getarg(1);
}

function	script	b	{
    return "##B" + getarg(0) + "##b";
}

function	script	col	{
    .@color = getarg(1);
    if (.@color < 0) .@color = 0;
    if (.@color > 9) .@color = 9;
    return "##" + .@color + getarg(0) + "##0";
}

function	script	mesc	{
    return mes(col(getarg(0, ""), getarg(1, 9)));
}

// *showimage("<file>");
// Displays an image in the NPC window. If no file extension is provided, it is
// assumed to be a PNG file. The image path is relative to client-data/graphics.
// example:
//     showimage("guiicons/flags/fr");
function	script	showimage	{
    .@file$ = getarg(0);

    if (!endswith(getarg(0), ".jpg") && !endswith(getarg(0), ".png")) {
        .@file$ += ".png";
    }

    if (charat(getarg(0), 0) == "/") {
        .@file$ = delchar(.@file$, 0); // absolute path from root of client-data
    } else if (!startswith(getarg(0), "help/") && !startswith(getarg(0), "graphics/") ) {
        .@file$ = "graphics/" + .@file$; // assume relative to graphics/
    }

    return mesf("~~~%s~", .@file$);
}

function	script	adddefaultskills	{
    if (getskilllv(NV_BASIC) < 6)
    {
        skill NV_BASIC, 6, 0;
    }
    return;
}

function	script	addremovemapmask	{
    setmapmask getarg(0), (getmapmask(getarg(0)) | (getarg(1) + getarg(2))) ^ getarg(2);
    return;
}

// Function to show narrator text. Accepts string args.
// If first arg is a number N, then it represents bit flags.
// Bit flags :
//   S_FIRST_BLANK_LINE -- blank line at beginning
//   S_LAST_BLANK_LINE  -- blank line at the end
//   S_LAST_NEXT        -- use last "next();"
//   S_NO_NPC_NAME      -- don't use first "mesn();"
//   S_LAST_CLOSE       -- use last "close2();
function	script	narrator	{
    .@start = 0;
    .@argc = getargcount();
    .@flags = 0;

    if (.@argc > 1 && (getdatatype(getarg(0)) & DATATYPE_INT) != 0) {
        .@start = 1;
        .@flags = getarg(0);
    }

    if ((.@flags & S_FIRST_BLANK_LINE) != 0) {
        mes("");
    }

    if ((.@flags & S_NO_NPC_NAME) == 0) {
        mesn(l("Narrator"));
    }

    for (.@i = .@start; .@i < .@argc; .@i++) {
        mes(col(getarg(.@i), 9));

        if (.@i < .@argc - 1) {
            next();
        }
    }

    if ((.@flags & S_LAST_BLANK_LINE) != 0) {
        mes("");
    }

    if ((.@flags & S_LAST_NEXT) != 0) {
        next();
    } else if ((.@flags & S_LAST_CLOSE) != 0) {
        close2();
    }

    return;
}

// Function to show NPC speech. Accepts string args.
// If first arg is a number N, then it represents bit flags.
// Bit flags :
//   0x1 -- blank line at beginning
//   0x2 -- blank line at the end
//   0x4 -- use last "next;"
//   0x8 -- don't use first "mesn;"
function	script	speech	{
    .@start = 0;
    .@argc = getargcount();
    .@flags = 0;

    if (.@argc > 1 && !isstr(getarg(0)))
    {
        .@start = 1;
        .@flags = getarg(0);
    }

    if (.@flags & 0x1)
        mes "";

    if (!(.@flags & 0x8))
        mesn;

    for (.@i = .@start; .@i < .@argc; .@i++)
    {
        mesq getarg(.@i);

        if (.@i < .@argc - 1)
            next;
    }

    if (.@flags & 0x4)
        next;
    else if (.@flags & 0x2)
        mes "";

    return;
}

// Show debug message if .debug variable of NPC is set to 1
function	script	npcdebug	{
    if (getvariableofnpc(.debug, strnpcinfo(3)))
        consolemes(CONSOLEMES_DEBUG, strnpcinfo(3) + ": " + getarg(0));
    return;
}

function	script	askyesno	{
    .@sel = select(menuaction(l("Yes")),
        menuaction(l("No")));
    mes "";
    return .@sel;
}

// Argument:
//  0 Quest variable
//  1 Current value
//  2 Next value
function	script	compareandsetq	{
    if (getq(getarg(0)) == getarg(1))
    {
        setq getarg(0), getarg(2);
        return true;
    }
    return false;
}

// Use a delay to prevent spams from NPC that display text without the
// use of (a) close/next function(s).
// Argument:
//  0 Text to display
//  1 Lock delay (default = 1)
//  2 Message function:  (default = 0)
//      0 = npctalk3
//      1 = npctalk
//      2 = message
function	script	npctalkonce	{
    // lock mechanism
    switch (getarg(2, 0))
    {
    case 1:
        if (gettimetick(2) <= getvariableofnpc(.talk_lock, strnpcinfo(NPC_NAME_UNIQUE)))
            return false;
        set(getvariableofnpc(.talk_lock, strnpcinfo(NPC_NAME_UNIQUE)), gettimetick(2) + getarg(1, 1));
        break;
    default:
        if (gettimetick(2) <= @NPC_TALK_LOCK[getnpcid()])
            return false;
        @NPC_TALK_LOCK[getnpcid()] = gettimetick(2) + getarg(1, 1);
    }

    // talk mechanism
    switch (getarg(2, 0))
    {
    case 0: npctalk3(getarg(0)); break;
    case 1: npctalk(getarg(0)); break;
    case 2: message(strcharinfo(0), getarg(0));
    }

    return true;
}

function	script	getquestlink	{
    return "[@@q" + getarg(0) + "|@@]";
}

function	script	getmonsterlink	{
    return "[@@m" + getarg(0) + "|@@]";
}

function	script	getpetlink	{
    return "[@@p" + getarg(0) + "|@@]";
}

function	script	getmercenarylink	{
    return "[@@M" + getarg(0) + "|@@]";
}

function	script	gethomunculuslink	{
    return "[@@h" + getarg(0) + "|@@]";
}

// Returns the player race in plain text
// GETRACE_RACE - returns player race (default)
// GETRACE_SKIN - returns player skin
// GETRACE_FULL - returns player skin + race
// Can take an optional 2nd param with the class
// get_race( {Flag, {Class}} )
function	script	get_race	{
    .@m=getarg(0, GETRACE_RACE);
    .@g=getarg(1, Class);

    // We also allow this to run without player attached for... science.
    if (playerattached())
    {
        setarray .@allraces$, l("Viro"), l("Viro"), l("Viro"),
                              l("Ukar"), l("Ukar"),
                              l("Tritan"), l("Tritan"),
                              l("Raijin"), l("Raijin"),
                              l("Kralog"), l("Kralog");
        setarray .@allskins$, l("Kaizei"), l("Argaes"), l("Tonori"),
                              l("Cave"), l("Mountain"),
                              l("Sea"), l("Lake"),
                              l("Light"), l("Dark"),
                              l("Fire"), l("Frost");
    }
    else
    {
        setarray .@allraces$, ("Viro"), ("Viro"), ("Viro"),
                              ("Ukar"), ("Ukar"),
                              ("Tritan"), ("Tritan"),
                              ("Raijin"), ("Raijin"),
                              ("Kralog"), ("Kralog");
        setarray .@allskins$, ("Kaizei"), ("Argaes"), ("Tonori"),
                              ("Cave"), ("Mountain"),
                              ("Sea"), ("Lake"),
                              ("Light"), ("Dark"),
                              ("Fire"), ("Frost");
    }

    if (.@m == GETRACE_RACE)
        return .@allraces$[.@g];
    else if  (.@m == GETRACE_SKIN)
        return .@allskins$[.@g];
    else
        return .@allskins$[.@g] + " " + .@allraces$[.@g];
}

// Clear output of getinventorylist()
// delinventorylist()
function	script	delinventorylist	{
    deletearray @inventorylist_id;
    deletearray @inventorylist_amount;
    deletearray @inventorylist_equip;
    deletearray @inventorylist_refine;
    deletearray @inventorylist_identify;
    deletearray @inventorylist_attribute;
    deletearray @inventorylist_card1;
    deletearray @inventorylist_card2;
    deletearray @inventorylist_card3;
    deletearray @inventorylist_card4;
    deletearray @inventorylist_expire;
    deletearray @inventorylist_bound;
    @inventorylist_count=0;
    return;
}

// isin( map, x1, y1, {[x2, y2][radius]} )
function	script	isin	{
    if (getmapxy(.@mapName$, .@xpos, .@ypos, 0) != 0)
        return false;
    if (.@mapName$ != getarg(0))
        return false;

    if (getarg(4,-1) < 0) {
        // Radius Based
        if (.@xpos >= getarg(1)-getarg(3) && .@xpos <= getarg(1)+getarg(3) && .@ypos >= getarg(2)-getarg(3) && .@ypos <= getarg(2)+getarg(3))
            return true;
    } else {
        // Coordinate based
        if (.@xpos >= getarg(1) && .@xpos <= getarg(3) && .@ypos >= getarg(2) && .@ypos <= getarg(4))
            return true;
    }
    return false;
}

// Shortcut for getmapname()
function	script	getmap	{
    return getmapname();
}