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

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


Svoboда

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

(изменено)

SibireaStalker, я бы сделал как-то так

local current_outfit = 0
function proverka_na_helmet()
         local actor = db.actor
         if not actor then
                  return
         end

         local slot_twelve = actor:item_in_slot(12)
         if not slot_twelve then
                  current_outfit = 0
                  return
         end
         
         if slot_twelve:id() ~= current_outfit then
                   local snd = sound_object([[interface\mp_reward]]) -- Путь до звука
                   snd:play_no_feedback(db.actor,sound_object.s2d, 0, vector():set(0, 0, 0), 2.0)
                   current_outfit = slot_twelve:id()
         end
end

 

Изменено пользователем ColR_iT
Про тег code тоже не забываем.

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


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

Версия игры какая? Помнится, в ЗП без некоторых ковыряний спавн фантома вызывает вылет.

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


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

ins33, в твоём коде нет ни капли логики. Сперва ты присвоил переменной key объект с секцией "key", который находится у гг в инвентаре, если его нет, то присвоится nil. Потом проверяешь какую-то переменную note, которая возможно и описана у тебя выше по коду, но тут не понятно что в ней есть. В любом случае, у тебя сейчас никак не проверяется наличие ключа. Я думаю, что нужно сделать как-то так

local key = db.actor:object("key")
if key then --проверка на ключ
      level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню
end

 

 

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


Ссылка на сообщение
(изменено)

Ты покажи всю функцию, мне всё равно не понятно что такое note и что в ней содержится.

P.S. И вообще ты в курсе что каждый блок if ... then должен иметь закрывающий end?

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

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


Ссылка на сообщение
(изменено)

ins33, ты вообще сам понимаешь, что ты пишешь? Сразу видно, что ты вообще ничего не смыслишь в программировании, так закаким ты туда полез?

function use_repkit()
   local key = db.actor:object("key")
   if key then --проверка на ключ
      level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню
      alife():create("repair_kit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
   end
end

 

 

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

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


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

ins33, открываешь спойлер, выделяешь всё что там есть, делаешь Ctrl+C, потом в у себя в файле repair.script нажимаешь Ctrl+A, затем Ctrl+V.

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

local note = nil

function use_repkit()
    if note and type(note) == "number" then
        if not level.object_by_id(note) then
            if db.actor:object("key") then
                level.start_stop_menu(interfase.ui_repair(), true) --запускаем меню
            end
            alife():create("repair_kit", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        end
    note = nil
    end
    if note and type(note) == "userdata" then
        note = note:id()
    else
        note = nil
    end
end

function DeleteItem(iId) --добавляем функцию удаления предмета из инвентаря
    if iId then
        local seObj=alife():object(iId)
        if seObj then alife():release(seObj,true) 
        end
    end
end

function repair_wpn_1()
    local item_in_slot = db.actor:item_in_slot(1)
    local medusa = db.actor:object("af_medusa") --и везде добавим проверку на медузу
    if item_in_slot ~= nil and 1 > item_in_slot:condition() and medusa then 
       item_in_slot:set_condition(1)
       DeleteItem(medusa:id()) --удаляем артефакт после ремонта
    end    
end

function repair_wpn_2()
    local item_in_slot = db.actor:item_in_slot(2)
    local medusa = db.actor:object("af_medusa")
    if item_in_slot ~= nil and 1 > item_in_slot:condition() and medusa then 
    item_in_slot:set_condition(1)
    DeleteItem(medusa:id())
    end
end

function repair_armora()
    local item_in_slot = db.actor:item_in_slot(6)
    if item_in_slot ~= nil and 1 > item_in_slot:condition() then 
       item_in_slot:set_condition(1)
    end
end

--/ спавн предметов в инвентори
function spawn_item_in_inv(section,npc)
    if npc == nil then npc = db.actor end
    return alife():create(section, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id())
end


--функция вызываемая из дропа
function use_repair(obj)
if obj:section() == "repair_kit" then
note = obj --если наша вещь, то запомнить его userdata
end
end

 

 

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


Ссылка на сообщение
Z3oM, а в чём смысл? Нельзя сразу все необходимые тексты в отдельный файл записать?

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


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

function spawn_dog_weak()
    alife():create("dog_weak",vector():set(-224.17195129395,-19.261228561401,-165.32530212402),32807,47)
end

 

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


Ссылка на сообщение
AutoGnom, очень хочется спросить: А за чем это всё? Эти полоски и миникарта они же и так есть...

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


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

Я имею ввиду в оригинале есть. Или это тоже копипаст считается? =)

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


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

Kirgudu, тоже сортировка сломалась (ЗП). Правда использую xray-extension. Если не сложно, выложи самописную функцию, чтобы мне велосипед не изобретать. А вот код, где сортировка не работает:

    --Таблица items заполняется выше и имеет структуру:
    --items[id_предмета] = секция_предмета

    local sort_items = {}
    for k,v in pairs(items) do
        item_w, item_h = _m.get_icon_size(v)
        sort_items[k] = {sect = v, width = item_w, id = k}
    end
    if _m.table_size(sort_items) > 1 then
        table.sort(sort_items, function(a,b) return (a.width < b.width) end)
    end

 

 

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


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

ZeeK, твой код будет рабоатать, если у тебя надет комбез "Сева" и ты находишься на Затоне, причём независимо от его состояния. Если в слоте вообще не будет комбеза - будет вылет.

Думаю нужно как-то так:

function check_outfit_condition()
    if db.actor:item_in_slot(7)  and db.actor:item_in_slot(7):condition() <=0.80 then
        db.actor.radiation = 0.05
        local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Внимание! Разгерметизация! Фильтры костюма не справляются!"
        local news_caption = game.translate_string("st_tip")
        local texture = "ui_inGame2_Hero"
        db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000)
    elseif not db.actor:item_in_slot(7) then --Комбеза нет вообще
        db.actor.radiation = 0.1
        local news_text = "%c[255,160,160,160]".."Дягтерев:".."\\n".."%c[default]".."Пора умирать, упс..."
        local news_caption = game.translate_string("st_tip")
        local texture = "ui_inGame2_Hero"
        db.actor:give_game_news(news_caption, news_text, texture, 1000, 5000)
    end
end

 

 

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


Ссылка на сообщение
(изменено)

Пытаюсь в скрипте приаттачить глушитель к оружию (ЗП). Оружие точно может иметь глушитель. Код функции ниже. После того как оружие возвращается из оффлайна в онлайн addon_flag снова равен 0. Что я делаю не так?

function attach_silencer(wpn, silencer)
    if not silencer then
        silencer = db.actor:object(get_addon_silencer(wpn:section()))
    end
    if not silencer then
        return
    end
    local pk = get_netpk(wpn)
    local wpn_state = pk:get()
    if wpn_state.addon_flags == 4 then
        return
    end
    
    wpn_state.addon_flags = wpn_state.addon_flags + 4
    pk:set(wpn_state)
    switch_offline_online(wpn:id())
    _m.remove_item_by_id(silencer:id())
end

function switch_online(id)
    if id == -1 then
        return
    end
    local serv_obj = alife():object(id)
    serv_obj.sim_forced_online = true
    if serv_obj.online ~= true then
        serv_obj:switch_online()
    end
end

function switch_offline(id)
    alife():object(id):switch_offline()
end

function switch_offline_online(id)
    local obj = level.object_by_id(id)
    if not obj then
        switch_online(id)
        return
    end
    
    local parent = obj:parent()
    if parent then
        parent:drop_item(obj)
    end
    switch_offline(id)
    logf('switch_offline [%d]', id)
    level.add_call(function()
        if not level.object_by_id(id) then
            logf('switch_online [%d]', id)
            switch_online(id)
            return true
        end
        return false
    end, function() end)
end

 

 

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

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


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

Возвращаюсь к своему вопросу по поводу приаттачивания глушителя. Спасбо, Artos, функция m_netpk.do_switchings работает как надо и пистолетик возвращается с глушителем. Но есть один ньюанс. Я не могу отправить оружие в оффлайн, если оно находится в слоте. Приходится сперва делать дроп. Есть ли какой-нибудь способ вернуть оружие "с земли" в рюкзак? Или может есть другой способ скриптом приаттачить аддоны к оружию? (ЗП)

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


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

Не совсем правильно. При спавне чего-либо клиентский объект будет доступен только на следующем апдейте, поэтому я бы заменил вот это:

alife():create( spawn_sect,zone:position(),zone:level_vertex_id(),zone:game_vertex_id()) --спавним предмет в

на вот это

alife():create( obj, zone_obj.position, zone_obj.m_level_vertex_id, zone_obj.m_game_vertex_id)

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


Ссылка на сообщение
(изменено)

Ты что вообще от CUIScrollView хочешь? Я промолчу про кучу непонятно зачем вызываемыз методов, но вот это:

self.ggRukzakScroll:AddWindow(self.ggRukzakScroll,true)

- убило. Самого себя добавить к себе?

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

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


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

TYOPA, CUIScrollView - это не скроллбар, это окно с вертикальной полосой прокрутки. Какие методы использовать - зависит от задачи.

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


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

Тут всё просто. В ScrollView добавляешь статик с нужной текстурой (картинкой). Размеры этого статика должны быть такими, чтобы изображение полностью в нём уместилось.

Размеры ScrollView - какие тебе нужно. Только есть одно "НО" - горизонтальной полосы прокрутки у ScrollView нет (хотя может у меня руки кривые). Т.е. размер ScrollView по ширине должен быть равен ширине картинки.

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


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

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

AMK-Team.ru

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