Dennis_Chikin 3 658 Опубликовано 30 Января 2015 Автор Поделиться Опубликовано 30 Января 2015 (изменено) "Вскрытие показало, что больной умер от вскрытия."Тема для "крупной формы", то есть, на уровне скриптов целиком или больших частей оных скриптов. "Что у него внутри, зачем оно там, и что с этим можно сделать ?" Изменено 30 Января 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Nazgool 250 Опубликовано 30 Июля 2015 Поделиться Опубликовано 30 Июля 2015 (изменено) И мне не нравится elseif-простыня, ПЕРЕД которой дергается parse_func_params. parse_func_params будет дергаться только тогда, когда определиться что функция имеет параметры, а не каждый цикл. Но если хочется, то можно записать и несколько по-другому, но более запутано что-ли function parse_infop(rslt, str) if str then local infop_n = 1 for sign, infop_name in string.gmatch(str, "(%S)([^%-%+%~%=%!%s]+)") do if sign == "+" then rslt[infop_n] = { name = infop_name, required = true } elseif sign == "-" then rslt[infop_n] = { name = infop_name, required = false } elseif sign == "~" then rslt[infop_n] = { prob = tonumber(infop_name) } elseif sign == "=" or sign == "!" then -- парсим параметры функций local func, param = infop_name:match('^(.-)(%b())') if param then param = parse_func_params(param:match('%((.-)%)')) infop_name = func or infop_name end rslt[infop_n] = { func = infop_name, expected = (sign == "="), params = param} else abort("function 'parse_infop' --> sign '%s': infop_name '%s':", sign, infop_name) end infop_n = infop_n + 1 end end end ..... Ну тут уже на вкус и цвет. Как по мне, то простыня понятнее. Тогда уже нужно доделывать и инфопорции в этом стиле function parse_infop(rslt, str) if str then local infop_n = 1 for sign, infop_name in string.gmatch(str, "(%S)([^%-%+%~%=%!%s]+)") do if sign == "+" or sign == "-" then rslt[infop_n] = { name = infop_name, required = (sign == "+") } elseif sign == "~" then rslt[infop_n] = { prob = tonumber(infop_name) } elseif sign == "=" or sign == "!" then -- парсим параметры функций local func, param = infop_name:match('^(.-)(%b())') if param then param = parse_func_params(param:match('%((.-)%)')) infop_name = func or infop_name end rslt[infop_n] = { func = infop_name, expected = (sign == "="), params = param} else abort("function 'parse_infop' --> sign '%s': infop_name '%s':", sign, infop_name) end infop_n = infop_n + 1 end end end @Dennis_Chikin, Когда будет готово, перезалей xr_logic с новыми правками. А то не ясно, что ты изменил(изменишь) а что нет. В switch_to_section нужно кэшировать db.storage[npc:id()] function switch_to_section( npc, st, section ) if section == nil or section == "" or (section == "sr_aes_deadzone" and has_alife_info( "strelok_pda_have" )) then return false end local npc_storage = db.storage[npc:id()] local active_section = npc_storage.active_section if active_section == section then return false end if active_section then issue_event(npc, npc_storage[npc_storage.active_scheme], "deactivate", npc) end npc_storage.active_section = nil npc_storage.active_scheme = nil activate_by_section( npc, st.ini, section, false ) return true end В функции parse_func_params у меня используется шаблон '[^%s:]+' Я не проверял, поверил разработчикам lua на слово, но элемент '*' (звездочка) называют "прожорливым". Сначала считывается вся строка, а потом уже идет разбор. При '[^%s:]+' сразу идет разбор строки. Изменено 30 Июля 2015 пользователем Nazgool Добавлено Dennis_Chikin, 30 Июля 2015 Ага, вот уже на что-то вменяемое похоже... 1 Ссылка на комментарий
Карлан 1 049 Опубликовано 30 Июля 2015 Поделиться Опубликовано 30 Июля 2015 (изменено) Эээ, а приколоть можете где strelok_pda_have пользуется? %b таки очень хороший шаблон, в свое время довольно часто его использовал, при парсинге тех же секций кстати говоря. Изменено 30 Июля 2015 пользователем Карлан Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 30 Июля 2015 Автор Поделиться Опубликовано 30 Июля 2015 (изменено) А это типа отключение выброса на АЭС от какого-то древнего nlc3. Оттуда же сохранение каких-то странных телепортов в нетпакет пда - не до конца вычистил. Изменено 30 Июля 2015 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Карлан 1 049 Опубликовано 31 Июля 2015 Поделиться Опубликовано 31 Июля 2015 В общем где-то мы тут обсуждали собственно что за чем считывается (ТЧ), по архивам, чтобы в ковырялках не затерялось запостю запощу напишу тут. 1. .db* по алфавиту 2. gamedata 3. .xdb* по алфавиту Да, я понимаю что я на русском форуме, но может кому будет надо. 3 Ссылка на комментарий
RayTwitty 492 Опубликовано 31 Июля 2015 Поделиться Опубликовано 31 Июля 2015 (изменено) @Карлан, лучше в справочник по функциям и классам запостить, имхо. Хотя, тут не особо много постов, найти при надобности тоже просто. Изменено 31 Июля 2015 пользователем Shadows Ссылка на комментарий
Карлан 1 049 Опубликовано 1 Августа 2015 Поделиться Опубликовано 1 Августа 2015 Сейчас, как вы поняли, я занимаюсь реструктуризацией, и нашел забавную цепочку мусора, а именно: ce_switcher.script se_switcher.script trigger.ltx Можно выпиливать, тесты ничего фатального не выявили. В любом случае если оно как-то где-то и надо, то сами видите где это есть . Ссылка на комментарий
RayTwitty 492 Опубликовано 2 Августа 2015 Поделиться Опубликовано 2 Августа 2015 (изменено) Возможно я чего-то не понимаю... task_manager.script function CRandomTask:save(p) ... p:w_u32(v.selected_target or -1)беззнаковое целое не может быть -1, поэтому сохраняется 4294967295 (что логично) загрузка: function CRandomTask:load(p) ... local selected_target = p:r_u32() if selected_target ~= -1 then self.task_info[id].selected_target = selected_targetкакое нахрен -1???Причем ниже, они из этого числа хотят получить игровой объект. if self.task_info[id].type == "defend_lager" then local defend_object = alife():object(self.task_info[id].selected_target)А теперь вопрос - как оно вообще работает? o_O Добавляю вывод в консоль: if self.task_info[id].type == "defend_lager" then local defend_object = alife():object(self.task_info[id].selected_target) local sm_ini = defend_object:spawn_ini() log1("defend_object selected_target = "..self.task_info[id].selected_target.." name = "..defend_object:name()) self.task_info[id].defend_target = utils.cfg_get_number(sm_ini, "random_task", "defend_target", nil, true) endрезультат: defend_object selected_target = 4294967296 name = single_playerИ так для каждого задания "defend_lager". WTF. Изменено 2 Августа 2015 пользователем Shadows 1 Ссылка на комментарий
abramcumner 1 156 Опубликовано 2 Августа 2015 Поделиться Опубликовано 2 Августа 2015 , вроде с кодом все нормально. -1 - магическая константа = "цель не выбрана". Если посмотришь на код внимательней, то по -1 объект не получают. -1 в selected_target, а объект получают по self.task_info[id].selected_target, куда -1 так и не присвоили. А глюк с 4294967295 и 4294967296 - отдельный глюк. 1 Ссылка на комментарий
RayTwitty 492 Опубликовано 2 Августа 2015 Поделиться Опубликовано 2 Августа 2015 (изменено) 1) условие if selected_target ~= -1 then не имеет смысла, так как u32 никогда не может быть -1, следовательно self.task_info[id].selected_target всегда равно значению p:r_u32()2) после чего они пытаются из этого числа получить объект и даже не проверяют есть ли он вообще (!)3) зачем вообще сохранять для заданий это значение, если оно всегда равно -1 (на save), а следовательно всегда (на load) получается (подразумевается) актор вроде с кодом все нормально. Там ничего нормального нет - весь код сплошной ахтунг. Если посмотришь на код внимательней, то по -1 объект не получают. Причем ниже, они из этого числа хотят получить игровой объект. Я имел ввиду число selected_target, а не -1. Изменено 2 Августа 2015 пользователем Shadows Ссылка на комментарий
abramcumner 1 156 Опубликовано 2 Августа 2015 Поделиться Опубликовано 2 Августа 2015 3) зачем вообще сохранять для заданий это значение, если оно всегда равно -1 (на save), а следовательно всегда (на load) получается (подразумевается) акторКак ты понял, что всегда равно -1? Из кода: p:w_u32(v.selected_target or -1)я вижу, что оно может быть число или null. Если null, то вместо null, пишем -1. Ссылка на комментарий
RayTwitty 492 Опубликовано 2 Августа 2015 Поделиться Опубликовано 2 Августа 2015 (изменено) Как ты понял, что всегда равно -1? В ходе практических тестов и вывода сохраняемых значений в лог на оригинальной игре. Если null, то вместо null, пишем -1. А то что -1 пишем в u32 не смущает? Изменено 2 Августа 2015 пользователем Shadows 1 Ссылка на комментарий
abramcumner 1 156 Опубликовано 2 Августа 2015 Поделиться Опубликовано 2 Августа 2015 А то что -1 пишем в u32 не смущает?Почему меня это должно смущать? В с++ -1 прекрасно пишется в u32 и читается обратно. 4 Ссылка на комментарий
RayTwitty 492 Опубликовано 2 Августа 2015 Поделиться Опубликовано 2 Августа 2015 (изменено) В с++ -1 прекрасно пишется в u32 и читается обратно. Пруф? Изменено 2 Августа 2015 пользователем Shadows 2 1 Ссылка на комментарий
Zander_driver 10 334 Опубликовано 2 Августа 2015 Поделиться Опубликовано 2 Августа 2015 Пруф? Присоединяюсь к вопросу, аж любопытно стало. Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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 Опубликовано 4 Августа 2015 Поделиться Опубликовано 4 Августа 2015 Итак, пачка вопросов от меня снова: 1. Что есмь fx_sound.script ? Они нигде не применяется, я так понимаю это какая-то обертка чтобы отыгрывать звуки где хочется? Но функционал уже итак нормальный заряжен. В общем я собираюсь выпиливать, ваше какое мнение? 2. dream.script, sr_sleep.script, хвосты есть в all.spawn, но полностью мертвые, то есть их оттуда надо выкидывать 100%. Сон надо делать совершенно по другому, так что это я тоже выпиливаю. Сейчас, к слову, у меня вся игра на 168 скриптах работает, против 441 (если не путаю) в оригинале. Ссылка на комментарий
abramcumner 1 156 Опубликовано 4 Августа 2015 Поделиться Опубликовано 4 Августа 2015 2. dream.script, sr_sleep.script, хвосты есть в all.spawn, но полностью мертвые, то есть их оттуда надо выкидывать 100%. Сон надо делать совершенно по другому, так что это я тоже выпиливаю."sr_" - логика рестриктора. Сюжетный сон со сновидениями. Зачем его выпиливать? Может его кто использует? И кстати как ты его по-другому сделаешь: основа всего в сталкере. Сейчас, к слову, у меня вся игра на 168 скриптах работает, против 441 (если не путаю) в оригинале.Что есть "выпиливание"? Все "выпиленные скрипты все равно остаются в db. А использовались в оригинале также далеко не все. Ссылка на комментарий
Карлан 1 049 Опубликовано 4 Августа 2015 Поделиться Опубликовано 4 Августа 2015 (изменено) "sr_" - логика рестриктора. Сюжетный сон со сновидениями. Зачем его выпиливать? Может его кто использует? И кстати как ты его по-другому сделаешь: основа всего в сталкере. Спасибо, что sr - space restrictor это я еще в юности понял. Лол, с чего вдруг это сюжетный сон? Эта логика к сюжетным снам отношения никакого не имеет, смотри соотв. скрипты. Основа, прости, что и чего? По другому я его сделаю как в ЗП например, сорсы же . Что есть "выпиливание"? Все "выпиленные скрипты все равно остаются в db. А использовались в оригинале также далеко не все. Есть то, что и db перепакованы. Так что я знаю о чем говорю . Изменено 4 Августа 2015 пользователем Карлан Ссылка на комментарий
Zander_driver 10 334 Опубликовано 21 Августа 2015 Поделиться Опубликовано 21 Августа 2015 Для тех кто кругом видит свежезакопанные велосипеды маскирующиеся под "сверх-новейшие скриптовые штуковины" А так же любителей копаться в сыром и неготовом коде. http://rghost.ru/6YYfr8GjH- инвентарь Судьбы Зоны, собственной персоной, как есть. Многие классы/методы не используются, не вызываются, являются рудиментами двухлетней давности или еще что нибудь такое. У кого есть желание, копайтесь А кто хочет готовое и с пояснениями, где что куда и зачем - все так же ждите. 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 Опубликовано 29 Августа 2015 Поделиться Опубликовано 29 Августа 2015 Сап, русский форум! Утром было делать нечего, и вспомнил я что меня часто атаковали в ЛС сделать чтобы БТР стрелял не только в актора или сид, но и в группировки и монстров, ну я решил пойти на встречу трудящимся и написал грязный хак от которого меня самого воротит, но до переделки этой схемы мне как до китая в известной позе, поэтому пока пусть будет так, ожидайте когда я доберусь до этой схемы и сделаю ее нормально. Пойдет на любую версию игры и любой мод где не менялся ph_car.script.Например: [ph_car@1] ; ... target = dolg [ph_car@2] ;... target = pseudodog Первая настройка стреляет по долговцам, вторая по псевдособакам, несколько группировок указывать пока нельзя, у меня есть много идей по этой схеме, как начну ее тотально переделывать, так и все будет доступно. Таки запрещено использовать всяким цирковым деятелям, иначе если увижу, буду каждый раз при каждой возможности громко ругаться что украли идею, код, водку, родину и флаг. Используйте как хотите. Скачать ph_car.script Еще в качестве ознакомления (так как он работает только у меня) выкладываю обезжиренный _g.script. Версия еще не финальная, но тем не менее на нее уже можно смотреть без отвращения. Могу ответить на все интересующие вопросы. Скажу что где-то ~60% кода улетела в помойку, она для релизной версии, да даже для дебага, просто не нужна на мой взгляд. Все функции стараюсь расписывать понятно, по возможности и подробно. Используйте как хотите. Скачать _g.script 2 Ссылка на комментарий
RayTwitty 492 Опубликовано 29 Августа 2015 Поделиться Опубликовано 29 Августа 2015 инвентарь Судьбы ЗоныПочти 40 тыс. строк, охренеть У меня весь апгрейд оружия и брони аля ЗП, вроде не больше 500. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти