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

Автор: | 17 января, 2020
Поделиться...

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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)
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)
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- получение денег за убийство игроков
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)
-- получение денег за убийство игроков 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)
	-- получение денег за убийство игроков
	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, то оно должно быть создано корректно. Поэтому весь скрипт тут:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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 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 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)

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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)
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)
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


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

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

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