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

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

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


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

  Информация (Показать)

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

 

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

  Читать рекомендуется. (Показать)

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


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

Ох опять я стал похож на потребителя, который хочет все готовое :)

Если я в посте прошу "разжевать" не упоминая при этом о собственных попытках разобраться - это еще не значит что я их не делал. Просто приберег результаты для дальнейшей полемики.

  Мои танцы с бубном (Показать)

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Совершенно аналогичная ситуация. Скрипты, функции которых вызываются из xml-тегов диалогов, и больше нигде не вызываются (как и сам скрипт), тем ни мение они все работает, хотя до вызова из диалога попасть в _G таблицу не могли...

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Мда-а-а, аргументация "а вот у меня работает, хотя и не знаю почему" - рулить ... Ну так что волнуетесь? Моддьте далее ... ;-)

 

Добавлено через 4 мин.:

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

На сим пока предлагаю прекратить пинг-понг "работает - не работает".

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Прошу помощи! У меня не работает рандомная погода! Погода постоянная - предвыбросная, как написано в скрипте amk_mod. Я поковырялся и выяснил, что тупо не запускается game.start_tutorial("restore_sun"), т.е. функция, отвечающая за смену погоды на рандомную после перезагрузки.

 

Вызывал даже вручную, напрямую с помощью скрипта ui_main_menu - и после перезагрузки всё опять слетает на предвыбросную.

 

Очень прошу помощи! Уже сколько пытаюсь разобраться - и ничего не получается...

 

Просьба не привносить в моддинг и тем более в топике "Школа ..." принципы натурального обмена "ты мне - я тебе".

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

--/Artos

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

kratos888, сосершенно непонятно, используется ли тобою собственно AMK-mod или только отдельные файлы взяты.

Если отдельные - то требуется касательно твоей проблемы еще взглянуть в gamedata\config\ui\ui_movies.xml (см. <restore_sun>) откуда собственно и запускается amk_mod.restore_sun.

Ну а чтобы вызывалась game.start_tutorial("restore_sun") - требуется из amk_mod.script на старте игры запускать check_spawn() ... что делается из amk.script вызовом mod_call("check_spawn") из on_game_load().

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Artos, "большое тебе человеческое спасибо...", я и не знал, что можно вызвать через xml - смотрел в основном обычные туториалы в _g скрипте, и в конфигах по информации к энциклопедии...
Ссылка на комментарий

У меня сделать сценарий.

 

но в этом сценарии любой ложный или отсутствует, но что?

 

  code (Показать)
Изменено пользователем ColR_iT
Ссылка на комментарий

olaf1

Найди отличие

111 self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point)

111 self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point))

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

HellRatz

А что тут непонятного?

В файле xr_gulag.script, в строке 1219 переменная 'strn' равна nil.

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

И почему она равна nil. У нас твоих кодов нет, поэтому прийдется тебе самостоятельно это сделать.

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

i have correct the script.

local npc = {

mar_clear_sky_respawn_1 = mar_clear_sky_respawn_1_counter
,
mar_clear_sky_respawn_2 = mar_clear_sky_respawn_2_counter
,
mar_clear_sky_respawn_3 = mar_clear_sky_respawn_3_counter
,
}

local npc_data = {
mar_clear_sky_respawn_1 = -61.996055603027, 0.92057931423187, 293.67742919922, game_vertex_id = 3402, level_vertex_id = 106182
,
mar_clear_sky_respawn_2 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134
,
mar_clear_sky_respawn_3 = -51.345394134521, 1.1859278678894, 296.54559326172, game_vertex_id = 3402, level_vertex_id = 114134,
}


local npc_respawn_counter = {

mar_clear_sky_respawn_1_counter = 3
,
mar_clear_sky_respawn_2_counter = 5
,
mar_clear_sky_respawn_3_counter = 2
,
}

local NPC = nil
function Start()
if NPC == nil then
	NPC = Respawn_NPC()
end
return NPC
end

class "Respawn_NPC"

function Respawn_NPC:__init()
self.init_done = false
self.counter_im_script = nil
self.respawn_npc_tabel = nil
self.respawn_counter = nil
self.respawn_counter_name = nil
self.respawn_npc = nil
self.respawn_npc_point = nil

