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

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


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

@oggycoc, Насчет ВСЕХ НПС - это ты погорячился. В приведенном тобой коде речь идет только об НПС с секцией yan_ecolog_respawn_1. Больше никто и нигде удаляться не будет.

 

ИМХО, правильнее будет использовать функцию IsStalker(obj) вместо проверки string.find(obj:name(),"yan_ecolog_respawn_1")

 

Если неправ, пусть гуру моддинга поправят.

  • Согласен 3

По какой причине логика заспавненного торговца зависает и он стоит в дефолтной стойке. Как это может быть исправлено?

2 минуты назад, СЕРА сказал:

зависает

А в логе никаких подозрительных надписей нет?

  • Согласен 1

@mole venomous, Я бы даж подумал - они должны быть. Лог в студию - самый правильный вариант.

Мужики, нужна помощь. Мне задали вопрос, а я не знаю, как ответить. Суть такова:

 

Можно ли как-то увеличить скорость движения ГГ в режиме прицеливания?

 

Есть у кого идеи на этот счет?.

13 hours ago, AndrewMor said:

@oggycoc, Насчет ВСЕХ НПС - это ты погорячился.

Имелось ввиду все НПС этого профиля  когда-либо мной заспавненные в мире, на данном сейве

Изменено пользователем oggycoc
6 часов назад, oggycoc сказал:

Имелось ввиду все НПС этого профиля  когда-либо мной заспавненные в мире, на данном сейве

А вот это другое дело.

 

Дорогие и уважаемые сталкеры, мододелы и разбирающиеся в скриптах! Помогите, пожалуйста, если
знаете! Как правильно написать скрипт-цикл, чтобы с каждой итерации этого цикла использовались
числа по заданной очереди, например, сначала маленькие, потом большое? И так до бесконечности
зацикленно менялись бы? И чтобы новая перезагрузка сохранения не влияла бы на их смену, а
чередовались по порядку.

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

 

Да это я в bind_stalker.script, Сталкер ТЧ, ОП 2  (хотя работает и в модах COP) добавляю респаун, самый легкий, простой и удобный, чтобы врагов
было побольше..получается только с одним числом периодичности, но вот как задать несколько любых
заданных чисел, меняющихся по порядку? После вот этих строк в bind_stalker.script добавляю -

  -- обновление постпроцессов
  if post_process ~= 0 then
    if post_process:update () == true then
       post_process = 0
    end
  end

  -- обновление пси-антенны
  if sr_psy_antenna.psy_antenna then
    sr_psy_antenna.psy_antenna:update(delta)
  end

  --Для итерации спауна например этих врагов неподалеку от актора (конечно, я их делаю куда
больше), добавляю вот этот скрипт-код -

    if post_time2 < time then 
        post_time2 = time + 484000 --Вот это число передышки респауна, как задать
зацикленную поcледовательность чисел, чередующихся по порядку, бесконечно? Чтобы с большим числом
передохнуть от маленьких чисел -нескольких раз частого респауна, можно было. 

      local ap = db.actor:position()
    local lv = db.actor:level_vertex_id()
    local gv = db.actor:game_vertex_id()
alife():create("mil_monolit_rush_respawn_1", vector():set(ap.x+math.random(200,210), ap.y+0,
ap.z+math.random(-13,-12)), lv, gv)
alife():create("burer_normal", vector():set(ap.x+math.random(100,200), ap.y+0, ap.z+math.random
(-13,-12)), lv, gv)

end
--Пробовал по-разному, и так
    if post_time < time then
            ai1 = 10000  --Пробовал и так - ai[1,4] =[10000,10000,10000,500000] , и перепробовал
многие варианты, вылетает или не используется
            ai2 = 10000
            ai3 = 10000
            ai4 = 500000
        for 1, 4 do
             post_time = time + ai[1,..,4] --Что-то не так делаю, не работает.

Помогите, дорогие люди и уважаемые мододелы, если можете! Не говорите на словах, а пожалуйста,
напишите сам код или функцию, которая перебирает заданные числа последовательно, там немного
строчек должно быть. Зараннее спасибо огромное! Пожалуйста, простите, если глупость спросил, или
не по адресу, или не по правилам форума! Зарегистрировался специально, потому что ответа на это
сам не нашел, ткните, если он есть где-то. Умоляю, помогите! Если только знаете. И извините,
пожалуйста, за длинное cообщение, хотел, чтобы поняли мой вопрос. Извините, если что! Спасибо!

 


 

@mole venomous, вот логика

[smart_terrains]
none = true

[logic]
active = walker1
trade = misc\trade_bolota.ltx 
trader_flags = 0 
inv_max_weight = 10000 
meet = meet


[sleeper]
path_main = lvl8_swamp_smart_terrain_bolota_1_sleep
wakeable = false
on_info = {+i_14} walker1
danger = danger_ignore
combat_ignore = combat_ignore
meet = meet

[walker1]
path_walk = way_svat_walk_1
path_look = way_svat_look_1
def_state_standing = sit_ass
danger = danger_ignore
combat_ignore = combat_ignore
meet = meet

[meet]
meet_state = 30|hello@hail|20|wait@wait
meet_state_wpn = 60|backoff@threat_weap
victim = 30|actor
victim_wpn = 60|actor
use = true
use_wpn = false
syndata = hello@hail|backoff@threat_weap


[combat_ignore]

[danger_ignore]
ignore_distance = 1

 

1 час назад, mifares сказал:

использовались
числа

Что это означает... загадка.

1 час назад, mifares сказал:

за длинное cообщение, хотел, чтобы поняли мой вопрос.

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

Попробуйте объяснить короче и понятнее, без загадок.

  • Согласен 1

Zander_driver!
Какие числа? -Количество миллисекунд, маленькое -это, например, 30000 =30 секунд, большое в
понимании моего вопроса -900000 =900 секунд. Да и какая, простите,- интересно, для Вас разница,
их величина, если их настраивать в цикле можно и нужно? 

Что же хочется сделать автору этого вопроса, мне то есть? -так это чтобы вместо одного
применяемого скриптом числа, можно было задать несколько, например - 30000, 30000, 30000, 900000.
Вот например, есть функция math.random(30000,900000), но она будет выдавать случайно числа от
30000 до 900000. Может, есть такая функция, которая будет выдавать последовательно 30000, 30000,
30000, 900000? Или только как-то циклом это надо сделать? Вот бы кто код этого написал, вот бы
кто помог...

 

Я не спрашивал "какие числа"...

Впрочем, что вы хотите я понял. Это делается НЕ циклом. И "в пару строк" это не укладывается.

Потому что

24 минуты назад, mifares сказал:

Может, есть такая функция, которая будет выдавать последовательно 30000, 30000,
30000, 900000?

Такой функции нету. А чтобы ее написать, нужно где-то сохранять предыдущее число. Иначе откуда функция узнает, какое оно было?

Ну и, тут все же не стол заказов. Сохранять кучей способов можно - pstor актора, нетпакет актора, модуль se_stor Артоса (самый правильный вариант, пожалуй), правленые движки наконец... Но вам в любом случае, нужен какой-то механизм сохранения прошлого значения. А не цикл. И чтобы "кто-то" вам "помог" и "написал" - этот "кто-то" должен знать, какие механизмы сохранения можно применять в вашем моде. Нетпакет актора в некоторых модах бывает забит под завязку, и пихать туда что-то уже нельзя. se_stor - есть он там? нету? я например не знаю.

  • Согласен 2

@Zander_driver, ну речь вроде идёт об ОП, так что думаю есть.

1 час назад, mifares сказал:

последовательно 30000, 30000,
30000, 900000?

Всё что на ум приходит это таймеры.

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

Ребят, как заспавнить костюм на трупе нпс? Прописала комбез наемников информатору в аль спавне и в профиле, а он все равно не появляется.

10 часов назад, Ninna сказал:

как заспавнить

Вот функция, удобно спаунить на ходу, тремя способами (по координатам, по имени профиля и ID

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

function AddItems(items,recipient)
    local count = 0
    local pos, lvid, gvid, id, obj 
    local function Compare(id)
    obj = alife():object(id)
        return obj and obj.profile_name and obj:profile_name() == recipient
    end 
    for k, v in pairs(items) do
        if type(recipient)=='table' then
            for k, v in pairs (items[k]) do
            count = k
                for i=1, count do
                 alife():create(v,vector():set(recipient['x'],
                  recipient['y'],recipient['z']),
                   recipient['lv'],recipient['gv'])
                end
            end 
        elseif type(recipient)=='string' then
    if recipient =="actor" then
        obj = alife():actor()
        else
        for i=1, 65534 do
            local predicate = Compare(i)
            if predicate then
            break
           end
        end
    end 
    if obj == nil then return end
        for k, v in pairs (items[k]) do
            count = k
                 for i=1, count do
                 alife():create(v, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id, obj.id)
            end
        end 
    elseif type(recipient)=='number' then
        obj = level_object_by_sid(recipient)
            if obj ~= nil then
             id, pos, lvid, gvid= obj:id(), obj:position(), obj:level_vertex_id(), obj:game_vertex_id()
             elseif obj == nil then
             obj = alife():story_object(recipient)
             id, pos, lvid, gvid = obj.id, obj.position, obj.m_level_vertex_id, obj.m_game_vertex_id
                for k, v in pairs (items[k]) do
                    count = k
                   for i=1, count do
                   alife():create(v, pos, lvid, gvid, id)
                   end
               end
            end
        end
    end
end

function AddItemsByName()
    local items = {
    {[1]="item_1"}, -- итемы и их кол-во
    {[2]="item_2"},
    {[5]="item_3"}
    }
    local recipient = "profile_name" -- имя из профиля
    AddItems(items,recipient)
end

function AddItemsByID()
    local items = {
    {[1]="item_1"}, -- итемы и их кол-во
    {[2]="item_2"},
    {[5]="item_3"}
    }
    local recipient = 515 -- sid NPCа или кейса
    AddItems(items,recipient)
end

function AddItemsByPlace()
    local items = {
    {[1]="item_1"}, -- итемы и их кол-во
    {[2]="item_2"},
    {[5]="item_3"}
    }
    local recipient = {x=124.25,y=-7.69,z=-11.66,lv=427496,gv=133} -- координаты и вертексы
    AddItems(items,recipient)
end

 

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

@mole venomous, спасибо, только вот есть одна проблемка: я не разбираюсь в скриптах. Можешь хотя бы подсказать куда это нужно вставить? Дальше наверно разберусь раз там все подписано.

09.07.2020 в 23:18, Zander_driver сказал:

А старый-добрый spawn.inv теперь не в моде?

Ещё бы знать что это такое)

У меня другой вопрос назрел. Пытаюсь заспавнить уникальный комбез в х18 вместо обычного и уникальную куртку бандитов вместо обычной в вагоне на свалке, но при компиляции аль спавна он выдает ошибку cannot find clsid for class "название костюма". Что с этим делать? Причем помню что раньше уже сталкивалась с этой проблемой и как то ее заборола, но как не помню:pardon:

Никто не помнит как убрать в бункере монолог с осознанием. В общем когда там все светильники напольные разбиваем появляется монстры. Потом диалог с осознанием и в случае отказа выдается переход на чаэс. Фриплей делаю эта фигня мешает, по хорошому вырезать надо все это и нормальный переход заспавнить на чаэс.

Привет ребята.

Продолжаю ковырять ТЧ.

В файл map_spots_relations.xml, в самый низ добавил две секции:

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

 

    <neutral_pda_spot width="6" height="6" stretch="1" alignment="c"> 
        <texture r="255" g="200" b="0">ui_minimap_point</texture>
    </neutral_pda_spot>

    <friend_pda_spot width="6" height="6" stretch="1" alignment="c"> 
        <texture r="50" g="255" b="0">ui_minimap_point</texture>
    </friend_pda_spot>

 

В пда начали отображаться нпс, но радиус какой то маленький, увеличение switch_distance до 800 не возымело эффекта, значит радиус алайфа не играет роли, я так понимаю - сие зашито в движке?

И ещё: попробовал добавить ещё две секции.

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

    <enemy_pda_spot width="0" height="0" stretch="1" alignment="c" xform_anim="map_spot_rel_xform" xform_anim_cyclic="0">
        <texture r="255" g="0" b="0">ui_minimap_point</texture>
    </enemy_pda_spot>

    <deadbody_pda_spot width="4" height="4" stretch="1" alignment="c"> 
        <texture r="168" g="168" b="168">ui_minimap_point</texture>
    </deadbody_pda_spot>

Ну сие не заработало, где можно подсмотреть?

@Stalkersof, Вот этот мод не смотрел? https://www.amk-team.ru/forum/topic/8986-raritety/?do=findComment&comment=982760

Изменено пользователем UriZzz
11 минут назад, UriZzz сказал:

Ну сие не заработало, где можно подсмотреть?

https://yadi.sk/d/WVquKKUiPR2I1w

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

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

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

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

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

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

Войти

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

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

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