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

Скриптование


Svoboда

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

@Kirgudu Как определить, что отряд стал враждебным и, возможно, уже начал стрелять по ГГ, оставаясь при этом на нейтральном отношении? Какой параметр отряда меняется, когда отряд становится свидетелем нападения?

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

Шпаргалка

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


Ссылка на сообщение

Вот именно там и смотрю, и именно эта проверка при явном наличии командиров выдает для соседних отрядов отношение "нейтрал".

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

Шпаргалка

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


Ссылка на сообщение

Можно обратиться к движковому счетчику патронов: если active_item:get_ammo_in_magazine() и active_item:get_ammo_total() уменьшились на одну величину, это как раз выстрел.

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

Шпаргалка

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


Ссылка на сообщение

Здрасьте.

 

Задача: создать одноименный текстовый файл при создании сейва.

В [ui_save_dialog.script] можно отследить имя и создать свой файл при сейве через меню "Сохранить игру". Как сделать то же самое при вводе имени нового сейва через консоль?

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

Шпаргалка

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


Ссылка на сообщение

Здрасьте.

 

Как проверить, что дождь не только идет в данный момент, но и попадает на ГГ (ГГ не находится в здании)? Версия игры любая без движковых правок.

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

Шпаргалка

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


Ссылка на сообщение

В ЧН часто есть готовые рестрикторы – укрытия от выброса, но у них нет внешних конфигов логики. Можно ли без перебора [all.spawn] определить, что ГГ находится в рестрикторе с именем "(level)_vibros_#"?

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

Шпаргалка

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


Ссылка на сообщение

@naxac Нашел перебор укрытий в [xr_surge_hide.script]:

Spoiler

		local board = sim_board.get_sim_board()
		local hide_tbl = {}
		local n = 0
		for k,v in pairs(board.smarts) do
			if v.smrt.actor_hides~=nil then
				for kk,vv in pairs(v.smrt.actor_hides) do
					local obj = alife():object(vv)
					if(obj) then
						n = n + 1
						hide_tbl[n] = obj
					end
				end
			end
		end

 

После этого как раз выполняется проверка через inside.

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

Шпаргалка

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


Ссылка на сообщение

Здрасьте.

 

Оконный класс на базе CUIScriptWnd() + статик с текстурой для видимости.

ТЧ 1.0006: перезагрузка проходит без ошибок даже при открытом окне – окно успешно удаляется методом __finalize().

ЧН 1.5.10:

• перезагрузка при открытом окне приводит к вылету без лога, как будто окно теряется.

• принудительное обнуление окна в net_destroy() также приводит к вылету без лога, если окно было открыто хотя бы один раз и точно было закрыто на момент перезагрузки.

 

Что-то изменилось в методах __init() и __finalize()?

 

Spoiler

local w

-- // actor_binder:on_item_use(obj) -- custom // --
function use_check(obj)
	if obj:section() == "bandage" then
		w = pda()
		level.start_stop_menu(w, true)
	end
end


function Init(cuiw, x, y, w, h)
	cuiw:SetWndRect( Frect():set(x, y, x + w, y + h) )
end


local W, H = 1024, 768


class "pda" (CUIScriptWnd)

function pda:__init() super()
	Init(self, W/2, H/2, 1, 1)

	local bk = CUIStatic()
	self:AttachChild(bk)
	Init(bk, 0, 0, 1, 1)
	bk:InitTexture("---")
end

function pda:__finalize()
end

 

 

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

Шпаргалка

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


Ссылка на сообщение

@Colder [ui_main_menu.script], по аналогии с блоком if dik == DIK_keys.DIK_Q. Обязательно добавить проверку if level.present() – игра должна быть загружена в момент расходования предмета.

Сделать применение предметов через быстрые слоты, как в ЗП, без расширенного движка невозможно – разве что добавить условие вида "если потрачен бинт, то съесть еще колбасу".

  • Спасибо 1
  • Сомнительно 2

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

Шпаргалка

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


Ссылка на сообщение

Здрасьте.

 

[ЗП 1.6.02] Проблема: при каждом повторе сейва и загрузки добавляется примерно 10 секунд реального времени к значению game.time().

Дельта постоянная – время в главном меню при создании сейва и время ожидания на экране загрузки не влияют.

Пример: вывод внутреннего таймера в сообщение, сразу же сейв и загрузка – начальное время 35 653 секунд, время после загрузки – 35 665 секунд.

Как с этим бороться?

 

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

Шпаргалка

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


Ссылка на сообщение

@BFG game.time() – счетчик времени в активном сейве, и этот счетчик должен обновляться только при апдейте актера, который начинается после загрузки сейва и отключения меню. Или не совсем так?

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

Шпаргалка

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


Ссылка на сообщение

Здрасьте.

 

[ЗП 1.6.02] Создание кнопки CUI3tButton() с тегом frame_mode=1. Судя по описанию, должна получиться кнопка с состояниями d/e/h/t и масштабированием по горизонтали через подстановку частей b/back/e (= CUIFrameLine).

Создал 12 текстур-частей _d_b/back/e, _e_b/back/e, …, указал ссылку на базовое имя – вылет. Указал текстуры в описании кнопки блоками <texture_d>name_d</texture_d> в расчете на подстановку текстур b/back/e – вылет.

По образу и подобию кнопки "ui_inGame2_pda_button" создал набор d/e/h/t с полными текстурами и отдельные наборы с частями, названными _E_b/back/e, _H_b/back/e, _T_b/back/e – вылет.

Добавил в [configs\ui\textures_descr] описание для частей b/back/e по полным текстурам – вылет.

Указал ссылку на текстуру "ui_inGame2_pda_button" – вылет. Для справки, все предполагаемые части этой текстуры даны ссылками на пустое место.

 

Создание кнопки в обычном состоянии по полным текстурам d/e/h/t работает – скриптовая часть и ссылка на папку с текстурами точно правильные.

Ошибка каждый раз одна и та же: "similar(m_tex_rect[flFirst].height(), m_tex_rect[flSecond].height())" – разная высота частей масштабируемой текстуры, хотя все части нарезаны из одной текстуры и имеют одинаковую высоту.

 

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

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

Шпаргалка

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


Ссылка на сообщение

@naxac Так это еще в ТЧ, а в ЧН и ЗП описание с виду вполне рабочее. На всякий случай, уточняю место: [xrGame\ui\UIXmlInit.cpp] bool CUIXmlInit::Init3tButton(…). Должно получиться 4 окна CUIFrameLine – по одному на каждое состояние кнопки; или где-то дальше обработчик спотыкается, или я не понимаю, как правильно назвать части текстур.

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

Шпаргалка

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


Ссылка на сообщение

@naxac Подставил ссылку на имеющийся вариант кнопки – вылет. Разделил эту же кнопку на 12 текстур (+d + h/t отдельно) – выводится. Осталось понять, что было не так в первом эксперименте…

Ну, может кому пригодится:

• в обозначениях частей нельзя использовать верхний регистр (пример с кнопкой ui_inGame2_pda_button из того же файла [ui_actor_pda] – мусор из старых версий);

• части принимаются только с описанием – файлы-кусочки не подходят ни в каком виде, хотя для обычной кнопки можно указывать набор текстур и так.

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

Шпаргалка

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


Ссылка на сообщение

Здрасьте.

Кто умеет читать C++, подскажите, что должен делать следующий код (платформа ЗП):

Spoiler

[xrGame\ui\UIComboBox.cpp]
void CUIComboBox::disable_id(int id)
{
    if(m_disabled.end()==std::find(m_disabled.begin(),m_disabled.end(),id))
        m_disabled.push_back(id);
}

void CUIComboBox::enable_id(int id)
{
    xr_vector<int>::iterator it = std::find(m_disabled.begin(),m_disabled.end(),id);

    if(m_disabled.end()!=it)
        m_disabled.erase(it);
}

 

 

Ожидаемый результат: отключение и обратное включение строки с заданным id в выпадающем списке CUIComboBox().
Видимый результат отсутствует: строка не удаляется и не становится неактивной, а методы CurrentID() и GetTextOf(id) дают старые значения при ее выборе.

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

Шпаргалка

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


Ссылка на сообщение

Здрасьте.

 

ЗП 1.6.02.

Задача: вывести поверх инвентаря окно с набором дочерних статиков.

 

Ссылка level.main_input_receiver() отсутствует, остается отслеживание режима инвентаря в [actor_menu.script] и вывод окна поверх через add_dialog_to_render с небольшой задержкой.

Проблема 1: любые дочерние окна рендер-статика не видны, даже если применить к метод Show(true) – каждый элемент приходится выводить по отдельности.

Проблема 2: рендер-статик выводится поверх всех элементов инвентаря, включая всплывающие окна с информацией.

 

Кроме варианта "вырезать область в текстуре инвентаря и подставить ее обратно через AddCustomStatic вместе с новым окном", как можно решить задачу?

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

Шпаргалка

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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