Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Variables globales fuera del loadstring
- _G.FOLLOW_DISTANCE = _G.FOLLOW_DISTANCE or 6 -- Distancia mínima para perseguir
- _G.PREDICTION_TIME = _G.PREDICTION_TIME or 0.3 -- Tiempo de predicción para calcular la posición futura
- _G.enablePerseguirIgnorando = _G.enablePerseguirIgnorando ~= nil and _G.enablePerseguirIgnorando or true -- Habilitar/deshabilitar la persecución
- -- Código del loadstring
- local Players = game:GetService("Players")
- local RunService = game:GetService("RunService")
- local LocalPlayer = Players.LocalPlayer
- -- Caché de referencias
- local localCharacter, localHumanoidRootPart, localHumanoid
- -- Actualizar referencias del personaje
- local function UpdateLocalCharacter()
- localCharacter = LocalPlayer.Character
- if localCharacter then
- localHumanoidRootPart = localCharacter:FindFirstChild("HumanoidRootPart")
- localHumanoid = localCharacter:FindFirstChild("Humanoid")
- else
- localHumanoidRootPart, localHumanoid = nil, nil
- end
- end
- -- Verificar si un personaje tiene ítems
- local function DoesCharacterHaveItem(character)
- if not character then return false end
- for _, tool in ipairs(character:GetChildren()) do
- if tool:IsA("Tool") then
- return true
- end
- end
- return false
- end
- -- Obtener el jugador más cercano válido
- local function GetClosestValidPlayer()
- local closestPlayer, closestDistance = nil, math.huge
- for _, player in ipairs(Players:GetPlayers()) do
- if player ~= LocalPlayer then
- local character = player.Character
- if character and character:FindFirstChild("Humanoid") and character:FindFirstChild("HumanoidRootPart") then
- local humanoid = character.Humanoid
- local humanoidRootPart = character.HumanoidRootPart
- if humanoid.Health > 0 and not DoesCharacterHaveItem(character) then
- local distance = (humanoidRootPart.Position - localHumanoidRootPart.Position).Magnitude
- if distance < closestDistance then
- closestPlayer, closestDistance = player, distance
- end
- end
- end
- end
- end
- return closestPlayer
- end
- -- Predecir posición futura
- local function PredictPosition(player)
- local character = player.Character
- if not character then return nil end
- local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
- if not humanoidRootPart then return nil end
- local velocity = humanoidRootPart.Velocity
- return humanoidRootPart.Position + velocity * _G.PREDICTION_TIME
- end
- -- Función principal de persecución
- local function PursueTarget()
- if not _G.enablePerseguirIgnorando or not localHumanoidRootPart or not DoesCharacterHaveItem(localCharacter) then
- return
- end
- local targetPlayer = GetClosestValidPlayer()
- if targetPlayer then
- local predictedPosition = PredictPosition(targetPlayer)
- if predictedPosition then
- local distance = (predictedPosition - localHumanoidRootPart.Position).Magnitude
- if distance > _G.FOLLOW_DISTANCE then
- localHumanoid:MoveTo(predictedPosition)
- end
- end
- end
- end
- -- Monitorear cambios de estado (muerte/reaparición)
- local function MonitorCharacter()
- while true do
- -- Esperar que el personaje reaparezca
- if not localCharacter or not localHumanoid or localHumanoid.Health <= 0 then
- LocalPlayer.CharacterAdded:Wait() -- Esperar a que el personaje reaparezca
- UpdateLocalCharacter() -- Actualizar las referencias
- end
- wait(0.1) -- Reducir frecuencia de comprobación
- end
- end
- -- Conexión al evento Heartbeat
- RunService.Heartbeat:Connect(function()
- if not localCharacter then
- UpdateLocalCharacter() -- Si el personaje no está disponible, actualizarlo
- end
- PursueTarget() -- Ejecutar la persecución
- end)
- -- Inicializar el personaje
- UpdateLocalCharacter()
- -- Iniciar monitoreo en segundo plano
- task.spawn(MonitorCharacter)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement