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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий

 

 

как стравить двух НПС, а то они не атакуют друг друга

Чудес не бывает - если у них группировки(community) враждебные друг-другу, то они будут атаковать друг-друга. Ищи ошибку, или в профилях одинаковую группировку им прописал, или в логике есть запрет на атаку.

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

А не существует ли "универсального" скрипта для удаления пустых пачек патронов из инвентаря? Не сильно надо, но вдруг уже выкладывали...

http://images.gameru.net/image/direct/feeb3c7175.jpg

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

 

 

для удаления пустых пачек патронов из инвентаря?

Это похоже в каком-то моде накрутили, что пачки имеют 0 патронов ? В оригинале такого вроде не замечал...

А насчет скрипта - так есть ведь древний как ... не важно что, скрипт перепаковки не полных пачек. Он как раз должен такие пустышки прибирать. К примеру этот.

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

 

 

Это похоже в каком-то моде накрутили, что пачки имеют 0 патронов ? В оригинале такого вроде не замечал...

Кстати, да. Dunin_ammo как раз здесь используется, чтобы на пояс полные пачки вешались. Раз в оригинале такого нет, то, стало быть, мелкий побочный эффект от него. Вопрос снимается.

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

Раз в оригинале такого нет, то, стало быть, мелкий побочный эффект от него.

Ни в оригинале, ни с этим скриптом такого бага я не видел.

Смотрите спавн и какое там количество патронов прописано.

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

Давно мне голову забивает одна мысль. Можно ли как-то менять свойства у артефактов? А точнее значение этих самых свойств?

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

@dsh, Спасибо. Я бы рад. Но все эти прелести для ТЧ. Это я забыл указать платформу, извините. Платформа ЗП.

 

P.s Хочется рандомных свойств. А секции плодить не хочется.

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

Забавный эффект:

 

class "my_cls"

function my_cls:__init() end

 

function my_func( st, a ) st.actions = { [a] = true } end

 

 

my_func( t, my_cls() ) - таблица разрушена, при том, что

local a = my_cls(); my_func( t, a ) - работает.

 

Самое забавное, что происходит только в начале игры, и проявляется вылетом

0023:100046A6 xrSound.dll, CSound_manager_interface::CSound_manager_interface()

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

Что-то я не понял... Так все-таки, в ТЧ можно удалять из апдейта объекта этот объект ?

В какой-то момент фокус устойчиво срабатывает. Но именно в какой-то.

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

Забавный эффект:

my_func( t, my_cls() ) - таблица разрушена, при том, что

local a = my_cls(); my_func( t, a ) - работает.

Вроде обычный эффект - выход переменной из области видимости.

Вот так тоже не должно работать:

do local a = my_cls(); my_func( t, a ) end

Что-то я не понял... Так все-таки, в ТЧ можно удалять из апдейта объекта этот объект ?

В какой-то момент фокус устойчиво срабатывает. Но именно в какой-то.

Можно конечно. При удалении удаляется только серверный объект, клиентский, из апдейта которого ты удаляешь, вполне себе еще жив. Он удалится только к следующему апдейту.

Не срабатывать может из-за того, например, что перед удалением сохранили ссылку на серверный и пытаются с ней работать после удаления.

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

 

 

Чудес не бывает - если у них группировки(community) враждебные друг-другу, то они будут атаковать друг-друга. Ищи ошибку, или в профилях одинаковую группировку им прописал, или в логике есть запрет на атаку.

Да, дело было в community. "freedom" атакует "dolg", но атаковать группировку "bandit" не хочет.

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

 

 

"freedom" атакует "dolg", но атаковать группировку "bandit" не хочет

 

Во, как раз еще помню свое удивление, когда с этим столкнулся. В game_relations.ltx поправь отношения бандитов и свободы, а то они там нейтральны друг к другу. Если тебе именно это нужно.

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

Во, как раз еще помню свое удивление, когда с этим столкнулся. В game_relations.ltx поправь отношения бандитов и свободы, а то они там нейтральны друг к другу. Если тебе именно это нужно.

Спасибо! То что нужно.

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

Вроде обычный эффект - выход переменной из области видимости.

Где там из области видимости ? Обработка внутри выражения должна идти справа налево.

А вот 2 разных выражения - здесь - по порядку.

 

клиентский, из апдейта которого ты удаляешь, вполне себе еще жив.

Однако вывода в лог после alife():release() уже нет. То есть, объект таки помре.

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

Где там из области видимости ? Обработка внутри выражения должна идти справа налево.

А вот 2 разных выражения - здесь - по порядку.

my_func( t, my_cls() ) - таблица разрушена, при том, что

Это строчка равносильна такому:

do 
  local temp = my_cls()
  my_func(t, temp)
end
После вызова my_func временный объект удалится и в таблице будет ссылка на удаленный объект

 

local a = my_cls(); my_func( t, a )

Здесь а будет жить до следующего end. И какое-то время его даже можно будет получить из таблицы.

 

Однако вывода в лог после alife():release() уже нет. То есть, объект таки помре.

Если вывода нет - значит завис биндер. А биндер может зависнуть в том числе из-за неправильного вызова alife():release()

 

И там и там хорошо бы тестовые примеры для чистого ТЧ.

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

После вызова my_func временный объект удалится и в таблице будет ссылка на удаленный объект

Думаю, сборщик мусора не отупел до того, чтобы удалять объект, который используется как ключ в таблице.

Тов. @Dennis_Chikin чего то недоговаривает, код рабочий:

class "key_obj"

function key_obj:__init(name)
    self.name = name
end

local function log(text)
    get_console():execute("~~~" .. string.gsub(text, " ", "_"))
end

function set_act(t, a)
    t.actions = { [a] = true }
end

function test()
    local mtable = {}
    set_act(mtable, key_obj("key"))
    
    for obj, _ in pairs(mtable.actions) do
        log(obj.name)
    end
end
Добавив в start_game_callback вывел

Сервер: Старт...

! Unknown command: ~~~key

Так о каком начале игры идет речь, о каком объекте и таблице? Может его движок кто-то удалить успевает. А может еще какие танцы с бубном есть в коде, а мы тут на область видимости пальцами тыкаем.

ТЧ 1.0004. SAP и Trans mod

github

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

Друзья, я новичок в скриптописании. Подскажите, кому не сложно, как скриптом сделать проверку на то, что актору был нанесен хит и тип хита woundscale? На форуме очень много информации, все пересмотреть не удается, а поиск ничего толкового не выдает, либо я не умею пользоваться им))

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

Думаю, сборщик мусора не отупел до того, чтобы удалять объект, который используется как ключ в таблице. Тов. Dennis_Chikin чего то недоговаривает, код рабочий:

Похоже, что да, таки рабочий.

Проблема откуда-то еще. НИ - имелось в виду именно НИ: то есть, с сэйва - работает. А вот "новая игра" - вылеты идут примерно в 3-х случаях из 10.

 

 

Касательно alife():release(), то вот:

 

function se_respawn:execute()
	local sim = alife()
	local game_time,idle_spawn,idle_time,num,prob,respawn_time,shift_time,timer
	-- проверим, условия автоудаления
	if self.tab_auto_dell then
		self.auto_dell = xr_logic.pick_section_from_condlist(db.actor_proxy,self,self.tab_auto_dell) ~= nil
	end
	-- если условия выполнены и есть флаг спавна - очистим таблицы и удалим респавнер
	if self.auto_dell and self.first_spawned then
		self.spawned_obj = {}
		respawners[self:name()] = nil
		sim:release(self,true)
		return
	end

 

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

Уважаемые знающие, вопрос о class_registrator.script и иже с ними. Хочу добавить свой серверный класс для работы с лампами, ТЧ 1.0006 НС АЕМ. Вот код из регистратора:

1) cs_register (object_factory, "hanging_lamp", "aem_lights.se_lamp", "AEM_LAMP", "aem_lamp")

2) cs_register (object_factory, "hanging_lamp", "se_objects.se_hanging_lamp", "O_HLAMP", "lights_hanging_lamp")
2-й пункт - это то что я хочу добавить. 
Проблема в том что se_objects.se_hanging_lamp биндится только в случае если 1-й пункт заккоментирован. т.е. я не могу клиентский класс (hanging_lamp) связать с разными типами (AEM_LAMP и O_HLAMP) и секциями (aem_lamp и lights_hanging_lamp) и серверными классами? когда я делаю alife:create() - я ведь создаю "по секции" а не по клиентскому классу. Подскажите, пожалуйста, где ошибка в моих рассуждениях? 
Изменено пользователем Winsor
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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