// Evol functions. // Author: // 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(), 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; }