Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- скрипты для пет сима
- 1 -- скрипт серверный делаем в serverscriptservice назовите его DataSave --
- local players = game:GetService("Players")
- local dataStoreService = game:GetService("DataStoreService")
- local dataStore = dataStoreService:GetDataStore("MyDataKey3223")
- local httpService = game:GetService("HttpService")
- local playerData = script.PlayerData
- local function SaveData(player)
- local data = {}
- for _, folder in pairs(player:GetChildren()) do
- if playerData:FindFirstChild(folder.Name) then
- if playerData[folder.Name]:GetAttribute("SaveChildren") == true then
- data[folder.Name] = {}
- if playerData[folder.Name]:GetAttribute("SaveChildrenValues") == true then
- for _, child in pairs(folder:GetChildren()) do
- if not child:GetAttribute("DoNotSaveValue") then
- table.insert(data[folder.Name], {child.Name, child.Value, child.ClassName})
- end
- end
- else
- for _, child in pairs(folder:GetChildren()) do
- if not child:GetAttribute("DoNotSaveValue") then
- table.insert(data[folder.Name], {child.Name, child.ClassName})
- end
- end
- end
- end
- end
- end
- local success, errorMsg = pcall(function()
- dataStore:SetAsync(player.UserId.."Key", data)
- end)
- if success then
- print("Saved Data")
- else
- warn(errorMsg)
- end
- end
- local function LoadData(player)
- for _, v in pairs(playerData:GetChildren()) do
- v:Clone().Parent = player
- end
- local folder = Instance.new("Folder")
- folder.Name = player.Name
- folder.Parent = workspace.Folder.PlayerPets
- local data
- local success, errorMsg = pcall(function()
- data = dataStore:GetAsync(player.UserId.."Key")
- end)
- if errorMsg then
- warn(errorMsg)
- player:Kick("Could not save data")
- end
- if data then
- for i, v in pairs(data) do
- if #v > 0 then
- for x, c in pairs(v) do
- local value
- if playerData:FindFirstChild(tostring(i)):FindFirstChild(c[1]) then
- value = player:FindFirstChild(tostring(i)):FindFirstChild(c[1])
- else
- if c[3] == nil then
- value = Instance.new(tostring(c[2]))
- else
- value = Instance.new(tostring(c[3]))
- end
- end
- value.Name = c[1]
- value.Value = c[2]
- value.Parent = player[tostring(i)]
- end
- end
- end
- end
- end
- local function PlayerRemoving(player)
- SaveData(player)
- end
- players.PlayerAdded:Connect(LoadData)
- players.PlayerRemoving:Connect(PlayerRemoving)
- game:BindToClose(function()
- for _, player in pairs(players:GetPlayers()) do
- coroutine.wrap(SaveData)(player)
- end
- end)
- 2 -- скрипт серверный делаем в serverscriptservice назовите его MainServer --
- local Players = game:GetService("Players")
- local httpService = game:GetService("HttpService")
- local mainFolder_Workspace = workspace.Folder
- local playerPets = mainFolder_Workspace.PlayerPets
- local drops = mainFolder_Workspace.Drops
- local coinDrops = {}
- Players.PlayerAdded:Connect(function(player)
- if not coinDrops[player] then
- coinDrops[player] = {}
- end
- player.CharacterAdded:Connect(function(characted)
- task.wait(1)
- for _, door in pairs(workspace.Folder.Doors:GetChildren()) do
- if player.Areas:FindFirstChild(door.Name) then
- game.ReplicatedStorage.Remotes.RemoveDoor:FireClient(player, door)
- end
- end
- game.ReplicatedStorage.Remotes.LoadSavedPets:FireClient(player)
- if player.Values.EquippedPet.Value ~= "None" then
- game.ReplicatedStorage.Remotes.EquipSavedPet:FireClient(player, player.Values.EquippedPet.Value)
- end
- end)
- end)
- Players.PlayerRemoving:Connect(function(player)
- if playerPets:FindFirstChild(player.Name) then
- playerPets:FindFirstChild(player.Name):Destroy()
- end
- end)
- game.ReplicatedStorage.Remotes.PurchaseDoor.OnServerInvoke = function(player, door)
- local serverDoor = workspace.Folder.Doors:FindFirstChild(door.Name)
- if serverDoor then
- if player.leaderstats.Coins.Value >= serverDoor.Price.Value then
- if not player.Areas:FindFirstChild(serverDoor.Name) then
- player.leaderstats.Coins.Value -= serverDoor.Price.Value
- local doorVal = Instance.new("StringValue")
- doorVal.Name = serverDoor.Name
- doorVal.Parent = player.Areas
- return true
- end
- else
- return false
- end
- end
- end
- game.ReplicatedStorage.Remotes.StopDamaging.OnServerEvent:Connect(function(player)
- player.Values.SentTo.Value = nil
- local currentPlayerPets = playerPets[player.Name]
- if #currentPlayerPets:GetChildren() > 0 then
- local pet = currentPlayerPets:FindFirstChildOfClass("Model")
- pet.Attack.Value = nil
- end
- end)
- game.ReplicatedStorage.Remotes.EquipPet.OnServerEvent:Connect(function(player, petName)
- if player.Pets:FindFirstChild(petName) then
- local petModel = game.ReplicatedStorage.Pets:FindFirstChild(petName):Clone()
- petModel.Parent = workspace.Folder.PlayerPets:FindFirstChild(player.Name)
- player.Values.Damage.Value = petModel.Damage.Value
- player.Values.EquippedPet.Value = petName
- end
- end)
- game.ReplicatedStorage.Remotes.UnequipPets.OnServerEvent:Connect(function(player)
- workspace.Folder.PlayerPets:FindFirstChild(player.Name):ClearAllChildren()
- player.Values.Damage.Value = 0
- end)
- game.ReplicatedStorage.Remotes.AwardOnDestroy.OnServerInvoke = function(player, dropName, objectCF)
- local drop = nil
- local dropArea = nil
- for _, area in pairs(mainFolder_Workspace.Drops:GetChildren()) do
- for _, v in pairs(area:GetChildren()) do
- if v.Name == dropName then
- dropArea = area.Name
- drop = v
- break
- end
- end
- end
- if dropArea then
- if player.Areas:FindFirstChild(dropArea) then
- local coinAward = drop.CoinAward.Value
- local guids = {}
- for i = 1, 5 do
- local guid = httpService:GenerateGUID(false)
- table.insert(guids, guid)
- end
- for i, v in pairs(guids) do
- coinDrops[player][v] = {}
- coinDrops[player][v]["Award"] = math.round(coinAward/5)
- end
- game.ReplicatedStorage.Remotes.DropCoins:FireClient(player, objectCF, guids)
- return true
- end
- end
- end
- game.ReplicatedStorage.Remotes.GiveCoins.OnServerEvent:Connect(function(player, guid)
- if coinDrops[player][guid] then
- player.leaderstats.Coins.Value += (coinDrops[player][guid]["Award"]) * player.Values["CoinMultiplier"].Value
- coinDrops[player][guid] = nil
- end
- end)
- for _, drop in pairs(drops:GetDescendants()) do
- if drop:IsA("Model") then
- drop.Health.Value = drop.MaxHealth.Value
- drop.ClickDetector.MouseClick:Connect(function(player)
- local currentPlayerPets = playerPets[player.Name]
- if #currentPlayerPets:GetChildren() > 0 then
- if player.Areas:FindFirstChild(drop.Parent.Name) then
- local pet = currentPlayerPets:FindFirstChildOfClass("Model")
- if player.Values.SentTo.Value == nil then
- player.Values.SentTo.Value = drop
- game.ReplicatedStorage.Remotes.ToggleBillboard:FireClient(player, drop, true)
- pet.Attack.Value = player.Values.SentTo.Value
- elseif player.Values.SentTo.Value == drop then
- player.Values.SentTo.Value = nil
- game.ReplicatedStorage.Remotes.ToggleBillboard:FireClient(player, drop, false)
- pet.Attack.Value = player.Values.SentTo.Value
- elseif player.Values.SentTo.Value ~= nil and player.Values.SentTo.Value ~= drop then
- player.Values.SentTo.Value = drop
- game.ReplicatedStorage.Remotes.ToggleBillboard:FireClient(player, drop, true)
- pet.Attack.Value = player.Values.SentTo.Value
- end
- end
- end
- end)
- end
- end
- for _, door in pairs(workspace.Folder.Doors:GetChildren()) do
- door.ProximityPart.ProximityPrompt.Triggered:Connect(function(player)
- if not player.Areas:FindFirstChild(door.Name) then
- game.ReplicatedStorage.Remotes.PromptPurchaseDoor:FireClient(player, door)
- end
- end)
- end
- 3 -- скрипт серверный делаем в serverscriptservice назовите его EggsServer --
- local replicatedStorage = game:GetService("ReplicatedStorage")
- local players = game:GetService("Players")
- local remotes = replicatedStorage.Remotes
- local eggs = workspace.Folder.Eggs
- local playerHatchDebounce = {}
- local function chooseRandomPet(petTable)
- local chosenPet = nil
- local randomNumber = math.random(1, 100)
- local weight = 0
- for i, v in pairs(petTable) do
- weight += v.chance
- if weight >= randomNumber then
- chosenPet = v
- break
- end
- end
- return chosenPet
- end
- for _, egg in pairs(eggs:GetChildren()) do
- egg.ProximityPrompt.Triggered:Connect(function(player)
- local eggData = require(egg.Data)
- local price = eggData.eggPrice
- local currency = eggData.eggCurrency
- if player.leaderstats.Coins.Value >= price then
- if not playerHatchDebounce[player] then
- playerHatchDebounce[player] = true
- local chosenPet = chooseRandomPet(eggData.eggPets)
- player.leaderstats.Coins.Value -= price
- remotes.HatchEgg:FireClient(player, egg.Name, chosenPet)
- local val = Instance.new("StringValue")
- val.Name = (chosenPet.petName)
- val.Parent = player.Pets
- task.wait(6)
- playerHatchDebounce[player] = false
- end
- end
- end)
- players.PlayerRemoving:Connect(function(player)
- if playerHatchDebounce[player] then
- playerHatchDebounce[player] = nil
- end
- end)
- end
- 4 -- скрипт серверный делаем в starterplayer starterplayerScripts назовите его EggsClient --
- local runService = game:GetService("RunService")
- local replicatedStorage = game:GetService("ReplicatedStorage")
- local players = game:GetService("Players")
- local tweenService = game:GetService("TweenService")
- local eggs = workspace:WaitForChild("Folder"):WaitForChild("Eggs")
- local remotes = replicatedStorage:WaitForChild("Remotes")
- local pets = replicatedStorage:WaitForChild("Pets")
- local player = players.LocalPlayer
- local eggSystemSS = player:WaitForChild("PlayerGui"):WaitForChild("EggSystem")
- local eggViewport = eggSystemSS:WaitForChild("EggViewport")
- local mainSS = player:WaitForChild("PlayerGui"):WaitForChild("MainSS")
- local inventory = mainSS:WaitForChild("PetInventory")
- local scrollingFrame = inventory:WaitForChild("ScrollingFrame")
- local template = scrollingFrame:WaitForChild("Template")
- local module3D = require(replicatedStorage:WaitForChild("Module3D"))
- local function onTemplateClick(clickedTemplate)
- if clickedTemplate.Equipped.Value == false then
- for _, v in pairs(scrollingFrame:GetChildren()) do
- if v:IsA("GuiButton") then
- v.Equipped.Value = false
- tweenService:Create(v, TweenInfo.new(0.4), {BackgroundColor3 = Color3.fromRGB(170, 255, 255)}):Play()
- end
- end
- clickedTemplate.Equipped.Value = true
- tweenService:Create(clickedTemplate, TweenInfo.new(0.4), {BackgroundColor3 = Color3.fromRGB(170, 255, 127)}):Play()
- remotes.UnequipPets:FireServer()
- remotes.EquipPet:FireServer(clickedTemplate.Name)
- else
- for _, v in pairs(scrollingFrame:GetChildren()) do
- if v:IsA("GuiButton") then
- v.Equipped.Value = false
- tweenService:Create(v, TweenInfo.new(0.4), {BackgroundColor3 = Color3.fromRGB(170, 255, 255)}):Play()
- end
- end
- remotes.UnequipPets:FireServer()
- end
- end
- local function createTemplate(petName)
- local newTemplate = template:Clone()
- newTemplate.Name = petName
- newTemplate.Visible = true
- newTemplate.Parent = scrollingFrame
- local petModel3D = module3D:Attach3D(newTemplate:WaitForChild("Viewport"), pets:FindFirstChild(petName):Clone())
- petModel3D:SetDepthMultiplier(2)
- petModel3D.Camera.FieldOfView = 5
- petModel3D.Visible = true
- runService.RenderStepped:Connect(function()
- petModel3D:SetCFrame(CFrame.Angles(0, tick() % (math.pi * 2), 0) * CFrame.Angles(math.rad(-10), 0, 0))
- end)
- newTemplate.MouseButton1Click:Connect(function()
- onTemplateClick(newTemplate)
- end)
- end
- local function hatchEgg(eggName, chosenPet)
- for _, v in pairs(player.PlayerGui:GetChildren()) do
- if v:IsA("ScreenGui") and v ~= eggSystemSS then
- v.Enabled = false
- end
- end
- eggSystemSS.Enabled = true
- for _, v in pairs(eggViewport:GetChildren()) do
- if v:IsA("Camera") or v:IsA("BasePart") or v:IsA("Model") then
- v:Destroy()
- end
- end
- eggViewport.Size = UDim2.fromScale(0, 0)
- local eggMesh = eggs:FindFirstChild(eggName):Clone()
- eggMesh.Parent = eggViewport
- eggMesh.CFrame = CFrame.new(0, 0, 0)
- local camera = Instance.new("Camera")
- camera.Parent = eggViewport
- camera.CFrame = CFrame.new(0, 0, 4)
- eggViewport.CurrentCamera = camera
- tweenService:Create(eggViewport, TweenInfo.new(0.7), {Size = UDim2.new(0, 341, 0, 401)}):Play()
- task.wait(0.7)
- for i = 1, 4 do
- tweenService:Create(eggViewport, TweenInfo.new(0.3, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {Rotation = 20}):Play()
- task.wait(0.3)
- tweenService:Create(eggViewport, TweenInfo.new(0.3, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {Rotation = -20}):Play()
- task.wait(0.3)
- end
- tweenService:Create(eggViewport, TweenInfo.new(0.3, Enum.EasingStyle.Sine, Enum.EasingDirection.Out), {Rotation = 0}):Play()
- task.wait(0.3)
- tweenService:Create(eggViewport, TweenInfo.new(0.7), {Size = UDim2.fromScale(0, 0)}):Play()
- task.wait(0.3)
- for _, v in pairs(eggViewport:GetChildren()) do
- if v:IsA("Camera") or v:IsA("BasePart") or v:IsA("Model") then
- v:Destroy()
- end
- end
- local petModel = pets:FindFirstChild(chosenPet.petName):Clone()
- petModel:PivotTo(CFrame.new(0, 0, 0))
- petModel.Parent = eggViewport
- local cameraPet = Instance.new("Camera")
- cameraPet.Parent = eggViewport
- cameraPet.CFrame = CFrame.new(0, 0, -3.3) * CFrame.Angles(0, math.rad(180), 0)
- eggViewport.CurrentCamera = cameraPet
- tweenService:Create(eggViewport, TweenInfo.new(0.7), {Size = UDim2.new(0, 341, 0, 401)}):Play()
- eggViewport.NameLabel.Text = chosenPet.petName
- eggViewport.NameLabel.Visible = true
- eggViewport.RarityLabel.Text = chosenPet.Rarity
- eggViewport.RarityLabel.Visible = true
- task.wait(1.5)
- tweenService:Create(eggViewport, TweenInfo.new(0.3), {Size = UDim2.fromScale(0, 0)}):Play()
- task.wait(0.3)
- eggViewport.NameLabel.Visible = false
- eggViewport.RarityLabel.Visible = false
- createTemplate(chosenPet.petName)
- for _, v in pairs(player:WaitForChild("PlayerGui"):GetChildren()) do
- if v:IsA("ScreenGui") and v ~= eggSystemSS then
- v.Enabled = true
- end
- end
- end
- remotes:WaitForChild("HatchEgg").OnClientEvent:Connect(hatchEgg)
- remotes:WaitForChild("EquipSavedPet").OnClientEvent:Connect(function(petName)
- onTemplateClick(scrollingFrame:FindFirstChild(petName))
- end)
- remotes:WaitForChild("LoadSavedPets").OnClientEvent:Connect(function()
- for _, v in pairs(player.Pets:GetChildren()) do
- coroutine.wrap(createTemplate)(v.Name)
- end
- end)
- 5 -- скрипт серверный делаем в starterplayer starterplayerScripts назовите его MainClient --
- local players = game:GetService("Players")
- local tweenService = game:GetService("TweenService")
- local player = players.LocalPlayer
- local replicatedStorage = game:GetService("ReplicatedStorage")
- local runService = game:GetService("RunService")
- local player = game.Players.LocalPlayer
- local remotes = replicatedStorage:WaitForChild("Remotes")
- local playerGui = player:WaitForChild("PlayerGui")
- local mainSS = playerGui:WaitForChild("MainSS")
- local doorsPurchaseUI = mainSS:WaitForChild("PurchaseArea")
- local despawnedDrops = replicatedStorage:WaitForChild("DespawnedDrops")
- local currencyDropper = require(script.Parent:WaitForChild("CurrencyDropper"))
- local areaBuyBtnConnection
- local db = {}
- local distance = 12
- local function destroyDrop(drop)
- local result = remotes.AwardOnDestroy:InvokeServer(drop.Name, drop.PrimaryPart.CFrame)
- task.wait(0.5)
- local oldParent = drop.Parent
- drop.Parent = despawnedDrops
- task.wait(1)
- drop.Health.Value = drop.MaxHealth.Value
- drop.HealthDisplay.Enabled = false
- drop.Parent = oldParent
- end
- remotes.DropCoins.OnClientEvent:Connect(function(cf, guids)
- currencyDropper.DropCurrency(replicatedStorage.Assets.CurrencyDrops.CoinDrop, 5, cf + Vector3.new(0, 4, 0), guids)
- end)
- remotes.PromptPurchaseDoor.OnClientEvent:Connect(function(door)
- doorsPurchaseUI.Visible = true
- doorsPurchaseUI.PurchaseText.Text = "Would you like to purchase this area for"..door.Price.Value.." Coins"
- areaBuyBtnConnection = doorsPurchaseUI.Buy.MouseButton1Click:Connect(function()
- local result = remotes.PurchaseDoor:InvokeServer(door)
- if result == true then
- door:Destroy()
- end
- areaBuyBtnConnection:Disconnect()
- doorsPurchaseUI.Visible = false
- end)
- end)
- doorsPurchaseUI.Close.MouseButton1Click:Connect(function()
- doorsPurchaseUI.Visible = false
- end)
- remotes.ToggleBillboard.OnClientEvent:Connect(function(drop, bool)
- drop.HealthDisplay.Enabled = bool
- end)
- remotes.RemoveDoor.OnClientEvent:Connect(function(door)
- door:Destroy()
- end)
- task.spawn(function()
- while task.wait(1) do
- if player.Values.SentTo.Value ~= nil then
- local damage = player.Values.Damage.Value
- player.Values.SentTo.Value.Health.Value = math.max(player.Values.SentTo.Value.Health.Value - damage, 0)
- if player.Values.SentTo.Value.Health.Value == 0 then
- remotes.StopDamaging:FireServer()
- destroyDrop(player.Values.SentTo.Value)
- end
- end
- end
- end)
- runService.Heartbeat:Connect(function()
- for _, drop in pairs(workspace:WaitForChild("Folder"):WaitForChild("Drops"):GetDescendants()) do
- if drop:IsA("Model") then
- local healthDisplay = drop:FindFirstChild("HealthDisplay")
- local bar = healthDisplay.Background.Bar
- local healthDisplayText = healthDisplay.Background.HealthDisplayLabel
- healthDisplayText.Text = drop.Health.Value
- bar:TweenSize(UDim2.fromScale(drop.Health.Value/drop.MaxHealth.Value, 1), Enum.EasingDirection.Out, Enum.EasingStyle.Sine, 0.3)
- end
- end
- end)
- runService.RenderStepped:Connect(function()
- local character = player.Character or player.CharacterAdded:Wait()
- if character then
- for _, v in pairs(workspace:WaitForChild("Folder"):WaitForChild("CurrencyDrops"):GetChildren()) do
- if (v.Position - character.PrimaryPart.Position).Magnitude <= distance and v:FindFirstChild("CanCollect") then
- v.Anchored = true
- tweenService:Create(v, TweenInfo.new(0.2), {CFrame = character.HumanoidRootPart.CFrame}):Play()
- if (v.Position - character.PrimaryPart.Position).Magnitude <= 3 then
- if not db[v] then
- db[v] = true
- remotes.GiveCoins:FireServer(v.ID.Value)
- task.wait(5)
- db[v] = nil
- end
- v:Destroy()
- end
- end
- end
- end
- end)
- 6 -- скрипт серверный делаем в starterplayer starterplayerScripts назовите его CurrencyDropper --
- local module = {}
- local radius = 5
- function module.DropCurrency(object, amount, cf, guids)
- for i = 1, amount do
- task.spawn(function()
- local drop = object:Clone()
- drop.Parent = workspace.Folder.CurrencyDrops
- local id = Instance.new("StringValue")
- id.Value = guids[i]
- id.Name = "ID"
- id.Parent = drop
- local angle = i * (math.pi * 2 / amount)
- local x = math.cos(angle) * radius
- local z = math.sin(angle) * radius
- local position = (cf * CFrame.new(x, 0, z)).Position
- local direction = position - cf.Position
- local force = direction + Vector3.new(math.random(-2, 2), 5, math.random(-2, 2))
- drop.Position = cf.Position
- drop.AssemblyLinearVelocity = force * drop.AssemblyMass
- task.wait(1)
- local canCollect = Instance.new("StringValue")
- canCollect.Name = "CanCollect"
- canCollect.Parent = drop
- end)
- end
- end
- return module
- 7 -- делаем скрипт в Portal1 --
- local ProximityPrompt = script.Parent
- ProximityPrompt.Triggered:Connect(function(player)
- player.Character.HumanoidRootPart.Position = workspace.Teleport.World2.Position
- end)
- 8 -- делаем скипт в Portal --
- local ProximityPrompt = script.Parent
- ProximityPrompt.Triggered:Connect(function(player)
- player.Character.HumanoidRootPart.Position = workspace.Teleport.World1.Position
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement