Hasli4

RBLX. WeaponScript

May 15th, 2025 (edited)
392
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.06 KB | None | 0 0
  1. -- Скрипт занимается стрельбой на стороне игрока
  2.  
  3. -- Скорость снаряда
  4. local PROJECTILE_SPEED = 80
  5. -- Как часто можно стрелять снарядом (кулдаун)
  6. local LAUNCH_COOLDOWN = 0.2
  7. -- Расстояние спавна снаряда относительно модели корабля
  8. local PROJECTILE_OFFSET = 5
  9. -- Клавиша, отвечающая за стрельбу (пробел).
  10. local ATTACK_KEY = Enum.KeyCode.Space
  11.  
  12. -- Переменные для сервисов Роблокса
  13. local ContextActionService = game:GetService("ContextActionService")
  14. local Players = game:GetService("Players")
  15. local ReplicatedStorage = game:GetService("ReplicatedStorage")
  16.  
  17. -- Переменные для RemoteEvents и Functions
  18. local launchProjectile = ReplicatedStorage:WaitForChild("LaunchProjectile")
  19. local destroyProjectile = ReplicatedStorage:WaitForChild("DestroyProjectile")
  20. local destroyEnemy = ReplicatedStorage:WaitForChild("DestroyEnemy")
  21. local pingChecker = ReplicatedStorage:WaitForChild("Ping")
  22.  
  23. -- Переменная для снаряда
  24. local projectileTemplate = ReplicatedStorage:WaitForChild("Projectile")
  25. -- Переменная для локального игрока
  26. local player = Players.LocalPlayer
  27.  
  28. local canLaunch = true
  29.  
  30. -- Функция запуска снаряда
  31. local function onLaunch()
  32.     -- Если персонаж в игре, куллдаун прошёл, персонаж на поле, то
  33.     if player.Character and canLaunch and player.Character.Parent == workspace then
  34.         -- Сброс кулдауна
  35.         canLaunch = false
  36.         spawn(function()
  37.             wait(LAUNCH_COOLDOWN)
  38.             canLaunch = true
  39.         end)
  40.  
  41.         -- Создаём клон снаряда
  42.         local projectile = projectileTemplate:Clone()
  43.         -- Получаем пространственную матрицу корабля
  44.         local playerCFrame = player.Character.PrimaryPart.CFrame
  45.         -- Домножаем вектор взгляда на (1,1,1), если изначально Mesh направлен как нужно.
  46.         local direction = playerCFrame.LookVector * Vector3.new(-1,1,-1)
  47.         -- Сдвигаем спавн снаряда дальше от центра объекта на величину PROJECTILE_OFFSET
  48.         projectile.Position = playerCFrame.Position + direction * PROJECTILE_OFFSET
  49.         -- Задаём вектор скорости снаряда
  50.         projectile.Velocity = direction * PROJECTILE_SPEED
  51.  
  52.         -- Добавляем противосилу (F = m*g), чтобы снаряд левитировал по поверхности
  53.         local mass = projectile:GetMass()
  54.         projectile.VectorForce.Force = Vector3.new(0, 1, 0) * mass * game.Workspace.Gravity
  55.  
  56.         -- Переносим снаряд на игровое поле
  57.         projectile.Parent = game.Workspace
  58.  
  59.         -- Передаём серверу информацию, чтобы он создал копию снаряда и отобразил её на экране
  60.         --local serverProjectile = launchProjectile:InvokeServer(projectile.Position, projectile.Velocity)
  61.         -- Скрываем копию снаряда на сервере от игрока
  62.           --serverProjectile.LocalTransparencyModifier = 1
  63.  
  64.         -- "Сцепляем" функцию касания со снарядом
  65.         projectile.Touched:Connect(function(other)
  66.             -- Проверяем столкновение с EnemyShip и стенами
  67.             if other.Name == "EnemyShip" or other.Name == "Wall" then
  68.                 -- Если столкновение было - удаляем снаряд у игрока и на сервере
  69.                 projectile:Destroy()
  70.                 --destroyProjectile:FireServer(serverProjectile)
  71.  
  72.                 -- Если снаряд попал во врага, то удаляем и этот объект
  73.                 if other.Name == "EnemyShip" then
  74.                     destroyEnemy:FireServer(other)
  75.                     other:Destroy()
  76.                 end
  77.             end
  78.         end)
  79.     end
  80. end
  81.  
  82. pingChecker.OnClientInvoke = function() end
  83.  
  84. ContextActionService:BindAction("Launch", onLaunch, false, ATTACK_KEY)
  85.  
  86.  
  87.  
  88.  
Advertisement
Add Comment
Please, Sign In to add comment