Hasli4

RBLX. WeaponHandler

May 15th, 2025 (edited)
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.18 KB | None | 0 0
  1. -- Этот скрипт управляет снарядами на стороне сервера
  2.  
  3. local Players = game:GetService("Players")
  4. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  5.  
  6.  
  7. local launchProjectile = ReplicatedStorage:WaitForChild("LaunchProjectile")
  8. local destroyProjectile = ReplicatedStorage:WaitForChild("DestroyProjectile")
  9. local destroyEnemy = ReplicatedStorage:WaitForChild("DestroyEnemy")
  10. local pingChecker = ReplicatedStorage:WaitForChild("Ping")
  11.  
  12. -- Ссылка на снаряд в ReplicatedStorage
  13. local projectileTemplate = ReplicatedStorage.Projectile
  14.  
  15. local currentPing = {}
  16.  
  17. launchProjectile.OnServerInvoke = function(player, position, velocity)
  18.     local projectile = projectileTemplate:Clone()
  19.     projectile.Velocity = velocity
  20.  
  21.     local ping = 0
  22.     if currentPing[player] then
  23.         ping = currentPing[player]
  24.     end
  25.     local offset = ping * velocity * 1.5
  26.     projectile.Position = position + offset
  27.     local mass = projectile:GetMass()
  28.     projectile.VectorForce.Force = Vector3.new(0, 1, 0) * mass * game.Workspace.Gravity
  29.     projectile.Parent = game.Workspace
  30.     projectile:SetNetworkOwner(nil)
  31.     return projectile
  32. end
  33.  
  34. local function onDestroyProjectile(player, projectile)
  35.     projectile:Destroy()
  36. end
  37.  
  38. local function onDestroyEnemy(player, enemy)
  39.     enemy:Destroy()
  40.     -- Добавляем очки за уничтожение врагов в enemyStat лидерборда
  41.     local enemyStat = player.leaderstats:WaitForChild("Score")
  42.     enemyStat.Value = enemyStat.Value + 1
  43. end
  44.  
  45. -- Проверяем пинг игрока
  46. local function onPlayerAdded(player)
  47.     while player and wait(3) do
  48.         local start = tick()
  49.         pingChecker:InvokeClient(player)
  50.         local ping = tick() - start
  51.         currentPing[player] = ping
  52.     end
  53. end
  54.  
  55. -- Функция убирает игрока из таблицы проверки пинга
  56. local function onPlayerRemoving(player)
  57.     currentPing[player] = nil
  58. end
  59.  
  60. -- Связываем события и функции
  61. destroyProjectile.OnServerEvent:Connect(onDestroyProjectile)
  62. destroyEnemy.OnServerEvent:Connect(onDestroyEnemy)
  63. Players.PlayerAdded:Connect(onPlayerAdded)
  64. Players.PlayerRemoving:Connect(onPlayerRemoving)
  65.  
Add Comment
Please, Sign In to add comment