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

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

Добрый день

В секции с бронёй есть такие строки:
additional_inventory_weight =  0
additional_inventory_weight2 = 0

Скажите, можно как-то присвоить им значение скриптом?
очень нужно, спасибо

God save Hatsune Miku!


Подарки

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

    Здрасьте.

     

    Оконный класс на базе 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

     

     

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

    Шпаргалка

    Ссылка на комментарий
    25.12.2020 в 06:16, Colder сказал:

    проверку аномании в определеных метрах

    В смысле, определить дистанцию до аномалии? Если чистый ТЧ, то не получится, нужен биндер аномалий (можешь взять из ЗП, файл "bind_anomaly_field.script"). Там на апдейте вписываешь ссылку на свою функцию и радуешься.

     

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

    • Полезно 1

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

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

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

    @Jekyll если я правильно помню, это что-то вроде db.actor:position():mul( db.actor:direction() , dist ) 

    Получаешь позицию в том направлении, на том расстоянии. По памяти пишу, могу напутать. 

    Изменено пользователем dsh
    • Нравится 1
    • Полезно 2
    Ссылка на комментарий
    4 часа назад, dsh сказал:

    db.actor:position():mul( db.actor:direction() , dist )

    Получается как-то так (ЗП):
     db.actor:set_actor_position(db.actor:position():add(db.actor:direction():mul(10)))

     

    Кто-нибудь может поделиться нормальной функцией спавна аномалий для ЗП? Аналогичной этой функции?

    Предложенная здесь функция не совсем рабочая, что ли... Например, таймы не работают.

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

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

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

    Вопрос: возможно ли на ЗП(а точнее FFT Engine 64 из СТКоП ВП) проверить скриптом - прикреплен ли к оружию прицел. И если да, то поменять такой-то параметр(размер магазина, к примеру)? Просто через секции - не читается ammo_mag_size

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

    В ЧН есть проверка установленного обвеса через (wpn):weapon_is_scope(), _silencer(), _grenadelauncher(). В ЗП тоже такие методы должны быть.

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

    Шпаргалка

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

    Здравствуйте!

    Пытался заспавнить аномалию с визуалом ("zone_burning_fuzz") с помощью такого кода:

    Скрытый текст
    
    function spawn_bf(section,position,lvid,gvid)
    local sobj = alife():create(section,position,lvid,gvid)
    	repack_visual_zone_bf(sobj)
    end
    
    function repack_visual_zone_bf(sobj)          -- burning_fuzz
    	if sobj == nil then return sobj end
    	local data = read_zone_visual_params(sobj)
    	data.shapes[1]={}
    	data.shapes[1].shtype=1
    	data.shapes[1].v1 = vector():set(1.70797920227051,0,0.0645924285054207)
    	data.shapes[1].v2 = vector():set(0,9.54259395599365,0)
    	data.shapes[1].v3 = vector():set(-0.0645924285054207,0,1.70797920227051)
    	data.shapes[1].offset = vector():set(-0.119056679308414,-2.79967045783997,-0.000208642595680431)
    	data.max_power = 1
    	data.idle_animation = "idle"
    	data.attack_animation = "idle"
    	write_zone_visual_params(data,sobj)
    	return sobj
    end
    
    
    function parse_shape_packet(t,stpk,uppk)
        local shape_count = stpk:r_u8()
        t.shapes={}
        for i=1,shape_count do
            local shape_type = stpk:r_u8()
            t.shapes[i]={}
            t.shapes[i].shtype=shape_type
            if shape_type == 0 then
                -- sphere
                t.shapes[i].center = stpk:r_vec3()
                t.shapes[i].radius = stpk:r_float()
            else
                -- box
                t.shapes[i].v1 = stpk:r_vec3()
                t.shapes[i].v2 = stpk:r_vec3()
                t.shapes[i].v3 = stpk:r_vec3()
                t.shapes[i].offset = stpk:r_vec3()
            end
        end
    end
    
    function fill_object_packet(ret,stpk,updpk)
    	stpk:w_u16(ret.gvid)
    	stpk:w_float(ret.obf32u1)
    	stpk:w_s32(ret.obs32u2)
    	stpk:w_s32(ret.lvid)
    	stpk:w_s32(ret.oflags)
    	stpk:w_stringZ(ret.custom)
    	stpk:w_s32(ret.sid)
    	stpk:w_s32(ret.obs32u3)
    end
    
    function fill_shape_packet(t,stpk,updpk)
        stpk:w_u8(table.getn(t.shapes))
        for i=1,table.getn(t.shapes) do
            stpk:w_u8(t.shapes[i].shtype)
            if t.shapes[i].shtype == 0 then
                stpk:w_vec3(t.shapes[i].center)
                stpk:w_float(t.shapes[i].radius)
            else
                stpk:w_vec3(t.shapes[i].v1)
                stpk:w_vec3(t.shapes[i].v2)
                stpk:w_vec3(t.shapes[i].v3)
                stpk:w_vec3(t.shapes[i].offset)
            end		
        end
    end
    
    function fill_visual_packet(ret,stpk,updpk)
    	stpk:w_stringZ(ret.visual)
    	stpk:w_u8(ret.vsu8u1)
    end
    
    function parse_object_packet(ret,stpk,updpk)
    	ret.gvid=stpk:r_u16()
    	ret.obf32u1=stpk:r_float()
    	ret.obs32u2=stpk:r_s32()
    	ret.lvid=stpk:r_s32()
    	ret.oflags=stpk:r_s32()
    	ret.custom=stpk:r_stringZ()
    	ret.sid=stpk:r_s32()
    	ret.obs32u3=stpk:r_s32()
    	return ret
    end
    
    function parse_visual_packet(ret,stpk,updpk)
    	ret.visual=stpk:r_stringZ()
    	ret.vsu8u1=stpk:r_u8()
    	return ret
    end
    
    function read_zone_visual_params(sobj)
    local stpk=net_packet()
    local uppk=net_packet()
    	stpk:w_begin(0)
    	uppk:w_begin(0)
    	sobj:STATE_Write(stpk)
    	sobj:UPDATE_Write(uppk)
    	local size=stpk:w_tell()
    	local size1=uppk:w_tell()
    	stpk:r_seek(2)
    	uppk:r_seek(2)
    	local t={}
    	parse_object_packet(t,stpk,uppk,size)
    	parse_shape_packet(t,stpk,uppk,size)
    	t.restrictor_type = stpk:r_u8()
    	t.max_power = stpk:r_float()
    	t.owner_id = stpk:r_s32()
    	t.enabled_time = stpk:r_s32()
    	t.disabled_time = stpk:r_s32()
    	t.start_time_shift = stpk:r_s32()
    	t.effective_radius = stpk:r_float()
    	t.offline_interactive_radius = stpk:r_float()
    	t.artefact_spawn_count = stpk:r_u16()
    	t.artefact_position_offset = stpk:r_s32()
    	parse_visual_packet(t,stpk,uppk)
    	t.idle_animation = stpk:r_stringZ() 
    	t.attack_animation = stpk:r_stringZ()
    	return t
    end
    
    function write_zone_visual_params(t,sobj)
    	local stpk=net_packet()
    	local uppk=net_packet()
    	fill_object_packet(t,stpk,uppk)
    	fill_shape_packet(t,stpk,uppk)
    	stpk:w_u8(t.restrictor_type)
    	stpk:w_float(t.max_power)
    	stpk:w_s32(t.owner_id)
    	stpk:w_s32(t.enabled_time)
    	stpk:w_s32(t.disabled_time)
    	stpk:w_s32(t.start_time_shift)
    	stpk:w_float(t.effective_radius)
    	stpk:w_float(t.offline_interactive_radius)
    	stpk:w_u16(t.artefact_spawn_count)
    	stpk:w_s32(t.artefact_position_offset)
    	fill_visual_packet(t,stpk,uppk)
    	stpk:w_stringZ(t.idle_animation)
    	stpk:w_stringZ(t.attack_animation)
    	local size=stpk:w_tell()
    	local size1=uppk:w_tell()
    	stpk:r_seek(2)
    	uppk:r_seek(2)
    	sobj:STATE_Read(stpk,size)
    	sobj:UPDATE_Read(uppk)
    end

     

    Собственно спавн осуществляется через function spawn_bf(section,position,lvid,gvid). Получаю такой лог вылета:

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

                              FATAL ERROR
    [23:25:07.207]  
    [23:25:07.207] [error] Expression    : <no expression>
    [23:25:07.207] [error] Function      : CModelPool::Instance_Load
    [23:25:07.207] [error] File          : I:\Demosfen\src\Layers\xrRender\ModelPool.cpp
    [23:25:07.207] [error] Line          : 99
    [23:25:07.207] [error] Description   : fatal error
    [23:25:07.207] [error] Arguments     : Can't find model file 'Зz№.ogf'.
    [23:25:07.207]  
    [23:25:07.207]
    [23:25:07.207] stack trace:
    [23:25:07.207]
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrCore.dll at 00007FFF131DD81A xrDebug::Fatal() + 122 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrRender_R4.DLL at 00007FFEFCC7ED3B
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrRender_R4.DLL at 00007FFEFCC7F326
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrGame.DLL at 00007FFEFB7BAFAD
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrGame.DLL at 00007FFEFB7BC03A
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrGame.DLL at 00007FFEFB9ECD5D
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrGame.DLL at 00007FFEFB767971
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrGame.DLL at 00007FFEFBB5E0C2 xrFactory_Destroy() + 40914 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrGame.DLL at 00007FFEFB832534
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrGame.DLL at 00007FFEFB825417
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrGame.DLL at 00007FFEFB8256FC
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.dll at 00007FFF23DBBF2F CRenderDevice::CSecondVPParams::IsSVPFrame() + 179 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.dll at 00007FFF23DBB83D CRenderDevice::FrameMove() + 317 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.dll at 00007FFF23DBB08D CRenderDevice::on_idle() + 269 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.dll at 00007FFF23DBB41F CRenderDevice::message_loop() + 127 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.dll at 00007FFF23DBB625 CRenderDevice::Run() + 501 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.dll at 00007FFF23E1E244 Startup() + 516 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.dll at 00007FFF23E1E9B6 RunApplication() + 1446 byte(s)
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.exe at 00007FF7250F12C7
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.exe at 00007FF7250F1384
    [23:25:07.220] D:\Games\Call_of_Chernobyl_dev.1.05\bins\xrEngine.exe at 00007FF7250F162E
    [23:25:07.220] C:\Windows\System32\KERNEL32.DLL at 00007FFF3F777974 BaseThreadInitThunk() + 20 byte(s)
    [23:25:07.220] C:\Windows\SYSTEM32\ntdll.dll at 00007FFF3FC7A261 RtlUserThreadStart() + 33 byte(s)
    [23:25:07.220]  
    [23:25:07.220] Lua Stack

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

    Понимаю, что это не чистая ЗП, но специфика наверняка та же.

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

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

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

    Вместо названия модели кракозябры.

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

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

    @Jekyll, у меня есть предположение: может в функцию "write_zone_visual_params" тоже добавить "w_begin(0)"?

    function write_zone_visual_params(t,sobj)
    	local stpk=net_packet()
    	local uppk=net_packet()
    	stpk:w_begin(0)				-- !!!
    	uppk:w_begin(0)				-- !!!
    	fill_object_packet(t,stpk,uppk)
    	...

     

    • Полезно 1

    S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)


    Подарки

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

    кракозябры

    Я бы еще на всякий случай проверил, что скрипт сохранен в кодировке ANSI. Странным образом X-Ray иногда недолюбливает UTF-8, а современные текстовые редакторы по умолчанию стремятся сохранять всякие текстовые файлы именно в нем.

    • Согласен 2

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

    Помогите с проблемой (ТЧ)

    у меня есть локальная переменная text, в которой содержится текст
    Как его сравнить с текстом, который находится в 
    <string id="test">
    <text>текст, с которым нужно сравнить</text>
    </string>
    что-то типа 
    if text == *тут ссылка на string id* then 
    как сослаться на этот текст? 

    Я, конечно, могу сравнивать напрямую
    If text == "test text" then
    Но это работает только для английского текста, русский текст, написанный в скрипте он переводит в какую-то нечитаемую ересь

    God save Hatsune Miku!


    Подарки

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

    @Labadal 
     

    if text == game.translate_string("test") then
    
      // ваши действия...

     

    • Спасибо 2

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

    Здравствуйте.

    Такой вопрос, для общего развития: может ли привести скриптовый спавн аномалий по "невалидным" координатам к проблемам впоследствии? Под "невалидными" координатами подразумеваются, например, крыши зданий, вышек, транспорт и т.п., когда при снятии позиции известным способом выводится инфа valid = false. Кто-нибудь так экспериментировал? Аномалии-то спавнятся и работают без проблем, но хотелось бы знать наверняка.

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

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

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

    @Jekyll насчёт последствий не знаю наверняка. Но в НС2016 (вероятно и не только там) есть способ удаления, цитата: 

    "функция удаляющая объект с неверным вертексом(определение на валидность не только game, но и level вертекса)"

    Если имеются ввиду именно такие объекты, то это как способ (костыль) решения возможных последствий.

     

    • Спасибо 1

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


    Подарки

  • 2
  • 3
  • 5
  • 4
  • Ссылка на комментарий
    Только что, Jekyll сказал(а):

    может ли привести скриптовый спавн аномалий по "невалидным" координатам к проблемам впоследствии?

    Какого рода "проблемы" имеются в виду?

    Аномалия сама работает по факту попадания объектов в ее шейп - т.е. ей безразлично, где там АИ-сетка.

    Зверью и нпс, от того что им станет недоступно место не имеющее сетки - тоже ни холодно ни жарко, оно им и так не доступно т.к. там нет сетки.

    Спавн артов из аномалии - можно делать по тем же координатам, артефакту ничего не сделается.

    Какие еще варианты? Было бы проще отвечать на вопрос, если бы было более понятно, что имеется в виду.

    Только что, mole venomous сказал(а):

    Если имеются ввиду именно такие объекты, то это как способ (костыль) решения возможных последствий.

    Опять же, непонятно, о каких именно последствиях идет речь.

    Может быть, все же раскроете секрет?

    • Спасибо 1

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

    Может быть, все же раскроете секрет?

    Нет, не раскрою. Это лишь предположение, основанное на том, что раз есть способ принудительного удаления, он для чего то нужен.

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


    Подарки

  • 4
  • 5
  • 4
  • 5
  • Ссылка на комментарий
    Только что, mole venomous сказал(а):

    он для чего то нужен.

    Конечно нужен. Но, предполагаю что не для аномалий.

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

    Какого рода "проблемы" имеются в виду?

    Мало ли, сейвы начнут биться или еще что в таком же духе. Просто так, потому что вертекс вдруг невалидный. Это же Х-рэй как-никак:)

     

    4 минуты назад, mole venomous сказал(а):

    он для чего то нужен

     

    5 минут назад, Zander_driver сказал(а):

    предполагаю что не для аномалий

    Вроде бы, если арты спавнятся в невалидных вертексах (например, за пределами игровой зоны локации - не помню, как это правильно называется), будет вылет, или я что-то путаю?

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

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

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

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

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

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

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

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

    Войти

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

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

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

    AMK-Team.ru

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