8enum CarHeadlightBulbsState
24enum ECarOperationalState
33enum CarEngineSoundState
53enum EVehicleDebugOutputType
57 DAMAGE_CONSIDERED = 2,
65 static ref array<ref CrashDebugData> m_CrashData =
new array<ref CrashDebugData>;
66 static ref CrashDebugData m_CrashDataPoint;
68 static void SendData(PlayerBase player)
76 g_Game.RPCSingleParam(player,
ERPCs.DIAG_VEHICLES_DUMP_CRASH_DATA_CONTENTS,
new Param1<array<ref CrashDebugData>>(m_CrashData),
true, player.GetIdentity());
80 static void DumpDataArray(array<ref CrashDebugData> dataArray)
82 Print(
"Vehicle; DamageType; Damage; Zone; Momentum; Momentum Prev; Momentum Delta; Speedometer; SpeedWorld; SpeedWorld Prev; SpeedWorld Delta; Velocity; Velocity Prev; Velocity Dot; TimeStamp (ms); CrewDamageBase; ShockTemp; DMGHealth; DMGShock");
83 foreach (CrashDebugData data:dataArray)
89 static void DumpData(CrashDebugData data)
91 string output = data.m_VehicleType+
";"+data.m_DamageType+
";"+data.m_Damage+
";"+data.m_Zone+
";"+data.m_MomentumCurr+
";"+data.m_MomentumPrev+
";"+data.m_MomentumDelta+
";"+data.m_Speedometer;
92 output +=
";"+data.m_SpeedWorld+
";"+data.m_SpeedWorldPrev+
";"+data.m_SpeedWorldDelta+
";"+data.m_VelocityCur;
93 output +=
";"+data.m_VelocityPrev+
";"+data.m_VelocityDot+
";"+data.m_Time+
";"+data.m_CrewDamageBase+
";"+data.m_ShockTemp+
";"+data.m_DMGHealth+
";"+data.m_DMGShock;
101 float m_MomentumCurr;
102 float m_MomentumPrev;
103 float m_MomentumDelta;
106 float m_SpeedWorldPrev;
107 float m_SpeedWorldDelta;
108 vector m_VelocityCur;
109 vector m_VelocityPrev;
112 float m_CrewDamageBase;
125 void CarContactData(vector _localPos, IEntity _other,
float _impulse)
127 localPos = _localPos;
139 protected override event void Write(PawnStateWriter ctx)
144 protected override event void Read(PawnStateReader ctx)
172 #ifdef DIAG_DEVELOPER
173 static EVehicleDebugOutputType DEBUG_OUTPUT_TYPE;
174 bool m_ContactCalled;
310 private const int DEBUG_MESSAGE_CLEAN_TIME_SECONDS = 10;
311 private float m_DebugMessageCleanTime;
312 private string m_DebugContactDamageMessage;
316 ECarDebugMode m_eDebugMode;
350 RegisterNetSyncVariableBool(
"m_BrakesArePressed");
351 RegisterNetSyncVariableBool(
"m_ForceUpdateLights");
352 RegisterNetSyncVariableBoolSignal(
"m_PlayCrashSoundLight");
353 RegisterNetSyncVariableBoolSignal(
"m_PlayCrashSoundHeavy");
354 RegisterNetSyncVariableInt(
"m_CarHornState", ECarHornState.OFF, ECarHornState.LONG);
355 RegisterNetSyncVariableInt(
"m_CarEngineSoundState", CarEngineSoundState.NONE, CarEngineSoundState.STOP_NO_FUEL);
357 if ( MemoryPointExists(
"ptcExhaust_end") )
360 if ( MemoryPointExists(
"ptcExhaust_start") )
362 vector exhaustStart = GetMemoryPointPos(
"ptcExhaust_start");
378 if ( MemoryPointExists(
"ptcEnginePos") )
383 if ( MemoryPointExists(
"ptcCoolantPos") )
388 if ( MemoryPointExists(
"drown_engine") )
393 if ( MemoryPointExists(
"dmgZone_engine") )
398 if ( MemoryPointExists(
"dmgZone_front") )
399 m_frontPos = GetMemoryPointPos(
"dmgZone_front");
403 if ( MemoryPointExists(
"dmgZone_back") )
404 m_backPos = GetMemoryPointPos(
"dmgZone_back");
408 if ( MemoryPointExists(
"dmgZone_fender_1_1") )
413 if ( MemoryPointExists(
"dmgZone_fender_1_2") )
418 if ( MemoryPointExists(
"dmgZone_fender_2_1") )
423 if ( MemoryPointExists(
"dmgZone_fender_2_2") )
428 if (!
g_Game.IsDedicatedServer())
456 #ifdef DIAG_DEVELOPER
458 override void FixEntity()
465 for (
int i = 5; i > 0; i--)
467 if (!
g_Game.IsMultiplayer())
476 SEffectManager.DestroyEffect(m_engineFx);
483 return "VehicleTypeCar";
533 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
611 typename e = ECarDebugMode;
615 int cnt = e.GetVariableCount();
618 for (i = 0; i < cnt; i++)
620 if (!e.GetVariableValue(null, i, val))
623 val = val +
EActions.PLAYER_BOT_INTERNAL_START;
625 string name = e.GetVariableName(i);
633 super.GetDebugActions(outputList);
638 if (super.OnAction(action_id, player, ctx))
686 typename e = ECarDebugMode;
690 int cnt = e.GetVariableCount();
693 for (i = 0; i < cnt; i++)
695 if (!e.GetVariableValue(null, i, val))
698 if ((val +
EActions.PLAYER_BOT_INTERNAL_START) == action_id)
711 super.OnVariablesSynchronized();
742 super.EEItemAttached(item, slot_name);
746 case "Reflector_1_1":
749 SetHealth(
"Reflector_1_1",
"Health", item.GetHealth());
752 case "Reflector_2_1":
755 SetHealth(
"Reflector_2_1",
"Health", item.GetHealth());
794 EntityAI bulb_L = FindAttachmentBySlotName(
"Reflector_1_1");
795 EntityAI bulb_R = FindAttachmentBySlotName(
"Reflector_2_1");
797 if (bulb_L && !bulb_L.IsRuined() && bulb_R && !bulb_R.IsRuined())
801 else if (bulb_L && !bulb_L.IsRuined())
805 else if (bulb_R && !bulb_R.IsRuined())
809 else if ((!bulb_L || bulb_L.IsRuined()) && (!bulb_R || bulb_R.IsRuined()))
843 if (
g_Game.IsServer() && EngineIsOn())
857 if (m_DamageZoneMap.Contains(
"Radiator"))
859 SetHealth(
"Radiator",
"Health", 0);
876 super.OnAttachmentRuined(attachment);
884 if (!super.CanReceiveAttachment(attachment, slotId))
888 attachment.GetInventory().GetCurrentInventoryLocation(attachmentInventoryLocation);
889 if (attachmentInventoryLocation.
GetParent() == null)
894 if (attachment && attachment.Type().IsInherited(
CarWheel))
896 string slotSelectionName;
899 switch (slotSelectionName)
901 case "wheel_spare_1":
902 case "wheel_spare_2":
913 if (!super.CanReleaseAttachment(attachment))
923 if (attachment && attachment.Type().IsInherited(
CarWheel))
926 attachment.GetInventory().GetCurrentInventoryLocation(attachmentInventoryLocation);
928 string slotSelectionName;
931 switch (slotSelectionName)
933 case "wheel_spare_1":
934 case "wheel_spare_2":
954 #ifdef DIAG_DEVELOPER
955 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.CONTACT)
960 Debug.
Log(
"--------------------------------------------------------------------");
961 m_ContactCalled =
false;
971 m_DebugMessageCleanTime += timeSlice;
972 if (m_DebugMessageCleanTime >= DEBUG_MESSAGE_CLEAN_TIME_SECONDS)
974 m_DebugMessageCleanTime = 0;
975 m_DebugContactDamageMessage =
"";
989 if (isServerOrOwner && EngineIsOn())
1018 if ( EngineGetRPM() >= EngineGetRPMRedline() )
1020 if (EngineGetRPM() > EngineGetRPMMax())
1021 AddHealth(
"Engine",
"Health", -GetMaxHealth(
"Engine",
"") * 0.05 );
1026 SetEngineZoneReceivedHit(
true);
1030 SetEngineZoneReceivedHit(
false);
1034 if (isServerOrOwner)
1060 if ( GetFluidFraction(
CarFluid.COOLANT ) < 0.5 && GetFluidFraction(
CarFluid.COOLANT ) >= 0 )
1064 AddHealth(
"Engine",
"Health", -dmg );
1065 SetEngineZoneReceivedHit(
true);
1071 if (!
g_Game.IsDedicatedServer())
1090 if (GetFluidFraction(
CarFluid.COOLANT) > 0)
1106 if ( !
g_Game.IsDedicatedServer() )
1125 if ( !
g_Game.IsDedicatedServer() )
1128 for (
int i = 0; i < WheelCount(); i++)
1132 bool haveParticle =
false;
1135 if (wheel && WheelHasContact(i))
1137 float wheelSpeed = WheelGetAngularVelocity(i) * wheel.GetRadius();
1139 vector wheelPos = WheelGetContactPosition(i);
1143 transform[2] = WheelGetDirection(i);
1145 transform[0] = transform[2] * transform[1];
1149 float bodySpeed = wheelVel[2];
1151 bool applyEffect =
false;
1152 if ((wheelSpeed > 0 && bodySpeed > 0) || (wheelSpeed < 0 && bodySpeed < 0))
1163 haveParticle =
true;
1166 g_Game.SurfaceGetType(wheelPos[0], wheelPos[2], surface);
1167 wheelPos = WorldToModel(wheelPos);
1190 if (eff && eff.IsPlaying())
1209 super.OnDriverExit(player);
1211 if (GetGear() != GetNeutralGear())
1223 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"LEGS")));
1224 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"BACK")));
1225 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"VEST")));
1226 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"HeadGear")));
1227 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"Mask")));
1228 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"BODY")));
1229 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"FEET")));
1230 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"GLOVES")));
1248 player.GiveShock(-shockTaken);
1252 if (player.m_BleedingManagerServer)
1253 player.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(
PlayerBase.m_BleedingSourcesLow[randNum]);
1258 player.GiveShock(-shockTaken);
1262 if (player.m_BleedingManagerServer)
1263 player.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(
PlayerBase.m_BleedingSourcesUp[randNum]);
1267 if (!headGear && player.m_BleedingManagerServer)
1268 player.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(
"Head");
1271 player.GiveShock(-shockTaken);
1283 cloth.DecreaseHealth(dmgTaken,
false);
1286 vector posMS = gotActionData.m_Player.WorldToModel(gotActionData.m_Player.GetPosition());
1287 gotActionData.m_Player.DamageAllLegs(dmgTaken);
1290 healthCoef =
Math.
Clamp(healthCoef, 0.0, 1.0);
1291 gotActionData.m_Player.ProcessDirectDamage(
DamageType.CUSTOM, gotActionData.m_Player,
"",
"FallDamageHealth", posMS, healthCoef);
1307#ifdef DIAG_DEVELOPER
1308 if (m_eDebugMode == ECarDebugMode.NONE)
1311 float currentRPM = EngineGetRPM();
1312 if (currentRPM < EngineGetRPMIdle())
1314 if (currentRPM < 1.0 && EngineIsOn())
1319 else if (!EngineIsOn())
1327 float speed = GetSpeedometerAbsolute();
1329 float thrustWanted = 0.0;
1330 float steeringWanted = 0.0;
1332 bool attemptSpeed =
false;
1333 float speedWanted = 0;
1335 switch (m_eDebugMode)
1337 case ECarDebugMode.FORWARD_10:
1338 attemptSpeed =
true;
1341 case ECarDebugMode.FORWARD_50:
1342 attemptSpeed =
true;
1354 bool isReverse = GetGear() == CarGear.REVERSE;
1360 if (currentRPM > EngineGetRPMRedline() * 0.8)
1362 if (thrustWantedAbs > 0.1)
1367 else if (GetGear() > CarGear.FIRST && thrustWantedAbs < 0.1)
1371 else if (GetGear() < CarGear.FIRST || (thrustWanted > 0.0 && speed < 5.0))
1373 ShiftTo(CarGear.FIRST);
1377 SetThrottle(thrustWanted);
1378 SetSteering(steeringWanted);
1381 SetBrakesActivateWithoutDriver(
false);
1387 Human driver = CrewDriver();
1391 if (driver.IsAlive())
1416 SetEngineZoneReceivedHit(
true);
1426 float brake_coef = GetBrake();
1427 if ( brake_coef > 0 )
1449 super.EEKilled(killer);
1458 #ifdef DIAG_DEVELOPER
1459 m_ContactCalled =
true;
1460 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.CONTACT)
1462 string output =
"Zone: " + zoneName +
" | Impulse:" + data.
Impulse;
1477 ccd.Insert(
new CarContactData(localPos, other, momentumDelta));
1488 if (contactZonesCount == 0)
1492 for (
int i = 0; i < contactZonesCount; ++i)
1500 #ifdef DIAG_DEVELOPER
1501 CrashDebugData.m_CrashDataPoint =
new CrashDebugData();
1502 CrashDebugData.m_CrashDataPoint.m_VehicleType =
GetDisplayName();
1503 CrashDebugData.m_CrashDataPoint.m_Damage = dmg;
1504 CrashDebugData.m_CrashDataPoint.m_Zone = zoneName;
1505 CrashDebugData.m_CrashDataPoint.m_MomentumCurr = GetMomentum();
1507 CrashDebugData.m_CrashDataPoint.m_MomentumDelta = data[0].impulse;
1508 CrashDebugData.m_CrashDataPoint.m_SpeedWorld =
GetVelocity(
this).
Length() * 3.6;
1509 CrashDebugData.m_CrashDataPoint.m_SpeedWorldPrev =
m_VelocityPrevTick.Length() * 3.6;
1511 CrashDebugData.m_CrashDataPoint.m_VelocityCur =
GetVelocity(
this);
1514 CrashDebugData.m_CrashDataPoint.m_Time =
g_Game.GetTime();
1518 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_CONSIDERED)
1520 Debug.
Log(
"--------------------------------------------------");
1523 Debug.
Log(
"zoneName : "+ zoneName);
1524 Debug.
Log(
"momentumCurr : "+ GetMomentum());
1526 Debug.
Log(
"momentumDelta : "+ data[0].impulse);
1534 Debug.
Log(
"--------------------------------------------------");
1541 #ifdef DIAG_DEVELOPER
1542 CrashDebugData.m_CrashData.Insert(CrashDebugData.m_CrashDataPoint);
1543 CrashDebugData.m_CrashDataPoint.m_Speedometer = GetSpeedometer();
1548 #ifdef DIAG_DEVELOPER
1549 CrashDebugData.m_CrashDataPoint.m_DamageType =
"Small";
1550 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_APPLIED)
1558 #ifdef DIAG_DEVELOPER
1559 CrashDebugData.m_CrashDataPoint.m_DamageType =
"Big";
1560 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_APPLIED)
1569 m_DebugContactDamageMessage +=
string.
Format(
"%1: %2\n", zoneName, dmg);
1572 ProcessDirectDamage(
DamageType.CUSTOM, null, zoneName,
"EnviroDmg",
"0 0 0", dmg, pddfFlags);
1577 if (targetEntity && targetEntity.IsTree())
1594 for (
int c = 0; c < CrewSize(); ++c )
1596 Human crew = CrewMember( c );
1605 #ifdef DIAG_DEVELOPER
1606 CrashDebugData.m_CrashDataPoint.m_CrewDamageBase = dmg;
1607 CrashDebugData.m_CrashDataPoint.m_DMGHealth = -100;
1608 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_APPLIED)
1610 Debug.
Log(
"--------------------------------------------------");
1612 Debug.
Log(
"Crew DMG Base: " + dmg);
1613 Debug.
Log(
"--------------------------------------------------");
1617 player.SetHealth(0.0);
1623 float shock =
Math.
Lerp( 50, 150, shockTemp );
1624 float hp =
Math.
Lerp( 2, 100, shockTemp );
1626 #ifdef DIAG_DEVELOPER
1627 CrashDebugData.m_CrashDataPoint.m_CrewDamageBase = dmg;
1628 CrashDebugData.m_CrashDataPoint.m_ShockTemp = shockTemp;
1629 CrashDebugData.m_CrashDataPoint.m_DMGHealth = hp;
1630 CrashDebugData.m_CrashDataPoint.m_DMGShock = shock;
1631 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_APPLIED)
1633 Debug.
Log(
"--------------------------------------------------");
1634 Debug.
Log(
"Crew DMG Base: " + dmg);
1635 Debug.
Log(
"Crew shockTemp: " + shockTemp);
1636 Debug.
Log(
"Crew DMG Health: " + hp);
1637 Debug.
Log(
"Crew DMG Shock: " + shock);
1638 Debug.
Log(
"--------------------------------------------------");
1642 player.AddHealth(
"",
"Shock", -shock );
1643 player.AddHealth(
"",
"Health", -hp );
1680 int pivotIndex = -1;
1683 if (selectionName !=
"")
1685 position = GetSelectionBasePositionLS(selectionName);
1687 int level = GetViewGeometryLevel();
1692 GetBonePivotsForAnimationSource(level, animSource, pivots);
1696 pivotIndex = pivots[0];
1707 if (player.IsCameraInsideVehicle())
1715 sound.SetPosition(ModelToWorld(position));
1716 sound.SetLocalPosition(position);
1727 case "doorscodriver":
1751 case "seatcodriver":
1771 case ECarHornState.SHORT:
1774 case ECarHornState.LONG:
1800 bool doInside =
false;
1806 case CarEngineSoundState.STARTING:
1808 sound.
SetSoundSet(
"Offroad_02_Starting_SoundSet");
1813 case CarEngineSoundState.START_OK:
1824 case CarEngineSoundState.START_NO_FUEL:
1826 sound.
SetSoundSet(
"offroad_engine_failed_start_fuel_SoundSet");
1830 case CarEngineSoundState.START_NO_BATTERY:
1832 sound.
SetSoundSet(
"offroad_engine_failed_start_battery_SoundSet");
1836 case CarEngineSoundState.START_NO_SPARKPLUG:
1838 sound.
SetSoundSet(
"offroad_engine_failed_start_sparkplugs_SoundSet");
1842 case CarEngineSoundState.STOP_OK:
1849 case CarEngineSoundState.STOP_NO_FUEL:
1864 if (player.IsCameraInsideVehicle())
1872 vector enginePos = GetEnginePos();
1875 sound.SetPosition(ModelToWorld(enginePos));
1876 sound.SetLocalPosition(enginePos);
1946 return state == ECarOperationalState.OK;
1953 if (state == ECarOperationalState.RUINED)
1958 if (state & ECarOperationalState.NO_BATTERY)
1964 if (state & ECarOperationalState.NO_IGNITER)
1970 if (state & ECarOperationalState.NO_FUEL)
1982 int state = ECarOperationalState.OK;
1988 state |= ECarOperationalState.RUINED;
1991 if (GetFluidFraction(
CarFluid.FUEL) <= 0)
1993 state |= ECarOperationalState.NO_FUEL;
2000 if (!item || (item && (item.IsRuined() || item.GetCompEM().GetEnergy() < batteryConsume)))
2001 state |= ECarOperationalState.NO_BATTERY;
2006 item = FindAttachmentBySlotName(
"SparkPlug");
2007 if (!item || (item && item.IsRuined()))
2008 state |= ECarOperationalState.NO_IGNITER;
2013 item = FindAttachmentBySlotName(
"GlowPlug");
2014 if (!item || (item && item.IsRuined()))
2015 state |= ECarOperationalState.NO_IGNITER;
2036 if (
g_Game.IsServer() && battery)
2039 battery.GetCompEM().ConsumeEnergy(batteryConsume);
2053 if (
g_Game.IsServer() && battery)
2060 CarEngineSoundState stopSoundState = CarEngineSoundState.STOP_OK;
2061 if (GetFluidFraction(
CarFluid.FUEL) <= 0)
2062 stopSoundState = CarEngineSoundState.STOP_NO_FUEL;
2066 SetEngineZoneReceivedHit(
false);
2079 if (neededItem && !neededItem.IsRuined())
2081 return neededItem.GetCompEM() && neededItem.GetCompEM().GetEnergy() > 0.0;
2127 case CarHeadlightBulbsState.LEFT:
2131 case CarHeadlightBulbsState.RIGHT:
2135 case CarHeadlightBulbsState.BOTH:
2139 vector local_pos_middle = (local_pos_left + local_pos_right) * 0.5;
2140 m_Headlight.AttachOnObject(
this, local_pos_middle);
2161 case CarGear.REVERSE:
2183 m_RearLight.AttachOnObject(
this, localPos,
"180 0 0");
2192 case CarRearLightType.BRAKES_ONLY:
2195 case CarRearLightType.REVERSE_ONLY:
2202 case CarRearLightType.BRAKES_AND_REVERSE:
2231 gear = GearboxGetMode();
2246 case CarHeadlightBulbsState.LEFT:
2250 case CarHeadlightBulbsState.RIGHT:
2254 case CarHeadlightBulbsState.BOTH:
2277 case CarGear.REVERSE:
2299 case CarRearLightType.BRAKES_ONLY:
2303 case CarRearLightType.REVERSE_ONLY:
2315 case CarRearLightType.BRAKES_AND_REVERSE:
2363 string material = ConfigGetString(
"frontReflectorMatOn");
2373 string material = ConfigGetString(
"frontReflectorMatOn");
2383 string material = ConfigGetString(
"frontReflectorMatOff");
2393 string material = ConfigGetString(
"frontReflectorMatOff");
2403 string material = ConfigGetString(
"ReverseReflectorMatOn");
2414 string material = ConfigGetString(
"ReverseReflectorMatOff");
2425 string material = ConfigGetString(
"brakeReflectorMatOn");
2436 string material = ConfigGetString(
"brakeReflectorMatOff");
2447 string material = ConfigGetString(
"TailReflectorMatOn");
2448 string materialOff = ConfigGetString(
"TailReflectorMatOff");
2450 if (material && materialOff)
2472 string material = ConfigGetString(
"TailReflectorMatOff");
2483 string material = ConfigGetString(
"dashboardMatOn");
2493 string material = ConfigGetString(
"dashboardMatOff");
2516 if ( !isVital || !inventory )
2521 if (!item || item.IsRuined())
2544 Leak(fluid, ammount);
2549 Leak(fluid, ammount);
2554 Leak(fluid, ammount);
2564 int radiatorHealthLevel = radiator.GetHealthLevel(
"");
2572 int engineHealthLevel = GetHealthLevel(
"Engine");
2573 m_EngineHealth = GetHealthLevelValue(engineHealthLevel,
"Engine");
2575 int fuelTankHealthLevel = GetHealthLevel(
"FuelTank");
2656 GetSelectionList(allSelections);
2658 foreach (
string selectionAll : allSelections)
2662 if (animSrc != animSource)
2667 return selectionAll;
2679 return "seat_con_1_1";
2681 case "seat_codriver":
2682 return "seat_con_2_1";
2685 return "seat_con_1_2";
2688 return "seat_con_2_2";
2713 if (conPointName.
Length() > 0)
2715 if ( MemoryPointExists(conPointName) )
2717 vector conPointMS = GetMemoryPointPos(conPointName);
2718 vector conPointWS = ModelToWorld(conPointMS);
2776 return GetSpeedometerAbsolute() > 3.5;
2781 return GetHandbrake() > 0.0;
2803 if (GetAnimationPhase(animation) > 0.5)
2825 return "carradiator";
2835 return "carradiator";
2851 if (!m_InputActionMap)
2908 Debug.
ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action" );
2910 action_array.Insert(action);
2916 ActionBase action = player.GetActionManager().GetAction(actionName);
2922 action_array.RemoveItem(action);
2928 return (
g_Game.GetPlayer() && ( !
g_Game.GetPlayer().GetCommand_Vehicle() ||
g_Game.GetPlayer().GetCommand_Vehicle().GetTransport() ==
this ) );
2933 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
2950 case "WindowFrontLeft":
2951 case "WindowFrontRight":
2970 float maxVolume = GetFluidCapacity(
CarFluid.FUEL );
3043 bool engineOn = EngineIsOn();
3051 else if (!engineOn && lightsOn)
3056 if (lightsOn && battery.GetCompEM().GetEnergy() <= 0)
3081 if (pState != ECarHornState.OFF)
3085 float noiseMultiplier = 1.0;
3086 if (pState == ECarHornState.LONG)
3087 noiseMultiplier = 2.0;
3109 string debug_output = super.GetDebugText();
3112 debug_output += m_DebugContactDamageMessage +
"\n";
3114 debug_output +=
"Entity momentum: " + GetMomentum();
3115 debug_output +=
"\nIsEngineON: " + EngineIsOn();
3117 return debug_output;
3181 ent.GetInventory().CreateInInventory(
"LargeGasCanister");
3187 ent.GetInventory().CreateInInventory(
"LargeGasCanister");
3200 return CarScriptOwnerState;
3210 auto state = CarScriptOwnerState.Cast(pState);
3214 protected override event void RewindState(PawnOwnerState pState, PawnMove pMove, inout NetworkRewindType pRewindType)
3216 auto state = CarScriptOwnerState.Cast(pState);
3224 bool isServer =
g_Game.IsServer();
3225 if (isServer || GetNetworkMoveStrategy() != NetworkMoveStrategy.PHYSICS)
Param4< int, int, string, int > TSelectableActionInfoWithColor
eBleedingSourceType GetType()
CarHornActionData ActionData ActionCarHornShort()
void ActionManagerBase(PlayerBase player)
map< typename, ref array< ActionBase_Basic > > TInputActionMap
ActionPushCarCB ActionPushObjectCB ActionPushCar()
void AddAction(typename actionName)
@ OK
0 - No error. Can be returned from any call.
enum EBoatEffects STOP_OK
enum EBoatEffects NO_FUEL
enum EBoatEffects NO_IGNITER
enum EBoatEffects START_NO_FUEL
enum EBoatEffects START_OK
CarAutomaticGearboxMode
Enumerated automatic gearbox modes. (native, do not change or extend)
CarSoundCtrl
Car's sound controller list. (native, do not change or extend)
CarFluid
Type of vehicle's fluid. (native, do not change or extend)
CarGearboxType
Enumerated gearbox types. (native, do not change or extend)
enum CarDoorState START_NO_BATTERY
override event void Read(PawnStateReader ctx)
enum CarDoorState NO_BATTERY
enum CarDoorState STARTING
enum CarDoorState REVERSE_ONLY
enum CarDoorState BRAKES_ONLY
override event void Write(PawnStateWriter ctx)
enum CarDoorState START_NO_SPARKPLUG
class EconomyOutputStrings OFF
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
DamageType
exposed from C++ (do not change)
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
static string GetDisplayName(int liquid_type)
class NoiseSystem NoiseParams()
const int LOW_SPEED_VALUE
const int HEALTH_HIGH_SPEED_VALUE
const int HIGH_SPEED_VALUE
const int HEALTH_LOW_SPEED_VALUE
float GetEnviroHeatComfortOverride()
string m_EngineStartOK
Sounds.
override void OnGearChanged(int newGear, int oldGear)
override event void ObtainState(PawnOwnerState pState)
override void OnContact(string zoneName, vector localPos, IEntity other, Contact data)
WARNING: Can be called very frequently in one frame, use with caution.
ref EffVehicleSmoke m_engineFx
float m_FuelAmmount
keeps ammount of each fluid
EffectSound CreateSoundForAnimationSource(string animSource)
void RemoveAction(typename actionName)
int m_CarEngineLastSoundState
override vector GetDefaultHitPosition()
string GetActionCompNameOil()
void BrakeAndReverseRearLight()
override void MarkCrewMemberUnconscious(int crewMemberIndex)
int m_CarEngineSoundState
static string m_LeftHeadlightPoint
float GetBatteryRechargeRate()
void BrakeLightsShineOn()
void CleanupSound(EffectSound sound)
override void EEHitBy(TotalDamageResult damageResult, int damageType, EntityAI source, int component, string dmgZone, string ammo, vector modelPos, float speedCoef)
float GetActionDistanceOil()
void LeftFrontLightShineOn()
override void MarkCrewMemberDead(int crewMemberIndex)
static string m_ReverseLightPoint
void UpdateLightsServer(int newGear=-1)
vector GetEnginePointPosWS()
void LeftFrontLightShineOff()
static const int SELECTION_ID_TAIL_LIGHT_L
bool IsVitalTruckBattery()
static float DROWN_ENGINE_THRESHOLD
void SetEngineStarted(bool started)
void RightFrontLightShineOff()
static const int SELECTION_ID_BRAKE_LIGHT_R
override event GetMoveType()
void CheckVitalItem(bool isVital, string slot_name)
override void EEItemAttached(EntityAI item, string slot_name)
void HandleCarHornSound(ECarHornState pState)
static ref map< typename, ref TInputActionMap > m_CarTypeActionsMap
override void OnFluidChanged(CarFluid fluid, float newValue, float oldValue)
bool GetCrashHeavySound()
ref EffectSound m_CrashSoundHeavy
void ReverseLightsShineOn()
float m_EnviroHeatComfortOverride
bool CheckOperationalState()
void UpdateHeadlightState()
float m_BatteryEnergyStartMin
DEPRECATED.
void UpdateBattery(ItemBase battery)
static const int SELECTION_ID_BRAKE_LIGHT_L
override float GetLiquidThroughputCoef()
void ForceUpdateLightsEnd()
void HandleEngineSound(CarEngineSoundState state)
static string m_LeftHeadlightTargetPoint
void LeakFluid(CarFluid fluid)
override bool CanPutIntoHands(EntityAI parent)
ref EffectSound m_CarHornSoundEffect
bool IsScriptedLightsOn()
Proper way to get if light is swiched on.
override int Get3rdPersonCameraType()
camera type
static const string MEMORY_POINT_NAME_CAR_HORN
static const int SELECTION_ID_REVERSE_LIGHT_R
static string m_DrownEnginePoint
vector m_VelocityPrevTick
override event void RewindState(PawnOwnerState pState, PawnMove pMove, inout NetworkRewindType pRewindType)
vector Get_1_1PointPosWS()
override void OnEngineStop()
Gets called everytime the engine stops.
static string m_RightHeadlightTargetPoint
override void OnEngineStart()
Gets called everytime the engine starts.
void TailLightsShineOff()
override float OnSound(CarSoundCtrl ctrl, float oldValue)
override bool OnBeforeLightOn()
override void OnUpdate(float dt)
ref EffVehicleSmoke m_coolantFx
Particles.
int CheckOperationalRequirements()
override string GetVehicleType()
ref EffectSound m_WindowSmall
void PlayCrashHeavySound()
float GetBatteryConsumption()
string GetDoorSelectionNameFromSeatPos(int posIdx)
NoiseSystem m_NoiseSystem
ref NoiseParams m_NoisePar
void CreateCarDestroyedEffect()
float m_BatteryContinuousConsume
string m_CarHornShortSoundName
void PlaySoundEx(string soundset, EffectSound sound, out bool soundbool)
int GetCrewIndex(string selection)
bool GetCrashLightSound()
string m_CarDoorCloseSound
override bool CanReleaseAttachment(EntityAI attachment)
override bool OnBeforeEngineStart()
string m_CarHornLongSoundName
override void OnAttachmentRuined(EntityAI attachment)
string m_CarSeatShiftInSound
static const int SELECTION_ID_REVERSE_LIGHT_L
vector GetCoolantPtcPosWS()
vector Get_2_1PointPosWS()
void HandleSeatAdjustmentSound(string animSource, float phase)
override void OnVariablesSynchronized()
CarRearLightBase m_RearLight
string GetAnimSourceFromSelection(string selection)
string m_EngineStartBattery
override void OnInput(float dt)
override bool DetectFlipped(VehicleFlippedContext ctx)
void CarPartsHealthCheck()
void SetCarHornState(int pState)
void SynchCrashHeavySound(bool play)
override void EEHealthLevelChanged(int oldLevel, int newLevel, string zone)
string GetSelectionFromAnimSource(string animSource)
override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
string GetActionCompNameCoolant()
override void EEItemDetached(EntityAI item, string slot_name)
CarLightBase CreateFrontLight()
void CheckContactCache()
Responsible for damaging the car according to contact events from OnContact.
void OnVehicleJumpOutServer(GetOutTransportActionData gotActionData)
void SynchCrashLightSound(bool play)
override void OnAnimationPhaseStarted(string animSource, float phase)
static float DROWN_ENGINE_DAMAGE
void GenerateCarHornAINoise(int pState)
override void EEDelete(EntityAI parent)
void PlayCrashLightSound()
static const int SELECTION_ID_FRONT_LIGHT_R
string m_CarDoorOpenSound
CarDoorState TranslateAnimationPhaseToCarDoorState(string animation)
void HandleDoorsSound(string animSource, float phase)
void ReverseLightsShineOff()
ref EffectSound m_CrashSoundLight
const float BATTERY_UPDATE_DELAY
override event GetOwnerStateType()
vector Get_1_2PointPosWS()
override void EEKilled(Object killer)
override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
static const int SELECTION_ID_TAIL_LIGHT_R
float GetBatteryRuntimeConsumption()
ref EffectSound m_WindowLarge
ref EffVehicleSmoke m_exhaustFx
override void OnDriverExit(Human player)
static string m_RightHeadlightPoint
bool OnBeforeSwitchLights(bool toOn)
static vector m_DrownEnginePos
override bool CanReceiveAttachment(EntityAI attachment, int slotId)
vector GetBackPointPosWS()
void SpawnUniversalParts()
string m_CarSeatShiftOutSound
float GetActionDistanceBrakes()
void AddAction(typename actionName)
string GetDoorConditionPointFromSelection(string selection)
string GetActionCompNameBrakes()
bool m_PlayCrashSoundLight
ref array< int > m_WheelSmokePtcFx
vector Get_2_2PointPosWS()
float GetPushForceCoefficientMultiplier()
void CheckVitalItem(bool isVital, int slotId)
override bool CanReachSeatFromDoors(string pSeatSelection, vector pFromPos, float pDistance=1.0)
CarRearLightBase CreateRearLight()
string GetDoorInvSlotNameFromSeatPos(int posIdx)
void SpawnAdditionalItems()
ref EffectSound m_PreStartSound
void RightFrontLightShineOn()
ref CarContactCache m_ContactCache
override void GetActions(typename action_input_type, out array< ActionBase_Basic > actions)
bool CanManipulateSpareWheel(string slotSelectionName)
void SetCarEngineSoundState(CarEngineSoundState pState)
vector GetFrontPointPosWS()
static const int SELECTION_ID_DASHBOARD_LIGHT
void DamageCrew(float dmg)
Responsible for damaging crew in a car crash.
void ForceUpdateLightsStart()
override void EEOnCECreate()
override void UpdateLights(int new_gear=-1)
override bool IsInventoryVisible()
void PlaySound(string soundset, EffectSound sound, out bool soundbool)
void BrakeLightsShineOff()
override void EOnPostSimulate(IEntity other, float timeSlice)
ref array< ref EffWheelSmoke > m_WheelSmokeFx
TInputActionMap m_InputActionMap
void UpdateLightsClient(int newGear=-1)
bool m_PlayCrashSoundHeavy
void ToggleHeadlights()
Switches headlights on/off, including the illumination of the control panel and synchronizes this cha...
int GetCarDoorsState(string slotType)
static const int SELECTION_ID_FRONT_LIGHT_L
float GetActionDistanceCoolant()
override CarRearLightBase CreateRearLight()
override string GetDoorConditionPointFromSelection(string selection)
override CarLightBase CreateFrontLight()
override bool IsVitalGlowPlug()
override bool IsVitalTruckBattery()
override string GetAnimSourceFromSelection(string selection)
override void SetActions()
override bool IsVitalRadiator()
override bool IsVitalCarBattery()
override bool IsVitalSparkPlug()
bool CanManipulateSpareWheel(string slotSelectionName)
Super root of all classes in Enforce script.
static const int DAYZCAMERA_3RD_VEHICLE
generic vehicle 3rd person
static void LogError(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message as error message.
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
static void ActionLog(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
const float WHEEL_SMOKE_THRESHOLD
void SetSurface(string surface)
override void Stop()
Stops all elements this effect consists of.
override void Start()
Plays all elements this effect consists of.
override void SetCurrentLocalPosition(vector pos, bool updateCached=true)
Set the current local position of the managed Particle.
void SetSoundSet(string snd)
Set soundset for the sound.
override void SetAutodestroy(bool auto_destroy)
Sets whether Effect automatically cleans up when it stops.
void SetSoundWaveKind(WaveKind wave_kind)
Set WaveKind for the sound.
void SetSoundFadeOut(float fade_out)
Set the sound fade out duration.
bool IsSoundPlaying()
Get whether EffectSound is currently playing.
override void SetParent(Object parent_obj, int pivot)
Set parent for the sound to follow.
bool SoundPlay()
Plays sound.
Wrapper class for managing sound through SEffectManager.
EntityAI CreateInInventory(string type)
creates entity somewhere in inventory
proto native EntityAI FindAttachment(int slot)
Returns attached entity in slot (you can use InventorySlots.GetSlotIdFromString(name) to get slot id)
script counterpart to engine's class Inventory
proto native bool IsControllingVehicle()
proto native EntityAI GetParent()
returns parent of current inventory location
proto native int GetSlot()
returns slot id if current type is Attachment
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
static proto bool GetSelectionForSlotId(int slot_Id, out string selection)
provides access to slot configuration
static bool IsActionLogEnable()
static float GetNoiseReduction(Weather weather)
static EffectSound PlaySoundCachedParams(string sound_set, vector position, float play_fade_in=0, float stop_fade_out=0, bool loop=false)
Create and play an EffectSound, using or creating cached SoundParams.
static int PlayOnObject(notnull Effect eff, Object obj, vector local_pos="0 0 0", vector local_ori="0 0 0", bool force_rotation_relative_to_world=false)
Play an Effect.
static int CreateParticleServer(vector pos, EffecterParameters parameters)
returns unique effecter ID
static void Stop(int effect_id)
Stops the Effect.
static bool IsEffectExist(int effect_id)
Checks whether an Effect ID is registered in SEffectManager.
static int EffectRegister(Effect effect)
Registers Effect in SEffectManager.
static void DestroyEffect(Effect effect)
Unregisters, stops and frees the Effect.
Manager class for managing Effect (EffectParticle, EffectSound)
static int GetWheelParticleID(string surface_name)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native float Length()
Returns length of vector (magnitude)
static float Dot(vector v1, vector v2)
Returns Dot product of vector v1 and vector v2.
static vector Direction(vector p1, vector p2)
Returns direction vector from point p1 to point p2.
proto vector InvMultiply3(vector mat[3])
Invert-transforms vector.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
DayZPlayerConstants
defined in C++
Serializer ParamsReadContext
const int CARS_FLUIDS_TICK
proto void Print(void var)
Prints content of variable to console/log.
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
array< string > TStringArray
void Obsolete(string msg="")
EntityEvent
Entity events for event-mask, or throwing event from code.
const float DAMAGE_RUINED_VALUE
const float DAMAGE_DAMAGED_VALUE
const float LIQUID_THROUGHPUT_CAR_DEFAULT
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static proto int AbsInt(int i)
Returns absolute value.
static proto float RandomFloat(float min, float max)
Returns a random float number between and min[inclusive] and max[exclusive].
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...
static proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].
static proto float AbsFloat(float f)
Returns absolute value.
static int RandomIntInclusive(int min, int max)
Returns a random int number between and min [inclusive] and max [inclusive].
@ NONE
body is not in simulation, nor in collision world
proto native vector dBodyGetVelocityAt(notnull IEntity body, vector globalpos)
proto native vector GetVelocity(notnull IEntity ent)
Returns linear velocity.
proto native void dBodyActive(notnull IEntity ent, ActiveState activeState)
proto native float dBodyGetMass(notnull IEntity ent)
const int SAT_DEBUG_ACTION
vector GetPosition()
Get the world position of the Effect.
proto native int Length()
Returns length of string.
static proto string Format(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
Gets n-th character from string.
proto int ToLower()
Changes string to lowercase. Returns length.
const float VEHICLE_FLIP_ANGLE_TOLERANCE
const bool VEHICLE_FLIP_WHEELS_LIMITED
Angle of the vehicle from the normal of the surface under the vehicle.