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

[SoC] Ковыряемся в файлах


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

@Stalk2003 , ну почему сразу не будет? Там только одна хитрость есть: тынц. В качестве минимума. Т.е., чтобы NPC могли использовать предмет (визуально), его необходимо добавить в соответствующую секцию.


Может.

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

Проверьте пожалуйста правильно ли составлена функция

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

function actor_binder:use_object(obj)
               if obj~=nil then
               my_callbacks.on_use_item(obj)
               items_sounds.use_snd(obj)
               end
end

 

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

Серьёзно? А сам?

Прастити за оффтоп... Но обычно в игре сначала проверяют.

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

Задай себе вопрос - оно работает?

Оно работает, как планировалось?

Оно делалось по аналогии с чем то? 

Смею предположить, что не наугад. Значит, какое то базовое понимание имеется. Так почему бы не проверить, что получилось, а потом уже сюда? 

И главное. Всегда пытайся сначала сам.

 

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

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

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

@mole venomous просто я несколько раз конкретно ломал игру, этой функцией (в скриптах не шарю). Практически наугад и делалось а так работает.

 

 

@pz_3 сделал колбеки, все работает. Но использую гитару потом гармошку и вес уменьшается на 0.1, потом снова гитару этот 0.1 веса возвращается обратно. С чем это может быть связано?

Ссылка на комментарий
1 час назад, Stalk2003 сказал:

               if obj~=nil then

В принципе не нужно, если мы какой то объект скушали(а колбек мы ведь выводим именно на поедание предмета) - он явно существует, и делать проверку а был ли мальчик - странная затея.

 

1 час назад, Stalk2003 сказал:

function actor_binder:use_object(obj)
               items_sounds.use_snd(obj)
end

Такого будет достаточно. Сам вызов колбека же - обычно цепляется в функцию function actor_binder:reinit() в том же бинд_сталкере, например классический вариант выглядит так:  

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

function actor_binder:reinit()
Бла бла бла куча оригинального и не очень кода
К нему докидывается что нибудь типа
self.object:set_callback(callback.use_object, self.on_use_object, self)
И ниже уже делаем вызов

function actor_binder:on_use_object(obj)

end


 

26 минут назад, Stalk2003 сказал:

использую гитару потом гармошку

Откровенно говоря - я не уверен, что чистый ТЧ на лету(не заркывая инвентори) нормально и оперативно отрабатывает изменения веса при спавне новых вещей в карман колбеком.
т.е. для начала - я бы покопал в эту сторону, не вернется ли "пропавший" вес после закрыть-открыть инвентарь.
И опять таки, построение колбека у тебя странное, я такие конструкции не пользовал, чтобы уверенно что то заявлять. Пример, которым обычно пользуюсь - выше я уже привел.

Изменено пользователем pz_3
  • Нравится 1

Pz_3.gif

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

этой функцией

Функции мы то и не видели. Видели проверку и ссылку на файл с  функцией и аргументом в виде используемого obj...

  • Согласен 1

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

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

этой функцией

Какой "этой" ? вот этой?

У тебя там просто вызов другой функции. Синтаксически оно со странностями, но допустимо. Если у тебя что-то кого-то ломало, то оно не в этих строках.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

оно не в этих строках

Ну, справедливости ради - я готов поверить, что новичку покажется более сложным сделать колбек в биндсталкере, чем уже из него сделать вывод звука и спавн съеденного.
Тем более, что вывод звуков а ля:
 

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

local tSound ={
medkit       = "interface\\inv_medkit",
medkit_scientic        = "interface\\inv_medkit",
medkit_army                = "interface\\inv_medkit",
medkit_using        = "interface\\inv_medkit",
kolbasa      = "interface\\inv_food",
vodka        = "interface\\inv_vodka",
energy_drink = "interface\\inv_softdrink",
bandage      = "interface\\inv_bandage",
antirad      = "interface\\inv_pills",
bread         = "interface\\inv_food",
conserva     = "interface\\inv_food_conserva"
}
 
function use_snd(obj)
   if obj and tSound[obj:section()]  then
      local snd = xr_sound.get_safe_sound_object(tSound[obj:section()])
      if snd then
      snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 2.0)
      end
   end
end   

Вполне себе гуглится\подсматривается в других модах.
Да вобщем то и по колбекам, наверняка есть уроки. Эх. Вот почему то мне комфортнее самому что то пытаться нагуглить, чем просто пойти и спросить на АМК. Болезнь наверное?
 

Pz_3.gif

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

Вполне себе гуглится\подсматривается в других модах.

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

Затруднения возможны только на какой-то редкой экзотике, к коей сталкер уж точно не относится.

А ну да, еще затруднения возможны, когда человек не знает/не понимает, что он делает и как это будет работать. Затруднения возможны, когда к коду относятся как к непонятной магии.

В таких случаях - имхо - лучше бы сначала базовые основы подтянуть.

И вот когда задают вопрос "а правильно ли составлена функция..?" в отношении кода с одной проверкой и парой вызовов внешних функций. То у меня крепнет убеждение, что автор не понимает, что он показывает, и не знает, что он делает. Тут лучше теорию по-изучать, программирование вообще, потом уже Луа в частности...

  • Согласен 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.

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

Хэх, весело, господа корифеи. А если несколько разнотипных предметов подряд попробовать? А вот что будет?

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

@pz_3 делал как тут описано https://ap-pro.ru/forums/topic/1317-sozdanie-inventarnogo-kompleksa/ плюс до этого звуки для предметов сделаны были. На счет веса закрытие-открытие инвентаря не влияет. Изменил вес гармошки с 0.35 на 0.30 и проблема пропала. Похоже движок пытался округлить сотые веса до десятых.

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

@CiberZold @Zander_driver  Ну короче я понял из-за чего игра ломалась (точнее сейвы) - из-за спавна предметов по game_spawn_story_ids

 

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

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

function delete_agr_ecolog_case()
   local lc = alife():story_object(story_ids.agr_ecolog_case)
   alife():release(lc, true)
end
function spawn_agr_ecolog_case()
   local spawn_id = alife():spawn_id(spawn_story_ids.agr_ecolog_case)
   alife():create(spawn_id)
end

function delete_mil_termit_pda()
   local lc = alife():story_object(story_ids.mil_termit_pda)
   alife():release(lc, true)
end
function spawn_mil_termit_pda()
   local spawn_id = alife():spawn_id(spawn_story_ids.mil_termit_pda)
   alife():create(spawn_id)
end

function delete_swp_shaman_pda()
   local lc = alife():story_object(story_ids.swp_shaman_pda)
   alife():release(lc, true)
end
function spawn_swp_shaman_pda()
   local spawn_id = alife():spawn_id(spawn_story_ids.swp_shaman_pda)
   alife():create(spawn_id)
end

function delete_swp_vulture_foto()
   local lc = alife():story_object(story_ids.swp_vulture_foto)
   alife():release(lc, true)
end
function spawn_swp_vulture_foto()
   local spawn_id = alife():spawn_id(spawn_story_ids.swp_vulture_foto)
   alife():create(spawn_id)
end

function delete_agr_seeker_cache()
   local lc = alife():story_object(story_ids.agr_seeker_cache)
   alife():release(lc, true)
end
function spawn_agr_seeker_cache()
   local spawn_id = alife():spawn_id(spawn_story_ids.agr_seeker_cache)
   alife():create(spawn_id)
end

согласно выданному инфопоршню

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

<!-- СМС при старте игры -->
    <info_portion id="start_game_zone">
        <action>xr_effects.yan_start_game_sms</action>
        <!--action>drda_functions.delete_mil_termit_pda</action>
        <action>drda_functions.delete_swp_shaman_pda</action>
        <action>drda_functions.delete_swp_vulture_foto</action>
        <action>drda_functions.delete_agr_seeker_cache</action-->
    </info_portion>

движок ОГСР сразу на этот поршень с функциями сагрился, потому и понял из-за чего. Закоментировав строки, игра пришла в порядок (проверил на ванильной версии мода своего)

 

Тогда вопрос - а как этой функцией вообще пользоваться то? BFG вон писал, что они эту функцию ток так в 2016 солянке использовали и ничё, работало же, а у меня игра с  ума сходит?

Ничё не понимаю :(

Лучше сделать мод с 0, чем пытаться залатать багованный.

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

@DarkSnowder назначил стори ид и гейм стори ид то?

ищу человека, который смог бы заняться разработкой погоды на OGSR.
кто может помочь - пишите в ЛС.

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

@imcrazyhoudiniя в СДК всё назначал обьектам - проверял даже

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

[8535]

; cse_abstract properties
section_name = agr_ecolog_case
name = agr_ecolog_case
position = -183.069061279297, 1.35877525806427, 83.6469879150391
direction = -0.0232704430818558, 0.00517749041318893, 0.0687333419919014
id = 65535
version = 118
script_version = 7
spawn_id = 2335

; cse_alife_object properties
game_vertex_id = 516
level_vertex_id = 481192
object_flags = 0xffffff0f
story_id = 307
spawn_story_id = 307

; cse_visual properties
visual_name = equipments\guest_cop\safe_container

; cse_alife_inventory_item properties
condition = 1

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

[11624]

; cse_abstract properties
section_name = inventory_box
name = agr_underground_digger_box
position = 2.11199998855591, -14.3388004302979, -109.015800476074
direction = 0, -1.57078790664673, 0
id = 65535
version = 118
script_version = 7
spawn_id = 2688

; cse_alife_object properties
game_vertex_id = 825
level_vertex_id = 172
object_flags = 0xffffff37
custom_data = <<END
[spawn]
ammo_5.45x39_ap = 4
antirad = 2
medkit_army = 2
wpn_ak74_m1 = 1
outfit_stalker_m1 = 1
af_night_star = 1
grenade_f1 = 1
END
story_id = 393
spawn_story_id = 393

; cse_visual properties
visual_name = equipments\item_box_01

 

 

Всё, отбой тревоги. Разобрался вроде как. Я ж имя spawn_id менял у двух предметов, а скрипт не поправил, оттого-то игру у корёжило.

Вывод - "прежде чем куда то болт кинуть, сперва сто раз подумаю, куда убегать буду"

Изменено пользователем DarkSnowder
причина выяснена
  • Смешно 1

Лучше сделать мод с 0, чем пытаться залатать багованный.

Ссылка на комментарий
6 hours ago, Zander_driver said:

Справедливости ради, сейчас вообще все что угодно, гуглится и подсматривается на заведомо рабочем примере.

Гуглятся именно что частные примеры – стоит отойти немного в сторону, и выясняются какие-то особенности, вроде того, что звук, выведенный через play_no_feedback в режиме "looped", залипает в указанных координатах до действия disconnect и проигрывается даже в других сейвах на той же локации.

  • Полезно 1

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

Шпаргалка

Ссылка на комментарий
2 часа назад, Norman Eisenherz сказал:

залипает в указанных координатах до действия disconnect

Забавно. Чисто для расширения кругозора спрошу, а будут таки залипшие звуки друг на друга накладываться?
Ну например если бы мы вызывали звук рестриктором(зашел - включился звук), или еще как, главное, что это теоретическая возможность без дисконнекта с загрузки повторно триггернуть вызов такого звука.

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

Pz_3.gif

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

стоит отойти немного в сторону, и выясняются какие-то особенности

Разумеется, это всегда и везде так.

Иначе все было бы легким и простым. А так - интересно что-то делать.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

Типовой конфиг статьи с описанием задания содержит какое-то неизвестное значение: article_type=task group="task_id/???".

 

Во всех действующих примерах значение после task_id = 0.
Если создать в описании задания ссылки на несколько статей с конфигом group="task_id/0", …/1, …/2, то вне зависимости от активной задачи выводится только статья, указанная для задачи 0.
Если убрать это значение совсем или указать число в несколько знаков, или указать строку "текст1/текст2/текст3", эффект тот же: статья полностью определяется через article_id без учета group – даже task_id указывать необязательно.
В классе SGameTaskObjective есть метод set_article_key(str), который вроде бы ссылается на это значение, но ни одного живого примера нет, а ввод чисел или строк таким методом никак не меняет статью в описании задания.
В движке есть вот такие действия при выводе статьи вида "описание задания" в КПК:

Spoiler
[xr_3da\xrGame\ui\UIEventsWnd.cpp]
void CUIEventsWnd::ShowDescription			(CGameTask* t, int idx)
	
		SGameTaskObjective& o		= t->Objective(0);
		
			if(o.article_key.size())
			{
				sprintf_s(need_group, "%s/%s", *t->m_ID, *o.article_key);		-- task_id/str
			}else
			{
				sprintf_s(need_group, "%s/%d", *t->m_ID, idx);				-- task_id/num
			}

			

					if( strstr(group.c_str(), need_group)== group.c_str() )
					{
						u32 sz			= xr_strlen(need_group);
						if ( group.size()== sz || group.c_str()[sz]=='/' )
							m_UITaskInfoWnd->AddArticle(&A);

 

 

Что это за значение и как его применять?

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

Шпаргалка

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

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

Лучше сделать мод с 0, чем пытаться залатать багованный.

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

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

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

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

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

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

Войти

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

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

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