Graff46 598 Опубликовано 8 Мая 2020 Поделиться Опубликовано 8 Мая 2020 Я написал схему поведения для НПС с одним action, она нормально работает, потом прекондишины отрубают мой экшен, подключается алайф экшен, НПС начинает просто "гулять". Затем я снова загоняю НПС в схему поведения, во 2й раз все идет не как должно - у экшена (не алайф) срабытывает метод activate_scheme и все, метод execute не работает совсем, НПС топчится на месте. Скрипт схемы поведения. Ссылка на комментарий
UriZzz 1 004 Опубликовано 11 Мая 2020 Поделиться Опубликовано 11 Мая 2020 В сборке Артосовских модулей обнаружил проблему. Скрипт --/------------------------------------------------------------------- --/ Принудительное прерывание игры при фатальных ошибках --/------------------------------------------------------------------- abort = function(fmt,...) to_log(string.rep("~",86)) assert("[error]ABORT CALLED:\n" .. string.exformat(fmt, ...)) to_log("ATTENTION! Game is interrupted! The information in lines above.") to_log(string.rep("~",86)) get_console():execute('flush') exit() --/#!# interrupt game in case of fatal errors end --/ ------------------------------------------------------------------ Часто вместо того что бы указывать в логе на именно допущенную ошибку, игра ругается на строчку exit() --/#!# interrupt game in case of fatal errors и думай, годай - где кака зарыта??? Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
naxac 2 447 Опубликовано 11 Мая 2020 Поделиться Опубликовано 11 Мая 2020 @UriZzz, функция эта вызывается для принудительного краша игры, и она должна выводить в лог сообщение об ошибке до вылета: смотри выше сообщения с "фатал эррором". Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
UriZzz 1 004 Опубликовано 11 Мая 2020 Поделиться Опубликовано 11 Мая 2020 @naxac, да, знаю, но лог в подавляющем большинстве случаев ссылается именно на эту строчку Скрытый текст ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ATTENTION! Game is interrupted! The information in lines above. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Log file has been saved successfully! FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ....a.l.k.e.r Тень Чернобыля\gamedata\scripts\_g.script:1304: attempt to call global 'exit' (a nil value) stack trace: Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
naxac 2 447 Опубликовано 11 Мая 2020 Поделиться Опубликовано 11 Мая 2020 @UriZzz, всё верно, именно эта строка и крашит игру после вывода сообщения об ошибке. Сама ошибка указана выше верхней строки с тильдами, тут ее не видно. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
mole venomous 3 429 Опубликовано 11 Мая 2020 Поделиться Опубликовано 11 Мая 2020 4 часа назад, UriZzz сказал: эту строчку Вылет вызывается намеренно, что бы произошедшая ошибка, которая не привела к вылету, не погубила игру в итоге. Здесь могла быть ваша реклама. Ссылка на комментарий
Space.Marine 466 Опубликовано 11 Мая 2020 Поделиться Опубликовано 11 Мая 2020 (изменено) "New Sleep Mod" для ТЧ Скрытый текст FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...stalker_fin_up\gamedata\scripts\sleep_manager.script:111: attempt to index local 'ph_element' (a nil value) stack trace: Регулярно вылетает с одной и той же ошибкой при разрушении какого нибудь объекта на локации. Сам sleep_manager.script : Скрытый текст --=======================================================-- -- Скрипт cна -- -- Авторы: Mechanic, Shoker, Z.E.N., Ab@dDon -- -- Может кого не указал, но скрипт брал из Zenoban Mod'а -- --=======================================================-- local table_sleep_zone = { -- Кордон: -- Матрас на чердаке в доме возле Лиса {"l01_escape", "m", nil, 140.09, 3.5, 336.91, 444961, 232, nil}, -- Матрасы в подвале в деревне новичков {"l01_escape", "m", "no_icon_1", -210.73, -22.9, -122.30, 42632, 59, nil}, {"l01_escape", "m", "icon_1", -210.34, -22.9, -125.75, 42632, 59, nil}, -- Свалка: -- Матрас в ангаре возле группы Серого {"l02_garbage", "m", nil, -70.34, -1.60, 19.88, 131025, 329, nil}, -- Матрас в вагончике возле заставы долга {"l02_garbage", "m", nil, 46.73, 1.56, 243.93, 218601, 359, nil}, -- Агропром: -- Матрасы в конце ж/д тунеля с аномалиями {"l03_agroprom", "m", "icon_2", 254.96, 0.15, 74.44, 428649, 498, nil}, {"l03_agroprom", "m", "no_icon_2", 257.46, 0.15, 73.50, 429416, 498, nil}, -- Подземелья Агропрома: -- Матрас в тайнике Стрелка {"l03u_agr_underground", "b", nil, -69.74, -6.87, -74.45, 3439, 717}, {"l03u_agr_underground", "m", nil, -69.74, -6.35, -74.45, 3439, 717, "allways"}, -- Бар: -- Матрасы на базе Долга {"l05_bar", "m", "icon_3", 232.28, -4.9, 131.44, 59301, 1200, nil}, {"l05_bar", "m", "no_icon_3", 232.08, -4.9, 135.36, 59301, 1200, nil}, -- Матрас в комнате Бармена (за барной стойкой) {"l05_bar", "b", nil, 115.85, -5.3, 12.0, 33756, 1239}, {"l05_bar", "m", nil, 115.85, -4.6, 12.0, 33756, 1239, "allways"}, -- Янтарь: -- Матрасы в бункере ученых на Янтаре {"l08_yantar", "m", "no_icon_4", 30.36, -10.98, -280.2, 54978, 1480, "allways"}, {"l08_yantar", "m", "icon_4", 27.68, -10.98, -280.2, 54978, 1480, "allways"}, -- Армейские склады: -- Матрасы на базе Свободы в казармах {"l07_military", "m", "no_icon_5", 14.07, -6.82, 13.1, 319840, 1582, nil}, {"l07_military", "m", "icon_5", 11.18, -6.82, 13.27, 317158, 1582, nil}, -- Матрас в комнате напротив Скряги {"l07_military", "m", nil, -25.39, -6.82, -26.74, 281271, 1593, nil} --[[ -- Это места, где можно поспать (требует начало новой игры) {"1", "2", "3", 4, 5, 6, 7, 8, "9", "10"} 1 - название уровня 2 - m или b (m - невидимый объект, при клике на который мы спим, b - кровать, для декорации) 3 - если написать что-нибудь в "" и !добавить! эту запись в таблицу ниже, то на глобальной/мини карте для этого матраса не будет иконки сна (только для невидимого объекта) 4,5,6 - координаты x,y,z соответственно 7,8 - level_vertex и game_vertex соответственно 9 - если стоит "allways" значит можно спать независимо от наличия рядом врагов (только для невидимого объекта) ]] } -- таблица матрасов, при использовании которых никогда не ставить метки local table_non_spot_sleep_zone = { ["no_icon_1"] = true, ["no_icon_2"] = true, ["no_icon_3"] = true, ["no_icon_4"] = true, ["no_icon_5"] = true } local mattress_id = {} local mattress_count = 0 local mattress_processed = 0 local first_scaling local left_scaling local last_health local ENEMY_RADIUS = 15 -- радиус врагов -- Обычный апдейт function update(delta) local mcnt = load_variable("matras_cnt", 0) for i=1, mcnt do local obj = level.object_by_id(load_variable(i.."_matras", 65000)) if obj then --------------------- --get_console():execute("THIS_IS_SPARTA!") --get_console():execute(obj:name()) local bone_name = get_ltx(obj:section(), "fixed_bone", "str") local ph_shell = obj:get_physics_shell() if not ph_shell then --get_console():execute("NO_PH_SHELL") return end local ph_element = ph_shell:get_element_by_bone_name(bone_name) if ph_element:is_fixed() then --get_console():execute("ART_FIXED") else --get_console():execute("FIXING_OBJECT") ph_element:fix() end --------------------- end end if db.actor == nil then return end if not db.actor:alive() then local hud = get_hud() local custom_static = hud:GetCustomStatic("hud_mattress") if custom_static ~= nil then hud:RemoveCustomStatic("hud_mattress") end end local actor = db.actor local pos = actor:position() local zn = actor_in_sleep_zone(pos) if load_variable("bed_spawned", false) == false then spawn_mattress() save_variable("bed_spawned", true) end if zn == "m" then local hud = get_hud() local custom_static = hud:GetCustomStatic("hud_mattress") if custom_static == nil then hud:AddCustomStatic("hud_mattress", true) end else local hud = get_hud() local custom_static = hud:GetCustomStatic("hud_mattress") if custom_static ~= nil then hud:RemoveCustomStatic("hud_mattress") end end end -- Update матраса(вешаем колбек если ещё не повесили) function mattress_update(obj) if mattress_count ~= mattress_processed then for kk,vv in pairs(mattress_id) do if vv[1] == obj:id() and vv[2] == false then vv[2] = true obj:set_callback(callback.use_object, this.mattress_use) obj:set_tip_text("tip_sleep") mattress_processed = mattress_processed + 1 end end end end -- Отлавливаем спавн матрасов и запоминаем их id function mattress_spawn(obj) mattress_count = mattress_count + 1 local m = {obj:id(), false} table.insert(mattress_id, m) end -- Юзаем матрас function mattress_use(obj, who) if test_for_can_sleep(obj) then ------------------------------- local hud = get_hud() local spwn = ui_sleep.sleep(hud) local frst local scnd level.start_stop_menu(spwn,true) -- можно ли ставить спот local valid = true for name, val in pairs(db.storage[db.actor:id()].pstor) do if table_non_spot_sleep_zone[name] and load_variable(name, -1) == obj:id() then valid = false end end if valid then if not level.map_add_object_spot_ser(obj:id(), "sleep_pointer", "Место для сна") then level.map_add_object_spot_ser(obj:id(), "sleep_pointer", "Место для сна") end end for i = 1, 5 do frst = load_variable("no_icon_"..i, -1) scnd = load_variable("icon_"..i, -1) if frst == obj:id() and not level.map_add_object_spot_ser(scnd, "sleep_pointer", "Место для сна") then level.map_add_object_spot_ser(scnd, "sleep_pointer", "Место для сна") end end ------------------------------- end end -- Игрок в зоне сна function actor_in_sleep_zone(pos) for i,z in pairs(table_sleep_zone) do if z[1] == level.name() and z[2] == "m" and actor_in_zone(z[4], z[5], z[6], 2, pos) then return z[2] end end return "" end -- Спавним всё, что нужно function spawn_mattress() for kk,vv in pairs(table_sleep_zone) do if vv[2] == "m" then local obj = alife():create("mattress", vector():set(vv[4], vv[5], vv[6]), vv[7], vv[8]) if vv[9] == "allways" then save_variable(obj:name().."_allways_sleep", true) end if vv[3] then save_variable(vv[3], obj.id) end end if vv[2] == "b" then local obj = alife():create("bed_matras", vector():set(vv[4], vv[5], vv[6]), vv[7], vv[8]) local i = load_variable("matras_cnt", 1) save_variable(i.."_matras", obj.id) save_variable("matras_cnt", i+1) end end end -- Проверка, можно ли спать function test_for_can_sleep(matras) local allways = load_variable(matras:name().."_allways_sleep", false) -- проверка на врагов if not allways then for a=1,65535 do local obj = level.object_by_id(a) if obj then if ((IsStalker(obj) and get_npc_relation(obj,db.actor)=="enemy") or IsMonster(obj)) and obj:position():distance_to(db.actor:position())<ENEMY_RADIUS then news_manager.send_tip(db.actor, "sleep_warning_enemy", nil, "default", 5000) return false end end end end -- проверка на радиацию if db.actor.radiation > 0 then news_manager.send_tip(db.actor, "sleep_warning_radiation", nil, "default", 5000) return false end return true end -- Спать function sleep(h) sleep_manager.start_sleep(h) end function start_sleep(scale) local sleep_ltx = ini_file ("scripts\\actorsleep.ltx") schemes["ar_sleep"] = "ar_sleep" ar_sleep.set_scheme(db.actor, sleep_ltx, "ar_sleep", logic) db.actor:stop_talk() db.actor:hide_weapon() level.disable_input() sleep_manager.starter (scale) end function starter(scale) last_health = db.actor.health left_scaling = scale first_scaling = scale _G.mus_vol = get_console():get_float("snd_volume_music") _G.amb_vol = get_console():get_float("snd_volume_eff") get_console():execute("snd_volume_music 0") get_console():execute("snd_volume_eff 0") game.start_tutorial("time_scaling") level.set_time_factor(3460) end -- Вызывается каждый час сна function stop_scaling() left_scaling = left_scaling - 1 if left_scaling + 1 == first_scaling and last_health > db.actor.health then sleep_manager.dreamer() news_manager.send_tip(db.actor, "sleep_warning_satiety_or_bleeding", nil, "default", 5000) elseif left_scaling > 0 and last_health <= db.actor.health then sleep_manager.hp_corrector(2) last_health = db.actor.health game.start_tutorial("time_scaling") elseif left_scaling > 0 and last_health > db.actor.health then sleep_manager.hp_corrector(12) last_health = db.actor.health game.start_tutorial("time_scaling") elseif left_scaling <= 0 and last_health > db.actor.health then sleep_manager.hp_corrector(12) db.actor.power = 1 last_health = db.actor.health sleep_manager.dreamer() elseif left_scaling <= 0 and last_health <= db.actor.health then db.actor.power = 1 sleep_manager.dreamer() end end function dreamer() level.set_time_factor(system_ini():r_float("alife","time_factor")) if sleep_manager.is_sleep_active() then get_console():execute("snd_volume_music "..tostring(_G.mus_vol)) get_console():execute("snd_volume_eff "..tostring(_G.amb_vol)) _G.amb_vol = 0 _G.mus_vol = 0 sleep_manager.stopper() end end function stopper() level.set_time_factor(system_ini():r_float("alife","time_factor")) ar_sleep.disable_scheme() if not db.actor:alive() then sleep_manager.onliner() else db.actor:restore_weapon() end level.enable_input() end -- Игрок умер во время сна function onliner() get_console():execute("snd_volume_music "..tostring(_G.mus_vol)) get_console():execute("snd_volume_eff "..tostring(_G.amb_vol)) _G.amb_vol = 0 _G.mus_vol = 0 end function hp_corrector(fr) db.actor.health = fr/12 end function is_sleep_active() if db.storage[db.actor:id()].active_scheme == "ar_sleep" then return true end return false end ----------------------------------------------------- -------------- Вспомогательные функции -------------- ----------------------------------------------------- -- Записываем переменную function save_variable(variable_name, value) xr_logic.pstor_store(db.actor, variable_name, value) end -- Загружаем переменную function load_variable(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end -- Удаляем переменную function del_variable(variable_name) if db.storage[db.actor:id()].pstor[variable_name] then db.storage[db.actor:id()].pstor[variable_name] = nil end end -- Проверка на наличие актора в области function actor_in_zone(x, y, z, r, pos) if math.pow(x-pos.x,2) + math.pow(y-pos.y,2) + math.pow(z-pos.z,2) <= math.pow(r,2) then return true else return false end end -- Узнаём отношения (взято из AMK) function get_npc_relation(obj,target) local rel = obj:relation(target) local relation if rel == game_object.neutral then relation = "neutral" elseif rel == game_object.friend then relation = "friend" elseif rel == game_object.enemy then relation = "enemy" else return false end return relation end -- Получаем строку из LTX файла function get_ltx(l_name,l_string,type) if system_ini():section_exist(l_name) and system_ini():line_exist(l_name, l_string) then if type=="bol" then return system_ini():r_bool(l_name, l_string) end if type=="num" then -- целое число return tonumber(system_ini():r_u32(l_name, l_string)) end if type=="num_float" then -- число с запятой return tonumber(system_ini():r_float(l_name, l_string)) end if type=="str" then return tostring(system_ini():r_string(l_name, l_string)) end if type==nil then return system_ini():r_u32(l_name, l_string) end end return nil end Изменено 11 Мая 2020 пользователем Space.Marine Ссылка на комментарий
naxac 2 447 Опубликовано 12 Мая 2020 Поделиться Опубликовано 12 Мая 2020 (изменено) @Space.Marine, вот здесь: local ph_element = ph_shell:get_element_by_bone_name(bone_name) if ph_element:is_fixed() then --get_console():execute("ART_FIXED") else --get_console():execute("FIXING_OBJECT") ph_element:fix() end добавь проверку, вот так: local ph_element = ph_shell:get_element_by_bone_name(bone_name) if ph_element and not ph_element:is_fixed() then ph_element:fix() end Изменено 12 Мая 2020 пользователем naxac 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Space.Marine 466 Опубликовано 12 Мая 2020 Поделиться Опубликовано 12 Мая 2020 12 часов назад, naxac сказал: добавь проверку, вот так: То есть заменить верхнее на то, что ты написал ? 2 Ссылка на комментарий
phalcor 60 Опубликовано 12 Мая 2020 Поделиться Опубликовано 12 Мая 2020 Вопрос про добавление имён/кличек неквестовых NPC: Правильно ли я думаю, что чтобы добавить дополнительные имена сталкеров, нужно использовать эти файлы: generate_fnames.xml и generate_snames.xml? (Именно дополнить к существующим, а не заменить старые имена) К примеру, в файле generate_fnames.xml есть 103 вхождения тэгов <string id="name_stalker_№">. Я попробовал удалить все, оставив только два: <string id="name_stalker_1"> и <string id="name_stalker_2">. Далее заспавнил сталкера, и получил это: А это значит, что игра не определяет количество вхождений имён в файле автоматически, а где-то указана конкретная цифра (104?). Где задаётся этот параметр? Или же вообще я рассуждаю неправильно? (Если обсуждалось, намекните, где. Поиск на "добавить имена / клички" в самых разных комбинациях результата не дал) Ссылка на комментарий
ted.80 272 Опубликовано 12 Мая 2020 Поделиться Опубликовано 12 Мая 2020 @phalcor, смотри в system.ltx Скрытый текст ;***************************************** ; ГЕНЕРАТОРЫ ИМЕН ;***************************************** [stalker_names_stalker] name_cnt = 102 last_name_cnt = 599 [stalker_names_bandit] name_cnt = 36 last_name_cnt = 180 [stalker_names_science] name_cnt = 14 last_name_cnt = 27 [stalker_names_private] name_cnt = 1 last_name_cnt = 200 [stalker_names_sergeant] name_cnt = 1 last_name_cnt = 200 [stalker_names_lieutenant] name_cnt = 1 last_name_cnt = 200 [stalker_names_captain] name_cnt = 1 last_name_cnt = 200 2 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 18 Мая 2020 Поделиться Опубликовано 18 Мая 2020 Здрасьте. Описание предмета в любом инвентарном окне, насколько можно судить, есть окно CUIScrollView() + вложенное окно CUIStatic() с текстом. Если диапазон прокрутки равен высоте статика, то как высота статика подстраивается под высоту текста? При ручном указании высоты либо текст будет выходить за статик и прокрутка остановится на границе статика, либо статик будет больше текста и прокрутка будет избыточной. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 447 Опубликовано 19 Мая 2020 Поделиться Опубликовано 19 Мая 2020 @Norman Eisenherz, в движке у CUIStatic есть метод AdjustHeightToText - он как раз подгоняет высоту статика по высоте текста. Также этот метод "вытащен" в скрипты в X-Ray Extensions. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
mole venomous 3 429 Опубликовано 19 Мая 2020 Поделиться Опубликовано 19 Мая 2020 Добрый день. Существует ли для базового ТЧ 1.0006 способ отловить хит по актёру. Вернее, не сам факт причинения ущерба, а какой тип хита и чем/кем нанесён? Здесь могла быть ваша реклама. Ссылка на комментарий
phalcor 60 Опубликовано 22 Мая 2020 Поделиться Опубликовано 22 Мая 2020 Хочу просмотреть инвентарь трупа. Делаю так: for a=1,65534 do obj = server_object(a) if obj then o.clsid = obj:clsid() if iAmStalker[o.clsid] then local cnt obj:iterate_inventory(function (dummy, item) if item:section()~="bolt" then cnt=cnt+1 end end, nil) end end end А в ответ: attempt to call method 'iterate_inventory' (a nil value) Пробовал разные комбинации - ну никак, всегда эта ошибка. Как это сделать правильно? Ссылка на комментарий
WinCap 316 Опубликовано 22 Мая 2020 Поделиться Опубликовано 22 Мая 2020 @phalcor, iterate_inventory - метод клиентского объекта. local cobj = level.object_by_id(obj.id) cobj:iterate_inventory(...) 1 S.T.A.L.K.E.R. CoP Objects (upd 15.11.24) Ссылка на комментарий
phalcor 60 Опубликовано 22 Мая 2020 Поделиться Опубликовано 22 Мая 2020 @WinCap, ошибка. Cobj всегда равен nil. Объясню чуть подробнее. Я захотел, чтобы скрипт-уборщик из ОП 2.1 не удалял трупы, в которых хоть что-то есть. В этот скрипт (sak_off_corpses) я попытался вставить проверку на это дело. Уборщик отрабатывает при переходе на другу локацию, может в этом дело? Может быть есть другой способ определить само наличие инвентаря без конкретики? Вот моя вставка: -- зачистка трупов сталкеров function clear_corpses() for id,obj in pairs(corpses) do -- удаляем только трупы без неудаляемых предметов if not parents[id] then printf("corpses: Удалили "..obj:name()) --ВОТ ТУТ Я ВСТАВЛЯЮ СВОЮ ПРОВЕРКУ И ВСЕГДА ОШИБКА.... ---------------------------------------------------- local cnt=0 local trup = level.object_by_id(obj.id) trup:iterate_inventory_simple( function (item) if item:section()~="bolt" then cnt=cnt+1 end end ) ----------------------------------------------------- release(obj) end end end Ссылка на комментарий
Zander_driver 10 334 Опубликовано 22 Мая 2020 Поделиться Опубликовано 22 Мая 2020 (изменено) Только что, phalcor сказал: Уборщик отрабатывает при переходе на другу локацию Из нет_спавна стартует? там еще никакие неписи в онлайн не загружены, актор загружается первым. Поэтому и клиентских объектов нет. Через серверные объекты, надо пробежать 65535 объектов и посмотреть у них parent_id. У кого будет - занести значения в таблицу. А потом серверные объекты трупов сравнивать по id с этой таблицей. Если найдется совпадение, значит в трупе что-то есть. Изменено 22 Мая 2020 пользователем Zander_driver 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. Ссылка на комментарий
Norman Eisenherz 316 Опубликовано 23 Мая 2020 Поделиться Опубликовано 23 Мая 2020 Здрасьте. ТЧ 1.0006, попытка имитации CUIComboBox() через обычный список: • если текстура элемента списка указана ссылкой на описание в [ui_common.xls], текст этого элемента смещается вправо на ширину текстуры; • если та же текстура указана ссылкой на весь файл [ui_common.dds] и область в нем, текст, как и требуется, выводится поверх текстуры. https://drive.google.com/open?id=1Ty9_tmfyr2j7537nbliZEUETrwrwKvR3 В чем может быть причина? Файлы: https://drive.google.com/open?id=1VV6GAoapgwdqGIS27TN1oe8Wj83K46Zh. Еще вопрос: при масштабировании текстуры рамки через CUIFrameWindow() на стыке кусочков текстуры иногда выводится горизонтальная полоса из пустых пикселей (см. ту же картинку). Поправимо ли это? Такую же полосу можно наблюдать в разделе КПК "Карта". Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Graff46 598 Опубликовано 23 Мая 2020 Поделиться Опубликовано 23 Мая 2020 (изменено) Подскажите почему когда я заспавнил НПС, перевёл его в оффлайн, в оффлайне НПС переместился на другой гейм-вертекс, я перевожу НПС в онлайн, то НПС появляется на том месте где я его ранее перевёл в оффлайн? P. S. Сделал тесты: Позиция НПС в оффлайне обновляется, как и левел\гейм вертексы, то ли редко (через 5-6 апдейтов), то ли по расстоянию (когда ушли далеко от последней записанной позиции) Метка на НПС движется явно более "отчетливо", позиция метки на карте меняется чаще чем значение позиции у НПС (оффлайневского), обновление позиции метки совпадает с вызовом апдейта НПС в оффлайне (~4сек) По 1 пункту, есть странная особенность: когда НПС "близко" до целевого левел-вертекса, его позиция обновляется чаще, вплоть до обновления на каждом апдейте. ?(Возможно обновление оффлайн позиции НПС зависит от расстояния до целевого левел-вертекса)? Изменено 23 Мая 2020 пользователем Graff46 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти