ROBLOX — Создание умный урон

Автор: | 6 февраля, 2022
Поделиться...

В продолжение серии «умной» игры был создан ещё один видео урок. Цель простая — расчёт наносимого и получаемого урона в зависимости от характеристик персонажа, его экипировки и и различных временных усилений.

Как видим, диаграмма не такая уж и сложная. Всего лишь надо сложить усиления и рассчитать их воздействие на Humanoid-а.

Так как в видео всё объяснялось, то тут я приведу использованные скрипты.

Начту с основного модуля:

local damage = {}


local function Attack(character) -- расчёт суммарного урона
	local ret = 0
	local hum = character:FindFirstChildOfClass("Humanoid")
	if hum then
		local at = hum.Parent:FindFirstChild("Attack")
		if at then
			local tmp = at:GetChildren()
			for a,b in pairs(tmp) do
				if b.ClassName == "IntValue" then
					ret = ret + b.Value
				end
			end
		end
	end
	warn("All Attack = ", ret)
	return ret
end


local function Shield(character) -- расчёт суммарной защиты
	local ret = 0
	local hum = character:FindFirstChildOfClass("Humanoid")
	if hum then
		local at = hum.Parent:FindFirstChild("Shield")
		if at then
			local tmp = at:GetChildren()
			for a,b in pairs(tmp) do
				if b.ClassName == "IntValue" then
					ret = ret + b.Value
				end
			end
		end
	end
	warn("All Shield = ", ret)
	return ret
end


function damage.Damage(_from, _to, _default) -- от кого, кому, сколько ПЕРСОНАЖИ	
	local dmg = _default
	if dmg == nil then
		dmg = Attack(_from)
	else
		warn("Def Attack: ",dmg)
	end
	
	local shl = Shield(_to)
	
	local res = dmg - shl
	if res < 1 then 
		res = 1
	end
	
	print("result = ", res)
	_to.Humanoid:TakeDamage(res)
end

return damage

Ничего сверхестественного в нём нет. Одна функция считает суммарную атаку, вторая расчитывает суммарную защиту, ну а третья собственно и наносит урон в виде их разницы.

Там же где надо воспользоваться данным модулем, мы его подключаем стандартным образом:

local myDamage = require(game.ReplicatedStorage.myDamage)	-- подключение модульного скрипта

После чего меняем стандартную строку нанесения урона на запрос из модуля:

		--- humanoid:TakeDamage(ATTACK_DAMAGE) -- !!!!! строка нанесения урона !!!!
		myDamage.Damage(script.Parent, humanoid.Parent)

Вот и всё использование. Простенько и.. со вкусом. 🙂

Разве что в персонаже (по соседству с Humanoid) должны быть папки Attack и Shield в которые и набрасываются расчётные бонусы. Например от брони, бижы, бафов и т.д. и т.п.

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

-- уменьшаем значение на 1 каждую секунду
-- по достижении нуля - уничтожаем переменную

local me = script.Parent

local val = me.Value

while val>0 do
	wait(1)
	me.Value = me.Value - 1
end 

me.Parent = nil

Поделиться...

ROBLOX — Создание умный урон: 2 комментария

  1. Максим

    Пж скажи а как сделать чтобы я стрелял из оружия и если попадал по игроку то менялся цвет прицела и обратно

    1. Admin Автор записи

      1. Если оружие (сервер) фиксирует попадание, то делай вызов клиента который стрелял через RemoteEvent
      2. При получении вызова меняй GUI прицела на нужный

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

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