Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
AndrewMor 533 Опубликовано 5 Мая 2019 Поделиться Опубликовано 5 Мая 2019 (изменено) 14 часов назад, _Sk8_AsTeR_ сказал: Так вот, там многих, так сказать, бочек с кострами нету. Каким образом можно получить название лагеря? Надеюсь правильно вопрос задал. Думаю, надо изменить код так, чтобы название смарт-террейна вообще не фигурировало в скрипте. Указывать только flame = "zone_flame_small_0001", light = "lights_camp_fire_omni_r1_r2_0001", а их названия взять из распакованного спавна. Изменено 5 Мая 2019 пользователем AndrewMor Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1262127
naxac 2 578 Опубликовано 5 Мая 2019 Поделиться Опубликовано 5 Мая 2019 @Norman Eisenherz, @Fenrir02 верно говорит - исключи из цикла актера, начинай перебирать с 1 for i = 1, 65534 do... 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1262180
Norman Eisenherz 354 Опубликовано 5 Мая 2019 Поделиться Опубликовано 5 Мая 2019 @naxac Просмотрел, что кроме шага еще и отсчет с 1 начинается. В таком виде работает даже без задержки запуска. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1262353
Norman Eisenherz 354 Опубликовано 10 Мая 2019 Поделиться Опубликовано 10 Мая 2019 Здрасьте. Сделал иконку состояния брони (набор статиков) с вызовом из function actor_binder:update(delta): на двух старых сейвах статик загружается и успешно работает, еще примерно на 10 старых сейвах и в новой игре не загружается, а при попытке сохранения и перезагрузки игры приводит к вылету с одним из двух приведенных ниже сообщений. Методом исключения удалось выяснить, что статикам мешает работать уборщик – мешает даже не перебором объектов на сервере, а конкретно той частью, которая удаляет бесхозное оружие. Добавил к запуску уборщика условие if device().precache_frame <= 1 – проблема разрешилась, но все-таки хочется знать, что вызывало эту проблему. ТЧ 1.0006, без глобальных модов. https://drive.google.com/open?id=1Yp4s8CvySYUsv0j2EolZYWdAan0JHsfN Spoiler Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:411: attempt to concatenate field '?' (a nil value) для справки – указанная строка [bind_stalker.script] (с модами): get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty]) Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...alker shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263212
naxac 2 578 Опубликовано 10 Мая 2019 Поделиться Опубликовано 10 Мая 2019 @Norman Eisenherz, это у тебя где-то что-то виснет в биндере актера, и потом бьётся сохранение. Загружая его, получаешь этот вылет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263248
_g.script 3 666 Опубликовано 10 Мая 2019 Поделиться Опубликовано 10 Мая 2019 6 часов назад, Norman Eisenherz сказал: attempt to concatenate field '?' naxac дело говорит, я ловил такую дрянь, в другой ситуации. Тогда у меня нет-пакет портился из-за негодной адаптации, а я то думал, что там с загрузкой моего difficulty... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263268
Norman Eisenherz 354 Опубликовано 10 Мая 2019 Поделиться Опубликовано 10 Мая 2019 @naxac Можно ли подробнее? Куда копать? Потестил еще: условие precache_frame привело к тому, что теперь уборщик не срабатывает на текущей локации. @mole venomous Нет-пакеты я точно не трогал. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263272
naxac 2 578 Опубликовано 11 Мая 2019 Поделиться Опубликовано 11 Мая 2019 (изменено) @Norman Eisenherz, вот в этом цикле for j = 1, #bodies do if del.position:distance_to(bodies[j].position) > 5 then alife():release(del) end end добавь break при успешном удалении, иначе попытается удалить несколько раз подряд. Возможно, из-за этого и зависает иногда. Изменено 11 Мая 2019 пользователем naxac Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263291
AndreySol 215 Опубликовано 11 Мая 2019 Поделиться Опубликовано 11 Мая 2019 (изменено) @Norman Eisenherz Вот этоl local act = db.actor стоит перенести из глобальной области скрипта в функцию, где объект актера используется. Изменено 11 Мая 2019 пользователем AndreySol 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263295
Norman Eisenherz 354 Опубликовано 12 Мая 2019 Поделиться Опубликовано 12 Мая 2019 @naxac Проверил еще раз уборщик – старая логика действительно должна была сбоить: проверяется расстояние до 1-го трупа из списка, объект (возможно) удаляется, потом проверяется расстояние от этого же объекта до 2-го, 3-го трупа и т. д., и тот же объект снова удаляется (по крайней мере, делается такая попытка). Оператор break можно поставить только на негативное условие: если при переборе расстояний найдено значение меньше 5 , то закончить перебор для данного объекта и перейти к следующему, в противном случае удалить объект и перейти к следующему. Не до конца понимаю, как это правильно оформить, чтобы проверка не стопорилась на первом же значении > 5. Пошел другим путем: создать таблицу расстояний от текущего объекта до всех трупов, взять минимум, сравнить его с заданной величиной (5) и удалить, если этот минимум больше. Spoiler if next(wpn_near) ~= 0 then for i = 1, #wpn_near do local del = wpn_near[i] if del.position:distance_to(act:position()) > 10 then if next(bodies) ~= 0 then local distance = {} for j = 1, #bodies do local dist = del.position:distance_to(bodies[j].position) table.insert(distance, dist) end table.sort(distance) if distance[1] > 5 then alife():release(del) end else alife():release(del) end end end end @AndreySol Если функций несколько, лучше обозначать такие переменные в каждой из них или в общей области? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263502
WinCap 323 Опубликовано 12 Мая 2019 Поделиться Опубликовано 12 Мая 2019 @Norman Eisenherz, на мой взгляд - сильно "замудрил". Попробуй так: for k, wpn in pairs(wpn_near)do if wpn.position:distance_to(act:position()) > 10 then if #bodies ~= 0 then for k, bod in pairs(bodies) do if wpn.position:distance_to(bod.position) > 5 then alife():release(wpn) break end end else alife():release(wpn) end end end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263521
Norman Eisenherz 354 Опубликовано 12 Мая 2019 Поделиться Опубликовано 12 Мая 2019 @WinCap Кроме способа перебора (ну и еще остановки), это опять старая логика: "если до первого трупа в списке > 5 метров, то удалить оружие". Должно быть "если до всех трупов на локации > 5 метров, тогда удалять". Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263548
WinCap 323 Опубликовано 12 Мая 2019 Поделиться Опубликовано 12 Мая 2019 @Norman Eisenherz, тогда так: if #bodies ~= 0 then local del = true for k, bod in pairs(bodies) do if wpn.position:distance_to(bod.position) < 5 then del = false break end end if del then alife():release(wpn) end else 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1263558
Norman Eisenherz 354 Опубликовано 20 Мая 2019 Поделиться Опубликовано 20 Мая 2019 Здрасьте. Можно ли без правок движка изменить формат счетчика оставшегося времени для заданий? Единственный подходящий файл – [scripts\ask_manager.script], но сообщения в явном виде или его фрагментов (ui_st_time_remains, ui_st_days и ui_st_hours) в нем нет, как и ссылки на блок rem_time из файла [config\ui\job_item.xml]. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1265059
Полтергейст 38 Опубликовано 21 Мая 2019 Поделиться Опубликовано 21 Мая 2019 А никто ещё не переписывал скрипт class_registrator так, чтобы в нем хранились все таблицы с данными для регистрации классов и классификации объектов? В оригинале данные просто используются один раз при старте игры и не хранятся нигде, что неудобно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1265095
AndreySol 215 Опубликовано 22 Мая 2019 Поделиться Опубликовано 22 Мая 2019 @Полтергейст А что ты в этих таблицах собираешься хранить, полезного для исп. в скриптах ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1265247
Полтергейст 38 Опубликовано 22 Мая 2019 Поделиться Опубликовано 22 Мая 2019 @AndreySol, данные, необходимые для любых функций классификации (IsMonster и тому подобных). Туда же можно сохранить значение stype (modules.stype_чтонибудь). Да много всего можно там хранить, чтобы каждый раз не делать свою табличку для классификации. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1265249
AndreySol 215 Опубликовано 22 Мая 2019 Поделиться Опубликовано 22 Мая 2019 6 часов назад, Полтергейст сказал: IsMonster Ну так эта ф-ция объявлена в _G.script, тебе очень хочется иметь ее в класс_регистратор ? И какой с этого профит ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1265292
Полтергейст 38 Опубликовано 22 Мая 2019 Поделиться Опубликовано 22 Мая 2019 @AndreySol, я про таблицы значений clsid, на которых эти функции работают. Неудобно, когда они разбросаны по куче разных файлов. Лучше иметь одну большую таблицу, где всё это собрано. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1265300
Norman Eisenherz 354 Опубликовано 28 Мая 2019 Поделиться Опубликовано 28 Мая 2019 Здрасьте. Делаю счетчик хилок на HUD: создал группу скриптовых статиков, вывел через get_hud():AddDialogToRender(…) и записал в таблицу, чтобы статики не потерялись при уборке. Проблема: если добавлять статики в таблицу через table.insert, то индексы получаются просто числами, и найти среди них нужный статик (для привязки текста или для удаления статика, если каких-то предметов 0) невозможно. Если добавлять статики в таблицу по секции предмета list[sect] = static, то случается безлоговый вылет через секунду после загрузки – так же, как при отсутствии хранения ссылок на статики. Что я упускаю? Мой мод и оригинал счетчика: https://drive.google.com/open?id=16gX0BYqim6zB6aZnGLqSV-kMPMB3QjQC Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/491/#findComment-1266366
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти