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

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


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
Ссылка на комментарий

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 вызывают и как. Только где искать - я без понятия...

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

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

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
    -- далее без изменений

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

 

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

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

Смотри: выстрелел я с ПМ два раза, осталось в обойме 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 - однозначно нет. Авторы уж как-то слишком шифруют код в архивах, еще бы пару вирусов поставили на попытку архив открыть. Впрочем, их право, пусть развлекаются, если хотят. Возможно, пойду как всегда своим путем...

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

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

 

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

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

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

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

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

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

Верес

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

 

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

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

 

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

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

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

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

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

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

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

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

Войти

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

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

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