From 9511bf3a8293d66567345d2f11e7503bf2e283d7 Mon Sep 17 00:00:00 2001 From: toasterpanic Date: Mon, 25 May 2026 01:07:46 -0400 Subject: [PATCH] Translating all the comments with Google Translate, part one --- lua/fedhoria/modules/falling_legs.lua | 96 +++++++++++++------------- lua/fedhoria/modules/falling_torso.lua | 9 +-- 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/lua/fedhoria/modules/falling_legs.lua b/lua/fedhoria/modules/falling_legs.lua index 8c525cd..25abd32 100644 --- a/lua/fedhoria/modules/falling_legs.lua +++ b/lua/fedhoria/modules/falling_legs.lua @@ -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) diff --git a/lua/fedhoria/modules/falling_torso.lua b/lua/fedhoria/modules/falling_torso.lua index dd002ff..88d3a91 100644 --- a/lua/fedhoria/modules/falling_torso.lua +++ b/lua/fedhoria/modules/falling_torso.lua @@ -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