// Evol functions.
// Authors:
// 4144
// Description:
// Moving npc utility functions
// Variables:
// none
function script initpath {
deletearray getvariableofnpc(.movepathcmd$, strnpcinfo(3));
deletearray getvariableofnpc(.movepathy, strnpcinfo(3));
deletearray getvariableofnpc(.movepathx, strnpcinfo(3));
.@cnt = 0;
for (.@f = 0; .@f < getargcount(); .@f = .@f + 3)
{
set getvariableofnpc(.movepathcmd$[.@cnt], strnpcinfo(3)), getarg(.@f);
set getvariableofnpc(.movepathx[.@cnt], strnpcinfo(3)), getarg(.@f + 1);
set getvariableofnpc(.movepathy[.@cnt], strnpcinfo(3)), getarg(.@f + 2);
.@cnt ++;
}
//debugmes "array size: " + str(getarraysize(getvariableofnpc(.movepath, strnpcinfo(3))));
return;
}
function script domoveaction {
//debugmes "domoveaction: " + str(getvariableofnpc(.movepos, strnpcinfo(3)));
.@pos = getvariableofnpc(.movepos, strnpcinfo(3));
if (.@pos >= getarraysize(getvariableofnpc(.movepathx, strnpcinfo(3))) || .@pos < 0)
return;
//debugmes "walking";
.@cmd$ = getvariableofnpc(.movepathcmd$[.@pos], strnpcinfo(3));
//debugmes "cmd: " + .@cmd$;
if (.@cmd$ == "move")
{
npcwalkto getvariableofnpc(.movepathx[.@pos], strnpcinfo(3)), getvariableofnpc(.movepathy[.@pos], strnpcinfo(3));
}
else if (.@cmd$ == "dir")
{
setnpcdir getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
return 2;
}
else if (.@cmd$ == "wait")
{
set getvariableofnpc(.waitticks, strnpcinfo(3)), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
}
else if (.@cmd$ == "emote")
{
unitemote getnpcid(0), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
return 2;
}
else if (.@cmd$ == "class")
{
.class = getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
return 2;
}
else if (.@cmd$ == "warp")
{
movenpc strnpcinfo(3), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3)), getvariableofnpc(.movepathy[.@pos], strnpcinfo(3));
}
else if (.@cmd$ == "goto")
{
set getvariableofnpc(.movepos, strnpcinfo(3)), getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
return 0;
}
else if (.@cmd$ == "rmove")
{
getmapxy(.@mapName$, .@x, .@y, 1);
npcwalkto .@x + getvariableofnpc(.movepathx[.@pos], strnpcinfo(3)), .@y + getvariableofnpc(.movepathy[.@pos], strnpcinfo(3));
}
else if (.@cmd$ == "speed")
{
.speed = getvariableofnpc(.movepathx[.@pos], strnpcinfo(3));
return 2;
}
else if (.@cmd$ == "sit")
{
npcsit;
}
else if (.@cmd$ == "stand")
{
npcstand;
}
return 1;
}
function script movetonextpos {
.@wait = getvariableofnpc(.waitticks, strnpcinfo(3));
if (.@wait > 0)
{
.@wait --;
//debugmes "wait";
set getvariableofnpc(.waitticks, strnpcinfo(3)), .@wait;
return;
}
.@true = 1;
while (.@true)
{
.@true = 0;
.@pos = getvariableofnpc(.movepos, strnpcinfo(3));
//debugmes "movetonextpos: " + str(.@pos);
.@res = domoveaction(.@pos);
if (.@res == 1 || .@res == 2)
{
.@pos++;
if (.@pos >= getarraysize(getvariableofnpc(.movepathx, strnpcinfo(3))))
.@pos = 0;
set getvariableofnpc(.movepos, strnpcinfo(3)), .@pos;
}
if (.@res == 0 || .@res == 2)
{
.@true = 1;
}
}
return;
}
function script initialmove {
set getvariableofnpc(.movepos, strnpcinfo(3)), 0;
set getvariableofnpc(.waitticks, strnpcinfo(3)), -1;
movetonextpos;
return;
}
function script getmovecmd {
.@pos = getvariableofnpc(.movepos, strnpcinfo(3));
if (.@pos >= getarraysize(getvariableofnpc(.movepathx, strnpcinfo(3))) || .@pos < 0)
return "";
return getvariableofnpc(.movepathcmd$[.@pos], strnpcinfo(3));
}
function script domovestep {
if (isunitwalking())
{
initnpctimer;
end;
}
movetonextpos;
initnpctimer;
end;
}