Anukun_Lucifer

TreeChopServer

Sep 5th, 2025
639
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.70 KB | Source Code | 0 0
  1. local treeChopRequestRemote = game.ReplicatedStorage:WaitForChild("TreeChopRequest")
  2. local workspace = game:GetService("Workspace")
  3. local WoodsFolder = workspace:WaitForChild("Woods")
  4. local treeZone = workspace:FindFirstChild("TreeZone")
  5.  
  6. local treeHitCounts , treeWoodCounts , playerCooldown = {}, {}, {}
  7.  
  8. local CHOP_COOLDOWN = 0.5
  9.  
  10. local function getTree()
  11.     local trees = {}
  12.     if treeZone then
  13.         for _, object in treeZone:GetChildren() do
  14.             if object:IsA("Model") and object.Name == "TREE" then
  15.                 trees[#trees+1] = object
  16.             end
  17.         end
  18.     end
  19.     return trees
  20. end
  21.  
  22. local function tweenFall(treeModel)
  23.     local playedTween = false
  24.     for _ , part in treeModel:GetChildren() do
  25.         if part:IsA("BasePart") and not playedTween then
  26.             local tweenService = game:GetService("TweenService")
  27.             local tweenCFrame = part.CFrame * CFrame.Angles(math.rad(90),0,0) * CFrame.new(0, 0, 10)
  28.             local tween = tweenService:Create(part, TweenInfo.new(1), {CFrame = tweenCFrame})
  29.             tween:Play()
  30.             playedTween = true
  31.            
  32.             local treeFallSound = treeModel:FindFirstChild("TreeFallSound")
  33.             if treeFallSound then
  34.                 treeFallSound:Play()
  35.             end
  36.             break
  37.         end
  38.     end
  39. end
  40.  
  41. local function spawnWoods(treeModel, position)
  42.     if treeWoodCounts[treeModel] == "done" then return end
  43.     treeWoodCounts[treeModel] = treeWoodCounts[treeModel] or 0
  44.     local woodsTospawn = math.min(3 - treeWoodCounts[treeModel], 3)
  45.     if woodsTospawn <= 0 then
  46.         treeWoodCounts[treeModel] = "done"
  47.     return
  48.     end
  49.     for i = 1, woodsTospawn do
  50.         local woodPart = Instance.new("Part")
  51.         woodPart.Name = "Wood"
  52.         woodPart.Size = Vector3.new(3.5,1.5,1.5)
  53.         woodPart.Shape = Enum.PartType.Cylinder
  54.         woodPart.Position = position + Vector3.new(0, i ,0)
  55.         woodPart.Parent = WoodsFolder
  56.         woodPart.Material = Enum.Material.Wood
  57.         woodPart.BrickColor = BrickColor.new("Brown")
  58.         woodPart.Anchored = false
  59.         woodPart.CanCollide = true
  60.         woodPart.Transparency = 0
  61.         treeWoodCounts[treeModel] = treeWoodCounts[treeModel] + 1
  62.     end
  63.     if treeWoodCounts[treeModel] >= 3 then
  64.         treeWoodCounts[treeModel] = "done"
  65.     end
  66. end
  67.  
  68. treeChopRequestRemote.OnServerEvent:Connect(function(player , damagePart)
  69.     local currentTime = os.clock()
  70.     if playerCooldown[player] and currentTime - playerCooldown[player] < CHOP_COOLDOWN then return end
  71.     playerCooldown[player] = currentTime
  72.    
  73.     local hitTreeModel
  74.     for _ , treeModel in getTree() do
  75.         for _, treePart in treeModel:GetChildren() do
  76.             if treePart:IsA("BasePart") and (damagePart.Position - treePart.Position).Magnitude <(damagePart.Size.Magnitude + treePart.Size.Magnitude) /2 then
  77.                 hitTreeModel = treeModel
  78.                 break
  79.             end
  80.         end
  81.         if hitTreeModel then break end
  82.     end
  83.     if not hitTreeModel or treeWoodCounts[hitTreeModel] == "done" then return end
  84.    
  85.     local hitSound = hitTreeModel:FindFirstChild("HitSound")
  86.     if hitSound and hitSound:isA("Sound") then
  87.         hitSound:Play()
  88.     end
  89.    
  90.     for _, treePart in hitTreeModel:GetChildren() do
  91.         if treePart:IsA("BasePart") then
  92.             local OriginalCFrame = treePart.CFrame
  93.             treePart.CFrame = OriginalCFrame* CFrame.new(0,0.5,0)
  94.             task.wait(0.5)
  95.             treePart.CFrame = OriginalCFrame
  96.         end
  97.     end
  98.    
  99.     local playerTool = player.Character and player.Character:FindFirstChildOfClass("Tool")
  100.     local slashPerTimeValue = playerTool and playerTool:FindFirstChild("SlashPerTime")
  101.     local maxSlashPerTime = slashPerTimeValue and slashPerTimeValue.Value or 3
  102.    
  103.     treeHitCounts[hitTreeModel] = (treeHitCounts[hitTreeModel] or 0) + 1
  104.     if treeHitCounts[hitTreeModel] >= maxSlashPerTime then
  105.         tweenFall(hitTreeModel)
  106.         spawnWoods(hitTreeModel ,hitTreeModel:GetPivot().Position)
  107.         task.wait(1)
  108.             hitTreeModel:Destroy()
  109.         treeHitCounts[hitTreeModel] , treeWoodCounts[hitTreeModel] = nil, nil
  110.     end
  111. end)
Tags: Roblox
Advertisement
Add Comment
Please, Sign In to add comment