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

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

Получилось!

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

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

 

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

 

3. всё.

Изменено пользователем phalcor
  • Согласен 1
Ссылка на комментарий

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

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



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 FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM!

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

Ссылка на комментарий
28 minutes ago, Black_Raven_03 said:

relation_registry:set_community_goodwill

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

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

@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 FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM!

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

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

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

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

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

AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM!

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

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

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

local relation_registry = db.actor

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

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

 Моя нычкаНычка в арендованном у Опричника холодильнике  

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

UriZzz.gif

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

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

  • Спасибо 1
Скрытый текст

AMD FX-8100 (Bulldozer) , 16GB DDR3-1600, AFOX GeForce GTX1050Ti и нормально сталкерим в НА5.1, НА7, OGSE-0693, OGSR, НС2016, OLR, OFFLIFE, CoC, LADC, CoP Gunslinger, ShoC GA, Legend Return, Anomaly, CS OGSM!

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

Ссылка на комментарий
10 минут назад, Black_Raven_03 сказал:

 

Dell

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

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

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):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

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

Шпаргалка

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

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

Например, что-то вроде:  yes = loc_is_passed("l01_escape" ) 

Ссылка на комментарий
11 минут назад, phalcor сказал:

ли простой метод определить

Вроде бы способ с инфопоршеном и так простой. Если был, то получил защитный инфо и больше не получишь))

  • Спасибо 1

Здесь могла быть ваша реклама.

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

Прошу помощи :(

Ест скрипт, убивающий всех ворон (или только на текущей локации?)

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

function kill_crow()
	local lname = level.name()
--			amk.send_tip("прошло", "прошло", 1, 15, "common_channel")
	for id, sobj in alife():objects() do
		local crow = level.object_by_id(id)
		if crow and crow:section() == "m_crow"  then 
			local hit = hit()
				hit.direction = crow:direction()
				hit.impulse = 1000
				hit.draftsman = crow
				hit.power = 1000
				hit.type = hit.strike
			crow:hit(hit)
			local sobj = alife():object(id)
			
				alife():release(crow, true)
			
			ogse_st_mgr.start_gtimer(nil, math.random(150, 300), "ogse.release_crow", id)
		end
	end
end

 

Вопрос: А как мне убить всех ворон, но КРОМЕ текущей локации?

А то на голову сыпятся, а нужно от них избавиться

Ссылка на комментарий
53 минуты назад, _Sk8_AsTeR_ сказал:

а нужно от них избавиться

А просто удалить? Что б не сыпались.

Изменено пользователем mole venomous
  • Согласен 1

Здесь могла быть ваша реклама.

Ссылка на комментарий
30.09.2020 в 21:04, HellRatz сказал:

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

Хмм, а почему?

Какай в данном случае, применяется критерий для разделения "костыль / не костыль" - хотелось бы понять.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

а почему?

Зачем плодить сущности? Создавать ненужные секции, прописывать все в скрипты, вызывать спавн, когда это делается в разы проще и удобнее в СДК? Как минимум подгонка по координатам чего стоит, любая настройка делается в пару кликов. А перекомпиляция спавна занимает от силы пол минуты. Конечно можно вспомнить и Историю Прибоя, где даже здания спавнили, можно и так делать. Но для чего, когда есть редактор карт? Со спавном — аналогично.
ЗЫ: конечно, местами скриптовый спавн удобнее. Но вряд ли, если речь идет про физ. объекты, для которых нужно еще координаты бегать снимать и получать баги с проваливанием под террейн и прочие "развлечения".

  • Спасибо 1
Ссылка на комментарий
Только что, HellRatz сказал:

Создавать ненужные секции

Вопрос был не об этом.

Только что, HellRatz сказал:

проще и удобнее в СДК?

Ну сделай рандомный спавн в СДК. Чтобы объект при каждом запуске игры спавнился в разных местах.

 

Только что, HellRatz сказал:

Но для чего, когда есть редактор карт?

Пардон, у меня на этом месте просто фейспалм :facepalm:

Для того чтобы местонахождение предмета, НЕ было прибито гвоздями на века, например.

Только что, HellRatz сказал:

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

Не нужно сочинять. Вопрос опять же был не об этом, в 2020 так никто не делает.

 

В общем я делаю занятные выводы... :rolleyes:

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

2) По всей видимости, распространенным мнением является, спавн всего и вся через СДК, как следствие - все прибито гвоздями к своим местам, Зона статична и неизменна. Никаких неожиданностей, никакого рандома во веки веков. Такой подход к моддингу полагается как "правильный". А все что делает спавн не-прибитым-гвоздями, несет в игру какие-то непредсказуемости, автоматом расценивается как костыль. Не зависимо от способа технической реализации.

Ну что ж, теперь я знаю, почему мой мод называют состоящим из костылей. Стало быть, из костылей он и будет, в такой трактовке. Теперь я несколько лучше понимаю, суть расхождения взглядов, моих/чужих. Спасибо за ответ.

Изменено пользователем Zander_driver
  • Согласен 3

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
51 минуту назад, Zander_driver сказал:

Для того чтобы местонахождение предмета, НЕ было прибито гвоздями на века, например.

Ну, если есть необходимость перемещать здания/деревья по карте — то да, конечно. Прочитай кусок про Прибой Стори еще раз.

51 минуту назад, Zander_driver сказал:

Ну сделай рандомный спавн в СДК.

При чем тут он? Человек вроде хотел ящик заспавнить скриптами, а не написать систему, как их раскидать рандомно по карте. Суть вопроса ни к чему переворачивать. Физ. объекты, заспавненные через тонны кода — ничто иное как костылище 13-летней давности, когда в народе СДК был непостижимым (а когда-то и недоступным) инструментом. Вот когда будет вопрос про рандомный спавн, тогда и стоит его упоминать. Это совсем другие задачи и методы решения.

  • Согласен 2
  • Полезно 1
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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