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

Магазинное питание оружия


Kirag

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

Kirag, я про "недостаток" в шутку, прикола ради

 

Да я и не воспринял в обиду :) Самого иногда достает :) - Kirag

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

Может быть, стоит переделать функцию isWeapon в _g.script

Если не ошибаюсь, нпс распознают оружие или нет именно через нее.

 

было:

function isWeapon(object)
    local id = get_clsid(object)
    if id == nil then return false end

    if id == clsid.wpn_vintorez_s then return true
    elseif id == clsid.wpn_ak74_s then return true
    elseif id == clsid.wpn_lr300_s then return true
    elseif id == clsid.wpn_hpsa_s then return true
    elseif id == clsid.wpn_pm_s then return true
    elseif id == clsid.wpn_shotgun_s then return true
    elseif id == clsid.wpn_bm16_s then return true
    elseif id == clsid.wpn_svd_s then return true
    elseif id == clsid.wpn_svu_s then return true
    elseif id == clsid.wpn_rpg7_s then return true
    elseif id == clsid.wpn_val_s then return true
    elseif id == clsid.wpn_walther_s then return true
    elseif id == clsid.wpn_usp45_s then return true
    elseif id == clsid.wpn_groza_s then return true
    elseif id == clsid.wpn_knife_s then return true
    elseif id == clsid.wpn_grenade_launcher then return true
    elseif id == clsid.wpn_grenade_f1 then return true
    elseif id == clsid.wpn_grenade_rpg7 then return true
    elseif id == clsid.wpn_grenade_rgd5 then return true
    elseif id == clsid.wpn_grenade_fake then return true
    else return false end
end

 

Предлагается:

function isWeapon(object)
    local id = get_clsid(object)
    if id == nil then return false end

    if id == clsid.wpn_vintorez_s then return true
    elseif id == clsid.wpn_ak74_s then return true
    elseif id == clsid.wpn_lr300_s then return true
    elseif id == clsid.wpn_hpsa_s then return true
    elseif id == clsid.wpn_pm_s then return true
    elseif id == clsid.wpn_shotgun_s then 
        local objsect = object:section()
        if objsect then
        if string.find(objsect,"clip_",1) 
            or string.find(objsect,"mag_",1)
            or string.find(objsect,"belt_",1) then
        return false 
        else return true end
        else
        return true
        end
    elseif id == clsid.wpn_bm16_s then return true
    elseif id == clsid.wpn_svd_s then return true
    elseif id == clsid.wpn_svu_s then return true
    elseif id == clsid.wpn_rpg7_s then return true
    elseif id == clsid.wpn_val_s then return true
    elseif id == clsid.wpn_walther_s then return true
    elseif id == clsid.wpn_usp45_s then return true
    elseif id == clsid.wpn_groza_s then return true
    elseif id == clsid.wpn_knife_s then return true
    elseif id == clsid.wpn_grenade_launcher then return true
    elseif id == clsid.wpn_grenade_f1 then return true
    elseif id == clsid.wpn_grenade_rpg7 then return true
    elseif id == clsid.wpn_grenade_rgd5 then return true
    elseif id == clsid.wpn_grenade_fake then return true
    else return false end
end

 

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Zander_driver, после такой правки -

FATAL ERROR

 

[error]Expression : fatal error

[error]Function : CScriptEngine::lua_error

[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp

[error]Line : 73

[error]Description : <no expression>

[error]Arguments : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:866: attempt to call method 'section' (a nil value)

 

 

stack trace:

 

 

 

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

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

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

Странно. получается, object в этом методе - это не *game_object а нечто другое.

Ну тогда надо в логике нпс искать, где они IsWeapon вызывают и как. Только где искать - я без понятия...

Забьем, вобщем :)

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Zander_driver

Ты был прав в главном - это действительно зашито в функции isWeapon. И проверяются там все-таки game_object-ы. Только искать надо было не "mag_" и т.д. - это патроны, и класс у них патронов, а "wm_" - заряжаемые магазины на классе шотгана. На всякий случай поставил проверку на существование объекта в принципе - он исчезает-появляется, мало ли...

 

У меня заработал такой вариант - полный цикл разрядки-зарядки перед носом у НПС, он возмутился только когда по окончании зарядки актор достал настоящее оружие:

 

function isWeapon(object)
    local id = get_clsid(object)
    if id == nil then return false end
    -- добавлено
    if object and string.sub(object:section(),1,3) == "wm_" then
        return false
    end
    -- далее без изменений

Мои работы:

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

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

Soul Cube

 

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

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

Про wm_-секции не сообразил :) Хотя сам же кое-где такое определение юзал...

Непонятно, почему тогда ругалось на метод section. Из-за исчезновений чтоли...

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Управление как-то не очень, мягко говоря. Лучше бы зарядку обоймы зделали бы так: нажимаеш ПКМ на обойме и выбераешь "зарядить"/"разрядить". И ещё минус: нельзя перезарядится, пока не кончаться все патроны.

Ссылка на комментарий
Верес, в игре нельзя реализовать все, что требует душа.
Ссылка на комментарий
Верес, твой вариант не реалестичен ^_^ как сделал Kirag гораздо интересней. А по поводу: нельзя перезарядится, пока не кончаться все патроны, разряжать нужно через инвентарь.

S.T.A.L.K.E.R. Weapon modding team - группа вКонтакте

Зона, это не артефакты, деньги монстры или война...Это стиль жизни...

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

Верес, почему нельзя перезарядиться? Разрядил оружие, вставил полупустой магазин в слот и хочешь дозаряжай, хочешь перезаряжай. Вопрос только, захочется тебе этого под пулями?

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

Kirag, кстати во второй части NLC 6 обещают разгрузку, в которую можно будет "засунуть" любые патроны\гранаты\аптечки и т.д. Может быть теперь получится соединить разгрузку и твои магазины? Мне кажется, не один я буду ждать такой связки.

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

Коллеги, подскажите пожалуйста - где править кол-во магазинов в продаже у НПС?

 

P.S.: Насчёт разгрузки под магазины - полностью поддерживаю и надеюсь.

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

Господа, я конечно извиняюсь и не сочтите за рекламу, но в моде Жесть (1.0.3) уже реализовано сочетание магазинов и некого подобия "разгрузки".

 

А по делу вопрос: Kirag, ты в лс упоминал, что твой юз-колбэк построен на принципе "предмет исчез - значит юз". Проходят ли через такой колбек какие-либо операции с магазинами? Другими словами, могу ли я производить скриптовую замену одного магазина в инвентаре на другой, не опасаясь повлиять на схемы работы магазинов.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий
Верес, почему нельзя перезарядиться? Разрядил оружие, вставил полупустой магазин в слот и хочешь дозаряжай, хочешь перезаряжай. Вопрос только, захочется тебе этого под пулями?

Смотри: выстрелел я с ПМ два раза, осталось в обойме 6 патронов, и захотел я вставить новую обойму, но нельзя! А так бы перезарядил на новую обойму, а обойма с 6-ю патронами ушла бы в рюкзак. Так было бы гораздо проще. Я не прав?

Ссылка на комментарий
Верес, и, собственно, чем это проще? Какой смысл, скажем имея в рюкзаке 2 магазина, менять их отстреляв по 2 патрона их них?
Ссылка на комментарий

xer-urg, предметы в продажу у НПС правятся в trade_generic.ltx. Но, по-моему, ставить магазины им в продажу - это гиблое дело. Надо как-то отследить ранг НПС, его оружие, группировку. Лучше поставить их в продажу торговцам (trade_barman, trade_dolg, trade_trader и т.д.). Можно выставить любые магазины и любое их количество, привязать торговлю к группировке и месту расположения торговца и, частично, даже к развитию сюжета. Впрочем у меня даже без прописывания в продажу НПС, Бес на Свалке после того как я ему продал ТОЗ-34, решил мне продать 5(!) рожков к АК-74, а Серый - пару рожков к МП-5.

А НПС лучше спавнить их после смерти. Повторюсь, так как это уже было описано, но чтоб не искать:

Jonny

В xr_motivator в death_callback найди проверку, начинающуюся с

if self.ammo_in_use ...

(там одна такая, не ошибешься) и в ней в math.random поменяй 4 на сколько считаешь нужным.

Я у себя сначала поставил local count = math.random(1,2). К Агропрому у меня было 22 рожка к АК. Сейчас выставил (0,0), то есть магазин могу снять только с подобранного оружия, да и то не всегда - в среднем 1 магазин с 5-7 стволов. Стало более приемлемо, а то приходилось даже выбрасывать - не унести.

Zander_driver,

Господа, я конечно извиняюсь и не сочтите за рекламу, но в моде Жесть (1.0.3) уже реализовано сочетание магазинов и некого подобия "разгрузки".

Можешь описать поподробней, чтобы понять что к чему?. А то скорость моего НЕТа не позволяет быстро скачать саму Жесть. Что это за некое подобие разгрузки?

Верес, а зачем тебе убирать обойму с 6 патронами, если у тебя всего в наличии, допустим, 2 обоймы? А после боя, как и положено, разрядил недострелянную, и в спокойной обстановке, у костерка, под заслуженные 100 грамм набил все пустые и полупустые. И завтра в бой с полным боезапасом!

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

Zander_driver

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

Посмтори функцию ammo_manager.on_lost_ammo, может, в твоем случае по аналогии можно выкрутиться.

 

Верес

Если ты выстрелил 2 патрона и желаешь перезарядиться, значит тебя в данный момент не убивают. Залезь в инвентарь, разряди в нем оружие и нажми R как обычно.

Зарядка по ПКМ - аналог такого сделать можно. Ну, не по ПКМ, а по юзу, невелика разница. Только не вижу смысла в такой халяве - она без магазинов была, за то ли боролись?

 

Marafon6540, xer-urg

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

Мои работы:

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

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

Soul Cube

 

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

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

Marafon6540, я, собственно, из продажи НПС их хочу убрать, а то, даже при math.random(0,0), получается немного читерно - рожки всегда есть в продаже у НПС. Конечно, можно не покупать, но хочется убрать даже возможность нетрудовой добычи магазинов.

 

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

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

xer-urg, а если в trade_generic.ltx прописать напрямую запрет на торговлю магазинами, например:

mag_30_5.45x39_fmj ;NO TRADE. Только придется прописывать туда все-все магазины. По-моему должно помочь. Даже если они будут отражаться в Инвентаре у НПС, продать они их по идее не смогут. Точнее ты не сможешь купить.

Kirag, ну рассмешил (пару вирусов). Хотя ты прав, шифровальщики еще те, непонятно правда для чего это делают. Я и сам думаю как ты, только смелости вслух об этом сказать не хватало. А насчет пойти своим путем - это замечательно! Буду с нетерпением ждать твоих находок. Если нужна будет помощь в тестировании - пиши. Неплохо владею Фотошопом, если надо будет помочь с текстурами - без проблем.

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

Верес

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

 

Marafon6540 У нас в моде ограничено количество магазинов, которые можно носить с собой в заряженном виде. Лишние - либо разряжать и носить отдельно патроны, отдельно пустые магазины, либо выбрасывать. В итоге и дроп боеприпасов вполне реалистичный - у каждого нпс хотя бы 1 магазин к его оружию - и сложность игры не теряется, на "подножном" корму долго не протянешь, приходится часто именно заряжать магазины.

Сходным образом с аптечками, стволами, и другими вещами.

 

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

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

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

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

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

Войти

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

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

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