Полтергейст 37 Опубликовано 13 Августа 2015 Поделиться Опубликовано 13 Августа 2015 (изменено) зачем ее опять убивать? Причём тут "убивать"? Если сделать, чтобы функции condlist'ов могли вызываться не только из xr_conditions и xr_effects, то можно будет добавлять что-то новое простым копированием скриптов в нужное место, а указывать на них уже через эти конфиги. Куда уж ещё автономнее? Я просто не уверен насчёт производительности и других возможных подводных камней. Изменено 13 Августа 2015 пользователем Полтергейст 1 Ссылка на комментарий
Карлан 1 049 Опубликовано 13 Августа 2015 Поделиться Опубликовано 13 Августа 2015 @Полтергейст, я понимаю что ты не подразумевал свистопляски с xr_что-то_там, но тебе в любом случае придется создавать хотя-бы один конфиг что-бы писать туда все вызовы, а зачем это надо? Куда удобнее в самом скрипте писать а его подключать автоматически например, то есть я добавил скрипт в папку - и он работает, убрал и он не работает, зачем мне конфиги? Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 14 Августа 2015 Поделиться Опубликовано 14 Августа 2015 2 Полтергейст: У тебя что-то странное написалось. Не знаю, что имелось в виду, а написалось - странное. xr_effects/xr_conditions - давно уже "не только", с самого amk. Благо, изменения синтаксиса для этого не потребовалось. Вот баг в логике этого дела, когда on_info, on_infoN, on_что-попало разбираются так, что в таблице оказывается в итоге [true] = section - со всеми вытекающими - таки да. И, если менять синтаксис - эго надо сразу менять на что-то вменяемое. Чтобы и глазом читалось, и машинный разбор был не таким монстровидным, как сейчас. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Wlad777 24 Опубликовано 15 Августа 2015 Поделиться Опубликовано 15 Августа 2015 Знающие, дапоможите - как бы запретить ГГ подбирать предметы в определённом радиусе ? --------------------------------- www.amk-zone.de Ссылка на комментарий
UnLoaded 313 Опубликовано 15 Августа 2015 Поделиться Опубликовано 15 Августа 2015 в определённом радиусе От чего ? От самого ГГ, или от какого-то места\объекта ? Ссылка на комментарий
Wlad777 24 Опубликовано 15 Августа 2015 Поделиться Опубликовано 15 Августа 2015 От самого ГГ. --------------------------------- www.amk-zone.de Ссылка на комментарий
UnLoaded 313 Опубликовано 15 Августа 2015 Поделиться Опубликовано 15 Августа 2015 @Wlad777 Каков смысл некого радиуса от ГГ ? Он всегда будет отсчитываться от ГГ и следовательно всегда нельзя будет подбирать предметы. Может имеется в виду запретить ГГ взятие предметов при каких-то условиях, типа нахождения в определенном месте или на какое-то время ? Касаемо собственно запрета на взятие предметов, то здесь копать в сторону ф-ций set_nonscript_usable(true\false) и set_tip_text(""). Ссылка на комментарий
Wlad777 24 Опубликовано 15 Августа 2015 Поделиться Опубликовано 15 Августа 2015 (изменено) @UnLoaded Я туда и копаю, но не выходит что-то.Смысл в том, что хочу запретить подбирать с оружием в руках. Update: Разобрался, всё получилось. Изменено 15 Августа 2015 пользователем Wlad777 --------------------------------- www.amk-zone.de Ссылка на комментарий
Дедушка Тапок 61 Опубликовано 16 Августа 2015 Поделиться Опубликовано 16 Августа 2015 (изменено) Помогите! Не работает в скрипте функция запотевания динамического худа. Если не трудно, объясните на пальцах что да как! ----------------------------------------------------------------------------------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_timefunction update()if db.actor thenlocal tg = time_global()if tg > (seldom_upd_time or 100) thenseldom_upd_time = tg+300helmet_hud()bleedcondition()endif tg > (often_upd_time or 30) thenoften_upd_time = tg+50init_blurs()blood()set_blood()hit_effect()endendendlocal prev_health = 0function hit_effect()if hit_enable == 0 thenreturnendif prev_health > db.actor.health+0.05 thenlevel.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 thenlocal cameffs,soundsif prev_health > db.actor.health+0.5 thencameffs = {"head_shot","fusker"}sounds = {"pain_4","pain_1","hit_5","hit_6"}elsecameffs ={"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"}endlevel.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 thenlocal active_item = db.actor:active_item()if active_item and not no_drop_items[active_item:section()] thendb.actor:drop_item(active_item)endendendendprev_health = db.actor.healthendlocal current_suithudlocal helmet_conditionlocal pre_hud_type = ""function helmet_hud()if suithud_enable == 0 thenreturnendlocal hud_typelocal helmet = db.actor:alive() and (db.actor:item_in_slot(12) or db.actor:get_current_outfit())if helmet thenlocal sect = helmet:section()if helmets[sect] thenhelmet_condition = "blue"if helmets[sect].breakable == true thenlocal 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" endendhud_type = helmets[sect].hud.."_"..helmet_conditionpre_hud_type = helmets[sect].hudendendsetmysuithud(hud_type)endlocal suitfirstrun = truefunction setmysuithud(hudtype)local hud = get_hud()if not hudtype thenlocal wchud = hud:GetCustomStatic(current_suithud)if wchud thenhud:RemoveCustomStatic(current_suithud)endcurrent_suithud = nilsuitfirstrun = trueelseif hudtype ~= current_suithud thenif current_suithud thenhud:RemoveCustomStatic(current_suithud)endhud:AddCustomStatic(hudtype)if string.find(hudtype,pre_hud_type) thenif suitfirstrun == false and helmet_condition ~= "green" and helmet_condition ~= "blue" thenlocal snd_obj = sound_object("material\\glass\\glass_fall03hl")snd_obj:play(db.actor,0,sound_object.s2d)endif suitfirstrun == true thensuitfirstrun = falseendendcurrent_suithud = hudtypeendendlocal actor_last_health = 0local bloodtime = 0local bloodtimeb = 0local isbleeding = "no"local countblood = 0function blood()if blood_enable == 0 then return endlocal radwidth = db.actor.radiationif radwidth == 0 thenif db.actor:alive() thenlocal current_health = math.floor(db.actor.health*100)local cbloodtime = time_global()if cbloodtime > bloodtime and isbleeding == "stopit" thenfor i=1,4 doif get_hud():GetCustomStatic("hud_blood"..i) thenget_hud():RemoveCustomStatic("hud_blood"..i)isbleeding = "no"endendendif cbloodtime > bloodtime thenbloodtime = time_global() + 1500if actor_last_health > current_health and actor_last_health ~= 0 thenisbleeding = "yes"endactor_last_health = math.floor(db.actor.health * 100)endendendendlocal m_blood = nilfunction set_blood()if blood_enable == 0 then return endlocal radwidth = db.actor.radiationlocal cbloodtimed = time_global()if cbloodtimed > bloodtimeb and isbleeding == "yes" and radwidth == 0 thenbloodtimeb = time_global() + 170m_blood = {}countblood = countblood + 1get_hud():AddCustomStatic("hud_blood"..countblood)m_blood[countblood] = get_hud():GetCustomStatic("hud_blood"..countblood):wnd()local chudblood = "hud_blood"..countbloodif countblood == 4 thenisbleeding = "stopit"countblood = 0endendendlocal isactcondset = falselocal radeffect = falsefunction bleedcondition()if bleed_enable == 0 then return endif db.actor.health < 0.31 and isactcondset ~= true thenlevel.add_pp_effector("alcohol.ppe",2012,true)isactcondset = trueendif db.actor.health > 0.30 and isactcondset ~= false thenlevel.remove_pp_effector(2012)isactcondset = falseendif db.actor.radiation > 0.3 and radeffect ~= true thenlevel.add_pp_effector("alcohol.ppe", 2013,true)radeffect = trueendif db.actor.radiation == 0 and radeffect ~= false thenlevel.remove_pp_effector(2013)radeffect = falseendendfunction init_blurs()if blurs_enable == 0 then return endif current_suithud and not string.find(current_suithud,"_red3") thenlocal zoom=67.5/device().fovzoom = (zoom-1)*1.5+1if zoom < 1.001 thenzoom = 1.001endlocal stretchy = 0.75/(math.floor(device().aspect_ratio*1000)/1000)if stretchy < 1 thenstretchy = 1endlocal rect = {x = -768*zoom+768,y = (-512*zoom+512)*stretchy-(stretchy-1)*300,w = 1024*zoom,h = 768*zoom*stretchy}set_blurs(true,rect)elseset_blurs(false)endendlocal blurslocal blurval = 0 -- уровень запотевани¤ от 0 до 1local blurlt = 0 -- врем¤ последнего обновлени¤local blurcyctime = 0 -- врем¤ начала последнего цикла дыхани¤ (выдох)local blurlastphase = 0function set_blurs(enabled,rect)local hud = get_hud()if not enabled thenfor i=1,4 dolocal bh = hud:GetCustomStatic("hud_blur"..i)if bh thenhud:RemoveCustomStatic("hud_blur"..i)endendreturnendif not (blurs and hud:GetCustomStatic("hud_blur1")) thenblurs = {}for i=1,4 dohud:AddCustomStatic("hud_blur"..i)blurs = hud:GetCustomStatic("hud_blur"..i):wnd()-- blurs:SetWidth(0)endend-- ÷иклы в зависимости от силы дыхани¤: 0->1->0 0->1->2->4->5->0 0->1->2->3->4->5->0 5->4->3->4->5 4->3->4local power = db.actor.powerlocal period = 1.0+power*power*1.0 -- текуща¤ частота дыхани¤ от 30 до 120 циклов в минутуlocal expirt = 0.3local breathpower = 3local delta = (time_global()-blurlt)/1000 -- дельта в секундахlocal phase = (time_global()-blurcyctime)/1000 -- фаза дыхательного цикла в сек.blurlt = time_global()if phase > period thenphase = phase%periodblurcyctime = blurlt-phase*1000endif blurlastphase > phase thenblurlastphase = 0endlocal blurdelta = delta*-0.7 -- работа вентилл¤цииif blurlastphase < expirt and phase < expirt thenblurdelta = blurdelta+(phase-blurlastphase)*breathpowerelseif blurlastphase < expirt thenblurdelta = blurdelta+(expirt-blurlastphase)*breathpowerendblurlastphase = phaseblurval = blurval+blurdeltaif blurval > 0.999 thenblurval = 0.999elseif blurval < 0 thenblurval = 0endlocal tm = math.floor(blurval*3)local tmn = (tm+1)local v = blurval*3-math.floor(blurval*3)v = 1-vlocal v1 = 1-vif tm ~= 0 thenblurs[tm]:SetColor(GetARGB(v*255,255,255,255))endif tmn ~= 0 thenblurs[tmn]:SetColor(GetARGB(v1*255,255,255,255))endfor i=1,4 doif i == tm or i == tmn thenblurs:SetWndRect(Frect():set(rect.x,rect.y,rect.w,rect.h))elseblurs:SetWndRect(Frect():set(rect.x,rect.y,0,0))endendend Изменено 16 Августа 2015 пользователем Дедушка Тапок Ссылка на комментарий
UnLoaded 313 Опубликовано 16 Августа 2015 Поделиться Опубликовано 16 Августа 2015 Если не трудно, объясните на пальцах что да как! На пальцах: отображение запотевания маски шлема\противогаза работает на каком-то апдейте, т.е. периодически вызываемая ф-ция. Обычно используется апдейт класса actor_binder из файла bind_stalker.script. Ссылка на комментарий
Zander_driver 10 333 Опубликовано 18 Августа 2015 Поделиться Опубликовано 18 Августа 2015 @Дедушка Тапок, --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. Ссылка на комментарий
Romz 142 Опубликовано 18 Августа 2015 Поделиться Опубликовано 18 Августа 2015 Мож не сюда, но попробую. Существует мод, отображающий метки объектов, типа сталкеров, монстров, аномалий, на экране, ака 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 учесть? Тут больше математики, на самом деле, чем скриптования... Автор мода, к сожалению, не имеет больше желания им заниматься. Шаман - СисАдмин Всяко-разно: для ЧН Ссылка на комментарий
Zander_driver 10 333 Опубликовано 18 Августа 2015 Поделиться Опубликовано 18 Августа 2015 (изменено) ---"Функция проекции точки на экран" 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 --Функция учитывает возможное разрешение экрана, режим зума и то, что камера может наклоняться. Можно использовать в различных целеуказателях. Это валяется где-то на страницах амк-форума уже многие годы. Что мешает пересадить всю вычислительную арифметику на эту функцию? Изменено 18 Августа 2015 пользователем 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. Ссылка на комментарий
Карлан 1 049 Опубликовано 18 Августа 2015 Поделиться Опубликовано 18 Августа 2015 @Romz, дублирую, математика там школьная, да. Скрипт приведенный тобою - плохой. 1 Ссылка на комментарий
Romz 142 Опубликовано 18 Августа 2015 Поделиться Опубликовано 18 Августа 2015 @Zander_driver, Спасибо, попробую применить @Карлан, Ну, что у автора было, то и показываю. Код, конечно, тяжеловатый, но как его исправить - моих мозгов, к сожалению, не хватает. Вот пример выше дали, завтра попробую переделать. Шаман - СисАдмин Всяко-разно: для ЧН Ссылка на комментарий
UnLoaded 313 Опубликовано 19 Августа 2015 Поделиться Опубликовано 19 Августа 2015 Есть строка вида "ляля_ляля_f", надо взять от нее часть без "_f". Подскажите самый быстрый способ. Попробовал: string.sub(строка, 1, string.len(строка) - 2) и string.sub(строка, 1, #строка - 2) - медленно... Ссылка на комментарий
Romz 142 Опубликовано 19 Августа 2015 Поделиться Опубликовано 19 Августа 2015 @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 - тот же результат... Или же я неправильно из неё координаты пытаюсь получить? Шаман - СисАдмин Всяко-разно: для ЧН Ссылка на комментарий
Карлан 1 049 Опубликовано 19 Августа 2015 Поделиться Опубликовано 19 Августа 2015 @UnLoaded, а куда быстрее? Попробуй еще match, ну или gsub. Я боюсь представить что у тебя за код в котором sub дает ощутимую нагрузку . @Romz, был-бы ТЧ, я дал бы тебе готовый код, а так я сделаю вид что не врубаюсь во всякие SetWndRect, и посоветую тебе пока заняться чем-то другим, пока не прозреешь как это доделать до того что нужно. Твой код я даже не представляю кто писал, там элементарные операции с векторами камеры и вектором позиции объектов, причем объекты как ты видишь по видео можно разобрать до костей, а в твоем коде много лишнего сделанного на стандартном функционале ЗП. Жди спецов по ЗП, они может узнают функции в твоем скрипте, а я опять сделаю вид что не узнал. Ссылка на комментарий
Wlad777 24 Опубликовано 19 Августа 2015 Поделиться Опубликовано 19 Августа 2015 Камрады, подскажите.Есть на уровне несколько однотипных объектов.Какой функцией можно определить что расстояние до самого ближнего к ГГ меньше определённого расстояния?В этих переборах и таблицах я всегда путаюсь. 1 --------------------------------- www.amk-zone.de Ссылка на комментарий
Kirgudu 1 207 Опубликовано 19 Августа 2015 Поделиться Опубликовано 19 Августа 2015 (изменено) @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 метров.Мерить расстояние до самого ближнего объекта не имеет смысла, так как если дальний объект укладывается в нужное расстояние, то и ближний - автоматически тоже. Изменено 19 Августа 2015 пользователем Kirgudu 1 Инструмент Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти