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

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

@aka_sektor, наверное, имеешь в виду, разблокированы? Тогда так

[logic]

active = ph_door@closed
Изменено пользователем naxac
  • Спасибо 1
  • Согласен 1

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

naxac.gif

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

@naxac блин, думал только дверью обойтись, но если её пробежать, голос Сидоровича в башке.

Может подскажешь, что в логике Сидоровича изменить, чтобы пропустить туториал?

 

[logic]
active = {+esc_trader_hello_played} mob_trader@new_idle1, mob_trader@new_start_wait
on_trade = mob_trade@new
trade = misc\trade_trader.ltx

; ------------------------------------------------------------------------------------------------------
; ÑÒÀÐÒ
; ------------------------------------------------------------------------------------------------------
; Æäåì íåìíîãî
[mob_trader@new_start_wait]
anim_global = chair_hack_idle
on_timer = 5000| mob_trader@new_start_intro1
can_talk = false
tip_text = 

;Ïîäâèãàåìñÿ ê èãðîêó
[mob_trader@new_start_intro1]
anim_global = chair_hack_to_desk
on_signal = animation_end| mob_trader@new_start_intro2 %+esc_trader_hello_played%
can_talk = false
tip_text =

;Ïåðâàÿ ôðàçà "ÿ òåáÿ ñïàñ..."
[mob_trader@new_start_intro2]
anim_global = first_phrase
anim_head	= first_phrase
sound_phrase = trader_monolog1
on_signal = animation_end| mob_trader@new_start_intro3
can_talk = false
tip_text =

; Æäåì íåìíîãî, âêëþ÷àåì óïðàâëåíèå
[mob_trader@new_start_intro3]
anim_global = desk_idle
tip = tips_esc_trader_how_to_talk
on_info = {=talking} mob_trader@new_idle1
on_timer = 5000 | mob_trader@new_start_intro4


; Ãîâîðèì âòîðóþ ôðàçó (÷òî ñòîèøü? ïîäõîäè)
[mob_trader@new_start_intro4]
anim_global = desk_talk
anim_head = normal
sound_phrase = trader_come_here2
on_signal = sound_phrase_end | mob_trader@new_idle1
;on_info = {=talking} mob_trader@new_idle1 ; îáðûâàòü ôðàçó
on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} mob_trader@new_bye %+esc_trader_bye_played%

;----------------------------------
;------------- Idle ---------------
;----------------------------------

;Îñíîâíîé idle (1) - çà ñòîëîì
[mob_trader@new_idle1]
anim_global = desk_idle
on_signal = animation_end| {~25} mob_trader@new_idle1_to_idle3, {~50} mob_trader@new_idle1_to_idle5, {~75} mob_trader@new_idle1_to_idle2, mob_trader@new_idle1_to_idle1
on_info = {=talking} mob_trader@new_idle1_to_idle3
on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} mob_trader@new_bye %+esc_trader_bye_played%
on_actor_dist_ge_nvis2 = 12 | mob_trader@new_wait

; Idle (2) - ïî äèàãîíàëè
[mob_trader@new_idle2]
anim_global = diagonal_idle
on_signal = animation_end| {~25} mob_trader@new_idle2_to_idle3, {~50} mob_trader@new_idle2_to_idle4, {~75} mob_trader@new_idle2_to_idle1, mob_trader@new_idle2_to_idle2
on_info = {=talking} mob_trader@new_idle2_to_idle3
on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} mob_trader@new_bye %+esc_trader_bye_played%
on_actor_dist_ge_nvis2 = 12 | mob_trader@new_wait

; Idle (3) - îòêèíóâøèñü íà ñïèíêó
[mob_trader@new_idle3]
anim_global = chair_hack_idle
on_signal = animation_end| {~30} mob_trader@new_idle3_to_idle2, {~70} mob_trader@new_idle3_to_idle1, mob_trader@new_idle3_to_idle3
on_info = {=talking} mob_trader@new_talking
on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} mob_trader@new_bye %+esc_trader_bye_played%
on_actor_dist_ge_nvis2 = 12 | mob_trader@new_wait

; Idle (4) - çà êîìïüþòåðîì
[mob_trader@new_idle4]
anim_global = compute_idle
on_signal = animation_end| {~40} mob_trader@new_idle4_to_idle2, mob_trader@new_idle4_to_idle4
on_info = {=talking} mob_trader@new_idle4_to_idle2
on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} mob_trader@new_bye %+esc_trader_bye_played%
on_actor_dist_ge_nvis2 = 12 | mob_trader@new_wait

; Idle (5) - ÷èòàåò
[mob_trader@new_idle5]
anim_global = listen_idle
on_signal = animation_end| {~45} mob_trader@new_idle5_to_idle1, mob_trader@new_idle5_to_idle5
on_info = {=talking} mob_trader@new_idle5_to_idle1
on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} mob_trader@new_bye %+esc_trader_bye_played%
on_actor_dist_ge_nvis2 = 12 | mob_trader@new_wait
;----------------------------------
;--------   Àâòîïåðåõîäû   --------
;----------------------------------

; Ñòîë - ñòîë (ïðîìåæóòî÷íàÿ)
[mob_trader@new_idle1_to_idle1]
anim_global = desk_idle
on_signal = animation_end| mob_trader@new_idle1

; Äèàãîíàëü - äèàãîíàëü (ïðîìåæóòî÷íàÿ)
[mob_trader@new_idle2_to_idle2]
anim_global = diagonal_idle
on_signal = animation_end| mob_trader@new_idle2

; Ñïèíêà - ñïèíêà (ïðîìåæóòî÷íàÿ)
[mob_trader@new_idle3_to_idle3]
anim_global = chair_hack_idle
on_signal = animation_end| mob_trader@new_idle3

; Êîìïüþòåð - êîìïüþòåð (ïðîìåæóòî÷íàÿ)
[mob_trader@new_idle4_to_idle4]
anim_global = compute_idle
on_signal = animation_end| mob_trader@new_idle4

; ×èòàåò - ÷èòàåò (ïðîìåæóòî÷íàÿ)
[mob_trader@new_idle5_to_idle5]
anim_global = listen_idle
on_signal = animation_end| mob_trader@new_idle5

;----------------------------------
;----- Ïåðåõîäû  ìåæäó idle-ìè ----
;----------------------------------

; Äèàãîíàëü - êîìïüþòåð
[mob_trader@new_idle2_to_idle4]
anim_global = diagonal_to_compute
on_signal = animation_end| mob_trader@new_idle4

; Êîìïüþòåð - äèàãîíàëü
[mob_trader@new_idle4_to_idle2]
anim_global = compute_idle_to_diagonal
on_signal = animation_end| mob_trader@new_idle2

; Äèàãîíàëü - ñïèíêà
[mob_trader@new_idle2_to_idle3]
anim_global = diagonal_to_chair_hack
on_signal = animation_end| {=talking} mob_trader@new_talking, mob_trader@new_idle3

; Ñïèíêà - äèàãîíàëü
[mob_trader@new_idle3_to_idle2]
anim_global = chair_hack_to_diagonal
on_signal = animation_end| mob_trader@new_idle2

; Ñòîë - ñïèíêà
[mob_trader@new_idle1_to_idle3]
anim_global = desk_to_chair_hack
on_signal = animation_end|{=talking} mob_trader@new_talking, mob_trader@new_idle3

; Ñïèíêà - ñòîë
[mob_trader@new_idle3_to_idle1]
anim_global = chair_hack_to_desk
on_signal = animation_end| mob_trader@new_idle1

; Ñòîë - äèàãîíàëü
[mob_trader@new_idle1_to_idle2]
anim_global = desk_to_diagonal
on_signal = animation_end| mob_trader@new_idle2

; Äèàãîíàëü - ñòîë
[mob_trader@new_idle2_to_idle1]
anim_global = diagonal_to_desk
on_signal = animation_end| mob_trader@new_idle1

; Ñòîë - ÷èòàåò
[mob_trader@new_idle1_to_idle5]
anim_global = desk_to_listen
on_signal = animation_end| mob_trader@new_idle5

; ×èòàåò - ñòîë
[mob_trader@new_idle5_to_idle1]
anim_global = listen_to_desk
on_signal = animation_end| mob_trader@new_idle1


;--------------------------------------
;------------- Ðàçãîâîð ---------------
;--------------------------------------

[mob_trader@new_talking]
anim_global = chair_hack_talk
anim_head = normal
on_info = {!talking} mob_trader@new_idle3

;--------------------------------------
;------------ Òîðãîâëÿ ----------------
;--------------------------------------

[mob_trade@new]
anim_global = chair_hack_idle
on_info = {=trading =trade_exchanged} mob_trader@new_trade_exchanged
on_info2 = {!trading =trade_exchanged} mob_trader@new_trade_good
on_info3 = {!trading !trade_exchanged} mob_trader@new_trade_bad

[mob_trader@new_trade_bad]
;anim_global = diagonal_talk
anim_global = chair_hack_idle
anim_head = angry
sound_phrase = trader_bad_trade
on_signal = sound_phrase_end | mob_trader@new_idle2
on_actor_dist_ge_nvis = 12 | mob_trader@new_wait

[mob_trader@new_trade_exchanged]
;anim_global = diagonal_talk
anim_global = chair_hack_idle
anim_head = normal
sound_phrase = trader_exchanged
on_signal = sound_phrase_end | mob_trader@new_idle2
on_actor_dist_ge_nvis = 12 | mob_trader@new_wait

[mob_trader@new_trade_good]
;anim_global = diagonal_talk
anim_global = chair_hack_idle
anim_head = good
sound_phrase = trader_good_trade
on_signal = sound_phrase_end | mob_trader@new_idle2
on_actor_dist_ge_nvis = 12 | mob_trader@new_wait


;-------------------------------------
;---------- Ïðèâåòñòâèÿ --------------
;-------------------------------------

[mob_trader@new_hello]
anim_global = hello
anim_head = normal
sound_phrase = trader_hello_what_have_you_got
on_signal = animation_end | mob_trader@new_idle2

[mob_trader@new_bye]
on_actor_dist_ge_nvis = 12 |mob_trader@new_wait
anim_global = hello
anim_head = normal
sound_phrase = trader_bye
on_signal = animation_end | mob_trader@new_wait

[mob_trader@new_wait]
anim_global = diagonal_idle_short
on_actor_dist_le_nvis = 3 | {-esc_trader_hello_played} mob_trader@new_hello %+esc_trader_hello_played%
on_actor_dist_ge_nvis = 5 | {-esc_trader_bye_played +esc_trader_hello_played} mob_trader@new_bye %+esc_trader_bye_played%
on_actor_dist_ge_nvis2 = 12    | %-esc_trader_hello_played -esc_trader_bye_played%

 

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

Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB

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

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

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

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

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

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

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

active = mob_trader@new_idle1

  • Спасибо 1

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

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

naxac.gif

Ссылка на комментарий
12 часов назад, AndrewMor сказал:

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

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

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

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

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

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

 

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

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

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

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

Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB

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

@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

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

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

Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB

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

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...