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

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

Внимательно стоит читать не только документацию по игре в случае её наличия, но и посты, на которые сам же ссылаешься, например, тут: https://www.amk-team.ru/forum/topic/6138-cs-kovyryaemsya-v-faylah/?do=findComment&comment=1443031
Всё в ЧН работает, проверено личным опытом модостроя, а Malandrinus в своём посте разжевал вопрос так, что дальше некуда.

Не нужно путать spawn_id, задаваемый отдельным параметром в секции объекта в all.spawn и тот виртуальный spawn_id, который является порядковым номером этой секции объекта и который при распаковке, например, средствами acdc (с SDK не работал, но, возможно, там тоже) можно увидеть в квадратных скобках в начале секции. Поскольку при перепаковке all.spawn этот номер может измениться, единственно правильным способом получить его при исполнении будет вызов метода alife():spawn_id(spawn_story_id), где spawn_story_id, в свою очередь, также прописан отдельным параметром в секции объекта в all.spawn. Никакие spawn_id, прописанные там же отдельным параметром, не должны использоваться в данном механизме ни в ТЧ, ни в ЧН, ни в ЗП, а story_id можно использовать только для поиска уже заспавненного объенкта перед его удалением, но не для повторного спавна.

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

Не нужно путать spawn_id, задаваемый отдельным параметром в секции объекта в all.spawn и тот виртуальный spawn_id, который является порядковым номером этой секции объекта

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

 

Насчет оригинального поста Malandrinus – действительно, не дочитал.

 

8 hours ago, Kirgudu said:

Никакие spawn_id, прописанные там же отдельным параметром, не должны использоваться

Тем не менее, такие записи зачем-то есть; можно было бы считать обозначения аргументов простой путаницей в названиях, если бы спавн через spawn_id не работал вообще, но он работает в ТЧ. Видимо, "неучтенка" из ранних билдов…

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

Шпаргалка

Ссылка на комментарий
On 11/14/2013 at 9:32 AM, Malandrinus said:

local spawn_id = alife():spawn_id(spawn_story_ids.some_level_changer)
alife():create(spawn_id)

Если метод spawn_id() принимает только аргумент spawn_story_id, то как работает следующий код из OGSR и почему такой код, в отличие от ТЧ/ЧН, не вешает скрипты?

Spoiler
[ogse_lc_mngr.script]
function lc_create(sid, spot, hint)
	local sim = alife()
	if not sim:story_object(sid) then				-- ссылка на story_id
		local spawn_id = sim:spawn_id(sid)			-- снова ссылка на story_id
		local lc       = sim:create  (spawn_id)
		if lc then
			
		end
	end
end

 

 

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

Шпаргалка

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

Ну, если уж ссылаться на OGSR, то там же можно, если не путаю, спаунить и по имени, без всяких story и spawn id.

А нет, я таки путаю. Не нахожу этого в OGSR. Это я только у себя добавлял получения spawn_id по имени:

https://github.com/dsh2dsh/OGSR-Engine/commit/be0d672ca18c80289cfa0c8bd7e6552b513f4587

Quote

Добавил alife():spawn_id( имя )

которая возвращает spawn_id из all.spawn по имени объекта.

 

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

@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

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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