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

Kirgudu

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

    1 500
  • Регистрация

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

  • Дней в топе

    17
  • AMKoin

    9,664 [Подарить AMKoin]

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

  1. Kirgudu

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

    С каких пор? Может, уже появились альтернативные темы по всем трём платформам, а народ-то и не в курсе? Тема по ТЧ - это "[SoC] Ковыряемся в файлах" или, например, "[SOC] Мелкие правки движка". "Скриптование" же всегда было мультиплатформенной темой, не надо искусственно навязывать лишние рамки. @Norman Eisenherz но тема всё равно вряд ли правильная, с таким вопросом, имхо, надо идти к тем, кто ковыряет движок.
  2. Kirgudu

    Old Good Stalker Mod - Clear Sky

    @MegaStalker может потому, что так было сделано, и никто в те времена, когда мод разрабатывался, не подумал, что можно (или нужно) сделать по-другому?
  3. Kirgudu

    Ачивки

    https://forum.ixbt.com/ Недостижимый идеал.
  4. Интересно, а можно ли как-нибудь скрыть внезапно (я так полагаю, в результате случившегося обновления движка) появившиеся "ранги"? Как-то немножко странно видеть надпись "newbie" при почти 10 годах стажа и тысяче с гаком сообщений.
  5. Kirgudu

    STALKER CS: Final stroke 0.9

    Совершенно верно. А вороны и фантомы были добавлены, скорее всего, по принципу "перечислим всех". "Скорее всего" потому, что модуль имеет в авторах изначальных создателей мода OGSM, причём ещё до Community Edition, и позже почти не переделывался (я в своё время ограничился точечными коррекциями, хотя сейчас весь этот модуль переписал бы процентов на 70-80 - если б видел смысл и было время), в том числе не менялась и эта функция. Поэтому мы можем только гадать.
  6. Kirgudu

    STALKER CS: Final stroke 0.9

    @hetrikWHY фраза "порядок проверки не менять" там рассчитана скорее на полных новичков, и её вполне можно заменить на "менять с умом". Позже или завтра (по возможности), если надо, распишу, что имелось в виду, а пока это сложно - я с мобильного. Кстати, вопрос этот относится к "ковырянию", которое в теме не слишком приветствуется, так что если уважаемый автор будет против, придётся переместиться в личку.
  7. Kirgudu

    STALKER CS: Final stroke 0.9

    Кто-нибудь может навскидку перечислить типы заданий от членов группировки, которые, будучи выданными, должны быть актуальными только пока ты числишься в составе? Кроме удержания точки есть ещё такие? Добавлю автоотмену этих заданий в случае выхода из рядов группировки (или в случае вступления в другую группировку).
  8. А вот я рад, что меня не отправляют (потенциально) за ответом в какой-то ВК. Если я задал вопрос здесь, то и ответ хочу получить именно здесь, в противном случае воспользовался бы условным гуглом для поиска.
  9. Kirgudu

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

    Как ни странно, да. Примеры двойного объявления одних и тех же функций встречаются даже в скриптах оригинала (хотя, может быть, это-то как раз и не странно). Если кому интересно - загляните в чистонебовский скрипт task_objects.script, функция CHideFromSurgeTask:check_task(). Там внутри есть две встроенные функции, описанные дважды в пределах одного пространства. На практике, если представить, что содержимое повторяющихся функций различно, работать будет та, которая объявлена второй (третьей, четвёртой и так далее). Что конкретно должно быть в примере выше, сказать не могу. Всё зависит от логики, которую хотелось вложить в код автору. Возможно, заполняться должна только таблица creatures, возможно - creature, а возможно и обе сразу. Надо изучать те скрипты, где они используются далее. Но я предлагаю критически взглянуть на другое место. Вот: function add_obj( obj ) -- ... <skip> ... if IsStalker(obj) and IsMonster(obj) then --> если И сталкер И монстр btr_target[obj:id()] = true end end Ничего не смущает?
  10. Kirgudu

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

    Не надо так делать, в том варианте должно быть именно sobj.id. А так гейм вертекс можно (и нужно в данном случае) получать уже из серверного объекта: local sobj = alife():object(i) if sobj and sobj.m_game_vertex_id == 2482 and IsStalker(sobj) and sobj:alive() then return true end И ещё: почему только 2482? Других вертексов на нужной локации нет? Имхо, лучше из гейм вертекса получать id локации и проверять уже его совпадение с нужным: function get_level_nps() local al, gg = alife(), game_graph() -- многократно используемые функции кешируем для производительности for i=1,65535 do local sobj = al:object(i) if sobj and gg:vertex(sobj.m_game_vertex_id):level_id() == XXX and IsStalker(sobj) and sobj:alive() then -- вместо XXX подставить Id локации (не путать с наименованием) return true end end return false end Или, чтобы не вызывать лишние функции, сравнивать sobj.m_game_vertex_id с диапазоном значений - больше одного и меньше другого: if sobj and sobj.m_game_vertex_id >= XXX and sobj.m_game_vertex_id <= YYY and IsStalker(sobj) and sobj:alive() then -- вместо XXX и YYY подставить граничные гейм вертексы локации return true end
  11. Kirgudu

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

    @h0N0r все перечисленные методы действительно клиентские, а в переменной obj у тебя серверный объект. Если хочешь получить клиентский, следует действовать например так: local cobj = level.object_by_id(obj.id) if cobj then ... end и далее по написанному. Однако зачем делать это после удаления, если я правильно тебя понял? Ты уж определись, что необходимо - удалить объект или придать ему ускорение.
  12. Kirgudu

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

    for k,v in pairs(бла) do if v == true then db.actor:give_game_news('бла-бла', 'бла-бла-бла', "ui_iconsTotal_PDA", 0, 3000) end end P.S.: задавай свои вопросы в человекопонятной форме.
  13. Kirgudu

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

    @UriZzz у тебя и подсказка в логе есть args=[string]~not_table! и пример в конце модуля start_game_timer(3*60, nil, {info_id = "my_infoportion"}) Грубо говоря, ты в качестве доп. аргумента передаёшь строку "UriZzz_test.mecheny_mail", а надо таблицу. То есть: start_game_timer(30*60, nil, {param1 = "UriZzz_test.mecheny_mail"}) -- аргумент - таблица Если же ты хотел вызвать функцию внешнего модуля (на что слегка намекает текст "UriZzz_test.mecheny_mail"), то для этого надо было воспользоваться вторым аргументом, который у тебя сейчас равен nil, и без кавычек. А именно: start_game_timer(30*60, UriZzz_test.mecheny_mail) -- аргумент - указатель на функцию внешнего модуля В общем, смотри внимательно примеры в конце модуля таймеров, там всё расписано.
  14. Не критично, но потребовало некоторого времени для привыкания. В общем, тоже занудничаю.
  15. Совершенно неожиданно напрягла рокировка местами кнопок в подтверждалках. http://f26.i-fotki.info/org/78a250c05396a27cf14cca0eadaffca3551ed4391577085.png Тычу по давно сложившейся привычке мышью справа - и не понимаю, что происходит.
  16. Kirgudu

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

    @UriZzz, ты, главное, принцип запомни. Пойми суть предложенных тебе изменений. А чем дальше, тем проще будет.
  17. Kirgudu

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

    @UriZzz, предлагаю борьбу с невнимательностью и fps продолжить дальше и поднять не невиданный доселе уровень, увеличив твою опытность ещё больше. Смотри. Функция у тебя с говорящим названием, sleep(obj), предназначена теоретически только для обработки нажатия на спальный мешок. Не знаю, откуда и как она вызывается, но если проверка на то, что ты используешь именно спальник, до вызова функции есть, тогда условие if obj:section() == "sleep_bag" then является лишним. Но скорее всего такую проверку ты до функции не делаешь, а просто всегда дёргаешь её в коллбэке на дроп (ТЧ) или использование предмета (ЧН, ЗП). Примем это допущение, и тогда возникает другой момент. Что будет, если вокруг тебя на расстоянии 40 метров нет ни одного врага? А если ты съел колбасу? Правильно, проверка на врага сработает, а поскольку рядом никого нет, пройдёт по полному циклу, по всем 65 с лишним тысячам потенциальных объектов. И в результате ты, может, и избавился от тормозов при выдаче сообщения, зато приобрёл их при любом использовании любого предмета (если только ты не ставишь целью кушать, применять антирад, использовать бинты и аптечки и т. д. также только в спокойном месте). Выходом является перемещение поиска врагов после условия if obj:section() == "sleep_bag" then, так чтобы цикл запускался только если ты используешь нужный предмет. И последнее, чисто перфекционистское замечание. Если всё, что делает функция, это проверяет, можешь ли ты использовать спальник, и показывает нужный диалог или выдаёт сообщение, тогда нет нужды заморачиваться с лишними брейками и переменными. Можно выдать сообщение и сразу выйти из функции (return сработает как и break, прервёт выполнение цикла, но вдобавок ещё и обеспечит выход), а меню будет показано за пределами цикла, если всё хорошо, и прерывания не случилось. Самое время проиллюстрировать вышесказанное. P.S. При желании ты с Lua разберёшься, я уверен. С СДК разобрался, значит и со скриптами сможешь. Надо лишь пройти чуть дальше, чем "работает - и ладно". @Марка демченков, попробуй это: exit()
  18. Kirgudu

    HARDWARMOD 3.3 (CS)

    Мотивация понятна. ) Но хоть я тоже давний поклонник РПГ (аж с конца 80-х и начала 90-х и таких игр, как M&M, EotB, LoL и др.), в данном случае поддержать не могу. Впрочем, решать в любом случае идейному вдохновителю и главному автору, а дискус об этом уже происходил на другой площадке.
  19. Kirgudu

    HARDWARMOD 3.3 (CS)

    @Володимир Храпов, единомышленник или един в двух лицах? Зачем систему прокачки всюду пихать?
  20. Kirgudu

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

    @Norman Eisenherz, достаточно определить, что командир отряда стал враждебным, ведь метка отряда вешается на него. См. commander:general_goodwill(db.actor) в модуле sim_squad_generic.script (commander определяется там же) и дальнейшее использование этого показателя. При определённых его значениях можно вызывать self:hide() / self:show(), что приведёт к нужному результату.
  21. Kirgudu

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

    @Norman Eisenherz, game_relations.set_squad_goodwill(squad_id, "enemy"). И вообще, стоит поизучать этот модуль и его применение в других скриптах и логике.
  22. Kirgudu

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

    @Zander_driver, я имел в виду несколько другое. Если выбирать между записью в кастом дату и в отдельное свойство всего нет-пакета [ local data = pk:get() data.my_prop = 1 pk:set(data) ] - однозначно следует предпочесть кастом дату, поскольку добавление отдельного свойства может поломать весь нет-пакет, обладающий определённой структурой для каждого типа объекта (хотя не исключено, что модуль просто проигнорирует добавленные свойства, не характерные для нет-пакета - это я не проверял). Ну а то, что мы не можем превышать определённую длину, обсуждалось уже много раз. Впрочем, согласен, упомянуть об этом стоило.
  23. Kirgudu

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

    Вот чтобы не "убились", и надо задействовать кастом дату. В описанном случае никаких неприятных последствий замечено не было.
  24. Kirgudu

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

    @_Sk8_AsTeR_, судя по коду, речь о модуле Артоса? Можно, только не в стандартные свойства нет-пакета для данного объекта, а в его кастом дату. Например, при взятии артефакта в инвентарь я успешно добавлял признак того, что артефакт уже был найден (для исключения повторного учёта в статистике): Для понимания: в данном случае присвоенная свойству artefact_found пустая таблица превращается в кастом дате, представленной строкой, в секцию [artefact_found] без дочерних элементов.
  25. Kirgudu

    Old Good Stalker Mod - Clear Sky

    Вдогонку. Я почему-то подумал, что речь о моде OGSM CS 1.8 CE Fixes от @monk (https://www.amk-team.ru/forum/topic/12743-ogsm-cs-18-ce-fixes/). Тем не менее, ответ остаётся верным - функция Set_Rest_GameSeconds есть только в моде от @monk, а в чистом OGSM 1.8 CE отсутствует.

AMK-Team.ru

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