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

Скриптование


Svoboда

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

Как сделать, чтобы при создании скриншота, в левом верхнем углу экрана писало: "Создан скриншот: имя_скриншота.png"

?

Есть ли функции в игре отслеживающие это?

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

Поделиться этим сообщением


Ссылка на сообщение

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

[logic]
active = ph_door@locked

[ph_door@locked]
locked = true
snd_open_start = trader_door_unlock
on_info = {+esc_trader_can_leave} ph_door@closed %=play_snd(device\door_servomotor)%

[ph_door@closed]
closed = true
locked = false
on_use = ph_door@open %-esc_close_door%
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop

[ph_door@open]
closed = false
locked = false
on_use = ph_door@closed
on_info = {+esc_close_door} ph_door@closed
snd_open_start = trader_door_open_start
snd_close_start = trader_door_close_start
snd_close_stop = trader_door_close_stop

 

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

Поделиться этим сообщением


Ссылка на сообщение

@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

Поделиться этим сообщением


Ссылка на сообщение

@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

Поделиться этим сообщением


Ссылка на сообщение

Кажется давно есть в моде 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

Поделиться этим сообщением


Ссылка на сообщение

Что это значит: https://ap-pro.ru/forum/100-9999-826370-16-1452102986

Цитата

уникальный id объекта который ему назначил движек при спавне.
alife():object(id) - возвращает объект, с таким номером.

?

 

Это какая-то проверка, помогающая найти ID объекта? Если да, то как правильно и куда ещё вписывать, чтобы потом прочесть в логе.

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

Поделиться этим сообщением


Ссылка на сообщение
3 часа назад, Kirgudu сказал:

имея id, можно получить сам объект

Просто там дело было в вылете: https://ap-pro.ru/forum/100-9999-826159-16-1452077092

И вопрос касательно того, что значат цифры 1394:

child registered but not found [1394]

Думал это может story_id а выходит, просто id, который никем кроме движка не указывается.

Отсюда вопрос, как зная id из вылета, найти объект с таким id?

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

Поделиться этим сообщением


Ссылка на сообщение
04.04.2020 в 19:48, Okichi сказал:

в данном случае - никак, потому что этого объекта уже нет.  

Парадокс.:huh:

 

А вот тут писали:

  

17.02.2012 в 00:03, smeh сказал:

LuaChecker-0.3 Может я не правильно пользуюсь?

 

17.02.2012 в 23:01, Artos сказал:

проверяй файлы чекером. Только не тем, который ты упоминал, а "Syntax Checker" (by Gun12), который тебе уже посоветовал Капрал Хикс

 

17.02.2012 в 11:19, Капрал Хикс сказал:

script Syntax Checker - есть на stalkerin.gameru.net. Не виснет на больших скриптах и может скрипты проверять группой.

 

Вот он: http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewtheoned&lid=447

 

Есть ли какое-то принципиальное отличие от чекера представленного в утилите SciTe: https://modfaq.ru/SciTE

(кста, вопрос к @Charsi тоже, он советовал)

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

Поделиться этим сообщением


Ссылка на сообщение

Кто разбирается в логике? Беглым взглядом гляньте:
 

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



[logic@ex_gar_eger]
suitable = {=check_npc_name(ex_gar_eger)}
prior = 200
active = animpoint@ex_gar_eger
level_spot = quest_npc

[animpoint@ex_gar_eger]
cover_name = ex_gar_a1_eger_cover
avail_animations = animpoint_sit_normal
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
gather_items_enabled = false
help_wounded_enabled = true
corpse_detection_enabled = false
invulnerable = false
def_state_moving = assault
on_info = {+ops_quest_taked} %=release_npc%
meet = meet@ex_gar_eger

[meet@ex_gar_eger]
close_anim         = nil
close_victim     = nil
far_anim         = nil
far_victim         = nil
close_distance = 0
far_distance     = 0
close_snd_distance = 3
use             = nil
close_snd_hello = nil
trade_enable = true
allow_break     = false
meet_on_talking = true


 

 

 

Чего неправильно может быть?

Выяснил только, что вылетает из-за строчки:

on_info = {+ops_quest_taked} %=release_npc%

 

Если убрать %=release_npc%, то вылета нет. Это для чего служит?

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

Поделиться этим сообщением


Ссылка на сообщение

@Okichi, да, уже выяснили что её нет. Непонятно почему  её написали, упоминаний во всем инете, кот наплакал.

Использовали в итоге destroy_object

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

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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