Stalkersof 120 Опубликовано 10 Января Поделиться Опубликовано 10 Января 13 минут назад, I am Dead сказал: Что значит для огср? Как бы давным давно сделана поддержка тч и зп погоды. Любой погодный мод подходит, хоть CGIM, хоть какой нибудь с аномали аддонов например. Ты можешь не в конфигах их скручивать, интенсивность саншафтов в консоли есть, выкрутил в ноль да и все В последней ревизии движка отказались тч погоды только зп. Да и я использую 181 ревизию движка еще со всеми рендерами. Выше этой ревизии у меня ломает твои анимации. Развертка текстуры на руках неправильно отображается. Модельера нет переделывать некому поэтому отказываюсь от новых ревизий. Хотя последнюю не пробовал может исправили. Да и переход на новую ревизии потребует много затрат Freeplay Graphic Mod(FGM) Ссылка на комментарий
I am Dead 909 Опубликовано 10 Января Поделиться Опубликовано 10 Января 22 минуты назад, Stalkersof сказал: В последней ревизии движка отказались тч погоды только зп Как бы нет, хочешь тч, хочешь зп юзай. 23 минуты назад, Stalkersof сказал: Выше этой ревизии у меня ломает твои анимации ДС сервак открыт для багрепорта если что, но я не думаю что анимации и развертка ломается из за движка. Ссылка на комментарий
CiberZold 142 Опубликовано 10 Января Поделиться Опубликовано 10 Января 4 часа назад, Stalkersof сказал: Мне этот эффект ночью не нравится. У вас картинка синюшная именно от лучей. ну вот тебе не нравится, а кому-то нравится, лунный свет - синий, и зачем скриптом принудительно отключать? те кому не нравиться сами отключат объёмные лучи в консоли, а кому нравится продолжать так играть, если ты конечно хочешь делат ьмод для людей, если для себя - то крути как хочешь и скрипты тоже 37 минут назад, Stalkersof сказал: Да и я использую 181 ревизию движка еще со всеми рендерами да тот движок который со всеми рендерами, только ТЧ-погоду поддерживает ,вот как у меня на скрине типа такой) Ссылка на комментарий
Stalkersof 120 Опубликовано 10 Января Поделиться Опубликовано 10 Января 7 часов назад, I am Dead сказал: Ты можешь не в конфигах их скручивать, интенсивность саншафтов в консоли есть, выкрутил в ноль да и все В общем разобрался. Пошел на вики движка. Надо было в секции погоды прописать параметр sun_shafts_intensity. Если его выкрутить в ноль то лучей не будет. Но я поставил 0.1 для легкого эффекта. Нормально получилось. Freeplay Graphic Mod(FGM) Ссылка на комментарий
Colder 12 Опубликовано 13 Января Поделиться Опубликовано 13 Января @Zander_driver Сделал так: Скрытый текст local box_info_wnd function init(obj) printf("_bp: init(): name='%s'", obj:name()) local ini = obj:spawn_ini() if ini and ini:section_exist("animation") then abort("object '%s': animation section is deprecated, use logic + impulse combination", obj:name()) return end if (not ini) or (not ini:section_exist("logic") and not ini:section_exist("drop_box")) then if obj:clsid() ~= clsid.projector and obj:clsid() ~= clsid.inventory_box then return end end db.storage[obj:id()] = {} local new_binder = generic_physics_binder(obj) obj:bind_object(new_binder) end class "generic_physics_binder" (object_binder) function generic_physics_binder:__init(obj) super(obj) self.initialized = false self.loaded = false end function generic_physics_binder:reload(section) object_binder.reload(self, section) end function generic_physics_binder:reinit() object_binder.reinit(self) db.storage[self.object:id()] = {} self.st = db.storage[self.object:id()] end function generic_physics_binder:update(delta) object_binder.update(self, delta) if not self.initialized and db.actor then self.initialized = true xr_logic.initialize_obj(self.object, self.st, self.loaded, db.actor, modules.stype_item) local particle = utils.cfg_get_string(self.st.ini, self.st.section_logic, "particle", self.object, false, "", nil) if particle ~= nil then self.particle = particles_object(particle) self.particle:play_at_pos(self.object:position()) end local graph_point_marker = utils.cfg_get_string(self.st.ini, self.st.section_logic, "graph_point_marker", self.object, false, "", nil) if graph_point_marker ~= nil then self.disable_graph_point = patrol(graph_point_marker):game_vertex_id(0) game_graph():accessible(self.disable_graph_point, false) printf("GRAPH POINT DISABLED") end end if self.st.active_section ~= nil or (self.object:spawn_ini() ~= nil and self.object:spawn_ini():section_exist("drop_box") == true) or self.object:clsid() == clsid.inventory_box then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "update", delta) self.object:set_callback(callback.hit, generic_physics_binder.hit_callback, self) self.object:set_callback(callback.death, generic_physics_binder.death_callback, self) self.object:set_callback(callback.use_object, generic_physics_binder.use_callback, self) elseif self.object:section() == "inventory_box" or self.object:section() == "active_backpack" or self.object:section() == "active_system" then self.object:set_callback(callback.use_object, generic_physics_binder.use_callback, self) end local weight = 0 for i=0,self.object:inv_box_count()-1 do weight = weight + self.object:object_from_inv_box(i):get_weight() if box_info_wnd then box_info_wnd:update_info(weight) end end end function generic_physics_binder:net_spawn(data) if not object_binder.net_spawn(self, data) then return false end if self.object:clsid() == clsid.projector then db.add_sl(self.object) end if self.object:spawn_ini() ~= nil and self.object:spawn_ini():section_exist("drop_box") == true then self.box_items = xr_box.ph_item_box(self.object) end self.object:set_callback(callback.on_inv_box_item_take, self.on_take, self) self.object:set_callback(callback.on_inv_box_item_drop, self.on_drop, self) return true end function generic_physics_binder:net_destroy() local st = db.storage[self.object:id()] if st.active_scheme then xr_logic.issue_event(self.object, st[st.active_scheme], "net_destroy") end if self.particle ~= nil then self.particle:stop() end db.del_sl(self.object) db.storage[self.object:id()] = nil self.object:set_callback(callback.on_inv_box_item_take, nil) self.object:set_callback(callback.on_inv_box_item_drop, nil) object_binder.net_destroy(self) end function generic_physics_binder:on_take(item) self.cur_box_weight = get_box_weight(self.object) if box_info_wnd then box_info_wnd:update_info(self.cur_box_weight) end end function generic_physics_binder:on_drop(item) self.cur_box_weight = get_box_weight(self.object) if box_info_wnd then box_info_wnd:update_info(self.cur_box_weight) end end function generic_physics_binder:net_save_relevant() return true end function generic_physics_binder:save(packet) object_binder.save(self, packet) xr_logic.save_obj(self.object, packet) end function generic_physics_binder:load(reader) self.loaded = true object_binder.load(self, reader) xr_logic.load_obj(self.object, reader) end function generic_physics_binder:use_callback(obj, who) if obj:section() == "inventory_box" or obj:section() == "active_backpack" or obj:section() == "active_system" then dxr_carbody.use_inventory_box = obj end if self.st.active_section then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "use_callback", obj, who) end end function generic_physics_binder:hit_callback(obj, amount, local_direction, who, bone_index) printf("_bp: generic_physics_binder:hit_callback: obj='%s'", obj:name()) if self.st.ph_on_hit then xr_logic.issue_event(self.object, self.st.ph_on_hit, "hit_callback", obj, amount, local_direction, who, bone_index) end if self.st.active_section then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "hit_callback", obj, amount, local_direction, who, bone_index) end end function generic_physics_binder:death_callback(victim, who) printf("_bp: generic_physics_binder:death_callback: obj='%s'", victim and victim:name() or self.object:name()) if self.st.active_section then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "death_callback", victim, who) end if self.particle ~= nil then self.particle:stop() end if self.disable_graph_point ~= nil then game_graph():accessible(self.disable_graph_point, true) printf("GRAPH POINT ENABLED") end if self.object:spawn_ini() ~= nil and self.object:spawn_ini():section_exist("drop_box") == true then self.box_items:spawn_items() end end --------------------------------------------------------------------------------------------------- function get_box_weight(box) if box == nil then return end local weight = 0 for i=0,box:inv_box_count()-1 do weight = weight + box:object_from_inv_box(i):get_weight() end return weight end function show_box_info() box_info_wnd = box_info_wnd or box_info() if box_info_wnd ~= nil then box_info_wnd:show() end end function hide_box_info() if box_info_wnd then get_hud():RemoveDialogToRender(box_info_wnd) end box_info_wnd = nil end class "box_info" (CUIScriptWnd) function box_info:__init() super() local xml = CScriptXmlInit() xml:ParseFile("carbody_new.xml") self.weight = xml:InitStatic("weight_static", self) get_hud():AddDialogToRender(self) end function box_info:show() box_info_wnd:update_info(self.cur_box_weight) self:Show(true) end function box_info:hide() self:Show(false) end function box_info:update_info(cur) if cur ~= nil then self.weight:SetText(string.format("%5.1f",cur)) else self.weight:SetText(string.format("%5.1f",0)) end end function on_info(info_id) if info_id == "ui_car_body_hide" then hide_box_info() end if info_id == "ui_car_body" then show_box_info() end end Но теперь при получении тайника(появления итемов в ящике) цифры начинают бегать. Ссылка на комментарий
Zander_driver 10 331 Опубликовано 13 Января Поделиться Опубликовано 13 Января 10 минут назад, Colder сказал: Но теперь В прошлый раз, я советовал воспользоваться логами. Но теперь мы видим, что ни единой новой строчки вывода в лог, так и не появилось. Хорошо, у тебя свой путь, ок. Внимание вопрос - а зачем обращаться ко мне, если советы которые я даю, тобою все равно не выполняются? 1 2 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. Ссылка на комментарий
Colder 12 Опубликовано 14 Января Поделиться Опубликовано 14 Января @Zander_driver Я пробывал но ни чего не вышло! Все-равно спасибо за помощь. 1 Ссылка на комментарий
Colder 12 Опубликовано 1 Февраля Поделиться Опубликовано 1 Февраля (изменено) Подскажите как выбрать один предмет а не все при парсинге Скрытый текст local sec = self.items[index + 1] local parts = ini_parts:r_string_ex("con_list", sec) parts = string.gsub(parts,"[,]"," ") for k, v in string.gmatch(parts, "[%p0-z]+") do sim:create(k, pos, lvid, gvid, pid) Изменено 1 Февраля пользователем Colder Ссылка на комментарий
Norman Eisenherz 297 Опубликовано 1 Февраля Поделиться Опубликовано 1 Февраля Передать секции в простой список в цикле gmatch, потом прочитать t[ math.random( #t ) ]. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Colder 12 Опубликовано 1 Февраля Поделиться Опубликовано 1 Февраля (изменено) Сделал так: Скрытый текст local parts = ini_parts:r_string_ex("con_parts_list", sec) if parts then local parts_tbl = str_explode(parts,",") local t = parts_tbl[math.random(#parts_tbl)] sim:create(t, pos, lvid, gvid, pid) А еще вопрос, если мне нужно пару итемов? Изменено 1 Февраля пользователем Colder Ссылка на комментарий
Norman Eisenherz 297 Опубликовано 1 Февраля Поделиться Опубликовано 1 Февраля (изменено) Прочитать случайный ключ в переменную, сделать выбор, сделать table.remove с этим ключом, повторить выбор. Изменено 1 Февраля пользователем Norman Eisenherz 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Pavel_2000 5 Опубликовано 3 Февраля Поделиться Опубликовано 3 Февраля Привет, нужна помощь, я в скриптах пока не особо разбираюсь, поэтому хотелось бы спросить у знающих. Нашёл личный дневник для зп (тык) Это типа дневник с записями и в нём есть такая проблема, что когда записей становится больше 9, то начиная от 10 и до 19 записи у них используется описание от первой записи, следовательно, у 20-29 описание от второй записи. И я вот думаю, что проблема в скрипте, но в них я не очень разбираюсь вот сам скрипт: Скрытый текст local list_of_pages = {} local list_of_note = {} local note_of_pages = {} local pages_list = {} local diary_ini = ini_file("misc\\diary_records.ltx") function give_diary_record(record_name) if not diary_ini:section_exist(record_name) or note_of_pages[record_name] ~= nil then return end local diary_text = diary_ini:r_string(record_name, "text") local diary_page = diary_ini:r_string(record_name, "page") if not list_of_pages[diary_page] then list_of_pages[diary_page] = {} table.insert(pages_list, diary_page) end note_of_pages[record_name] = {} note_of_pages[record_name].text = diary_text table.insert(list_of_pages[diary_page], record_name) table.insert(list_of_note, record_name) end function get_pages_list() local count = diary_ini:line_count("records") - 1 local info, value = "", "", result for i = 0, count do result, info, value = diary_ini:r_line("records",i,"","") if has_alife_info(info) then give_diary_record(info) end end end class "list_item" (CUIListBoxItem) function list_item:__init(height) super(height) self.text = self:GetTextItem() self:SetTextColor (GetARGB(255, 92, 84, 69)) self.text:SetFont (GetFontLetterica25()) self.text:SetWndSize (vector2():set(325,height)) self.text:SetEllipsis (true) end class "diary_dialog" (CUIScriptWnd) function diary_dialog:__init() super() self:InitControls () self:InitCallBacks () self:FillList (pages_list, true) end function diary_dialog:__finalize() end function diary_dialog:FillList(tbl, is_pages) self.list:Clear() self.is_pages = is_pages self.tbl = tbl for i = 1, #tbl do self:AddItemToList(tbl, i) end end function diary_dialog:InitControls() local xml = CScriptXmlInit() self:SetWndRect (Frect():set(0,0,1024,768)) local ctrl xml:ParseFile ("ui_diary.xml") xml:InitFrame ("background",self) self.text = xml:InitTextWnd ("paragraph", self) self.header = xml:InitTextWnd ("header", self) self.list = xml:InitListBox ("list",self) self.list:ShowSelectedItem (true) self:Register (self.list, "list_window") local ctrl = xml:Init3tButton ("back",self) self:Register (ctrl, "btn_close") self.header:SetTextST ("st_diary_header") end function diary_dialog:InitCallBacks() self:AddCallback("btn_close", ui_events.BUTTON_CLICKED, self.OnButton_close_clicked, self) self:AddCallback("list_window", ui_events.WINDOW_LBUTTON_DB_CLICK, self.OnButton_create_clicked, self) end function diary_dialog:OnButton_create_clicked() if self.list:GetSize()==0 then return end local item = self.list:GetSelectedItem() if not item then return end local itmname = item.text:GetText() local itemnum = tonumber(itmname:sub(1, itmname:find("."))) if self.is_pages then self:FillList(list_of_pages[pages_list[itemnum]], false) self.text:SetText("") self.header:SetTextST(pages_list[itemnum]) else local tbl = note_of_pages[self.tbl[itemnum]] self.text:SetTextST(tbl.text) self.header:SetTextST(self.tbl[itemnum]) end end function diary_dialog:OnButton_close_clicked() if not self.is_pages then self:FillList (pages_list, true) self.text:SetText ("") self.header:SetTextST ("st_diary_header") else self:HideDialog() end end function diary_dialog:OnKeyboard(dik, keyboard_action) CUIScriptWnd.OnKeyboard(self,dik,keyboard_action) local bind = dik_to_bind(dik) if bind == key_bindings.kQUIT then self:HideDialog() end return true end function diary_dialog:AddItemToList(item_name, number) local _itm = list_item(30) _itm.text:SetText (string.format("%d. %s", number, game.translate_string(item_name))) self.list:AddExistingItem (_itm) end function ShowNotepad () get_pages_list () diary_dialog():ShowDialog(true) end а вот скрины самой проблемы https://disk.yandex.ru/a/qgq0mhJvjFU2uw Ссылка на комментарий
Norman Eisenherz 297 Опубликовано 3 Февраля Поделиться Опубликовано 3 Февраля Точка при поиске/замене – спецзнак "один любой знак": поиск находит цифру после 1 или 2 и отсекает строку. Запись для поиска точки просто как точки: find("%.") -- обход спецзнака find(".", 1, true) -- поиск всех знаков в режиме "простой текст" (1 = отсчет слева) 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Pavel_2000 5 Опубликовано 4 Февраля Поделиться Опубликовано 4 Февраля 13 часов назад, Norman Eisenherz сказал: find(".", 1, true) Спасибо большое! помогло Сделал скрипт в ЗП чтоб при поднятии арта приходило сообщение "артефакт найден"(скрипт вызываю из биндера on_item_take) if db.actor:object("af_medusa") and not db.actor:has_info("medusa") then db.actor:give_info_portion("medusa") news_manager.send_tip(db.actor, "st_find_af", 0, "got_artefact", 3000) end И вот вопрос: можно как нибудь сделать чтоб писало "Найден артефакт: (арт)" сейчас я пока что вижу одну возможность как это реализовать, просто прописать для каждого арта свою надпись в text\rus, но артов у меня 160... и хотелось бы упростить себе задачу. Поэтому прошу помощи может кто знает. Спасибо. Ссылка на комментарий
Kirgudu 1 179 Опубликовано 4 Февраля Поделиться Опубликовано 4 Февраля @Pavel_2000 в том же скрипте, посредством которого ты отправляешь сообщение, есть функция получения идентификатора наименования предмета через его секцию: get_inv_name(section). Пример: local obj = db.actor:object("af_medusa") if obj and not db.actor:has_info("medusa") then db.actor:give_info_portion("medusa") local news_text = game.translate_string("st_find_af")..": "..game.translate_string(news_manager.get_inv_name(obj:section())) db.actor:give_game_news(game.translate_string("st_tip"), news_text, "ui_inGame2_D_gonets_pravosudiya", 0, 3000, 0) end 1 Инструмент Ссылка на комментарий
ted.80 251 Опубликовано 4 Февраля Поделиться Опубликовано 4 Февраля 2 часа назад, Pavel_2000 сказал: чтоб писало "Найден артефакт: (арт)" if db.actor:object("af_medusa") and not db.actor:has_info("medusa") then db.actor:give_info_portion("medusa") local art_name = "Найден артефакт: %c[255,255,50,50]"..game.translate_string(system_ini():r_string("af_medusa", "inv_name")).."%c[default]" news_manager.send_tip(db.actor, art_name, 0, "got_artefact", 3000) end 1 2 1 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
Pavel_2000 5 Опубликовано 4 Февраля Поделиться Опубликовано 4 Февраля @Kirgudu @ted.80 Спасибо, в конечном результате получилось так: if db.actor:object("af_medusa") and not db.actor:has_info("medusa") then db.actor:give_info_portion("medusa") local art_name = game.translate_string("st_find_af")..": %c[255,255,50,50]"..game.translate_string(system_ini():r_string("af_medusa", "inv_name")).."%c[default]" news_manager.send_tip(db.actor, art_name, 0, "got_artefact", 3000) end Результат(тык) У меня новый вопрос. Не могу найти где в зп прописан спавн квестовых трупов типо Баржи, Майрона в пещере контролёра и тому подобных 3 Ссылка на комментарий
Colder 12 Опубликовано 5 Февраля Поделиться Опубликовано 5 Февраля Подскажите каким образом можно заблочить не нужную мне инфу которая грузиться в лог? Ссылка на комментарий
Zander_driver 10 331 Опубликовано 7 Февраля Поделиться Опубликовано 7 Февраля @Colder Поиском по коду найти где она выводится, и закомментировать эту строку. 1 2 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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. Ссылка на комментарий
Colder 12 Опубликовано 9 Февраля Поделиться Опубликовано 9 Февраля Как в труп заспавнить предмет? Пробывал так: Скрытый текст local obj = alife():create("stalker_general_1", vector():set(37.906, -11.880, -246.436), 57809, 1482) if obj then obj:on_death() ogse.spawn_item_in_inv("mutant_krovosos_jaw", obj) Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти