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

Народная 2010 разработка


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

"Что у нее внутри, и как это сделать лучше". Для тех, кто уже разбирается в скриптах, конфигах, текстурах и "других страшных словах" ©, и имеет желание и время действительно делать их лучше.
См. подробности в первом посте.

Тема НЕ является ни столом заказов, ни службой техподдержки, ни справочным бюро.

Изменено пользователем Dennis_Chikin
  • Нравится 2
  • Полезно 1
Ссылка на комментарий

sapsan,

Часть из них просто запихнута в кисель от Сяка. Они мне важны только как дин. аномалии, и они отлично работают без прописи в алл спавне и в скриптах. За исключением тех, что я отстучал в посту к Shadowman. У них есть только конфиг и пропись в амк_аномал (в табле и по локациям). Более - ничего - ни СИДов, ни регистрации... этого и не надобно. Единственный недостаток - в большинстве из них нельзя варить арты - опять же - кроме тех, что я говорил Shadowman. Но - влёгкую можно сделать - и без прописи в скриптах - достаточно просто запихнуть их в алл спавн, что я сейчас и сделал с НО_грави - подобрал правильный конфиг - и вуаля. Одно но - эта аномалия - статичекая пока - ей нельзя поменять класс - иначе. она теряет свойства. а если сделать ей сид и прописать в скрипты - она будет динамической. но будет баг - как до моей правки - все аномалии алл спавна будут статикой... Вот где дилема. А так - существенно разгрузил память и количество безлоговых вылетов - но - в правке ещё не всё подправнено - из амк_аномал - надо полностью убрать но_грави - она там не нужна - и будет всё вообще ок.

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

Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

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

Arhara, вот исправление ЧУ для случая переходов ГГ между локациями на которых есть или нету ЧУ (например над землёй и под землёй).

 

Или, если ты вносил правки в таблицы файла, то замени этот кусок:

    -- неписи становятся в стойку с выставленным стволом
    if timeh == horror_begin_time.h and timem >= horror_begin_time.m and timem <= 59 then
        if panic_minute ~= timem then
            panic_minute = timem

            local npc, npc_position, position
            for k, v in pairs (db.storage) do
                npc = level.object_by_id(k)
                if npc and npc:alive() and IsStalker(npc) and tabl_npc_ignore[npc:name()] ~= true then
                    npc_position = npc:position()
                    position = vector():set(npc_position.x + math.random(-5,5), npc_position.y, npc_position.z + math.random(-5,5))
                    state_mgr.set_state(npc, "hide_s_right", nil, nil, {look_position = position})
                end
            end

            --[[for k, v in pairs (db.storage) do
                npc = level.object_by_id(k)
                if npc and npc:alive() and IsStalker(npc) and tabl_npc_ignore[npc:name()] ~= true then
                    state_mgr.set_state(npc, "hide_s_right")
                end
            end]]
        end
    end

    --сообщение о старте
    if timeh == horror_begin_time.h and timem == (horror_begin_time.m + 1) then
        if db.actor:dont_has_info("random_pre_news") then
            db.actor:give_info_portion("random_pre_news")
            random_news_number = math.random(table.getn(tabl_mess_begin))
            presoobj()
        end
    end
    
    --включение установки или её сбой
    if (timeh == horror_time.h and timem == horror_time.m)  then
        if db.actor:dont_has_info("horror") then
            game_reloaded = false
            db.actor:give_info_portion("horror")
            if math.random(2) == 2 then --удача запуска 50/50
                local level_name = level.name()
                local level_info = tabl_horror_by_level[level_name]
                if level_info then
                    level.add_cam_effector("camera_effects\\earthquake.anm", 77777775, true, "")
                    level.add_pp_effector("dead_zone.ppe", 77777774, false)
                    level.add_pp_effector("nano.ppe", 77777773, false)
                    level.add_pp_effector("nightvision.ppe", 77777772, false) 
                    level.add_pp_effector("psy_antenna.ppe", 77777771, true, "")
                    effects()
                    news()
                    horrorspawn(level_name)
                    hit_actor(level_name)
                    spawn_phantom()
                    horror_sound()
                    
                    local npc, npc_position
                    for k, v in pairs (db.storage) do
                        npc = level.object_by_id(k)
                        if npc and npc:alive() and IsStalker(npc) and tabl_npc_ignore[npc:name()] ~= true then
                            state_mgr.set_state(npc, "idle", nil, nil, nil, {animation = true})
                        end
                    end
                    
                    random_reaction()
                end
            else -- неудачный запуск
                db.actor:give_info_portion("horror_fail")
                presoobjFAIL()
            end
            --meceniy_dinrad.disable() -- может это делать перед выбросом ?
            --meceniy_dinrad.level_spawn() -- может это делать после выброса ?
        end
    end

    -- перезапуск спецэффектов в случае перезапуска игры
    if timeh == horror_time.h and timem >= horror_time.m and timem < horror_end_time.m and game_reloaded and db.actor:dont_has_info("horror_fail") then
        game_reloaded = false
        level.add_cam_effector("camera_effects\\earthquake.anm", 77777775, true, "")
        level.add_pp_effector("psy_antenna.ppe", 77777771, true, "")
        horror_sound()
    end
    
    --окончание ЧУ
    if (timeh == horror_end_time.h and timem == horror_end_time.m) then
        if db.actor:dont_has_info("horror_time_end") then
            db.actor:give_info_portion("horror_time_end")
            
            if db.actor:dont_has_info("horror_fail") then
                level.add_pp_effector ("teleport.ppe", 77777777, false)
                level.remove_pp_effector(77777774)
                level.remove_pp_effector(77777773)
                level.remove_pp_effector(77777772)
                level.remove_pp_effector(77777771)
                level.remove_pp_effector(77777776)
                level.remove_cam_effector(77777775)
                remove_horror_mutant()
            end
        end
    end

на этот:

    -- неписи становятся в стойку с выставленным стволом
    if timeh == horror_begin_time.h and timem >= horror_begin_time.m and timem <= 59 then
        if panic_minute ~= timem then
            panic_minute = timem
            
            -- тревожим неписей только на локациях, где есть ЧУ
            if tabl_horror_by_level[level.name()] then
                local npc, npc_position, position
                for k, v in pairs (db.storage) do
                    npc = level.object_by_id(k)
                    if npc and npc:alive() and IsStalker(npc) and tabl_npc_ignore[npc:name()] ~= true then
                        npc_position = npc:position()
                        position = vector():set(npc_position.x + math.random(-5,5), npc_position.y, npc_position.z + math.random(-5,5))
                        state_mgr.set_state(npc, "hide_s_right", nil, nil, {look_position = position})
                    end
                end
            end
        end
    end

    --сообщение о старте
    if timeh == horror_begin_time.h and timem == (horror_begin_time.m + 1) then
        if db.actor:dont_has_info("random_pre_news") then
            db.actor:give_info_portion("random_pre_news")
            random_news_number = math.random(table.getn(tabl_mess_begin))
            presoobj()
        end
    end
    
    --включение установки или её сбой
    if (timeh == horror_time.h and timem == horror_time.m)  then
        if db.actor:dont_has_info("horror") then
            game_reloaded = false
            db.actor:give_info_portion("horror")

            -- расслабляем неписей только на локациях, где есть ЧУ
            if tabl_horror_by_level[level.name()] then
                local npc, npc_position
                for k, v in pairs (db.storage) do
                    npc = level.object_by_id(k)
                    if npc and npc:alive() and IsStalker(npc) and tabl_npc_ignore[npc:name()] ~= true then
                        state_mgr.set_state(npc, "idle", nil, nil, nil, {animation = true})
                    end
                end
            end

            if math.random(2) == 2 then --удача запуска 50/50
                local level_name = level.name()
                local level_info = tabl_horror_by_level[level_name]
                if level_info then
                    level.add_cam_effector("camera_effects\\earthquake.anm", 77777775, true, "")
                    level.add_pp_effector("dead_zone.ppe", 77777774, false)
                    level.add_pp_effector("nano.ppe", 77777773, false)
                    level.add_pp_effector("nightvision.ppe", 77777772, false) 
                    level.add_pp_effector("psy_antenna.ppe", 77777771, true, "")
                    effects()
                    news()
                    horrorspawn(level_name)
                    hit_actor(level_name)
                    spawn_phantom()
                    horror_sound()
                    random_reaction()
                end
            else -- неудачный запуск
                db.actor:give_info_portion("horror_fail")
                presoobjFAIL()
            end
            --meceniy_dinrad.disable() -- может это делать перед выбросом ?
            --meceniy_dinrad.level_spawn() -- может это делать после выброса ?
        end
    end

    -- перезапуск спецэффектов в случае перезапуска игры
    if timeh == horror_time.h and timem >= horror_time.m and timem < horror_end_time.m and game_reloaded and db.actor:dont_has_info("horror_fail") then
        game_reloaded = false
        -- возвращаем спецэффекты только на локациях, где есть ЧУ
        if tabl_horror_by_level[level.name()] then
            level.add_cam_effector("camera_effects\\earthquake.anm", 77777775, true, "")
            level.add_pp_effector("psy_antenna.ppe", 77777771, true, "")
            horror_sound()
        end
    end
    
    --окончание ЧУ
    if (timeh == horror_end_time.h and timem == horror_end_time.m) then
        if db.actor:dont_has_info("horror_time_end") then
            db.actor:give_info_portion("horror_time_end")
            
            if db.actor:dont_has_info("horror_fail") then
                -- вспышка окончания ЧУ только на локациях, где есть ЧУ
                if tabl_horror_by_level[level.name()] then
                    level.add_pp_effector ("teleport.ppe", 77777777, false)
                end
                level.remove_pp_effector(77777774)
                level.remove_pp_effector(77777773)
                level.remove_pp_effector(77777772)
                level.remove_pp_effector(77777771)
                level.remove_pp_effector(77777776)
                level.remove_cam_effector(77777775)
                remove_horror_mutant()
            end
        end
    end

 

Изменения:

- неписи тревожатся только на локациях, где возможен ЧУ;

- неписи расслабляются после тревоги только на локациях, где возможен ЧУ;

- спецэффекты ЧУ восстанавливаются только на локациях, где возможен ЧУ;

- вспышка окончания ЧУ появляется только на локациях, где возможен ЧУ;

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

Monnoroch,

LithOS, Ты ГГ в диалогах как сообщать будешь,какой арт требуется?

 

А как я, по-твоему, ГГ сообщаю, какой из рандомных тайников Валерича ему требуется, в аддоне? ;) Так же, как Костя делал...

 

Кстати, по поводу движка - ты про билд 3120 или про ЗП?

 

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

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

LithOS, билд-билд.под ЗП не получится перенести многое так просто - тот же сюжет.

 

Добавлено через 2 мин.:

Ray, просто ГГ не сам создает,он использует капсулу - тот же артефакт.а Сахар сидит себе в бункере и сидит...

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

Ray, Ты ошибаешься.Они не соль под движок адаптируют,а движок под соль :)

Тем более,что он близок к движку ТЧ.

 

А Архара - ну уж как хочет.

Не захочет Архара - кто другой возьмет и адаптирует.

Изменено пользователем Monnoroch
Ссылка на комментарий
Т.е нет разницы,если я 1 раз определю

obj = my_class()

и 100 раз вызову

obj:any_func()

 

или если я 100 раз вызову

my_class():any_func()

Разница есть, если my_class() создаёт новый объект. В этом случае self будет всякий раз новый.

 

Добавлю свои пять копеек во флейм. Поддерживаю общее мнение насчёт невозможности совершенно новой разработки. Призывать мне верить не буду, в качестве аргумента могу предложить взглянуть на заглавную страницу нашего уважаемого портала в раздел "новости". Ещё могу предложить вспомнить о судьбе Netscape Navigator-а (если о таком кто-то ещё помнит). Его помнится на каком-то этапе тоже решили с нуля переписать. Байтораздирающее зрелище было =)

 

По поводу переноса на новый движок. По-моему - это почти нереально. Со скриптами будет проблема в основном только с окошечной частью. Остальное вроде как не сильно изменилось. Но это же не всё. Есть ещё объекты из all.spawn, модели, анимации? Фактически - это будет новая разработка (см. выше).

 

Однако, что вам на самом деле не хватает - это технического средства координации усилий. Я имею в виду кодовый репозитарий. Полно же халявных хостингов для того-же SVN, и пользоваться этим совсем не сложно.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

malandrinus, Так соль уже нормально запускают на новом движке.Да,есть нюансы,типа полдня каждую загрузку,но это можно обойти по принципу сна :D

Ну или еще как.

 

С такими замашками лучше будет купить у ПЫС этот билд лицензионно и сделать "тот самый сталкер" и издать самопально :)

Потому как столько работы никто не осилит задаром - жить то как то нужно.

Изменено пользователем Monnoroch
Ссылка на комментарий
Что-то табличка та с константами, перерисованными из луа_хелп вызывает вылеты.

До определённого момента класса clsid не существует. В частности, его ещё нет в самом класс-регистраторе. Если проблема в этом, то надо добиться того, чтобы код инициализации сработал позднее.

 

Добавил:

 

Да, точно. Причина именно в этом. Вероятно поэтому в ТЧ функции типа IsMonster и реализованы так убого. В ЗП эту проблему решили как положено: код инициализации помещён в start_game_callback. Срабатывает не сразу, поэтому clsid уже существует.

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

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Shadowman, malandrinus, табличка работает нормально. Она у меня не работала только потому, что я её не проверял - написал и выложил. Методом научного втыка вычислил и закомментировал две аномалии (--[clsid.zone_buzz_s] = true, --[clsid.zone_ice] = true,), после чего всё заработало и выброс пережил нормально на Баре... Под правки Архары по аномалиям нужно подрезать таблицу. Будет время - сделаю. Но введение таблицы и единую функцию проверки можно отложить до "после выхода следующего дополнения" так как у нас с Архарой возникли разногласия по этому поводу. Вот наша переписка:

sapsan:

По аномалиям:

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

Она отвечает за:

- распознавание неписями аномалий при поиске артефактов (они в них теперь не полезут);

- отключение/включение аномалий после начала/окончания выброса (раньше новые аномалии не убирались и, как следствие, не меняли своё мместо положения);

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

Если я ошибся в твоём непонимании правки - хорошо :)

 

Arhara:

Не заметил - потому как у меня на баре всё ок. :ny_ph34r_1: Меня более мало интересуют дин. аномалии - в моём понятии и неоднократных пробах - им не нужны не прописи, ни СИДы, ни прочее. Всё и так работает без лишних заморочек. Интересен только момент обхождения неписями аномалий - не смотрел, но думаю, это достаточно лишь прописать в неписях по группировкам - по подобию монстров....

П.С - а нужна ли табла по классам аномалий вообще????

 

sapsan:

Смотри. Раньше проверка на то, что объект - это аномалия, делался так:

if (sobj:clsid()>172 and sobj:clsid()<180) or
sobj:clsid()==clsid.zone_electra_s or
(sobj:clsid()>18019 and sobj:clsid()<18024) or
sobj:clsid()==clsid.nogravity_zone then

Теперь это делается так:

if is_anomaly(sobj:clsid()) then

Таблица с классами используется в функции is_anomaly() вместо сравнений. И никуда от этого не деться - либо по-старому - сравнениями, либо по-новому - табличкой. Задача одна и та же, но решение разное. Вообще удалять таблицу (равнозачно удалению проверки) нельзя - не будет этих динамических аномалий вообще (не будут они менять место после выброса) и неписи будут в них лезть за артефактами. Проверка эта как раз и участвует в коде, который удаляет все аномалии в начале выброса, а потом спавнит их в новых случайных местах.

Своей правкой я ничего в логике не изменил, я только подрихтовал код, вынес саму проверку в одну функцию с единой таблицей и дополнил список новыми клас_ид аномалий.

Ведь добавлял ты новые аномалии в таблицы спавна. Ну перенёс ты их в олл.спавн, но ведь из игры они никуда не делись и класс_ид у них тоже остался. Просто регистрировать их уже не нужно (если я правильно понял), но вот сама игра должна и дальше с ними "работать", а для этого нужна эта проверка.

 

Arhara:

У новых дин. аномалий нет класс_ид. Нет вообще ничего, кроме конфига, а у части - нет даже и этого. Зачем их вносить куда-то ещё, если и так всё работает?

 

sapsan:

Ты хочешь сказать, что убрал их и в lua_help.script из C++ class clsid {? Если да - ты проверял, что они меняют место после выброса ?

На основе проверки на sobj:clsid() осуществлялась перестановка аномалий и запрет на обращение внимание неписями на арты в аномалиях...

 

Arhara:

Конечно, проверял. Более того - уже давно вышла правка - а в ней - я убрал им СИДы, регистрацию, луа_хелп и прочую хренотень. Это только провацировало вылеты. :ny_ph34r_1: :ny_ph34r_1:

 

sapsan:

Посмотрел правку - там ты убрал класс_ид только у новых аномалий... Они пропадают сразу после начала выброса ? А то я не тестировал с убранными класс_ид у аномалий. Как по мне, то с моей правкой или без неё, но с удалёнными класс_ид из луа_хелп новые аномалии не будут отключатся с началом выброса и перемещатся после него. Если удаляются и перемещаются - то я чего-то не понимаю... Может тогда нужно начать НИ, чтобы они не удалялись и не перемещались ? Так как у уже заспавненных аномалий сохранились класс_ид...

 

Arhara:

В том то всё и дело, что они работают и не вызывают багов. А при прописке - наоборот...

 

Arhara:

Нет, я оставил проверку на аномалии от АМК - так как было, убрав только свои, новые и оставил их в табле и по локам, изменив конфиги самих аномалий. Более - ничего не менял.

 

sapsan:

И в новой игре твои новые аномали при начале выброса пропадают ?

Без проверок, которые ты убрал, код удаления аномалий в начале выброса их не распознает и не удалит... Также и с неписями...

P.S. Будешь выкладывать следующее обновление или патч - выложи его как тестовый... Не хорошие у меня мысли по поводу новых аномалий без проверок в коде :) Помнишь как игроки жаловались, что после выброса новые аномалии не пропадали и не перемещались? Это как раз из-за отсутствия тогда проверок...

 

Arhara:

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

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

 

sapsan:

В народ ты выложил правку, в которой отключены в луа_хелп и амк_аномс только новые аномалии, а не все. Да и проверки остались по старым аномалиям. Вот когда все аномалии отключишь и проверки уберёшь... :rolleyes:

 

Arhara:

Я говорил только о новых. Старые - остались как были.

 

sapsan:

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

 

Arhara:

Я протестил - ничего просто так не выкладываю :ny_ph34r_1:

 

 function turn_off_all() for i=0,65534 do
local sobj = alife():object(i)
if sobj then
if (sobj:clsid()>172 and sobj:clsid()<180) or sobj:clsid()==clsid.zone_electra_s then
local map = alife():level_name(game_graph():vertex(sobj.m_game_vertex_id):level_id())
if not check_exclusion(sobj,map) then
local status=get_anomaly_status(sobj)
if status=="on" then set_anomaly_status(sobj,"del")
end end
end end
end end

 

Именно она заставила меня так долго припираться с Архарой :)

Знающие, что скажите на отсутствие проверки новых аномалий в ней ? Если Архара прав, то каким образом новые аномалии отключаются в начале выброса и меняют место после него ? :russian_ru:

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

sapsan

На сколько я поняла, всё очень просто. Новые аномалии имеют класс старых аномалий.

Например аномалия фонтан, это та-же самая zharka_statik, только со своими партиклами. А туман и завеса, сделаны на основе mosquito bald.

А начальная функция, отвечающая за спавн и уборку аномалий, это amk_anoms.bind. Если эта функция прописана в конфиге зоны, то зона будет спавнится и убираться. И как сказал Архара, что-бы аномалия была динамической, класс должен быть - ZS_...

------------------------

Да, с детектором получается лажа. Детектор путает значки у аномалий с одинаковым классом.

Я думаю, что-бы разобраться с новыми аномалиями, нужно обратить внимание, как сделана снежка у АМК, которую они ввели в игру позже остальных.

 

 

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

Вообще-то я белая и пушистая...

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

lsclon, мне тоже эта мысль пришла, но как тогда с детекторами ?

За уборку аномалий во время выброса отвечает функция turn_off_all(), которую я указал выше. И, как я теперь понял, она будет работать для новых аномалий, так как класс_ид у них равен класс_ид каких-то старых.

Но в чём смысл делать близнецов? Если смысл в оптимизации - тогда почему бы и старые аномалии не свести в одну ? Опять же - по какому признаку детекторы различают аномалии ?

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

Эту функцию я понимаю так:

function turn_off_all() for i=0,65534 do

local sobj = alife():object(i) -- поиск любых уже заспавненых объектов

if (sobj:clsid()>172 and sobj:clsid()<180) or

sobj:clsid()==clsid.zone_electra_s -- выборка из найденых - определённых объектов

if not check_exclusion(sobj,map) then -- исключение из списка эксклюзивных обьектов

local status=get_anomaly_status(sobj) -- ????????????? что это за объекты? - это не объекты с clsid(), написанными выше, а объекты, имеющие статус on

if status=="on" then set_anomaly_status(sobj,"del") -- применение удаления

 

-----------------------------

Вообще-то это объекты, которые берутся из функции get_anomaly_status, а уже потом, к объектам с класс_ид, имеющим статус on, и к объектам, взятым из функции

get_anomaly_status, имеющих также on, применяется функция set_anomaly_status.

Так что, нужно(наверно) разбираться с функцией get_anomaly_status.

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

Вообще-то я белая и пушистая...

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

lsclon, это объекты со статусом "on" и с класс_ид, который прошел проверку выше (172...180).

 

lsclon,

берутся из функции get_anomaly_status
Нет они берутся с помощью local sobj = alife():object(i), потом проходят проверку на класс_ид, а только потом уже и на статус...

 

malandrinus, благодарю. Ну теперь то всё ясно :). Если что - ковырять детекторы...

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

Вообще-то объекты вовсе не обязательно различать по классу. Есть ещё куча способов отличать их друг от друга. Если классифицировать способы "по убыванию общности", то получится примерно так:

1. самое глобальное различие - по классу

2. менее глобально - по секции (с одним классом могут быть разные секции)

3. ещё менее глобально - по story_id или по id

 

где-то между 2 и 3 лежит различие по наличию инфопоршена. Все прочие способы классификации сами уже классификации не поддаются =)

 

 

Полагаю, если надо как-то различать аномалии, то в данном случае надо ввести дополнительное различие по секции или только по секции вместо классов. Не так уж много этих аномалий.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

Из этого обсуждения я сделал для себя два вывода:

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

- чтобы точно определить тип аномалии и ее название (для детектора, для "варки") - нужно пользоваться названием секции.

Вот от этого и будем плясать

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

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

Вчера на работе получилось немного уделить время задаче по настройке таблиц переодевания НПС для использования в схемах, которые Monnoroch взял из АМК-скриптов и адаптировал для своего аддона (раз пошло для аддона - пойдет и для Соли).

 

Я начал с того, что из файла outfit.ltx стал вытаскивать названия всех костюмов.

Перебрал где-то две трети файла и уже получил 500 костюмов. А еще есть файл unique_items.ltx, где тоже немало (и некоторые другие). Я так подозреваю, что общее количество костюмов будет около 1000.

 

Честно говоря слегка ..........., я такого не ожидал. Короче говоря таблицы получатся недетскаи. Но это в принципе не проблема. Но вот терзают смутнные сомнения надо ли все броники включать в эти таблицы?

 

Строгое предупреждение от модератора n6260
Я тоже [твое удаленное слово] с вашего лексикона.

 

Добавлено через 35 мин.:

Получается для каждого вида броника 18 конфигов.

Один - базовый, 8 для броников с ПНВ, один для укрепленного и 8 для уклепленных с ПНВ. Так вот по идее их надо все в таблицы вкидывать, верно?

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

AMD Ryzen 5 3600 Box, MB Asus Prime B450-Plus, 2x8 Gb Kingston DDR4-3200, MSI GeForce GTX 1060 3GB, SSD Samsung 840 EVO 120GB, Kingston A400 120 Gb, Samsung HD103SJ SATA2, Samsung HD502HJ SATA2

 

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

Ray, о каких таблицах речь? Для переодевания? Зачем??

Там важен только визуал - входящий и исходящий: т.е. какой на какой меняем. Все навороты в конфигах сделаны для ГГ, для неписей нет разницы, есть в бронике ПНВ, укрелен он или еще чего. Нужно разраничить только общие типы и принадлежности к группировкам, и все.

 

Добавлено через 7 мин.:

Сделать

1)Рецепты сложные - из 5-7 ингридиентов.

2)Важен порядок.

Monnoroch, здорово конечно. Но засесть сейчас еще раз переписывать то, что уже практически сделал - неее, спасибо :crazy:

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

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

Shadowman, визуал то это хорошо, но надо задать принадлежность броников к визуалам. В скриптах АМК для этого есть такая таблица

aOutfitsList = {
    ["novice_outfit"]             = "novice",
    ["bandit_outfit"]             = "bandit",
    ["killer_outfit"]             = "killer",
    ["monolit_outfit"]             = "monolit",
    ["specops_outfit"]             = "specops",
    ["military_outfit"]         = "military",
    ["stalker_outfit"]             = "stalker",
    ["scientific_outfit"]         = "nauchniy",
    ["exo_outfit"]                 = "exo",
    ["svoboda_light_outfit"]     = "svoboda",    
    ["svoboda_heavy_outfit"]     = "svoboda",    
    ["dolg_outfit"]             = "dolg",    
    ["dolg_scientific_outfit"]     = "nauchniy",
    ["ecolog_outfit"]             = "ecolog",
    ["protection_outfit"]         = "ecolog"
}

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

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

AMD Ryzen 5 3600 Box, MB Asus Prime B450-Plus, 2x8 Gb Kingston DDR4-3200, MSI GeForce GTX 1060 3GB, SSD Samsung 840 EVO 120GB, Kingston A400 120 Gb, Samsung HD103SJ SATA2, Samsung HD502HJ SATA2

 

Ссылка на комментарий
Ray Укрепленные костюмы, и костюмы с ПНВ в игре никто не использует (кроме ГГ) поэтому включать в функцию броники с ПНВ и укрепленные нет смысла

Freedom

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

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