Перейти к контенту

Рекомендуемые сообщения

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

 

 

А вообще для полетов камеры по локациям есть level.add_cam_effector2. Только тут нужно делать кат-сцену в X-ray SDK.

Я делал кат-сцену, таким образом, вешал на рестриктор, это не помогло, остаётся худ и пушка в руках.

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

 

 

Ты наверное использовал функцию level.add_cam_effector вместо level.add_cam_effector2.

Вот функция:

function blya_desant()
    level.add_cam_effector2("camera_effects\\blya_desant.anm", 30, false, "")
    local snd_obj = xr_sound.get_safe_sound_object([[helicopter\see_enemy_3]])
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end

Вот так это выглядит:

(кат-сцена с 2м.50с.)

 

 

 

 

Чтобы снять видео, я скрыл худ, и убрал пушку вручную.

  • Нравится 1
 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

Кто может помочь написать биндер к оружию? Я начал делать, но т.к. я не скриптер много чего не могу понять. Чтоб тут лишнего не расписывать, у кого есть желание помочь пишите в личку.

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

Добрый вечер. Был заспавнен предмет через скрипт, самым обычным способом:

alife():create(section,position,lv,gm)

Предмет в игре один. То есть не как хлеб или колбаса, которых много, а один. 

Как мне удалить этот предмет из игры?

Ссылка на комментарий

@Romann, если ты вызывал из логики рестриктора фунцкию, то это не является правильным. Нужно юзать схему sr_cutscene, подробнее о ней можно узнать тут.

  • Полезно 1

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий

@Kober(BRUC), Вот есть фу-ии в уроках:

function del_pusto() 
    local sim = alife() 
    local se_obj = sim:story_object(888)  --номер обьекта в game_stori_ids 
    if se_obj then 
        sim:release(se_obj, true) 
    end 
end 

Незнаю подойдёт или нет, не проверял.

В жизни много плохих моментов. Пытайся избавляться от них !

Ссылка на комментарий

Не подойдет. Что бы подошло, нужно после создания, ручками, назначить объекту story_id. А так, перебирать все объекты в цикле и встретив подходящую секцию, удалять и прерывать цикл. Самый простой вариант.

Ссылка на комментарий

С помощью string.find получаю таблицу в которой есть строки с индексом _delet.
Затем table.remove(tbl, _delet) пытаюсь очистить таблицу от всех строк _delet
и ловлю вылет bad argument #1 to 'foreach' (table expected, got table) -- вместо таблицы получена таблица

table.remove(obj, "_flame") --> bad argument #1 to 'remove' (table expected, got userdata)

 for  a=10,65635,1  do 
  local   obj =level.object _by_id   (   a  )  
  if  obj  and  string.fi nd (  obj:nam e(),"search_")  then 
table.remove ( obj, _delete) 

По сути надо из таблицы:
a_*, а_*2, а_*_3, а_delet, а_*_delet, а_*_конец_таблицы
удалить все вхождения в delet.
Или произвести действие только с:
a_*, а_*2, а_*_3, а_*_конец_таблицы
исключая а_delet, а_*_delet

 

Или может надо вообще по другому получать таблицу?

 

@dsh,

local sObj = alife():object("esc_wolf")

Изменено пользователем ins33
Ссылка на комментарий

 

 

local sObj = alife():object("esc_wolf")

 

И чего? esc_wolf сидит в all.spawn, поэтому его можно достать по имени. А вот если ты его скриптово заспаунишь по секции, то имя у него будет не "esc_wolf", а какое-нибудь "esc_wolf12345".

Ссылка на комментарий

Предмет в игре один.  Как мне удалить этот предмет из игры?

Секция уникальная? Вот как @dsh говорит:

function del_item()
	local obj
	for i=1,65534 do
		obj = alife():object(i)
		if obj and obj:section_name() == "секция_предмета" then -- ищем предмет
			alife():release(obj) -- удаляем
			break -- прерываем цикл
end end end
Изменено пользователем Eugen81
 

10.png

Ссылка на комментарий

@ins33, а какая у тебя таблица? Непрерывная последовательность или ассоциативный массив? И вообще как-то странно все у тебя и непонятно.

В первом случае можно сделать так:

for i, v in ipairs(tbl) do
  if v:find("_delete") then
    table.remove(tbl, i)
  end
end
Во втором - так (если ключи - это строки)

for k in pairs(tbl) do
  if k:find("_delete") then
    tbl[k] = nil
  end
end

table.remove(obj, "_flame") --> bad argument #1 to 'remove' (table expected, got userdata)

Для table.remove первым аргументом передается таблица (последовательность), вторым - индекс, по которому надо удалить поле со смещением последующих индексов. Ты же передаёшь серверный объект и строку, для чего это вообще делается - не ясно.

Почитай документацию по Луа.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Я бы посоветовал, всем, никогда не удалять из таблицы изнутри цикла по ipairs. Во избежание граблей. Очень, очень плохая практика. Да, я знаю, что я Капитан Очевидность.

  • Полезно 1
Ссылка на комментарий

Не, на Капитана это не тянет. По тому что сейчас прибегут с новейшей сборкой lua 6.666, и будут доказывать, что в ней все работает как надо.

 

Тем более что граблей здесь более чем одни, так что и с pairs() экспериментировать тоже не стоит.

 

 

upd: мда, вот буквально сейчас переписываю очередное гениальное:

 

for k, v in pairs( t ) do v:update() end

 

blabla:update()

if ... then t[self.object:id()] = nil end

end

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

upd: мда, вот буквально сейчас переписываю очередное гениальное:

А что не так? Луа запрещает только добавлять новые элементы во время итерирования по pairs, изменять и удалять можно.
Ссылка на комментарий

Который именно ? Сферический в вакууме ? Так в том и со взятием размера все хорошо после вообще любых операций.

 

И где в нем написано про то, в какой именно момент и что он меняет в таблице ?

Ссылка на комментарий

t=nil не удаляет поле, а изменяет его значение (хоть и nil, но тоже ведь значение)
А вот table.remove выполняет pop, т.е. именно удаляет поле.
 

Или я вообще не понял о чем тут идет речь?

Изменено пользователем Nazgool
Ссылка на комментарий

@Nazgool,

с точки зрения стандарта Lua запись nil в поле эквивалентно его удалению. Детали реализации могут отличаться, но это уже поведение стандартом никак не регламентируемое.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Ссылка на комментарий

А в какой момент срабатывает уборщик, который, собственно, и удаляет ?

Или ВО ВСЕХ без исключения реализациях lua все эти nil в таблицах лежат пожизненно ?

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...