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

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

@dsh было, было и в основной ветке, видимо, дополнение признали полезным и затянули. :)
https://github.com/OGSR/OGSR-Engine/commit/544daa9962efb142b6e2b058e045846f96dc5608
Легко найти по истории, уже второй коммит с конца:
https://github.com/OGSR/OGSR-Engine/commits/main/ogsr_engine/xrGame/alife_spawn_registry.cpp

 

Офф: я впервые в ваши правки движка заглянул так-то; даже при взгляде наискосок попадаются любопытные вещи. :)
Если б ещё было время заниматься модостроем, да по-прежнему сохранялся высокий интерес... но нет.

Хватит того, что периодически могу дать ответ по легаси скриптам.

Изменено пользователем Kirgudu
  • Нравится 1
  • Полезно 1
Ссылка на комментарий

Вот теперь картинка сложилась.

 

Это, конечно, бинго: найти одновременно нечитаемый параметр с совпадающим названием и пример кода, который не должен работать на чистой игре. :dash2:

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

Шпаргалка

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

Мужики, спасайте :(

Имеем следующий набор работ:

Скрытый текст
		--4 работы доп охраны
		for i = 6, 9 do
            t = { section = "logic@fox_ohrana_" .. i, idle = 0, prior = 8, state = { 0 },
                in_rest = "", out_rest = "",
			}
            table.insert(sj, t)
		end

		--Кулинар идёт сюда
		t = { section = "logic@artem", idle = 0, prior = 11, state = { 0 },
            in_rest = "", out_rest = "",
            position_threshold = 5,
			predicate = function(obj_info)
                return obj_info.story_id == 9509
            end
        }
        table.insert(sj, t)

 

Проблема в том, что искомый нпс с СИДом 9509 занимает одну из работ сверху (с низшим приоритетом). Почему он отказвыается брать работу с высоким приоритетом? Она ведь точно свободная, ибо предикейт для него сделан с проверкой по СИДу?

 

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

[ЧН 1.5.10] При скриптовом вводе габаритов список CUIListWnd() создается только пустым, а при попытке наполнения не создается вовсе – не выводится даже его родительское окно. При XML-выводе список создается и наполняется успешно. В чем может быть причина?

Spoiler
	local x, y, w, h = 55, 50, 680, 420
	local eh = 70

-- так работает
	local xml = CScriptXmlInit()
	xml:ParseFile(…)
	local list = xml:InitList("list", bk)				-- ссылка на описание <list width=680 height=420 />
	list:SetWndPos( vector2():set(x, y) )

-- так нет
	-- local list = CUIListWnd()
		-- bk:AttachChild(list)
	-- list:SetWndRect( Frect():set(x, y, x+w, y+h) )


	list:SetItemHeight(eh)


	for i = 1, 8 do
		local e = CUIListItemEx()
		e:SetWndRect( Frect():set(0, 0, w, eh) )
		e:SetText("test_" .. i)
		list:AddItem(e)
	end

 

 

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

Шпаргалка

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

Всем привет!

Есть вроде бы простой вопрос: как снять биндер с объекта?

Чуть подробнее: сделал свой биндер для объекта, запускаю:

function init(obj)
	local new_binder = bolt_binder(obj)
    obj:bind_object(new_binder)
end

 

При нужных мне обстоятельствах я хочу "отменить" биндер для данного конкретного объекта, делаю это так:

function bolt_binder:net_spawn(data)
	
  	--тут разная обработка объекта
  
	self.object:bind_object(nil) --удаляем биндер
	--ВСЁ ЧТО ДАЛЕЕ, УЖЕ НЕ ИСПОЛНЯЕТСЯ ПО ПРИЧИНЕ АННИГИЛЯЦИИ :)
	
    if not object_binder.net_spawn(self, data) then
        return false
    end
  	return true	
end

 

Но есть основания полагать, что снимать биндер с объекта так: self.object:bind_object(nil) - это не корректно. Как же правильно?

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

Всем привет. Не получается спрятать и показать статику когда на ГГ определённая броня.

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

    local outfit = db.actor:item_in_slot(6)
    if outfit and get_string(outfit:section(), "backpack_avaliable") ~= false then
    local error = xml:InitStatic("slots_cover", self)
    error:Show(true)
    else
    error:Show(false)
 

 

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

Хочу вывести на экран режим стрельбы с оружия.

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

function actor_on_fire_mode()
    local slot = {1,2,4}
    for n = 1,table.getn(slot) do
    local item = db.actor:item_in_slot(slot[n])
    local wpn = db.actor:active_item()
    if item ~= nil and wpn then

    local fm = sys_ini:r_string(wpn:section(), "fire_modes")
    local fm_t = parse_nums(fm)
    fm_t = 1

    local StatCS = hud:GetCustomStatic("fire_modes_static")
    if StatCS == nil then
    hud:AddCustomStatic("fire_modes_static", true)
    StatCS = hud:GetCustomStatic("fire_modes_static")
    StatCS:wnd():SetText(fm_t)
end
end
end
end

Подскажите как правильно написать функцию.

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

• В чем замысел процитированных строк? Распарсить список, а потом просто присвоить значение 1? Может, имелось в виду fm_t[1]?
local fm_t = parse_nums(fm)
fm_t = 1

 

• Статик "fire_modes_static" прописан в [config\ui\ui_custom_msgs.xml]? Вообще, какой-то результат при выполнении кода есть?

 

• Для получения действующего режима стрельбы надо читать нетпакет.

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

Шпаргалка

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

Здравствуйте!
Как итерировать инвентарь НПС во время диалога с ним? Способ, подсмотренный в скрипте оригинала ЗП, типа

local npc = dialogs.who_is_npc(first_speaker,second_speaker)
	local function itr_inv(temp,item)
	.....
	end
npc:iterate_inventory(itr_inv,nil)

не помог.

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

Проверить построчно: определяется ли NPC, запускается ли итератор, обнаруживаются ли какие-то объекты.

На странице [594] этой же темы было обсуждение с примерами итераторов.

  • Спасибо 1
  • Согласен 1

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

Шпаргалка

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

Как заставить math.max обратиться к таблице?


math.max(1,2,3,4,5) - работает, но таблица предполагается динамичной, способ не подходит

local table = {1,2,3,4,5} (условно)

math.max(table) - не работает (вылет - number expected, got table)

Искал ответ в справочниках по луа и здесь на форуме - не нашел. Полагаю, нужно использовать какой-то метод, но какой - не знаю. table.concat выдает строку, следовательно - вылет (number expected, got string).

New Anomalies 1.1 ☢☢☢ "Смерть-лампа" ☢☢☢ Дисраптор

Русификатор для игры Vendetta: Curse of Raven's Cry

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

local table = {1,2,3,4,5} (условно)

math.max(table) - не работает (вылет - number expected, got table)

 

local t = {1,2,3,4,5}
local m = math.max(unpack(t))
 

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

@Jekyll unpack может помочь, если я не путаю: math.max(unpack(table)) Могу в имени напутать.

 

О, да уже тут ответили.

Изменено пользователем dsh
  • Спасибо 1
  • Нравится 1
Ссылка на комментарий

Как проветрить предметы в слоте?

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

local list_dev = {
    ["detector_simple"] = true,
    ["detector_advances"] = true,
    ["detector_elite"] = true,
    ["detector_svarog"] = true
}

function init_slot()
    if db.actor:item_in_slot(DETECTOR_SLOT) and list_dev[db.actor:item_in_slot(DETECTOR_SLOT):section()] then return true
    else return false
end
end

 

Не работает

 

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

Лучше рюкзак постирать :tongue:

Код с виду правильный, хотя и несколько перемудреный. Номер слота указан верно?  Значение секции детектора читается?

  • Согласен 1

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

Шпаргалка

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...