Перейти к контенту

Рекомендуемые сообщения

зачем ее опять убивать?

Причём тут "убивать"?

Если сделать, чтобы функции condlist'ов могли вызываться не только из xr_conditions и xr_effects, то можно будет добавлять что-то новое простым копированием скриптов в нужное место, а указывать на них уже через эти конфиги. Куда уж ещё автономнее? Я просто не уверен насчёт производительности и других возможных подводных камней.

Изменено пользователем Полтергейст
  • Полезно 1
Ссылка на комментарий

@Полтергейст, я понимаю что ты не подразумевал свистопляски с xr_что-то_там, но тебе в любом случае придется создавать хотя-бы один конфиг что-бы писать туда все вызовы, а зачем это надо? Куда удобнее в самом скрипте писать а его подключать автоматически например, то есть я добавил скрипт в папку - и он работает, убрал и он не работает, зачем мне конфиги?

Ссылка на комментарий

2 Полтергейст:

 

У тебя что-то странное написалось. Не знаю, что имелось в виду, а написалось - странное.

xr_effects/xr_conditions - давно уже "не только", с самого amk. Благо, изменения синтаксиса для этого не потребовалось.

 

Вот баг в логике этого дела, когда on_info, on_infoN, on_что-попало разбираются так, что в таблице оказывается в итоге [true] = section - со всеми вытекающими - таки да.

 

И, если менять синтаксис - эго надо сразу менять на что-то вменяемое. Чтобы и глазом читалось, и машинный разбор был не таким монстровидным, как сейчас.

Ссылка на комментарий

@Wlad777

Каков смысл некого радиуса от ГГ ? Он всегда будет отсчитываться от ГГ и следовательно всегда нельзя будет подбирать предметы. Может имеется в виду запретить ГГ взятие предметов при каких-то условиях, типа нахождения в определенном месте или на какое-то время ?

Касаемо собственно запрета на взятие предметов, то здесь копать в сторону ф-ций set_nonscript_usable(true\false) и set_tip_text("").

Ссылка на комментарий

@UnLoaded

 

Я туда и копаю, но не выходит что-то.

Смысл в том, что хочу запретить подбирать с оружием в руках.

 

Update: Разобрался, всё получилось. :)

Изменено пользователем Wlad777

---------------------------------

www.amk-zone.de

Ссылка на комментарий

Помогите! Не работает в скрипте функция запотевания динамического худа. Если не трудно, объясните на пальцах что да как!

 

--------------------------------------------------------------------------------
--Dinamic HUD from ABC Inferno and AMK
--by Rulix aka Bak
--------------------------------------------------------------------------------
-- чтобы отключить эффект, поставьте вместо единицы ноль:
local suithud_enable = 1 -- худ шлема
local blurs_enable = 0 -- эффект запотевани¤ - не работает
local blood_enable = 1 -- эффект ранени¤
local bleed_enable = 1 -- эффект плохого самочувстви¤
local hit_enable = 1 -- эффект попадани¤ по игроку
--------------------------------------------------------------------------------

local helmets = {helm_respirator = {hud = "hud_gas",breakable = true},
helm_hardhat = {hud = "hud_mil",breakable = true},
helm_protective = {hud = "hud_sci",breakable = true},
helm_tactic = {hud = "hud_kill",breakable = true},
helm_battle = {hud = "hud_kill",breakable = true},
scientific_outfit = {hud = "hud_sci",breakable = true},
exo_outfit = {hud = "hud_exo",breakable = true}}

local no_drop_items = {bolt = true,
wpn_knife = true}

local seldom_upd_time,often_upd_time
function update()
if db.actor then
local tg = time_global()
if tg > (seldom_upd_time or 100) then
seldom_upd_time = tg+300
helmet_hud()
bleedcondition()
end
if tg > (often_upd_time or 30) then
often_upd_time = tg+50
init_blurs()
blood()
set_blood()
hit_effect()
end
end
end

local prev_health = 0
function hit_effect()
if hit_enable == 0 then
return
end
if prev_health > db.actor.health+0.05 then
level.add_pp_effector("amk_shoot.ppe",2011,false)
level.set_pp_effector_factor(2011,(prev_health-db.actor.health)*100)
if prev_health > db.actor.health+0.2 then
local cameffs,sounds
if prev_health > db.actor.health+0.5 then
cameffs = {"head_shot","fusker"}
sounds = {"pain_4","pain_1","hit_5","hit_6"}
else
cameffs ={"shell_shock","hit_front","hit_right","hit_back","hit_left","hit_front_left","hit_back_left","hit_front_right","hit_back_right"}
sounds = {"pain_2","pain_3","pain_5","pain_6","pain_7","pain_8"}
end
level.add_cam_effector("camera_effects\\"..cameffs[math.random(#cameffs)]..".anm",999,false,"")
local snd_obj = sound_object("actor\\"..sounds[math.random(#sounds)])
snd_obj:play(db.actor,0,sound_object.s2d)
if math.random() < (prev_health-db.actor.health)/2.5 then
local active_item = db.actor:active_item()
if active_item and not no_drop_items[active_item:section()] then
db.actor:drop_item(active_item)
end
end
end
end
prev_health = db.actor.health
end

local current_suithud
local helmet_condition
local pre_hud_type = ""
function helmet_hud()
if suithud_enable == 0 then
return
end
local hud_type
local helmet = db.actor:alive() and (db.actor:item_in_slot(12) or db.actor:get_current_outfit())
if helmet then
local sect = helmet:section()
if helmets[sect] then
helmet_condition = "blue"
if helmets[sect].breakable == true then
local cond = helmet:condition()
if cond > 0.87 then helmet_condition = "blue"
elseif cond > 0.69 then helmet_condition = "green"
elseif cond > 0.60 then helmet_condition = "yellow"
elseif cond > 0.40 then helmet_condition = "red"
elseif cond > 0.25 then helmet_condition = "red2"
else helmet_condition = "red3" end
end
hud_type = helmets[sect].hud.."_"..helmet_condition
pre_hud_type = helmets[sect].hud
end
end
setmysuithud(hud_type)
end

local suitfirstrun = true
function setmysuithud(hudtype)
local hud = get_hud()
if not hudtype then
local wchud = hud:GetCustomStatic(current_suithud)
if wchud then
hud:RemoveCustomStatic(current_suithud)
end
current_suithud = nil
suitfirstrun = true
elseif hudtype ~= current_suithud then
if current_suithud then
hud:RemoveCustomStatic(current_suithud)
end
hud:AddCustomStatic(hudtype)
if string.find(hudtype,pre_hud_type) then
if suitfirstrun == false and helmet_condition ~= "green" and helmet_condition ~= "blue" then
local snd_obj = sound_object("material\\glass\\glass_fall03hl")
snd_obj:play(db.actor,0,sound_object.s2d)
end
if suitfirstrun == true then
suitfirstrun = false
end
end
current_suithud = hudtype
end
end

local actor_last_health = 0
local bloodtime = 0
local bloodtimeb = 0
local isbleeding = "no"
local countblood = 0
function blood()
if blood_enable == 0 then return end
local radwidth = db.actor.radiation
if radwidth == 0 then
if db.actor:alive() then
local current_health = math.floor(db.actor.health*100)
local cbloodtime = time_global()
if cbloodtime > bloodtime and isbleeding == "stopit" then
for i=1,4 do
if get_hud():GetCustomStatic("hud_blood"..i) then
get_hud():RemoveCustomStatic("hud_blood"..i)
isbleeding = "no"
end
end
end
if cbloodtime > bloodtime then
bloodtime = time_global() + 1500
if actor_last_health > current_health and actor_last_health ~= 0 then
isbleeding = "yes"
end
actor_last_health = math.floor(db.actor.health * 100)
end
end
end
end

local m_blood = nil
function set_blood()
if blood_enable == 0 then return end
local radwidth = db.actor.radiation
local cbloodtimed = time_global()
if cbloodtimed > bloodtimeb and isbleeding == "yes" and radwidth == 0 then
bloodtimeb = time_global() + 170
m_blood = {}
countblood = countblood + 1
get_hud():AddCustomStatic("hud_blood"..countblood)
m_blood[countblood] = get_hud():GetCustomStatic("hud_blood"..countblood):wnd()
local chudblood = "hud_blood"..countblood
if countblood == 4 then
isbleeding = "stopit"
countblood = 0
end
end
end

local isactcondset = false
local radeffect = false
function bleedcondition()
if bleed_enable == 0 then return end
if db.actor.health < 0.31 and isactcondset ~= true then
level.add_pp_effector("alcohol.ppe",2012,true)
isactcondset = true
end
if db.actor.health > 0.30 and isactcondset ~= false then
level.remove_pp_effector(2012)
isactcondset = false
end
if db.actor.radiation > 0.3 and radeffect ~= true then
level.add_pp_effector("alcohol.ppe", 2013,true)
radeffect = true
end
if db.actor.radiation == 0 and radeffect ~= false then
level.remove_pp_effector(2013)
radeffect = false
end
end

function init_blurs()
if blurs_enable == 0 then return end
if current_suithud and not string.find(current_suithud,"_red3") then
local zoom=67.5/device().fov
zoom = (zoom-1)*1.5+1
if zoom < 1.001 then
zoom = 1.001
end
local stretchy = 0.75/(math.floor(device().aspect_ratio*1000)/1000)
if stretchy < 1 then
stretchy = 1
end
local rect = {x = -768*zoom+768,y = (-512*zoom+512)*stretchy-(stretchy-1)*300,w = 1024*zoom,h = 768*zoom*stretchy}
set_blurs(true,rect)
else
set_blurs(false)
end
end

local blurs
local blurval = 0 -- уровень запотевани¤ от 0 до 1
local blurlt = 0 -- врем¤ последнего обновлени¤
local blurcyctime = 0 -- врем¤ начала последнего цикла дыхани¤ (выдох)
local blurlastphase = 0
function set_blurs(enabled,rect)
local hud = get_hud()
if not enabled then
for i=1,4 do
local bh = hud:GetCustomStatic("hud_blur"..i)
if bh then
hud:RemoveCustomStatic("hud_blur"..i)
end
end
return
end
if not (blurs and hud:GetCustomStatic("hud_blur1")) then
blurs = {}
for i=1,4 do
hud:AddCustomStatic("hud_blur"..i)
blurs = hud:GetCustomStatic("hud_blur"..i):wnd()
-- blurs:SetWidth(0)
end
end
-- ÷иклы в зависимости от силы дыхани¤: 0->1->0 0->1->2->4->5->0 0->1->2->3->4->5->0 5->4->3->4->5 4->3->4
local power = db.actor.power
local period = 1.0+power*power*1.0 -- текуща¤ частота дыхани¤ от 30 до 120 циклов в минуту
local expirt = 0.3
local breathpower = 3
local delta = (time_global()-blurlt)/1000 -- дельта в секундах
local phase = (time_global()-blurcyctime)/1000 -- фаза дыхательного цикла в сек.
blurlt = time_global()
if phase > period then
phase = phase%period
blurcyctime = blurlt-phase*1000
end
if blurlastphase > phase then
blurlastphase = 0
end
local blurdelta = delta*-0.7 -- работа вентилл¤ции
if blurlastphase < expirt and phase < expirt then
blurdelta = blurdelta+(phase-blurlastphase)*breathpower
elseif blurlastphase < expirt then
blurdelta = blurdelta+(expirt-blurlastphase)*breathpower
end
blurlastphase = phase
blurval = blurval+blurdelta
if blurval > 0.999 then
blurval = 0.999
elseif blurval < 0 then
blurval = 0
end
local tm = math.floor(blurval*3)
local tmn = (tm+1)
local v = blurval*3-math.floor(blurval*3)
v = 1-v
local v1 = 1-v
if tm ~= 0 then
blurs[tm]:SetColor(GetARGB(v*255,255,255,255))
end
if tmn ~= 0 then
blurs[tmn]:SetColor(GetARGB(v1*255,255,255,255))
end
for i=1,4 do
if i == tm or i == tmn then
blurs:SetWndRect(Frect():set(rect.x,rect.y,rect.w,rect.h))
else
blurs:SetWndRect(Frect():set(rect.x,rect.y,0,0))
end
end
end

 

Изменено пользователем Дедушка Тапок
Ссылка на комментарий

 

 

Если не трудно, объясните на пальцах что да как!

На пальцах: отображение запотевания маски шлема\противогаза работает на каком-то апдейте, т.е. периодически вызываемая ф-ция. Обычно используется апдейт класса actor_binder из файла bind_stalker.script.

Ссылка на комментарий

@Дедушка Тапок,

--Dinamic HUD from ABC Inferno and AMK
--by Rulix aka Bak
--------------------------------------------------------------------------------
-- чтобы отключить эффект, поставьте вместо единицы ноль:
local suithud_enable = 1 -- худ шлема
local blurs_enable = 0 -- эффект запотевани¤ - не работает

Единицу ставить пробовал? Хотя, если приписка "не работает" на нем сделана авторами, то наверное "так и должно быть".

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Мож не сюда, но попробую. Существует мод, отображающий метки объектов, типа сталкеров, монстров, аномалий, на экране, ака HUD.

В нём есть функция, рассчитывающая местположение метки на экране, но она нормально работает только при FOV = 55. Если FOV поменять, то метки будут на месте, только если смотреть непосредственно на объект, отмеченный меткой. Если начать отворачиваться от объекта, то метка уплывает с него. Автор мода дал примерное место внесения поправки. Собственно, функция, где собираются параметры, и считаются поправки

 

function update_mark()
    --Базовые параметры о ГГ
    act_pos = db.actor:position()
    act_dir = device().cam_dir
    cam_pos = device().cam_pos
    hud = get_hud()
    
    --Убрать все метки если проигрывается катсцена или есть инфопорция "hide_all_ui_mark"
    hide_all_mark = false
    if not db.actor:object("detector_fenix") or (act_pos:distance_to_sqr(cam_pos) > 4) or (has_alife_info("hide_all_ui_mark")) then hide_all_mark = true end
    
    --Угол обзора ГГ
    fov = math.floor(device().fov+0.02)

    --Коэффициент растягивания изображения меток по горизонтали (3:4 = 1, 9:16 = 0,75 )
    rise = (device().height*1024)/(device().width*768)

    --Функции обновления меток на экране
    update_npc()
    update_anom()
    update_art()
    update_monstr()
end

 

И функция расчёта положения и вывода метки. Для других объектов - аналогично

 

function update_npc()
    local index_mark = 1
    
    --Обновление/добавление меток НПС
    if not hide_all_mark then
    for id_base, npc_base_pos in pairs(npc_base_table) do
        local dist = act_pos:distance_to_sqr(npc_base_pos)
        if dist < 900 then
            local npc_pos = vector():set(npc_base_pos.x,npc_base_pos.y,npc_base_pos.z)
            local npc_dir = npc_pos:sub(act_pos)
            local yaw = yaw_degree3d(act_dir, npc_dir)
            if yaw < 35 then
                if index_mark < 33 then
                    anglI = math.atan2(act_dir.z, act_dir.x) - math.atan2(npc_dir.z, npc_dir.x)
                    anglII = math.atan2(math.sqrt(npc_dir.x*npc_dir.x+npc_dir.z*npc_dir.z), npc_dir.y) - math.atan2(math.sqrt(act_dir.x*act_dir.x+act_dir.z*act_dir.z), act_dir.y)
                    Xcoord = math.floor(512 + 512*math.tan(anglI)/math.cos(anglII)*512/360*rise)
                    Ycoord = math.floor(384 + 384*math.tan(anglII)*384/200)
                    if index_mark > npc_last_mark then
                        hud:AddCustomStatic("npc_hud_mark_"..tostring(index_mark))
                        npc_mark_table[index_mark] = hud:GetCustomStatic("npc_hud_mark_"..tostring(index_mark)):wnd()
                    end
                    npc_mark_table[index_mark]:SetWndRect(Frect():set(Xcoord-8,Ycoord-8,Xcoord+8,Ycoord+8))
                    index_mark = index_mark + 1
                end
            end
        end
    end
    end
    
    npc_last_mark = index_mark - 1
    
    --Удаление лишних меток НПС
    if index_mark < 33 then
        for i=index_mark,32 do
            if npc_mark_table[i] then
                hud:RemoveCustomStatic("npc_hud_mark_"..tostring(i))
                npc_mark_table[i] = nil
            end
        end
    end
    
    --Очистка таблицы НПС
    if index_mark == 1 then
        npc_nul_mark_time = npc_nul_mark_time + 1
        if npc_nul_mark_time > 100 then
            npc_base_table = {}
            npc_nul_mark_time = 0
        end
    else
        npc_nul_mark_time = 0
    end
    
end

 

Автор мода советует вносить поправку в переменную rise. Я экспериментально выяснил, что при rise = 0.55 метка находится на своём месте. Только не могу сообразить, как этого добиться при различном FOV.

Может, кто свежими мозгами глянет, как этот самый FOV учесть? Тут больше математики, на самом деле, чем скриптования...

 

Автор мода, к сожалению, не имеет больше желания им заниматься.

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий
---"Функция проекции точки на экран"

function point_projection(point)
--[[   
    взято с амк-форума,
]]
    local dev = device()
    local scr_w = dev.width
    local scr_h = dev.height

    local fov2 = (dev.fov/2) * (math.pi/180)
    local scr_dist = 0.5 * scr_h / math.tan(fov2)

    local ppp = vector():sub(point, dev.cam_pos)
    local dp = dev.cam_dir:dotproduct(ppp)

    local x = 512 + dev.cam_right:dotproduct(ppp) * scr_dist / dp * (1024/scr_w)
    local y = 384 - dev.cam_top:dotproduct(ppp)   * scr_dist / dp * (768/scr_h)
    return {x, y}
end
--Функция учитывает возможное разрешение экрана, режим зума и то, что камера может наклоняться. Можно использовать в различных целеуказателях.

 

Это валяется где-то на страницах амк-форума уже многие годы. Что мешает пересадить всю вычислительную арифметику на эту функцию?

Изменено пользователем Zander_driver
  • Спасибо 1
  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

@Zander_driver, Спасибо, попробую применить

@Карлан, Ну, что у автора было, то и показываю. Код, конечно, тяжеловатый, но как его исправить - моих мозгов, к сожалению, не хватает. Вот пример выше дали, завтра попробую переделать.

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

Есть строка вида "ляля_ляля_f", надо взять от нее часть без "_f". Подскажите самый быстрый способ.

Попробовал: string.sub(строка, 1, string.len(строка) - 2) и string.sub(строка, 1, #строка - 2) - медленно...

Ссылка на комментарий

@Zander_driver, Ну и вообще, кто может... Нужна подсказка по применению. В каком виде должно в point_projection(point) должна передаваться эта самая point?

Переделал скрипт, добавил в него функцию point_projection(point) и немного переписал имеющиеся...

function update_mark()
    --Базовые параметры о ГГ
    local cam_pos = device().cam_pos
    local act_pos = db.actor:position()
    local act_dir = device().cam_dir
    local hud = get_hud()
    
    --Убрать все метки если проигрывается катсцена или есть инфопорция "hide_all_ui_mark"
    hide_all_mark = false
    if not db.actor:object("detector_fenix") or (act_pos:distance_to_sqr(cam_pos) > 4) or (has_alife_info("hide_all_ui_mark")) then hide_all_mark = true end
    
    --Угол обзора ГГ
    local fov = math.floor(device().fov+0.02)

    --Коэффициент растягивания изображения меток по горизонтали (3:4 = 1, 9:16 = 0,75 )
--    rise = (device().height*1024)/(device().width*768)
    
    --Функции обновления меток на экране
    update_npc( act_pos, act_dir, fov, hud)
--[[    update_anom()
    update_art()
    update_monstr()]]--
end

 

function update_npc( act_pos, act_dir, fov, hud)
    local index_mark = 1
    local fov_y = fov/2

    --Обновление/добавление меток НПС
    if not hide_all_mark then
    for id_base, npc_base_pos in pairs(npc_base_table) do
        local dist = act_pos:distance_to_sqr(npc_base_pos)
        if dist < 900 then
            local npc_pos = vector():set(npc_base_pos.x,npc_base_pos.y,npc_base_pos.z)
            local npc_dir = npc_pos:sub(act_pos)
            local yaw = yaw_degree3d(act_dir, npc_dir)
            if yaw < fov_y then
                if index_mark < 33 then
                    local p_coord = point_projection(npc_base_pos)
                    local Xcoord = p_coord.x
                    local Ycoord = p_coord.y
                    if index_mark > npc_last_mark then
                        hud:AddCustomStatic("npc_hud_mark_"..tostring(index_mark))
                        npc_mark_table[index_mark] = hud:GetCustomStatic("npc_hud_mark_"..tostring(index_mark)):wnd()
                    end
                    npc_mark_table[index_mark]:SetWndRect(Frect():set(Xcoord-8,Ycoord-8,Xcoord+8,Ycoord+8))
                    index_mark = index_mark + 1
                end
            end
        end
    end
    end
    
    npc_last_mark = index_mark - 1
    
    --Удаление лишних меток НПС
    if index_mark < 33 then
        for i=index_mark,32 do
            if npc_mark_table[i] then
                hud:RemoveCustomStatic("npc_hud_mark_"..tostring(i))
                npc_mark_table[i] = nil
            end
        end
    end
    
    --Очистка таблицы НПС
    if index_mark == 1 then
        npc_nul_mark_time = npc_nul_mark_time + 1
        if npc_nul_mark_time > 100 then
            npc_base_table = {}
            npc_nul_mark_time = 0
        end
    else
        npc_nul_mark_time = 0
    end
    
end

 

НПЦ складируются в npc_base_table = {}, которая наполняется

function npc_update(object)
    --Добавить НПС в таблицу
    npc_base_table[object:id()] = object:position()
end

 

Так вот, при приближении к НПЦ происходит вылет

 

 * Game rkleshchev - начало игры.scop is successfully saved to file 'c:\users\public\documents\stalker-cop\savedgames\rkleshchev - начало игры.scop'
! [SCRIPT ERROR]: c:\gam\s-cop\gamedata\scripts\ui_mark.script:93: attempt to perform arithmetic on local 'Xcoord' (a nil value)
 
FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : ..\xrServerEntities\script_engine.cpp
[error]Line          : 193
[error]Description   : <no expression>
[error]Arguments     : LUA error: c:\gam\s-cop\gamedata\scripts\ui_mark.script:93: attempt to perform arithmetic on local 'Xcoord' (a nil value)

 


Пробовал так же в point_projection(point) передавать npc_pos - тот же результат... Или же я неправильно из неё координаты пытаюсь получить?

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

@UnLoaded, а куда быстрее? Попробуй еще match, ну или gsub. Я боюсь представить что у тебя за код в котором sub дает ощутимую нагрузку :).
 
@Romz, был-бы ТЧ, я дал бы тебе готовый код, а так я сделаю вид что не врубаюсь во всякие SetWndRect, и посоветую тебе пока заняться чем-то другим, пока не прозреешь как это доделать до того что нужно. Твой код я даже не представляю кто писал, там элементарные операции с векторами камеры и вектором позиции объектов, причем объекты как ты видишь по видео можно разобрать до костей, а в твоем коде много лишнего сделанного на стандартном функционале ЗП. Жди спецов по ЗП, они может узнают функции в твоем скрипте, а я опять сделаю вид что не узнал.

Ссылка на комментарий

Камрады, подскажите.

Есть на уровне несколько однотипных объектов.

Какой функцией можно определить что расстояние до самого ближнего к ГГ меньше определённого расстояния?

В этих переборах и таблицах я всегда путаюсь. :(

  • Полезно 1

---------------------------------

www.amk-zone.de

Ссылка на комментарий

@Wlad777, например так:

local client_objects_array = {} -- массив клиентских объектов, расстояние до которых нужно проверить.
function check_distance()
  for _,object in pairs(client_objects_array) do
    if db.actor:position():distance_to(object:position()) < 100 then return true
  end
  return false
end
Вернёт true при любом объекте из массива, находящемся ближе 100 метров.

Мерить расстояние до самого ближнего объекта не имеет смысла, так как если дальний объект укладывается в нужное расстояние, то и ближний - автоматически тоже.

Изменено пользователем Kirgudu
  • Полезно 1
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...