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

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

3 часа назад, mdm64 сказал:

возможной реализации "невидимки"

Как уже сказал @dsh, самый простой вариант добавить новое условие в функцию "is_enemy()" в "xr_combat_ignore.script".

Если надет нужный броник, то функция возвращает false.

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

function is_enemy(obj, enemy, st, not_check_sim)

	...

	if st.enabled == false then
		return true
	end

	-- МаскХалат
	if enemy:id() == db.actor:id() then
		local bronik = db.actor:item_in_slot(7)
		if bronik and bronik:section() == "maskhalat" then
			return false
		end
	end

	...

end

 

 

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


Ссылка на сообщение
Поделиться на других сайтах

@WinCap, Да, согласен, действительно очень просто, решение в несколько строк...

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


Ссылка на сообщение
Поделиться на других сайтах
11 минут назад, WinCap сказал:

самый простой вариант

Ну не всё так просто - это не реализация "невидимки", это всего лишь некий игнор, враг просто не будет атаковать, но по факту актора будут все видеть, и даже на него реагировать. И назвать такое "невидимкой" у меня лично язык не повернётся, ИМХО. А вот сделать полную реализацию невидимки, когда мобы актора не просто игнорят - а полностью не видят и не реагируют - вот это уже "невидимка".

 

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

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


Ссылка на сообщение
Поделиться на других сайтах

@Romann, Соглашусь полностью, но именно так была реализована "невидимка" в Солянке, просто другой реализации я не видел.

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

А "невидимка" это да - когда сидят "три мартышки"...:biggrin: и четвёртая с КПК....:lol3:

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

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


Ссылка на сообщение
Поделиться на других сайтах

@mdm64, вариант скрипта, с проверкой расстояния и времени суток:

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

	if enemy:id() == db.actor:id() then
		local bronik = db.actor:item_in_slot(7)
		if bronik and bronik:section() == "maskhalat" then
			local dist = 10		-- ночью
			if in_time_interval(10, 17) then 
				dist = 50		-- днем
			else if in_time_interval(6, 21) then
				dist = 35		-- утром/вечером
			end
			if obj:position():distance_to(enemy:position()) > dist then
				return false
			end
		end
	end

 

 

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


Ссылка на сообщение
Поделиться на других сайтах

@WinCap, А ведь на этот скрипт можно "прикрутить" совершенно уникальные условия для выполнения тех или иных квестов!

И в частности, с фотографированием нужных объектов или НПС... Вот только нигде пока не нашёл аддона с фотиком, как в Фотографе...:biggrin:

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


Ссылка на сообщение
Поделиться на других сайтах

А возможно заспавнить физический объект? Например, деревянный ящик, такой, как рядом с Прапором? На котором магнитофон стоит.

Делаю, как ниже. Рюкзак спавнится, а какую секцию указать для ящика?

local a_pos  = db.actor:position()
local xpos=a_pos.x+2
local ypos=a_pos.y
local zpos=a_pos.z
local lv=db.actor:level_vertex_id()
local gv=db.actor:game_vertex_id()
local newOBJ=alife():create("inventory_box", xyz(xpos,ypos,zpos), lv,gv)

 

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


Ссылка на сообщение
Поделиться на других сайтах
53 минуты назад, phalcor сказал:

а какую секцию указать для ящика?

Нужно создать предмет (естественно не подбираемый, хотя можно и ящики собирать если нужно) с визуалом ящика, потом спавнить как любой предмет. Но все же советую делать такие вещи через СДК, подобные костыли — уровень 2007 года.

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


Ссылка на сообщение
Поделиться на других сайтах

@HellRatz, получается, что самый обычный деревянный ящик скриптом я заспавнить не смогу без создания своего предмета?

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


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, phalcor сказал:

обычный деревянный ящик скриптом я заспавнить не смогу 

Деревянный ящик — это зашитая в спавн секция динамического объекта с прописанным визуалом этого самого ящика. Соответственно — нет. Тебе нужно по аналогии создать в конфигах предмет с прописанным визуалом, и спавнить непосредственно предмет, а не модель.

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


Ссылка на сообщение
Поделиться на других сайтах

Получилось!

1. Создаём свой предмет в  items.ltx:

[phalcor_woodbox]:O_PHYS_S
visual = dynamics\box\big_box.ogf    ;Большой деревянный зелёный ящик
remove_time = 9999

 

2.Спавним предмет с секцией "phalcor_woodbox"

 

3. всё.

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

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


Ссылка на сообщение
Поделиться на других сайтах

Нужна помощь - при попытке выполнить такой код:
 

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



function dots:dots1()
	edit_box		= self:GetEditBox("edit_box")
	edit_box2		= self:GetEditBox("edit_box2")

clan = tostring(edit_box:GetText())
amount = tonumber(edit_box2:GetText())

--get_console():execute(clan)
--get_console():execute(amount)

--get_console():execute("Started")

if db.actor then
-- self:on_quit()
-- get_console():execute("main_menu off")
get_console():execute("Phase1")
if clan==nil then clan="stalker" end
if amount==nil then amount=1 end
--current=relation_registry:community_goodwill(clan, 0)
get_console():execute("Phase2")
relation_registry:set_community_goodwill(clan, 0, math.min(5000, amount))
get_console():execute("Phase3")
end
end

вылетает на стол с такой вот ошибкой:


[02.10.20 16:23:52.569] ********************************************************************************
[02.10.20 16:23:52.576] *********************************************************************************
[02.10.20 16:23:52.576] [print_output([CScriptEngine::lua_pcall_failed])] SCRIPT RUNTIME ERROR:
[luabind::detail::free_functions::function_dispatcher] Caught unhandled exception!
stack traceback:
	[C]: at 0x07fed88bf770
	[C]: in function 'set_community_goodwill'
	g:\stalker_shoc_na7\gamedata\scripts\ui_prestige.script:72: in function <g:\stalker_shoc_na7\gamedata\scripts\ui_prestige.script:52>
[02.10.20 16:23:52.576] *********************************************************************************
[02.10.20 16:23:52.576] 
FATAL ERROR

[error]Expression    : FATAL ERROR
[error]Function      : CScriptEngine::lua_pcall_failed
[error]File          : d:\_work\forks\ogsr-engine\ogsr_engine\common_ai\script_engine.cpp
[error]Line          : 52
[error]Description   : [CScriptEngine::lua_pcall_failed]: [luabind::detail::free_functions::function_dispatcher] Caught unhandled exception!

[02.10.20 16:23:52.576] ***************************[ScriptCrashHandler]**********************************
[02.10.20 16:23:52.576] stack traceback:
	[C]: at 0x07fed88bf770
	[C]: in function 'set_community_goodwill'
	g:\stalker_shoc_na7\gamedata\scripts\ui_prestige.script:72: in function <g:\stalker_shoc_na7\gamedata\scripts\ui_prestige.script:52>
