Глупые npc

FBenz

Активный
Автор темы
328
40
Баловался с созданием педов в сампе и заметил странную херню.
Если в функции создания задать параметр поведения (pedtype) как 6 (полицейский), то пед прекрасно работает, ходит, двигается.
Но если задать абсолютно любой параметр, кроме 6, например 4 (обычный пешеход-мужчина), то бот будет багать. Какие бы команды ему ни прописали, он будет стоять на месте, бежать на месте, пытаться двигаться, но с координат не сдвинется. Также не может вращаться.
Функция:
Lua:
createdPed = createChar(6, 111, X, Y, Z)
Задал педу алгоритм действий 0 (управление педом) через эти функции:
Lua:
myMaker = loadCharDecisionMaker(0)
setCharDecisionMaker(createdPed, myMaker)
Тоже не помогло.
Корректно пед действует только при pedtype = 6.
Это я ошибся или это баг сампа? Можно ли как-то пофиксить? Знает ли кто-либо решение проблемы?

Видео о проблеме:
С pedtype любым, кроме 6:
С pedtype = 6:
 
Последнее редактирование:
  • Нравится
Реакции: БеzликиЙ и NIngaro

astynk

Известный
Проверенный
742
532
Похоже на баг.
Как-то раз пытался написать скрипт для тренировки скилла, чтобы боты стреляли по мне с +С и перекатами. Такой монсер в оффлайне.
Но тупые боты все время страдают приступами одышки и без какой-либо причины ложат скрипт с причиной unhandled exception. Помучался один вечер и бросил эту затею.
 

B365

Известный
30
15
При использовании pedtype 6, игру крашит если педа сбивает авто. Если поставить pedtype 0 тогда краша нет, но невозможно использовать "taskStandStill, taskFollowFootsteps ..." и другие tasks. Клео спавнеры точно с такими же проблемами c педами в мультиплеере. Пример из вики на сайте крашит если задавить педа. Коллизия от FYP'а предотвращает краш. В одиночной игре таких проблем нет. По всей видимости SA-MP отключает что-то необходимое для правильной работы.

Ped ped = createChar(int pedtype, Model modelId, float atX, float atY, float atZ) -- 009A

Lua:
require "lib.moonloader"

local modelID = 2 -- задаем id скина будущего педа
local pedBehavior = 4 -- задаем поведение педу. В данном случае 4 - это поведение обычного пешехода муж. пола.

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then
        return
    end
    while not isSampAvailable() do
        wait(10)
    end

    sampRegisterChatCommand('spawnChar', spawnCharFunc) -- регистрируем команду. Активировав ее нам заспавнит педа.

    while true do -- бесконечный цикл, чтобы скрипт не сдулся
        wait(0) -- обязательная задержка
    end
end

function spawnCharFunc()

        requestModel(modelID) -- Запрашиваем модель педа
        loadAllModelsNow() -- Загружаем запрошенные модели
        local x, y, z = getCharCoordinates(playerPed) -- получаем свои координаты
        local peshPed = createChar(pedBehavior, modelID, x, y, z) -- создаем педа на наши координаты
        -- Поведение педа определяет отношение к другим педам-
        markModelAsNoLongerNeeded(modelID) -- Выгружаем модель из памяти
end