// 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)));
}
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 {
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()])
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;
}