[02.10.20 16:23:52.576] 	Locals: 
[02.10.20 16:23:52.576] 	 string (*temporary) : [luabind::detail::free_functions::function_dispatcher] Caught unhandled exception!
[02.10.20 16:23:52.576] 	End
[02.10.20 16:23:52.576] 	Locals: 
[02.10.20 16:23:52.576] 	 Table: (*temporary)
[02.10.20 16:23:52.576] 			 function (*temporary).set_community_goodwill : [[function]]
[02.10.20 16:23:52.576] 			 function (*temporary).clear_personal_relations : [[function]]
[02.10.20 16:23:52.576] 			 function (*temporary).community_goodwill : [[function]]
[02.10.20 16:23:52.576] 			 function (*temporary).change_community_goodwill : [[function]]
[02.10.20 16:23:52.576] 			 function (*temporary).set_personal_goodwill : [[function]]
[02.10.20 16:23:52.576] 			 function (*temporary).clear_personal_goodwill : [[function]]
[02.10.20 16:23:52.576] 			 function (*temporary).get_personal_goodwill : [[function]]
[02.10.20 16:23:52.576] 			 function (*temporary).change_personal_goodwill : [[function]]
[02.10.20 16:23:52.576] 	 string (*temporary) : stalker
[02.10.20 16:23:52.576] 	 number (*temporary) : 0.000000
[02.10.20 16:23:52.576] 	 number (*temporary) : 2000.000000
[02.10.20 16:23:52.576] 	End
[02.10.20 16:23:52.576] 	Locals: 
[02.10.20 16:23:52.576] 	 Userdata: self
[02.10.20 16:23:52.576] 			 userdata self.dialog : (CUIStatic): 00000000170B2A80
[02.10.20 16:23:52.576] 			 Userdata: self.owner
[02.10.20 16:23:52.576] 					 userdata self.owner.message_box : (CUIMessageBoxEx): 0000000040B32920
[02.10.20 16:23:52.576] 					 number self.owner.mbox_mode : 0.000000
[02.10.20 16:23:52.576] 					 userdata self.owner.shniaga : (CUIMMShniaga): 0000000040781180
[02.10.20 16:23:52.576] 	End
[02.10.20 16:23:52.576] *********************************************************************************
[02.10.20 16:23:52.576] ********************************************************************************


 

Вот чего ОГСРу неймётся, кто-нить может объяснить? Какое исключение и где именно?

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

AMD Phenom X4 965 Black Edition, 4GB DDR3, AMD Radeon R7 240 2GB GDDR4 и нормально сталкерим в НА5.1, НА7, ОГСЕ-0692, ОГСЕ-0693, НС2016, OFFLIFE, ЗЧ!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

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


Ссылка на сообщение
Поделиться на других сайтах
28 minutes ago, Black_Raven_03 said:

relation_registry:set_community_goodwill

Скорее всего вот в этом. Разве relation_registry - это класс и у него есть метод set_community_goodwill?

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


Ссылка на сообщение
Поделиться на других сайтах

@dsh, в dialogs.script в НА7 вступление в Долг так же реализовано, потому решил использовать этот же метод для своего экстренно-читерского исправлятора отношений; собственно кусок скрипта:
 

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



-----------------------------------------------------------------------------------
-- Dolg Community
-----------------------------------------------------------------------------------
function actor_in_dolg(actor, npc)
	if db.actor then
		return db.actor:character_community() == "actor_dolg"
	end
	return false
end

function actor_not_in_dolg(actor, npc)
	return not actor_in_dolg(actor, npc)
end

function actor_set_dolg(actor, npc)
	printf("ACTOR NOW IN [DOLG] COMMUNITY")
	if db.actor then
		db.actor:set_character_community("actor_dolg", 0, 0)
		update_info_portions_dolg()

		if not db.actor:has_info("mil_leader_quest2_complete") then
			relation_registry.set_community_goodwill ("freedom", db.actor:id(), -5000)
		elseif relation_registry.community_goodwill("freedom", db.actor:id()) > 0 then
			relation_registry.set_community_goodwill ("freedom", db.actor:id(), 0)
		end
	end
	return true
end

function actor_clear_community(actor, npc)
	printf("ACTOR NOW IN [NEUTRAL] COMMUNITY")
	if db.actor then
		db.actor:set_character_community("actor", 0, 0)
	end
	return true
end

 

 

 

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

AMD Phenom X4 965 Black Edition, 4GB DDR3, AMD Radeon R7 240 2GB GDDR4 и нормально сталкерим в НА5.1, НА7, ОГСЕ-0692, ОГСЕ-0693, НС2016, OFFLIFE, ЗЧ!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

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


Ссылка на сообщение
Поделиться на других сайтах

@dsh, или ты меня в двоеточие вместо точки ткнул? тут я мог накосячить ибо ЛУА после Паскаля воспринимается очень хреново...

Всем помогавшим - Спасибо! Нашёл, где накосячил

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

