Перейти к содержанию

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

 

1491319448148138184.png

Тема посвящена моддингу на платформе Зов Чернобыля.

 

Правила темы:

  • Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть.
  • Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода.
  • Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа).
  • Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться.
  • Так же, если вы модифицируете готовый мод, обязательно указывайте какой. Некоторые модификации очень сильно отличаются от Call of Chernobyl. 
  • Лайк 4
  • Хабар 1

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


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

Misery в configs\plugins\debug_spawner.ltx прописывали?

  • Лайк 1

В беге за рассветом приближаешь свой закат

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


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

vader_33 не, не прописывал. Завтра попробую.


Дополнено 1 минуту спустя

А разве есть такой файл? Я его в R6-R7 не замечал.

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


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

Misery в новом коке его нету, в старом есть


В беге за рассветом приближаешь свой закат

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


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

vader_33 в новых версиях он был бы очень полезен. 


Дополнено 13 минуты спустя

vader_33 да, помогло, спасибо

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


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

Кто-нибудь дорабатывал энциклопедию? Конкретно статьи про аномалии. Непонятно как выдать статью про ту или иную аномалию во время взаимодействия с ней. Допустим попал в жарку и тебе вылезла статья о жарках. Расстояние надо как-то вычислять, не знаю. В общем никто не дорабатывал нигде?

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


Ссылка на сообщение
Поделиться на другие сайты
 
3 часа назад, Last_Dawn сказал:

Допустим попал в жарку

как вариант,из hit callback актора смотреть,кто хит нанес


В беге за рассветом приближаешь свой закат

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


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

Last_Dawn я тоже задавался этим вопросом, я хотел, чтобы при разговоре с НПС он нам рассказывал истории и анекдоты, которые добавлялись в отдельную секцию, в энциклопедии

vader_33 в моём случае какой колбэк?

И ещё я пришел по другому вопросу, я прописываю трейды новых артефактов, решил начать прописывать их Сахарову.

У меня есть определенный курс по которому игрок может продать артефакт, а конкретно 0.30, 0.70. И такая проблема, что обратно Сахаров продаёт игроку обратно только в диапазоне 7000-10000 рублей.

Я прописывал артефакты  только в секцию sell, чтобы решить эту проблему нужно ещё ему в buy прописать? У него не будут артефакты как ассортимент для продажи, чтобы игрок мог только продавать и выкупать артефакты?

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


Ссылка на сообщение
Поделиться на другие сайты
 
5 часов назад, Misery сказал:

он нам рассказывал истории и анекдоты,

в последней фразе выдавать статью через <action>...</action>. Или нужно просто при разговоре без выбора диалога выдавать?Тогда можно попробовать через use_callback в xr_motivator.script. Про торговлю не понял,что именно надо,изменить цену или чтобы в продаже артов не было?


В беге за рассветом приближаешь свой закат

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


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

в последней фразе выдавать статью через <action>...</action>. Или нужно просто при разговоре без выбора диалога выдавать?Тогда можно попробовать через use_callback в xr_motivator.script.

Типа "-Расскажи анекдот или историю" и рандомно НПС рассказывает, что-то из этого, и в словах прописать "action". И чтобы выводилось сообщение на экран "Загружена новая информация". Как в статью в энциклопедии вставить картинку?

56 минут назад, vader_33 сказал:

Про торговлю не понял,что именно надо,изменить цену или чтобы в продаже артов не было?

Изменить цену артефакта при выкупе обратно. Я хочу избавиться от фарма денег, когда продаешь дороже, а выкупаеш  дешевле.

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


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

Как в статью в энциклопедии вставить картинку?

А она у тебя поддерживает их? На 1.4.22 (аддонами) и rc6 насколько помню энциклопедия без картинок идёт, но их можно восстановить.

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

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


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

Last_Dawn Мне для 1.4.22

Хорошо, что восстановить можно. Где можно найти гайд по восстановлению?

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


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

Last_Dawn Мне для 1.4.22

Хорошо, что восстановить можно. Где можно найти гайд по восстановлению?

Нигде. Если память мне не изменяет, то с картинками на rc7. Надо его скачать и распаковать. 
Пройдись по скриптам, ища по слову encyclopedia, там их немного на самом деле. Сам файл с картинками называется ui_pda_encyclopedia (в textures_descr). Там же найдёшь пути к файлам .dds. Точнее к сожалению не подскажу, так как очень давно этим занимался, но это не особо сложно по моей памяти и восстановить картинки мне удалось.

  • Лайк 1

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


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

Last_Dawn спасибо, не зря всё таки R7 скачал.

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


Ссылка на сообщение
Поделиться на другие сайты
   
3 часа назад, Misery сказал:

Last_Dawn Ох, запутано, но разобрался.

Я б те кинул, но у меня там своего уже столько намешано, что тебе только во вред будет.

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


Ссылка на сообщение
Поделиться на другие сайты
 
21 час назад, Misery сказал:

Типа "-Расскажи анекдот или историю" и рандомно НПС рассказывает, что-то из этого

а,скриптовый диалог?Там же в скрипте,где его создали,и добавляете.Или если в add_dialog пятый параметр выполнения скрипта не занят-можно в нем

21 час назад, Misery сказал:

Изменить цену артефакта при выкупе обратно

Тогда в sell


В беге за рассветом приближаешь свой закат

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


Ссылка на сообщение
Поделиться на другие сайты
 
В 18.04.2021 в 22:23, vader_33 сказал:

как вариант,из hit callback актора смотреть,кто хит нанес

Так, ну хиты я нашёл например, а как проверить кто нанёс его? Вообще не вижу даже куда смотреть.

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


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

Last_Dawn 

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

Вообще не вижу даже куда смотреть

Понимаю...

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


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

Last_Dawn function actor_on_hit_callback(binder, obj, amount, local_direction, who, bone_index)  (это из последнего кока,в других версиях или сборках может немного отличаться,но принцип тот же)

who - это то,что нанесло хит.Можно,например,по секции сверять who:section()


В беге за рассветом приближаешь свой закат

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


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

Last_Dawn это может быть тебе очень полезно если колупаешь bind_stalker.script

Спойлер

__init - вызывается единожды при создании экземпляра класса, т.е. в случае актора - один раз при начале новой игры;
net_spawn - вызывается при спавне актора, т.е. при загрузке (загрузка сохранения, переход между локациями);
net_destroy - противоположный предыдущему метод. Вызывается при удалении актора. В игре это единственный момент - момент перед загрузкой другой локации во время перехода;
reinit - вызывается после net_spawn и представляет из себя инициализацию объекта актора. Примечателен метод тем, что в нём устанавливаются колбеки;
take_item_from_box - вызывается, когда ГГ берёт вещи из объекта inventory_box;
level_border_enter - вызывается, когда ГГ входит в разрешенную границу уровня;
level_border_exit - вызывается, когда ГГ покидает разрешенную границу уровня;
Как именно определяются границы уровня я не знаю. Но эти колбеки нужны для схемы xr_detector.script, которая в свою очередь реагирует на данные действия повышением уровня радиации, когда мы заходим в запрещённую зону на границе уровня.
info_callback - вызывается при выдачи ГГ любой инфопорции;
on_trade - вызывается при нажатии кнопки "Торговать" в акне торговли;
article_callback - вызывается во время выдачи статьи в энциклопедии;
on_item_take - вызывается в момент появления в инвентаре ГГ любого предмета;
on_item_drop - противоположный предыдущему метод. Вызывается, когда из инвентаря удаляется любой предмет;
task_callback - вызывается для обработки заданий в ПДА. В какие именно моменты это происходит сказать сложно, скорее всего с некоторой периодичностью;
map_location_added_callback - вызывается во время установки какой-либо метки на карте ПДА;
update - знаменитый "апдейт". Вызывается движком постоянно, довольно часто (несколько десятков раз в секунду);
save - вызывается при сохранении;
load - соответственно при загрузке.

 

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


Ссылка на сообщение
Поделиться на другие сайты
 
17 часов назад, vader_33 сказал:

Last_Dawn function actor_on_hit_callback(binder, obj, amount, local_direction, who, bone_index)  (это из последнего кока,в других версиях или сборках может немного отличаться,но принцип тот же)

who - это то,что нанесло хит.Можно,например,по секции сверять who:section()

Не, чёт я вообще тупой. Как это ярмо запустить?

Спойлер

function encyclopedia_anomaly_by_hit(who, id)

    local obj = level.object_by_id(id)
    local section = obj:section()
    local anomaly = who:section()
        
     local h = hit()
     h.type = hit.radiation
     h.impulse = 0
     h.direction = vector():set(0,0,1)
     h.draftsman = anomaly
     anomaly:hit(h)
        
    if string.find(section, "zone_field_radioactive_") and h or string.find(section, "zone_radioactive_") and h then    
        dxr_encyclopedia.detect_anomaly_interaction("zone_radioactive")    
        printf("zone_radioactive")
    end        
end

 


Дополнено 1 минуту спустя

Не могу понять просто вот как проверить нанесение хита от определённой секции и правильно это оформить. 

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


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

Last_Dawn 

Спойлер

 

если из коллбека в bind_stalker_ext.script:


function actor_on_hit_callback(binder, obj, amount, local_direction, who, bone_index)
	if (amount <= 0) then
		return
	end  -- это может быть другое в других версиях, менять не надо, просто добавлять ниже
--------------------------------------------------------------------------------------
--составляете табличку ["секция"] = "статья" (которую надо выдать при хите от данной секции)
	tbl_anoms = {
			["zone_mine_gravitational_weak"] = "zone_mine_gravitational",
			["zone_mine_gravitational_strong"] = "zone_mine_gravitational",
			["zone_gravi_zone"] = "gravi_zone",
			["zone_mine_thermal_weak"] = "zone_thermal",
			["zone_zharka_static_weak"] = "zharka_static",
			["fireball_zone"] = "fireball",
			["fireball_electric_zone"] = "fireball_electric",
			["zone_field_radioactive_weak"] = "zone_field_radioactive"
		}
		-- и т.д., просто примеры названий
	local sec = who:section()
		if tbl_anoms[sec] then
			dxr_encyclopedia.detect_anomaly_interaction(tbl_anoms[sec])    
			printf(tbl_anoms[sec])
		end
---------------------------------------------------------------------------------------------------- 
  	SendScriptCallback("actor_on_hit_callback",obj, amount, local_direction, who, bone_index) --это с оригинала,не менять
end

Но если добавляете много  строчек - можно вынести в отдельный файл. Создаете пустой скрипт с таким содержанием (и в bind_stalker_ext.script добавлять ничего не надо)


function on_game_start()
  RegisterScriptCallback("actor_on_hit_callback", on_hit_actor)
end

function on_hit_actor (obj, amount, local_direction, who, bone_index)
-- ["секция"] = "статья" (которую надо выдать при хите от данной секции)
	tbl_anoms = {
			["zone_mine_gravitational_weak"] = "zone_mine_gravitational",
			["zone_mine_gravitational_strong"] = "zone_mine_gravitational",
			["zone_gravi_zone"] = "gravi_zone",
			["zone_mine_thermal_weak"] = "zone_thermal",
			["zone_zharka_static_weak"] = "zharka_static",
			["fireball_zone"] = "fireball",
			["fireball_electric_zone"] = "fireball_electric",
			["zone_field_radioactive_weak"] = "zone_field_radioactive"
		}
		-- и т.д., просто примеры названий
	local sec = who:section()
		if tbl_anoms[sec] then
			dxr_encyclopedia.detect_anomaly_interaction(tbl_anoms[sec])    
			printf(tbl_anoms[sec])
		end
end

 

Можно составить таблицу не с секциями, а с clsid ( who:clsid() ) или с классами, но они могут быть одинаковыми у аномалий, которые дают хит разного типа. Например, летающий огненный шар и летающая электра - ZS_TORRD, термальная зона (не жарка) и хим зона (не холодец) (как на затоне) - ZS_RADIO . Поэтому, наверно, лучше секции расписать. 

Класс вот так читается:
    local anom_class = system_ini():r_string(sec, "class")

 

Небольшие комментарии к приведенной вами функции.

     local h = hit()
     .....
     anomaly:hit(h) 

это нанесение хита чему-нибудь. В последней строчке "объект:hit(h) " - объект - это то, что получит хит. У вас указана аномалия, которая нанесла хит актору. "h.draftsman = anomaly" - это то, от чьего имени нанесется хит. Тут тоже указана аномалия, которая нанесла хит актору. Получается, аномалия ударила актора, сработал коллбек на хит, и потом эта же аномалия сама себя хитанула через anomaly:hit(h)  . Поэтому и далее условие if .. h не сработает, это действие, а не что-то подходящее под условие.

В if ... then если надо сравнивать по две группы условий - нужно их группировать скобками. if (условие_1 and условие_2) or (условие_3 and условие_4).

        if string.find(section, "zone_field_radioactive_") and h or string.find(section, "zone_radioactive_") and h then - нужно сгруппировать так:

       if (string.find(section, "zone_field_radioactive_") and h) or (string.find(section, "zone_radioactive_") and h) then

 

 Но если есть одно одинаковое условие , то можно сделать так:

if условие_1 and (условие_2 or условие_3) then 

      if h and (string.find(section, "zone_field_radioactive_")  or string.find(section, "zone_radioactive_") )  then

Но опять же, h - это действие (нанесение хита), поэтому только как пример.

Изучите язык lua, его синтаксис, тогда будет понятнее, что и как редактировать

 

 

Изменено пользователем vader_33
  • Лайк 1

В беге за рассветом приближаешь свой закат

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


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

Спасибо.

2 часа назад, vader_33 сказал:

а с clsid ( who:clsid() ) или с классами, но они могут быть одинаковыми у аномалий

Видел, да, не подходит.

2 часа назад, vader_33 сказал:

"h.draftsman = anomaly" - это то, от чьего имени нанесется хит. Тут тоже указана аномалия, которая нанесла хит актору. Получается, аномалия ударила актора, сработал коллбек на хит, и потом эта же аномалия сама себя хитанула через anomaly:hit(h)

Вот оно как.

2 часа назад, vader_33 сказал:

Изучите язык lua, его синтаксис, тогда будет понятнее, что и как редактировать

Надо бы, да лень. Ещё раз спасибо.


Дополнено 0 минут спустя

Дополнено 24 минуты спустя

Полный список, кому пригодится:
 

Спойлер

	tbl_anoms = {
			["zone_mine_gravitational_weak"] = "zone_gravitational_tramplin",
			["zone_mine_gravitational_strong"] = "zone_gravitational_karusel",
			["zone_mine_gravitational_average"] = "zone_gravitational_voronka",			
			["zone_gravi_zone"] = "zone_gravitational_voronka",
			["zone_mine_gravitational_big"] = "zone_gravitational_karusel",
			
			["zone_mine_thermal_weak"] = "zone_thermal",
			["zone_mine_thermal_average"] = "zone_mine_thermal",
			["zone_mine_thermal_strong"] = "zone_mine_thermal",
			["zone_mine_thermal"] = "zone_mine_thermal",
			["zone_zharka_static_strong"] = "zone_thermal",
			["zone_zharka_static_average"] = "zone_mine_thermal",
			["zone_zharka_static_weak"] = "zone_mine_thermal",
			["zone_zharka_static"] = "zone_mine_thermal",	
			
			["zone_mine_steam"] = "zone_mine_steam",
			["zone_mine_steam_weak"] = "zone_mine_steam",
			["zone_mine_steam_average"] = "zone_mine_steam",
			["zone_mine_steam_strong"] = "zone_mine_steam",	
			
			["fireball_zone"] = "fireball_zone",	
			
			["zone_mine_electric"] = "zone_mine_electric",
			["zone_mine_electric_weak"] = "zone_mine_electric",
			["zone_mine_electric_average"] = "zone_mine_electric",
			["zone_mine_electric_strong"] = "zone_mine_electric",
			["zone_mine_static"] = "zone_mine_electric",
			["zone_mine_static_weak"] = "zone_mine_electric",
			["zone_mine_static_average"] = "zone_mine_electric",
			["zone_mine_static_strong"] = "zone_mine_electric",			
			["zone_witches_galantine"] = "zone_mine_electric",
			["zone_witches_galantine_weak"] = "zone_mine_electric",
			["zone_witches_galantine_average"] = "zone_mine_electric",
			["zone_witches_galantine_strong"] = "zone_mine_electric",	

			["fireball_electric_zone"] = "fireball_electric_zone",	
	
			["zone_mine_chemical"] = "zone_mine_chemical",
			["zone_mine_chemical_weak"] = "zone_mine_chemical",
			["zone_mine_chemical_average"] = "zone_mine_chemical",
			["zone_mine_chemical_strong"] = "zone_mine_chemical",
			["zone_buzz"] = "zone_mine_chemical",
			["zone_buzz_weak"] = "zone_mine_chemical",
			["zone_buzz_average"] = "zone_mine_chemical",
			["zone_buzz_strong"] = "zone_mine_chemical",		
			
			["zone_mine_acidic"] = "zone_mine_acidic",
			["zone_mine_acidic_weak"] = "zone_mine_acidic",
			["zone_mine_acidic_average"] = "zone_mine_acidic",
			["zone_mine_acidic_strong"] = "zone_mine_acidic",	
			["zone_mine_acidic_big"] = "zone_mine_acidic",		

			["zone_field_acidic"] = "zone_field_acidic",			
			["zone_field_acidic_weak"] = "zone_field_acidic",	
			["zone_field_acidic_average"] = "zone_field_acidic",	
			["zone_field_acidic_strong"] = "zone_field_acidic",	
			["zone_field_acidic_no_sound"] = "zone_field_acidic",	

			["zone_burning_fuzz"] = "zone_burning_fuzz",
			["zone_burning_fuzz_weak"] = "zone_burning_fuzz",
			["zone_burning_fuzz_average"] = "zone_burning_fuzz",
			["zone_burning_fuzz_strong"] = "zone_burning_fuzz",
			["zone_burning_fuzz1"] = "zone_burning_fuzz",	

			["zone_field_radioactive"] = "zone_field_radioactive",
			["zone_field_radioactive_weak"] = "zone_field_radioactive",
			["zone_field_radioactive_average"] = "zone_field_radioactive",
			["zone_field_radioactive_strong"] = "zone_field_radioactive",
			["zone_radioactive"] = "zone_field_radioactive",	
			["zone_radioactive_weak"] = "zone_field_radioactive",
			["zone_radioactive_average"] = "zone_field_radioactive",
			["zone_radioactive_strong"] = "zone_field_radioactive",	

			["zone_field_psychic"] = "zone_field_psychic",
			["zone_field_psychic_weak"] = "zone_field_psychic",
			["zone_field_psychic_average"] = "zone_field_psychic",
			["zone_field_psychic_strong"] = "zone_field_psychic"			
		}

 

Спойлер

[encyclopedia_interactivity_anomalies]
emissions = encyclopedia_anomalies_other_emission
psi_storms = encyclopedia_anomalies_other_psistorm
zone_gravitational_karusel    = encyclopedia_anomalies_other_gravisel
zone_gravitational_tramplin = encyclopedia_anomalies_other_graviplin
zone_gravitational_voronka = encyclopedia_anomalies_other_gravironka
zone_mine_thermal = encyclopedia_anomalies_other_thermal
zone_mine_steam = encyclopedia_anomalies_other_thermal_water
fireball_zone = encyclopedia_anomalies_other_thermal_ball
zone_mine_electric = encyclopedia_anomalies_other_electric
fireball_electric_zone = encyclopedia_anomalies_other_electric_ball
zone_mine_chemical = encyclopedia_anomalies_other_xolodets
zone_mine_acidic = encyclopedia_anomalies_other_gazirovka
fireball_acidic_zone = encyclopedia_anomalies_other_acidic_ball
zone_field_acidic = encyclopedia_anomalies_other_field_acidic
zone_burning_fuzz = encyclopedia_anomalies_other_burn_fuzz
zone_field_radioactive = encyclopedia_anomalies_other_radiochag
zone_field_psychic = encyclopedia_anomalies_other_psy_field

 

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

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


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

С какого потолка Газик или Алун эти значения берёт? Смотрел, смотрел и нихрена не понял, откуда такие координаты берутся. Это прицел в инвентаре когда к оружию прикручивается, если что.

1icon_layer = kobra
1icon_layer_x = 73
1icon_layer_y = 4

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

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


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

Почему уровни сложности используют другие названия?

Изначально у меня было novice, <<Одиночки>>, veteran, master и сталкер (это из опций вообще).

Мне пришлось создавать новые секции, но почему-то секция "stalker" использует текст <<Одиночки>>, хоть я прописал в файле его как Опытный.

Спойлер

ss-05-05-21-12-31-42-mainmenu.jpg

 


Дополнено 48 минуты спустя

Можно полтергейсту вернуть физическое тело после его смерти?

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

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

    Ни одного зарегистрированного пользователя не просматривает данную страницу