Перейти к содержанию

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

 
 

ian98 пробовали выкидывать оружие перед удалением?

Спойлер

    if isWeapon(item) then
        npc:drop_item(item)
        alife():release(alife():object(item:id()), true)
    end

 

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

В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

vader_33 не пробовал. Если сделать так, то получается такое https://steamcommunity.com/sharedfiles/filedetails/?id=2512427670 (Все эти предметы должны быть невидимы для игрока). При этом оружие просто падает на землю. Наверное, нужно уточнить, что я не совсем на чистом тч это пытаюсь сделать. Это минимод аи адикшн 2.0, могут быть проблемы из-за него? Потому что там в архиве был death_manager. Значит его могли трогать. Плюс, там свой менеджер оружия и куча чего еще.

Лучше всего себя пока показал такой вариант

Спойлер

 


    local item_id = item:id()
    local item_in_slot = npc:item_in_slot(1)
    if item_in_slot ~= nil and
       item_in_slot:id() == item_id then
        alife():release(alife():object(item:id()), true)
    end
    item_in_slot = npc:item_in_slot(2)
    if item_in_slot ~= nil and
       item_in_slot:id() == item_id then
	alife():release(alife():object(item:id()), true)
    end

 

С одним только косяком. Это крашем. 

Спойлер

Expression : assertion failed Function : xrServer::Process_event_reject File : .\xrServer_process_event_reject.cpp Line : 12 Description : e_parent && e_entity

Который я смог поправить, изменив немного функцию

Спойлер

    local item_id = item:id()
    local item_in_slot = npc:item_in_slot(1)
    if item_in_slot ~= nil and
       item_in_slot:id() == item_id then
    local obj = item and item:id()and alife():object(item:id())
    if obj then alife():release( obj, true ) end
    end
    item_in_slot = npc:item_in_slot(2)
    if item_in_slot ~= nil and
       item_in_slot:id() == item_id then
    local obj = item and item:id()and alife():object(item:id())
    if obj then alife():release( obj, true ) end
    end

 

После чего, правда, на смену вылетам постоянным пришла нестабильная работа уборщика оружия. В половине случаев оружие не удалялось просто, а в половине от половины уцелевших стволов еще и выставлялся кондишн, что совсем меня сбило, ибо я убрал вообще set_condition. Да и вылеты, хоть и реже, остались и их лог всё тот же.

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

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 а попробуй на чистой сделать ТЧ, если вылеты будут значит дело в скрипте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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

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

В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Как называется текстура зелёного куста?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

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


76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 так, например. Но проверял на чистом тч
 

Спойлер



	local active_item = npc:active_item()
	local id = item:id()
		if isWeapon(item) and id == active_item:id() then
			local timer = time_global() + 1000
			
			local function check_timer()
				return time_global() > timer
			end
			
			local function release_item()
				alife():release(alife():object(id), true)
			end
			level.add_call(check_timer, release_item)
		end


 

 

  • Хабар 1

В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

vader_33 Я и близко не так пытался это сделать. Впрочем, у меня ничего и не вышло в итоге. Попробую. А вставлять-то куда? В keep_items? 

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

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 да, просто в функцию

Спойлер



function keep_item(npc, item)
    local section = item:section()

    if section == "bolt" then
        return false
    end

    if always_keep_item[section] == true then
        return true
    end
	
------------------------------------------------
	local active_item = npc:active_item()
	local id = item:id()
		if isWeapon(item) and id == active_item:id() then
			local timer = time_global() + 1000
			
			local function check_timer()
				return time_global() > timer
			end
			
			local function release_item()
				alife():release(alife():object(id), true)
			end
			level.add_call(check_timer, release_item)
			
		end
-----------------------------------------------------


 

 

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

В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

vader_33 именно так и вставил. По первым тестам, все работает, а вылетов пока не было.


Дополнено 11 минуты спустя

vader_33 Блин, не успел обрадоваться, как словил вылет

Спойлер

sv destroy object [239][wpn_binoc:wpn_binoc0239] [20744]
sv reject. id_parent [222][stalker:esc_vagon_wounded] id_entity [239][wpn_binoc:wpn_binoc0239] [20744]
 
FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : .\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ...w of chernobyl\gamedata\scripts\death_manager.script:170: attempt to index local 'active_item' (a nil value)
 

stack trace:

Я к нему даже не подбегал, но видимо по алайфу был в его радиусе. Так и вылетел. 

А щас подошел и прирезал Толяна и снова вылет. 

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

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 

Спойлер

 


	local active_item = npc:active_item()
	local id = item:id()
		if isWeapon(item) and active_item and id == active_item:id() then
			local timer = time_global() + 1000
			
			local function check_timer()
				return time_global() > timer
			end
			
			local function release_item()
				alife():release(alife():object(id), true)
			end
			level.add_call(check_timer, release_item)
		end

 

 

 

нужно, чтобы только оружие в руках удалялось или всё в рюкзаке? И + 1000 наверно слишком много, надо поменьше сделать

Изменено пользователем vader_33
  • Хабар 1

В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

vader_33 А вот я заметил, если непеся ранить, то оружие падает на землю и не удаляется, это из-за чего может быть? 


76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 потому, что нпс жив, и выпавшее оружие уже не принадлежит нпс. А death_manager.script обрабатывает только то, что принадлежит нпс во время смерти

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

В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 что ты там делаешь, если не секрет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Alex Kireev игроков без хабара оставляет, изверг(


В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

vader_33 понято, однако это жесткая дыра( И убрать ее никак? А можно, чтобы в случае ранения непись убирал автоматы в карман? Он так делает с пистолетами.


Дополнено 0 минут спустя

Alex Kireev Мод. Могу кинуть наработки. Протестишь)

Изменено пользователем ian98
  • Смех 1

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
8 минут назад, ian98 сказал:

кинуть наработки. Протестишь)

Я бы с радостью, дак времени пока нет, возможно на выходных появиться

А так, можно сылочку на ГД оставить, попробую в воскресенье посмотреть 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Alex Kireev Если коротко, это будет ванильный сталкер с рандомной бронькой на тушах и оружием в руках противников и друзей, случайные награды за квесты, да и сами квесты в некоторых случаях случайны и одноразовые, полностью выключенной торговлей, случайным спавном другов и не очень параллельно со спавном оригинальных мобов, что привнесет гораздо больший эффект рандома происходящему, чем в оригинале. Еще будут крафты, опять же случайные, и система редкости предметов, как в классических, в моем понимании, рпг. В общем, конечная цель, я думаю, заставить игрока уповать на рандом. Максимум рандома. Я пока не даю ссылки. Мне запаковать и загрузить на диск минута делов. Пиши, когда будет время и желание. Может к тому моменту уже больше будет сделано.


Дополнено 4 минуты спустя

vader_33 Связано ли убирание пестиков в карман и дропа автоматов на землю в случае ранения со слотом? Если я клонирую автоматы и перенесу их в первый слот(пистолетный) и дам нпс, будет ли он их также ронять? Или это не так устроено? Попробую пока, может прокатит. Не, не прокатило(

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

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
43 минуты назад, ian98 сказал:

А можно, чтобы в случае ранения непись убирал автоматы в карман?

но тогда все равно не удалится, удаляется активное оружие. Или всё-таки всё удалять с инвентаря? Вы так и не ответили.

Раз нет торговли, может оставить выпадение оружия, чтобы его массово обменивать на что-то? Или на задания, как хомяки в ОП-2, принеси 150 шт чего-то. Или сделать ремонт как в солянке, только если есть другое подходящее оружие на запчасти


В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

vader_33 с этим я разобрался. Оружие удаляется и просто инвентаре, и когда в руках. Это по первому вопросу. Хотя, мне интересно как это бы реализовал человек хоть что-то понимающий в скриптах) А то я просто скопировал ту функцию несколько раз. Работает, но может будет сбоить в дальнейшем.

Я сделал так:

Спойлер

function keep_item(npc, item)
    local section = item:section()

    if section == "bolt" then
        return false
    end

    if always_keep_item[section] == true then
        return true
    end

	local active_item = npc:active_item()
	local id = item:id()
		if isWeapon(item) and active_item and id == active_item:id() and npc:drop_item(item) then
			local timer = time_global() + 1000
			
			local function check_timer()
				return time_global() > timer
			end
			
			local function release_item()
				alife():release(alife():object(id), true)
			end
			level.add_call(check_timer, release_item)
		end

    local item_id = item:id()
    local item_in_slot = npc:item_in_slot(1)
    if item_in_slot ~= nil and
       item_in_slot:id() == item_id
    then
        item:unload_magazine()
    --' Тут надо уменьшить кондишн оружия
		item:set_condition(math.min((math.random(1)+1)/100,item:condition()))
		if isWeapon(item) then
			local timer = time_global() + 1000
			
			local function check_timer()
				return time_global() > timer
			end
			
			local function release_item()
				alife():release(alife():object(id), true)
			end
			level.add_call(check_timer, release_item)
		end
        return true
    end
    item_in_slot = npc:item_in_slot(2)
    if item_in_slot ~= nil and
       item_in_slot:id() == item_id
    then
        item:unload_magazine()
    --' Тут надо уменьшить кондишн оружия
		item:set_condition(math.min((math.random(1)+1)/100,item:condition()))
		if isWeapon(item) then
			local timer = time_global() + 1000
			
			local function check_timer()
				return time_global() > timer
			end
			
			local function release_item()
				alife():release(alife():object(id), true)
			end
			level.add_call(check_timer, release_item)
		end
        return true
    end
	-- сохранить оружие, возвращаемое из ящика
    if wm_slot_1_id == item_id or wm_slot_2_id == item_id then
		--' Тут надо уменьшить кондишн оружия
		item:set_condition(math.min((math.random(1)+1)/100,item:condition()))
		if isWeapon(item) then
			local timer = time_global() + 1000
			
			local function check_timer()
				return time_global() > timer
			end
			
			local function release_item()
				alife():release(alife():object(id), true)
			end
			level.add_call(check_timer, release_item)
		end
        return true
    end
	-- нельзя удалять активный предмет
	if item_id == active_item_id then
		--' Тут надо уменьшить кондишн оружия
		if npc:active_slot() ~= 3 then	-- кроме гранат
			item:set_condition(math.min((math.random(1)+1)/100,item:condition()))
		end
		return true
    end
    alife():release(alife():object(item:id()), true)
end

 

Дальше. Оружие случайно и, скажем, у ФН2000 редкость максимальная, а игрок ее подбирает с нпс раненого, да и еще в 100 кондишине! Это ж просто дырень! Да, у нпс с самого кордона могут быть фн2000, а у игрока нет. У игрока есть мозги, это и так уже огромное преимущество, а если еще и фн выдать так сходу? Жуть.

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

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
14 минут назад, ian98 сказал:

Я сделал так:

это для того, чтобы всё оружие удалялось? Достаточно 

if isWeapon(item) and active_item and id == active_item:id() then 

привести к такому виду:

if isWeapon(item) then 

 

По поводу выкидывания оружия при ранении, в файле state_lib.script в таблицах, содержащих -- wounded**** =  замените weapon = "drop"  на weapon = "none"


Дополнено 1 минуту спустя
17 минут назад, ian98 сказал:

Оружие случайно и, скажем, у ФН2000 редкость максимальная, а игрок ее подбирает с нпс раненого, да и еще в 100 кондишине!

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

  • Мастер! 1

В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

vader_33 И я. Сам любитель рпг, а в особенности роглайк. И там будет барахло. Гитары, гармошки, еда, бочки и канистры - пожалуйста. Собирай! Но халявные рпг или гаусски? Не)

  • Смех 1

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 все равно мой хомяк негодует)


В беге за рассветом приближаешь свой закат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

ian98 а если сделать несколько сложных квестов, например как в моде апокалипсис, когда ГГ брал артефакт сердце контролёра появлялись кровососы и контролёры. Аналогично можно и тебе сделать например в деревне новичков зайдет разговор о крутом пропавшем Сталкер, потом ГГ узнает у бармена про этого Сталкера, бармен говорит что обшивался Сталкер у свободы, а свобода говорит что пропал Сталкер в деревне кровососов, когда ГГ находит Сталкера, с него выпадает фн2000, одна единственная на всю игру, а с остальных нпси может выпадать простое оружие и/или части монстров, не знаю, может бред, но как то так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Alex Kireev Я не планирую пока пилить квесты, возможно только верну парочку вырезанных из оригинала. Более того, я полностью выпиливаю повторяющиеся квесты, сделав их одноразовыми, но с повышенным шансом получить в качестве награды хороший дроп. Самый топовый экзач или тот же фн2000 может выпасть уже сразу после зачистки АТП, а если ты прошаренный, то уже сразу после разборки с кабанами. Шанс на экзач сейчас примерно 0.5%(это если по квесту, выбить во фриплее его можно только через контракты.UPD Реальный шанс 0,006%, что мало, но шанс найти тот же экзач из трупа - 0.0000001%, а фн2000 вообще только крафтить или получать по заданию. Сейчас проверил) Из контрактов шанс достать - 0.03%) Этот шанс одинаков и для фнки, и для экзы. Да, если есть желание, то можно заабузить на сейвлодах. Но лично я не абузер и честно получаю свою награду, даже если это просто хлеб, и пытаюсь играть от того, что выпало. Особенно круто, когда в этот же момент нпс также играют от того, что им выпало, а вокруг в придачу кто-то спавнится. Из озуительных ситуаций, когда мы с петрухой, которому выпала экза и рпг-7, пошли на АТП к бандосам, а к ним на помощь пришли еще 5. Или свободовец-мастер с пмм, который пошел на вояк. Да и кровосос с повышенным здоровьем уже забегал в деревню к новичкам. Единственное с рандомными нпс, что они тупые и дохнут в аномалиях, но с этим позже посмотрю что-нибудь. Вроде бы гуляют по сети моды с умными сталкерами.

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

76561198152189716.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   1 пользователь онлайн