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:
Follow the player:
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.
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.