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

[SoC] Ковыряемся в файлах


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

Вертолет летит.Есть метод вычисления его вектора скорости.Есть метод вычисления его координат.

 

Мне надо на векторе его скорости с началом отсчета в точке его координат найти точку.

 

Схема:

 

O------->------>---o------->>

 

O -начало - о - точка на векторе.

Вектор - произвольный

Расстояние от О до о = 5.

Как мне получить координаты точки о?

 

Добавлено через 4 мин.:

Как я понял мне надо:

 

local newpos = vector()

newpos:mad(obj:position(),obj:get_helicopter():GetCurrVelocityVec(), 5)

 

Я прав?

 

Просто единственный раздел математики,вызывающий у меня трудности - векторы... :(

А уж при переводе на программирование...

Изменено пользователем Monnoroch
Ссылка на комментарий
local newpos = vector()

newpos:mad(obj:position(),obj:get_helicopter():GetCurrVelocityVec(), 5)

вроде так, с небольшой поправкой (я там ранее сам недопонял)

newpos:mad(obj:position(),obj:get_helicopter():GetCurrVelocityVec():normalize(), 5)

Надо ещё было привести вектор скорости к единичному.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

malandrinus,

 

Вот функция спавна вертолета:

 

function heli(posx,posy,posz,lvid,gvid,logic)
    local obj = alife():create("helicopter",vector():set(posx,posy,posz),lvid,gvid)
    local packet = net_packet()
    obj:STATE_Write(packet)

    -- свойства cse_alife_object
    local game_vertex_id = packet:r_u16()
    local cse_alife_object__unk1_f32 = packet:r_float()
    local cse_alife_object__unk2_s32 = packet:r_s32()
    local level_vertex_id = packet:r_s32()
    local object_flags = packet:r_s32()
    local custom_data = packet:r_stringZ()
    local story_id = packet:r_s32()
    local cse_alife_object__unk3_s32 = packet:r_s32()

    -- свойства cse_visual
    local model_visual = packet:r_stringZ()
    local cse_visual__unk1_u8 = packet:r_u8()
    -- свойства cse_motion
    local motion_name = packet:r_stringZ()

    -- свойства cse_ph_skeleton
    local skeleton_name = packet:r_stringZ()
    local cse_ph_skeleton__unk1_u8 = packet:r_u8()
    local cse_ph_skeleton__unk2_u16 = packet:r_u16()
        
    -- свойства cse_alife_helicopter
    local cse_alife_helicopter__unk1_sz = packet:r_stringZ()
    local engine_sound = packet:r_stringZ()

    --устанавливаем логику
    custom_data = "[logic]\ncfg = scripts\\heli\\"..logic..".ltx"

    -- теперь заполняем нужные параметры
    -- свойства cse_alife_object
    packet:w_begin(game_vertex_id)
    packet:w_float(cse_alife_object__unk1_f32)
    packet:w_s32(cse_alife_object__unk2_s32)
    packet:w_s32(level_vertex_id)
    object_flags = bit_not(5)    -- ~5 = 0xfffffffa
    packet:w_s32(object_flags)
    packet:w_stringZ(custom_data)
    packet:w_s32(-1)
    packet:w_s32(cse_alife_object__unk3_s32)

    -- свойства cse_visual
    packet:w_stringZ(model_visual)
    packet:w_u8(cse_visual__unk1_u8)
    
    -- свойства cse_motion
    packet:w_stringZ(motion_name)        
    
    -- свойства cse_ph_skeleton
    skeleton_name = "idle"
    packet:w_stringZ(skeleton_name)
    packet:w_u8(cse_ph_skeleton__unk1_u8)
    packet:w_u16(cse_ph_skeleton__unk2_u16)

    -- свойства cse_alife_helicopter
    cse_alife_helicopter__unk1_sz = "idle"
    engine_sound = "alexmx\\helicopter"
    packet:w_stringZ(cse_alife_helicopter__unk1_sz)
    packet:w_stringZ(engine_sound)

    -- считываем скорректированные параметры
    packet:r_seek(0)
    obj:STATE_Read(packet, packet:w_tell())


    return obj
end

 

 

 

Вот вертушка из алл.спавна:

[107]
; cse_abstract properties
section_name = helicopter
name = esc_heli
position = -317.183898925781,16.3679752349854,83.289665222168
direction = 0,-1.47526597976685,0

; cse_alife_object properties
game_vertex_id = 0
distance = 0
level_vertex_id = 594270
object_flags = 0xfffffffa
custom_data = <<END
[logic]
...тут логика...
END
story_id = 14

; cse_visual properties
visual_name = physics\vehicles\mi24\veh_mi24_u_01

; cse_motion properties
motion_name = helicopter\aaa.anm

; cse_ph_skeleton properties
skeleton_name = idle

; cse_alife_helicopter properties
startup_animation = idle
engine_sound = alexmx\helicopter

 

 

 

В нет-пакете обрабатываются свойства cse_alife_object, cse_visual, cse_motion, cse_ph_skeleton, cse_alife_helicopter - т.е. все свойства из алл.спавна, кроме cse_abstract. Насколько я понимаю, после команды

obj:STATE_Write(packet)

пакет начинает разбираться последовательно и с самого начала, т.е. в начале пакета никакого direction нет. Более того, операции над вектором r_vec3() в функции вообще ни одной нет, стало быть перепутать я его ни с чем не мог. Отсюда и вопрос - где же искать этот вектор в нет-пакете?

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

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

[spoiler=ИГРАЮ В+конф.компа] AMk1.4.1+HC oт 26.04.09+Chapel'nik 1.1.2 от 29.04.09+Monorocn&Zekaaddonsv 1.3+Beautiful_Weather_1.0

Операционная система Microsoft Windows XP Professional

Пакет обновления ОС Service Pack 2

DirectX 4.09.00.0904 (DirectX 9.0c)

Тип ЦП DualCore Intel Core 2 Duo E6550, 2333 MHz (7 x 333)

Системная плата Gigabyte GA-P35-DS3

Чипсет системной платы Intel Bearlake P35

Системная память 3584 Мб

Видеоадаптер Radeon X1900 Series (512 Мб)

3D-акселератор ATI Radeon X1900 XT/XTX (R580)

Разрешение монитора в игре 1280х1024

Дисковый накопитель SAMSUNG HD321KJ (320 Гб, 7200 RPM, SATA-II)

Дисковый накопитель ST3500320AS (500 Гб, 7200 RPM, SATA-II)[/b]

Оптический накопитель NEC DVD_RW ND-4551A

 

 

 

Ссылка на комментарий
а зачем именно к единичному?

операция mad(pos, dir, dist) - это комбинация pos + dir*dist

При умножении единичного вектора скорости на 5 получается вектор, длина которого 5, а направление совпадает со старым вектором скорости. Он добавляется к позиции. Это разве не то, что надо?

Вот только вопрос, что будет, если скорость будет нулевая. Полагаю, это стоит проверять отдельно

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Какой текстурой обтянуто лицо Сяка(торговец на Радаре)?

Какой файл отвечает за трансмутацию артефактов(содержит информацию о том,в какую аномалию кидать арт)?

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

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

есть левел вертекс допустим lvid

получить его позицию просто:

level.vertex_position(lvid)

а кто знает как из левел вертекса получить гейм вертекс, это вообще реально? :unsure:

название локации для этого левел вертекса если что известно

118 101 110 105 44 32 118 105 100 105 44 32 118 105 99 105
Ссылка на комментарий

Кто нибудь знает как из конфига высчитать скорость снаряда РПГ?

 

Или чистая физика + математика только?

Изменено пользователем Monnoroch
Ссылка на комментарий

Gonarh, можно перебрать все гейм вертексы на локации и найти ближайший, вот так можно получить положение гейм вертекса:

game_graph():vertex(a):game_point()

А вообще посмотри скрипт динамических аномалий из AMK мода, там они как-рас определяли гейм вертекс из левел вертекса

Изменено пользователем 8push5
Возможно всё, ну или почти всё.
Ссылка на комментарий

Monnoroch, кусок кода из w_rpg7.ltx

fire_distance                = 400
bullet_speed                 = 200;300        ;начальная скорость пули
rpm                          = 5

Vita sine libertate, nihil

Vita sine litteris - mors est

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

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

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Свойства CustomRocket
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
engine_present        = true    ;присутствует ли в ракете двигатель
engine_work_time    = 5000    ;время работы двигателя (в милисекундах)
engine_impulse        = 1000    ;
engine_impulse_up    = 137.34;215.58;137.34 = 2*9.81*7 - значение этого параметра (который является некой подъемной силой, вопреки названию),
                                ;при котором ракета массой 7кг не опускается под дейсвием 
                                ;гравитации. 2*9.8=19.62 - ускорение свободного падения в мире сталкеров
                                ;при меньших значениях ракета будет опускаться, при больших подниматься

lights_enabled = TRUE        ;свет вокруг ракеты, во время полета
trail_light_color = 0.7,0.6,0.3
trail_light_range = 20.0

engine_particles = weapons\rpg_trail_01
;fly_particles     = weapons\rpg_trail_01

force_explode_time            = 10000; msec

[sect_hm_immunities]
burn_immunity            = 1.0
strike_immunity            = 1.0
shock_immunity            = 1.0
wound_immunity            = 1.0        
radiation_immunity        = 1.0
telepatic_immunity        = 1.0
chemical_burn_immunity    = 1.0
explosion_immunity        = 1.0
fire_wound_immunity        = 0.05

Vita sine libertate, nihil

Vita sine litteris - mors est

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

1deFULL, текстура лица Сяка в NLC - act_sold_bandan_head_1.dds.

А за трансмутацию артефактов отвечает скрипт amk_mod.script.

Изменено пользователем Министр
Ссылка на комментарий

это я видал.я не уверен,все ли работает тут...или чтото с ранних билдов осталось может?

 

engine_impulse - это какой импульс? суммарный (за 5 секунд) или за секунду?

надо думать...\

 

 

 

====

 

что врятли?

Изменено пользователем Monnoroch
Ссылка на комментарий

Monnoroch, врятли, тем более тут и про двигатель и про отклонения

 

если делали мозгом, то сумарный, если пыс то момент

 

врятли ето не связано

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

Vita sine libertate, nihil

Vita sine litteris - mors est

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

malandrinus, это дело возвращает нил...

 

Правда я там наворотил:

 

function look_pos(obj1,obj2)

if not obj1 or not obj2 then return nil end

local dist = obj2:position():distance_to(obj1:position())

local a = system_ini():r_float(obj2:active_item():section(),"bullet_speed")

local b = obj1:get_helicopter():GetCurrVelocity()

if not a or not b then return nil end

local koof = b/a

local delda_s = koof*dist -- это неточно...

local newpos = vector()

local kon = newpos:mad(obj:position(),obj:get_helicopter():GetCurrVelocityVec():normalize(), delda_s)

return kon

end

 

obj1 - вертолет

obj2 - непись

 

Оба obj точно не nil.

Изменено пользователем Monnoroch
Ссылка на комментарий
В нет-пакете обрабатываются свойства cse_alife_object, cse_visual, cse_motion, cse_ph_skeleton, cse_alife_helicopter - т.е. все свойства из алл.спавна, кроме cse_abstract.

Да, походу никак до этих свойств не добраться. Сейчас сам внимание обратил, что пакет всегда начинается уже с cse_alife_object. Наверное, в этом есть смысл. Там такие свойства, что менять их весьма чревато.

 

а кто знает как из левел вертекса получить гейм вертекс, это вообще реально?

название локации для этого левел вертекса если что известно

game_graph():vertex(a):game_point()

game_point() выдаёт "глобальные" координаты, т.е. координаты точки не на уровне, а с учётом расположения уровня относительно остальных. Толку с этих координат мало, поскольку все без исключения остальные координаты - это локальные координаты внутри уровня. Если сравнивать с координатами на уровне, то надо использовать level_point.

 

У меня такое предложение по вычислению gvid. Есть game.graph, в котором всё есть вся необходимая информация. Его можно распаковать в фармат ini/ltx файла с помощью утилитки xiani. Тогда, из игры нужную информацию можно получать с помощью класса ini_file. Для разовых действий типа спавна вполне сгодится, и главное - абсолютно надёжно.

 

хмм.но там же снаряд сначала мееедленно вылетает и быстро набирает скорость

Ну если вылетит с нулевой скоростью, то плюхнется на землю прямо перед носом стреляющего =) Хотя это в реальности. В игре возможно и в самом деле начинает с нулевой.

 

это дело возвращает нил...

mad не возвращает значение, а меняет значение вектора, для которого вызывается. Поэтому return newpos

 

И ещё мне думается, что вот это

local a = system_ini():r_float(obj2:active_item():section(),"bullet_speed")

лучше бы сделать один раз где-нибудь заранее. Очень сильно подсадит производительность

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

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

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

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

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

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

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

Войти

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

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

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