ROBLOX — TakeDamage and GiveDamage — нанести и получить повреждения

Автор: | 2 мая, 2020

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

Пришлось придумать собственную реализацию данного события.

Как это не странно, но получилось довольно таки компактно. Один модульный скрипт, в котором обсчитывается и нанесённый урон и получаемый.

local Damage = {} -- объявление модуля

function Damage:Take(hum,damage) -- функция нанесения повреждений
	damage=damage*1.5	-- можно использовать все модификаторы по нанесению урона текущим объектом
	-- print("Humanoid:",hum.Parent.Name," Take:",damage)	
	Damage:Give(hum,damage) -- переходим на получение повреждений
end

function Damage:Give(hum,damage) -- функция получения повреждений
	damage=damage/2		-- можно обсчитать все модификаторы получаемого урона
	-- print("Humanoid:",hum.Parent.Name," Give:",damage)
	hum:TakeDamage(damage) -- собственно нанесение урона гуманоиду
end

return Damage

Вот такой небольшой скрипт решает поставленную мной задачу. Теперь, нужно использовать исключительно его вместо стандартного TakeDamage(). Делается это очень просто:

local Damage=require(script.Parent.Damage) -- подключение модуля

wait(5)
print("Start")
hum = game.Workspace.GAVsi115.Humanoid

hum.HealthChanged:Connect(function(newHealth) -- это пример функции для отслеживания текущего здоровья
	if newHealth < 1 then -- типа не должен умирать :)
		wait() -- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		hum.Health = 1
		print(hum.Parent.Name .. " saved from death!")
	end
end)

-- из-за малейшей задержки на сервере (а это легко может произойти), эта функция успеет сработать
hum.Died:Connect(function() -- функция наличия смерти
	print("!!!!!!!!! Die !!!!!!!!!!!")
end)

while true do
	wait(0.3)
	-- hum:TakeDamage(11) -- стандартное нанесение урона
	Damage:Take(hum,11) -- модернизированное нанесение урона
	print("Health=",hum.Health)
end

Как видим — достаточно добавить строчку подключения модуля и слегка изменить строку о нанесении урона.

Главная проблема этого метода, что надо найти и изменить все стандартные варианты нанесения урона.

Total Page Visits: 1808 - Today Page Visits: 1

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *