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/
AndreySol 215 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 @Labadal На базе какого инвентарного предмета твой аккумулятор? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401709
_g.script 3 670 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 8 минут назад, Labadal сказал: где вызывать эти функцию? 1 час назад, AndreySol сказал: при загрузке игры читай оттуда сохраненное значение Здесь могла быть ваша реклама. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401710
Labadal 68 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 (изменено) @AndreySol Есть некий предмет ,который: 1. возможно использовать только когда надет костюм 2. при каждом использовании отнимает одну энергию этого костюма В целом, нужно: записывать переменную при сохранении/читать при загрузке/присвоить ей значение 10 в начале игры Изменено 11 Ноября 2021 пользователем Labadal God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401711
Space.Marine 466 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 14 часов назад, Firestarter сказал: что это означает процент шанса В оригинале вероятность появления новых артов в аномалиях после выброса 17%. 10.11.2021 в 09:44, Space.Marine сказал: if math.random(1,100) > 17 then 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401713
Labadal 68 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 Сохранить, вроде как, получилось. При сохранении такой вылет: Скрытый текст 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: ...shadow of chernobyl\gamedata\scripts\xr_logic.script:1181: attempt to index local 'obj' (a nil value) как только не загружал: load_variable("energy") load_variable(energy) load_variable("energy",nil) load_variable("energy",0) Варианты? upd: ошибся, данный вылет при загрузке сейва. При сохранении всё работает. Есть, конечно, вариант, что я вызываю функцию не там, хотя не знаю, вызов идёт в самом конце функции function actor_binder:load(reader) в бинде сталкера God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401719
AndreySol 215 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 4 часа назад, Labadal сказал: вызов идёт в самом конце функции function actor_binder:load(reader) в бинде сталкера Лучше, на мой взгляд, загружать сохраненное в net_spawn в том же биндере, после строки db.add_actor(self.object). Не знаю, что за load_variable у тебя, но если использовать штатные ф-ции(которых примеры тебе выше уже привели), то все должно работать. Цитата присвоить ей значение 10 в начале игры Это делай в скрипте, ранее загрузки сохраненного значения. 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401738
Labadal 68 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 (изменено) @AndreySol load_variable это как раз и есть та функция, что мне выше привели -- Загружаем переменную function load_variable(variable_name, value_if_not_found) return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found) end Энивей спасибо за совет, буду разбираться - к тому же, оказалось, что и сохранения не сохраняют, а проверяя, что сохранилось - я записывал в лог не то, что сохранилось, а то, что имею на данный момент. Такие дела. Изменено 11 Ноября 2021 пользователем Labadal God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401739
Zander_driver 10 358 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 4 часа назад, Labadal сказал: Варианты? Вообще-то. Варианты зависят от того, какова цель всего этого действа. Если а) Сделать комбез с энергопитанием. То можно брать давно сделанные (Более 10 лет назад!!!), готовые, отработанные и надежные решения. Ну или поискать другие готовые аналоги, если этот чем-то не нравится. аналогов за 10 с лишним лет, сделано было предостаточно. Если б) Разобраться в скриптах, освоить луа, "сделать самому". (На самом деле единственная внятная причина, объясняющая почему не взять готовое) - то можно было бы, свои вопросы на форуме адресовать не телепатам, а обычным форумчанам. Так скорее помогут, правда. Пока в твоих постах нет ни твоего кода, ни логов вылетов, они адресованы скорее телепатам и гадалкам. Некоторые конечно пытаются угадывать, что там у тебя происходит. Правильно ли они угадывают? Это никому не известно. Если ты хочешь разобраться, то множить неизвестные - не лучшее решение. 1 3 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401740
Labadal 68 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 @Zander_driver Опустим все подробности, на данный момент мне нужно просто: 1. Научится сохранять переменную в Pstor 2. Научится при загрузке сохранения её считывать оттуда Как минимум, хочу именно в этом разобраться. God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401741
Zander_driver 10 358 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 3 минуты назад, Labadal сказал: 1. Научится сохранять переменную в Pstor local x = 10 -- твоя переменная xr_logic.pstor_store(db.actor, "my_unique_x", x) -- Сохранена. 5 минут назад, Labadal сказал: при загрузке сохранения её считывать оттуда local def_val = 0 -- Значение по умолчанию. Если окажется, что переменная не сохранялась local x = xr_logic.pstor_retrieve(db.actor, "my_unique_x", def_val) -- Загружено. 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401744
Labadal 68 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 @Zander_driver вот результаты: Скрытый текст В файле en.script обьявляю переменную: energy = 10 В файле bind_stalker.script: Сохраняю: В функции function actor_binder:save(packet) таким образом: xr_logic.pstor_store(db.actor, "nrg", en.energy) Загружаю: В функции function actor_binder:net_spawn(data) после строчки: db.add_actor(self.object) таким образом: local test = 5 en.energy = xr_logic.pstor_retrieve(db.actor, "nrg", test) что в итоге: При начале новой игры в переменной energy присваивается не 10, как указано в файле en.sctipt, а значение локальной переменной test - из кода загрузки. В последующие сейвлоады, при каждой загрузке, ей присваивается значение 5, а не то, которое было сохранено. Скрытый текст В файле en.script обьявляю переменную: energy = 10 В файле bind_stalker.script: Сохраняю: В функции function actor_binder:save(packet) таким образом: xr_logic.pstor_store(db.actor, "nrg", en.energy) Загружаю: В функции function actor_binder:load(reader) таким образом: local test = 5 en.energy = xr_logic.pstor_retrieve(db.actor, "nrg", test) что в итоге: При загрузке происходит вылет, с таким вот логом: 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: ...shadow of chernobyl\gamedata\scripts\xr_logic.script:1181: attempt to index local 'obj' (a nil value) Помимо прочего: Я выводил в лог значение сохраненной переменной - сохраняет оно правильно. God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401749
AndreySol 215 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 46 минут назад, Labadal сказал: load_variable это как раз и есть та функция, что мне выше привели Не нужная совсем обертка. Попробуй сохранять значение в net_destroy биндера, в самом начале ф-ции. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401752
Firestarter 3 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 7 часов назад, Space.Marine сказал: В оригинале вероятность появления новых артов в аномалиях после выброса 17%. Что интересно, в скинутом вами файле этого куска кода просто нет. И, если верить описанию мода, это даёт 100% вероятность спавна. Опять же, нихрена бы этого не понял без разъяснений - спасибо. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401753
WinCap 324 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 (изменено) @Labadal, а зачем в функциях actor_binder:save/load использовать pstor? У них же есть свой net_paket? В функции function actor_binder:save(packet): packet:w_float(en.energy) В функции function actor_binder:load(reader): en.energy = reader:r_float() Разместить в конце функций, начать новую игру. Изменено 11 Ноября 2021 пользователем WinCap 1 1 2 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401754
Zander_driver 10 358 Опубликовано 11 Ноября 2021 Поделиться Опубликовано 11 Ноября 2021 4 часа назад, Labadal сказал: При загрузке происходит вылет, с таким вот логом: При загрузке actor еще не зарегистрирован в db. Поэтому db.actor == nil, о чем лог и сообщает. Запись в пстор вообще говоря, удобнее делать где-нибудь до сейва. А если именно в save и в load, то лучше через net_packet, как выше уже сказали. P.S. Добавлю только. Для разобраться и для маленьких правок оно конечно нормально, но если захочется сохранять такими методами много всякого разного - следует помнить о том что размер нетпакета ограничен. И, пстор тоже пишется в тот же нетпакет. 1 2 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401777
Labadal 68 Опубликовано 12 Ноября 2021 Поделиться Опубликовано 12 Ноября 2021 Доброго дня, нашёл такую функцию: --/ определяем название секции патронов в активном стволе NPC function Get_ActiveAmmoSection(oNPC) --/< (npc or nil) if not oNPC then oNPC = db.actor end local oItem = oNPC and oNPC:active_item() if oItem and isWeapon(oItem) then --/ проверка: оружие ли в руках? local soWeapon = sim:object(oItem:id()) if soWeapon then local iAmmoType = Get_AmmoType(soWeapon) --/< получаем тип патронов в стволе if iAmmoType then return Get_AmmoSection(oItem:section(),iAmmoType) --/> "ammo_section" (or nil) end end end return nil --/> end Но при использовании ругается на sim Кто нибудь знает, что это и где его объявить? В lua helper есть похожая функция, там переменная sim объявлена как: local sim = nil --/ переменная, кеширующая функцию alife() Или, может кто знает другой способ узнать секцию патронов в активном слоте God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401838
WinCap 324 Опубликовано 12 Ноября 2021 Поделиться Опубликовано 12 Ноября 2021 @Labadal, замени sim на alife(). 1 S.T.A.L.K.E.R. CoP Objects >200 шт (upd 21.05.26) - Скачать (Яндекс-диск) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401844
Labadal 68 Опубликовано 12 Ноября 2021 Поделиться Опубликовано 12 Ноября 2021 (изменено) Как можно отследить выстрел из оружия? Точнее, вопрос даже в том, можно ли? Изменено 12 Ноября 2021 пользователем Labadal God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401846
topdog 49 Опубликовано 12 Ноября 2021 Поделиться Опубликовано 12 Ноября 2021 @Labadal https://www.amk-team.ru/forum/topic/13216-sborochnyy-ceh/?do=findComment&comment=959170 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401849
Labadal 68 Опубликовано 12 Ноября 2021 Поделиться Опубликовано 12 Ноября 2021 @topdog файла нет уже на я.диске( God save Hatsune Miku! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/580/#findComment-1401850
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти