Kirgudu 1 217 Опубликовано 15 Декабря 2017 Поделиться Опубликовано 15 Декабря 2017 @Graff46 порядок там не столь важен, так как переменные сохраняются в псторе и читаются из него парами "наименование/значение" (а дальше ты просто обращаешься посредством имеющейся функции к таблице). Однако требования к размеру сохраняют силу, ведь пстор пишется всё в тот же несчастный нет-пакет (см., например, xr_logic.pstor_save_all / xr_logic.pstor_load_all). Кроме того, пстор в оригинальной своей реализации ограничен строчными, числовыми и булевыми типами сохраняемых значений. Инструмент Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 15 Декабря 2017 Поделиться Опубликовано 15 Декабря 2017 (изменено) Гм... pstor_save_all/pstor_load_all() - это дописывание в конец пакета произвольных данных. Фактически, то же, что и действия перед ним. Разумеется, ни кто не запрещает воткнуть в любое место запись каких-то данных еще в каком-то порядке. Следовательно, чтобы прочитать записанное, читать надо ровно в том же порядке, в каком писали. Как внутри организованного блока, так в последовательности блоков разных форматов. К примеру, меня не устроили сохранения неких значительных массивов данных, по-этому в свое время было сделано такое: function my_binder:save( pk ) object_binder.save( self, pk ) xr_logic.save_obj( self.object, pk ) local n = 0 -- корректировка и сохранение времени for k, v in pairs( tm_sec ) do n = n + 1 end pk:w_u32( n ) for k, v in pairs( tm_sec ) do pk:w_stringZ( k ); pk:w_float( v - game_time_sec ) end n = 0 for k, v in pairs( tm_ms ) do n = n + 1 end pk:w_u32( n ) for k, v in pairs( tm_ms ) do pk:w_stringZ( k ); pk:w_float( v - game_time_ms ) end end а мог, к примеру, писать так: function my_binder:save( pk ) object_binder.save( self, pk ) xr_logic.pstor_save_all( obj, pk ) local n = 0 -- корректировка и сохранение времени ... end Или, если мне ни какие "стандартные" данные не нужны, просто сразу писать что-то свое, не трогая xr_loigic вообще. Но, нельзя делать так: function load_obj( npc, pk ) ... local s = pk:r_stringZ() if s == "" then st.loaded_ini_filename = nil else st.loaded_ini_filename = s end s = pk:r_stringZ() if s == "" then st.loaded_section_logic = nil else st.loaded_section_logic = s end ... end function save_obj( npc, pk ) ... pk:w_stringZ( st.section_logic or "" ) pk:w_stringZ( st.ini_filename or "" ) ... end - будет лапша вместо данных. Изменено 15 Декабря 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
advisor890 1 Опубликовано 16 Декабря 2017 Поделиться Опубликовано 16 Декабря 2017 Есть ли в ЧН способ отключить автоматическую выдачу заданий на помощь в обороне/атаке вражеских лагерей? Ссылка на комментарий
Rietmon 3 Опубликовано 17 Декабря 2017 Поделиться Опубликовано 17 Декабря 2017 COP. Пропадают ли вещи, заспавненые скриптом? Допустим, если выкинуть пару стволов игроком - они пропадут со временем, а если заспавнить через скрипт те же предметы (или в all.spawn) они будут пропадать? Ссылка на комментарий
Fenrir02 199 Опубликовано 20 Декабря 2017 Поделиться Опубликовано 20 Декабря 2017 При каких обстоятельствах при вылете, по которому движок не может открыть секцию, не указывается эта секция? Вот такой непонятный лог: FATAL ERROR [error]Expression : fatal error [error]Function : CInifile::r_section [error]File : E:\stalker\patch_1_0004\xrCore\Xr_ini.cpp [error]Line : 342 [error]Description : <no expression> [error]Arguments : Can't open section '' P.S.: вылет происходит при подходе к шахте, где нужно спасти Дениса по квесту Клыка в НС 2016. В тех. поддержку писать не буду, т.к. играю со своим оружейным паком. Сам профиль Дениса я вообще не трогал. Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
Marafon6540 765 Опубликовано 20 Декабря 2017 Поделиться Опубликовано 20 Декабря 2017 2 часа назад, Fenrir02 сказал: т.к. играю со своим оружейным паком В этом и ищи свою проблему. Очень часто подобный вылет случается если поменял какой-либо ствол, а новую игру не начал. Обрати особое внимание на изменение классов оружия (class =...)в стволах, которые вводил. 1 Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
dsh 3 824 Опубликовано 20 Декабря 2017 Поделиться Опубликовано 20 Декабря 2017 Я фигею с оригинальных скриптов -- закешируем айдишник непися local npc_id = npc:id() -- проверка непися на присутсвие в списке if self.npc_list[npc:id ()] == nil then Что за криворукие уедятлы их писали. Вот хочется взять, мордой об стол треснуть и спросить, ты какого пи-пи-пи закэшировал пи-пи-пи айдишник, как ты сам пи-пи-пи написал, и на следующей же строке не используешь. В глаза, пи-пи-пи, смотреть. И ведь такой фигни сплошь да рядом в их скриптах. Такое впечатление, что там просто выходили на улицу и О, чувак, полтинник хочешь? Давай, накатай нам тут скриптик и вали по своим делам. 1 5 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Zagolski 74 Опубликовано 21 Декабря 2017 Поделиться Опубликовано 21 Декабря 2017 Да, есть там такие моменты. И печально наблюдать, когда кто-то из начинающих мододелов начинает и у себя использовать подобные "механизмы", до этого набравшись навыков из ванильного кода. Ссылка на комментарий
Pir@t@s 36 Опубликовано 21 Декабря 2017 Поделиться Опубликовано 21 Декабря 2017 Добрый день! У меня вопрос по поводу некоторых функций в SoC 1.004. Скрытый текст Вот функция проверки находится ГГ на Кордоне или нет: function go_to_marsh_complete() if level_name == "l01escape" then return true else return false end end ------------------------------------------------------- А как нужно написать проверку, что бы при заходе ГГ на Кордон выполнялось какое либо действие? И в каком скрипте ее прописывать, что бы подключить к игре. Заранее большое спасибо за ответ. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 21 Декабря 2017 Поделиться Опубликовано 21 Декабря 2017 В любом. local lv = alife():level_id() if db.storage[0].pstor.on_level ~= lv then db.storage[0].pstor.on_level = lv if lv == 1 then ... зашли на Кордон end end Только прежде, чем это делать, надо понимать, что от "написать", оно "к игре" не подключится. Как и приведенный образец (который - сам по себе из серии "никогда так не делайте"). А также то, что для работы необходимо наличие стартовавшего актора. Если надо раньше, то вместо db.storage[0].pstor следует использовать, скажем, custom_data актора или, к примеру, сидоровича, и читать/сохранять ее через их нетпакет. Вообще, следовало бы начать со смысла данного действа. 10 часов назад, dsh сказал: Что за криворукие уедятлы Студентам раздали темы для курсачей, а потом результаты собрали в кучу и выпустили в виде игры. Впрочем, перлы типа if obj:id() == id and obj.id and obj then ... регулярно рожаются людьми вполне взрослыми через 10 лет после выхода игры... Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Plotnik 3 Опубликовано 29 Декабря 2017 Поделиться Опубликовано 29 Декабря 2017 Ребят, а как можно узнать расстояние до цели? У меня есть идея как это можно сделать, но она слишком корявая. Ссылка на комментарий
Marafon6540 765 Опубликовано 29 Декабря 2017 Поделиться Опубликовано 29 Декабря 2017 @Plotnik если использовать X-Ray extensions, то там все просто: level.get_target_dist() Добавлена функция получения расстояния до точки, на которую смотрим (игровой дальномер, который отображается под прицелом) Трилогия Апокалипсис. Упавшая звезда. Честь наемника. v. 1.2 УЗЧН v.1.3 + ОГСРх64 Последний сталкер v. 1.2 ПС v. 1.3 + ОГСРх64 Ссылка на комментарий
Plotnik 3 Опубликовано 30 Декабря 2017 Поделиться Опубликовано 30 Декабря 2017 @Marafon6540 Про это мне известно. Я делаю оружие с функцией телепорта в точку прицеливания и хочу чтобы оно шло на любую версию игры. Вот как оно работает на Call Of Chernobyl (если вдруг кому интересно).https://youtu.be/9aOeplHKpsY У меня есть вот такая корявая идея: function get_target_distance() local console = get_console() console:execute("hud_crosshair_dist on") -- включаем опцию дистанции до цели local distance_text = get_hud():GetCustomStatic("ТИП_ТЕКСТА"):wnd():TextControl():GetText() -- получаем дистанцию как текст local distance_number = tonumber(distance_text) -- переводим этот текст в число console:execute("hud_crosshair_dist off") -- отключаем опцию дистанции до цели return distance_number end Только как называется этот тип текста? Он же должен быть прописан в одном из файлов в папке configs/ui. Я никак не могу его найти. Может есть ещё какой-нибудь способ? Ссылка на комментарий
Graff46 598 Опубликовано 31 Декабря 2017 Поделиться Опубликовано 31 Декабря 2017 Как подружить ГГ и заагрившуюся группировку? Я делал так: relation_registry.set_community_goodwill ("dolg", db.actor:id(), 5010) Долговцы в ГГ не стреляют, но когда видят ГГ, некоторые в панику ударяются и тычат оружием именно в ГГ, но не стреляют!И еще. Долговцы нейтральны и поговорить с некоторыми можно. Ссылка на комментарий
Vinozavr 33 Опубликовано 2 Января 2018 Поделиться Опубликовано 2 Января 2018 Приветствую. Нужна помощь/консультация по вот такому делу - возможно ли через скрипт увеличить/уменьшить k_hit, k_disp, k_pierce, k_dist у патронов из заданного списка при условии наличия на поясе определенного артефакта? Если да, то как это сделать/реализовать? Т.е, когда у ГГ на поясе висит определенный артефакт, у патронов из указанного в функции списка увеличиваются/уменьшаются k_hit, k_disp, k_pierce, k_dist . Скриптер из меня не ахти какой поэтому и спрашиваю. Буду благодарен за помощь. Ссылка на комментарий
AndreySol 215 Опубликовано 2 Января 2018 Поделиться Опубликовано 2 Января 2018 2 часа назад, Vinozavr сказал: возможно ли через скрипт увеличить/уменьшить k_hit, k_disp, k_pierce, k_dist Нет. Эти параметры читаются движком напрямую из конфигов, соответственно скриптами тут не обойтись. Ссылка на комментарий
Fenrir02 199 Опубликовано 3 Января 2018 Поделиться Опубликовано 3 Января 2018 Доброго времени суток! Подскажите как реализовать "Звук при отрезании частей монстров" как в ОП 2 Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
vampirnik77 121 Опубликовано 5 Января 2018 Поделиться Опубликовано 5 Января 2018 (изменено) Я давненько "общаюсь" со скриптами, не скажу что профи, но что-то могу. Так вот, суть, сидел себе вечером ковырялся в xr_effects.script и повстречал там строку вида: ... if p[2] and p[2] ~= nil then ... И как модно сейчас говорить "словил триггер", разве эти два условия не равносильны? Разве не достаточно этого? if p[2] then Изменено 5 Января 2018 пользователем vampirnik77 Официальная страница проекта Neof-One Crew Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 5 Января 2018 Поделиться Опубликовано 5 Января 2018 (изменено) Предполагается, что кто-нибудь особо одаренный может засунуть туда false, а где-то сильно потом его захотеть. upd: да, оно еще и с ошибкой. Изменено 6 Января 2018 пользователем Dennis_Chikin 1 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Space.Marine 466 Опубликовано 5 Января 2018 Поделиться Опубликовано 5 Января 2018 Прошу помощи. Сам в скриптах не силён. Есть функция проигрывания звукового файла: Скрытый текст function CSurgeManager:play_siren_sound() local snd_obj=self.blowout_sounds["siren"] local snd_position if snd_obj ~= nil and snd_obj:playing() then snd_obj:stop() end if(level.name()=="zaton") then snd_position=vector():set(115,8,184) elseif(level.name()=="jupiter") then snd_position=vector():set(-50,16,198) else snd_position=vector():set(147,15,-187) end if snd_obj ~= nil then snd_obj:play_at_pos(db.actor, snd_position) snd_obj.volume = 1 --self.debugMessages[12]:SetText("playing: "..tostring(id)) end end Как вызвать остановку проигрывания этого звука из другого скрипта при определённом условии ? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти