[Plugin] FCNPC - Fully Controllable NPC (Russian Thread)
#1

FCNPC - Fully Controllable NPC
by OrMisicL
and ZiGGi
Что это?

Этот плагин даёт полный контроль над серверными NPC, он выглядит как старый CNPC плагин, но довольно сильно отличается от него. OrMisicL получил добро на выпуск этого плагина от команды SA-MP.

Возможности
  • Более 140 функций для контроля NPC
  • Определение урона NPC
  • Синхронизация передвижения (бег, шаг, спринт) NPC
  • Синхронизация входа и выхода в транспорт (не идеальная, но довольно хорошая)
  • Проигрывание NODE записей
  • Проигрывание npcmodes записей
  • Поддержка MapAndreas
  • и многое другое...
Функции

Полный список всех функций, автовызываемых функций и констант доступен в README

Установка
  • Скопируйте "FCNPC.dll" или "FCNPC.so" в вашу директорию "plugins"
  • Скопируйте "FCNPC.inc" в вашу директорию "pawno/includes"
  • Добавьте "FCNPC" в список плагинов файла "server.cfg"
Требования
  • Требуется SA-MP сервер версии 0.3.7 или 0.3.7 R2
Скачать Примечания
  • Этот плагин может послужить причиной различных багов и крэшей. Пожалуйста, сообщайте об обнаруженых вами проблемах.
  • OrMisicL получил добро на релиз этого плагина от команды SA-MP, не спрашивайте об этом.
  • Этот плагин вмешивается в память сервера, а это значит, что его придётся обновлять с каждым обновлением сервера.
  • Этот плагин отличается от старого CNPC плагина и не имеет с ним ничего общего (разве что идея?).
  • Не просите предоставить зеркала на скачку, все доступные ссылки расположены в секции "Скачать"
