Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4

Тема: PathFinder

  1. #1
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±

    PathFinder

    Всем здравствуйте, сегодня начал изучение PathFinder , PathFinder использую для точного пути ботов FCNPC , но вот беда пришла ни одна.
    Раньше использовал MapAndreas там у меня работало все, но все равно через малый угол/малый объект проходил, мне подсказали лучше для этого дела использовать PathFinder для более точного пути.

    Я сразу начал изучение, все сделал, но вот беда, он бежит через объект, не могу понять почему, через любой объект.
    Хотя я еще сделал построение пикапов по пути, они правильно располагаются, а вот бот бежит через объект, почему?
    Прикреплю скиншот.

      Открыть/закрыть


    Как видно пикапы построились отлично, а вот бот как видно на мини-карте побежал сквозь объект :\

    Несколько кодов:

    PHP код:
    CMD:smbot(playeridparams[])
    {
        new 
                   
    name[MAX_PLAYER_NAME],
               
    Float:player_pos_x,
               
    Float:player_pos_y,
               
    Float:player_pos_z;

        
    GetPlayerPos(playeridxyz);

        static 
    result 1;

        
    format(namesizeof name"Test_%d", ++result);

        new 
    npc FCNPC_Create(name);
        
    FCNPC_Spawn(npc53xyz);
        
    FCNPC_SetAngle(npc180);
        
    NPC_TEST_BOT npc;

        return 
    1;

    PHP код:
    CMD:pathtest(playeridparams[])
    {
        new 
               
    Float:bot_pos_x
               
    Float:bot_pos_y
               
    Float:bot_pos_z;

        
    FCNPC_GetPosition(NPC_TEST_BOTbot_pos_xbot_pos_ybot_pos_z);

        
    PathFinder_FindWay(0bot_pos_xbot_pos_ypoint[playerid][0], point[playerid][1], 0.9);
        return 
    1;

    PHP код:
    public OnPlayerClickMap(playeridFloat:fXFloat:fYFloat:fZ)
    {
        
    point[playerid][0] = fX;
        
    point[playerid][1] = fY;
        
    point[playerid][2] = fZ;
        
    format(textsizeof(text), "%f %f %f"point[playerid][0], point[playerid][1], point[playerid][2]);
        
    SendClientMessageToAll(-1text);
        return 
    1;

    PHP код:
    public OnPathCalculated(routeidsuccessFloat:nodesX[], Float:nodesY[], Float:nodesZ[], nodesSize)
    {
        
    format(textsizeof(text), "PATH: route: %d success: %d nodesSize: %d"routeidsuccessnodesSize);
        
    SendClientMessageToAll(-1text);
        if(
    success)
        {
            for(new 
    inodesSizei++)
            {
                
    FCNPC_GoTo(NPC_TEST_BOTnodesX[i], nodesY[i], nodesZ[i] + 1MOVE_TYPE_SPRINT301);
                
    CreateDynamicObject(19130nodesX[i], nodesY[i], nodesZ[i] + 1000);
            }
            
    Streamer_Update(0);
        }
        return 
    1;


  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Потому что ты выполняешь FCNPC_GoTo сразу для всех найденных точек, поэтому бот идёт к последней.

    Можно сделать так:
    PHP код:
    public OnPathCalculated(routeidsuccessFloat:nodesX[], Float:nodesY[], Float:nodesZ[], nodesSize)
    {
        
    format(textsizeof(text), "PATH: route: %d success: %d nodesSize: %d"routeidsuccessnodesSize);
        
    SendClientMessageToAll(-1text);
        if(
    success)
        {
            new 
    move_path FCNPC_CreateMovePath();
            for(new 
    inodesSizei++)
            {
                
    FCNPC_AddPointToPath(move_pathnodesX[i], nodesY[i], nodesZ[i] + 1);
                
    CreateDynamicObject(19130nodesX[i], nodesY[i], nodesZ[i] + 1000);
            }
            
    Streamer_Update(0);
            
    FCNPC_GoByMovePath(NPC_TEST_BOTmove_pathMOVE_TYPE_SPRINT30.0true);
            
    FCNPC_DestroyMovePath(move_path);
        }
        return 
    1;


  3. Пользователь сказал cпасибо:
    Long- (30.12.2016)
  4. #3
    Аватар для Long-
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.11.2016
    Сообщений
    131
    Репутация:
    23 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Потому что ты выполняешь FCNPC_GoTo сразу для всех найденных точек, поэтому бот идёт к последней.

    Можно сделать так:
    PHP код:
    public OnPathCalculated(routeidsuccessFloat:nodesX[], Float:nodesY[], Float:nodesZ[], nodesSize)
    {
        
    format(textsizeof(text), "PATH: route: %d success: %d nodesSize: %d"routeidsuccessnodesSize);
        
    SendClientMessageToAll(-1text);
        if(
    success)
        {
            new 
    move_path FCNPC_CreateMovePath();
            for(new 
    inodesSizei++)
            {
                
    FCNPC_AddPointToPath(move_pathnodesX[i], nodesY[i], nodesZ[i] + 1);
                
    CreateDynamicObject(19130nodesX[i], nodesY[i], nodesZ[i] + 1000);
            }
            
    Streamer_Update(0);
            
    FCNPC_GoByMovePath(NPC_TEST_BOTmove_pathMOVE_TYPE_SPRINT30.0true);
            
    FCNPC_DestroyMovePath(move_path);
        }
        return 
    1;

    Тю, блин точно, код был не обязателен, сам бы сделал, но спасибо сократил мне время)
    Точно, пикапы же ставились с каждой итерацией на определенную точку, а бот пойдет к последней, блин как я сам то не додумался, спасибо)

    Закрыто.
    А как тут закрыть тему?))

    P.S а где ты взял такие функции(FCNPC_CreateMovePath)!?
    В обычном плагине такой функции нет.
    Последний раз редактировалось Long-; 30.12.2016 в 21:38.

  5. #4
    Аватар для Osetin
    •Администратор•

    Статус
    Оффлайн
    Регистрация
    26.03.2013
    Адрес
    ♔Osetia, Vladikavkaz♔
    Сообщений
    3,432
    Репутация:
    1093 ±
    Цитата Сообщение от Long- Посмотреть сообщение
    Тю, блин точно, код был не обязателен, сам бы сделал, но спасибо сократил мне время)
    Точно, пикапы же ставились с каждой итерацией на определенную точку, а бот пойдет к последней, блин как я сам то не додумался, спасибо)

    Закрыто.
    А как тут закрыть тему?))

    P.S а где ты взял такие функции(FCNPC_CreateMovePath)!?
    В обычном плагине такой функции нет.
    Над первым постом - Управление > Закрыть тему.

    Закрыто.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •