ROBLOX — Опыт за убийство — XP from kill

Автор: | 17 января, 2020

Как это не странно, оказалось не так уж и просто найти информацию по этому вопросу. Точней найти можно, но несколько не адекватную.

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

local DataStore2 = require(1936396537) -- подключаем хранилище
local giveXP = 1 -- сколько опыта даём
local moneyMin = 0 -- миниму и максимум 
local moneyMax = 3 -- получаемых денег


--On lines 10 and 29 change Gold to the name of your money and Exp to the stat you wish to upgrade.
local Humanoid = script.Parent.Humanoid -- Change Enemy to the name of your Monsters Humaniod
function PwntX_X() 
local tag = Humanoid:findFirstChild("creator") -- метка убийцы от стандартного оружия
	if tag ~= nil then -- метка найдена
		if tag.Value ~= nil then -- значение получено
			local Leaderstats = tag.Value:findFirstChild("leaderstats") 
			if Leaderstats ~= nil then -- если убийца есть в таблице лидеров
				local xpStore = DataStore2("xp", tag.value) -- указываем хранилище игрока
				local moneyStore = DataStore2("money", tag.value)
				xpStore:Increment(giveXP) -- сколько добавляем опыта
				moneyStore:Increment(math.random(moneyMin,moneyMax)) -- случайное число монет

				-- Leaderstats.XP.Value = Leaderstats.XP.Value + 7 --How Much XP Given
				-- wait(0.1)
				-- script:remove()
			end 
		end 
	end 
end 
Humanoid.Died:connect(PwntX_X)

Часть скрипта, которую нужно добавить в подключение игроков, чтобы давался опыт за их убийство. В моём случае это добавил в конец SaveLoadScript, что находится в ServerScriptService:

	-- получение денег за убийство игроков
	player.CharacterAdded:Connect(function(character)
		character.Humanoid.Died:Connect(function()
			local tag=character.Humanoid:FindFirstChild("creator")
			if tag ~= nil then
				local player = tag.Value
				local bounty = 20
				
				local leaderstats = player:WaitForChild("leaderstats")
				leaderstats.Money.Value = leaderstats.Money.Value + bounty
			end
		end)
	end)

Естественно, раз тут ссылки на Leaderstats, то оно должно быть создано корректно. Поэтому весь скрипт тут:

local Players = game:GetService("Players") -- берём ссылку на список игроков
local ServerScriptService = game:GetService("ServerScriptService") -- берём ссылку на сервис серверных скриптов

-- local DataStore2 = require(ServerScriptService.DataStore2)
local DataStore2 = require(1936396537)

-- Комбинируй все ключи которые есть для хранилища DATA, т.е. переменные (числа или строки) которые касаются игроке
DataStore2.Combine("DATA","points","money","level","xp") -- ..., 
DataStore2.Combine("DATA","X","Y","posX","posX") -- можно и так добавлять - в то же самое хранилище!!!

Players.PlayerAdded:Connect(function(player) -- объявляем функицю подключения игрока
	local pointsStore = DataStore2("points", player) -- создаём ссылку на хранилище очков
	local moneyStore = DataStore2("money", player) -- создаём ссылку на хранилище денег и т.д. и т.п.
	local levelStore = DataStore2("level",player)
	local xpStore = DataStore2("xp",player)
	
	local leaderstats = Instance.new("Folder") -- создаём таблицу лидеров
	leaderstats.Name = "leaderstats"

	local level= Instance.new("NumberValue")
	level.Name = "Level"
	level.Value = levelStore:Get(1)
	
	local xp = Instance.new("NumberValue")
	xp.Name = "XP"
	xp.Value = xpStore:Get(0)
	
	local points= Instance.new("NumberValue") -- созадём локальную переменную очков
	points.Name = "Points" -- задаём ей имя
	points.Value = pointsStore:Get(0) -- получаем значение из хранилища, 0 это значение по умолчанию для новых игроков
	
	local money= Instance.new("NumberValue") -- создаём локальную переменную для денег
	money.Name = "Money" -- задаём ей имя
	money.Value = moneyStore:Get(0) --  получаем значение из хранилища, 0 это значение по умолчанию для новых игроков
	
	points.Parent = leaderstats	-- указываем кто у кого родителем выступает	
	money.Parent = leaderstats
	level.Parent = leaderstats
	xp.Parent = leaderstats
	
	leaderstats.Parent = player
	
	-- для leaderstats обязательны!!!
	levelStore:OnUpdate(function(newLevel)
		level.Value = newLevel
	end)
	xpStore:OnUpdate(function(newXP)
		xp.Value = newXP
	end)
	pointsStore:OnUpdate(function(newPoints) -- функция запускается каждый раз при изменнении значения в хранилище
		points.Value = newPoints
	end)	
	moneyStore:OnUpdate(function(newMoney) -- функция запускается каждый раз при изменнении значения в хранилище
		money.Value = newMoney
	end)
	
	
	-- получение денег за убийство игроков
	player.CharacterAdded:Connect(function(character)
		character.Humanoid.Died:Connect(function()
			local tag=character.Humanoid:FindFirstChild("creator")
			if tag ~= nil then
				local player = tag.Value
				local bounty = 20
				
				local leaderstats = player:WaitForChild("leaderstats")
				leaderstats.Money.Value = leaderstats.Money.Value + bounty
			end
		end)
	end)
		
end)

Ну и скрипт на респавн моба. Тоже можно просто добавить в моба:

local humanoid = script.Parent:WaitForChild("Humanoid") -- находим моба
local backup = script.Parent:clone() -- создаём его клон

humanoid.Died:connect(function ()
	wait(5) -- ждём немного, чтобы насладиться смертью
	backup.Parent = workspace -- привязываем копию к месту
	if script.Parent then
		script.Parent:Destroy() -- уничтожаем оригинал
	end
end)

Как видим, просто добавил пару скриптов в свою крысу. Теперь при её убийстве даётся 1 опыта и от 0 до 3 монеток.

Проверяем. Опыт даётся, денежки капают и крыса заново создаётся.

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

Как это работает, можно увидеть в многострадальной:

https://www.roblox.com/games/4587789852/NecroWorld

Total Page Visits: 2213 - Today Page Visits: 7

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

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