Burgershot
  • Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Burgershot SA-MP Pawn Scripting [Pawn] Pathfinding with ColAndreas and FCNPC

 
  • 0 Vote(s) - 0 Average
Pawn Pathfinding with ColAndreas and FCNPC
[SF]kAn3
Offline

Burgershot Member
Posts: 26
Threads: 7
Joined: Apr 2019
Reputation: 2
Location: Italia
#1
2019-12-23, 04:41 PM
I'm trying both to make npcs move around randomly and follow a player, yet there are 2 main problems.

1 - While randomly moving, npcs sometimes fall a bit under the ground surface, and then they start going up and down the surface real fast, making severe eye damage if you look at them
2 - When following someone, they will climb any object that is on their way, regardless of its height. For example, if there's a tree between me and the npc, he won't avoid the tree so you will see it going from the ground to the top of the tree while walking. Same thing happens for any other object.

Randomly move around:

PHP Code:
GoRandom(npcid){
    if(!FCNPC_IsValid(npcid)){
        printf("[DEBUG] Invalid NPC: %d", npcid);
        return;
    }
    if(FCNPC_IsMoving(npcid)){
        return;
    }
    if(FCNPC_IsDead(npcid)){
        return;
    }
    if(FCNPC_IsAttacking(npcid)){
       return;
    }
    new Float: startX, Float: startY, Float: startZ, Float: nx, Float: ny, Float: nz, Float: rx, Float: ry, Float: rz, chance = random(2), bool: positivecoord;
    FCNPC_GetPosition(npcid, startX, startY, startZ);
    positivecoord = (chance == 0) ? true : false;
    startX = (positivecoord == true) ? startX + random(20) + 15 : startX - random(20) + 15;
    startY = (positivecoord == true) ? startY + random(20) + 15 : startY - random(20) + 15;
    FCNPC_GetPosition(npcid, nx, ny, nz);
    CA_FindZ_For2DCoord(startX, startY, startZ);
    CA_FindZ_For2DCoord(nx, ny, nz);

    if(CA_RayCastLine(startX, startY, startZ, nx, ny, nz, rx, ry, rz) == 0){
        FCNPC_GoTo(npcid, startX, startY, startZ, FCNPC_MOVE_TYPE_WALK, FCNPC_MOVE_SPEED_AUTO, true);
        FCNPC_ApplyAnimation(npcid, "PED", "WALK_DRUNK", 4.1, 1, 1, 1, 0, 0);
    }

    return;
} 

Follow the player:

PHP Code:
if(IsPlayerInRangeOfPoint(npcid,45.0,xa,ya,za) && CA_RayCastLine(xa, ya, za, nx, ny, nz, rx, ry, rz) == 0){ // if is near player and there's no object between them
    FCNPC_GoTo(npcid,xa,ya,za,MOVE_TYPE_RUN,0.4, true);
    return 1;
} 

Am I doing it wrong, there already is a pathfinding method in FCNPC or CA or anything similar? Also I found Dijkstra (https://pastebin.com/RwQZ1PWy) is it obsolete?
Any help will be appreciated.
« Next Oldest | Next Newest »



  • View a Printable Version
  • Subscribe to this thread
Forum Jump:

© Burgershot - Powered by our Community and MyBB Original Theme by Emerald

Linear Mode
Threaded Mode