Все посты %s в %S - AMK Team
Перейти к контенту

Курилка программистов


Рекомендуемые сообщения

local c_wnp = _G.c_wpn or {} -- здесь должна быть табличка clsid стволов.

Хороший посыл. 

clsid стволов - (т.е. просто константы) для оригинала прошиты в движке (см. lua_help.script), и таки кто-же возмётся их всех прописать (с учётом модификаций оригинала) в такой супер табличке? У Вас есть кандидаты на такой подвиг?

А как Вы думаете? почему никто не правил function isWeapon(object)? из _g.script? да именно по этой причине. Оптимизаторы...

 

Да. кстати, предупреждение по 2.1. Пока без r/o. Тут недавно люди и за меньшее получали. С баллами. dc

Изменено пользователем Dennis_Chikin

Поделиться этим сообщением


Ссылка на сообщение

Есть ли какие-то мысли по этому поводу?

Если дело только в "лесенке" и таких "лесенок" много, то я бы определил вот такую функцию:

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 
Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
А можно узнать сакральный смысл двойного arg?

Конечно можно. Никакого. Просто привычка.

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
Такое ощущение, что выполнение кода ушло внутрь SLEEP, а про остаток в функции с условиями оно забыло

может и так, а может и потому, что метод level.start_stop_menu для открытия/закрытия должен получать в качестве 1-го параметра адрес одного и того же экземпляра окна. В Вашем же примере явно используется метод не входящий в стандартной пространство имен level (level.start_stop_menu(level.get_inventory_wnd(), true)). Что он делает я не знаю, но если он не возвращает ссылку на открытое ранее окно, то почему же в таком случае оно  должно закрываться? 

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
вызываться это не будет при условиях, которые я обозначил.

я прогнал в чистом 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

--> конец

значит цепочка/лесенка здесь не виновата.

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
я не стал расписывать более тяжёлый вариант

а если так?

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

 

 

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
а вот если добавить else, тогда придется делать лесенку.

я бы не высказывался так однозначно. Практика показывает, что из почти любого положения есть, по крайней мере два выхода. Иногда их даже три.

Сразу скажу, что и с "else" это решается, в концепции ООП, достаточно элегантно и не слишком сложно без всякой "лесенки". Подумайте сами как.

 

этот код можно точно также написать в одно условие

можно, но даже при этих пяти он будет скорее всего более трудно читаем и воспринимаем, чем эта "лесенка". А если таких условий десяток или несколько? Malandrinus ведь именно о таком развитии событий говорил, а не о каких-то частных решениях.

Дайте нам примерчик такого своего решения "в одно условие", вариантов этак на 23-37, вместо теоретических выкладок. Вот тогда и будет повод для предметного обсуждения.

Мне показалось, что Вы очень любите всё критиковать, но не очень готовы делиться своими находками. Вот пример, чтобы не быть голословным: "была только одна - её я и написал тут чуть ранее, но сейчас тот код переделан". И молчание! Так покажите нам конечный результат (исходник то мы уже видели) и мы будем учиться, как побеждать такие проблемы. Я, лично,  всегда с большим удовольствием и с огромным вниманием отношусь к чьим-то программным разработкам и находкам.

 

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
вот так выглядит новый код:

но это принципиально новый алгоритм, в котором Вы к тому же поменяли одну лесенку на лесенку другого вида. В старом примере при не соблюдении первого условия вся цепочка прерывалась, а в новом осуществляется последовательная проверка всех возможных условий. Это суть разные вещи. Но и это не главное. Вот почему такое, как Вы говорите,  работает? тоже мне не очень понятно (почему старый не работал я Вам намекнул). Видимо потому, что это только фрагмент кода и что-то осталось за кадром.

Повторюсь: метод level.start_stop_menu работает (с одним и тем же окном) на показать/скрыть только в паре (как тригер) при вызове в одном модуле или явной передачи ссылки на него в другой. По крайнем мере у меня только так всегда и получалось.

 

 

где я и то, и другое применяю в одной функции

это тоже было бы интересно посмотреть (4-5 в одном условии). Просто, как такое может выглядеть? Когда я такое пытался сделать, то это смотрелось ужасно.

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение

 

 

Хотя нет, даже такого у меня не было

ну и славненько, т.к. я совершенно не такое имел ввиду, когда спрашивал про "одно  условие". Я думал, что Вы говорите о "сворачивании" лесенки  в пяток ступенек в последовательность "and ... or...". 

