04:40
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: Dima-kun  
Основные функции NPC ботов в SAMP
EzonДата: Вторник, 15.04.2014, 12:16 | Сообщение # 1
Освоившийся
Группа: Продвинутые
Сообщений: 136
Награды: 0
Репутация: 31
Замечания: 0%
Статус:
Основные функции NPC ботов в SAMP

В этом разделе мы рассмотрим основные функции плагина FCNPC, с помощью которого и будем создавать NPC. Рассмотрим основные функции и паблики, а так же сделаем выводы, плюс пара слов о личном опыте использования, итак, поехали!
FCNPC_SetUpdateRate(rate) – обновление какого-либо/каких-либо NPC, мы не будем использовать эту функцию, вместо неё используем таймеры, некоторые вещи будет нереально осуществить, используя эту функцию.
FCNPC_Create(name[]) – создание NPC. При создании NPC уникальным его идентификатор является имя, которое мы зададим, но об этом позже.
FCNPC_Destroy(npcid) – удаляет NPC. Думаю здесь всё понятно, данная функция должна обязательно в “ public OnFilterScriptExit()”.
FCNPC_Spawn(npcid, skinid, Float:X, Float:Y, Float:Z) – указываем место появления NPC в следующем формате: к какому NPC обращаемся, какой у него будет скин, координаты x,y,z.
FCNPC_Respawn(npcid) – перерождает NPC. Работает, когда вы убили NPC ( не удалять же его с сервера, поэтому используем данную функцию, но об этом позже).
FCNPC_IsSpawned(npcid) – выполняется если NPC заспавнен, лично я не использую подобные функции, они бесполезны ИМХО, а в большинстве случаев и не работают, плагин-то ещё 0.1 версия.
FCNPC_Kill(npcid) – убить NPC. Если NPC получают урон, то зачем нам эта функция спросите Вы? Отвечаю: функция полезнейшая, например, вы стреляете по NPC, сидящему на мотоцикле, что же происходит: его хп снижается до 0, но он так и продолжает сидеть ( не порядок), делаем проверку и выполняем эту функцию: теперь, когда у нашего NPC на мотоцикле 0 хп он умрет.
FCNPC_IsDead(npcid) – очередная ненужная функция ИМХО, выполняется, когда NPC умер.
FCNPC_SetPosition(npcid, Float:X, Float:Y, Float:Z) – задает позицию NPC, думаю сами уже догадались по какому принципу. Выполняется непосредственно, когда NPC уже заспавнен.
FCNPC_GetPosition(npcid, &Float:X, &Float:Y, &Float:Z) – получаем позицию NPC, например пишем new Float:X, Float:Y, Float:Z; и в эти координаты уже пишем: FCNPC_GetPosition(npcid,X,Y,Z);
Используется функция довольно-таки часто, смотря какой скрипт.
FCNPC_SetAngle(npcid, Float:Angle) – задать угол для NPC, аналогично примеру выше, только создаем new Float:angle, далее догадаетесь.
Float:FCNPC_GetAngle(npcid) – получаем угол NPC. Уникальность в том, что вам не надо создавать отдельную переменную под получение угла NPC.
FCNPC_SetQuaternion(npcid, Float:X, Float:Y, Float:Z, Float:A) – простым смертным не понять:D Если честно я не использую эту функцию, но она чаще вредит, чем помогает, кватернион это поворот NPC в пространстве, можете почитать об этом в гугле, то есть мы можем заспавнить NPC, который не прямо стоит на месте, а скажем на 45 градусов под наклоном, когда плагин багает (NPC, кстати, очень придираются к вашему коду, можно сказать исправляя некоторые ошибки, хотя pawn всё пропускает и сервер тоже:D) то они могут заспавниться даже вверх ногами.
FCNPC_GetQuaternion(npcid, &Float:X, &Float:Y, &Float:Z, &Float:A) – получаем кватернион.
FCNPC_SetVelocity(npcid, Float:X, Float:Y, Float:Z) - задать скорость NPC, имеет смысл чаще всего, если NPC находится в транспортном средстве.
FCNPC_GetVelocity(npcid, &Float:X, &Float:Y, &Float:Z) – получить скорость, честно говоря, я не использую эти функции, как-то без них обходился.
FCNPC_SetInterior(npcid, interiorid) – задать интерьер для NPC, скажем хотите в Калигуле заспавнить, зная id мира Калигулы можно и NPC туда переместить, конечно, через FCNPC_SetPosition, либо спавнить там уже, не знаю работает ли это, очередная бесполезная функция, ибо всё работает и с SetPlayerVirtualWorld.
FCNPC_GetInterior(npcid) – получаем id интерьера.
FCNPC_SetHealth(npcid, Float:health) – задаем жизни для NPC.
FCNPC_GetHealth(npcid) – получаем жизни. Обычно используется:
if(FCNPC_GetHealth(npcid)==0){};
FCNPC_SetArmour(npcid, Float:armour) –задаем броню для NPC.
FCNPC_GetArmour(npcid) – получаем броню NPC.
FCNPC_SetSkin(npcid, skinid) – задаем скин, актуально если NPC уже заспавнен.
FCNPC_GetSkin(npcid) – получаем скин NPC.
FCNPC_SetWeapon(npcid, weaponid) – выдаем NPC оружие. Огнестрельное оружие не работает без патронов, но об этом дальше.
FCNPC_GetWeapon(npcid) – получаем оружие NPC.
FCNPC_SetAmmo(npcid, ammo) – очень важная функция, если у NPC нет патронов он будет лишь целиться, функция нацеливания/стрельбы далее, выдавайте NPC патроны.
FCNPC_GetAmmo(npcid) – получаем патроны для NPC.
FCNPC_SetKeys(npcid, Keys) – задаем нажатие клавиш для NPC. Очень важная вещь для некоторых моментов. Например, хотите Вы создать NPC-боксера, хотите, чтобы он защищался, а не был просто мешком для битья, так скажите ему об этом, конечно же, на языке pawn.
FCNPC_GetKeys(npcid, &UDAnalog, &LRAnalog, &Keys) – получаем клавиши для NPC.
FCNPC_SetSpecialAction(npcid, actionid) – тут у нас не прокатит, как с виртуальными мирами, но зато анимации работают как виртуальные миры и для них нет отдельных функций в плагине, а вот для специальных действий функция имеется.
FCNPC_GetSpecialAction(npcid) – получаем особое действие NPC.
FCNPC_GoTo(npcid, Float:X, Float:Y, Float:Z, type, Float:speed, UseZMap) - уже интереснее. Заставляем NPC двигаться к координатам, обращаю внимание, что type – это способ передвижения NPC, способы написаны ниже:
MOVE_TYPE_WALK - NPC идет пешком;
MOVE_TYPE_RUN - NPC перемещается легким бегом;
MOVE_TYPE_SPRINT - NPC перемещается быстрым бегом;
MOVE_TYPE_DRIVE - NPC перемещается на машине.
Идем дальше! Координата скорости нужна только тогда, когда NPC находится в транспортном средстве, последний же пункт UseZMap, спрашивает нас хотим ли мы, чтобы NPC бежал сам или используя Zmap. Пара слов о Zmap – это такая карта высот, то есть, чтобы NPC не бегал через стены в здании zmap портнет его на крышу, моё мнение о zmap – не использовать никогда и не при каких обстоятельствах. Объясняю: zmap архинеточен, нединамичен (создали вы объект свой, а zmap это не учитывает и машины он вам пропустит, и чего он только не сделает, чтобы огорчить вас, но добивающим комбо является отнятие 70 Мегабайт оперативки сверху, при использовании плагина map andreas). Вообщем, вещь недоделанная, была бы она детально проработана, было бы по-настоящему круто, мы могли бы делать офигенно умных NPC в плане нахождения и поиска пути, а на том этапе, что есть сейчас он нам не нужен, конечно если Вы поставите единичку сервер не отнимет у вас 70 МБ оперативки (наверное) , если и отнимет, то на время движения NPC, просто договоримся, что у нас всегда будет стоять нулик, а не единичка в этом месте.
FCNPC_Stop(npcid) – остановить NPC. Работает остановка при движении NPC, при выполнении анимации и может чем-то ещё, так сразу и не вспомнишь)
FCNPC_IsMoving(npcid) – ну здесь уже вещь понужнее чем IsSpawn или IsDead, работает, когда NPC движется.

FCNPC_AimAt(npcid, Float:X, Float:Y, Float:Z, shoot) – заставляет NPC целиться/стрелять, если вместо shoot мы ставик нулик, то NPC целиться, если единичку, то стреляет, напоминаю, NPC без патронов не будет в Вас стрелять, ибо воздух в SA:MP не наносит урона.
FCNPC_StopAim(npcid) – останавливает прицеливание, если NPC целиться он не может двигаться и прочее, для этого и останавливаем ему прицеливание.
FCNPC_MeleeAttack(npcid, delay) – заставляет NPC жать ЛКМ так часто, как скажите, вместо delay пишем время в миллисекундах, оптимально, как я считаю, это 250. Функция нафиг ненужная ИМХО, на первый взгляд для кого-то и жизненно важная, но только для тех, кто не видит возможностей SetKey для NPC. Собственно, здесь мы и возвращаемся к боксеру, тупо жмущему ЛКМ, или же с помощью задания алгоритма по правильному использованию передвижений и кнопок, делаем нормального блочащего боксера и атакующего не только ЛКМ, но и разными комбо, ну не только боксер, можно и кунг фу, суть Вы уловили, я надеюсь.
FCNPC_StopAttack(npcid) – останавливает безумие, описанное выше)
FCNPC_IsAiming(npcid) – выполняется, если NPC целиться.
FCNPC_IsShooting(npcid) – выполняется, если NPC стреляет.
FCNPC_IsReloading(npcid) – выполняется, если NPC перезаряжается, ну как выполняется, там значение-то 0 или 1, типа да или нет.
FCNPC_EnterVehicle(npcid, vehicleid, seatid, type) – ммм, начинается веселье. Сажает NPC в машинку или прочее ТС, где vehicleid пишем id машинки, затем место, на которое NPC сядет от 0, 0 – водительское место и тип, не знаю зачем он тут, ну я писал DRIVE, о типах выше. Итак, что же делает данная функция? Если машинка заспавнена правильно (колеса по z не проседают), то NPC бежит к машине и садиться в неё, да-да вы не ослышались САДИТСЯ, прямо как настоящий человек)
FCNPC_ExitVehicle(npcid) – как настоящий человек выходит изТС.
FCNPC_PutInVehicle(npcid, vehicleid, seatid) - ТС далеко или ещё что-то, сажаем NPC, в отличие от функции выше, здесь не будет никакой красивой посадке тупо ТП в машину туда-то и да, вы не сможете использовать ExitVehicle, если посадили через PutInVehicle, для этого существует функция FCNPC_RemoveFromVehicle(npcid) (хотя может и сможете, я хз, лично я не смог:D) .
FCNPC_GetVehicleID(npcid) – получаем id машины NPC, не пробовал, но скорее всего можно как и GetPlayerVehicleID.
FCNPC_GetVehicleSeat(npcid) – получаем сидение для NPC.
FCNPC_StartRecordingPlayback(npcid, file[]) – стартуем запись для NPC. Записи рекомендую использовать при езде NPC на машине, некоторые участки не запрограммируешь, это архисложно, так что если наш NPC куда-то едет, то лучше использовать запись, но опять же, смотря что вам надо если местность относительно ровная и плавная, можно замутить и через goto перемещения.
FCNPC_StopRecordingPlayback(npcid) – прерывает действие записи.
FCNPC_PauseRecordingPlayback(npcid) – приостанавливает действие записи. Зачем это нужно, спросите Вы? Отвечаю: создали мы бота автобусника, перед нами впереди человек или машина, нам что давить его что ли ну или машину таранить? Нет! Мы просто приостановим запись, от имени NPC что-то напишем хулиганам, перекрывающим путь, ну и дальше как ваша фантазия пойдет, можно сделать, чтобы хоть NPC с битой выходил и разбирался, а если машина впереди без человека можно и тарануть это всё очень на любителя, плагин позволит всё это выполнить.
FCNPC_ResumeRecordingPlayback(npcid) – продолжаем воспроизведения записи. Устранили препятствие впереди нас – едем дальше).

Плагин имеет относительно большой функционал, функции работают, версия на линуксе уже имеется, но NPC там не убиваемы и сами не могут убить ( текущая версия SA:MP 0.3z R1-2), лучшая версия для тренировки с NPC на плагине на данный момент это 0.3x последнее обновление плагина для этой версии, там вообще нет линукс версии, но зато в windows версии NPC стреляют и нормально так, хотя как запрограммируете, но в то же время, есть небольшой минус в 0.3x в виде ников у NPC над головой, который местами багают, в 0.3 z в связи с вводом официальных повреждений для NPC Вы не увидите ников NPC, а так же их нахождении в табличке на TAB. Так вот, плагин в целом рабочий, осуществим можно очень и очень многое, стоит как минимум потренироваться



Если хочешь быть как я - ошибка в том, что ты хочешь быть как кто-то. Я никогда не на кого не ровняюсь.

Сообщение отредактировал Ezon - Вторник, 15.04.2014, 12:19
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua