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

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


Halford

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

malandrinus, просто хотелось бы, чтобы предмет именно висел как в HL 2

 

есть скрипт amk_target - он выводит на худ целеуказатели, которые наводятся точно на голову (точнее на кость) НПС-ам в округе

 

скрипт вообще недоделан - но самая сложная математика там есть

 

я смог допилить его до

27a93.jpg 0f9d4.jpg b1dfb.jpg

 

тут по 5 костям я вычисляю примерно в какие "рамки" можно загнать непися для отображения

+ добавил увеличение - уменьшения рамки взависимости от расстояния, FOV и прочего

+ добавил отсеивание тех НПС, которые стоят за стенами и другим препятствиями (правда если хоть чуть ноги видно - непись определяется)

 

с предметами все будет нааамного проще

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

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


Ссылка на сообщение
malandrinus, есть кнопка tab - нажали один раз - подтянули предмет - нажали второй раз - и сколько держим - с такой силой и кинем его

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


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

malandrinus, речь шла только о физических объектах - а у них вроде секция только одна

 

вот еще ни одного мода не видел, где на tab что-либо вешали

 

а определние ЛКМ - можно сделать без смещения FOV - тогда расчитываем по функции math.ceil(db.actor.accuracy()*1000) если возвращает единицу - значит мы целимся, иначе число будет выше

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


Ссылка на сообщение
Monnoroch, В диалогах вылезет ошибка, если функция вернет nil

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


Ссылка на сообщение
qwertyuiop, иди в тему "Справочник по функциям и классам"

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


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

qwertyuiop, ты просил описания - ты получил описания - ради тебя никто стараться не будет - а флудить по этому поводу в справочнике не стоит

 

лучше после выкидывания объекта давай ему пинок - так будет проще

 

item:get_physics_shell():apply_force(0,item:mass()*10,0)

 

подбросит предмет вверх со скоростью 10 м/с - осталось тебе найти, как прикладывать силу взависимости от направления взгляда

 

скриптового определения есть ли стенка в нужной точке НЕ СУЩЕСТВУЕТ

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


Ссылка на сообщение
Starter, тогда "отключится" вешание артефактов на пояс - ибо после двойного клика артефакт оказывается там - значит, если он на поясе, то удаляем его и создаем аномалию - способ менее красивый. чем оригинальный

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


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

Friday13, Создать два вида "данного" оружия - одно будет с магазином в 0 патронов, другое - сколько надо

 

если надет экзоскелет и в инвентаре 0-вое оружие - удаляем и спавним вместо него стреляющее оружие и наоборот, если не надет экзоскелет

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


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

_Призрак_, после

if (weapon:section()=="wpn_pkm" or weapon:section()=="wpn_m60" or weapon:section()=="wpn_minigun") then

вставляешь

local cur_weap = weapon:section()

далее функция спавна будет выглядеть так:

 

local tmpw = amk.spawn_item_in_inv(cur_weap)

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


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

Starter, SCRIPT, походу никто из вас не читал скриптов 1935-го билда - я даже их отдельно все собрал:

-----------------------------------------------------------------------------------------------------------------------------------
function play_sound (obj, delay, theme, sub_theme, phrase_set, sub_phrase)
--Немного поменял Джон. Просьба не ругаться и не бить(особенно по голове - ей еще думать). Закоментированное
--надо будет стереь. У меня рука не поднялась.
    this.play_sound_rnd(obj, delay, delay + 1, theme, sub_theme, phrase_set, sub_phrase)
end
-----------------------------------------------------------------------------------------------------------------------------------

-- Отбайндивание моих действий от сталкера



-- Если мужик друг и у нас более 50 оборотов здоровья, то идем на помощь
-- Враг. Идем его мочить, если у нас хорошее вооружение и здоровья не менее 90%     
-- не поддается классификации - пошел вон




--Херово построен путь. Читай доку по настройке стрелка




//Тут по идее может вылетать



--Stalker_zombe    - и ежу понятно, что это сталкер зомби




-- Переменные ниже - не настроечные, их менять нельзя :-)



--' Если мы подошли к трупу - поплакать и уйти    



--'4. Если стоим на точке - петь песенки и прочую херню


--printf( "OPAAAAAA!!!!!! Actor is close!!!!!!!!!!!!" )

 

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

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

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


Ссылка на сообщение
Monnoroch, sleep_callback - правда он закомментирован, но если сон восстановили - должен работать

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


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

STARTS,

function create_level_changer(
    p_story_id,    -- STORY_ID нового level_changer (понадобится нам позже)
    p_position,    -- вектор, координаты точки, в которой будет располагаться центр нового level_changer
    p_lvertex_id,    -- level_vertext_id  - идентифицируют уровень, на котором будет создан level_changer
    p_gvertex_id,    -- game_vertext_id       

    p_dest_lv,    -- level_vertex_id   - идентифицируют уровень, на который level_changer будет перебрасывать игрока 
    p_dest_gv,    -- game_vertex_id
    p_dest_pos,    -- координаты точки, в которой на новом уровне окажется игрок
    p_dest_dir,    -- направрение взгляда игрока
    p_dest_level,    -- название уровня, например "L11_Pripyat"
    p_silent    -- следует задать 1, чтобы подавить вопрос о смене уровня (автоматический переход)
)
    local obj = alife():create("level_changer", p_position, p_lvertex_id, p_gvertex_id)

    level.map_add_object_spot(obj.id, "level_changer", "")

    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_u32     = packet:r_u32()
    local level_vertex_id             = packet:r_u32()
    local object_flags             = packet:r_u32()
    local custom_data             = packet:r_stringZ()
    local story_id                 = packet:r_u32()
    local spawn_story_id            = packet:r_u32()

    -- свойства cse_shape
    local shape_count             = packet:r_u8()
    for i=1,shape_count do
        local shape_type         = packet:r_u8()
        if shape_type == 0 then
            -- sphere
            local center         = packet:r_vec3()
            local radius         = packet:r_float()
        else
            -- box
            local axis_x_x = packet:r_float()
            local axis_x_y = packet:r_float()
            local axis_x_z = packet:r_float()
            local axis_y_x = packet:r_float()
            local axis_y_y = packet:r_float()
            local axis_y_z = packet:r_float()
            local axis_z_x = packet:r_float()
            local axis_z_y = packet:r_float()
            local axis_z_z = packet:r_float()
            local offset_x = packet:r_float()
            local offset_y = packet:r_float()
            local offset_z = packet:r_float()
        end
    end

    -- свойства cse_alife_space_restrictor
    local restrictor_type             = packet:r_u8()

    -- свойства cse_level_changer
    local dest_game_vertex_id        = packet:r_u16()  
    local dest_level_vertex_id         = packet:r_u32()  
    local dest_position             = packet:r_vec3()
    local dest_direction             = packet:r_vec3()
    local dest_level_name             = packet:r_stringZ()
    local dest_graph_point             = packet:r_stringZ()
    local silent_mode             = packet:r_u8()


    packet:w_begin(game_vertex_id)            -- game_vertex_id
    packet:w_float(cse_alife_object__unk1_f32)
    packet:w_u32(cse_alife_object__unk2_u32) 
    packet:w_u32(level_vertex_id)            -- level_vertex_id
    packet:w_u32( bit_not(193) )            -- object_flags = -193 = 0xFFFFFF3E
    packet:w_stringZ(custom_data)
    packet:w_u32(p_story_id)            -- story_id
    packet:w_u32(spawn_story_id)

    packet:w_u8(1)            -- количество фигур
--        packet:w_u8(0)            -- тип фигуры: сфера
--        packet:w_vec3(vector():set(0, 0, 0))  -- sphere_center
--        packet:w_float(3.0)
    packet:w_u8(1)            -- тип фигуры: box
    packet:w_float(2)       -- axis_x_x
    packet:w_float(0)       -- axis_x_y
    packet:w_float(0)       -- axis_x_z
    packet:w_float(0)       -- axis_y_x
    packet:w_float(4)       -- axis_y_y
    packet:w_float(0)       -- axis_y_z
    packet:w_float(0)       -- axis_z_x
    packet:w_float(0)       -- axis_z_y
    packet:w_float(4)       -- axis_z_z
    packet:w_float(0)       -- offset_x
    packet:w_float(0)       -- offset_y
    packet:w_float(0)          -- offset_z

    packet:w_u8(3)            -- restrictor_type

    packet:w_u16(p_dest_gv)            -- destination game_vertex_id
    packet:w_s32(p_dest_lv)            -- destination level_vertex_id
    packet:w_vec3(p_dest_pos)        -- destination position
    packet:w_vec3(p_dest_dir)        -- destination direction (направление взгляда)
    packet:w_stringZ(p_dest_level)        -- destination level name
    packet:w_stringZ("start_actor_02")    -- some string, always const
    packet:w_u8(p_silent)            -- 1 for silent level changing

    packet:r_seek(0)
    obj:STATE_Read(packet, packet:w_tell())
level.add_pp_effector ("teleport.ppe", 2006, false)

end


function spawn_tele_bar(obj)
   -- local art_section = "af_electra_moonlight" 
    if obj:section() == "tele_bar" then --and db.actor:object(art_section) then
        local rnd = math.random(7)
        if rnd == 1 then
            bar()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 2 then
            bar2()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 3 then
            bar3()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 4 then
            bar4()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 5 then
            bar5()
            alife():release(alife():object(obj:id()))    
        elseif rnd == 6 then
            bar6()
            alife():release(alife():object(obj:id()))    
        else
            bar7()
            alife():release(alife():object(obj:id()))    
        end
    end
end


function bar()    
        create_level_changer(9821, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), 45474, 1188, vector():set(193.61143493652,0.097166806459427,71.526657104492), vector():set(0.0, 0.0, 0.0), "l05_bar", 1)
end    
function bar2()    
        create_level_changer(9843, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), 47206, 1270, vector():set(198.24176025391,3.271665096283,-77.252685546875), vector():set(0.0, 0.0, 0.0),    "l05_bar",1)
end
function bar3()    
        create_level_changer(9844, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),59366,   1277,  vector():set(232.64491271973,5.1447978019714,-113.61502838135), vector():set(0.0, 0.0, 0.0),    "l05_bar", 1)
end
function bar5()    
        create_level_changer(9845, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),68763, 1274, vector():set(276.64755249023,0.055086404085159,-66.742523193359), vector():set(0.0, 0.0, 0.0),    "l05_bar", 1)
end
function bar6()    
        create_level_changer(9846, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),35860, 1238,vector():set(128.80438232422,-4.8249382972717,16.76756477356),    vector():set(0.0, 0.0, 0.0),"l05_bar",  1)
end
function bar7()    
        create_level_changer(9847, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(),33903,   1239, vector():set(116.09830474854,-5.3052234649658,12.649393081665), vector():set(0.0, 0.0, 0.0),    "l05_bar",  1)
end
--################################################################################
####################

function spawn_stasok()
local obj = amk.spawn_item("stasok",vector():set(-234.90,-19.67,-156.88),47,20038) 
local tbl = amk.read_stalker_params(obj) 
tbl.health = 0 
tbl.updhealth = 0 
amk.write_stalker_params(tbl, obj) 
end

function flash(first_speaker, second_speaker)
   dialogs.relocate_item_section(first_speaker, "ogg_flash_1", "in")
end

function xna(stalker, player)
return stalker:object ("pda") ~= nil
end 

function pda(first_speaker, second_speaker)
   dialogs.relocate_item_section(second_speaker, "pda", "out")
end

function af_rak(first_speaker, second_speaker)
   dialogs.relocate_item_section(second_speaker, "af_wind", "out")
end




function proverka_antirad()
            if not db.actor:object("antirad") then 
                local news_text = "%c[255,160,160,160]Автоматическая система ввода медицинских препаратов\\n%c[default]Напоминаю: %c[255,230,0,0]Противорадиационные препараты отстутствуют!%c[default]Автоматический ввод препаратов невозможен " 
                db.actor:give_game_news(news_text, "ui\\ui_iconsTotal",Frect():set(0,188,83,47), 0, 3000)
            end
end

 

 

2 ошибки были:

случайно сделал перенос в комментарии "--########"

пропустил один end в конце

 

в следующий раз юзай lua checker

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


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

Monnoroch,

 

Только вот тут сомнение,что если сделать эдит активным - будет ли активным сталкер...

финалка по-дефолту встанет на паузу (более ранние билды вообще вылетали) - проверено

 

+ главная сложность не в том, чтобы отловить клавишу (это можно делать глобально: функция GetAssyhcKeyState() - читаем MSDN), а в том, чтобы клавишу нажать в DXInput, видел наработки для других игр, но сорцов нигде нет

 

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

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


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

Starter, выкладывай

, я на прицеливаниях собаку съел :big_boss:

 

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

Monnoroch, определение нажатия ПКМ работает и с биноклем

 

не работает только с ножами, болтами и гранатами

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


Ссылка на сообщение
malandrinus, ага, и плавать, как в денди - прыжками по воде))))

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


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

Starter я этим уже занят - пока утром перед институтом удалось по-быстрому скачать твои модели, присобачить их к биноклю и отключить рамки, и увеличение

скриптами может сегодня ночью, после работы займусь

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


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

sapsan, лови инфопоршень!!! без этого level.main_input_receiver() вернет nil

имена сам узнаешь - просто сунь в bind_stalker.script

 

после function actor_binder:info_callback(npc, info_id)

строку get_console():execute(info_id)

 

далее в этой же функции можешь делать условие по info_id

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


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

sapsan, db.actor:has_info("ui_inventory")

 

и больше тебе ничего не надо, если итем не съедобный (т.е. его можно выкинуть только из инвентаря)

 

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

sapsan, ну да - тебе же он нужен - эта функция вернет true - если открыт именно просмотр своего инвентаря - иначе false

 

------------------------------------------------------------

Да черт его знает

 

кажется совместить серверные и клиентские копии объектов можно только перебором по id

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

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


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

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