Скрипты |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт 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 Для получения файла надо распаковать игру. Можно скачать, в принципе Тут =>> Уроки Сообщение отредактировал RayTwitty - 09.06.2018, 20:23 -------------------- нарушение правил п. 7.2
|
 
|
|
|
|
21.07.2009, 23:33
Сообщение
#62
|
|
Магистр Игры Репутация: 270 Группа: Участник Сообщений: 2620 Награды: 4 Регистрация: 26.03.2007 |
Вэтой функции вы пытаетесь получить клиентский объект сразу после создания. Его еще нет в игре, так как в онлайн он еще не перешел. кстати, может кто скажет, почему цикл 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 |
 
|
|
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
|
 
|
|
22.07.2009, 09:26
Сообщение
#64
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
просто была такая же заморочка. iterate_inventory(... -- перебираю инвентарь alife():release(... -- убираю некоторый объект iterate_inventory(... -- опять перебираю, а объект все еще есть. Думаю дело в этом: alife():release(...) убивает серверный объект iterate_inventory(...) итерирует по клиентским А синхронизация серверных и клиентских произойдет не раньше следующего actor_binder:update. |
 
|
|
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 |
 
|
|
22.07.2009, 11:22
Сообщение
#66
|
|
Почти Игрок Репутация: 1 Группа: Участник Сообщений: 27 Регистрация: 05.07.2009 |
А кто знает как удалить все миссии действия в скриптах.
И начать делать миссии и всякое с нуля? -------------------- --Дайте мне точку опоры и я переверну мир--
|
 
|
|
22.07.2009, 12:00
Сообщение
#67
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
|
 
|
|
22.07.2009, 14:32
Сообщение
#68
|
|
Опытный Игрок Репутация: 12 Группа: Участник Сообщений: 60 Регистрация: 24.06.2009 |
А можно как-то, зная название обьекта, и не спавня его(так как он в игре уже есть как онлайн), ударить по нему хитом? выше был пример взрыва бочки. Её взрывали нанося хит. Разницы между бочкой и долговцем в этом случае никакой Можно дополнить? В примере выше использовался тип повреждения hit.explosion... Надо-ли говорить, что тип не один? Есть несколько типов - можете найти примеры использования в оригинальных скриптах и наносить объекту хит, наиболее подходящий для ситуации. -------------------- OGS Evolution Team
|
 
|
|
22.07.2009, 15:02
Сообщение
#69
|
|
Магистр Игры Репутация: 270 Группа: Участник Сообщений: 2620 Награды: 4 Регистрация: 26.03.2007 |
но может попробовать такую конструкцию? она по сути повторяет тот же while true... А синхронизация серверных и клиентских произойдет не раньше следующего actor_binder:update. ахха, то есть минимальный момент времени, который нужно подождать - 1FPS. вопрос в том, как именно нужно ждать ;) просто есть подозрение, что любой цикл приостанавливает выполнение скрипта, и при определенной задержке, то есть при отсутсвии возврата, игра крешится, специально либо из-за рассинхронизации. а вешать на апдейт разовую ф-ию как-то не хочется. |
 
|
|
22.07.2009, 21:31
Сообщение
#70
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
Можно дополнить? В примере выше использовался тип повреждения 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. Там же можно найти и много другой полезной информации. Ну а какой наиболее подходящий Вам виднее ахха, то есть минимальный момент времени, который нужно подождать - 1FPS. вопрос в том, как именно нужно ждать просто есть подозрение, что любой цикл приостанавливает выполнение скрипта, и при определенной задержке, то есть при отсутсвии возврата, игра крешится, специально либо из-за рассинхронизации. а вешать на апдейт разовую ф-ию как-то не хочется. Как обойтись без влезания в апдейт я не знаю. Можно еще правда set_fastcall попытаться приспособить(по использованию в скриптах чем-то напоминает апдейт ). Когда нужно - установить, а после срабатывания сбросить. Ну и кстати с циклом по идее вылета не должно быть. просто по идее биндер должен зависнуть и все (то есть перестать срабатывать функции биндера). В АМК например, это зависание отлавливается и игра специально крешится. А можно лог вылета, если сохранился Сообщение отредактировал Kolmogor - 22.07.2009, 21:46 |
 
|
|
23.07.2009, 00:11
Сообщение
#71
|
|
Магистр Игры Репутация: 270 Группа: Участник Сообщений: 2620 Награды: 4 Регистрация: 26.03.2007 |
Можноеще правда set_fastcall попытаться приспособить смотрел на это дело, но издалека, надо попробовать. А можно лог вылета, если сохранился у меня имеется некоторая трабла в виде установленной семерки, которая падает в синий экран при краше сталкера, а ребутить машину ночью никак нельзя. как-нить на днях выложу, если еще интересно будет. |
 
|
|
23.07.2009, 10:10
Сообщение
#72
|
|
Опытный Игрок Репутация: 12 Группа: Участник Сообщений: 60 Регистрация: 24.06.2009 |
Вопрос - кто-нибудь знает, как прочитать последнюю строку консоли в запущенной игре?
-------------------- OGS Evolution Team
|
 
|
|
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() что-то даст, по названию как ни как -------------------- "Everybody lies" - Doctor House
|
 
|
|
23.07.2009, 11:51
Сообщение
#74
|
|
Опытный Игрок Репутация: 12 Группа: Участник Сообщений: 60 Регистрация: 24.06.2009 |
Да, это я видел, даже пробовал вытащить именно через get_console:get_string(), что-то пока не получается. Поэтому и спросил, может кто подтолкнёт..
-------------------- OGS Evolution Team
|
 
|
|
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 не нашел... Сообщение отредактировал jboo7 - 23.07.2009, 12:51 -------------------- "Everybody lies" - Doctor House
|
 
|
|
23.07.2009, 13:02
Сообщение
#76
|
|
грандмастер бит Репутация: 352 Группа: Участник Сообщений: 3274 Награды: 5 Регистрация: 18.02.2009 |
Здрасте. Мб не совсем в тему, но все таки. Подскажите плиз, где находится в сталкере скрипт, отвечающий за голод, а то я в скриптах не бум бум-хочу сделать аналогичный скрипт по примеру голода. И еще: где и что нужно написать, чтоб игра обращалась к этому скрипту?
-------------------- |
 
|
|
23.07.2009, 13:40
Сообщение
#77
|
|
Почти Игрок Репутация: 4 Группа: Участник Сообщений: 20 Регистрация: 16.07.2009 |
Stalbar, может попробуешь сохранять лог-игры, когда нужно во время её работы, и просто читать от туда последнюю строку?
-------------------- "Everybody lies" - Doctor House
|
 
|
|
23.07.2009, 13:54
Сообщение
#78
|
|
Опытный Игрок Репутация: 12 Группа: Участник Сообщений: 60 Регистрация: 24.06.2009 |
jboo7, флушить лог можно, но как добиться, чтобы это происходило именно в момент появления там нужной мне строки???? Хотя, если по этому условию можно флушить лог, то тогда мне и лог совсем не нужен Мне нужно отловить именно появление определённой строки в логе, вернее в консоли.
Сообщение отредактировал Stalbar - 23.07.2009, 13:58 -------------------- OGS Evolution Team
|
 
|
|
23.07.2009, 17:18
Сообщение
#79
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
|
 
|
|
23.07.2009, 17:47
Сообщение
#80
|
|
Опытный Игрок Репутация: 12 Группа: Участник Сообщений: 60 Регистрация: 24.06.2009 |
А какая задача вообще стоит? Зачем пытаешься строку в консоли отловить? Может необязательно строку в консоли отлавливать, может по-другому можно? При активации артефакта под названием "мина" рождается аномалия "минное поле" Движок на это непотребство реагирует выдачей в консоль 2 строк такого вида: artefact [af_mine31076] spawned a zone [zone_mine_field] at [92.799683] - !!!processing_enabled ->destroy_queue.push_back af_mine31076[31076] frame [18310] Вот хочу попытаться отловить не факт перемещения игроком в активный слот айтема (он его может покрутить в руках и назад в рюкзак сунуть), а именно момент активации мины, после которого движок выдаёт в консоль вышеприведённые строки. Также очень хочется отловить момент "сработки" минного поля, как вот это реализовать - я пока в глубоких раздумьях... Если по варианту активации мины есть решение, но очень "некрасивое", я бы сказал, хотелось бы более элегантного, то по вопросу срабатывания минного поля мыслей пока никаких нет. Совсем. Сообщение отредактировал Stalbar - 23.07.2009, 17:48 -------------------- OGS Evolution Team
|
 
|
|
23.07.2009, 23:24
Сообщение
#81
|
|
Опытный Геймер Репутация: 147 Группа: Участник Сообщений: 182 Регистрация: 08.09.2008 |
Вот хочу попытаться отловить не факт перемещения игроком в активный слот айтема (он его может покрутить в руках и назад в рюкзак сунуть), а именно момент активации мины, после которого движок выдаёт в консоль вышеприведённые строки. При активации мины артефакт пропадает? Тогда это отлавливается как и использование предмета: в on_item_drop запоминаем ид, и в апдейт проверяем наличие объекта с таким ид - если объекта нет - значит заюзали |
 
|
|
Текстовая версия | Сейчас: 23.04.2024, 10:01 |