Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!

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

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

> Скрипты
Орион
сообщение 13.07.2009, 11:34
Сообщение #61


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

Репутация:   377  
Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа



FAQ

Lua в X-Ray

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

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

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



Сообщение отредактировал RayTwitty - 09.06.2018, 20:23


--------------------
нарушение правил п. 7.2
Перейти в начало страницы
 
15 страниц V  « < 2 3 4 5 6 > »   
Начать новую тему
Ответов
HikeR
сообщение 21.07.2009, 23:33
Сообщение #62


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

Репутация:   270  
Группа: Участник
Сообщений: 2620
Награды: 4
Регистрация: 26.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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


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

Репутация:   12  
Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

local flag = true

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

while flag == true do
if "убитый_объект" ~= nil then flag = true else flag = false end
end


--------------------
OGS Evolution Team
http://ogse.ru
Перейти в начало страницы
 
Kolmogor
сообщение 22.07.2009, 09:26
Сообщение #64


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

Репутация:   147  
Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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


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

Репутация:   77  
Группа: Участник
Сообщений: 283
Награды: 4
Регистрация: 25.01.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


А можно как-то, зная название обьекта, и не спавня его(так как он в игре уже есть как онлайн), ударить по нему хитом?
Вот например удаление долговца:
Код
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


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

Репутация:   1  
Группа: Участник
Сообщений: 27
Регистрация: 05.07.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


А кто знает как удалить все миссии действия в скриптах.
И начать делать миссии и всякое с нуля? rolleyes.gif


--------------------
--Дайте мне точку опоры и я переверну мир--
http://vintprog.3dn.ru
Перейти в начало страницы
 
Kolmogor
сообщение 22.07.2009, 12:00
Сообщение #67


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

Репутация:   147  
Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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


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

Репутация:   12  
Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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

Можно дополнить? smile.gif В примере выше использовался тип повреждения hit.explosion... Надо-ли говорить, что тип не один? Есть несколько типов - можете найти примеры использования в оригинальных скриптах и наносить объекту хит, наиболее подходящий для ситуации.


--------------------
OGS Evolution Team
http://ogse.ru
Перейти в начало страницы
 
HikeR
сообщение 22.07.2009, 15:02
Сообщение #69


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

Репутация:   270  
Группа: Участник
Сообщений: 2620
Награды: 4
Регистрация: 26.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(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


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

Репутация:   147  
Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Stalbar @ 22.07.2009, 15:32) *
Можно дополнить? 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. вопрос в том, как именно нужно ждать wink.gif
просто есть подозрение, что любой цикл приостанавливает выполнение скрипта, и при определенной задержке, то есть при отсутсвии возврата, игра крешится, специально либо из-за рассинхронизации.
а вешать на апдейт разовую ф-ию как-то не хочется.

Как обойтись без влезания в апдейт я не знаю.
Можно еще правда set_fastcall попытаться приспособить(по использованию в скриптах чем-то напоминает апдейт smile.gif ). Когда нужно - установить, а после срабатывания сбросить.

Ну и кстати с циклом по идее вылета не должно быть. просто по идее биндер должен зависнуть и все smile.gif (то есть перестать срабатывать функции биндера). В АМК например, это зависание отлавливается и игра специально крешится. А можно лог вылета, если сохранился

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


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

Репутация:   270  
Группа: Участник
Сообщений: 2620
Награды: 4
Регистрация: 26.03.2007




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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

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


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

Репутация:   12  
Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Вопрос - кто-нибудь знает, как прочитать последнюю строку консоли в запущенной игре?


--------------------
OGS Evolution Team
http://ogse.ru
Перейти в начало страницы
 
jboo7
сообщение 23.07.2009, 11:46
Сообщение #73


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

Репутация:   4  
Группа: Участник
Сообщений: 20
Регистрация: 16.07.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


В 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() что-то даст, по названию как ни какsmile.gif


--------------------
"Everybody lies" - Doctor House
Перейти в начало страницы
 
Stalbar
сообщение 23.07.2009, 11:51
Сообщение #74


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

Репутация:   12  
Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Да, это я видел, даже пробовал вытащить именно через get_console:get_string(), что-то пока не получается. Поэтому и спросил, может кто подтолкнёт.. smile.gif


--------------------
OGS Evolution Team
http://ogse.ru
Перейти в начало страницы
 
jboo7
сообщение 23.07.2009, 12:49
Сообщение #75


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

Репутация:   4  
Группа: Участник
Сообщений: 20
Регистрация: 16.07.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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

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

и разницы между get_string и get_token не нашел...
dry.gif

Сообщение отредактировал jboo7 - 23.07.2009, 12:51


--------------------
"Everybody lies" - Doctor House
Перейти в начало страницы
 
kutuzvden
сообщение 23.07.2009, 13:02
Сообщение #76


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

Репутация:   352  
Группа: Участник
Сообщений: 3274
Награды: 5
Регистрация: 18.02.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


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


--------------------
Перейти в начало страницы
 
jboo7
сообщение 23.07.2009, 13:40
Сообщение #77


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

Репутация:   4  
Группа: Участник
Сообщений: 20
Регистрация: 16.07.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Stalbar, может попробуешь сохранять лог-игры, когда нужно во время её работы, и просто читать от туда последнюю строку?smile.gif


--------------------
"Everybody lies" - Doctor House
Перейти в начало страницы
 
Stalbar
сообщение 23.07.2009, 13:54
Сообщение #78


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

Репутация:   12  
Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


jboo7, флушить лог можно, но как добиться, чтобы это происходило именно в момент появления там нужной мне строки???? smile.gif Хотя, если по этому условию можно флушить лог, то тогда мне и лог совсем не нужен smile.gif Мне нужно отловить именно появление определённой строки в логе, вернее в консоли.

Сообщение отредактировал Stalbar - 23.07.2009, 13:58


--------------------
OGS Evolution Team
http://ogse.ru
Перейти в начало страницы
 
Kolmogor
сообщение 23.07.2009, 17:18
Сообщение #79


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

Репутация:   147  
Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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


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

Репутация:   12  
Группа: Участник
Сообщений: 60
Регистрация: 24.06.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

При активации артефакта под названием "мина" рождается аномалия "минное поле" 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]

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

Сообщение отредактировал Stalbar - 23.07.2009, 17:48


--------------------
OGS Evolution Team
http://ogse.ru
Перейти в начало страницы
 
Kolmogor
сообщение 23.07.2009, 23:24
Сообщение #81


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

Репутация:   147  
Группа: Участник
Сообщений: 182
Регистрация: 08.09.2008




Вставить ник Цитировать выделенное в форуму быстрого ответа


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

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

15 страниц V  « < 2 3 4 5 6 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 29.03.2024, 01:45