Jump to content

Recommended Posts

WinCap    171
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

 

 

  • Согласен 1
  • Полезно 3

Share this post


Link to post
Share on other sites
mdm64    61

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

Share this post


Link to post
Share on other sites
Romann    549
11 минут назад, WinCap сказал:

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

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

  • Согласен 4

 

Мать: 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.

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

Share this post


Link to post
Share on other sites
mdm64    61

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

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

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

Edited by mdm64
  • Согласен 1

Share this post


Link to post
Share on other sites
WinCap    171

@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

 

 

  • Like 1
  • Полезно 1

Share this post


Link to post
Share on other sites
mdm64    61

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

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

  • Согласен 1

Share this post


Link to post
Share on other sites
phalcor    19

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

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

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)

 

Share this post


Link to post
Share on other sites
 HellRatz    2,189
53 минуты назад, phalcor сказал:

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

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

  • Thanks 1
  • Согласен 2

Share this post


Link to post
Share on other sites
phalcor    19

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

Share this post


Link to post
Share on other sites
 HellRatz    2,189
2 минуты назад, phalcor сказал:

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

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

  • Thanks 1

Share this post


Link to post
Share on other sites
phalcor    19

Получилось!

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

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

 

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

 

3. всё.

Edited by phalcor
  • Согласен 1

Share this post


Link to post
Share on other sites
Posted (edited)

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

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



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] ********************************************************************************


 

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

Edited by Опричник
спойлер

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

AMD Phenom X4 965 Black Edition, 4GB DDR3, AMD Radeon R7 240 2GB GDDR4 и нормально сталкерим в НА5.1 и НА7!

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

Share this post


Link to post
Share on other sites
dsh    3,053
28 minutes ago, Black_Raven_03 said:

relation_registry:set_community_goodwill

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

  • Согласен 1

Share this post


Link to post
Share on other sites
Posted (edited)

@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

 

 

 

Edited by Опричник
спойлер

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

AMD Phenom X4 965 Black Edition, 4GB DDR3, AMD Radeon R7 240 2GB GDDR4 и нормально сталкерим в НА5.1 и НА7!

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

Share this post


Link to post
Share on other sites

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

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


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

AMD Phenom X4 965 Black Edition, 4GB DDR3, AMD Radeon R7 240 2GB GDDR4 и нормально сталкерим в НА5.1 и НА7!

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

Share this post


Link to post
Share on other sites
UriZzz    823

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

local relation_registry = db.actor

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

  • Не согласен 1

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

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

UriZzz.gif

Share this post


Link to post
Share on other sites

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

  • Thanks 1

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

AMD Phenom X4 965 Black Edition, 4GB DDR3, AMD Radeon R7 240 2GB GDDR4 и нормально сталкерим в НА5.1 и НА7!

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

Share this post


Link to post
Share on other sites
UriZzz    823
Posted (edited)
10 минут назад, Black_Raven_03 сказал:

 

Dell

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

Edited by UriZzz
  • Thanks 1

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

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

UriZzz.gif

Share this post


Link to post
Share on other sites
_Sk8_AsTeR_    44

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

Возникла идея - скриптово потушить лампу. Распаковав Алл.Спавн нашел у выбранной мною лампы параметр 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 лампы? Если нет, то как правильно?

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

Share this post


Link to post
Share on other sites

Здрасьте.

 

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

AMK-Team.ru

×
×
  • Create New...