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

Скриптование


Svoboда

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

@hArdplAyer22_22 

Есть такой код:

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

local Sitem = inventory.belt[item]
    if Sitem and Sitem>5 then    
        amk.remove_item(db.actor:object(item))    
        amk.spawn_item_in_inv(item)       
    end    

Вот тут нужна помощь спецов, что бы определить локальную item, как любой артефакт. Если это возможно при условии, что итем на поясе.  Я пробовал всяческие переборы, у меня не вышло.

  • Сомнительно 1

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

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


Ссылка на сообщение
50 минут назад, AndreySol сказал(а):

Кстати, неплохо бы знать откуда вызывается ф-ция scan_inv(...)?

Вот это

db.actor:inventory_for_each(scan_inv)

вызывается внутри обновления инвентори (inventory.update())

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

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


Ссылка на сообщение
1 минуту назад, AndreySol сказал(а):

апдейте актерского биндера висит

ну а где же ещё? 

  • Сочувствую 1

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

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


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

@hArdplAyer22_22 Вот прям со всеми потрохами:

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

esc_tbl = {
        "esc_secret_bridge_vagon",
        "esc_secret_anomaly_dead",
        "esc_secret_bandit_cross",
        "esc_secret_bandit_supply",
        "esc_secret_under_cross",
        "esc_secret_refuge",
        "esc_secret_safe_farm",
        "esc_secret_vagon_container",
        "esc_secret_stalker_things",
        "esc_secret_box_bridge",
        "esc_secret_village_rucksack",
        "esc_secret_village_roof",
        "esc_secret_nice_place",
        "esc_secret_vorpal",
        "esc_secret_commander_goods",
        "esc_secret_road",
        "esc_secret_thief",
        "esc_secret_gas_pipe",
        "esc_secret_truck_goods",
        "esc_secret_kpp_tower",
    }

