Types
Type definitions and enums used throughout Rewind.
local Types = Rewind.Types
Enums
ValidationMode
type ValidationMode = "Ray" | "Sphere" | "Capsule" | "Cone" | "Fan"
| Mode | Description |
|---|---|
Ray | Instant hitscan raycast validation |
Sphere | Sphere overlap for explosions and AoE |
Capsule | Capsule sweep for thick bullets or projectile paths |
Cone | Cone-based melee arc attack |
Fan | Multi-ray fan for sweeping melee attacks |
RejectReason
Reasons why a hit validation was rejected.
type RejectReason =
| "rate_limited" -- Player is firing too fast
| "duplicate_shot" -- Already processed this shotId
| "no_hit" -- No target was hit
| "no_humanoid" -- Hit target has no humanoid
| "friendly_fire" -- Target is on same team
| "not_server" -- Called from client (server only)
| "out_of_range" -- Target beyond weapon range
| "invalid_params" -- Invalid validation parameters
| "vehicle_blocked" -- Vehicle absorbed the hit
| "armor_absorbed" -- Armor fully absorbed damage
| nil -- nil = success/hit
EntityType
type EntityType = "Player" | "NPC" | "Vehicle" | "Mount"
AbuseReason
type AbuseReason =
| "rate_limited"
| "duplicate_shot"
| "impossible_distance"
| "future_timestamp"
| "past_timestamp"
| "invalid_origin"
| "speed_hack"
| "teleport"
| "fly_hack"
| "invalid_target"
AnomalyType
type AnomalyType =
| "speed_hack"
| "teleport"
| "fly_hack"
| "noclip"
| "vertical_speed"
Core Types
Options
Configuration options for Rewind.Start().
type Options = {
enabled: boolean?, -- Enable Rewind (default: true)
snapshotHz: number?, -- Snapshots per second (default: 20)
windowMs: number?, -- Snapshot window in ms (default: 1000)
maxRewindMs: number?, -- Max rewind allowed (default: 500)
maxRayDistance: number?, -- Max ray length (default: 1000)
allowHeadshots: boolean?, -- Enable headshot detection
friendlyFire: boolean?, -- Allow team damage
teamCheck: boolean?, -- Enable team checking
antiSpam: {
perSecond: number,
burst: number,
}?,
mode: "Analytic" | "GhostParts"?,
debug: {
enabled: boolean?,
}?,
replication: ReplicationConfig?,
movement: MovementConfig?,
abuse: AbuseConfig?,
}
HitResult
Result returned from all validation functions.
type HitResult = {
hit: boolean, -- Whether the hit was valid
character: Model?, -- Hit character model
humanoid: Humanoid?, -- Hit humanoid
player: Player?, -- Hit player (nil for NPCs)
part: BasePart?, -- Hit body part
partName: string?, -- Name of hit part
hitPosition: Vector3?, -- World hit position
hitNormal: Vector3?, -- Hit surface normal
serverNow: number, -- Server timestamp
rewindTo: number, -- Timestamp rewound to
usedRewindMs: number, -- Amount of rewind used
isHeadshot: boolean?, -- Was it a headshot
reason: RejectReason, -- Rejection reason (nil = success)
-- Vehicle hits
vehicle: Model?, -- Hit vehicle model
vehicleInfo: VehicleInfo?, -- Vehicle details
-- Armor
armorResult: DamageResult?, -- Armor calculation result
}
WeaponProfile
Configuration for a weapon.
type WeaponProfile = {
id: string, -- Unique weapon ID
maxRewindMs: number?, -- Override max rewind
maxDistance: number?, -- Max effective range
extraForgivenessStuds: number?, -- Extra hit tolerance
-- Melee weapons
meleeRange: number?,
meleeAngleDeg: number?,
meleeRays: number?,
isMelee: boolean?,
-- Capsule weapons
capsuleRadius: number?,
capsuleSteps: number?,
-- Other
requireLineOfSight: boolean?,
scaleMultiplier: number?,
armorPenetration: number?, -- Bypass armor %
}
Validation Parameter Types
ValidateRayParams
type ValidateRayParams = {
weaponId: string?,
origin: Vector3,
direction: Vector3,
clientTime: number?,
clientShotId: string?,
ignore: { Instance }?,
}
ValidateSphereParams
type ValidateSphereParams = {
weaponId: string?,
center: Vector3,
radius: number,
clientTime: number?,
clientShotId: string?,
ignore: { Instance }?,
}
ValidateCapsuleParams
type ValidateCapsuleParams = {
weaponId: string?,
a: Vector3, -- Start point
b: Vector3, -- End point
radius: number,
steps: number?, -- Interpolation steps
clientTime: number?,
clientShotId: string?,
ignore: { Instance }?,
}
ValidateArcParams / ValidateMeleeArcParams
type ValidateArcParams = {
weaponId: string?,
origin: CFrame,
range: number,
angleDeg: number,
clientTime: number?,
clientShotId: string?,
}
type ValidateMeleeArcParams = ValidateArcParams
ValidateFanParams / ValidateMeleeFanParams
type ValidateFanParams = {
weaponId: string?,
origin: CFrame,
range: number,
angleDeg: number,
rays: number,
clientTime: number?,
clientShotId: string?,
}
type ValidateMeleeFanParams = ValidateFanParams
ValidateParams
Generic validation parameters for Rewind.Validate().
type ValidateParams = {
mode: ValidationMode,
weaponId: string?,
clientTime: number?,
clientShotId: string?,
-- Ray
origin: (Vector3 | CFrame)?,
direction: Vector3?,
-- Sphere
center: Vector3?,
radius: number?,
-- Capsule
a: Vector3?,
b: Vector3?,
steps: number?,
-- Cone/Fan
range: number?,
angleDeg: number?,
rays: number?,
}
Replication Types
ReplicationConfig
type ReplicationConfig = {
enabled: boolean?,
tickRate: number?, -- Updates per second
interpolationDelay: number?, -- Interpolation buffer (ms)
maxExtrapolation: number?, -- Max extrapolation (ms)
deltaCompression: boolean?,
proximityBased: boolean?,
nearDistance: number?,
farDistance: number?,
farTickDivisor: number?,
clientAuthoritative: boolean?,
reconciliationThreshold: number?,
}
EntityInfo
type EntityInfo = {
id: string,
entityType: EntityType,
model: Model,
player: Player?,
priority: number,
lastUpdate: number,
}
EntityState
type EntityState = {
t: number, -- Timestamp
rootCf: CFrame, -- Root CFrame
velocity: Vector3,
parts: { [string]: CFrame }?, -- Optional part CFrames
}
CompressedState
type CompressedState = {
t: number,
pos: Vector3,
rot: { number }, -- Compressed rotation
vel: Vector3?,
}
InterpolationState
type InterpolationState = {
entity: EntityInfo,
buffer: { EntityState },
bufferSize: number,
renderTime: number,
lastReceivedTime: number,
}
Vehicle & Mount Types
VehicleConfig
type VehicleConfig = {
hitboxes: { [string]: VehicleHitbox }?,
hitboxProfile: string?,
protectsPassengers: boolean?,
damageMultiplier: number?,
health: number?,
}
VehicleHitbox
type VehicleHitbox = {
size: Vector3,
offset: Vector3?,
damageMultiplier: number?,
isWeakSpot: boolean?,
}
VehicleInfo
type VehicleInfo = {
id: string,
model: Model,
config: VehicleConfig,
passengers: { Player },
health: number,
maxHealth: number,
destroyed: boolean,
}
MountConfig
type MountConfig = {
hitboxProfile: string?,
exposeRider: boolean?,
riderOffset: Vector3?,
}
MountInfo
type MountInfo = {
id: string,
model: Model,
config: MountConfig,
rider: Player?,
}
Armor Types
ArmorConfig
type ArmorConfig = {
layers: { {
name: string,
health: number,
damageReduction: number,
coversParts: { string },
regenerates: boolean?,
regenRate: number?,
regenDelay: number?,
} },
}
ArmorLayer
type ArmorLayer = {
name: string,
health: number,
maxHealth: number,
damageReduction: number,
coversParts: { string },
broken: boolean,
regenerates: boolean?,
regenRate: number?,
regenDelay: number?,
lastDamageTime: number?,
}
ArmorState
type ArmorState = {
entityId: string,
model: Model,
layers: { ArmorLayer },
}
DamageResult
type DamageResult = {
finalDamage: number,
armorDamage: number,
brokenLayers: { string },
penetrated: boolean,
}
Abuse Tracking Types
AbuseConfig
type AbuseConfig = {
enabled: boolean?,
useDataStore: boolean?,
dataStoreName: string?,
thresholds: {
warnAt: number?,
kickAt: number?,
banAt: number?,
}?,
autoKick: boolean?,
autoBan: boolean?,
saveInterval: number?,
}
AbuseRecord
type AbuseRecord = {
reason: AbuseReason,
count: number,
firstOccurrence: number,
lastOccurrence: number,
metadata: { [string]: any }?,
}
PlayerAbuseHistory
type PlayerAbuseHistory = {
playerId: number,
playerName: string,
records: { [string]: AbuseRecord },
totalViolations: number,
sessionViolations: number,
isBanned: boolean,
lastSeen: number,
}
Movement Validation Types
MovementConfig
type MovementConfig = {
maxSpeed: number?,
maxVerticalSpeed: number?,
teleportThreshold: number?,
flyCheckInterval: number?,
maxAirTime: number?,
noclipCheckEnabled: boolean?,
speedTolerance: number?,
enableMonitoring: boolean?,
}
MovementValidationResult
type MovementValidationResult = {
valid: boolean,
anomaly: AnomalyType?,
details: {
speed: number?,
distance: number?,
airTime: number?,
expectedMax: number?,
}?,
}
PlayerMovementState
type PlayerMovementState = {
lastPosition: Vector3,
lastTimestamp: number,
airStartTime: number?,
isInAir: boolean,
violations: {
speed: number,
teleport: number,
fly: number,
noclip: number,
},
lastGroundPosition: Vector3?,
}
Hitbox Profile Types
Profile
type Profile = {
id: string,
parts: { string },
forgiveness: { [string]: number }?,
hitPriority: { [string]: HitPriority }?,
}
HitPriority
type HitPriority = {
partName: string,
priority: number,
damageMultiplier: number?,
}