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

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

Тема для обсуждения скриптов всего и всех в серии игр 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
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

@AndreySol, Я нашел уже готовый скрипт спавна аномалий. Вот и подумал, а почему бы и Радиацию рандомно не спавнить? А про модуль Артоса читал в свое время, но ничего тогда не понял :)

Сталкер - наше всё!

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

@aka_sektor, чтобы без "я тебя спас и в благородство играть не буду?". Вот так попробуй

active = mob_trader@new_idle1

  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

@aka_sektor, это рестриктор в бункере, на месте спавна ГГ.

 

Вот этот: trader_zone_task

Скрытый текст

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = {-esc_kill_gunslinger} nil %+esc_kill_gunslinger =run_postprocess(agr_u_fade)%

Так что нужно его либо удалять, либо править спавн.

Удалить можно так:

Скрытый текст

local obj = alife():object("trader_zone_task")
if obj then
	alife():release(obj, true)
end

 

 

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

12 часов назад, AndrewMor сказал:

А про модуль Артоса читал в свое время, но ничего тогда не понял

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

9 часов назад, naxac сказал:

Удалить можно так

Это куда предлагаешь прописать этот код?

Как убрать рандом после воскрешения НПС? Имеется в виду фишка. когда вылеченный тобою НПС либо другом становится, либо врагом. Где копаться, подскажите пожалуйста.

@aka_sektor, в net_spawn актёра можно (в bind_stalker.script).

 

@_Sk8_AsTeR_, ни в одной из частей игры такого нет, что хоть за мод?

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Здрасьте.

 

Существует ли в явном виде переменная, в которой хранится текущий вес предметов в инвентаре?

Есть ли способ чтения текущего веса, кроме прямого перебора или специальной функции в X-Ray Extensions?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

20 часов назад, AndreySol сказал:

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

Давно уже читал, но на тот момент не разбирался. А сейчас видать настал сей момент, когда все ж таки придется разбираться. Всему свое время, походу, мое время само ко мне пришло...

Сталкер - наше всё!

@naxac, если я правильно понял так:

 

 


function actor_binder:net_spawn(data)
	printf("actor net spawn")		

	level.show_indicators()

	self.bCheckStart = true
	self.weapon_hide = false -- ñïðÿòàíî èëè íåò îðóæèå ïðè ðàçãîâîðå.
	weapon_hide = false -- óñòàíàâëèâàåì ãëîáàëüíûé äåôîëòîâûé ôëàã.

	if object_binder.net_spawn(self,data) == false then
		return false
	end

	db.add_actor(self.object)
	
	if self.st.disable_input_time == nil then
		level.enable_input()
	end

	self.weather_manager:reset()
--	game_stats.initialize ()

	if(actor_stats.add_to_ranking~=nil)then
		actor_stats.add_to_ranking(self.object:id())
	end

	--' Çàãðóæàåì íàñòðîéêè äðîïà
	death_manager.init_drop_settings()

	return true

	--' Удаляем рестриктор в бункере Сидоровича,
	--' который затемняет экран
local obj = alife():object("trader_zone_task")
if obj then
	alife():release(obj, true)
end
end

 

 

UPD: похоже что нет...

 

 


Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ...alker shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)

 

 

UPD2: вот так не вылетает, но затемнение осталось.

 

 


function actor_binder:net_spawn(data)
	--' Удаляем рестриктор в бункере Сидоровича,
	--' который затемняет экран
local obj = alife():object("trader_zone_task")
if obj then
	alife():release(obj, true)
end

	printf("actor net spawn")		

	level.show_indicators()

	self.bCheckStart = true
	self.weapon_hide = false -- спрятано или нет оружие при разговоре.
	weapon_hide = false -- устанавливаем глобальный дефолтовый флаг.

	if object_binder.net_spawn(self,data) == false then
		return false
	end

	db.add_actor(self.object)
	
	if self.st.disable_input_time == nil then
		level.enable_input()
	end

	self.weather_manager:reset()
--	game_stats.initialize ()

	if(actor_stats.add_to_ranking~=nil)then
		actor_stats.add_to_ranking(self.object:id())
	end

	--' Загружаем настройки дропа
	death_manager.init_drop_settings()

	return true
end

 

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

@aka_sektor, попробуй так:

Скрытый текст

        if not has_alife_info("твой инфо") then
         for a=10,65535,1 do
          local obj=alife():object(a)
          if obj and string.find(obj:name(),"trader_zone_task") then
           alife():release(obj,true)
          end
         end
         db.actor:give_info_portion("твой инфо")
        end    

 

Сталкер - наше всё!

@aka_sektor, наверное, рестриктор успевает сработать,, т.к. клиентский объект живет ещё какое-то время после удаления серверного. Попробуй в __init этот код запихать. Хотя, по-моему, проще его из спавна в ручную вырезать, все равно же новую игру начинаешь...

  • Согласен 2

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

В 09.06.2019 в 04:27, naxac сказал:

ни в одной из частей игры такого нет, что хоть за мод?

Соль да дмх...

Понимаю что ДМХ тут не обсуждается, но надеялся что это фишка соли такая, даже читал о ней в описании. Но не нашел куда копать

Всем привет! Появилась необходимость распарсить xml. Единственный наиболее удобный для меня вариант, который вспоминается это LuaXML. В версии xrLuaFix для ТЧ я так понял нет функции require, тогда как быть?

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

@_Sk8_AsTeR_, передача аптечки раненому происходит в файле dialogs.script, функция transfer_medkit. Там же идёт проверка на отношение нпс и ГГ, и если они враги, то в xr_wounded.help_wounded запускается таймер, по истечении которого вылеченный нпс с некоторой вероятностью может снова стать враждебным к ГГ. У тебя, видимо, что-то с проверкой в dialogs.transfer_medkit не так.

Изменено пользователем naxac
  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

Кажется давно есть в моде Paradise Lost вылет при загрузке сохранения, почему-то именно на уровне Кордон. Имеет вид:

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description : <no expression>
[error]Arguments : LUA error: ...shadow of chernobyl\gamedata\scripts\xr_logic.script:1195: attempt to index local 'obj' (a nil value)

Открываю скрипт xr_logic, нахожу строку 1195, там следующая функция:

function pstor_retrieve(obj, varname, defval)
	local npc_id = obj:id()
	
	if db.storage[npc_id].pstor ~= nil then
		local val = db.storage[npc_id].pstor[varname]
		if val ~= nil then
			return val
		end
	end
	if defval ~= nil then
		return defval
	end
	return nil
--'	abort("xr_logic: pstor_retrieve: variable '%s' does not exist", varname)
end

Ругается, на вторую строчку:

	local npc_id = obj:id()

Что же с ней не так? Какая-то ошибка в функции?

 

UPD: вот возможно похожий вылет: https://www.amk-team.ru/forum/topic/8230-cop-kovyryaemsya-v-faylah/?do=findComment&comment=1031683

Дело якобы в логике какого-то NPC.

UPD2: вот ещё: https://www.amk-team.ru/forum/topic/8806-cop-kvesty/?do=findComment&comment=369302

Тут уже вроде из-за квеста.

UPD3: ещё вариант: https://www.amk-team.ru/forum/topic/5525-soc-kovyryaemsya-v-faylah/?do=findComment&comment=855858

Вроде есть объяснение, но функция другая: 

В 21.06.2014 в 00:22, AndreySol сказал:

в скрипте xr_logic в 126-й строке локальная переменная st равна nil. Открывай в редакторе, который показывает нумерацию строк, ищи 126-ю и гляди че там за nil получился. В оригинальном ТЧ эта строка находится в ф-ции configure_schemes, значит глюк связан с гулагами\логикой НПСов.

 

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

@aka_sektor, тут можно вывести в лог имя переменной (varname) и по нему уже поискать по скриптам, откуда ноги растут.

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

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

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

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

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

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

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

Войти

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

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

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