function give_treasure_esc_random()
    treasure_manager.get_treasure_manager():give_treasure(esc_tbl[math.random(#(esc_tbl))])
end

 

  • Спасибо 1
  • Нравится 1

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

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


Ссылка на сообщение
3 часа назад, Баба ЯГА сказал(а):

где-то в скриптах есть коллбэк на взятие ГГ в руки физобъекта

Имя скрипта как бы намекает: bind_physic_object.script

Там ф-ия: generic_physics_binder:use_callback

Через неё без проблем отследишь поднятие дроп-ящика, в котором заведомо может  что-нибудь спаунится. А остальное... Не уверен, попробуй ковырнуть init, но думаю, выше упоминали правки движка не без причины.  

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

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


Ссылка на сообщение
2 минуты назад, I am Dead сказал(а):

когда повреждены ноги хочу заблокировать бег

можно просто заблокировать спринт

Есть мод "Перелом ног". Не юзал, но по описанию  там правки движка из X-Ray extensions. Может что то перешло в ОГСР?

  • Спасибо 1

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

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


Ссылка на сообщение
4 часа назад, Krolevarka сказал(а):

просто не отправляются

Сообщения после смерти ГГ вполне себе отправляются. Разве не обращал внимания, когда актор валяется мёртвый, а рандомные смс от сталкеров продолжают поступать.

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

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


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

@Fly Скачивать вполне стоит. Сам так учился основам, только не видеоуроками, а текстами (ну и методом тыка, конечно) 

Принципиального различия нет и все перечисленные тобой уроки подойдут для 1.0006.

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

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

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


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

@Rod_K Это можно подсмотреть в скриптах Guiders Mod (тами всего два скриптовых файла). Либо установи этот мод и, следуя инструкциям, сделай "проводником" кого-либо из НПС. Это актуально для ТЧ.

На двигле ОГСР всё проще, достаточно использовать консольную команду "jump_to_level".

 

Изменено пользователем mole venomous
  • Полезно 1

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

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


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

@Rod_K Что бы не потрошить спаун, воспользуйся скриптовым ЛЧ. Если новая локация добавлена без косяков, всё отработает хорошо.

Под спойлером ф-ии спавна и удаления ЛЧ. Для примера - телепорт в комнату Бармена. Вызываешь спавн/удаление в удобных тебе местах.

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

-- Аргумент info для фикса телепортации Кордон-ТД
function start_level_changer(p_dest_pos, p_dest_lv, p_dest_gv, p_dest_level, info)

    -- Перед созданием ЛЧ выдём инфо, если необходимо
    if info ~= nil then
        if not has_alife_info(info) then 
            db.actor:give_info_portion(info) 
        end
    end

    local obj = alife():create("level_changer", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    local packet = net_packet()
    obj:STATE_Write(packet)
    -- свойства cse_alife_object
    local game_vertex_id     = packet:r_u16()
    local distance           = packet:r_float()
    local direct_control     = 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                = packet:r_vec3()
            local axis_y                = packet:r_vec3()
            local axis_z                = packet:r_vec3()
            local offset                = packet:r_vec3()
        end
    end
    -- свойства cse_alife_space_restrictor
    local restrictor_type             = packet:r_u8()
    -- свойства cse_alife_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)
    packet:w_float(distance)
    packet:w_u32(direct_control) 
    packet:w_u32(level_vertex_id)
    packet:w_u32( bit_not(193) )
    packet:w_stringZ(custom_data)
    packet:w_u32(46489)
    packet:w_u32(46489)
    packet:w_u8(1)
    packet:w_u8(0)
    packet:w_vec3(vector():set(0, 0, 0))
    packet:w_float(2)
    packet:w_u8(3)
    packet:w_u16(p_dest_gv)
    packet:w_u32(p_dest_lv)    
    packet:w_vec3(p_dest_pos)
    packet:w_vec3(vector():set(0, 0, 0))
    packet:w_stringZ(p_dest_level)
    packet:w_stringZ("start_actor_99")
    packet:w_u8(1)
    packet:r_seek(0)
    
    obj:STATE_Read(packet, packet:w_tell())
end

local disposition

function teleport_bar_vip_room() 
    disposition = vector():set(114.89195251465,-5.3071584701538,14.840103149414)
    if level.name()~="l05_bar" then
        start_level_changer(disposition, 33615, 1239, "l05_bar")
    else
        db.actor:set_actor_position(disposition)
    end    
end

function Del_LevelChanger()
  local LV = alife():story_object(46489)
    if LV then                                           
        alife():release(LV, true)                                     
    end
end

 

Изменено пользователем mole venomous
  • Согласен 1
  • Полезно 2

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

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


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

@Firestarter Можно выдать тайники где-нибудь в начале новой игры. Для этого нужен список всех тайников. Список всех "ванильных" тайников и функция для выдачи :

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

local treasure_list = {

        "esc_secret_bridge_vagon",
        "esc_secret_anomaly_dead",
        "esc_secret_bandit_cross",
        "esc_secret_bandit_supply",
        "esc_secret_under_cross",
        "esc_secret_refuge",
        "esc_secret_safe_farm",
        "esc_secret_vagon_container",
        "esc_secret_stalker_things",
        "esc_secret_box_bridge",
        "esc_secret_village_rucksack",
        "esc_secret_village_roof",
        "esc_secret_nice_place",
        "esc_secret_vorpal",
        "esc_secret_commander_goods",
        "esc_secret_road",
        "esc_secret_thief",
        "esc_secret_gas_pipe",
        "esc_secret_truck_goods",
        "esc_secret_kpp_tower",
    
        "gar_secret_bandit_hiding",
        "gar_secret_old_kran",
        "gar_secret_grizly",
        "gar_secret_north_tube",
        "gar_secret_metal_hiding",
        "gar_secret_cistern_pipe",
        "gar_secret_east_tube",
        "gar_secret_rucksack_noones",
        "gar_secret_murdered",
        "gar_secret_rotted_stump",
        "gar_secret_forest_log",
        "gar_secret_shooters_supply",
        "gar_secret_car_hiding",
        "gar_secret_bus_rucksack",
        "gar_secret_toilet",
        "gar_secret_south_safe",
        "gar_secret_metal_hiding2",
        "gar_secret_box_supply",
        "gar_secret_bus_tube",
        "gar_secret_rucksack_ruins",
        "gar_secret_box_blockpost",
        "gar_secret_deadman",
        "gar_secret_avoska",
        "gar_secret_escavator",
        "gar_secret_concrete_blocks",
    
        "agr_secret_gray",
        "agr_secret_stump",
        "agr_secret_cross",
        "agr_secret_tree_rucksack",
        "agr_secret_pipe_rucksack",
        "agr_secret_roof_box",
        "agr_secret_rucksack_blue",
        "agr_secret_cisterne",
        "agr_secret_rucksack_window",
        "agr_secret_box_radiation",
        "agr_secret_box_stairs",
        "agr_secret_box_factory",
        "agr_secret_bag_stand",
        "agr_secret_box_trash",
        "agr_secret_safe_tree",
        "agr_secret_rucksack_laketube",
        "agr_secret_tube_radiactive",
        "agr_secret_pipe_breakdown",
        "agr_secret_safe_bush",
        "agr_secret_box_archive",
        "agr_secret_sewers",
        "agr_secret_safe_wall",
        "agr_secret_box_institute",
        "agr_secret_agrosafe",
        "agr_secret_truck",
        "agr_secret_rotted_log",
        "agr_secret_box_zavhoz",
        "agr_secret_inventory_schlosser",
    
        "agru_secret_bandit_obschak",
        "agru_secret_rucksack_corner",
        "agru_secret_box_bloodsucker",
        "agru_secret_box_habar",
        "agru_secret_mole_cave",
    
        "val_secret_0000",
        "val_secret_0001",
        "val_secret_0002",
        "val_secret_0003",
        "val_secret_0004",
        "val_secret_0005",
        "val_secret_0006",
        "val_secret_0007",
        "val_secret_0008",
        "val_secret_0009",
        "val_secret_0010",
        "val_secret_0011",
        "val_secret_0012",
        "val_secret_0013",
        "val_secret_0014",
        "val_secret_0015",
        "val_secret_0016",
        "val_secret_0017",
        "val_secret_0018",
        "val_secret_0019",
        "val_secret_0020",
        "val_secret_0021",
        "val_secret_0022",
        "val_secret_0023",
        "val_secret_0024",
        "val_secret_0025",
        "val_secret_0026",
        "val_secret_0027",
        "val_secret_0028",
        "val_secret_0029",
        "val_secret_0030",
        "val_secret_0031",
        "val_secret_0032",    
    
        "x18_secret_0000",
        "x18_secret_0001",
    
        "bar_secret_0000",
        "bar_secret_0001",
        "bar_secret_0002",
        "bar_secret_0003",
        "bar_secret_0004",
        "bar_secret_0005",
        "bar_secret_0006",
        "bar_secret_0007",
        "bar_secret_0008",
        "bar_secret_0009",
        "bar_secret_0010",
        "bar_secret_0011",
        "bar_secret_0012",
        "bar_secret_0013",
        "bar_secret_0014",
        "bar_secret_0015",
        "bar_secret_0016",
        "bar_secret_0017",
        "bar_secret_0018",
        "bar_secret_0019",    
    
        "ros_secret_0000",
        "ros_secret_0001",
        "ros_secret_0002",
        "ros_secret_0003",
        "ros_secret_0004",
        "ros_secret_0005",
        "ros_secret_0006",
        "ros_secret_0007",
        "ros_secret_0008",
        "ros_secret_0009",
        "ros_secret_0010",
        "ros_secret_0011",
        "ros_secret_0012",
        "ros_secret_0013",
        "ros_secret_0014",
        "ros_secret_0015",
        "ros_secret_0016",
        "ros_secret_0017",
        "ros_secret_0018",
        "ros_secret_0019",
        "ros_secret_0020",
        "ros_secret_0021",
        "ros_secret_0022",
        "ros_secret_0023",
        "ros_secret_0024",
        "ros_secret_0025",    
    
        "yan_secret_0000",
        "yan_secret_0001",
        "yan_secret_0002",
        "yan_secret_0003",
        "yan_secret_0004",
        "yan_secret_0005",
        "yan_secret_0006",
        "yan_secret_0007",
        "yan_secret_0008",
        "yan_secret_0009",
        "yan_secret_0010",
        "yan_secret_0011",
        "yan_secret_0012",
        "yan_secret_0013",
    
        "x16_secret_0000",
        "x16_secret_0001",
    
        "mil_secret_0000",
        "mil_secret_0001",
        "mil_secret_0002",
        "mil_secret_0003",
        "mil_secret_0004",
        "mil_secret_0005",
        "mil_secret_0006",
        "mil_secret_0007",
        "mil_secret_0008",
        "mil_secret_0009",
        "mil_secret_0010",
        "mil_secret_0011",
        "mil_secret_0012",
        "mil_secret_0013",
        "mil_secret_0014",
        "mil_secret_0015",
        "mil_secret_0016",
        "mil_secret_0017",
        "mil_secret_0018",
        "mil_secret_0019",
        "mil_secret_0020",
        "mil_secret_0021",
        "mil_secret_0022",
        "mil_secret_0023",
        "mil_secret_0024",
        "mil_secret_0025",
        "mil_secret_0026",
        "mil_secret_0027",
        "mil_secret_0028",
            
        "rad_secret_0000",
        "rad_secret_0001",
        "rad_secret_0002",
        "rad_secret_0003",
        "rad_secret_0004",
        "rad_secret_0005",
    
        "pri_secret_0000",
        "pri_secret_0001",
        "pri_secret_0002",
        "pri_secret_0003",
        "pri_secret_0004", 
    
}    
    
function give_treasures()
    for i = 1, #treasure_list do
        tr = treasure_list
        treasure_manager.get_treasure_manager():give_treasure(tr)        
    end
end    

Это именно запланированные тайники, т.е. вовсе не все ящики будут с хабаром. Плюс в некоторых случаях на ванили будет пропажа содержимого.

Можно ещё подавить выдачу СМС и метки тайника, закомментировав строки

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

news_manager.send_treasure(v.name)

local text = "%c[255,238,155,23]"..game.translate_string(v.name).."\\n".."%c[default]"..game.translate_string(v.description)
level.map_add_object_spot_ser(obj.id, "treasure", text)

в функции CTreasure:give_treasure(k) (treasure_manager.script).

 

Тайники будут выдаваться при обыске, как и раньше, но без уведомления об этом.

 

PS Но я бы всё же выдавал тайники постепенно. Хотя бы на текущей локации.

Изменено пользователем mole venomous
  • Спасибо 1

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

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


Ссылка на сообщение
17 минут назад, Firestarter сказал(а):

то, что я описал - нереализуемо?

Можно выдать ВСЕ существующие базовые тайники. Я вроде, так и написал в начале предыдущего поста.

А потом добавил, что это не отменяет получение тайников при обыске и желательно лучше сразу ВСЁ не спаунить.

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

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

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


Ссылка на сообщение
6 часов назад, AndreySol сказал:

Схема remark в персональной логике вообще стремно себя ведет. Возьми непися под гулаг и все заработает.

А как же Шустрый с его задвигонами, когда он в гулаге? Я его выкинул из гулага и повесил на аналогичную персональную логику, теперь он ведёт себя хорошо. Или я не так понимаю стрёмность поведения НПСа в персональной логике в ремарке?

ПС - Хотя, с другой стороны, с Кротом всё же были проблемы...

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

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

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


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

@_Sk8_AsTeR_ А как неписи переходят из ГУЛАГа в ГУЛАГ? В зависимости от выданных/дизабленных инфопорций. Тоже можно провернуть и в диалоге. 

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

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


Ссылка на сообщение
31 минуту назад, ARTLantist сказал:

движок править надо?

Нужно подключить модуль m_netpk.script (на форуме поищи) и при помощи модуля в момент спауна в нет-пакет ствола записать флаг, пример:

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

    local obj = alife():create("wpn_sig550", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
    local pk = get_netpk(obj,1)
    
    if pk:isOk() then
        local data = pk:get()  -- прочитали пакет    
        if data then
            data.addon_flags = 1 -- повесим прицел
            pk:set(data)  -- записали пакет обратно
        end    
    end    

 

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

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

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


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

@Norman Eisenherz , в мотиваторе по аналогии со сталкерами не работает  

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

добавить в bind_monster

 

function generic_object_binder:reinit()
    ...

    self.object:set_callback(callback.use_object, self.use_callback, self)  
    ...
end

 

function generic_object_binder:net_destroy()

...

   self.object:set_callback(callback.use_object, nil)

...

end

 

function generic_object_binder:use_callback(obj, who)  
    if self.object:alive() then
        if self.st.active_section then
            xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "use_callback", obj, who)
        end
    else
        ...
    end
end

 

 

 

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

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


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

Я что-то давненько не задавал тупых вопросов.

Кто знает, почему может не срабатывать проверка на видимость see?

Без неё код работает, а с ней в логе это - "!!CScriptGameObject : cannot check visibility null object!" 

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

        for a = 0,65534 do
            local obj = level.object_by_id(a)
            if obj then
                if IsStalker(obj) and obj:alive() and obj:position():distance_to(db.actor:position()) < 50 and obj:see(actor) then
            --  if IsStalker(obj) and obj:alive() then
                    local comm  = amk.get_npc_community(obj)
                    if comm == "stalker" then amk.set_npc_relation(obj,db.actor,"enemy") end        
                end
            end
        end
    end

 

зы Движок ОГСР

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

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

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


Ссылка на сообщение
8 минут назад, Okichi сказал:

переменная actor как здесь определяется

Банальная невнимательность :dash2: Я уж подумал что-то где-то слетело, т.к. ранее всё работало. 

Но "слетели" первые три знака перед 'actor', как часто бывает...

Изменено пользователем mole venomous
  • Согласен 1

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

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


Ссылка на сообщение
5 минут назад, UriZzz сказал:
Local uAct = db.actor

Даже просто Actor с заглавной , а внимание уже сложно не обратить.

  • Согласен 1

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

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


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

Всем привет. Ознакомился с возможностями движка ОГСР, но видимо недостаточно хорошо. 

Есть ли на этом движке возможность определить предмет на поясе и далее производить с ним какие-либо действия?

Т.е. речь не о проверке

local item = inventory.belt["item"]

а именно о том, что бы заданный объект можно было хитануть, удалить и т.п.

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

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

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


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

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