Skip to main content

Weapon Profiles

Weapon profiles let you configure per-weapon validation parameters. Different weapons have different characteristics that affect hit validation.

Overview

A weapon profile contains:

  • Maximum effective range
  • Tolerance values
  • Hitbox scaling
  • Validation mode (hitscan vs projectile vs melee)

Defining Profiles

Register weapon profiles on the server:

local Rewind = require(ReplicatedStorage.Rewind)

-- Define weapon profiles
local WeaponProfiles = {
Rifle = {
maxDistance = 500,
tolerance = 0.1,
capsuleRadius = 0.3,
capsuleSteps = 10,
scaleMultiplier = 1.0,
isMelee = false,
},
Shotgun = {
maxDistance = 50,
tolerance = 0.15,
capsuleRadius = 0.5,
capsuleSteps = 5,
scaleMultiplier = 1.1, -- Slightly larger hitboxes
isMelee = false,
},
Sword = {
maxDistance = 8,
tolerance = 0.2,
meleeRange = 6,
meleeAngleDeg = 90,
meleeRays = 5,
scaleMultiplier = 1.0,
isMelee = true,
},
}

-- Register profiles
for name, profile in WeaponProfiles do
Rewind.RegisterProfile(name, profile)
end

-- Then start Rewind
Rewind.Start()

Profile Properties

Common Properties

PropertyTypeDefaultDescription
maxDistancenumber1000Maximum effective range
tolerancenumber0.1Hit tolerance (seconds)
scaleMultipliernumber1.0Hitbox scale multiplier
isMeleebooleanfalseWhether this is a melee weapon

Ranged Weapon Properties

PropertyTypeDefaultDescription
capsuleRadiusnumber0.3Capsule sweep radius
capsuleStepsnumber10Interpolation steps for capsule

Melee Weapon Properties

PropertyTypeDefaultDescription
meleeRangenumber5Maximum melee reach
meleeAngleDegnumber90Cone angle for melee hits
meleeRaysnumber5Number of rays in melee cone

Using Profiles

When validating a hit, specify the weapon ID:

local result = Rewind.Validate(player, "Ray", {
origin = origin,
direction = direction,
clientTime = timestamp,
weaponId = "Rifle", -- Uses Rifle profile
})

Creating Params from Weapon

Use the helper to create validation params from a weapon profile:

local profile = WeaponProfiles.Rifle
local params = Rewind.CreateParamsFromWeapon(profile, {
origin = origin,
direction = direction,
clientTime = timestamp,
})

local result = Rewind.Validate(player, "Ray", params)

Dynamic Profiles

You can modify profiles at runtime:

-- Buff weapon range
WeaponProfiles.Rifle.maxDistance = 600

-- Apply to Rewind
Rewind.RegisterProfile("Rifle", WeaponProfiles.Rifle)

Default Fallback

If a weapon ID isn't found, Rewind uses these defaults:

local DefaultProfile = {
maxDistance = 1000,
tolerance = 0.1,
capsuleRadius = 0.3,
capsuleSteps = 10,
scaleMultiplier = 1.0,
isMelee = false,
}

Example: Full Weapon System

-- Define all weapons
local Weapons = {
AssaultRifle = {
damage = 25,
fireRate = 10,
profile = {
maxDistance = 300,
tolerance = 0.08,
capsuleRadius = 0.25,
isMelee = false,
},
},
Sniper = {
damage = 100,
fireRate = 0.5,
profile = {
maxDistance = 1000,
tolerance = 0.05,
capsuleRadius = 0.15,
isMelee = false,
},
},
Katana = {
damage = 50,
fireRate = 2,
profile = {
maxDistance = 10,
tolerance = 0.15,
meleeRange = 8,
meleeAngleDeg = 120,
meleeRays = 7,
isMelee = true,
},
},
}

-- Extract profiles for Rewind
local profiles = {}
for name, weapon in Weapons do
profiles[name] = weapon.profile
end

for name, profile in profiles do
Rewind.RegisterProfile(name, profile)
end

Rewind.Start()