self.respawn_timer = 0
if level.name() ~= "marsh" then
	self.enabled = false
else
	self.enabled = true
	self:LoadConfig()
end
self.init_done = true
end



function Respawn_NPC:__finalize()
self.counter_im_script = nil
self.init_done = nil
self.enabled = nil
self.respawn_counter = nil
self.respawn_npc_tabel = nil
self.respawn_counter_name = nil
self.respawn_npc = nil
self.respawn_npc_point = nil
end



function Respawn_NPC:LoadConfig()
	local npc_1 = npc
	local npc_respawn_counter_1 = npc_respawn_counter
	local npc_spawn_data_1 = npc_spawn_data
	self.respawn_counter = {}
	self.respawn_counter_name = {}
	self.respawn_npc = {}
	self.respawn_npc_point = {}

	for k,v in pairs ("npc_1")do
		self.respawn_npc(k)
		self.respawn_counter_name(v)
	end
	self.counter_im_script = respawn_npc.."_counter"
	self.counter_im_script = 0
	for k,v in pairs("npc_respawn_counter_1") do 
			if k == respawn_counter_name then
			self.respawn_counter(v)
		end    
	end

	for k,v in pairs("npc_spawn_data_1") do 
		if k == respawn_npc then
			if counter_im_script < respawn_counter then
			self.respawn_npc_point(v)
			else 
			return
			end					
		end
	end
end




function Respawn_NPC:Timer()
if respawn_timer == false then 
if respawn_timer == 0 then 
             respawn_timer = level.get_time_hours() + math.random(3, 4) 
             if respawn_timer > 23 then respawn_timer = respawn_timer - 24 end
       end
if db.actor:alive() then
           if level.get_time_hours() > respawn_timer then
               respawn_timer = 0
	respawn_timer_a = true
	end
end
end


function Respawn_NPC:Spawn_NPC(respawn_counter_ltx, respawn_npc_point)
if respawn_timer_a == true then
	if respawn_timer == 0 then
		if not respawn_counter and not respawn_npc_point then
			return false
		end
	end
	self.respawn_npc_tabel = {}
	if npc_respawn_counter < respawn_counter then
		self.spwan = alife():create(respawn_npc, vector():set(respawn_npc_point))
		respawn_npc_tabel[spwan.id] = true
	end
   end
end




function Respawn_NPC:Counter(respawn_npc_tabel)
if not respawn_npc_tabel then
return false
end
local obj,count,tbl_cnt = nil,0,#respawn_npc_tabel 
for k,v in pairs(respawn_npc_tabel) do
obj = alife():object(k)
if obj == nil then
v = nil 
counter_im_script = counter_im_script - 1  
end
end
if counter_im_script < respawn_counter  then
	respawn_timer = false 
   	respawn_timer = 0   
end
end
end


 

 

but when i start the game it comming a crash.

 

FATAL ERROR

[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...w of chernobyl\gamedata\scripts\resapwan_npc2.script:128: bad argument #1 to 'pairs' (table expected, got string)


stack trace:

 

 

but i don´t know what i have yet to do.

 

can anyone help me?

 

thank you

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

olaf1

Your script not correct! Use some lua checker.

For instance. You write :

...

for k,v in pairs("npc1") do

...

Type "npc1" is string. But must be a table.

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

when i use the local tabel name is it then correct?

 

i have use this

 

  Раскрывающийся текст (Показать)
Ссылка на комментарий

what mean you i donґt understand this.

sorry.

Сообщение от модератора ColR_iT
The function pairs must take as its argument the name of the table, not a string.

Добавлено через 24 мин.:

when i use it not in a function then i works but when i use it in a function it donґt works but why it donґt work?

Сообщение от модератора ColR_iT
Here in this line:
for k,v in pairs ("npc")do

parameter npc should be written without quotation marks.

And so everywhere.

I advise you read the articles on the syntax of the language Lua, here: http://www.lua.org/

Добавлено через 38 мин.:

when i use this

  code (Показать)
Изменено пользователем ColR_iT
Ссылка на комментарий

(оффтопик) "Ох и тяжкая эта работа - из болота тащить бегемота"©Чуковский

;-)

[x]

 

Поддержу. Думаю не имеет смысла продолжать переписку с нашим иностранным гостем. Не в обиду никому.

ColR_iT

Изменено пользователем ColR_iT

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

у меня вопрос по логике: в схеме walker обязательно должны присутствовать look_points?

Т.е. вот так допустимо?

  тут пример (Показать)

Создаю глобальный мод с новыми локациямЭ

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

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

А вообще - нет. Если НПС находится под логикой walkerа и стоит он на одной точке, то точка look обязательна.

Если же он будет ходить по "кругу" из нескольких точек, то можно и не прописывать. По умолчанию, точка взгляда будет следующая точка пути.

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

Вообщем я разобрался (но ещё не исправил) от чего был движковый вылет при удалении аномалий. В этом и впрям оказались виноваты рестрикторы.

Вылет был из за монстров (оба монстра из оригинала, ставятся через all.spawn, флажок "всегда в онлайне"), когда я глянул их рестрикторы, у обоих в in-рестрикторах была прописана ближайшая (на момент загрузки сейва) к ним грави-аномалия (но расстояние между монстром и аномалией около 10-15 метров). Но что интересно, оба монстра были живы и ходили по локации. Так каким образом к ним могла прописаться эта аномалия в рестрикторы? Возможно аномалия прописывается объекту после нанесения ему хита? (я ещё это не проверил)

И кстати, при удалении этих аномалий, рестрикторы которых были прописаны монстрам, сообщение об ошибке в консоль не выводилось в 97% тестов.

 

И вот ещё вопросцы по поводу рестрикторов...

1) Рестрикторы можно удалить в любой момент, или нужно из какой нибудь скриптовой схемы? В ЧН нашёл интересный скрипт restrictor_manager.script, который как раз из xr_logic вызывается.

2) Рестрикторы достаточно удалить только у онлайн объектов, или они могут быть ещё прописаны объекту который в оффлайне?

3) Какие ещё есть подводные камни, связанные с удалением рестрикторов, которые стоит знать?

 

И ещё извиняюсь за тупой вопрос, но щас уже поздно, штудировать мануалы не хочется. In рестрикторы я так понял НЕ впускают в себя объект, а out наоборот НЕ выпускают. А если out-ов несколько прописано?

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*, ну хоть так, наощупь постепенно начинаешь приближаться к опыту работы с рестрикторами. :-)

 

Вот если бы задался парой общих вопросов, возможно быстрее бы получил ответы на частные.

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

Загляни в конфиги монстров/сталкеров и посмотри параметр SpaceRestrictionSection. Ничего не навевают и название и значения?

 

Ну а теперь не столь для тебя, ты уже почти сам нашел ответы:

Рестрикторы прописываются неписям/монстрам движком при инициализации объекта в онлайне и из логики (собственно restrictor_manager.script развитие этого). Прописываются все(!) имена рестрикторов, тип/класс которых упомянут в конфиге секции непися/монстра. Соответственно тип рестриктора (restrictor_type) учитывается в in- или в out- записи попадет рестриктор.

(упрощенно) Обновляются записи о рестрикторах соответственно по апдейтам, а точнее в ЧН по переключению секций логики.

1. Удалять можешь когда тебе захочется, вот только если рестриктор существует (включен, в онлайне) - то при апдейте иль переключении секций логики, твоя чистка будет опять "замарана".

Менеждер рестрикторов в ЧН/ЗП, более организованно позволяет из секций логики управлять записью/удалением соотв.рестрикторов.

Как, например, организован в Расширенной арене уход в бар Арни (иль его заместителя)? Довольно просто, ему прописан рестриктор арены и держит его внутри здания арены. Когда этот рестриктор удаляется - Арни идет в Бар. Когда приходит время - рестриктор вновь прописывется и Арни возвращается к работе ...

 

2. Ответ на это см. в п.1. Пока объект на локации - ему прописаны рестрикторы данной локации, даже трупу, даже если он a оффлайне.

3. Вся игра, ее алгоритм, скрипты - груда подводных камней и попытаться дать заранее ответ о них ... это как описать все варианты развития шахматной партии. ;-)

 

Ну а штудировать мануалы никогда не позно, ты ведь не на самолет опаздываешь.

'in'- рестрикторы определяют зону куда запрещено объекту входить, 'out'- наоборот, предписывают именно в зоне рестриктора находиться.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

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

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

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

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

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

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

Войти

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

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

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