Как сделать проверку на припятствия?

AndroSamp

Известный
Автор темы
297
48
Можно сделать легкую проверку на припятствие? Например чтобы возвращал ID модели перед собой, и по возможности перепригивал её просто, или обходил.

Сделать сие чудо нужно на LUA.
 

AndroSamp

Известный
Автор темы
297
48
bool result, table colPoint = processLineOfSight(float originX, float originY, float originZ, float targetX, float targetY, float targetZ, [bool checkSolid=true], [bool car=false], [bool ped=false], [bool object=false], [bool particle=false], [bool seeThrough=false], [bool ignoreSomeObjects=false], [bool shootThrough=false])
И как это примерно использовать?
 

AndroSamp

Известный
Автор темы
297
48
Тебе все входные данные даны, для полного понимания перейди по ссылке и там увидешь подробно
Не возвращает ни координатов объекта с которым должно произойти столкновение, ни дистанции до объета. Начинает строчить только если ты находишься за каким-то объектом. Так трудно понять, когда нужно прыгнуть.
 

Basho

Известный
148
52
Не возвращает ни координатов объекта с которым должно произойти столкновение, ни дистанции до объета. Начинает строчить только если ты находишься за каким-то объектом. Так трудно понять, когда нужно прыгнуть.
Lua:
require "lib.moonloader"
require "lib.sampfuncs"
local sampev = require 'lib.samp.events'
local font = renderCreateFont("Arial", 10, 5)
--result, table colPoint = processLineOfSight(float originX, float originY, float originZ, float targetX, float targetY, float targetZ, [bool checkSolid=true], [bool car=false], [bool ped=false], [bool object=false], [bool particle=false], [bool seeThrough=false], [bool ignoreSomeObjects=false], [bool shootThrough=false])

local enabled = false

local tCarsName = {"Landstalker", "Bravura", "Buffalo", "Linerunner", "Perrenial", "Sentinel", "Dumper", "Firetruck", "Trashmaster", "Stretch", "Manana", "Infernus",
"Voodoo", "Pony", "Mule", "Cheetah", "Ambulance", "Leviathan", "Moonbeam", "Esperanto", "Taxi", "Washington", "Bobcat", "Whoopee", "BFInjection", "Hunter",
"Premier", "Enforcer", "Securicar", "Banshee", "Predator", "Bus", "Rhino", "Barracks", "Hotknife", "Trailer", "Previon", "Coach", "Cabbie", "Stallion", "Rumpo",
"RCBandit", "Romero","Packer", "Monster", "Admiral", "Squalo", "Seasparrow", "Pizzaboy", "Tram", "Trailer", "Turismo", "Speeder", "Reefer", "Tropic", "Flatbed",
"Yankee", "Caddy", "Solair", "Berkley'sRCVan", "Skimmer", "PCJ-600", "Faggio", "Freeway", "RCBaron", "RCRaider", "Glendale", "Oceanic", "Sanchez", "Sparrow",
"Patriot", "Quad", "Coastguard", "Dinghy", "Hermes", "Sabre", "Rustler", "ZR-350", "Walton", "Regina", "Comet", "BMX", "Burrito", "Camper", "Marquis", "Baggage",
"Dozer", "Maverick", "NewsChopper", "Rancher", "FBIRancher", "Virgo", "Greenwood", "Jetmax", "Hotring", "Sandking", "BlistaCompact", "PoliceMaverick",
"Boxvillde", "Benson", "Mesa", "RCGoblin", "HotringRacerA", "HotringRacerB", "BloodringBanger", "Rancher", "SuperGT", "Elegant", "Journey", "Bike",
"MountainBike", "Beagle", "Cropduster", "Stunt", "Tanker", "Roadtrain", "Nebula", "Majestic", "Buccaneer", "Shamal", "hydra", "FCR-900", "NRG-500", "HPV1000",
"CementTruck", "TowTruck", "Fortune", "Cadrona", "FBITruck", "Willard", "Forklift", "Tractor", "Combine", "Feltzer", "Remington", "Slamvan", "Blade", "Freight",
"Streak", "Vortex", "Vincent", "Bullet", "Clover", "Sadler", "Firetruck", "Hustler", "Intruder", "Primo", "Cargobob", "Tampa", "Sunrise", "Merit", "Utility", "Nevada",
"Yosemite", "Windsor", "Monster", "Monster", "Uranus", "Jester", "Sultan", "Stratum", "Elegy", "Raindance", "RCTiger", "Flash", "Tahoma", "Savanna", "Bandito",
"FreightFlat", "StreakCarriage", "Kart", "Mower", "Dune", "Sweeper", "Broadway", "Tornado", "AT-400", "DFT-30", "Huntley", "Stafford", "BF-400", "NewsVan",
"Tug", "Trailer", "Emperor", "Wayfarer", "Euros", "Hotdog", "Club", "FreightBox", "Trailer", "Andromada", "Dodo", "RCCam", "Launch", "PoliceCar", "PoliceCar",
"PoliceCar", "PoliceRanger", "Picador", "S.W.A.T", "Alpha", "Phoenix", "GlendaleShit", "SadlerShit", "Luggage A", "Luggage B", "Stairs", "Boxville", "Tiller",
"UtilityTrailer"}--THX DON HOMKA

function main()
while not isSampAvailable() do wait(0) end
sampRegisterChatCommand("ai", function() enabled = not enabled
if enabled then

end end)
while true do
wait(0)
    if enabled then
        local posX, posY = getScreenResolution()
        local yx, yy = convert3DCoordsToScreen(ox, oy, oz)
        local px, py = convertGameScreenCoordsToWindowScreenCoords(640, 445)
        px = px / 1.885
        py = py / 2.505
        local ox, oy, oz = getCharCoordinates(playerPed)
        local tx,ty,tz = convertScreenCoordsToWorld3D(px, py, 700.0)
        local res, t = processLineOfSight(ox, oy, oz, tx, ty, tz, true, true, true, true, true, true, false, true)
        if res then
            if t.entityType == 1 then
                local obj = getAllObjects()
                for i, val in ipairs(obj) do
                    local obs = val
                    local model = getObjectModel(obs)
                    local _, cX, cY, cZ = getObjectCoordinates(obs)
                    local distanse = getDistanceBetweenCoords3d(ox, oy, oz, cX, cY, cZ)
                    if model == 1281 and distanse <= 8 then
                        printStringNow('da', 1000)
                    end
                end
            end
        end
    end
end
end

Если расстояние до стола (1281 id модели) меньше 8, то выводит текст "da"
Дальше думаю сам разберешься как тебе что удобнее
за основу брал "RIA" @T1cKz'a[/CODE]
 
Последнее редактирование:
  • Нравится
Реакции: chromiusj

trefa

3d print
Всефорумный модератор
2,117
1,282
Не возвращает ни координатов объекта с которым должно произойти столкновение, ни дистанции до объета. Начинает строчить только если ты находишься за каким-то объектом. Так трудно понять, когда нужно прыгнуть.
Ну вообще возвращает, а дистанцию уже можно посчитать.
1613165122633.png
 

AndroSamp

Известный
Автор темы
297
48

trefa

3d print
Всефорумный модератор
2,117
1,282

AndroSamp

Известный
Автор темы
297
48
Код покажи, наверняка ошибка в коде/расчётах.
Я, наверное, поздно.
Lua:
local ox, oy, oz = getCharCoordinates(playerPed)
local res, colPoint = processLineOfSight(ox, oy, oz, coord.x, coord.y, coord.z, true, true, true, true, false, false, false, true)
print(res)

Конечные координаты такие: 2254.39,-2492.68,29.08