Перейти к контенту

Nazgool

Жители
  • Число публикаций

    618
  • Регистрация

  • Последнее посещение

  • Дней в топе

    1
  • AMKoin

    37 [Подарить AMKoin]

Весь контент пользователя Nazgool

  1. dsh Да для меня написать подобный код - не проблема. Печально только что никому сейчас это не нужно Да что там... давно уже никому не нужно.
  2. Nazgool

    Скриптование

    Не, всё нормально вроде. Но... Ну не принято так что-ли. Ну когда много раз вызывают одно и то же, то как-бы принято кэшировать. Не я же придумал. function sad_predateli_pda() local actor = db.actor if actor ~= nil and actor:object("sad_mudak_pda") ~= nil and not actor:has_info("sad_predateli_info") then actor:give_info_portion("sad_predateli_info") end end
  3. Ну если так не подходит, то тогда (по степени сложности) нужно подумать над тем, чтобы переписать функцию '__index'. Как следующий в цепочке ивентов. Или тоже не вариант?
  4. dsh Всё просто кажется сложным. На самом деле обычно не хватает времени разобраться. А дела обстоят так. Действительно, у таблицы 'db' существует метаблица, которая посредством метаметода '__index' ссылается на глобальную таблицу '_G'. Поэтому совершенно естественно, что при запросе несуществующего поля таблицы 'db', поиск поля с таким именем происходит в таблице, на которую указывает '__index'. Т.е. в таблице '_G' И это не прихоть игры, таковы законы Lua. Любой модуль (module) при указании 'package.seeall' будет искать "недостающие" поля в таблице '_G'. И избавиться от такого поведения (как вы говорите) можно совершенно стандартными способами Lua. Для это существую стандартные функции Lua - rawget и rawset. Т.е. давайте перепишем Ваш пример так: rawset(db, 'actor_test',nil) _G.actor_test = "shit" И теперь напечатайте: log3( "dsh: actor_test = %s", tostring( rawget(db.actor_test))
  5. Dennis_Chikin Я хоть и ответил, но до чертиков в интересно, а что же такое случилось с lua, что в загалi возник такой вопрос? Это к чему? Ты (Dennis_Chikin) такой человек, что (все уже привыкли, что знаешь много) вроде такие вопросы от тебя слышать как-то... необычно что-ли? Ну как-то так выходит.
  6. Nazgool

    Скриптование

    Jekyll Я могу сейчас всё расписать от и до. Только один вопрос - Почему именно до двадцати? for t = 1,20 do В чём сакральная задумка? P.S. Нет, я и так вижу что человек не разбирается. Просто хотелось определиться что именно нужно. P.P.S. А что это с редактором? Жесть какая-то при изменении. Но это в общем-то не особо важно.
  7. Доводилось использовать несколько версий lua ТЧ а также стандартные 5.1 - 5.3 Различий не замечал. А записи абсолютно эквивалентны. "k" и "v" (да как угодно их называй) - это локальные переменные внутри цикла. Функция "pairs (t)" в любой версии (по крайней мере использованных мною) возвращает три значения - функцию next, таблицу t и nil. Т.е. for k, v in pairs(t) do можно переписать как: for k, v in next,t,nil do И теперь видно, что мы имеем дело с функцией "next" Т.е. твой вопрос переадресовывается от функции "pairs" к функции "next" Впрочем и за next-ом различных версий я тоже ничего криминального не замечал, т.е. она как возвращала два значения, так и возвращает. Те самые "k" и "v" . А как ты их будешь использовать - это сугубо твоё дело. Хоть "k" и "_" , хоть "_" и "v" , хоть только "k".
  8. Nazgool

    У Костра XV

    dPlayer Человек достаточно живучее существо (хотя хочется и отметить, что если бы у некоторых особей такое свойство отсутствовало, то мир бы только приобрёл от этого) Так что не переживай. Современная природа дает нам столько всякой гадости, о которой мы не догадываемся, что грунтовку можно считать растворителем этой гадости
  9. Nazgool

    Скриптование

    @UnLoaded, Нет, это не медвежья услуга, т.к. автор изначально хочет! чтобы при отсутствии значения бралось некое значение по умолчанию ("stalker") Т.е. такое действие не побочный эффект, а сделано намеренно. Вот если бы в исходном коде не было : if community == nil then community = "stalker" end то и я бы написал : ... and community_condition[community] Я всего-лишь подправил код так, чтобы исходная идея автора работала как можно надежнее.
  10. Nazgool

    Скриптование

    @UnLoaded, О чем вы говорите? Какая универсальная защита? Просто защита конкретной функции. Коих создается великое множество. И лично мне не хочется несколько раз возвращаться к переписыванию одного и того кода по нескольку раз. Поэтому лично я поступил бы именно в таком духе. Ну написал бы несколько вспомогательных функций типа iff(cond, a, - (кодеры поймут что я имел в виду) А насчет "медвежьей услуги". Я посчитал, что если напишу : -- тут что-то делать. лог, вылет, исправить или ничего не делать то, будет достаточно ясно. Видимо ошибался.
  11. Nazgool

    Скриптование

    @WinCap, Я понял о чем ты говоришь. Да, если ты используешь подобную функцию ограничено, и уверен что в будущем её не будут вызывать больше ниоткуда, что может привести к передаче "не тех" аргументов то можно оставить и так. Тогда, учитывая твоё объяснение, и запись : if community == nil then community = "stalker" end можно сократить до : community = community or "stalker" Но твоё объяснение всё равно не делает функцию абсолютно "безопасной". Твой код полностью опирается на данные таблицы community_condition. Поэтому нужно следить за тем, чтобы после добавления какой-либо группировки, не забыть прописать её и в этой таблице тоже. А сколько подобных таблиц может быть в файлах? И о всех нужно помнить? Поверь, такие мелочи со временем приводят к долгому и нудному обслуживанию кода. Вот ты сам говоришь, что функция character_community не возвращает "абы какие" значения. Т.е. программист позаботился о том, чтобы функция работала как можно надежнее. В твоей же функции, имхо, всё-равно остаются эти два слабых места. Первое - я бы никогда не был уверен на 100% что придут именно те аргументы. Второе - даже если придут "те", то я не был уверен на 100% что они обязательно будут в таблице character_community. Поэтому более надежный вариант можно было бы написать примерно так : function set_weapon_drop_condition(item, community) local data = type(community_condition) == 'table' and community_condition[community or "stalker"] -- я тут всё в кучу собрал, но можно и раздельно ошибки отлавливать if not (type(item) == 'userdata' and type(item.set_condition) == 'function' and type(data) == 'table' and type(data.min) == 'number' and type(data.max) == 'number') then return -- тут что-то делать. лог, вылет, исправить или ничего не делать end local condition = math.random(data.min, data.max) / 100 item:set_condition(condition) end Этот вариант закрашить можно только передав юзердату, которая также имеет метод set_condition и с "не той" сигнатурой. А в оригинале такой нет.
  12. Nazgool

    Скриптование

    @WinCap, Ну во-первых он может принимать "ряд" любых типов значений lua кроме nil. См. : if community == nil then Во-вторых. Где у тебя в коде написано, что "заранее известных" и тем более "строковых значений"? Вот в моем варианте это всё предусмотрено. А покажи где у тебя? В третьих (как и во-первых), если он не определен, или определен не так как ожидалось (т.е. это либо не строка, либо строка, которой нет в списке таблицы "community_condition"), то ту два варианта - либо определять значение "насильно" (как ты сдедал): then community = "stalker" Либо вылетать. Ты уж определись чего нужно-то. Исходя из твоего кода выходит что первый вариант. Что собственно я сделал, чтобы не отходить от оригинала. Так что твоё несогласие с моим вариантом считаю не достаточно (вернее совсем не) обоснованным. P.S. Вольность типов, количества и значений переменных в lua несомненно делает его очень гибким. Но только не в "точных науках". Например мне приходилось, для исключения двусмысленности, создавать ряд сигнатурных функций.
  13. Nazgool

    Скриптование

    Говорю не для того чтобы обидеть, а только ради благих намерений. Хотя и понимаю, что оными выстелена дорога в ад, поэтому как уж получиться. Не раз уже говорил, и всегда недоумевал от столь бесполезного кода (и подобный встречается довольно часто) : if community == nil then community = "stalker" end Что такого полезного тут проверяется? Что значение "community" не "nil"? Ну хорошо. Оно не "nil". А, скажем, "false". И что тогда будет? community_condition[community].min будет фактически равно community_condition[false].min К чему это приведет? Рассказывать, думаю, не нужно. Да, значения не то что нужно, а просто необходимо проверять! НО! Делать это максимально полезным что ли. В данном случае сам код подсказывает как это сделать У тебя уже есть таблица "community_condition", в которой заданы поля, ключи которой и определяют весь необходимый диапазон значений переменной "community" Поэтому сделав : community = community_condition[community] and community or "stalker" Решаются абсолютно все проблемы как с типом, так и со значением переменной "community". Ну или на любителя (эквивалент предыдущему коду): if not community_condition[community] then community = "stalker" end
  14. Nazgool

    Десять сталкерских лет

    Сын купил диск, и ему что-то не понравилось. Поэтому я зашел в гугл с вопросом, "как сделать чтобы..." Это было в 2008-м вроде. С тех пор... изучил Lua, файлы, структуру и возможности игры. Поучаствовал в разных проектах (глобальных и локальных), И ни разу не жалею, так как считаю что это не только игра. Это некое сито, сквозь которое просеилось всё лучшее что было в моддинге на тот момент. Талантливые люди, сумасшедшие (и несбыточные на тот момент) идеи, которые решались с таким энтузиазмом, который покроет все те фиксы, что решают ТЕ! проблемы на данный момент. Ностальжи как ни крути В общем спасибо всем. И с юбилеем конечно.
  15. Это аналог require(module_name) из академического.. lua. Идет подгрузка модуля(файла) с именем module_name.
  16. @abramcumner, Да я бы я радостью отдал всё. Ну честно. Поверь. Да не фиг там прятать. Было бы только моё - отдал бы на другой же день. Меня держит только честь. Ну не могу я в принципе предать. Не моё это.У меня у самого руки чешутся отдать (и это кстати было моё убеждение). Но (укр) таке життя. Собака честь. УкраЇнці зрозуміють. Murarius Когда я прочитал Ваше сообщение http://www.amk-team.ru/forum/topic/13126-kurilka-programmistov/page-46#entry1066697 ... Нет. не так. Когда прочитал несколько первых строк Вашего сообщения ... и , не дочитав до конца я, воспринял всё сообщение "в штыки". И занял защитную позицию. И по инерции маховик репрессий покатился ... Извини дружище. Понял. Слава Богу не так как в истории, а вовремя Но потом, всё-таки здравый смысл (слава Богу ещё не покинул) заставил перечитать и понять. Ну в принципе я уже объяснил, что всё бы отдал ещё год назад (о Боже, а сколько назад всё это было сделано? - не помню) Но могу повторять в любой момент и в любом состоянии - честь превыше всего! (нужно было стать священником? ) TIGER_VLAD Після цього ти розумієшь що би я сказав, а ти би відповів
  17. abramcumner , Murarius Вы, полагаю, очень хорошо умеете читать. Но, видать, внимать это не Ваша особенность Как-бы так случилось, что я простой исполнитель. Но есть вполне определённый руководитель проекта. И, есть всё-таки этика, следуя которой я не могу публиковать не согласованные с руководителем материалы. Это не закон. Это просто мои личные убеждения. А правильные они или нет - это не моя юрисдикция. Правила морали не позволяют мне опрелюднивать эти материалы. Решение полностью зависит от автора. Вы и так видите что случилось. А если хотите чего-то большего .. то за последние два или три часа что я тут ничего конкретного и зависящего от меня не слышал. Остальное читайте выше. О том что говорил Саша (Malandrinus) - ДА. Но я ещё раз повторяю. Это не моё решение! Я только подтверждаю то, что он это говорил. Я простой скриптёр, которому интересно развязывать задачи. В этом проекте было много задач. И я их развязал. С огромным удовольствием между прочим. Вот и всё. А Вы тут ту высокие материи. Ничего кроме скриптов с моей стороны. TIGER_VLAD Ріднесенька наша була і буде назавжди. Ти тільки десь поряд будь. А то я зникну як це буває в останній час
  18. Я не для того чтобы было написано, а ради справедливости. Зашел случайно, Раз в N-месяцев. Почитал. И вот решил что есть что сказать. Я работаю (вернее работал) не для имиджа. И не для ... да придумывайте что хотите. Просто на тот момент было очень интересно. Но , (прошу прощения у Кarlan) - даже не знаю как сделать, чтобы все поняли, и не сказать лишнего. Попробую сказать как можно правильнее. Сначала для автора. Проект перешел границы личного с тех пор, как стал общедоступным. Саша (Malandrinus) предупреждал нас о всех последствиях. И вот они и во всей красе. Так что не то что (имхо) пора, а уже жизненно НЕОБХОДИМО открывать все карты И то, что было интересно для нас (домашнего использования) уже не интересно для комьюнити. Время идет. Кто-то придумывает что-то новое. Кто-то заглядывает на поколение вперед. Правда пока этого никто не понимает (как и мы думали в своё время). Кто-то уходит как я. Кто-то приходит. Это эволюция. И слава Богу что она есть. Так что, дружище, ты (если кто ещё не понял - Karlan) единственный распорядитель проекта. И только ты в праве решать как поступать. Моё мнение, надеюсь, для всех понятно. Слово за тобою. P.S. Далі любою для себе мовою. Karlan! Не важливо де ти загинешь. Важливо як. Прийшов час. Давай загинемо, як подобає чоловікам. Треба залишити по себе хоть щось. Раптом у нас попереду (це життя) вже нічого не буде (кожен день треба жити як останній), давай виборювати його до останньго. Треба вирішити правильно. І це буде словом мужа а не дитини. Так що вирішуй. Але правильно ---------------- Друже, Tiger Vlad бачу що ти тут, але мовчишь. Та інші також присутні. Але також мовчать.
  19. Nazgool

    Скриптование

    @AndrewMor, Пожалуйста. Вот только хоть убей, но поверить не смогу, что рассмотренная функция может работать правильно. Видишь ли - из цикла for a = 1, 65534 do нет преждевременного выхода. Т.е. ни break-а, ни return-а. И поэтому, ну такие уж законы lua, он отработает все 65534 раза. И дай Бог, чтобы ты появился где-то в подземелье. Иначе, как я уже говорил, 65534 раза будут спавнится арты. Же-е-е-есть. Всго ID-шек в игре 65535. До этого было заспавнено N ID-шек (мобы, лут и т.д.) + 65534 твоих артов. Сколько будет? Точно больше максимально возможного 65535. Да и вообще. К тому коду очень много вопросов.
  20. Nazgool

    Скриптование

    @mortan, Ну если человек после первого намека не понял где смотреть, то видимо нужно дать другой намек, а не тот же самый. Или просто объяснить, раз уж вовсе не понятно. @AndrewMor, Смотри. В actor_binder:net_spawn, при спавне ГГ вызывается функция add_arts() из кода, что ты показал. Посмотри на эту функцию. Что она делает. Построчно. local sim = alife() Кэшируется alife - видимо автор хочет активно использовать доступ к симуляции. local obj Понятно, сюда будет что-то записываться из кода этой функции ниже. for a = 1, 65534 do Так. Будут перебираться все объекты в игре не считая ГГ (зачем - пока не понятно. будем смотреть). obj = sim:object(a) 65534 раза получаем объект по ID. Ну допустим получили. И что-же с ним(и) будем делать дальше? if not levelsIgnoreArts[level.name()] then 65534 раза проверяем что локация, на которой в данное время находится ГГ не является подземной (полагаю). generate_arts() И если локация не подземная (упс, не повезло), то 65534 раза спавним артефакты. Теперь, когда функция разобрана, вернемся в начало. local sim = alife() Где используется переменная sim в этой функции? Нигде. Эту строку можно удалить. local obj и obj = sim:object(a) А где используется переменная obj? Нигде. Значит тоже удалить. И только участок кода с проверкой if not levelsIgnoreArts[level.name()] then является правильным. Только вот совершенно незачем повторят это 65534 раза. В итоге функция стала такой : function add_arts() if not levelsIgnoreArts[level.name()] then generate_arts() end end И это касается только данной функции. На самом деле тот код (мягко говоря) как-бы не очень ... Пусть будет просто "не очень".
  21. Это конечно хорошо, но как говорят. - осведомлен значит вооружен. Жаль что так и не узнал, но если что, то ничего страшного. Смогу и голыми руками
  22. @Serge!, О, раз уж пошла такая пьянка. Я во всём о чем был разговор особо не разбираюсь, а ты (мне кажется) знаешь о чем говоришь. Это я к чему? Чтобы говорить о формулировках, нужно знать о предмете разговора. В этом я, в отличии от тебя с Malandrinus-ом слаб. Так вот. Кто-нибудь. Ты или кто-то другой. Покажите мне (чтобы я знал) определение класса. Что это такое? Чтобы для меня это было раз и навсегда. P.S. А то я в lua леплю свой класс, и хочу чтобы он был похож на настоящий (из формулировки).
  23. Nazgool

    [SoC] Торговля

    Даже не буду читать всё что выше. Вот мнение простого юзера. По мере продвижения по сюжету денег становиться всё больше и больше. При этом всяких там крутых артефактов, костюмов, стволов тоже находится всё больше. И потребность в трате денег уменьшается. Вывод. Что же нужно делать? 1. Крутые костюмы, стволы (а может и арты) портятся, и на их восстановление\боезапас нужно больше денег. 2. По мере прохождения денег становиться всё меньше и меньше 3. Крутые вещи найти нельзя, а можно только купить. Чем дальше тем дороже в купе с пунктом 1. ... 4. Можно придумывать ещё что-то. Знаю одно. Делать что-то нужно. Т.к. 2-3 лимона лимона в конце вроде и не плохо, но душу не греют. Незачем греть. Уже всё. Конец игры. И если так посмотреть, то и не нужно особо выдумывать каких-то схем. По любому из пунктов просто менять коэффициент и всё. И на движок легче, и "букофф" писать меньше.
  24. @Serge!, Я вообще ни разу не программист, не теоретик и почти не практик. Так что терминология это не то что моё слабое место, а вообще - ей нет места Я говорю только с позиции "почти не практик". И она мне говорит то, о чем я напмсал выше. А спорить? Вроде говорят что в споре рождается истина? Как-то случается по жизни, что в споре рождаются либо враги, либо "підлабузники" (укр. - не могу подобрать слова лучше этого, уж извините). Так что спорить тоже бесполезно. Друзья всё равно не родяться, т.к. оные познаются только в беде. А этот спор уж никак не беда
  25. По-моему бесполезный разговор. Кто-то определил, что в Срр класс - это какой-то там тип. В других языках - другое. Не важно. Всё сводится к тому, что класс - это некая общность объектов. И он может порождать другие общности или индивидуумы. И использовать при этом ООП. Не важно как это выглядит с точки зрения общепринятых канонов. Главное в том, что в lua это работает именно так как нужно. На lua можно написать класс собственным способом. С собственным ООП. Другими словами так как необходимо. Т.е. и с множественным наследованием, и с public\private данными. И ... (i love lua) много с чем. Да, в lua класс - это объект. Таблица с метатаблицей и т.д. но это всего лишь способ. И главное ведь не детали реализации, а выходной результат. И он есть.Такой как требуется. Что ещё нужно от lua? Я точно знаю что не нужно. Не нужно требовать от этого малыша слишком многого. По своим возможностям это и так ребенок-индиго.

AMK-Team.ru

×
×
  • Создать...