// 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 str { return "" + getarg(0); } function script addremovemapmask { setmapmask getarg(0), (getmapmask(getarg(0)) | (getarg(1) + getarg(2))) ^ getarg(2); return; } // remove spaces at the start and end of string and return result function script strip { .@s$ = getarg(0); if (.@s$ == "") return ""; .@start = 0; .@end = getstrlen(.@s$) - 1; for (.@i = .@start; .@i < .@end; .@i++) { if (charat(.@s$, .@i) != " ") break; else .@start++; } for (.@i = .@end; .@i >= .@start; .@i--) { if (charat(.@s$, .@i) != " ") break; else .@end--; } return substr(.@s$, .@start, .@end); } // 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 abs { .@n = getarg(0); return .@n >= 0 ? .@n : -.@n; } 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 { if ((.@current_time = gettimetick(2)) < Repeat_NPC_lock) { return false; } Repeat_NPC_lock = .@current_time + getarg(1,1); if (getarg(2,0) == 0) { npctalk3 getarg(0); } else if (getarg(2,0) == 1) { npctalk getarg(0); } else if (getarg(2,0) == 2) { message strcharinfo(0), getarg(0); } return true; } // A somehow of BaseLevel * logn (BaseLevel * alpha). // alpha = multiplicator factor. // min = minimum result value. function script lognbaselvl { .@alpha = getarg(0, 1); .@min = getarg(1, 1); .@ret = 0; .@pc_level = BaseLevel * .@alpha; while (.@pc_level >>= 1) { ++.@ret; } .@ret *= BaseLevel; if (.@ret <= .@min) { .@ret = .@min; } return .@ret; }