Скакун: без стука педалей - слышны только колёса, как у мотоцикла с пустым баком

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
AlexCube
2026-10-01 11:48:13 +03:00
co-authored by Claude Opus 5.5
parent f1c1e61e8d
commit 1debf47717
4 changed files with 5 additions and 35 deletions
+2 -6
View File
@@ -2,8 +2,8 @@
<!-- Костяной скакун (1.7.0, 01.10.2026). vehicles.xml наследования не знает - это копия <!-- Костяной скакун (1.7.0, 01.10.2026). vehicles.xml наследования не знает - это копия
ванильного vehicleMotorcycle (игра 3.3) под именем сущности necroBoneSteed. Отличия: ванильного vehicleMotorcycle (игра 3.3) под именем сущности necroBoneSteed. Отличия:
recipeName -> предмет necroBoneSteedPlaceable (его и возвращает подбор скакуна), без recipeName -> предмет necroBoneSteedPlaceable (его и возвращает подбор скакуна), без
honkEvent (гудок открывает двери торговца - скакуну незачем). Звуки велосипеда: honkEvent (гудок открывает двери торговца - скакуну незачем). Мотор молчит
мотор молчит, педали и гудок - BoneSteedEnginePatch и hornSound. Топливо - кровавые сферы (BoneSteedEnginePatch) - слышны только колёса, гудок велосипедный. Топливо - кровавые сферы
в ячейках модификаций (BoneSteedFuelPatch), канистрой не заправить. --> в ячейках модификаций (BoneSteedFuelPatch), канистрой не заправить. -->
<append xpath="/vehicles"> <append xpath="/vehicles">
<vehicle name="necroBoneSteed"> <vehicle name="necroBoneSteed">
@@ -108,15 +108,11 @@
<property class="wheel0"> <property class="wheel0">
<property name="tireTransform" value="M/Forks/Wheel0"/> <property name="tireTransform" value="M/Forks/Wheel0"/>
<property name="torqueScale_motor_brake" value=".15, .5"/> <property name="torqueScale_motor_brake" value=".15, .5"/>
<property name="bounceSound" value="bicycle_suspension"/>
<property name="slideSound" value="bicycle_brake"/>
</property> </property>
<property class="wheel1"> <property class="wheel1">
<property name="tireTransform" value="Wheel1"/> <property name="tireTransform" value="Wheel1"/>
<property name="torqueScale_motor_brake" value="1, 1"/> <property name="torqueScale_motor_brake" value="1, 1"/>
<property name="bounceSound" value="bicycle_suspension"/>
<property name="slideSound" value="bicycle_brake"/>
</property> </property>
<property class="headlight"> <property class="headlight">
+3 -29
View File
@@ -1,4 +1,3 @@
using System.Collections.Generic;
using HarmonyLib; using HarmonyLib;
namespace NecromancerTome namespace NecromancerTome
@@ -11,40 +10,16 @@ namespace NecromancerTome
/// ходу. Заведённый с пустым баком мотор так и работал на полной тяге. Здесь: без крови мотор /// ходу. Заведённый с пустым баком мотор так и работал на полной тяге. Здесь: без крови мотор
/// не заводится, кончилась на ходу - глохнет; вставили сферу, сидя в седле, - заводится сам. /// не заводится, кончилась на ходу - глохнет; вставили сферу, сидя в седле, - заводится сам.
/// Без мотора у ванили остаётся тяга x50 - еле ползёт, как пустой мотоцикл. /// Без мотора у ванили остаётся тяга x50 - еле ползёт, как пустой мотоцикл.
/// - «ЗВУК МОТОЦИКЛА УБРАТЬ, ПУСТЬ БУДЕТ ВЕЛОСИПЕД». Все звуки мотора (заводка, глушение, /// - «ЗВУК МОТОЦИКЛА УБРАТЬ». Все звуки мотора (заводка, глушение, обороты) у скакуна
/// обороты) у скакуна молчат; вместо них на ходу под тягой - стук педалей bicycle_pedal с /// молчат - слышно только то, что слышно у мотоцикла с пустым баком (колёса). Стук педалей
/// ритмом ванильного велосипеда (VPPedals: 0.75 с, на турбо 0.55 с). Деталь Pedals ванили /// пробовали - «тоже не нужен» (01.10).
/// не годится - ей нужны шатун и педали в модели.
/// Дым и огонь (розовые кубы - частицы без материалов) убраны в vehicles.xml и префабе. /// Дым и огонь (розовые кубы - частицы без материалов) убраны в vehicles.xml и префабе.
/// </summary> /// </summary>
public static class BoneSteedEngine public static class BoneSteedEngine
{ {
public const string PedalSound = "bicycle_pedal";
static readonly Dictionary<int, float> pedalTimers = new Dictionary<int, float>();
public static bool Is(VehiclePart part) => part?.vehicle != null && BoneSteed.Is(part.vehicle.entity); public static bool Is(VehiclePart part) => part?.vehicle != null && BoneSteed.Is(part.vehicle.entity);
public static bool HasBlood(Vehicle v) => BoneSteedFuel.FuelOf(v) > 0f; public static bool HasBlood(Vehicle v) => BoneSteedFuel.FuelOf(v) > 0f;
public static void Pedal(VPEngine engine, float dt)
{
Vehicle v = engine.vehicle;
EntityVehicle e = v.entity;
if (e == null || e.isEntityRemote || !e.HasDriver || !engine.isRunning ||
v.CurrentMotorTorquePercent <= 0f || v.CurrentForwardVelocity <= 0.3f)
{
pedalTimers.Remove(e != null ? e.entityId : 0);
return;
}
pedalTimers.TryGetValue(e.entityId, out float t);
t += dt;
if (t > (v.IsTurbo ? 0.55f : 0.75f))
{
e.PlayOneShot(PedalSound);
t = 0f;
}
pedalTimers[e.entityId] = t;
}
} }
[HarmonyPatch(typeof(VPEngine), nameof(VPEngine.startEngine))] [HarmonyPatch(typeof(VPEngine), nameof(VPEngine.startEngine))]
@@ -67,7 +42,6 @@ namespace NecromancerTome
__instance.stopEngine(true); __instance.stopEngine(true);
else if (!__instance.isRunning && blood && v.entity.HasDriver && !__instance.IsBroken()) else if (!__instance.isRunning && blood && v.entity.HasDriver && !__instance.IsBroken())
__instance.startEngine(); __instance.startEngine();
BoneSteedEngine.Pedal(__instance, _dt);
} }
} }
Binary file not shown.
Binary file not shown.