Список изменений
  • v1.7.3
    • О версии
      • #73: В GoTo функции добавлен параметр stopdelay

    • Исправления
      • #81: Исправлен крэш с нодами
      • Исправлена кодировка и окончания строк в скиптах-примерах
      • Исправлено подключение FCNPC в скиптах-примерах
      • Отключено убийство мёртвых NPC
      • GetNumberMovePoint возвращает 0 если путь не валидный
      • Добавлен обработчик исключений в CreateMovePath, теперь эта функция возвращает INVALID_MOVEPATH_ID при ошибке

    • Изменённые функции
      PHP Code:
      native FCNPC_GoTo(npcidFloat:xFloat:yFloat:ztype MOVE_TYPE_AUTOFloat:speed MOVE_SPEED_AUTObool:UseMapAndreas falseFloat:radius 0.0bool:setangle trueFloat:dist_offset 0.0stopdelay 250);
      native FCNPC_GoToPlayer(npcidplayeridtype MOVE_TYPE_AUTOFloat:speed MOVE_SPEED_AUTObool:UseMapAndreas falseFloat:radius 0.0bool:setangle trueFloat:dist_offset 0.0Float:dist_check 1.5stopdelay 250); 

  • v1.7.2
    • Исправления
      • Исправление SetWeaponClipSize
      • Исправление SetWeaponInfo
      • Исправление SetWeaponState
      • Исправление SetWeaponSkill
      • Обнуление патронов в обойме после SetWeapon
      • Исправлен бесконечный цикл и мгновенное пополнение патронов при начале стрельбы (#75)
      • Исправлен бесконечные патроны и бесконечный цикл
      • Исправлена перезарядка для оружия с одним патроном (#77)
      • Исправлено время перезарядки двойного оружия
      • Исправлена StopAim при перезарядке
      • Исправлена GetWeaponActualReloadTime для двойного оружия
      • Исправлен массив информации оружия

  • v1.7.1
    • О версии
      • Переименована функция GetWeaponClipSize в GetWeaponActualClipSize, добавлена функция GetWeaponClipSize
      • Добавлены функции контроля патронов в обойме
      • Добавлена функция FCNPC_GetWeaponActualReloadTime

    • Исправления
      • Исправлены шотганы #65 (#66)
      • Исправлены перехватываемые автовызываемые функции (#67, #68)
      • Добавлена обойма для оружий (#65, #70, #71)
      • Исправлены состояния оружия
      • Исправлена перезарядка
      • Исправлена перезарядка при бесконечных патронах
      • Команда NPC по умолчанию теперь NO_TEAM (#69)
      • Исправлено время перезарядки шотгана
      • Исправлено время перезарядки для двоного WEAPON_SAWEDOFF

    • Новые и изменённые функции
      PHP Code:
      native FCNPC_SetAmmoInClip(npcidammo);
      native FCNPC_GiveAmmoInClip(npcidammo);
      native FCNPC_GetAmmoInClip(npcid);
      native FCNPC_GetWeaponActualReloadTime(npcidweaponid);
      native FCNPC_GetWeaponActualClipSize(npcidweaponid); 

  • v1.7.0
    • О версии
      • Отключен поиск Z координаты через MapAndreas для позиций ниже 0.0
      • #36: Добавлена FCNPC_ToggleMapAndreasUsage и FCNPC_IsMapAndreasUsed
      • #39: Добавлена функция FCNPC_GetDestinationPoint
      • Добавлена функция FCNPC_AddPointsToPath2
      • #35: Добавлен параметр Float:dist_offset в функции GoTo[Player]
      • #56: Добавлена автовызываемая функция FCNPC_OnChangeHeightPos (отключена по умолчанию, для включения используйте FCNPC_SetMinHeightPosCall)
      • samples/bg: NPC теперь имеют бесконечные патроны

    • Исправления
      • Исправлены аргументы npcid и damagedid в автовызываемой функции FCNPC_OnGiveDamage
      • #40: Исправлена оружие причины смерти при drive by
      • Исправлена система сообщения об ошибках инициализации
      • #45: Исправлены перехваченные функции stream
      • Исправлена настройка типа движения
      • #59: Установка угла после респавна
      • #48: Исправлена конечная позиция после передвижения
      • samples/missions: вызов FreeCamera после EndMission
      • samples/bg: Исправлено кручение NPC при следовании
      • samples/bg: Прекращение следования при посадке в транспорт

    • Новые и изменённые функции
      PHP Code:
      native FCNPC_GoTo(npcidFloat:xFloat:yFloat:ztype MOVE_TYPE_AUTOFloat:speed MOVE_SPEED_AUTObool:UseMapAndreas falseFloat:radius 0.0bool:setangle trueFloat:dist_offset 0.0);
      native FCNPC_GoToPlayer(npcidplayeridtype MOVE_TYPE_AUTOFloat:speed MOVE_SPEED_AUTObool:UseMapAndreas falseFloat:radius 0.0bool:setangle trueFloat:dist_offset 0.0Float:dist_check 1.5);
      native FCNPC_GoByMovePath(npcidpathidtype MOVE_TYPE_AUTOFloat:speed MOVE_SPEED_AUTObool:UseMapAndreas falseFloat:radius 0.0bool:setangle trueFloat:dist_offset 0.0);
      native FCNPC_GetDestinationPoint(npcid, &Float:x, &Float:y, &Float:z);
      native FCNPC_AddPointsToPath2(pathidFloat:points_x[], Float:points_y[], Float:points_z[], const size sizeof(points_x));
      native FCNPC_ToggleMapAndreasUsage(npcidbool:enabled);
      native FCNPC_IsMapAndreasUsed(npcid);
      native FCNPC_SetMinHeightPosCall(npcidFloat:height);
      native Float:FCNPC_GetMinHeightPosCall(npcid); 
    • Новые и изменённые автовызываемые функции
      PHP Code:
      forward FCNPC_OnGiveDamage(npciddamagedidweaponidbodypartFloat:health_loss);
      forward FCNPC_OnChangeHeightPos(npcidFloat:new_zFloat:old_z); // disabled by default, see FCNPC_SetMinHeightPosCall 

  • v1.6.1
    • О версии
      • #33: Добавлены параметры смещения для функций прицеливания
      • #31: Добавлена функция FCNPC_IsPlayingNodePaused
      • Добавлена функция FCNPC_IsPlayingNode

    • Исправления
      • Нет учёта регистра для GetIndexByName
      • #32: Исправлены аргументы FCNPC_SetAnimationByName
      • #30: Пауза проигрывания нодов теперь не прекращает их обновления
      • Добавлены проверки на деление на ноль в функциях GoTo
      • Исправлена пауза для нодов
      • Исправлены примеры скриптов

    • Новые и изменённые функции
      PHP Code:
      native FCNPC_AimAt(npcidFloat:xFloat:yFloat:zbool:shoot falseshoot_delay = -1bool:setangle trueFloat:offset_from_x 0.0Float:offset_from_y 0.0Float:offset_from_z 0.0);
      native FCNPC_AimAtPlayer(npcidplayeridbool:shoot falseshoot_delay = -1bool:setangle trueFloat:offset_x 0.0Float:offset_y 0.0Float:offset_z 0.0Float:offset_from_x 0.0Float:offset_from_y 0.0Float:offset_from_z 0.0);
      native FCNPC_TriggerWeaponShot(npcidweaponidhittypehitidFloat:xFloat:yFloat:zbool:ishit trueFloat:offset_from_x 0.0Float:offset_from_y 0.0Float:offset_from_z 0.0);
      native FCNPC_IsPlayingNode(npcid);
      native FCNPC_IsPlayingNodePaused(npcid); 

  • v1.6.0
    • О версии
      • Добавлена функция FCNPC_GetAimingPlayer
      • Добавлены функции FCNPC_PausePlayingNode и FCNPC_ResumePlayingNode
      • Добавлена автовызываемая функция FCNPC_OnWeaponStateChange
      • #28: Добавлено смещение для FCNPC_AimAtPlayer
      • Удалены макросы с типами нодов
      • Дополнительные параметры для FCNPC_PlayNode (как в функции FCNPC_GoTo)
      • Обновлён скрипт citiziens

    • Исправления
      • Исправления в коде
      • Исправлена высота (Z) для нодов
      • Исправлена последняя перезарядка у NPC
      • Исправлена FCNPC_GetNodeType

    • Новые и изменённые функции
      PHP Code:
      native FCNPC_AimAtPlayer(npcidplayeridbool:shoot falseshoot_delay = -1bool:setangle trueFloat:offset_x 0.0Float:offset_y 0.0Float:offset_z 0.0);
      native FCNPC_GetAimingPlayer(npcid);
      native FCNPC_PlayNode(npcidnodeidmove_type MOVE_TYPE_AUTOFloat:speed MOVE_SPEED_AUTObool:UseMapAndreas falseFloat:radius 0.0bool:setangle true);
      native FCNPC_PausePlayingNode(npcid);
      native FCNPC_ResumePlayingNode(npcid); 
    • Новые автовызываемые функции
      PHP Code:
      forward FCNPC_OnWeaponStateChange(npcidweapon_state); 

  • v1.5.0
    • О версии
      • Поддержка CR-MP 0.3.7
      • Удалены ограничения на максимальное количество здоровья и брони

    • Исправления
      • Исправлен pathid в OnFinishMovePath
      • Исправлены скрипты-примеры
      • Исправления для компиляции из-под VS 2015

    • Новые функции
      PHP Code:
      native FCNPC_TriggerWeaponShot(npcidweaponidhittypehitidFloat:xFloat:yFloat:zbool:ishit true); 
    • Новые автовызываемые функции
      PHP Code:
      forward FCNPC_OnWeaponShot(npcidweaponidhittypehitidFloat:xFloat:yFloat:z); 

  • v1.4.2
    • Исправления
      • Исправлено повреждение памяти в менеджере проигрывания записей
      • Исправлена инициализация foreach итератора в Filterscript

  • v1.4.1
    • О версии
      • Добавлен foreach итератор FCNPC

    • Исправления
      • Исправлены функции FCNPC_GetMovePoint и FCNPC_GetNumberMovePoint
      • Исправлена автовызываемая функция FCNPC_OnFinishMovePath

    • Новые автовызываемые функции
      PHP Code:
      forward FCNPC_OnDestroy(npcid); 

  • v1.4.0
    • О версии
      • Добавлен опциональный параметр bool:update_pos = false в функции ускорения (FCNPC_Set/GiveVelocity)
      • return 0 в FCNPC_OnUpdate работает так же, как return 0 в OnPlayerUpdate
      • Оптимизация циклов обработки
      • #6: Реализована система путей движения
      • #9: Улучшена система проигрывания записей
      • #12: Оповещение о выходе новой версии

    • Новые функции
      PHP Code:
      native FCNPC_LoadPlayingPlayback(file[]);
      native FCNPC_UnloadPlayingPlayback(recordid);
      native FCNPC_SetPlayingPlaybackPath(npcidpath[]);
      native FCNPC_GetPlayingPlaybackPath(npcidpath[], const size sizeof(path));
      native FCNPC_CreateMovePath();
      native FCNPC_DestroyMovePath(pathid);
      native FCNPC_IsValidMovePath(pathid);
      native FCNPC_AddPointToPath(pathidFloat:xFloat:yFloat:z);
      native FCNPC_AddPointsToPath(pathidFloat:points[][3], const size sizeof(points));
      native FCNPC_RemovePointFromPath(pathidpointid);
      native FCNPC_IsValidMovePoint(pathidpointid);
      native FCNPC_GetMovePoint(pathidpointid, &Float:x, &Float:y, &Float:z);
      native FCNPC_GetNumberMovePoint(pathid);
      native FCNPC_GoByMovePath(npcidpathidtype MOVE_TYPE_AUTOFloat:speed MOVE_SPEED_AUTObool:UseMapAndreas falseFloat:radius 0.0bool:setangle true); 
    • Обновлённые функции
      PHP Code:
      native FCNPC_SetVelocity(npcidFloat:xFloat:yFloat:zbool:update_pos false);
      native FCNPC_GiveVelocity(npcidFloat:xFloat:yFloat:zbool:update_pos false);
      native FCNPC_StartPlayingPlayback(npcidfile[] = ""recordid INVALID_RECORD_IDbool:auto_unload false); 
    • Новые автовызываемые функции
      PHP Code:
      forward FCNPC_OnFinishMovePath(npcidpathid);
      forward FCNPC_OnFinishMovePathPoint(npcidpathidpointid); 
    • Новые константы
      PHP Code:
      #define INVALID_MOVEPATH_ID (-1)
      #define INVALID_RECORD_ID   (-1) 

  • v1.3.1
    • Исправления
      • Исправлена точка начала стрельбы для NPC
      • Исправлен урон в скрипте-примере bodyguard
      • Исправлена корректность работы без объявленных необходимых автовызываемых функций (но их объявление по-прежнему необходимо для работы всех функций)

  • v1.3.0
    • О версии
      • Точность стрельбы (#23)
      • Автовызываемая функция FCNPC_OnUpdate

    • Исправления
      • Больше проверок на подключение игрока (меньше крашей)
      • Исправление FCNPC_GetWeaponInfo

    • Новые функции
      PHP Code:
      native FCNPC_SetWeaponAccuracy(npcidweaponidFloat:accuracy);
      native Float:FCNPC_GetWeaponAccuracy(npcidweaponid); 
    • Обновлённые функции
      PHP Code:
      native FCNPC_SetWeaponInfo(npcidweaponidreload_time = -1shoot_time = -1clip_size = -1Float:accuracy 1.0);
      native FCNPC_GetWeaponInfo(npcidweaponid, &reload_time = -1, &shoot_time = -1, &clip_size = -1, &Float:accuracy 1.0);
      native FCNPC_SetWeaponDefaultInfo(weaponidreload_time = -1shoot_time = -1clip_size = -1Float:accuracy 1.0);
      native FCNPC_GetWeaponDefaultInfo(weaponid, &reload_time = -1, &shoot_time = -1, &clip_size = -1, &Float:accuracy 1.0); 
    • Новые автовызываемые функции
      PHP Code:
      forward FCNPC_OnUpdate(npcid); 

  • v1.2.0
    • О версии
      • Улучшены параметры оружия по умолчанию (deagle, m4, ak47)
      • Добавлено много FCNPC_Give* функций
      • Чистка кода

    • Исправления
      • Исправлена работа параметра delay в функции FCNPC_AimAt
      • Исправлено проигрывание node файлов

    • Новые функции
      PHP Code:
      native FCNPC_GivePosition(npcidFloat:xFloat:yFloat:z);
      native Float:FCNPC_GiveAngle(npcidFloat:angle);
      native FCNPC_GiveQuaternion(npcidFloat:wFloat:xFloat:yFloat:z);
      native FCNPC_GiveVelocity(npcidFloat:xFloat:yFloat:z);
      native Float:FCNPC_GiveHealth(npcidFloat:health);
      native Float:FCNPC_GiveArmour(npcidFloat:armour);
      native FCNPC_GiveAmmo(npcidammo);
      native FCNPC_GiveWeaponSkillLevel(npcidskilllevel);
      native FCNPC_GiveSurfingOffsets(npcidFloat:xFloat:yFloat:z); 

  • v1.1.3
    • О версии
      • Переписан скрипт-пример Bodyguard
      • Оптимизация

    • Исправления
      • Исправление FCNPC_IsStreamedForAnyone
      • Теперь FCNPC_PutInVehicle работает для NPC находящихся в транспорте
      • Исправлена работа изменения времени стрельбы и задержки
      • Исправлено много предупреждений при компиляции
      • Добавлено много проверок на валидность (меньше крэшей)

    • Новые автовызываемые функции
      PHP Code:
      forward FCNPC_OnGiveDamage(npcidissueridweaponidbodypartFloat:health_loss); 

  • v1.1.2
    • Изменения
      • Исправлена работа на Linux

  • v1.1.1
    • О версии
      • Сёрфинг теперь поддерживает прикреплённые объекты
      • Оптимизация
      • Добавлены константы скорости в инклуд файл
      • Обновлено загрузочное сообщение

    • Исправления
      • Исправлена валидация объектов и транспорта (меньше крэшей)
      • Исправлена проверка версии инклуд файла (спасибо плагину Streamer от Incognito за пример)
      • Исправлен радиус движения для функции FCNPC_GoToPlayer
      • Исправлены типы переменных и их конвертация
      • Исправлена работа скорости и типа в функции GoTo
      • Исправлена ошибка со сбросом скорости поезда
      • Исправлена синхронизация двигателей тяги в Hydra и скорости поезда при проигрывании записи
      • Исправлены некоторые крэши при удалении транспорта NPC

    • Новые директивы
      PHP Code:
      #define MOVE_SPEED_AUTO     (-1.0)
      #define MOVE_SPEED_WALK     (0.1552086)
      #define MOVE_SPEED_RUN      (0.56444)
      #define MOVE_SPEED_SPRINT   (0.926784) 

  • v1.1.0
    • О версии
      • Улучшено определение цели в функции FCNPC_AimAt
      • Теперь NPC могут наносить урон другому игроку (для предотвращения этого вы можете возвратить 0 в FCNPC_OnTakeDamage)
      • Добавлена проверка версии инклуд файла
      • Теперь функция FCNPC_GoToPlayer обновляет точку назначения NPC пока игрок двигается
      • Добавлены функции для контроля тяги в Hydra
      • Добавлены функции для контроля шасси
      • shoot_delay по умолчанию изменён на -1 (не важно)
      • Оптимизация процесса прицеливания
      • Небольшой рефакторинг исходного кода

    • Исправления
      • Исправлен крэш для недействительного транспорта во время проигрывания записи
      • Исправлена синхронизация позиции NPC при сёрфинге (прицеплении к транспорту)
      • Исправлена стрельба при сёрфинге
      • Исправлена работа аргумента speed в функциях FCNPC_GoTo[Player] (теперь он работает для пеших NPC тоже)
      • Исправлено направление прицеливания по оси Z
      • Сброс клавиш NPC после смерти (исправляет некоторые ошибки с анимациями)
      • Исправлена проверка на параметры в функциях информации об оружии

    • Новые функции
      PHP Code:
      native FCNPC_StopSurfing(npcid);
      native FCNPC_IsAttacking(npcid);
      native FCNPC_IsAimingAtPlayer(npcidplayerid);
      native FCNPC_IsMovingAtPlayer(npcidplayerid);
      native FCNPC_SetVehicleHydraThrusters(npciddirection);
      native FCNPC_GetVehicleHydraThrusters(npcid);
      native FCNPC_SetVehicleGearState(npcidgear_state);
      native FCNPC_GetVehicleGearState(npcid); 

  • v1.0.7
    • Изменения
      • Исправлены кнопки передвижения (были некоторые проблемы с анимацией передвижения)
      • Исправлено исчезновение тела (#15)
      • Добавлена проверка на передаваемый адрес MapAndreas (больше не будет крашить, если адрес недействителен)
      • Добавлены некоторые проверки на вводимые параметры
      • Удалён сброс данных прицеливания из MeleeAttack (теперь вы можете использовать FCNPC_AimAtPlayer совместно с FCNPC_MeleeAttack)
      • FCNPC_AimAt(Player) останавливает прицеливание перед началом нового
      • Исправлен и оптимизирован перехват автовызываемых функций (теперь это отлично работает с filterscript)
      • Исправлено действие по возвращаемому значению из автовызываемой функции (теперь это работает)
      • Оптимизация (совсем чуть-чуть)

  • v1.0.6
    • О версии
      • Добавлены аналоговые UD и LR в FCNPC_SetKeys

    • Исправления
      • Исправлено получение урона в скрипте Bodyguard
      • Исправлено воскрешение NPC после рестрима
      • Установлены корректные клавиши при передвижении игрока
      • Исправлен крэш после отключения NPC
      • Исправлена причина и killerid при убийстве NPC

    • Изменённые функции
      PHP Code:
      native FCNPC_SetKeys(npcidud_analoglr_analogkeys); 

  • v1.0.5
    • О версии
      • Нижний регистр для папки с путями (node) (сейчас путь выглядит так: **scriptfiles/FCNPC/nodes/NODES%d.DAT**);
      • Файлы путей (node) добавлены в репозиторий и windows архив с плагином.

    • Исправления
      • Исправлены и оптимизированы некоторые скрипты примеры (citizens, missions);
      • Исправлена система playback (теперь она работает).

    • Новые функции
      PHP Code:
      native FCNPC_IsStreamedForAnyone(npcid); 

  • v1.0.4
    • О версии
      • Небольшое обновление, исправляющее ошибки.

    • Исправления
      • Крэш после вызова KillPlayer.

  • v1.0.3
    • О версии
      • Новый параметр для FCNPC_AimAt[Player] - setangle.
      • Внутренняя оптимизация циклов.
      • Удалены функции и параметры для работы с уроном NPC.
      • Удалена автовызываемая функция FCNPC_OnGiveDamage.
      • Удалены функции DriveBy (удалены, потому что не работали нормально).

    • Исправления
      • Исправлено состояние оружия у NPC.
      • Очистка памяти для некоторых указателей.

  • v1.0.2
    • О версии
      • FCNPC_EnterVehicle теперь работает практически идеально;
      • FCNPC_SetWeaponDamage теперь работает, не идеально, но работает;
      • FCNPC_SetSkin теперь работает идеально (без рестрама NPC);
      • Больше информации в крэшлог (+backtrace для Linux версии плагина).

    • Исправления
      • FCNPC_ExitVehicle;
      • FCNPC_SetWeaponDamage;
      • Установка угла транспорта при посадке в него;
      • Подключение NPC на сервер с одним слотом;
      • Крэш для оружия с размером обоймы равное нулю;
      • Стандартные значения урона оружия.

    • Новые автовызываемые функции
      PHP Code:
      forward FCNPC_OnGiveDamage(npciddamagedidweaponidbodypartFloat:health_loss); 

  • v1.0.1
    • О версии
      • Теперь есть два метода установки анимации для NPC:
      • FCNPC_SetAnimation[ByName], FCNPC_ResetAnimation: работает с данными синхронизации. Анимация переигрывается после рестрима. Необходимо использовать FCNPC_ResetAnimation (с небольшой задержкой) перед переигровкой этой анимации.
      • FCNPC_ApplyAnimation, FCNPC_ClearAnimations: отправляет RPC пакеты игрокам в зоне стрима, работает как ApplyAnimation.

    • Исправления
      • Крэш OnPlayerGiveDamage
      • Валидация MAX_PLAYER
      • Некоторые типы переменных

    • Новые функции
      PHP Code:
      native FCNPC_SetAnimationByName(npcidname[], Float:fDelta 4.1loop 0lockx 1locky 1freeze 0time 1);
      native FCNPC_ResetAnimation(npcid);
      native FCNPC_ApplyAnimation(npcidanimlib[], animname[], Float:fDelta 4.1loop 0lockx 1locky 1freeze 0time 1);
      native FCNPC_ClearAnimations(npcid); 
      Note: параметр name[] в FCNPC_SetAnimationByName имеет маску НАЗВАНИЕ_БИБЛИОТЕКИ:НАЗВАНИЕ_АНИМАЦИИ, пример использования: PED:WALK_DRUNK.

  • v1.0.0
    • О версии
      • NPC теперь могут быть убиты в транспорте.
      • Транспорт теперь получает урон, если на водительском сидении сидит NPC (чтобы отключить это, возвратите 0 в FCNPC_OnVehicleTakeDamage).
      • OnPlayerStreamIn/Out теперь не вызываются для FCNPC (используйте FCNPC_OnStreamIn/Out).
      • NPC теперь можно прикрепить к транспорту, объекту или объекту игрока (доступно изменение смещение).
      • Контроль сирены транспорта NPC.
      • Контроль здоровья транспорта NPC.
      • Теперь можно контролировать урон, размер магазина, скорость стрельбы и скорость перезарядки оружия для всех или для каждого NPC.
      • Контроль WeaponSkill для оружия (с изменением уроня для двойного оружия).
      • Теперь можно контролировать силу броска гранаты, с помощью параметра shoot_delay в FCNPC_AimAt.
      • Добавлен параметр UseFightstyle в FCNPC_MeleeAttack, с помощью которого NPC могут бить с использованием Fightstyle.
      • Добавлено значение delay по умолчанию в FCNPC_MeleeAttack.
      • В функции FCNPC_GoTo теперь можно отключить автоматическую установку угла поворота (полезно для использования совместно с FCNPC_SetQuaternion).
      • Функция FCNPC_SetSkin теперь не респавнит, а рестримит NPC.
      • Новые функции для контроля угла поворота NPC (FCNPC_SetAngleToPos, FCNPC_SetAngleToPlayer).
      • Функции неуязвимости (FCNPC_SetInvulnerable, FCNPC_IsInvulnerable).
      • Добавлен MOVE_TYPE_AUTO для FCNPC_GoTo (автоматически проверят NPC на нахождение в транспорте).
      • Добавлен параметр radius для FCNPC_GoTo (NPC пойдёт к случайным координатам в пределах этого радиуса от точки назначения).

    • Исправления
      • NPC не наносят урона при стрельбе.
      • Угол поворота транспорта меняется при посадке в него NPC.
      • NPC атакуют после спавна.
      • NPC не стреляют после первой перезарядки.
      • Валидация скинов из SA-MP 0.3.7.

    • Внутренние изменения
      • Поддержка Windows и Linux SA-MP серверов версии 0.3.7 и 0.3.7 R2-1.
      • Добавлена корректная валидация пассажирского места при посадке в транспорт.
      • Заместо ZMap встроен MapAndreas 1.2.1 (http://forum.sa-mp.com/showpost.php?...&postcount=153).
      • Множество изменений в коде (замена Detours на subhook, переход на CMake, внедрение YSF Structs.h, замена небезопасных функций, оптимизация и другое).

  • Beta 15
    • Исправлен вход и выход из транспорта.
    • Исправлена стрельба (перезарядка, конечность патронов...), на первый взгляд остался лишь один небольшой баг.
    • Успешное создание патронов, NPC теперь могут стрелять (Спасибо kurta999 за его YSF плагин).
    • Добавлены функции FCNPC_ToggleReloading и FCNPC_ToggleInfiniteAmmo.
    • Переименованы все функции проигрывания записей в "playing" вместо "recording" (FCNPC_StartPlayingPlayback вместо FCNPC_StartRecordingPlayback).

  • Beta 14 R3
    • Исправлен случайный крэш linux версии (из-за неправильного перехвата).

  • Beta 14 R2
    • Исправлен крэш при спавне NPC.

  • Beta 14
    • Добавлена linux версия.
    • Исправлена работа FCNPC_AimAt.

  • Beta 13
    • Плагин теперь автоматически ищет необходимые адреса и смещения в памяти (теперь не нужно обновлять плагин с каждым обновлением сервера)
    • Урон NPC теперь обрабатывается внутри плагина.
    • Исправлен баг с прицеливанием вверх, когда NPC промахивался (спасибо abagail).
    • Добавлен обработчик исключений, который создаёт лог файл при падении сервера.

  • Beta 12 R2
    • Добавлена поддержка SAMP сервера версии 0.3z R2-2
    • Возможно исправлена система урона в Linux версии

  • Beta 12
    • Добавлена поддержка SAMP сервера версий 0.3z and 0.3z R1-2 (обе используют одинаковые адреса в памяти)
    • Добавлена полностью рабочая linux версия (теперь система урона включена)
    • NPC теперь на стороне клиента выглядят как NPC
    • Добавлено определение части тела в систему урона (спасибо Kalcor за внедрение этого в 0.3z)

  • Beta 11
    • Добавлена поддержка SAMP сервера версии 0.3x R2 (теперь FCNPC поддерживает 0.3x R1-2 и R2 версии)
    • Исправлена linux версия (по прежнему нет системы урона NPC, но, в основном, работает стабильно)
    • Исправлен повышенный пинг у NPC в TAB-меню
    • Исправлены параметры автовызываемых функций

  • Beta 10 RC 1
    • Исправлены проблемы с входом в транспорт (больше никакого переворачивания и других проблем)
    • Исправлено направление взгляда игрока (больше никакого вглядывания в землю)
    • Исправлена неточность GoTo
    • Добавлен параметр "Floatpeed" в функцию GoTo для контроля ускорения транспорта
    • Добавлена функция FCNPC_GetZGround для получения высоты местонсти (Z) по координатам X, Y

  • Beta 10
    • Исправлен краш при стрельбе в другого игрока
    • Добавлено значение "health_loss" в "FCNPC_OnTakeDamage"
    • Добавлен тип движения в "FCNPC_EnterVehicle"
    • Исправлена стрельба NPC (очень точная, теперь они могут стрелять в вас даже если вы находитесь на другой высоте)
    • Добавлены скрипт missions для демонстрации правильного использования этого плагина
    • Исправлены пути движения (node)

  • Beta 9
    • Исправлено определение урона (очень точный, основанный на перехвате автовызываемой функции "OnPlayerGiveDamage")
    • Исправлен переворот транспорта при входе в него NPC
    • NPC теперь могут посдке в транспорт выбросить игрока из него
    • Исправлена задержка атаки ближнего боя

  • Beta 8 R2
    • Исправлен метод создания (более чистый и эффективный метод, заменены грязные хуки и патчи)
    • Исправлены крэши на linux (надеюсь)
    • Исправлены значения урона оружия
    • Добавлены проверки значений maxplayers и maxnpc

  • Beta 8
    • Исправлено определение урона (точное определение урона с частью тела и уроном от оружия)
    • Добавлена linux версия (может быть найдена в загружаемом архиве)
    • Добавлена поддержка атаки ближнего боя (FCNPC_MeleeAttack и FCNPC_StopAttack)
    • Исправлены другие небольшие баги

  • Beta 7
    • Добавлена полная поддержка путей GTA SA (nodes) (смотри citiziens.pwn для большей информации)
    • Исправлено передвижение игрока
    • Исправлена езда (теперь работает очень плавно)
    • Исправлена установка или получение состояния транспорта игрока (позиция, ускорение и другие)

  • Beta 6
    • NPC теперь используют нормальные ID (playerid), никаких больше самодельных ID
    • Добавлен MOVE_TYPE_DRIVE, теперь NPC могут водить транспорт
    • Исправлено возгорание транспорта при посадке NPC в качестве водителя
    • Исправлен небольшой баг при создании NPC и добавлены некоторые дополнительные проверки
    • Исправлен неправильный ID транспорта при посадке в него

  • Beta 5 R3
    • Исправлен метод создания (исправлены связанные с этим крэши)

  • Beta 5 R2
    • Исправлен краш при создании NPC
    • Исправлено повышеное потребление CPU

  • Beta 5
    • Исправлен метод создания NPC (больше не используется samp-npc.exe) все падения и ошибки, связанные с созданием исправлены
    • Добавлено временное решение для определения урона (только игроки могут стрелять в NPC)
    • Исправлен угол прицеливания Z (теперь NPC могут попадать в цель при стрельбе)
    • Добавлена функция FCNPC_GetNPCID для определения ID NPC из ID игрока
    • Улучшен вход в транспорт (теперь анимация применяется должным образом)

  • Beta 4
    • Исправлен ID у NPC начинающийся с maxplayers в config.cfg вместо 500
    • Исправлено падение при большом количестве NPC (теперь вы можете создавть столько, сколько хотите без крашей)
    • Добавлена функция FCNPC_GetPlayerID (возвращает реальный ID игрока)
    • Добавлена возможность отключить использование карты высот (ZMap) при передвижении

  • Beta 3
    • Исправлено или ограничено использование пропускной способности для каждого NPC (может быть настроено с помощью FCNPC_SetUpdateRate)
    • Исправлены анимации входа и выхода в транспорт (довольно идеальны теперь)
    • Добавлена функция FCNPC_SetPlayerWeaponSkill
    • Исправлена скорость передвижения NPC при спринте и достижения пункта назначения
    • Добавлена карта высот (ZMap) для передвижений NPC (никакого больше полёта при передвижении)

  • Beta 2
    • Исправлен краш при создании NPC
    • NPC больше не лезут в слот 500
    • Исправлен поджог транспорта при посадке в него NPC
    • Исправлены неправильные параметры, передаваемые в автовызываемые функции, такие как FCNPC_Spawn, FCNPC_Create и другие (вызывало много проблем)
    • Исправлен id транспорта в FCNPC_EnterVehicle

  • Beta 1 R2
    • Исправлена проблема с портом
Видео Благодарности
  • SA-MP Team: SA-MP
  • OrMisicL: Разработка
  • ZiGGi: Обновление
  • Zeex: Библиотека Subhook
  • kurta999: YSF плагин
  • Admigo: Тестирование
  • iJumbo: Тестирование Linux версии
  • Lorenc_, kurta999, therainycat: Помощь
Reply
#2

Можно какие-то примеры?
Reply
#3

Красавиц, отличная работа. Молодец что поддерживаешь плагин за это тебе жирный лойс.
Reply
#4

Quote:
Originally Posted by Stuntff
View Post
Можно какие-то примеры?
Они таки есть в пункте "скачать"
Reply
#5

Есть ли возможность скомпилировать версию плагина 1.0.5 под 0.3z?
Reply
#6

Quote:
Originally Posted by Bombo
View Post
Есть ли возможность скомпилировать версию плагина 1.0.5 под 0.3z?
Есть прошлые версии плагина под данную версию.
Reply
#7

Quote:
Originally Posted by Bombo
View Post
Есть ли возможность скомпилировать версию плагина 1.0.5 под 0.3z?
Последнюю нет, слишком много изменений в структурах.
Reply
#8

Позволю себе задать свой вопрос в этой теме.

У меня есть сервер на 0.3z, переход на 0.3.7 не планируется (из-за всем известной вкладки). На сервер нужно добавить NPC на плагине FCNPC (другие совершенно не подходят!). Поскольку текущую версию FCNPC под 0.3z скомпилировать нереально, остаётся два выхода: либо построить всё на 0.1 B15 (или ниже), либо скомпилировать более раннюю версию 1.0.0 ветки. С версией 0.1 B15 под Linux возникла проблема - плагин крашит при создании NPC. Полная информация об этой ошибке - ниже.

Code:
[02:09:05] init_npc_zombies() start
[02:09:05] [debug] Server crashed while executing menu.amx
[02:09:05] [debug] AMX backtrace:
[02:09:05] [debug] #0 native FCNPC_Create () from FCNPC.so
[02:09:05] [debug] #1 000c83b0 in public init_npc_zombies () from menu.amx
[02:09:05] [debug] #2 0006d43c in public OnFilterScriptInit () from menu.amx
[02:09:05] [debug] Native backtrace:
[02:09:05] [debug] #0 b737250b in _ZN10StackTraceC1EPv () from plugins/crashdetect.so
[02:09:05] [debug] #1 b736b20f in _ZN11CrashDetect20PrintNativeBacktraceERSoPv () from plugins/crashdetect.so
[02:09:05] [debug] #2 b736c3fc in _ZN11CrashDetect20PrintNativeBacktraceEPv () from plugins/crashdetect.so
[02:09:05] [debug] #3 b736c866 in _ZN11CrashDetect11OnExceptionEPv () from plugins/crashdetect.so
[02:09:05] [debug] #4 b737215c in ?? () from plugins/crashdetect.so
[02:09:05] [debug] #5 b776cbd0 in ?? ()
[02:09:05] [debug] #6 b534bd2e in _ZN14CSAMPFunctions9NewPlayerEPc () from plugins/FCNPC.so
[02:09:05] [debug] #7 b534b649 in _ZN14CPlayerManager9AddPlayerEPc () from plugins/FCNPC.so
[02:09:05] [debug] #8 b5344b38 in _ZN8CNatives12FCNPC_CreateEP6tagAMXPi () from plugins/FCNPC.so
[02:09:05] [debug] #9 08093d84 in ?? () from ./samp03test
[02:09:05] [debug] #10 b736df7b in _ZN11CrashDetect13DoAmxCallbackEiPiS0_ () from plugins/crashdetect.so
[02:09:05] [debug] #11 b7370f78 in ?? () from plugins/crashdetect.so
[02:09:05] [debug] #12 b7374f96 in amx_Exec () from plugins/crashdetect.so
[02:09:05] [debug] #13 b736d226 in _ZN11CrashDetect9DoAmxExecEPii () from plugins/crashdetect.so
[02:09:05] [debug] #14 b7370cd9 in ?? () from plugins/crashdetect.so
[02:09:05] [debug] #15 b72ded36 in ?? () from plugins/streamer.so
[02:09:05] [debug] #16 0809ff66 in ?? () from ./samp03test
[02:09:05] [debug] #17 0809df8d in ?? () from ./samp03test
[02:09:05] [debug] #18 0809e927 in ?? () from ./samp03test
[02:09:05] [debug] #19 080da68a in ?? () from ./samp03test
[02:09:05] [debug] #20 08093d84 in ?? () from ./samp03test
[02:09:05] [debug] #21 b736df7b in _ZN11CrashDetect13DoAmxCallbackEiPiS0_ () from plugins/crashdetect.so
[02:09:05] [debug] #22 b7370f78 in ?? () from plugins/crashdetect.so
[02:09:05] [debug] #23 b7374f96 in amx_Exec () from plugins/crashdetect.so
[02:09:05] [debug] #24 b736d226 in _ZN11CrashDetect9DoAmxExecEPii () from plugins/crashdetect.so
[02:09:05] [debug] #25 b7370cd9 in ?? () from plugins/crashdetect.so
[02:09:05] [debug] #26 b72ded36 in ?? () from plugins/streamer.so
[02:09:05] [debug] #27 080a36bb in ?? () from ./samp03test
[02:09:05] [debug] #28 080a98bd in ?? () from ./samp03test
[02:09:05] [debug] #29 080a8162 in ?? () from ./samp03test
[02:09:05] [debug] #30 b73ad73e in __libc_start_main () from /lib/i386-linux-gnu/libc.so.6
В функции FCNPC_Create() ошибка. Более детально:

код самого плагина с отладочной информацией:
PHP Code:
class CSAMPRakPeer
{
        
// +0xA = wMaxPlayers
        
public:
                
CSAMPRemoteSystem *GetRemoteSystem(unsigned short usIndex)
                {
fprintf(stderr"ok:SAMPRakPeer.h GetRemoteSystem(), this=0x%x\n",this);
fprintf(stderr"ok:SAMPRakPeer.h GetRemoteSystem(), CAddress::OFFSET_RemoteSystemManager=0x%x\n",CAddress::OFFSET_RemoteSystemManager);
fprintf(stderr"ok:SAMPRakPeer.h GetRemoteSystem(), SYSTEM_MANAGER_OFFSET=0x%x\n",SYSTEM_MANAGER_OFFSET);
                        
// Get the remote system manager
                        
CSAMPRemoteSystemManager *pRemoteSystemManager = *(CSAMPRemoteSystemManager **)(this CAddress::OFFSET_RemoteSystemManager SYSTEM_MANAGER_OFFSET);
fprintf(stderr"ok1:SAMPRakPeer.h GetRemoteSystem()\n");
                        
// Get the remote system
                        
return (CSAMPRemoteSystem *)(pRemoteSystemManager CAddress::OFFSET_RemoteSystemSize usIndex);
                }
... 
результат:
Code:
ok:SAMPRakPeer.h SetConnectedPlayer()
ok:SAMPRakPeer.h GetRemoteSystem(), this=0x937a320
ok:SAMPRakPeer.h GetRemoteSystem(), CAddress::OFFSET_RemoteSystemManager=0xe6740003
ok:SAMPRakPeer.h GetRemoteSystem(), SYSTEM_MANAGER_OFFSET=0x4
Segmentation fault (core dumped)
ОС: Ubuntu 16.04

Как мне кажется, дело в этом адресе: CAddress::OFFSET_RemoteSystemManager, который, судя по всему, выше определяется направильно. Хотелось бы знать, что это за адрес, и как допилить плагин до рабочего состояния. Обращаюсь к знатокам FCNPC, в частности, к ZiGGi
Reply
#9

На сколько мне известно, версия B15 работает только под 0.3.7. Тебе нужно использовать версию Beta 12 R2.
В принципе, последнюю версию можно попытаться адаптировать для 0.3z, для этого нужно использовать старые структуры (можно взять из YSF) и, наверное, отключить пару функций. Может быть попробую реализовать в отдельной ветке.
Reply
#10

Quote:
Originally Posted by ZiGGi
View Post
На сколько мне известно, версия B15 работает только под 0.3.7. Тебе нужно использовать версию Beta 12 R2.
В принципе, последнюю версию можно попытаться адаптировать для 0.3z, для этого нужно использовать старые структуры (можно взять из YSF) и, наверное, отключить пару функций. Может быть попробую реализовать в отдельной ветке.
Спасибо, помог.
Reply
#11

FCNPC 1.0.6

О версии
- Добавлены аналоговые UD и LR в FCNPC_SetKeys

Исправления
- Исправлено получение урона в скрипте Bodyguard
- Исправлено воскрешение NPC после рестрима
- Установлены корректные клавиши при передвижении игрока
- Исправлен крэш после отключения NPC
- Исправлена причина и killerid при убийстве NPC

Изменённые функции
PHP Code:
native FCNPC_SetKeys(npcidud_analoglr_analogkeys); 
Скачать
- Скачать со страницы релизов GitHub: https://github.com/Open-GTO/FCNPC/releases

------------------------------------------
Quote:
Originally Posted by Bombo
View Post
Спасибо, помог.
@Bombo, открыл ветку 03zR4, но пока подключить NPC не удаётся. Точнее удаётся, но по непонятной мне причине NPC сразу отключается.
Reply
#12

FCNPC 1.0.7

Изменения
- Исправлены кнопки передвижения (были некоторые проблемы с анимацией передвижения)
- Исправлено исчезновение тела (#15)
- Добавлена проверка на передаваемый адрес MapAndreas (больше не будет крашить, если адрес недействителен)
- Добавлены некоторые проверки на вводимые параметры
- Удалён сброс данных прицеливания из MeleeAttack (теперь вы можете использовать FCNPC_AimAtPlayer совместно с FCNPC_MeleeAttack)
- FCNPC_AimAt(Player) останавливает прицеливание перед началом нового
- Исправлен и оптимизирован перехват автовызываемых функций (теперь это отлично работает с filterscript)
- Исправлено действие по возвращаемому значению из автовызываемой функции (теперь это работает)
- Оптимизация (совсем чуть-чуть)
Reply
#13

Quote:
Originally Posted by ZiGGi
View Post
@Bombo, открыл ветку 03zR4, но пока подключить NPC не удаётся. Точнее удаётся, но по непонятной мне причине NPC сразу отключается.
Хорошо, если проект захватит и предыдущую версию SA:MP. Во-первых, не понадобится переписывать код NPC в моде при переходе на 0.3.7 (и обратно, такое тоже бывает), и, во-вторых, исправлены довольно серьёзные ошибки в плагине.

UPD: Если найду время, попробую запустить своими силами
Reply
#14

Quote:
Originally Posted by Bombo
View Post
Хорошо, если проект захватит и предыдущую версию SA:MP.
Вы хотите что бы данный плагин вшили в samp сервер? Это было бы круто!
Reply
#15

Quote:
Originally Posted by Kolstin
View Post
Вы хотите что бы данный плагин вшили в samp сервер? Это было бы круто!
Это вряд ли случится. Он имеет ввиду то, что если этот плагин будет поддерживать SA-MP 0.3z, то это будет хорошо.
Reply
#16

Quote:
Originally Posted by ZiGGi
View Post
Это вряд ли случится. Он имеет ввиду то, что если этот плагин будет поддерживать SA-MP 0.3z, то это будет хорошо.
Как по мне, это бесполезно. Не нужно зацикливаться на старых версиях самп.
Reply
#17

ZIGGI ни в одном из модов нет этих пабликов, функций, стоков
- OnPlayerGiveDamage
- OnPlayerWeaponShot
- OnPlayerStreamIn
- OnPlayerStreamOut
но в одном моде бот смертный, в другом безсмертный понятия не имею что делает его безсмертным
Reply
#18

Quote:
Originally Posted by OmegaKiller72
View Post
ZIGGI ни в одном из модов нет этих пабликов, функций, стоков
- OnPlayerGiveDamage
- OnPlayerWeaponShot
- OnPlayerStreamIn
- OnPlayerStreamOut
но в одном моде бот смертный, в другом безсмертный понятия не имею что делает его безсмертным
Без OnPlayerGiveDamage хотябы в одном из загруженных скриптов (это может быть как gamemode так и filterscript), система урона работать не будет. Ещё NPC может быть бессмертным из-за неуязвимости, задать которую можно с помощью функции FCNPC_SetInvulnerable. И также, урон не проходит при возврате 0 в FCNPC_OnTakeDamage.
Reply
#19

Quote:
Originally Posted by ZiGGi
View Post
Без OnPlayerGiveDamage хотябы в одном из загруженных скриптов (это может быть как gamemode так и filterscript), система урона работать не будет. Ещё NPC может быть бессмертным из-за неуязвимости, задать которую можно с помощью функции FCNPC_SetInvulnerable. И также, урон не проходит при возврате 0 в FCNPC_OnTakeDamage.
так в том то и дело что OnPlayerGiveDamage нигде нету, но в некоторых модах без этой функции бот умирает!, FCNPC_SetInvulnerable стоит в одном месте с false, FCNPC_OnTakeDamage тоже нигде нет, но опять же, в некотрых модах бот смертный
Reply
#20

Quote:
Originally Posted by OmegaKiller72
View Post
так в том то и дело что OnPlayerGiveDamage нигде нету, но в некоторых модах без этой функции бот умирает!, FCNPC_SetInvulnerable стоит в одном месте с false, FCNPC_OnTakeDamage тоже нигде нет, но опять же, в некотрых модах бот смертный
Не обязательно наличие OnPlayerGiveDamage в моде, может быть в загружаемых FS это есть. В любом случае, если они не умирают, то этот callback стоит объявить.
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)