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

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


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

@mole venomousтак я как сделал:

При юзании даётся инфа (rad_immunity), и запускается таймер на 2 минуты. По истечению двух минут инфа убирается, а соотвественно и дейсвтие препарата тоже.

А как на обнову поставить то?

@Houdini_oneизменил  чутка, не работает
 

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

function use_meladin()
if (db.actor.radiation >= 0) and has_alife_info("rad_immunity") then
db.actor.radiation = -db.actor.radiation
end
end

 

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

В bind_stalker ф-ия 

 

function actor_binder:update(delta)

    ...

    update_medkit()

    ...

end

-- Для примера

function update_medkit()
    if has_alife_info("actor_medkit_use_info") then
        actor.health = 0.0016 
    end

end

 

  • Спасибо 1

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

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

Слямзил некролог из интернета. Всё гуд но мне не нравится то что сообщение приходит сразу. Решил чутка изменить его - при смерти старутет таймер, после окончания которого и приходит уведомлялка. 
Вот сам оригинал:
 

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

local level_name = {
  ["l01_escape"] = "Кордон",
  ["l02_garbage"] = "Свалка",
  ["l03_agroprom"] = "НИИ Агропром",
  ["l03u_agr_underground"] = "Подземелье НИИ Агропром",
  ["l04_darkvalley"] = "Тёмная долина",
  ["l04u_labx18"] = "Лаборатория X-18",
  ["l05_bar"] = "Бар",
  ["l06_rostok"] = "Дикая территория",
  ["l07_military"] = "Арм.склады",
  ["l08_yantar"] = "Янтарь",
  ["l08u_brainlab"] = "Лаборатория X-16",
  ["l10u_bunker"] = "Лаборатория X-10",
  ["l10_radar"] = "Радар",
  ["l11_pripyat"] = "Припять",
  ["l12_stancia"] = "ЧАЭС",
  ["l12_stancia_2"] = "ЧАЭС",
  ["l12u_sarcofag"] = "Саркофаг",
  ["l12u_control_monolith"] = "Управление Монолитом"
            }
 
local community = {
    ["stalker"] = "Одиночка",
    ["monolith"] = "Монолит",
    ["military"] = "Военные",
    ["bandit"] = "Бандит",
    ["killer"] = "Наемник",
    ["ecolog"] = "Эколог",
    ["dolg"] = "Долг",
    ["freedom"] = "Свобода",
    ["zombied"] = "Зомбированный",
    ["trader"] = "Торговец"
            }
 
function kill_npc(victim, who)
  if victim and IsStalker(victim) then
local dead_news = "%c[255,0,0,0]ПОГИБ СТАЛКЕР \\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Кличка: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
dmb2.news_sound()
   end
end



А вот моя поделка 

 

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

 

function kill_npc(victim, who)
  if victim and IsStalker(victim) then
  dmb2.nekrolog_timer()
  end
end

function nekrolog_message(victim, who)
  if victim and IsStalker(victim) then
local dead_news = "%c[255,0,0,0]ПОГИБ СТАЛКЕР \\n%c[255,160,160,160]Группировка: %c[default]"..community[victim:character_community()].."\\n%c[255,160,160,160]Кличка: %c[default]"..victim:character_name().."\\n%c[255,160,160,160]Локация: %c[default]"..level_name[level.name()]..""
db.actor:give_game_news(dead_news, "ui\\ui_icons_npc", Frect():set(2,130,124,124), 1, 4000)
dmb2.news_sound()
end
end

 


И сам таймер, по окончанию которого выполняется nekrolog_message
 

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

    function nekrolog_timer()
      local iTimer = time_global() + 5000
 
      local function check_timer()
         return time_global() > iTimer
      end
 
      level.add_call(check_timer, dmb.nekrolog_message(victim, who))
   end



Но после убийства ничё не происходит. Что делать?

Небольшая ремарка: если убрать   if victim and IsStalker(victim) then в nekrolog_message то происходит вылет с причиной 

 dmb.script:48: attempt to index local 'victim' (a nil value)

Отбой. Разобрался. Чтобы всё работало с задержкой, в сообщении вместо цифры 1 поставить кол-во желаемых секунд (1000, 5000, т.д.)

Ссылка на комментарий
27 минут назад, Hind сказал:

Слямзил некролог из интернета

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

PW7EW.png

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

Поскольку сталкеры гибнут только в зоне алайфа, то весь код для выведения названия локации лишний. 

Отношения между людьми- главная ценность в человеческом обществе.
Любая полученная информация- это только повод для размышлений, а не побуждение к действию.
Это должен знать каждый: уроки боевой подготовки Дяди Саши https://yadi.sk/d/60Ec2B06goLAE
Накопано и накнопано:https://yadi.sk/d/mzVY5jQEspwpt

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

@Hind @aromatizer Вот вариант некрологов, которым я пользуюсь.

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

 

local level_name = {
  ["l01_escape"] = "Кордон",
  ["l02_garbage"] = "Свалка",
  ["l03_agroprom"] = "НИИ Агропром",
  ["l03u_agr_underground"] = "Подземелье НИИ Агропром",
  ["l04_darkvalley"] = "Тёмная долина",
  ["l04u_labx18"] = "Лаборатория X-18",
  ["l05_bar"] = "Бар",
  ["l06_rostok"] = "Дикая территория",
  ["l07_military"] = "Арм.склады",
  ["l08_yantar"] = "Янтарь",
  ["l08u_brainlab"] = "Лаборатория X-16",
  ["l10u_bunker"] = "Лаборатория X-10",
  ["l10_radar"] = "Радар",
  ["l11_pripyat"] = "Припять",
  ["l12_stancia"] = "ЧАЭС",
  ["l12_stancia_2"] = "ЧАЭС",
  ["l12u_sarcofag"] = "Саркофаг",
  ["l12u_control_monolith"] = "Управление Монолитом"
            }
 
local community = {
    ["stalker"] = "Вольный сталкер",
    ["monolith"] = "Монолит",
    ["military"] = "Военный",
    ["bandit"] = "Бандит",
    ["killer"] = "Наемник",
    ["ecolog"] = "Учёный",
    ["dolg"] = "Долг",
    ["freedom"] = "Свобода",
    ["zombied"] = "Зомбированный",
    ["trader"] = "Торговец"
            }
 
local death_komment = {
"Трупом больше - трупом меньше, хех!",
"О! Сидрыч, хоть и не я убил его, но с тебя всё равно причитается!",
"Бармен, и чё делать-то теперь? Ладно, пойду посмотрю на труп, вдруг на флешке инфа эта есть... Если чё - пиши в личку.",
"Да когда ж это кончится?!... ",
"Твою мать! А я-то думал, что всех порешил...",
"чОрт побери, только вчера с ним виделись... Жаль пацана...",
"Земля пухом! Хороший сталкер был... Пойду КПК подберу - мож хабар остался...",
"Ну, вот и ещё один конкурент в мир иной отошёл... Аминь!...",
"А говорил - заговорённый!... хех!...",
"Вот чОрт побери, а он мне денег должен...",
"Ну и поделом ему!!!",
"Одним сталкером меньше, одним трупом больше.",
"Жопой чую - не к добру это...",
"Неудачник...",
"Я пупею... Говорил, что безопасно там, безопасно... Хорошо, что я отказался в последний момент с ним идти, а то глядишь - рядом с ним и полёг бы...",
"Нда... Прогулялся за хабаром... Судьба...",
"Что сказать?...   Зона для сталкера - не место для прогулки...",
"Надеюсь, не мучился бродяга...",
"Вчера только там зачистку делали, тропку сделать надо было...  чОрт побери...",
"Хороший мужик был, рисковый, хабаром делился когда туго было, земля пухом, брат сталкер!",
"Ещё один в зону попёрся, когда уже разуму наберутся?...   Все же знают - не меньше чем подвое ходить надо!...",
"Та-а-ак... Где это он угробился?...  Надо срисовать координаты...",
"Так ему и надо!",
"Эх, Зона... сколько жизней загубила..." ,
"Эх, хороший человек был, но самоуверенный чересчур, вот и вляпался...",
"Эээх... А он мне обещал ствол кондовый достать... Опять хабар Сидору нести...",
"Говорили же!...  Не возвращайся по тому же пути!...",
"Ба! А не тот ли это сталкер, что вчера в баре нарезался?...",
"Оба-на! Мне теперь грех на душу не брать! Но бабло с Бармена стрясу...",
"Ещё одну душу Зона забрала... Сколько ещё заберёт?...",
"Жалко парня...",
"Я тут по этому поводу анекдот вспомнил..."
          }    


function kill_npc(victim, who)
    if victim and IsStalker(victim) then
        local dead_news = "%c[230,255,128,64]Погиб: "..victim:character_name().."\\nГруппировка: "..community[victim:character_community()].."\\nМесто гибели: "..level_name[level.name()]..""
         db.actor:give_game_news(dead_news,"ui\\ui_iconstotal",Frect():set(0,658,83,47),1000,3000) -- всегда
         local shans = math.random(1,100)
         if shans > 70 then
             dead_news = death_komment[math.random(table.getn(death_komment))]
             db.actor:give_game_news(dead_news,"ui\\ui_iconstotal",Frect():set(0,658,83,47),3000,3000) -- дополнительно не всегда
         end
    end  
end

 

 

А версию death_news из OGSE 0.6.9.2 мне не удалось подключить :(

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

PW7EW.png

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

@Hind 

Отследить наличие артефакта на поясе. На базовом движке для этого нужно немного "накостылить", а в ОГСР есть вполне "законные" методы. Вроде, недавно здесь это обсуждали. 

Файл с готовым кодом, вроде из Солянки:

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

 

Для определения конкретного арта на ванильном движке

 

В апдейт

actor_binder:update(delta)

вот это

 

    inventory.update()
    local medusa = inventory.belt["af_medusa"]
    if medusa then
        get_console():execute("load ~#I#:"..string.format("Медуза на поясе"))
    end    

 

В апдейт

actor_binder:info_callback(npc, info_id)

вот это

 

inventory.on_inventory_info(info_id)

 

зы

 

Вместо

get_console():execute("load ~#I#:"..string.format("Медуза на поясе"))

свой код, разумеется

Вместо

"af_medusa"

секция своего арта

 

зызы

 

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

 

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

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

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

@Sikorskyiсделал как ты, тока чутка подправил его под свой скрипт:
 

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

function kill_npc(victim, who)
 if victim and IsStalker(victim) then
local t = time_global()
db.actor:give_game_news(dead_news,"ui\\ui_iconstotal",Frect():set(0,658,83,47),1000,3000) -- всегда
         local shans = math.random(1,100)
         if shans > 70 then
             dead_news = death_komment[math.random(table.getn(death_komment))]
             db.actor:give_game_news(dead_news,"ui\\ui_iconstotal",Frect():set(0,658,83,47),3000,3000)
elseif t > time_global() + 3000 then
dmb2.news_sound()
end
end
end

А оно вылетает

Разобрался. Забыл добавить сам текст :)

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

@Hind ну так ты лог вылета покажи, нам откуда знать почему вылетает?

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

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

--------------Сообщения о смерти сталкеров---------------

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

    if victim ~= nil then

        local whocls = get_clsid(who)

        monster_classes = {
            [clsid.bloodsucker_s]             = "неудачно подошёл к кровососу",
            [clsid.boar_s]                     = "неудачная охота на кабана",
            [clsid.dog_s]                     = "загрызён собакой",
            [clsid.flesh_s]                 = "неудачная охота на плоть",
            [clsid.pseudodog_s]             = "загрызён псевдособакой",
            [clsid.burer_s]                 = "нарвался на бюрера",
            [clsid.cat_s]                     = "кошка перебежала дорогу",
            [clsid.chimera_s]                 = "нарвался на химеру",
            [clsid.controller_s]             = "стал зомби и умер",
            [clsid.poltergeist_s]             = "полтергейст",
            [clsid.gigant_s]                 = "растоптал псевдогигант",
            [clsid.zombie_s]                 = "попрощался с мозгами",
            [clsid.snork_s]                 = "неудачно нашёл снорка",
            [clsid.tushkano_s]                 = "умер от стаи тушканов",
            [clsid.psy_dog_s]                 = "загрызён пси собакой",
            [clsid.psy_dog_phantom_s]         = "загрызён пси собакой"
        }

        local death_komment = {
            "Ещё один...",
            "Мдя, ни дня без этого.",
            "Одним больше, одним меньше...",
            "Все там будем",
            "Помянуть надо бы...",
            "Зона тебе пухом.",
            "Был пацан, не стало пацана"
        }

        --
        --
        -- victim_name - имя жертвы
        -- killer_name - имя убивайца
        -- killer_comm - групировка убивайца
        -- victim_comm - групировка жертвы
        --
        --

         local m_game_vertex = who:game_vertex_id()
        local lvert = game_graph():vertex(m_game_vertex)
        local lid = lvert:level_id()
        local mlevel = alife():level_name(lid)
        local m_s_level = mlevel
        local victim_name  = victim:character_name()
        local killer_name  = who:character_name()
        local victim_comm = victim:character_community()
        local killer_comm = nil
        if IsStalker(who) then
            if killer_name == victim_name then
                killer_name = "аномалия"
                killer_comm = "monster"
            else
                killer_comm = who:character_community()
                -- Чтобы показывать имя, кто убил удали строку ниже
                killer_name = "пулевое ранение"
            end
        else
            killer_comm = "monster"
            if whocls ~= nil then
                killer_name = monster_classes[whocls]
            end
        end
         
        if killer_comm ~= nil then
            if killer_name == nil then
                -- это если имя убийцы неизвестно или мутантик какой неизвестен
                killer_name = "%c[230,255,0,0][DATA DELETED]"
            end
            local m_text_kill_string="Умер сталкер "..victim_name.."\\nЛокация: "..game.translate_string(m_s_level).."\\nПричина смерти: "..killer_name
            local news_text = "%c[230,255,128,64]"..m_text_kill_string
            local news_caption = game.translate_string("DeadMans")
            local task_texture, task_rect = get_texture_info("ui_iconsTotal_weapons")
            local news_text = news_caption .. "%c[230,255,128,64]" .. m_text_kill_string
            db.actor:give_game_news(news_text, task_texture, task_rect, 5*1000, 5*1000)
            if shans > 70 then
                local task_texture, task_rect = get_texture_info("ui_iconsTotal_grouping")
                local dead_news = dead_caption .. death_komment[math.random(table.getn(death_komment))]
                db.actor:give_game_news(dead_news, task_texture, task_rect, 5*1000, 5*1000)
        end
    end

 

Вообщем попытался взять его, очень он мне по нраву, но чет не берется ...

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

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : .\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: ... 1.0 bild 00001\gamedata\scripts\xr_motivator.script:165: attempt to index global 'necrolog_functions' (a nil value)

Отредактировал по шпаргалке , но чего то нехватает

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

Можно сделать гулаг лишь для какого-то вида мутантов, например, псевдособаки.

А как сделать гулаг лишь для одного из подвида мутантов? Допустим pseudodog_strong...

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

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

Тащи, подскажите. Можно ли как то уменьшить спавн сталкеров, и увеличить спван мутантов на локациях без редактирования all.spawn? если да, подскажите, что за файлы отвечают за спавн, кол-во, и тд.

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

@Hind респавн указывается в алл спавне.

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

Ссылка на комментарий
1 час назад, Houdini_one сказал:

подвида мутантов

В оригинале в коде есть предикаты, вот кусок из gulag_bar.script

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

...

    -- ARENA MONSTERS
    if type == "bar_arena_monstr" then
        t = { section = "logic@bar_arena_monstr_pseudodog", 
            idle = 0,
            prior = 5, state = {1}, squad = squad, group = groups[0],
            in_rest = "", out_rest = "bar_arena_sr",
            predicate = function(obj_info)
                             return obj_info.section_name == "pseudodog_arena"
                        end
        }

...

Но работает ли это дело с монстрами... Проверь.

1 час назад, андрей дронав сказал:

  скрипт некролога (Показать)

Это весь скрипт? :crazy2:

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

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

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

@Hind большинство гулагов имеют настройки лишь в алл спавне в том числе, так-то можешь попробовать подрезать количество работ, но не знаю что из этого выйдет.

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

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

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

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

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

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

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

Войти

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

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

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