Как это не странно, оказалось не так уж и просто найти информацию по этому вопросу. Точней найти можно, но несколько не адекватную.
Скрипт, который нужно добавить в моба, чтобы за его убийство давался опыт.
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
functionPwntX_X()
local tag = Humanoid:findFirstChild("creator")-- метка убийцы от стандартного оружия
if tag ~= nilthen-- метка найдена
if tag.Value ~= nilthen-- значение получено
local Leaderstats = tag.Value:findFirstChild("leaderstats")
if Leaderstats ~= nilthen-- если убийца есть в таблице лидеров
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 ~= nilthen
local player = tag.Value
local bounty = 20
local leaderstats = player:WaitForChild("leaderstats")
-- получение денег за убийство игроков
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, т.е. переменные (числа или строки) которые касаются игроке
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 монеток.
Проверяем. Опыт даётся, денежки капают и крыса заново создаётся.
Соответственно можем клонировать крысу множество раз и.. просто добавить эти скрипты в любого другого НПС, подправив получаемые за его убийство деньги и опыт.
Как это работает, можно увидеть в многострадальной: