Pastebin

Paste #49700: No description

< previous paste - next paste>

Pasted by Anonymous Coward

Download View as text

local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local VirtualInputManager = game:GetService("VirtualInputManager")

local LocalPlayer = Players.LocalPlayer
local Character
local HumanoidRootPart

-- Cooldown to prevent spamming the parry
local parryCooldown = 0.4 -- in seconds
local lastParryTime = 0

-- Configuration
local parryDistance = 15 -- Distance to check for enemies
local swingVelocityThreshold = 15 -- Minimum velocity of the tool to be considered an attack

local function initializeCharacter()
	Character = LocalPlayer.Character
	if not Character then
		Character = LocalPlayer.CharacterAdded:Wait()
	end
	HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
end

initializeCharacter()
LocalPlayer.CharacterAdded:Connect(function(newChar)
	Character = newChar
	HumanoidRootPart = newChar:WaitForChild("HumanoidRootPart")
end)

-- We'll store the last position of each tool to calculate velocity
local lastToolPositions = {}

RunService.Heartbeat:Connect(function()
	if not Character or not Character.Parent then
		initializeCharacter()
		return
	end

	-- Check cooldown before doing anything
	if (tick() - lastParryTime) < parryCooldown then
		return
	end

	local myPos = HumanoidRootPart.Position
	local shouldParry = false

	for _, player in ipairs(Players:GetPlayers()) do
		if player ~= LocalPlayer and player.Character and player.Character:FindFirstChild("Humanoid") and player.Character.Humanoid.Health > 0 then
			local targetChar = player.Character
			local targetHRP = targetChar:FindFirstChild("HumanoidRootPart")

			if targetHRP and (myPos - targetHRP.Position).Magnitude <= parryDistance then
				-- Check if the player is holding a tool
				local equippedTool = targetChar:FindFirstChildOfClass("Tool")
				if equippedTool and equippedTool:FindFirstChild("Handle") then
					local handle = equippedTool.Handle
					local currentPos = handle.Position
					local toolName = equippedTool.Name

					-- Get the last position to calculate velocity
					local lastPos = lastToolPositions[toolName]
					if lastPos then
						-- Calculate the velocity of the tool's handle
						local deltaTime = RunService.Heartbeat:Wait()
						local velocity = (currentPos - lastPos).Magnitude / deltaTime

						-- Check if the velocity is high enough to be an attack
						-- This is the key anti-feint check. A feint won't generate high velocity.
						if velocity > swingVelocityThreshold then
							shouldParry = true
						end
					end

					-- Update the last position for the next frame
					lastToolPositions[toolName] = currentPos
				end
			end
		end

		if shouldParry then
			break
		end
	end

	if shouldParry then
		-- === THIS IS THE FIXED PART ===
		-- Simulate holding the right mouse button for one frame to ensure it registers as a block/parry
		VirtualInputManager:SendMouseButtonEvent(0, 0, 1, true, game, 1) -- Mouse Down
		RunService.Heartbeat:Wait() -- Wait for the next game frame
		VirtualInputManager:SendMouseButtonEvent(0, 0, 1, false, game, 1) -- Mouse Up

		-- Update the last parry time
		lastParryTime = tick()
	end
end)

print("EternalWare (Fixed Hold Edition) loaded.")

New Paste


Do not write anything in this field if you're a human.

Go to most recent paste.