IPB

Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

>

Скрипты

 
 Орион
сообщение 13.07.2009, 11:34
Сообщение #61


Навий черны у ношьти
***************

Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009
Из: Лиманск
Пользователь №: 10251




FAQ

Lua в X-Ray

Список всех функций, переменных, классов и т.п. что используются в Сталкере находится по адресу:
Код
gamedata/scripts/lua_help.script

Для получения файла надо распаковать игру. Можно скачать, в принципе (IMG:style_emoticons/default/smile.gif) Тут =>>Ссылко<<=
Уроки

Пример создания непися скриптами ЛУА. Автор: меченый(стрелок)
Скриптинг на инсайде



Сообщение отредактировал RayTwitty - 09.06.2018, 20:23
Перейти в начало страницы
 
 
 
Ответов
 HikeR
сообщение 21.07.2009, 23:33
Сообщение #62


Магистр Игры
****************

Группа: Участник
Сообщений: 2620
Регистрация: 26.03.2007
Из: Великий Новгород
Пользователь №: 5660



Цитата(Kolmogor @ 21.07.2009, 23:48) *
Вэтой функции вы пытаетесь получить клиентский объект сразу после создания. Его еще нет в игре, так как в онлайн он еще не перешел.

кстати, может кто скажет, почему цикл while с ожиданием наступления момента появления объекта в онлайне сразу после создания обычно вызывает краш?
и есть ли какой-то аналог ф-ии wait(столько-то-секунд), которую можно использовать?

просто была такая же заморочка.
iterate_inventory(... -- перебираю инвентарь
alife():release(... -- убираю некоторый объект
iterate_inventory(... -- опять перебираю, а объект все еще есть.

если добавить проверку вида
while true do
if not is_object_online(obj_id) then break end
end

то вываливаюсь, а по идее цикл должен был крутится пока этот obj_id не перестанет отзываться.

Сообщение отредактировал HikeR - 21.07.2009, 23:58
Перейти в начало страницы
 
 
 Stalbar
сообщение 22.07.2009, 09:09
Сообщение #63


Опытный Игрок
****

Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009
Пользователь №: 11166



HikeR, насчёт аналога - не подскажу, но может попробовать такую конструкцию?
В начале скрипта поставить что-то типа

local flag = true

Затем, после того как "alife():release(... -- убираю некоторый объект", в цикле ставить проверку, наподобие

while flag == true do
if "убитый_объект" ~= nil then flag = true else flag = false end
end
Перейти в начало страницы
 
 
 Kolmogor
сообщение 22.07.2009, 09:26
Сообщение #64


Опытный Геймер
*******

Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008
Пользователь №: 8878



Цитата(HikeR @ 22.07.2009, 00:33) *
просто была такая же заморочка.
iterate_inventory(... -- перебираю инвентарь
alife():release(... -- убираю некоторый объект
iterate_inventory(... -- опять перебираю, а объект все еще есть.

Думаю дело в этом:
alife():release(...) убивает серверный объект
iterate_inventory(...) итерирует по клиентским
А синхронизация серверных и клиентских произойдет не раньше следующего actor_binder:update.
Перейти в начало страницы
 
 
 PATRON
сообщение 22.07.2009, 10:43
Сообщение #65


Продвинутый геймер
********

Группа: Участник
Сообщений: 283
Регистрация: 25.01.2009
Из: село Яренск
Пользователь №: 9755



А можно как-то, зная название обьекта, и не спавня его(так как он в игре уже есть как онлайн), ударить по нему хитом?
Вот например удаление долговца:
Код
function udar_nishtak()
    for a=10,65635,1 do
    local obj=alife():object(a)
        if obj and string.find(obj:name(),"dolg_regular") then
        alife():release(obj,true)
        end
    end
end

А вот кто-нибудь может переделать этот код, чтобы получилось что-то вроде:
Код
function udar_nishtak()
    for a=10,65635,1 do
    local obj=alife():object(a)
        if obj and string.find(obj:name(),"dolg_regular") then
        Какой код нужно поставить сюда, для хита?
        end
    end
end


Сообщение отредактировал PATRON - 22.07.2009, 10:43
Перейти в начало страницы
 
 
 vintprog
сообщение 22.07.2009, 11:22
Сообщение #66


Почти Игрок
**

Группа: Участник
Сообщений: 27
Регистрация: 05.07.2009
Пользователь №: 11244



А кто знает как удалить все миссии действия в скриптах.
И начать делать миссии и всякое с нуля? (IMG:http://www.gameru.net/forum/style_emoticons/default/rolleyes.gif)
Перейти в начало страницы
 
 
 Kolmogor
сообщение 22.07.2009, 12:00
Сообщение #67


Опытный Геймер
*******

Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008
Пользователь №: 8878



Цитата(PATRON @ 22.07.2009, 11:43) *
А можно как-то, зная название обьекта, и не спавня его(так как он в игре уже есть как онлайн), ударить по нему хитом?

выше был пример взрыва бочки. Её взрывали нанося хит.
Разницы между бочкой и долговцем в этом случае никакой
Перейти в начало страницы
 
 
 Stalbar
сообщение 22.07.2009, 14:32
Сообщение #68


Опытный Игрок
****

Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009
Пользователь №: 11166



Цитата(Kolmogor @ 22.07.2009, 16:00) *
Цитата(PATRON @ 22.07.2009, 11:43) *
А можно как-то, зная название обьекта, и не спавня его(так как он в игре уже есть как онлайн), ударить по нему хитом?

выше был пример взрыва бочки. Её взрывали нанося хит.
Разницы между бочкой и долговцем в этом случае никакой

Можно дополнить? (IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif) В примере выше использовался тип повреждения hit.explosion... Надо-ли говорить, что тип не один? Есть несколько типов - можете найти примеры использования в оригинальных скриптах и наносить объекту хит, наиболее подходящий для ситуации.
Перейти в начало страницы
 
 
 HikeR
сообщение 22.07.2009, 15:02
Сообщение #69


Магистр Игры
****************

Группа: Участник
Сообщений: 2620
Регистрация: 26.03.2007
Из: Великий Новгород
Пользователь №: 5660



Цитата(Stalbar @ 22.07.2009, 10:09) *
но может попробовать такую конструкцию?

она по сути повторяет тот же while true...
Цитата(Kolmogor @ 22.07.2009, 10:26) *
А синхронизация серверных и клиентских произойдет не раньше следующего actor_binder:update.

ахха, то есть минимальный момент времени, который нужно подождать - 1FPS. вопрос в том, как именно нужно ждать ;)
просто есть подозрение, что любой цикл приостанавливает выполнение скрипта, и при определенной задержке, то есть при отсутсвии возврата, игра крешится, специально либо из-за рассинхронизации.
а вешать на апдейт разовую ф-ию как-то не хочется.
Перейти в начало страницы
 
 
 Kolmogor
сообщение 22.07.2009, 21:31
Сообщение #70


Опытный Геймер
*******

Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008
Пользователь №: 8878



Цитата(Stalbar @ 22.07.2009, 15:32) *
Можно дополнить? (IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif) В примере выше использовался тип повреждения hit.explosion... Надо-ли говорить, что тип не один? Есть несколько типов - можете найти примеры использования в оригинальных скриптах и наносить объекту хит, наиболее подходящий для ситуации.

есть еще
hit.burn
hit.chemical_burn
hit.fire_wound
hit.radiation
hit.shock
hit.strike
hit.telepatic
hit.wound
Использовать так же как и hit.explosion. Эти значения взял из файла lua_help.script. Там же можно найти и много другой полезной информации. Ну а какой наиболее подходящий Вам виднее

Цитата(HikeR @ 22.07.2009, 16:02) *
ахха, то есть минимальный момент времени, который нужно подождать - 1FPS. вопрос в том, как именно нужно ждать (IMG:http://www.gameru.net/forum/style_emoticons/default/wink.gif)
просто есть подозрение, что любой цикл приостанавливает выполнение скрипта, и при определенной задержке, то есть при отсутсвии возврата, игра крешится, специально либо из-за рассинхронизации.
а вешать на апдейт разовую ф-ию как-то не хочется.

Как обойтись без влезания в апдейт я не знаю.
Можно еще правда set_fastcall попытаться приспособить(по использованию в скриптах чем-то напоминает апдейт (IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif) ). Когда нужно - установить, а после срабатывания сбросить.

Ну и кстати с циклом по идее вылета не должно быть. просто по идее биндер должен зависнуть и все (IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif) (то есть перестать срабатывать функции биндера). В АМК например, это зависание отлавливается и игра специально крешится. А можно лог вылета, если сохранился

Сообщение отредактировал Kolmogor - 22.07.2009, 21:46
Перейти в начало страницы
 
 
 HikeR
сообщение 23.07.2009, 00:11
Сообщение #71


Магистр Игры
****************

Группа: Участник
Сообщений: 2620
Регистрация: 26.03.2007
Из: Великий Новгород
Пользователь №: 5660



Цитата(Kolmogor @ 22.07.2009, 22:31) *
Можноеще правда set_fastcall попытаться приспособить

смотрел на это дело, но издалека, надо попробовать.
Цитата(Kolmogor @ 22.07.2009, 22:31) *
А можно лог вылета, если сохранился

у меня имеется некоторая трабла в виде установленной семерки, которая падает в синий экран при краше сталкера, а ребутить машину ночью никак нельзя. как-нить на днях выложу, если еще интересно будет.
Перейти в начало страницы
 
 
 Stalbar
сообщение 23.07.2009, 10:10
Сообщение #72


Опытный Игрок
****

Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009
Пользователь №: 11166



Вопрос - кто-нибудь знает, как прочитать последнюю строку консоли в запущенной игре?
Перейти в начало страницы
 
 
 jboo7
сообщение 23.07.2009, 11:46
Сообщение #73


Почти Игрок
**

Группа: Участник
Сообщений: 20
Регистрация: 16.07.2009
Из: Мертвый город
Пользователь №: 11317



В lua_help.script есть класс CConsole.

CODE
C++ class CConsole {
function execute_script(string);
function get_string(string);
function execute(string);
function get_bool(CConsole*, string);
function get_float(CConsole*, string);
function get_integer(CConsole*, string);
function get_token(string);
function show();
function hide();
};


Может get_string() что-то даст, по названию как ни как(IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 Stalbar
сообщение 23.07.2009, 11:51
Сообщение #74


Опытный Игрок
****

Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009
Пользователь №: 11166



Да, это я видел, даже пробовал вытащить именно через get_console:get_string(), что-то пока не получается. Поэтому и спросил, может кто подтолкнёт.. (IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 jboo7
сообщение 23.07.2009, 12:49
Сообщение #75


Почти Игрок
**

Группа: Участник
Сообщений: 20
Регистрация: 16.07.2009
Из: Мертвый город
Пользователь №: 11317



get_string определенно не то, что нужно, потому что она возвращает значение в строке любой консольной команды, переданой в качестве параметра...

local str = get_console():get_string("rs_stats")

в итоге в str будет "on" или "off"

и разницы между get_string и get_token не нашел...
(IMG:http://www.gameru.net/forum/style_emoticons/default/dry.gif)

Сообщение отредактировал jboo7 - 23.07.2009, 12:51
Перейти в начало страницы
 
 
 kutuzvden
сообщение 23.07.2009, 13:02
Сообщение #76


грандмастер бит
******************

Группа: Участник
Сообщений: 3273
Регистрация: 18.02.2009
Из: Тверь
Пользователь №: 9874



Здрасте. Мб не совсем в тему, но все таки. Подскажите плиз, где находится в сталкере скрипт, отвечающий за голод, а то я в скриптах не бум бум-хочу сделать аналогичный скрипт по примеру голода. И еще: где и что нужно написать, чтоб игра обращалась к этому скрипту?
Перейти в начало страницы
 
 
 jboo7
сообщение 23.07.2009, 13:40
Сообщение #77


Почти Игрок
**

Группа: Участник
Сообщений: 20
Регистрация: 16.07.2009
Из: Мертвый город
Пользователь №: 11317



Stalbar, может попробуешь сохранять лог-игры, когда нужно во время её работы, и просто читать от туда последнюю строку?(IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif)
Перейти в начало страницы
 
 
 Stalbar
сообщение 23.07.2009, 13:54
Сообщение #78


Опытный Игрок
****

Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009
Пользователь №: 11166



jboo7, флушить лог можно, но как добиться, чтобы это происходило именно в момент появления там нужной мне строки???? (IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif) Хотя, если по этому условию можно флушить лог, то тогда мне и лог совсем не нужен (IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif) Мне нужно отловить именно появление определённой строки в логе, вернее в консоли.

Сообщение отредактировал Stalbar - 23.07.2009, 13:58
Перейти в начало страницы
 
 
 Kolmogor
сообщение 23.07.2009, 17:18
Сообщение #79


Опытный Геймер
*******

Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008
Пользователь №: 8878



Цитата(Stalbar @ 23.07.2009, 14:54) *
Мне нужно отловить именно появление определённой строки в логе, вернее в консоли.

А какая задача вообще стоит? Зачем пытаешься строку в консоли отловить? Может необязательно строку в консоли отлавливать, может по-другому можно?
Перейти в начало страницы
 
 
 Stalbar
сообщение 23.07.2009, 17:47
Сообщение #80


Опытный Игрок
****

Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009
Пользователь №: 11166



Цитата(Kolmogor @ 23.07.2009, 21:18) *
А какая задача вообще стоит? Зачем пытаешься строку в консоли отловить? Может необязательно строку в консоли отлавливать, может по-другому можно?

При активации артефакта под названием "мина" рождается аномалия "минное поле" (IMG:http://www.gameru.net/forum/style_emoticons/default/smile.gif) Движок на это непотребство реагирует выдачей в консоль 2 строк такого вида:
artefact [af_mine31076] spawned a zone [zone_mine_field] at [92.799683]
- !!!processing_enabled ->destroy_queue.push_back af_mine31076[31076] frame [18310]

Вот хочу попытаться отловить не факт перемещения игроком в активный слот айтема (он его может покрутить в руках и назад в рюкзак сунуть), а именно момент активации мины, после которого движок выдаёт в консоль вышеприведённые строки. Также очень хочется отловить момент "сработки" минного поля, как вот это реализовать - я пока в глубоких раздумьях... Если по варианту активации мины есть решение, но очень "некрасивое", я бы сказал, хотелось бы более элегантного, то по вопросу срабатывания минного поля мыслей пока никаких нет. Совсем. (IMG:http://www.gameru.net/forum/style_emoticons/default/sad.gif)

Сообщение отредактировал Stalbar - 23.07.2009, 17:48
Перейти в начало страницы
 
 
 Kolmogor
сообщение 23.07.2009, 23:24
Сообщение #81


Опытный Геймер
*******

Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008
Пользователь №: 8878



Цитата(Stalbar @ 23.07.2009, 18:47) *
Вот хочу попытаться отловить не факт перемещения игроком в активный слот айтема (он его может покрутить в руках и назад в рюкзак сунуть), а именно момент активации мины, после которого движок выдаёт в консоль вышеприведённые строки.

При активации мины артефакт пропадает? Тогда это отлавливается как и использование предмета: в on_item_drop запоминаем ид, и в апдейт проверяем наличие объекта с таким ид - если объекта нет - значит заюзали
Перейти в начало страницы
 
 
 
 

 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 29.09.2020, 07:05