viewing paste topic/11175-walking-npc-script | Athena

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
prontera,148,191,5  script  test_walk   100,{
    end;
OnInit:
    getmapxy .@map$, .@x, .@y, 1;
    callfunc "npcwalk",
        100, // npc speed
        .@x, .@y, // starting point
        148, 183, // 1st waypoint
        156, 187, // 2nd waypoint
        156, 179, // 3rd waypoint
        164, 191, // 4th waypoint
        164, 183; // 5th waypoint
}
 
function    script  npcwalk {
    npcspeed getarg(0);
    .@cnt = ( getargcount() -1 ) -2;
    while (1) {
        for ( .@i = 0; .@i < .@cnt; .@i += 2 ) {
        //    announce ( .@i /2 ) +". I'm going to walk to ("+( .@i +3 )+")"+ getarg( .@i +3 ) +" ("+( .@i +4 )+")"+ getarg( .@i +4 ) +"["+ distance( getarg( .@i +1 ), getarg( .@i +2 ), getarg( .@i +3 ), getarg( .@i +4 ) ) * getarg(0) +"]", 0;
            npcwalkto getarg( .@i +3 ), getarg( .@i +4 );
        //    sleep distance( getarg( .@i +1 ), getarg( .@i +2 ), getarg( .@i +3 ), getarg( .@i +4 ) ) * getarg(0);
            sleep callfunc( "radius_distance", getarg( .@i +1 ), getarg( .@i +2 ), getarg( .@i +3 ), getarg( .@i +4 ) ) * getarg(0) + 200;
        }
    //    announce ( .@i /2 ) +". I'm going to walk to (1)"+ getarg(1) +" (2)"+ getarg(2) +"["+ distance( getarg(1), getarg(2), getarg( getargcount() -2 ), getarg( getargcount() -1 ) ) * getarg(0) +"]", 0;
        npcwalkto getarg(1), getarg(2);
    //    sleep distance( getarg(1), getarg(2), getarg( getargcount() -2 ), getarg( getargcount() -1 ) ) * getarg(0);
        sleep callfunc( "radius_distance", getarg(1), getarg(2), getarg( getargcount() -2 ), getarg( getargcount() -1 ) ) * getarg(0) + 200;
    }
}
 
function    script  radius_distance {
    .@x = callfunc( "F_abs", getarg(0)-getarg(2) );
    .@y = callfunc( "F_abs", getarg(1)-getarg(3) );
    .@min = ( .@x < .@y )? .@x : .@y;
    .@max = ( .@x > .@y )? .@x : .@y;
    if ( !.@min )
        return .@max;
    return ( ( ( .@max << 8 ) + ( .@max << 3 ) - ( .@max << 4 ) - ( .@max << 1 ) + ( .@min << 7 ) - ( .@min << 5 ) + ( .@min << 3 ) - ( .@min << 1 ) ) >> 8 );
}
function    script  F_abs   {
    return sqrt( pow( getarg(0), 2 ) );
}
Viewed 1459 times, submitted by AnnieRuru.