AMD Phenom X4 965 Black Edition, 4GB DDR3, AMD Radeon R7 240 2GB GDDR4 и нормально сталкерим в НА5.1, НА7, ОГСЕ-0692, ОГСЕ-0693, НС2016, OFFLIFE, ЗЧ!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

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


Ссылка на сообщение
Поделиться на других сайтах

@Black_Raven_03, а может всё-таки db.actor? Я конечно не силён в lua, как @dsh но чувствую что нужно попробовать добавить

local relation_registry = db.actor

Хотя, могу и ошибаться, пусть мэтр меня поправит, если что.

Моя нычка. Периодически пополняю

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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


Ссылка на сообщение
Поделиться на других сайтах

@UriZzz, неа, просто транслятор ЛУА ругался на двоеточие между relation_registry и методом set_community_goodwill, а там положено быть точке; всё равно спасибо и удаляюсь кодить дальше...

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

AMD Phenom X4 965 Black Edition, 4GB DDR3, AMD Radeon R7 240 2GB GDDR4 и нормально сталкерим в НА5.1, НА7, ОГСЕ-0692, ОГСЕ-0693, НС2016, OFFLIFE, ЗЧ!

Мозг состоит на 80 процентов из жидкости, и мало того, что она тормозная, так многим еще конкретно не долили...@Denikius136
Black_Raven.gif
 

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


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, Black_Raven_03 сказал:

 

Dell

Да, всё правильно db.actor тут не причем, это уже я тупанул.

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

Моя нычка. Периодически пополняю

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

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


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени! Прошу помощи!

Возникла идея - скриптово потушить лампу. Распаковав Алл.Спавн нашел у выбранной мною лампы параметр health = 100. Подозреваю, что дав параметру нуль - потушу лампу, хочу проверить. Хочу ковырять её через НетПакеты от Артоса. Вопрос, как мне прочитать нетпакет лампы?

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

[11509]

; cse_abstract properties
section_name = lights_hanging_lamp
name = yan_lamp6
position = 24.0428810119629, -9.33421421051025, -271.800720214844
direction = 9.42477798461914, 9.42477798461914, -7.85398149490356
version = 118
script_version = 6
spawn_id = 3892

; cse_alife_object properties
game_vertex_id = 1438
level_vertex_id = 132308
object_flags = 0xffffffaa
custom_data = <<END
[collide]
ignore_static
END

; cse_visual properties
visual_name = physics\light\new_light\light_white_glass

; cse_ph_skeleton properties

; cse_alife_object_hanging_lamp properties
main_color = 0xffffffff
main_brightness = 1
main_color_animator = light\light_omni_white_idle
main_range = 8
light_flags = 0x3a
lamp_fixed_bones = link
health = 100
main_virtual_size = 0.1
ambient_radius = 2.5
ambient_power = 0.60000002
main_bone = bone_lamp
main_cone_angle = 2.0943952
glow_radius = 0.69999999
ambient_bone = bone_omni

 

Пробую так:

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

function lampa()
local sobj = alife():object(3892)
local pk = get_netpk(sobj)
if pk and pk:isOk() then
	local data = pk:get()
		amk.send_tip(tostring (data.name), "проверка имени", 1, 15, "common_channel")
    	amk.send_tip(tostring (data.health), "проверка жизни", 1, 15, "common_channel")
--		data.health = 0
--		pk:set(data)
end	
end

 

Итого у меня возвращается параметр health = 100

Но не возвращается data.name равно nil. Будто я не лампы нет-пакет вскрыл, а чего-то другого.

Вопрос - правильно ли я определяю ID лампы? Если нет, то как правильно?

Второй вопрос: возможно ли в принципе потушить лампу через данный параметр и через нет-пакет?

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


Ссылка на сообщение
Поделиться на других сайтах

Здрасьте.

 

Равнозначны ли указанные ниже способы удаления переменной из pstor?

xr_logic.pstor_store(db.actor, name, nil)

db.storage[db.actor:id()].pstor[name] = nil

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


Ссылка на сообщение
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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

AMK-Team.ru

×
×
  • Создать...