Как это не странно, оказалось не так уж и просто найти информацию по этому вопросу. Точней найти можно, но несколько не адекватную.
Скрипт, который нужно добавить в моба, чтобы за его убийство давался опыт.
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