summaryrefslogblamecommitdiff
path: root/npc/functions/main.txt
blob: 243ae383da1bbab0907c3f771e2440ee9c7fb5c3 (plain) (tree)






















































































































































































































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

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	{
    return Sex == 0 ? getarg(0) : getarg(1);
}

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

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 :
//   0x1 -- blank line at beginning
//   0x2 -- blank line at the end
//   0x4 -- use last "next;"
//   0x8 -- don't use first "mesn;"
function	script	narrator	{
    .@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 l("Narrator");

    for (.@i = .@start; .@i < .@argc; .@i++)
    {
        mes col(getarg(.@i), 9);
        if (.@i < .@argc - 1)
            next;
    }

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

    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)))
        debugmes strnpcinfo(3) + ": " + getarg(0);
    return;
}

function	script	askyesno	{
    return select(menuaction(l("Yes")),
        menuaction(l("No")));
}

// 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(0)])
            return false;
        @NPC_TALK_LOCK[getnpcid(0)] = 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) + "|@@]";
}