Serge! 127 Опубликовано 5 Января 2015 (изменено) local c_wnp = _G.c_wpn or {} -- здесь должна быть табличка clsid стволов. Хороший посыл. clsid стволов - (т.е. просто константы) для оригинала прошиты в движке (см. lua_help.script), и таки кто-же возмётся их всех прописать (с учётом модификаций оригинала) в такой супер табличке? У Вас есть кандидаты на такой подвиг? А как Вы думаете? почему никто не правил function isWeapon(object)? из _g.script? да именно по этой причине. Оптимизаторы... Да. кстати, предупреждение по 2.1. Пока без r/o. Тут недавно люди и за меньшее получали. С баллами. dc Изменено 5 Января 2015 пользователем Dennis_Chikin Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 10 Декабря 2015 (изменено) Есть ли какие-то мысли по этому поводу? Если дело только в "лесенке" и таких "лесенок" много, то я бы определил вот такую функцию: function checkbool(...) local t = arg and arg or {...} -- чтобы работало и в чистом Lua и в "Сталкере" rez, i = true, 1 while rez and i<=#t do rez = rez and t[i] i = i + 1 end return rez end после чего, основная будет выглядеть так: function fff() if checkbool(cond1, cond2, cond3, cond4) then -- do_something end end Изменено 10 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 10 Декабря 2015 (изменено) А можно узнать сакральный смысл двойного arg? Конечно можно. Никакого. Просто привычка. Изменено 10 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 10 Декабря 2015 (изменено) Такое ощущение, что выполнение кода ушло внутрь SLEEP, а про остаток в функции с условиями оно забыло может и так, а может и потому, что метод level.start_stop_menu для открытия/закрытия должен получать в качестве 1-го параметра адрес одного и того же экземпляра окна. В Вашем же примере явно используется метод не входящий в стандартной пространство имен level (level.start_stop_menu(level.get_inventory_wnd(), true)). Что он делает я не знаю, но если он не возвращает ссылку на открытое ранее окно, то почему же в таком случае оно должно закрываться? Изменено 10 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 10 Декабря 2015 (изменено) вызываться это не будет при условиях, которые я обозначил. я прогнал в чистом Lua этот код local cond1, cond2, cond3, cond4 = false, false, true, true local fun = function() if not cond1 then if not cond2 then if cond3 then if cond4 then --SLEEP -- call external func print('cond4 - true') else print('cond4 - false') -- show message4 (CUIStatic) end else print('cond3 - false') -- show message3 (CUIStatic) end else print('cond2 - true') -- show message2 (CUIStatic) end else print('cond1 - true') -- show message1 (CUIStatic) end print('конец') -- level.start_stop_menu(level.get_inventory_wnd(), true) -- hide inventory window end fun() всё отработало ожидаемо --> cond4 - true --> конец значит цепочка/лесенка здесь не виновата. Изменено 10 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 11 Декабря 2015 (изменено) я не стал расписывать более тяжёлый вариант а если так? local cond1 = function() cond = true; print('cond1'); return cond end local cond2 = function() cond = true; print('cond2'); return cond end local cond3 = function() cond = true; print('cond3'); return cond end local cond4 = function() cond = true; print('cond4'); return cond end local cond5 = function() cond = true; print('cond5'); return cond end local something = function() print('something'); return false end local tcond = {cond1(), cond2(), cond3(), cond4(), cond5(), something()} local counter, out = 0 function fff () repeat counter = counter + 1; out = tcond[counter] if out then fff() end until not out end Изменено 11 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 11 Декабря 2015 (изменено) а вот если добавить else, тогда придется делать лесенку. я бы не высказывался так однозначно. Практика показывает, что из почти любого положения есть, по крайней мере два выхода. Иногда их даже три. Сразу скажу, что и с "else" это решается, в концепции ООП, достаточно элегантно и не слишком сложно без всякой "лесенки". Подумайте сами как. этот код можно точно также написать в одно условие можно, но даже при этих пяти он будет скорее всего более трудно читаем и воспринимаем, чем эта "лесенка". А если таких условий десяток или несколько? Malandrinus ведь именно о таком развитии событий говорил, а не о каких-то частных решениях. Дайте нам примерчик такого своего решения "в одно условие", вариантов этак на 23-37, вместо теоретических выкладок. Вот тогда и будет повод для предметного обсуждения. Мне показалось, что Вы очень любите всё критиковать, но не очень готовы делиться своими находками. Вот пример, чтобы не быть голословным: "была только одна - её я и написал тут чуть ранее, но сейчас тот код переделан". И молчание! Так покажите нам конечный результат (исходник то мы уже видели) и мы будем учиться, как побеждать такие проблемы. Я, лично, всегда с большим удовольствием и с огромным вниманием отношусь к чьим-то программным разработкам и находкам. Изменено 11 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 11 Декабря 2015 (изменено) вот так выглядит новый код: но это принципиально новый алгоритм, в котором Вы к тому же поменяли одну лесенку на лесенку другого вида. В старом примере при не соблюдении первого условия вся цепочка прерывалась, а в новом осуществляется последовательная проверка всех возможных условий. Это суть разные вещи. Но и это не главное. Вот почему такое, как Вы говорите, работает? тоже мне не очень понятно (почему старый не работал я Вам намекнул). Видимо потому, что это только фрагмент кода и что-то осталось за кадром. Повторюсь: метод level.start_stop_menu работает (с одним и тем же окном) на показать/скрыть только в паре (как тригер) при вызове в одном модуле или явной передачи ссылки на него в другой. По крайнем мере у меня только так всегда и получалось. где я и то, и другое применяю в одной функции это тоже было бы интересно посмотреть (4-5 в одном условии). Просто, как такое может выглядеть? Когда я такое пытался сделать, то это смотрелось ужасно. Изменено 11 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 11 Декабря 2015 Хотя нет, даже такого у меня не было ну и славненько, т.к. я совершенно не такое имел ввиду, когда спрашивал про "одно условие". Я думал, что Вы говорите о "сворачивании" лесенки в пяток ступенек в последовательность "and ... or...". Просто на заметку: в Lua такие конструкции, из-за его чрезмерной внутренней оптимизации, иногда ведут себя совсем не так, как ожидается. проблема видимо именно в lua сталкера. вряд ли. Это всё настолько примитивно, с точки зрения синтаксиса, что списывать на огрехи системного экспорта не стоит. Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 13 Декабря 2015 (изменено) В твоём же варианте все условия изолированы. Почему Вы так решили? Просто я дал схему в полном соответствии с прописанными условиями (задачей). Но я ведь могу в эти функции передать (и вернуть из них для последующих вычислений) любое число параметров, которые могут учитываться или нет и среди которых могут быть также и результаты проведенных ранее проверок. И в зависимости от их значения или вообще ничего не проверять, или выйти из всей цепочки сразу, или вычислить какие-то промежуточные результаты, которые можно учесть/или не учесть в конечном результате. При этом всё это производится в отдельных модулях, которых может быть сколько угодно. Но я никого не убеждаю, а просто высказал свое видение и ваши контраргументы меня не очень убедили. Изменено 13 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 15 Декабря 2015 (изменено) Вот только ответь на простой вопрос: решает ли это ту задачу, с которой я начал нет, поскольку такое просто невозможно. Объясню почему я так думаю. Задачи, как таковой и не было поставлено изначально. Была некая схема и некий весьма общий вопрос. При этом не было оговорено никаких условий, а "что же считать правильным"?. По мере поступления предложений, схема начинала изменяться и начинали возникать новые вопросы и меняться критерии оценки предложенных решений. Я же всегда привык решать проблемы "по мере их поступления" и никогда впрок. Ваши же схемы, на мой субъективный взгляд, выдаются по принципу "два пишем, три на ум пошло". Я в такие игры не играю, т.к. тоже дорожу своим временем. Поэтому, после перехода на третий круг, я бросил это занятие. Если есть желание продолжения коллективного поиска оптимального решения, то (повторяя фразу из одного известного фильма) "огласите весь список, пожалуйста". Изменено 15 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 15 Декабря 2015 (изменено) Так это, переверни его а вот это зря. В этом вопросе я с Malandrinus согласен на все 200%. Широкоформатники хороши для просмотра видео, но никак не для тех, кто занимается работой (иногда правда для верстки бывает удобно, но и то не всегда). У меня дома 4 монитора 3х4 и только 1 широкий (у внука), а за новый ноут с квадратным монитором пришлось даже переплачивать. Редкость это теперь, всем больше мультики приятнее смотреть, чем комфортно работать Изменено 15 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 16 Декабря 2015 (изменено) Мужики, вы всегда такие серьезные?Соседу когда присылают всякие *нечитаемые* портянки, то он так делает. Реально удобнее вот это уже разговор "не мальчика, но мужа...". Это возможно и оффтоп (давно правила не перечитывал) и за такое может возможно? следует наказывать, я даже не спорю и заранее согласен (только про себя), но это было сказано от "души" и главное в русле обсуждения основного вопроса! Изменено 16 Декабря 2015 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 4 Сентября 2016 (изменено) Но всё остальное - схемы логики, общие схемы поведения, GUI навороты и прочее в этом духе - уже от лукавого. Ну если точнее, то просто от отсутствия доступа к исходникам. Как всё запущено! Не стоит мешать "Божий дар с яичницей". Это не от "лукавого", а от стремнения использовать то, что знаю лучше, вместо того, что знаю... так себе. Да при этом постараться убедить и других в своей правоте. Пустой спор на пустом месте. Всё одинакого имеет право на применение, а критерий только один - востребовательность продукта. Перевидите Сталкер только на Си (трудно, хлопотно... но можно) и он умрёт почти сразу. Он потому и "долгожитель", что его могут править и придумывать своё новое большое количество не очень подготовленных к программному ремеслу людей. Они все сразу бросятся в Си? Да не смешите мои тапочки! Интересно Вам копаться в движке? Да пожалуйста, до полного удовлетворения. Какова только востребованность конечного продукта будет? Это большой вопрос. Да и уж пожалуйста сделаете так, чтобы эти правки движка были совместимы с младшими версиями. А то ведь как бывает - продукт от 1.004 не работает на 1.006. Наобород я бы ещё понял, но младшие не идут на более продвинутых? "Ключница их делала". А тюнингом Сталкера можно заминаться сколько угодно. Тут всё зависит от желания и свободного времени десятка людей, которые этим почти живут. Отсюда и споры что важнее - скрипты или движок? Пустое это всё. Результат - критерий этих споров. А пока он за теми, кто копашится со скриптами, конфигами, UI и прочими мелочами. Ну так и есть. Кому-то что-то не нравится - тот этим и занимается. Золотые слова. Тем более, что всё это только под интерес, а не основная трудовая деятельность. Изменено 4 Сентября 2016 пользователем Serge! 1 2 Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 4 Сентября 2016 (изменено) Я открою большую тайну, но Сталкер и так уже написан на Си Это не тайна, а "секрет полишинеля" Сталкеры без скриптовой обвязки полностью работоспособны. Примеры, пожалуйста, в студию и со ссылками желательно. Долгожитель в первую очередь, потому что игра хорошая. Но ведь это не столько от движка зависит сколько от идеи. А без Lua, т.е. возможности динамической правки и развития... Сталкер уже бы забыли лет ...цать тому назад. А вы всё движок. Если бы изначально был доступ к исходникам, то на данный момент мы бы видели куда больший прогресс. В чём? В сюжете, в количестве модификаций? И кто бы это всё сделал? Смешно. Моя персона не имеет к разговору никакого отношения. Я просто Вас цитировал. Ничего личного. Не приходит в голову простая мысль, что все значимые достижения в скриптинге были сделаны людьми, которые также были и неплохими программистами на Си Почему же не приходит? Я этот в этом даже почти уверен. А вот странно, что Вы не задались таким простым вопросом - они работали со скриптами и не лезли править движок. Почему интересно. Изменено 4 Сентября 2016 пользователем Serge! 1 1 Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 4 Сентября 2016 @Nazgool, Почти со всем, что Вы сказали, я практически согласен... Но с одним уточнением - это всё не про Сталкер. Самый лучший и самый оптимизированный вариант со старым сюжетом... на этом больших дивидентов не получишь. А вариант Сталкера - "Вот вам упаковка и несколько конфиг настроек. А если мало, то что-то вроде ArtMoney поможет." - вообще не катит. Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 4 Сентября 2016 чтобы такие как мы не плюнули на новый сталкер после прохождения, а могли почувствовать себя программистами, и делать что-то своё.Вот именно про это я всё время и долдоню. А движок? да пусть оптимизируют. Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 4 Сентября 2016 (изменено) @Malandrinus, У меня почти на все Ваши тезисы есть мои аргументы. Но, развивать их здесь особого желания нет. Если же у Вас таковое появится, то предлагаю через ЛС. А то как получается: Я вам вопрос про конкретные ссылки на вашу же цитату, а Вы мне обратно - "Создаёшь секцию сталкера,..." и т.д. Таким макаром можно гонять "шарик налево - шарик направо" до посинения. Изменено 4 Сентября 2016 пользователем Serge! 1 Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 4 Сентября 2016 (изменено) @Malandrinus, Разве это не Вы написали: "Сталкеры без скриптовой обвязки полностью работоспособны."? Вот я и попросил ссылку на этот продукт, чтобы самому убедиться в этом. Лично мне, да ещё в Сталкере, это очень сомнительно. Не хотелось бы уходить от формата публичного обсуждения. Как скажите, если сможете гарантировать, что куратор этой темы не даст мне очередной нагоняй за словоблудие. Вы же Личность, а я обычный пользователь со всеми вытекающими из правил форума последствиями. Это, увы, реалии жизни и мне приходится с ними считаться. Вы же видите, что я постоянно свои ошибки правлю. Это чтобы не получить "пистон" за орфографию, а опечаток, увы, много делаю. Murarius, а про что интересно "все это"? Просто для ориентации разговора. Но, если Вы даёте мне карт-бланш, то как только движок (опять движок) форума позволит мне создать новую публикацию, я постараюсь пройтись по всем 9-ти пунктам моего оппонента. Изменено 4 Сентября 2016 пользователем Serge! 1 1 Поделиться этим сообщением Ссылка на сообщение
Serge! 127 Опубликовано 12 Ноября 2016 (изменено) Разобраться можно конечно, но когда я первый раз читал, то понятие приходило не совсем просто. При этом следует учитывать, что "чистый" Lua и Lua сталкера не на 100% тождественны. Есть ньюансы. Изменено 12 Ноября 2016 пользователем Serge! Поделиться этим сообщением Ссылка на сообщение