Просто на заметку: в Lua такие конструкции, из-за его чрезмерной внутренней оптимизации, иногда ведут себя совсем не так, как ожидается.


 

 

проблема видимо именно в lua сталкера.

вряд ли. Это всё настолько примитивно, с точки зрения синтаксиса, что списывать на огрехи системного экспорта не стоит.

Поделиться этим сообщением


Ссылка на сообщение
В твоём же варианте все условия изолированы.

Почему Вы так решили? Просто я дал схему в полном соответствии с прописанными условиями (задачей). Но я ведь могу в эти функции передать (и вернуть из них для последующих вычислений) любое число параметров, которые могут учитываться или нет и среди которых могут быть также и результаты проведенных ранее проверок. И в зависимости от их значения или вообще ничего не проверять, или выйти из всей цепочки сразу, или вычислить какие-то промежуточные результаты, которые можно учесть/или не учесть в конечном результате. При этом всё это производится в отдельных модулях, которых может быть сколько угодно. Но я никого не убеждаю, а просто высказал свое видение и ваши контраргументы меня не очень убедили. 

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
Вот только ответь на простой вопрос: решает ли это ту задачу, с которой я начал

нет, поскольку такое просто невозможно. Объясню почему я так думаю.

Задачи, как таковой и не было поставлено изначально. Была некая схема и некий весьма общий вопрос. При этом не было оговорено никаких условий, а "что же считать правильным"?. По мере поступления предложений, схема начинала изменяться и начинали возникать новые вопросы и меняться критерии оценки предложенных решений. Я же всегда привык решать проблемы "по мере их поступления" и никогда впрок. Ваши же схемы, на мой субъективный взгляд, выдаются по принципу "два пишем, три на ум пошло". Я в такие игры не играю, т.к. тоже дорожу своим временем.

Поэтому, после перехода на третий круг, я бросил это занятие. Если есть желание продолжения коллективного поиска оптимального решения, то (повторяя фразу из одного известного фильма) "огласите весь список, пожалуйста".

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
Так это, переверни его

а вот это зря. В этом вопросе я с Malandrinus согласен на все 200%. Широкоформатники хороши для просмотра видео, но никак не для тех, кто занимается работой (иногда правда для верстки бывает удобно, но и то не всегда). У меня дома 4 монитора 3х4 и только 1 широкий (у внука), а за новый ноут с квадратным монитором пришлось даже переплачивать. Редкость это теперь, всем больше мультики приятнее смотреть, чем комфортно работать

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
Мужики, вы всегда такие серьезные?Соседу когда присылают всякие *нечитаемые* портянки, то он так делает. Реально удобнее

вот это уже разговор "не мальчика, но мужа...". Это возможно и оффтоп (давно правила не перечитывал) и за такое может возможно? следует наказывать, я даже не спорю и заранее согласен (только про себя), но это было сказано от "души"  и главное в русле обсуждения основного вопроса!

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
Но всё остальное - схемы логики, общие схемы поведения, GUI навороты и прочее в этом духе - уже от лукавого. Ну если точнее, то просто от отсутствия доступа к исходникам.

Как всё запущено! Не стоит мешать "Божий дар с яичницей".

Это не от "лукавого", а от стремнения использовать то, что знаю лучше, вместо того, что знаю... так себе. Да при этом постараться убедить и других в своей правоте. Пустой спор на пустом месте. Всё одинакого имеет право на применение, а критерий только один - востребовательность продукта. Перевидите Сталкер только на Си (трудно, хлопотно... но можно) и он умрёт почти сразу. Он потому и "долгожитель", что его могут править и придумывать своё новое большое количество не очень подготовленных к программному ремеслу людей. Они все сразу бросятся в Си? Да не смешите мои тапочки! Интересно Вам копаться в движке? Да пожалуйста, до полного удовлетворения. Какова только востребованность конечного продукта будет? Это большой вопрос. Да и уж пожалуйста сделаете так, чтобы эти правки движка были совместимы с младшими версиями. А то ведь как бывает - продукт от 1.004 не работает на 1.006. Наобород я бы ещё понял, но младшие не идут на более продвинутых? "Ключница их делала". А тюнингом Сталкера можно заминаться сколько угодно. Тут всё зависит от желания и свободного времени десятка людей, которые этим почти живут. Отсюда и споры что важнее - скрипты или движок? Пустое это всё. Результат - критерий этих споров. А пока он за теми, кто копашится со скриптами, конфигами, UI и прочими мелочами.

 

Ну так и есть. Кому-то что-то не нравится - тот этим и занимается.

Золотые слова. Тем более, что всё это только под интерес, а не основная трудовая деятельность.

Изменено пользователем Serge!
  • Нравится 1
  • Согласен 2

Поделиться этим сообщением


Ссылка на сообщение
Я открою большую тайну, но Сталкер и так уже написан на Си

Это не тайна, а "секрет полишинеля"

 

 

Сталкеры без скриптовой обвязки полностью работоспособны.

Примеры, пожалуйста, в студию и со ссылками желательно.

 

 

Долгожитель в первую очередь, потому что игра хорошая.

Но ведь это не столько от движка зависит сколько от идеи. А без Lua, т.е. возможности динамической правки и развития... Сталкер уже бы забыли лет ...цать тому назад. А вы всё движок.

 

 

Если бы изначально был доступ к исходникам, то на данный момент мы бы видели куда больший прогресс.

В чём? В сюжете, в количестве модификаций? И кто бы это всё сделал? Смешно.

 

 

Моя персона не имеет к разговору никакого отношения.

Я просто Вас цитировал. Ничего личного.

 

 

Не приходит в голову простая мысль, что все значимые достижения в скриптинге были сделаны людьми, которые также были и неплохими программистами на Си

Почему же не приходит? Я этот в этом даже почти уверен. А вот странно, что Вы не задались таким простым вопросом - они работали со скриптами и не лезли править движок. Почему интересно.

Изменено пользователем Serge!
  • Нравится 1
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение

@Nazgool, Почти со всем, что Вы сказали, я практически согласен... Но с одним уточнением - это всё не про Сталкер. Самый лучший и самый оптимизированный вариант со старым сюжетом... на этом больших дивидентов не получишь. А вариант Сталкера - "Вот вам упаковка и несколько конфиг настроек. А если мало, то что-то вроде ArtMoney поможет." - вообще не катит.

Поделиться этим сообщением


Ссылка на сообщение

 

 

чтобы такие как мы не плюнули на новый сталкер после прохождения, а могли почувствовать себя программистами, и делать что-то своё.
Вот именно про это я всё время и долдоню. А движок? да пусть оптимизируют.

Поделиться этим сообщением


Ссылка на сообщение

@Malandrinus, У меня почти на все Ваши тезисы есть мои аргументы. Но, развивать их здесь особого желания нет. Если же у Вас таковое появится, то предлагаю через ЛС.

А то как получается: Я  вам вопрос про конкретные ссылки на вашу же цитату, а Вы мне обратно - "Создаёшь секцию сталкера,..." и т.д. Таким макаром можно гонять "шарик налево - шарик направо" до посинения.

Изменено пользователем Serge!
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

@Malandrinus, Разве это не Вы написали: "Сталкеры без скриптовой обвязки полностью работоспособны."? Вот я и попросил ссылку на этот продукт, чтобы самому убедиться в этом. Лично мне, да ещё в Сталкере, это очень сомнительно.

 

 

Не хотелось бы уходить от формата публичного обсуждения.

Как скажите, если сможете гарантировать, что куратор этой темы не даст мне очередной нагоняй за словоблудие. Вы же Личность, а я обычный пользователь со всеми вытекающими из правил форума последствиями. Это, увы, реалии жизни и мне приходится с ними считаться.

Вы же видите, что я постоянно свои ошибки правлю. Это чтобы не получить "пистон" за орфографию, а опечаток, увы, много делаю.


Murarius, а про что интересно "все это"? Просто для ориентации разговора.

Но, если Вы даёте мне карт-бланш, то как только движок (опять движок) форума позволит мне создать новую публикацию, я постараюсь пройтись по всем 9-ти пунктам моего оппонента.

Изменено пользователем Serge!
  • Нравится 1
  • Согласен 1

Поделиться этим сообщением


Ссылка на сообщение
Разобраться можно конечно, но когда я первый раз читал, то понятие приходило не совсем просто.

При этом следует учитывать, что "чистый" Lua и Lua сталкера не  на 100% тождественны. Есть ньюансы.

Изменено пользователем Serge!

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...