Translating all the comments with Google Translate, part one

This commit is contained in:
toasterpanic 2026-05-25 01:07:46 -04:00
parent 6d4a225370
commit 9511bf3a82
2 changed files with 53 additions and 52 deletions

View file

@ -1,15 +1,15 @@
--[[-------------------------------------------------------------------------
Скрипт для управления поведением падающих частей тела NPC (например, ног)
Включает эффекты дергания и анимацию переката при ударе.
Версия 2: Исправлены ошибки GetGameData и HitNormal.
A script for controlling the behavior of falling NPC body parts (e.g., legs).
Includes flinching effects and roll animation upon impact.
Version 2: Fixed GetGameData and HitNormal errors.
---------------------------------------------------------------------------]]
MODULE = {}
MODULE.Model = "models/police.mdl" -- Модель, к которой применяется скрипт (вероятно, не используется напрямую в этом коде)
MODULE.Model = "models/police.mdl" -- The model to which the script is applied (likely not used directly in this code)
-- Список костей, которые МОГУТ быть затронуты физикой или анимацией.
-- Для дергания будут использоваться только кости ног из этого списка.
-- A list of bones that MAY be affected by physics or animation.
-- Only the leg bones from this list will be used for pulling.
MODULE.BoneList =
{
"ValveBiped.Bip01_Pelvis",
@ -29,8 +29,8 @@ MODULE.BoneList =
"ValveBiped.Bip01_L_Foot"
}
-- Список костей, к которым БУДЕТ применяться эффект дергания.
-- Отфильтровано из MODULE.BoneList, чтобы исключить таз и другие нежелательные кости.
-- A list of bones to which the jiggle effect WILL be applied.
-- Filtered from MODULE.BoneList to exclude the pelvis and other unwanted bones.
local twitchable_bone_names = {
"ValveBiped.Bip01_R_Thigh",
"ValveBiped.Bip01_R_Calf",
@ -40,41 +40,41 @@ local twitchable_bone_names = {
"ValveBiped.Bip01_L_Foot"
}
-- Локальные копии функций для оптимизации
-- Local Copies of Functions for Optimization
local math_Clamp = math.Clamp
local math_Rand = math.Rand
local math_random = math.random
local table_Random = table.Random -- Используем table.Random для выбора случайного элемента
local IsValid = IsValid -- Локальная копия IsValid
local CurTime = CurTime -- Локальная копия CurTime
local table_Random = table.Random -- We use `table.Random` to select a random element.
local IsValid = IsValid -- Local copy of IsValid
local CurTime = CurTime -- Local copy of CurTime
local timer_Create = timer.Create
local timer_Remove = timer.Remove
local VectorRand = VectorRand
--[[-------------------------------------------------------------------------
Конвары (Настройки)
Convars (Settings)
---------------------------------------------------------------------------]]
-- Подергивание
-- Twitching
local cv_twitch_enabled = CreateConVar("fedhoria_falling_twitch_enabled", "1", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Включить дергание для падающих ног")
local cv_twitch_interval_min = CreateConVar("fedhoria_falling_twitch_interval_min", "3", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Минимальный интервал между дерганиями (сек)")
local cv_twitch_interval_max = CreateConVar("fedhoria_falling_twitch_interval_max", "6", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Максимальный интервал между дерганиями (сек)")
local cv_twitch_force_min = CreateConVar("fedhoria_falling_twitch_min", "100", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Мин. угловая скорость для дергания")
local cv_twitch_force_max = CreateConVar("fedhoria_falling_twitch_max", "250", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Макс. угловая скорость для дергания")
-- Перекат
-- Roll
local cv_anim_roll_enabled = CreateConVar("fedhoria_falling_anim_roll_enabled", "1", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Включить анимацию при ударе о землю")
local cv_anim_roll_min_delay = CreateConVar("fedhoria_falling_anim_roll_min_delay", "0.5", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Мин. задержка перед возможной анимацией после удара (сек)")
local cv_anim_roll_duration = CreateConVar("fedhoria_falling_anim_roll_duration", "3.5", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Продолжительность принудительной анимации (сек)")
local cv_anim_roll_impact_threshold = CreateConVar("fedhoria_falling_anim_roll_impact_threshold", "300", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Мин. скорость удара для запуска анимации")
local cv_anim_roll_playback_rate = CreateConVar("fedhoria_falling_anim_roll_playback_rate", "3.0", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Скорость воспроизведения анимации")
-- Время жизни объекта после остановки
-- Death timer
local die_time = CreateConVar("fedhoria_dietime", 5, {FCVAR_ARCHIVE, FCVAR_REPLICATED})
local die_time_variation = CreateConVar("fedhoria_dietime_variation", 3, {FCVAR_ARCHIVE, FCVAR_REPLICATED})
--[[-------------------------------------------------------------------------
Функция дергания
Применяет случайный импульс к одной из костей ног.
Tug function
Applies a random impulse to one of the leg bones.
---------------------------------------------------------------------------]]
function MODULE:DoTwitch()
if not IsValid(self) or not IsValid(self:GetTarget()) then return end
@ -88,15 +88,15 @@ function MODULE:DoTwitch()
local random_bone_name = table_Random(twitchable_bone_names)
if not random_bone_name then return end
-- Получаем индекс кости по имени
-- Get bone index by name
local bone_index = self:LookupBone(random_bone_name)
if not bone_index then
-- print("[Fedhoria Twitch] Bone index not found for name:", random_bone_name)
return
end
-- Получаем физический объект кости по ее индексу
local phys_bone = self:GetPhysicsObjectNum(bone_index) -- Используем GetPhysicsObjectNum для получения физ. объекта конкретной кости
-- We retrieve the physical bone object by its index.
local phys_bone = self:GetPhysicsObjectNum(bone_index) -- We use GetPhysicsObjectNum to retrieve the physics object for a specific bone.
if IsValid(phys_bone) then
local force = math_Rand(cv_twitch_force_min:GetFloat(), cv_twitch_force_max:GetFloat())
@ -112,7 +112,7 @@ end
--[[-------------------------------------------------------------------------
Планирование следующего вызова DoTwitch
Planning the next DoTwitch call
---------------------------------------------------------------------------]]
function MODULE:ScheduleNextTwitch()
if not IsValid(self) then return end
@ -130,7 +130,7 @@ function MODULE:ScheduleNextTwitch()
end
--[[-------------------------------------------------------------------------
Запуск анимации переката
Starting the roll animation
---------------------------------------------------------------------------]]
function MODULE:StartAnimationRoll()
if not cv_anim_roll_enabled:GetBool() then return end
@ -162,14 +162,14 @@ function MODULE:Init()
self.StartDie = nil
self.AnimationRollEndTime = 0
-- Добавляем демпфирование для всех костей
-- Add damping to all bones.
local phys = self:GetPhysicsObject()
if IsValid(phys) then
local bone_count = phys:GetBoneCount()
for bone_index = 0, bone_count - 1 do
local phys_bone = phys:GetBone(bone_index)
if IsValid(phys_bone) then
phys_bone:SetDamping(0.8, 0.9) -- Линейное и угловое демпфирование
phys_bone:SetDamping(0.8, 0.9) -- Linear and Angular Damping
end
end
end
@ -180,17 +180,17 @@ end
--[[-------------------------------------------------------------------------
Think-хук
Think-hook
---------------------------------------------------------------------------]]
function MODULE:Think()
-- Место для дополнительной логики
-- Space for additional logic
end
--[[-------------------------------------------------------------------------
Хук столкновения физики (ИСПРАВЛЕН)
Physics Collision Hook (FIXED)
---------------------------------------------------------------------------]]
function MODULE:PhysicsCollide(data, phys)
-- Проверяем валидность данных столкновения и наличие HitNormal
-- Checking the validity of collision data and the presence of HitNormal.
if not data or not data.HitNormal then
-- print("[Fedhoria Collide] Invalid collision data received.")
return
@ -201,7 +201,7 @@ function MODULE:PhysicsCollide(data, phys)
local cur_time = CurTime()
self.LastCollideTime = cur_time
-- Проверка на столкновение с землей (нормаль смотрит вверх)
-- Ground collision check (normal points upward)
if data.HitNormal.z > 0.7 then
local impact_speed = data.Speed
@ -220,26 +220,26 @@ end
--[[-------------------------------------------------------------------------
Хук симуляции физики (ИСПРАВЛЕН)
Physics Simulation Hook (FIXED)
---------------------------------------------------------------------------]]
function MODULE:PhysicsSimulate(phys, dt)
local cur_time = CurTime()
local target = self:GetTarget()
if not IsValid(target) then self:Remove(); return false end
-- проверка на активную анимацию
-- Check for active animation
if cur_time < self.AnimationRollEndTime then
--self.StartDie = nil -- сбрасываем таймер "смерти"
return true -- используем стандартную физику
--self.StartDie = nil -- Resetting the "death" timer
return true -- We use standard physics.
end
-- логика для таймера исчезновения
local f = 1 -- множитель силы (по умолчанию 1)
-- Logic for the disappearance timer
local f = 1 -- Force multiplier (default: 1)
if self.StartDie then
f = math_Clamp(1 - (cur_time - self.StartDie) / die_time:GetFloat(), 0, 1)
end
-- поддержка для RagMod
-- Support for RagMod
if ragmod and ragmod:IsRagmodRagdoll(target) then
local owner = target:GetOwningPlayer()
f = (IsValid(owner) and owner:Alive()) and 1 or 0
@ -248,7 +248,7 @@ function MODULE:PhysicsSimulate(phys, dt)
if f <= 0 then self.AnimationRollEndTime = 0 end
end
-- удаление, если истекло время жизни
-- Deletion if the time-to-live has expired
if (f <= 0) then
self:Remove()
return false
@ -256,9 +256,9 @@ function MODULE:PhysicsSimulate(phys, dt)
local phys_bone_id = phys:GetID()
-- основная логика для корневой кости
-- Main logic for the root bone
if (phys_bone_id == 0) then
-- логика для воды
-- Water Logic
if target:WaterLevel() > 0 then
self.AnimationRollEndTime = 0
local seq_choked = self:LookupSequence("Choked_Barnacle")
@ -266,7 +266,7 @@ function MODULE:PhysicsSimulate(phys, dt)
return false
end
-- логика для анимации падения
-- Logic for fall animation
local vel = phys:GetVelocity()
local pbr = math_Clamp(vel.z / -600, 0.5, 1.5)
@ -278,9 +278,9 @@ function MODULE:PhysicsSimulate(phys, dt)
end
end
-- фикс: безопасная работа с векторами
-- Fix: Safe vector handling
local pos = phys:GetPos()
if not pos then return true, f end -- если pos невалиден, ничего не делаем
if not pos then return true, f end -- If `pos` is invalid, do nothing.
self.last_pos = self.last_pos or pos
if not self.last_pos then self.last_pos = pos end
@ -294,7 +294,7 @@ function MODULE:PhysicsSimulate(phys, dt)
--self.StartDie = nil
end
-- коррекция физики после столкновения
-- Physics correction after collision
local delta_collide = cur_time - self.LastCollideTime
if (delta_collide < 0.2) then
return true, 1 * f
@ -305,7 +305,7 @@ function MODULE:PhysicsSimulate(phys, dt)
return true, f
end
-- логика для других костей
-- Logic for other bones
local delta_collide = cur_time - self.LastCollideTime
if (delta_collide < 0.2) then
return true, 1 * f
@ -316,7 +316,7 @@ function MODULE:PhysicsSimulate(phys, dt)
end
--[[-------------------------------------------------------------------------
Хук удаления сущности
Entity Deletion Hook
---------------------------------------------------------------------------]]
function MODULE:OnRemove()
local timer_name = "Fedhoria_FallingLegs_Twitch_" .. self:EntIndex()
@ -324,8 +324,8 @@ function MODULE:OnRemove()
end
--[[-------------------------------------------------------------------------
Регистрация модуля (если это часть системы модулей)
Module registration (if it is part of a module system)
---------------------------------------------------------------------------]]
-- Пример регистрации:
-- Registration Example:
-- falling_legs_manager:RegisterModule("FedhoriaFallingLegs", MODULE)

View file

@ -1,4 +1,4 @@
--здесь был BRAT.
-- здесь был BRAT.
MODULE = {}
@ -21,7 +21,7 @@ local table_HasValue = table.HasValue
local hand_offset = Vector(2, 0, 0)
--twtiching
-- Twitch
local cv_twitch_enabled = CreateConVar("fedhoria_falling_twitch_enabled", "1", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Включить дергание для падающих торсов")
local cv_twitch_interval_min = CreateConVar("fedhoria_falling_twitch_interval_min", "3", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Минимальный интервал между дерганиями (сек)")
local cv_twitch_interval_max = CreateConVar("fedhoria_falling_twitch_interval_max", "6", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Максимальный интервал между дерганиями (сек)")
@ -29,18 +29,19 @@ local cv_twitch_force_min = CreateConVar("fedhoria_falling_twitch_min", "100", {
local cv_twitch_force_max = CreateConVar("fedhoria_falling_twitch_max", "250", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Макс. угловая скорость для дергания")
local ignore_bone_indices_twitch = {0} -- игнор нахуй
--перекат ебаный
-- Roll
local cv_anim_roll_enabled = CreateConVar("fedhoria_falling_anim_roll_enabled", "1", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Включить анимацию 'idleonfire' при ударе о землю")
local cv_anim_roll_min_delay = CreateConVar("fedhoria_falling_anim_roll_min_delay", "0.5", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Мин. задержка перед возможной анимацией после удара (сек)")
local cv_anim_roll_duration = CreateConVar("fedhoria_falling_anim_roll_duration", "3.5", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Продолжительность принудительной анимации 'idleonfire' (сек)")
local cv_anim_roll_impact_threshold = CreateConVar("fedhoria_falling_anim_roll_impact_threshold", "300", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Мин. скорость удара для запуска анимации")
local cv_anim_roll_playback_rate = CreateConVar("fedhoria_falling_anim_roll_playback_rate", "3.0", {FCVAR_ARCHIVE, FCVAR_REPLICATED}, "Скорость воспроизведения анимации 'idleonfire'")
-- Death timer
local die_time = CreateConVar("fedhoria_dietime", 5, {FCVAR_ARCHIVE, FCVAR_REPLICATED})
local die_time_variation = CreateConVar("fedhoria_dietime_variation", 3, {FCVAR_ARCHIVE, FCVAR_REPLICATED})
-- адно дергание
-- Do it!
function MODULE:DoTwitch()
if not IsValid(self) or not IsValid(self:GetTarget()) then return end