-
Число публикаций
1 637 -
Регистрация
-
Последнее посещение
-
Дней в топе
27 -
AMKoin
16,033 [Подарить AMKoin]
Весь контент пользователя Kirgudu
-
Есть разница в том, в каком порядке загружаются и инициализируются твой скрипт и целевой. Если целевой скрипт, в котором находится подменяемая функция, загружается первым, тогда твоя подмена сработает. А вот если вторым - всё, что ты наприсваивал предварительно в своём скрипте, будет полностью переписано в _G исходным кодом целевого скрипта, когда до него дойдёт очередь. Об этом. кстати, уже написано в постах по приведённым ссылкам.
-
Потому что db.actor:object(dropped) ищет не конкретный предмет, а первый попавшийся предмет с секцией, равной секции dropped. Ты заметил, что после первого выкидывания остаются в инвентаре только те предметы, количество которых больше 1? Можно предположить, например, что функция drop_item удаляет предмет не одномоментно, а с некоторым запаздыванием, и когда ты ищешь следующий предмет с такой же секцией, всё время находится первый из них, который уже должен был удалиться к тому времени. Чтобы этого избежать, можно попробовать перейти на работу с идентификаторами вместо секций: table.insert(tActorItems,item:id()) -- запоминаем идентификатор вместо секции db.actor:drop_item(level.object_by_id(dropped)) -- ищем объект по идентификатору В остальном код будет идентичным.
-
@Murarius, передавай наилучшие пожелания, плиз. Полгода уже не появляется, поэтому вряд ли прочитает, если здесь написать. @Опричник, успехов. Не посрами!
-
По мотивам всего вышенаписанного. Лишний раз хотелось бы заметить, что подобные советы, по сути своей возможно и правильные, могут быть крайне вредны, если даются новичку, за недостатком опыта не отличающему комментарий в коде от комментария в сообщении. Если уж решил помочь, лучше потрудиться и написать текст, не оставляющий места для кривотолков. @Zander_driver, респект.
-
Не только в мобильной, но и в десктопной тоже.
-
@Colder конечно, если вместо случайной выборки одной строки воспользоваться, например, циклом и вернуть по итогу таблицу (не забыть обработать её на выходе отличным от пары значений образом): Так будут обработаны все строки из generic_list. При желании сюда же можно прикрутить случайную выборку нескольких строк и так далее. Простор для творчества не ограничен.
-
@INNOCENT KILLAZ да, фриплей тут ничем концептуально не отличается. Однако набор и наполнение точек могут меняться на разных стадиях игры, в том числе при наступлении фриплея - см. для подробностей код модуля ogsm_respawn. Там есть проверки по выданным инфопорциям и в зависимости от этого разные наборы спавна.
-
Нет, конечно. Это точки постоянного (на протяжении игры) периодического (раз в какое-то время) спавна в указанной точке указанной группы монстров с контролем максимальной численности. См. в функции ogsm_packet.spawn_monster. В зависимости от значения в этом параметре ("fake"/"random_fake"/прочее) монстру назначается та или иная кастомная логика поведения. На будущее, подобные вопросы больше подходят для одной из тем "Ковыряемся в файлах" (в данном случае, я так подозреваю, вариация для ЧН).
-
Например, распотрошить упомянутую функцию relocate_item_section_from_actor и переделать её под использование id:
-
На кого? Выше отписались два из наиболее активных авторов так называемого народного патча OGSM (третий - ваш покорный слуга, см. оригинальную тему), который лёг в основу последней опубликованной здесь версии мода. Война группировок в моде принимала свой окончательный вид нашими же руками, детали активно обсуждались в кругу заинтересованных лиц, так что можно для простоты считать, что ориентировка была на самих себя и наше понимание общей канвы сюжета.
-
С каких пор? Может, уже появились альтернативные темы по всем трём платформам, а народ-то и не в курсе? Тема по ТЧ - это "[SoC] Ковыряемся в файлах" или, например, "[SOC] Мелкие правки движка". "Скриптование" же всегда было мультиплатформенной темой, не надо искусственно навязывать лишние рамки. @Norman Eisenherz но тема всё равно вряд ли правильная, с таким вопросом, имхо, надо идти к тем, кто ковыряет движок.
-
@MegaStalker может потому, что так было сделано, и никто в те времена, когда мод разрабатывался, не подумал, что можно (или нужно) сделать по-другому?
-
https://forum.ixbt.com/ Недостижимый идеал.
-
Интересно, а можно ли как-нибудь скрыть внезапно (я так полагаю, в результате случившегося обновления движка) появившиеся "ранги"? Как-то немножко странно видеть надпись "newbie" при почти 10 годах стажа и тысяче с гаком сообщений.
-
Совершенно верно. А вороны и фантомы были добавлены, скорее всего, по принципу "перечислим всех". "Скорее всего" потому, что модуль имеет в авторах изначальных создателей мода OGSM, причём ещё до Community Edition, и позже почти не переделывался (я в своё время ограничился точечными коррекциями, хотя сейчас весь этот модуль переписал бы процентов на 70-80 - если б видел смысл и было время), в том числе не менялась и эта функция. Поэтому мы можем только гадать.
-
@hetrikWHY фраза "порядок проверки не менять" там рассчитана скорее на полных новичков, и её вполне можно заменить на "менять с умом". Позже или завтра (по возможности), если надо, распишу, что имелось в виду, а пока это сложно - я с мобильного. Кстати, вопрос этот относится к "ковырянию", которое в теме не слишком приветствуется, так что если уважаемый автор будет против, придётся переместиться в личку.
-
Кто-нибудь может навскидку перечислить типы заданий от членов группировки, которые, будучи выданными, должны быть актуальными только пока ты числишься в составе? Кроме удержания точки есть ещё такие? Добавлю автоотмену этих заданий в случае выхода из рядов группировки (или в случае вступления в другую группировку).
-
А вот я рад, что меня не отправляют (потенциально) за ответом в какой-то ВК. Если я задал вопрос здесь, то и ответ хочу получить именно здесь, в противном случае воспользовался бы условным гуглом для поиска.
-
Как ни странно, да. Примеры двойного объявления одних и тех же функций встречаются даже в скриптах оригинала (хотя, может быть, это-то как раз и не странно). Если кому интересно - загляните в чистонебовский скрипт 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 Ничего не смущает?
-
Не надо так делать, в том варианте должно быть именно 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
-
@h0N0r все перечисленные методы действительно клиентские, а в переменной obj у тебя серверный объект. Если хочешь получить клиентский, следует действовать например так: local cobj = level.object_by_id(obj.id) if cobj then ... end и далее по написанному. Однако зачем делать это после удаления, если я правильно тебя понял? Ты уж определись, что необходимо - удалить объект или придать ему ускорение.
-
for k,v in pairs(бла) do if v == true then db.actor:give_game_news('бла-бла', 'бла-бла-бла', "ui_iconsTotal_PDA", 0, 3000) end end P.S.: задавай свои вопросы в человекопонятной форме.
-
@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) -- аргумент - указатель на функцию внешнего модуля В общем, смотри внимательно примеры в конце модуля таймеров, там всё расписано.
-
Не критично, но потребовало некоторого времени для привыкания. В общем, тоже занудничаю.
-
Совершенно неожиданно напрягла рокировка местами кнопок в подтверждалках. http://f26.i-fotki.info/org/78a250c05396a27cf14cca0eadaffca3551ed4391577085.png Тычу по давно сложившейся привычке мышью справа - и не понимаю, что происходит.
УЧИМСЯ МОДДИНГУ
ИГРАЕМ В МОДЫ НА ТЧ
ИГРАЕМ В МОДЫ НА ЧН И ЗП
- [ЧН] OGSM CS 1.8 CE Fixes
- [ЧН] HARDWARMOD 3.2
- [ЗП] The Long Road
- [ЧН] New vision of War
- [ЧН] Old Good Stalker Mod - Clear Sky
- [ЗП] Unofficial Patch
- [ЗП] Смерти вопреки
- [ЗП] Контракт на хорошую жизнь
- [ЗП] Shoker Weapon Mod 2.1
- [ЗП] Hardcore pack for SGM 2.2
- [ЗП] Контракт Синдиката
- [ЗП] Клондайк 2.0
- ...и другие моды
ПОЛЕЗНОЕ И РАЗНОЕ