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 Ссылка на комментарий
dsh 3 824 Опубликовано 7 Ноября 2017 Поделиться Опубликовано 7 Ноября 2017 @Pir@t@s вообще, можно отбиндить соотв. кнопки. Но если 1 hour ago, Pir@t@s said: знание скриптов 0 то я бы посоветовал "ох, не ходил бы ты туда, Стрелок". Вот скрипт, который делает "поломку" ПДА с помощью отбиндивания кнопок: https://github.com/dsh2dsh/op2ogse/blob/master/gamedata/scripts/dsh_broken_pda.script Правда я сомневаюсь, что это тебе поможет. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Kirgudu 1 256 Опубликовано 8 Ноября 2017 Поделиться Опубликовано 8 Ноября 2017 В 07.11.2017 в 12:36, sv6o6o9a сказал: attempt to index local 'spawn_smart' (a nil value) ЗП не моя платформа, но могу предположить навскидку, что, например, вместе с НПС удалены также и смарты, из-за чего симуляционный скрипт и не может найти какой-то смарт в своей временной таблице. Кроме того, имеет смысл проверить и почистить конфиг "configs\misc\simulation.ltx", ведь в нём вполне могли остаться строки, соответствующие удалённым объектам. 1 Инструмент Ссылка на комментарий
Overfirst 637 Опубликовано 8 Ноября 2017 Поделиться Опубликовано 8 Ноября 2017 (изменено) @Kirgudu достаточно как раз вычистить этот самый simulation.ltx. Еще можно пройтись поиском и убрать из кастом даты смартов респавн сквадов неписей и мобов или же просто потереть эти смарты из спавна. В любом случае, simulation.ltx чистить нужно. Изменено 8 Ноября 2017 пользователем BoBaH_671 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
sv6o6o9a 1 Опубликовано 8 Ноября 2017 Поделиться Опубликовано 8 Ноября 2017 2 часа назад, BoBaH_671 сказал: @Kirgudu достаточно как раз вычистить этот самый simulation.ltx. Еще можно пройтись поиском и убрать из кастом даты смартов респавн сквадов неписей и мобов или же просто потереть эти смарты из спавна. В любом случае, simulation.ltx чистить нужно. теперь такой лог Expression : fatal error Function : CInifile::r_section File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp Line : 475 Description : <no expression> Arguments : Can't open section 'amk_metka'. Please attach [*.ini_log] file to your bug report Ссылка на комментарий
Overfirst 637 Опубликовано 8 Ноября 2017 Поделиться Опубликовано 8 Ноября 2017 @sv6o6o9a рад за тебя. В ЗП никаких АМК меток нету. Так что дальше твой косяк. 1 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
sv6o6o9a 1 Опубликовано 9 Ноября 2017 Поделиться Опубликовано 9 Ноября 2017 Помогите, как сделать переход по локациям? Я удалил проводников и хочу сделать чтобы был переход по локациям прям как в Сталкер ТЧ Ссылка на комментарий
Overfirst 637 Опубликовано 9 Ноября 2017 Поделиться Опубликовано 9 Ноября 2017 Платформа какая? В ютубе есть урок по созданию перехода на ЗП. Ранее был известен под ником BoBaH_671. Ссылка на комментарий
sv6o6o9a 1 Опубликовано 9 Ноября 2017 Поделиться Опубликовано 9 Ноября 2017 1 минуту назад, BoBaH_671 сказал: Платформа какая? Зов Припяти, можешь ссылку дать на ютуб? Ссылка на комментарий
Shkiper2012 35 Опубликовано 18 Ноября 2017 Поделиться Опубликовано 18 Ноября 2017 Можно ли скриптом "повесить" актора в пространстве? Чтоб он завис в воздухе. Пробовал делать через "db.actor:set_actor_position( ... точка в пространстве ... )", и обновлять через апдейт - в результате камеру "колбасит не по-детстки". Можно конечно, что-нибудь спавнить под актором и фиксировать, но это не то. Есть варианты? Именно скриптом. Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
dsh 3 824 Опубликовано 18 Ноября 2017 Поделиться Опубликовано 18 Ноября 2017 Кто-то тут "полетом" занимался, @TIGER_VLAD возможно. Что-то я такое припоминаю. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 18 Ноября 2017 Поделиться Опубликовано 18 Ноября 2017 (изменено) 3 часа назад, Shkiper2012 сказал: Можно ли скриптом "повесить" актора в пространстве? Чтоб он завис в воздухе. Пробовал делать через "db.actor:set_actor_position( ... точка в пространстве ... )" set_actor_position не точно устанавливает позицию актора. Если ЗП, можешь раз установить позицию(не на апдейте) и выключить гравитацию : level.physics_world():set_gravity(0). Если ТЧ(исходники), можешь перенести метод set_gravity из ЗП. А я для ТЧ xray extensions, с помощью m_netpk спавнил под актором невидимую плоскость и фиксировал. Вот : Скрытый текст https://www.youtube.com/watch?v=x1kV10IP1oQ Изменено 18 Ноября 2017 пользователем TIGER_VLAD 1 1 Ссылка на комментарий
Faustle 2 Опубликовано 20 Ноября 2017 Поделиться Опубликовано 20 Ноября 2017 Коллеги, доброго времени суток. В этой теме уже встречался данный вопрос, но остался без ответа - каким образом зарегистрировать callback от кнопки, чтобы он таки заработал, если сама кнопка помещена в CUIScrollView? Сколько вариантов не перепробовал - все одно, не вызывается (CoP) Ссылка на комментарий
Charsi 440 Опубликовано 20 Ноября 2017 Поделиться Опубликовано 20 Ноября 2017 @Faustle , в окно главного меню добавил скроллвью и в него две кнопки - всё работает. self.scroll = xml:InitScrollView("scroll", self) -- скролл self.btn1 = xml:Init3tButton("btn1", nil) --кнопка1 self:Register (self.btn1, "btn1") self.btn2 = xml:Init3tButton("btn2", nil) --кнопка2 self:Register (self.btn2, "btn2") self.scroll:AddWindow(self.btn1, true) -- добавляем кнопки в скролл self.scroll:AddWindow(self.btn2, true) self:AddCallback("btn1", ui_events.BUTTON_CLICKED, function() log("bnt1_down") end) -- ставим колбеки self:AddCallback("btn2", ui_events.BUTTON_CLICKED, function() log("bnt2_down") end) 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Faustle 2 Опубликовано 20 Ноября 2017 Поделиться Опубликовано 20 Ноября 2017 8 hours ago, Charsi said: @Faustle , в окно главного меню добавил скроллвью и в него две кнопки - всё работает. Странно, но, в любом случае, большое спасибо, значит моя проблема в реализации. Буду разбираться. Движок, с которым я работаю не совсем CoP - CoC 1.4.22, но изменений в GUI классах, судя по исходникам, не было. Единственный момент, который приходит в голову - что-то не так с аттачем дочернего CUIWindow, в котором размещена кнопка. Ссылка на комментарий
Faustle 2 Опубликовано 20 Ноября 2017 Поделиться Опубликовано 20 Ноября 2017 Вот что значит, по ночам писать вредно... Просмотрел закомментированную строку, хотя проверял и переписывал все несколько раз. Все работает, вопрос снят. 1 Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 22 Ноября 2017 Поделиться Опубликовано 22 Ноября 2017 (изменено) Господа, выручайте. Наткнулся на самую настоящую для моих мозгов аномалию! В общем, написал я небольшой таймер Скрытый текст local time_news = 10 local time_m = 1 local time_h = time_m * 60 local time_d = time_h * 24 local rnd = math.random function time_update_spam() local iTimer = amk.game_minutes() iTimer = amk.game_minutes() + math.random(time_h, time_d) --как только грузанулись взвелся таймер, рандом от часа до дня ИГРОВОГО -- далее функция ожидания истечения таймера-- local function check_timer() return amk.game_minutes() > iTimer end -- ставим её на апдейт level.add_call(check_timer, action_timer)end function action_timer() if time_news < amk.game_minutes() then time_news = amk.game_minutes() + rnd(time_d) -- время через которое будет вызываться сообщение news_main.do_RANDOM_NEWS() --функция, которую мне нужно вызывать с некоторым промежутком времени -- amk.send_tip( "заголовок", "таймер истёк", 1, 15, "common_channel") endend Сама функция таймера "time_update_spam()"у меня вызывается из скрипта bind_stalker - функции actor_binder:update(delta) И все великолепно работает, таймер исправно запускает функции через отведённое время. Но вот проблема. Падает фпс! Как только загрузился - от 60 до 100 фпс. Через 5 минут реального времени всегда фпс падает до 10. Именно из-за таймера. Или функции, которую он вызывает, не знаю. Стоит только закомментить в Бинд_Сталкере строчку с вызовом функции таймера и перезагрузить игру как фпс снова возвращается на былые значения. Что это может быть? Изменено 23 Ноября 2017 пользователем Kirgudu Добавлено Kirgudu, 23 Ноября 2017 Пункт 2.0 правил форума, устное предупреждение. Ссылка на комментарий
dsh 3 824 Опубликовано 23 Ноября 2017 Поделиться Опубликовано 23 Ноября 2017 @_Sk8_AsTeR_ вероятно потому, что на каждом апдейте ты делаешь новый level.add_call(). Вообще не понятно, зачем тебе все так сложно. Вызывай из апдейта сразу action_timer. Ведь там же есть проверка, наступило нужное время или нет. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Faustle 2 Опубликовано 23 Ноября 2017 Поделиться Опубликовано 23 Ноября 2017 @_Sk8_AsTeR_ level.add_call() - по сути callback. Ее не нужно самому ставить на апдейт, это делается движком. Фактически, функция работает следующим образом - ты вызываешь level.add_call, с первым аргументом в виде функции, которая будет вызываться до тех пор, пока не вернет true, после чего произойдет вызов второго аргумента. В твоем случае, получается рекурсивный вызов функции - отсюда и тормоза системы. 1 Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 23 Ноября 2017 Поделиться Опубликовано 23 Ноября 2017 @dsh @Faustle Спасибо за подсказки. Следуя вашим советам столкнулся с новой проблемой: таймер между вызовом моей функции работает. Однако первичный вызов функции происходит без задержки, моментально. А это мне не подходит. То есть как только я гурзанул сейв сразу вызывается моя функция, и только после этого заводится таймер. Как можно вызвать задержку на выполнение ф-ции? Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 23 Ноября 2017 Поделиться Опубликовано 23 Ноября 2017 (изменено) В продолжение своей проблемы Исходя из информации, полученной выше от ребят, получается мы имеем вызов моей функции action_timer() из bind_stalker из ф-ции actor_binder:update(delta). Значит моя ф-ция автоматически обновляется. Тогда вопрос, что я делаю не так? Скрытый текст local time_news = 0 local iTimer = 0 function action_timer() time_news = amk.game_minutes() + 2 if time_news < amk.game_minutes() then news_main.do_RANDOM_NEWS() end end Ведь по идее, исходя из это, мой скрипт должен работать следующим образом: объявленной переменной time_news присваивается значение - игровое время + 2 минуты. И если эта переменная меньше чем игровое время в данный момент, то выполняется другая основная моя ф-ция do_RANDOM_NEWS(). И того выходит, что после загрузки сейва через 2 минуты игрового времени должна непрерывно начать постоянно вызываться моя основная ф-ция do_RANDOM_NEWS(), но этого не происходит. Оказывается почему-то что всегда переменная time_news перманентно больше игрового времени в данный момент. Как так? Изменено 23 Ноября 2017 пользователем _Sk8_AsTeR_ Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти