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

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


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

malandrinus

Ну-у...Его секция известна и профиль...

 

Вот, что у меня пока что имеется:

Основная функция erlik'а:

local count = 0 
function uni_spawn_mnogo_itemsov(tab_items,tab_where)
    local pos, lvid, gvid, id
     for k, v in pairs(tab_items) do
       if type(tab_where)=='table' then
        for k, v in pairs(tab_items[k]) do 
        count = k
         for i=1, count do
         alife():create(v,vector():set(tab_where['x'],
          tab_where['y'],tab_where['z']),
          tab_where['lv'],tab_where['gv'])
           end
            end
             elseif type(tab_where)=='string' then 
               for k, v in pairs(tab_items[k]) do 
               count = k
                for i=1, count do
                 alife():create(v, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
                end
               end
                 elseif type(tab_where)=='number' then 
                  local obj = level_object_by_sid(tab_where)
                   if obj ~= nil then
                   id = obj:id()
                   pos = obj:position()
                   lvid = obj:level_vertex_id()
                   gvid = obj:game_vertex_id()
                    elseif obj == nil then
                     obj = alife():story_object(tab_where)
                       id = obj.id
                       pos = obj.position
                      lvid = obj.m_level_vertex_id
                     gvid = obj.m_game_vertex_id
                       for k, v in pairs(tab_items[k]) do 
                       count = k
                         for i=1, count do
                         alife():create(v, pos, lvid, gvid, id)
                     end
                  end
              end
          end
     end
end

 

И "вызывная" есть(только работает, когда Id определен):

function spawn_pda_in_killer()
   local tab_items ={{[1]="PDA"}
       local tab_where = 006
       this.uni_spawn_mnogo_itemsov(tab_items,tab_where)
end

 

Нужно преобразовать 2 функцию, чтоб спавнила "Без Id'ному НПС", я подумал, но ни чего толкового не пришло в голову...Зная, что не смогу, все равно попробовал.:-).Вот, что получилось(не полностью - как дальше - не знаю):

function spawn_pda_in_killer()
  for a=1,65534 do         --наверно надо добавить Перебор айди
   local obj = alife():object(a)
   if obj and obj:section_name() == "Секция нужного НПС" then
    local tab_items ={{[1]="PDA"}
        local tab_where = 006
       this.uni_spawn_mnogo_itemsov(tab_items,tab_where)
end

 

Незнаю куда деть local tab_where = 006 - может просто стереть и аргумент tab_wherе убрать...Да и ваще, в правильную "сторону" я копаю...

Дальще не знаю, как делать.Знаю, что написал полную лажу, но старался :) ...Не подскажете, как дельше правильно сделать?

 

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

TREWKO, Есть, меню ;).

Просто сделай некий флаг который будет запрещать выполнение функции в последующие разы :).

ui_mainmenu.script

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

Вот из него пробовал вызывать... но получаю вылет:

ui_main_menu.script:15: attempt to call field 'DiXarALLVersion' (a nil value)

 

Вот что вызываю:

function DiXarALLVersion()
   if ReadGameVersion then
      DiXarALLVersionPrefetch = VerGame.."Мод: "..ReadModSolution.."Версия: "..ReadModVersion.."Фикс: "..ReadFixVersion
   else
      DiXarALLVersionPrefetch = "Мод: "..ReadModSolution.."Версия: "..ReadModVersion.."Фикс: "..ReadFixVersion
   end
  return DiXarALLVersionPrefetch
end

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

TREWKO, а как вызывал и ,собственно, из какого метода?

Если ты вызываешь как self:DiXarALLVersion()

То тогда он тебе верно ошибку выдал :). В этом случае нужно сделать DiXarALLVersion() методом класса ну или убрать из вызова self:

*************

function main_menu:InitControls()

...

IIDiXarGetVersion.DiXarALLVersion

...

end

В общем ничего "такого" я не заметил.Без сталкера помочь не могу,увы. Странно это :).

Думаю быстрее будет взять код из любого другого мода(+добавить чтение ini файлика,как ты у себя сделал - если я правильно понял Read.. это функции).Из того же Amk.

****************

Где self?

Я думал что твоя функция находится в самом ui_mainmenu.script , поэтому предположил возможные варианты вызова. Первый "предложенный" мною вариант работает железно,хотя и не вижу явных причин почему у тебя не находит твою функцию.

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

меченый(стрелок),

function main_menu:InitControls()
...
   IIDiXarGetVersion.DiXarALLVersion
...
end

Так оно выглядит.

 

Потом и вызывал так:

function main_menu:__init() super()
...
   IIDiXarGetVersion.DiXarALLVersion
...
end

 

Где self?

 

Вобщем взял, и перенёс всю функцию в ui_main_menu.script... заработало.~!

Спасибо за помощь!

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

как отыграть рандомный звук из таблицы, с позиции НПС находящемся на расстоянии 1 метра от ГГ.

самое главное для меня узнать вот это: "...с позиции НПС находящемся на расстоянии 1 метра от ГГ"

87728-stalker.gif
Ссылка на комментарий

ФеНиКс,

local tbl={"music3","music2","music1"}

***

if npc:position():distance_to(db.actor:position())<1 then

sndname=tbl[math.random(#tbl)]

--создание саунд_обьекта и проигрывание(см. lua_help.script)

end

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

Starter

А можно ли добавить несколько фонарикоф? Купил один он светит желтоватым ну обычной лампочкой, Купил по дороже уже светит галогенкой ярко и дальше, Купил третий светит в разброс а не в даль. Как такое сделать?

 

Вполне возможно. Почему конфиг фонарика находится по адресу config\models\objects\light_night.ltx? Правильно, он прописан инклудом в модели фонарика! Сделать копию модели фонарика, но прописать другой файл конфига. Вуаля! Остаются мелочи - подменить фонарик скриптом и прописать его в конфигах актора и НПС в attachable_items, чтобы работал.

На акторе разница заметна сразу, на НПС, если выдать новый при уже включенном фонарике - после С/Л, и надо скрипты юза фонарика ковырять.

 

 

max_max_08

Привет всем! Возможна ли проверка на то в каком режиме стрельбы сейчас находится оружие? Т.е. одиночными, по три, очередью.

 

Это возможно через нет-пакет оружия, update-пакет. В функциях АМК параметр называется updcurrent_fire_mode

 

 

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

Мои работы:

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

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

Soul Cube

 

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

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

помогите!

хочу засунуть в свой мод схему обыска трупов из АМК. но проблема

 

скопировал файл watcher_act.script, и все ссылки на него в файлах - modules.script, xr_logic.script, xr_motivator.script

проверил в игре. всё работает отлично, только одна маленькая проблемка. слева экрана постоянно высвечивается огромное количество разных сообщений (с виду похожи на какие-то логи - что где произошло на английском языке с техническими параметрами). как это убрать?

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

как сделать чтобы НПС ударил ГГ в Морду?

(постпроцесс, просто постпроцесс не катит, надо чтобы с анимацией это всё произошло.)

и как сделать, так чтобы ствол нельзя было выкинуть?

87728-stalker.gif
Ссылка на комментарий

Не подскажите, почему при спавне скриптом нельзя писать такую логику в params.custom...

 

[smart_terrains]\nnone = true\n[logic]\nactive = remark\n[remark]\npath_walk = td_attack_st_walk_start_7\non_info = {+td_st_attack} attack_start\n[attack_start]\npath_walk = td_attack_st_walk_start_6

 

Ключевой кусок выделен... Просто когда получаю этот самый инфопоршень - вылет с руганью на скрипт xr_logic...

 

Почему полюбому можно только так: on_info = {+td_st_attack} nil???

 

И как можно всеже заставить непися идти по новой точке по получению инфопоршня?

Карусель-карусель - это радость для нас, прокатись на нашей ка-ру-се-ли!
-=Krovosos Mod=- 4.0 Final для S.T.A.L.K.E.R. SHoC 1.0004 (336 Мб): Мод

Финальный патч для -=Krovosos Mod=- (1 Мб): Патч

Адаптация -=Krovosos Mod=- под S.T.A.L.K.E.R. SHoC 1.0006 (1 Мб): Адаптация

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

нет. там совсем другое. это как на пда сообщения приходят - так всё выглядит. но их бесконечно много и в тексте их как раз примерно то, что отображается в rs_Stats

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

Vovan0792, проще в params.custom не заполнять логику, а сделать ссылку на файл и уже его заполнять логикой. Так удобнее гораздо.

Но вылет, как я могу предположить, из-за того, что не существует в игре такого поведения, как [attack_start] Есть [walker], [remark], [camper] и иже с ними. Исправь [attack_start] на [walker], либо на [walker@attack_start] - как удобнее. Вот:

[smart_terrains]\nnone = true\n[logic]\nactive = remark\n[remark]\npath_walk = td_attack_st_walk_start_7\non_info = {+td_st_attack} walker\n[walker]\npath_walk = td_attack_st_walk_start_6

Хм, да и в ремарке как-таковом не предусмотрены точки путей - где заспавнил, там и будет стоять. Вот так будет правильнее:

[smart_terrains]\nnone = true\n[logic]\nactive = walker@1\n[walker@1]\npath_walk = td_attack_st_walk_start_7\non_info = {+td_st_attack} walker@2\n[walker@2]\npath_walk = td_attack_st_walk_start_6

Если эти пути, по которым непись ходит, то всё нормально, но для стоячих путей, обязательно нужно добавить координаты path_look - куда будет смотреть.

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

SanekKZN, спасибо, помог... честно - вообще думал что как назвать это [attack_start] или [walker] без разницы... Для меня открытие))))

 

А вот теперь такая проблемка... Как поставить чтобы непись начинал "боевые действия" когда враг от него на расстоянии не больше допустим 15 метров... Знаю, что там есть различные игноры, которые можно поставить, но точно не понимаю что надо писать...

Карусель-карусель - это радость для нас, прокатись на нашей ка-ру-се-ли!
-=Krovosos Mod=- 4.0 Final для S.T.A.L.K.E.R. SHoC 1.0004 (336 Мб): Мод

Финальный патч для -=Krovosos Mod=- (1 Мб): Патч

Адаптация -=Krovosos Mod=- под S.T.A.L.K.E.R. SHoC 1.0006 (1 Мб): Адаптация

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

malandrinus

Огромнейшее спасибо за пример :rolleyes:

но требуется еще немного твоих пояснений.

Вариант с деаттачем на каждое закрытие инвентаря мне не подходит - у меня кнопки нужны не просто для нажатия и произведения определенных действий но и как визуальные указатели что данная опция включена\отключена. При деаттаче и повторном аттаче на открытие инвентаря кнопки разумеется принимают дефолтное состояние (выключены). Что совершенно не нужно - они должны хранить свое состояние в течение всей игры до перезагрузки.

Поэтому деаттач я поставил на net_destroy в биндер эктора.

Проблем Show(false\true) ни каких - теперь все работает: ствол в слоте - кнопки показываются, ствола нет в слоте - кнопки (весь статик с приаттачеными к нему кнопками) исчезает.

 

Но вот при перезагрузке опять получаю сразу вылет - на это раз еще в процессе самой загрузки.

 

Как деаттачу:

-- внешние локальные переменные
local inventory           = nil
local stat                   = nil
local rec_wnd           = nil
local initial               = false
local inventory_open     = false
local update_wnd       = true



function DetachWnd()
    --if inventory~= nil and rec_wnd~= nil and stat~= nil then
    if inventory~= nil then
    inventory:DetachChild(stat)
    rec_wnd   = Gravi()  -- на всякий случай получим объект   окна заново - хотя разницы не было - вылет и так и сяк
    rec_wnd:AttachChild(stat)  -- приаттачиваем статик к пустому окну
        stat    = nil
        rec_wnd = nil
    end
end

 

 

ну это для наглядности как проверяю условия:

function OnOpenInventory(info_id)  
    if info_id == "ui_inventory" then
        inventory_open = true
        inventory = level.main_input_receiver()  -- на всякий случай будем обновлять объект инвентаря на каждое открытие
        elseif info_id == "ui_inventory_hide" then
        inventory_open = false
     end
end 


function UpdateInventory()  -- на апдейте
    if  inventory_open then
        if CheckWeaponInSlot() then   -- если вещь  слоте
            if update_wnd then
                if not initial then      -- если аттача статика еще не было
                InitialWnd()    --[[ приаттачим   - это практически аналог твоей функции on_show()  
только у меня там сначала создается статик, затем кнопки и кнопки аттачатся к статику, 
а сам статик уже к инвентарю   inventory:AttachChild(stat) ]]
                end 
                if not stat:IsShown() then  -- если статик не виден 
                ShowWnd()   -- покажем
                end 
                update_wnd = false  -- закроем блок от апдейта
            end
        else             -- в слоте нет нужного ствола
           if initial and stat:IsShown() then   -- если было приаттачивание и статик показывается  
           HideWnd()    -- прячем статик
           end 
           update_wnd = true
        end
    elseif not inventory_open then 
    update_wnd = true
   end
end

 

 

в общем хочется понять - в чем проблема? в логе ничего информативного кроме кроме стека вызовов.

PS: конечно еще остается вариант с запоминанием текущего состояния кнопок и их восстановлением после каждого деаттача и аттача на закрытие\открытие инвентаря. Что я и попробую сделать.

 

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

RvP

не имею я такой возможности=( трафик не резиновый=(

___________________________________________

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

т.е. не с анимациями НПСов и со всем прилежащим.

при использовании предмета.

Т.Е. сделать такое условие: Если ГГ использовал предмет и он на расстоянии удара, то ударить в морду.

87728-stalker.gif
Ссылка на комментарий

ФеНиКс

а по твоему удар в морду это что? Это и есть анимация нпыса. Плюс анимация камеры.

И что тебе мешает объединить в одном скрипте вызов этой анимации у NPC , звуковой эффект удара и анимацию камеру fusker.anm и прочие нужные тебе условия?

ты загляни в функцию actor_punch - файл xr_effects.

Условия твои очень неясные - какой нпыс должен бить? (любой\не любой) .Как должна определяться его юзердата (через логику или методы)? И прочие нюансы.

...ну сколько Artos может вас учить формулировать вопросы максимально точно...

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

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

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

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

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

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

Войти

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

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

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