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 GetGame().
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)
163 #ifdef DIAG_DEVELOPER
164 static EVehicleDebugOutputType DEBUG_OUTPUT_TYPE;
165 bool m_ContactCalled;
303 private const int DEBUG_MESSAGE_CLEAN_TIME_SECONDS = 10;
304 private float m_DebugMessageCleanTime;
305 private string m_DebugContactDamageMessage;
339 RegisterNetSyncVariableBool(
"m_HeadlightsOn");
340 RegisterNetSyncVariableBool(
"m_BrakesArePressed");
341 RegisterNetSyncVariableBool(
"m_ForceUpdateLights");
342 RegisterNetSyncVariableBoolSignal(
"m_PlayCrashSoundLight");
343 RegisterNetSyncVariableBoolSignal(
"m_PlayCrashSoundHeavy");
344 RegisterNetSyncVariableInt(
"m_CarHornState", ECarHornState.OFF, ECarHornState.LONG);
345 RegisterNetSyncVariableInt(
"m_CarEngineSoundState", CarEngineSoundState.NONE, CarEngineSoundState.STOP_NO_FUEL);
347 if ( MemoryPointExists(
"ptcExhaust_end") )
350 if ( MemoryPointExists(
"ptcExhaust_start") )
352 vector exhaustStart = GetMemoryPointPos(
"ptcExhaust_start");
368 if ( MemoryPointExists(
"ptcEnginePos") )
373 if ( MemoryPointExists(
"ptcCoolantPos") )
378 if ( MemoryPointExists(
"drown_engine") )
383 if ( MemoryPointExists(
"dmgZone_engine") )
388 if ( MemoryPointExists(
"dmgZone_front") )
389 m_frontPos = GetMemoryPointPos(
"dmgZone_front");
393 if ( MemoryPointExists(
"dmgZone_back") )
394 m_backPos = GetMemoryPointPos(
"dmgZone_back");
398 if ( MemoryPointExists(
"dmgZone_fender_1_1") )
403 if ( MemoryPointExists(
"dmgZone_fender_1_2") )
408 if ( MemoryPointExists(
"dmgZone_fender_2_1") )
413 if ( MemoryPointExists(
"dmgZone_fender_2_2") )
418 if (!
GetGame().IsDedicatedServer())
446 #ifdef DIAG_DEVELOPER
448 override void FixEntity()
455 for (
int i = 5; i > 0; i--)
457 if (!
GetGame().IsMultiplayer())
466 SEffectManager.DestroyEffect(m_engineFx);
473 return "VehicleTypeCar";
523 super.EEHitBy(damageResult, damageType, source,
component, dmgZone, ammo, modelPos, speedCoef);
600 super.GetDebugActions(outputList);
605 if (super.OnAction(action_id, player, ctx))
657 super.OnVariablesSynchronized();
688 super.EEItemAttached(item, slot_name);
692 case "Reflector_1_1":
695 SetHealth(
"Reflector_1_1",
"Health", item.GetHealth());
698 case "Reflector_2_1":
701 SetHealth(
"Reflector_2_1",
"Health", item.GetHealth());
740 EntityAI bulb_L = FindAttachmentBySlotName(
"Reflector_1_1");
741 EntityAI bulb_R = FindAttachmentBySlotName(
"Reflector_2_1");
743 if (bulb_L && !bulb_L.IsRuined() && bulb_R && !bulb_R.IsRuined())
747 else if (bulb_L && !bulb_L.IsRuined())
751 else if (bulb_R && !bulb_R.IsRuined())
755 else if ((!bulb_L || bulb_L.IsRuined()) && (!bulb_R || bulb_R.IsRuined()))
789 if (
GetGame().IsServer() && EngineIsOn())
803 if (m_DamageZoneMap.Contains(
"Radiator"))
805 SetHealth(
"Radiator",
"Health", 0);
822 super.OnAttachmentRuined(attachment);
830 if (!super.CanReceiveAttachment(attachment, slotId))
834 attachment.GetInventory().GetCurrentInventoryLocation(attachmentInventoryLocation);
835 if (attachmentInventoryLocation.
GetParent() == null)
840 if (attachment && attachment.Type().IsInherited(
CarWheel))
842 string slotSelectionName;
845 switch (slotSelectionName)
847 case "wheel_spare_1":
848 case "wheel_spare_2":
859 if (!super.CanReleaseAttachment(attachment))
869 if (attachment && attachment.Type().IsInherited(
CarWheel))
872 attachment.GetInventory().GetCurrentInventoryLocation(attachmentInventoryLocation);
874 string slotSelectionName;
877 switch (slotSelectionName)
879 case "wheel_spare_1":
880 case "wheel_spare_2":
900 #ifdef DIAG_DEVELOPER
901 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.CONTACT)
906 Debug.
Log(
"--------------------------------------------------------------------");
907 m_ContactCalled =
false;
917 m_DebugMessageCleanTime += timeSlice;
918 if (m_DebugMessageCleanTime >= DEBUG_MESSAGE_CLEAN_TIME_SECONDS)
920 m_DebugMessageCleanTime = 0;
921 m_DebugContactDamageMessage =
"";
935 if (isServerOrOwner && EngineIsOn())
964 if ( EngineGetRPM() >= EngineGetRPMRedline() )
966 if (EngineGetRPM() > EngineGetRPMMax())
967 AddHealth(
"Engine",
"Health", -GetMaxHealth(
"Engine",
"") * 0.05 );
972 SetEngineZoneReceivedHit(
true);
976 SetEngineZoneReceivedHit(
false);
1006 if ( GetFluidFraction(
CarFluid.COOLANT ) < 0.5 && GetFluidFraction(
CarFluid.COOLANT ) >= 0 )
1010 AddHealth(
"Engine",
"Health", -dmg );
1011 SetEngineZoneReceivedHit(
true);
1017 if (!
GetGame().IsDedicatedServer())
1036 if (GetFluidFraction(
CarFluid.COOLANT) > 0)
1052 if ( !
GetGame().IsDedicatedServer() )
1071 if ( !
GetGame().IsDedicatedServer() )
1074 for (
int i = 0; i < WheelCount(); i++)
1078 bool haveParticle =
false;
1081 if (wheel && WheelHasContact(i))
1083 float wheelSpeed = WheelGetAngularVelocity(i) * wheel.GetRadius();
1085 vector wheelPos = WheelGetContactPosition(i);
1089 transform[2] = WheelGetDirection(i);
1091 transform[0] = transform[2] * transform[1];
1095 float bodySpeed = wheelVel[2];
1097 bool applyEffect =
false;
1098 if ((wheelSpeed > 0 && bodySpeed > 0) || (wheelSpeed < 0 && bodySpeed < 0))
1109 haveParticle =
true;
1113 wheelPos = WorldToModel(wheelPos);
1136 if (eff && eff.IsPlaying())
1155 super.OnDriverExit(player);
1157 if (GetGear() != GetNeutralGear())
1169 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"LEGS")));
1170 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"BACK")));
1171 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"VEST")));
1172 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"HeadGear")));
1173 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"Mask")));
1174 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"BODY")));
1175 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"FEET")));
1176 equippedClothes.Insert(
ClothingBase.Cast(player.GetItemOnSlot(
"GLOVES")));
1194 player.GiveShock(-shockTaken);
1198 if (player.m_BleedingManagerServer)
1199 player.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(
PlayerBase.m_BleedingSourcesLow[randNum]);
1204 player.GiveShock(-shockTaken);
1208 if (player.m_BleedingManagerServer)
1209 player.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(
PlayerBase.m_BleedingSourcesUp[randNum]);
1213 if (!headGear && player.m_BleedingManagerServer)
1214 player.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(
"Head");
1217 player.GiveShock(-shockTaken);
1229 cloth.DecreaseHealth(dmgTaken,
false);
1232 vector posMS = gotActionData.m_Player.WorldToModel(gotActionData.m_Player.GetPosition());
1233 gotActionData.m_Player.DamageAllLegs(dmgTaken);
1236 healthCoef =
Math.
Clamp(healthCoef, 0.0, 1.0);
1237 gotActionData.m_Player.ProcessDirectDamage(
DamageType.CUSTOM, gotActionData.m_Player,
"",
"FallDamageHealth", posMS, healthCoef);
1251 Human driver = CrewDriver();
1252 if (driver && !driver.IsControllingVehicle())
1255 if (driver.IsAlive())
1280 SetEngineZoneReceivedHit(
true);
1290 float brake_coef = GetBrake();
1291 if ( brake_coef > 0 )
1319 super.EEKilled(killer);
1328 #ifdef DIAG_DEVELOPER
1329 m_ContactCalled =
true;
1330 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.CONTACT)
1332 string output =
"Zone: " + zoneName +
" | Impulse:" + data.
Impulse;
1347 ccd.Insert(
new CarContactData(localPos, other, momentumDelta));
1358 if (contactZonesCount == 0)
1362 for (
int i = 0; i < contactZonesCount; ++i)
1370 #ifdef DIAG_DEVELOPER
1371 CrashDebugData.m_CrashDataPoint =
new CrashDebugData();
1372 CrashDebugData.m_CrashDataPoint.m_VehicleType =
GetDisplayName();
1373 CrashDebugData.m_CrashDataPoint.m_Damage = dmg;
1374 CrashDebugData.m_CrashDataPoint.m_Zone = zoneName;
1375 CrashDebugData.m_CrashDataPoint.m_MomentumCurr = GetMomentum();
1377 CrashDebugData.m_CrashDataPoint.m_MomentumDelta = data[0].impulse;
1378 CrashDebugData.m_CrashDataPoint.m_SpeedWorld =
GetVelocity(
this).
Length() * 3.6;
1379 CrashDebugData.m_CrashDataPoint.m_SpeedWorldPrev =
m_VelocityPrevTick.Length() * 3.6;
1381 CrashDebugData.m_CrashDataPoint.m_VelocityCur =
GetVelocity(
this);
1388 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_CONSIDERED)
1390 Debug.
Log(
"--------------------------------------------------");
1393 Debug.
Log(
"zoneName : "+ zoneName);
1394 Debug.
Log(
"momentumCurr : "+ GetMomentum());
1396 Debug.
Log(
"momentumDelta : "+ data[0].impulse);
1404 Debug.
Log(
"--------------------------------------------------");
1411 #ifdef DIAG_DEVELOPER
1412 CrashDebugData.m_CrashData.Insert(CrashDebugData.m_CrashDataPoint);
1413 CrashDebugData.m_CrashDataPoint.m_Speedometer = GetSpeedometer();
1418 #ifdef DIAG_DEVELOPER
1419 CrashDebugData.m_CrashDataPoint.m_DamageType =
"Small";
1420 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_APPLIED)
1428 #ifdef DIAG_DEVELOPER
1429 CrashDebugData.m_CrashDataPoint.m_DamageType =
"Big";
1430 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_APPLIED)
1439 m_DebugContactDamageMessage +=
string.
Format(
"%1: %2\n", zoneName, dmg);
1442 ProcessDirectDamage(
DamageType.CUSTOM, null, zoneName,
"EnviroDmg",
"0 0 0", dmg, pddfFlags);
1447 if (targetEntity && targetEntity.IsTree())
1464 for (
int c = 0; c < CrewSize(); ++c )
1466 Human crew = CrewMember( c );
1475 #ifdef DIAG_DEVELOPER
1476 CrashDebugData.m_CrashDataPoint.m_CrewDamageBase = dmg;
1477 CrashDebugData.m_CrashDataPoint.m_DMGHealth = -100;
1478 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_APPLIED)
1480 Debug.
Log(
"--------------------------------------------------");
1482 Debug.
Log(
"Crew DMG Base: " + dmg);
1483 Debug.
Log(
"--------------------------------------------------");
1487 player.SetHealth(0.0);
1493 float shock =
Math.
Lerp( 50, 150, shockTemp );
1494 float hp =
Math.
Lerp( 2, 100, shockTemp );
1496 #ifdef DIAG_DEVELOPER
1497 CrashDebugData.m_CrashDataPoint.m_CrewDamageBase = dmg;
1498 CrashDebugData.m_CrashDataPoint.m_ShockTemp = shockTemp;
1499 CrashDebugData.m_CrashDataPoint.m_DMGHealth = hp;
1500 CrashDebugData.m_CrashDataPoint.m_DMGShock = shock;
1501 if (DEBUG_OUTPUT_TYPE & EVehicleDebugOutputType.DAMAGE_APPLIED)
1503 Debug.
Log(
"--------------------------------------------------");
1504 Debug.
Log(
"Crew DMG Base: " + dmg);
1505 Debug.
Log(
"Crew shockTemp: " + shockTemp);
1506 Debug.
Log(
"Crew DMG Health: " + hp);
1507 Debug.
Log(
"Crew DMG Shock: " + shock);
1508 Debug.
Log(
"--------------------------------------------------");
1512 player.AddHealth(
"",
"Shock", -shock );
1513 player.AddHealth(
"",
"Health", -hp );
1550 int pivotIndex = -1;
1553 if (selectionName !=
"")
1555 position = GetSelectionBasePositionLS(selectionName);
1557 int level = GetViewGeometryLevel();
1562 GetBonePivotsForAnimationSource(level, animSource, pivots);
1566 pivotIndex = pivots[0];
1577 if (player.IsCameraInsideVehicle())
1585 sound.SetPosition(ModelToWorld(position));
1586 sound.SetLocalPosition(position);
1597 case "doorscodriver":
1621 case "seatcodriver":
1641 case ECarHornState.SHORT:
1644 case ECarHornState.LONG:
1670 bool doInside =
false;
1676 case CarEngineSoundState.STARTING:
1678 sound.
SetSoundSet(
"Offroad_02_Starting_SoundSet");
1683 case CarEngineSoundState.START_OK:
1694 case CarEngineSoundState.START_NO_FUEL:
1696 sound.
SetSoundSet(
"offroad_engine_failed_start_fuel_SoundSet");
1700 case CarEngineSoundState.START_NO_BATTERY:
1702 sound.
SetSoundSet(
"offroad_engine_failed_start_battery_SoundSet");
1706 case CarEngineSoundState.START_NO_SPARKPLUG:
1708 sound.
SetSoundSet(
"offroad_engine_failed_start_sparkplugs_SoundSet");
1712 case CarEngineSoundState.STOP_OK:
1719 case CarEngineSoundState.STOP_NO_FUEL:
1734 if (player.IsCameraInsideVehicle())
1742 vector enginePos = GetEnginePos();
1745 sound.SetPosition(ModelToWorld(enginePos));
1746 sound.SetLocalPosition(enginePos);
1815 return state == ECarOperationalState.OK;
1822 if (state == ECarOperationalState.RUINED)
1827 if (state & ECarOperationalState.NO_BATTERY)
1833 if (state & ECarOperationalState.NO_IGNITER)
1839 if (state & ECarOperationalState.NO_FUEL)
1851 int state = ECarOperationalState.OK;
1857 state |= ECarOperationalState.RUINED;
1860 if (GetFluidFraction(
CarFluid.FUEL) <= 0)
1862 state |= ECarOperationalState.NO_FUEL;
1869 if (!item || (item && (item.IsRuined() || item.GetCompEM().GetEnergy() < batteryConsume)))
1870 state |= ECarOperationalState.NO_BATTERY;
1875 item = FindAttachmentBySlotName(
"SparkPlug");
1876 if (!item || (item && item.IsRuined()))
1877 state |= ECarOperationalState.NO_IGNITER;
1882 item = FindAttachmentBySlotName(
"GlowPlug");
1883 if (!item || (item && item.IsRuined()))
1884 state |= ECarOperationalState.NO_IGNITER;
1905 if (
GetGame().IsServer() && battery)
1908 battery.GetCompEM().ConsumeEnergy(batteryConsume);
1922 if (
GetGame().IsServer() && battery)
1929 CarEngineSoundState stopSoundState = CarEngineSoundState.STOP_OK;
1930 if (GetFluidFraction(
CarFluid.FUEL) <= 0)
1931 stopSoundState = CarEngineSoundState.STOP_NO_FUEL;
1935 SetEngineZoneReceivedHit(
false);
1985 case CarHeadlightBulbsState.LEFT:
1989 case CarHeadlightBulbsState.RIGHT:
1993 case CarHeadlightBulbsState.BOTH:
1997 vector local_pos_middle = (local_pos_left + local_pos_right) * 0.5;
1998 m_Headlight.AttachOnObject(
this, local_pos_middle);
2019 case CarGear.REVERSE:
2041 m_RearLight.AttachOnObject(
this, localPos,
"180 0 0");
2050 case CarRearLightType.BRAKES_ONLY:
2053 case CarRearLightType.REVERSE_ONLY:
2060 case CarRearLightType.BRAKES_AND_REVERSE:
2089 gear = GearboxGetMode();
2104 case CarHeadlightBulbsState.LEFT:
2108 case CarHeadlightBulbsState.RIGHT:
2112 case CarHeadlightBulbsState.BOTH:
2135 case CarGear.REVERSE:
2157 case CarRearLightType.BRAKES_ONLY:
2161 case CarRearLightType.REVERSE_ONLY:
2173 case CarRearLightType.BRAKES_AND_REVERSE:
2221 string material = ConfigGetString(
"frontReflectorMatOn");
2231 string material = ConfigGetString(
"frontReflectorMatOn");
2241 string material = ConfigGetString(
"frontReflectorMatOff");
2251 string material = ConfigGetString(
"frontReflectorMatOff");
2261 string material = ConfigGetString(
"ReverseReflectorMatOn");
2272 string material = ConfigGetString(
"ReverseReflectorMatOff");
2283 string material = ConfigGetString(
"brakeReflectorMatOn");
2294 string material = ConfigGetString(
"brakeReflectorMatOff");
2305 string material = ConfigGetString(
"TailReflectorMatOn");
2306 string materialOff = ConfigGetString(
"TailReflectorMatOff");
2308 if (material && materialOff)
2330 string material = ConfigGetString(
"TailReflectorMatOff");
2341 string material = ConfigGetString(
"dashboardMatOn");
2351 string material = ConfigGetString(
"dashboardMatOff");
2373 if ( !isVital || !GetInventory() )
2376 EntityAI item = GetInventory().FindAttachment(slotId);
2378 if (!item || item.IsRuined())
2401 Leak(fluid, ammount);
2406 Leak(fluid, ammount);
2411 Leak(fluid, ammount);
2421 int radiatorHealthLevel = radiator.GetHealthLevel(
"");
2429 int engineHealthLevel = GetHealthLevel(
"Engine");
2430 m_EngineHealth = GetHealthLevelValue(engineHealthLevel,
"Engine");
2432 int fuelTankHealthLevel = GetHealthLevel(
"FuelTank");
2513 GetSelectionList(allSelections);
2515 foreach (
string selectionAll : allSelections)
2519 if (animSrc != animSource)
2524 return selectionAll;
2536 return "seat_con_1_1";
2538 case "seat_codriver":
2539 return "seat_con_2_1";
2542 return "seat_con_1_2";
2545 return "seat_con_2_2";
2570 if (conPointName.
Length() > 0)
2572 if ( MemoryPointExists(conPointName) )
2574 vector conPointMS = GetMemoryPointPos(conPointName);
2575 vector conPointWS = ModelToWorld(conPointMS);
2633 return GetSpeedometerAbsolute() > 3.5;
2638 return GetHandbrake() > 0.0;
2660 if (GetAnimationPhase(animation) > 0.5)
2682 return "carradiator";
2692 return "carradiator";
2708 if (!m_InputActionMap)
2765 Debug.
ActionLog(action.ToString() +
" -> " + ai,
this.ToString() ,
"n/a",
"Add action" );
2767 action_array.Insert(action);
2773 ActionBase action = player.GetActionManager().GetAction(actionName);
2779 action_array.RemoveItem(action);
2790 super.EEHealthLevelChanged(oldLevel,newLevel,zone);
2807 case "WindowFrontLeft":
2808 case "WindowFrontRight":
2827 float maxVolume = GetFluidCapacity(
CarFluid.FUEL );
2900 bool engineOn = EngineIsOn();
2908 else if (!engineOn && lightsOn)
2913 if (lightsOn && battery.GetCompEM().GetEnergy() <= 0)
2938 if (pState != ECarHornState.OFF)
2942 float noiseMultiplier = 1.0;
2943 if (pState == ECarHornState.LONG)
2944 noiseMultiplier = 2.0;
2966 string debug_output = super.GetDebugText();
2969 debug_output += m_DebugContactDamageMessage +
"\n";
2971 debug_output +=
"Entity momentum: " + GetMomentum();
2972 debug_output +=
"\nIsEngineON: " + EngineIsOn();
2974 return debug_output;
2980 GetInventory().CreateInInventory(
"HeadlightH7");
2981 GetInventory().CreateInInventory(
"HeadlightH7");
2982 GetInventory().CreateInInventory(
"HeadlightH7");
2983 GetInventory().CreateInInventory(
"HeadlightH7");
2987 GetInventory().CreateInInventory(
"CarBattery");
2988 GetInventory().CreateInInventory(
"CarBattery");
2993 GetInventory().CreateInInventory(
"TruckBattery");
2994 GetInventory().CreateInInventory(
"TruckBattery");
2999 GetInventory().CreateInInventory(
"CarRadiator");
3000 GetInventory().CreateInInventory(
"CarRadiator");
3005 GetInventory().CreateInInventory(
"SparkPlug");
3006 GetInventory().CreateInInventory(
"SparkPlug");
3011 GetInventory().CreateInInventory(
"GlowPlug");
3012 GetInventory().CreateInInventory(
"GlowPlug");
3018 GetInventory().CreateInInventory(
"Wrench");
3019 GetInventory().CreateInInventory(
"LugWrench");
3020 GetInventory().CreateInInventory(
"Screwdriver");
3021 GetInventory().CreateInInventory(
"EpoxyPutty");
3023 GetInventory().CreateInInventory(
"CanisterGasoline");
3027 ent = GetInventory().CreateInInventory(
"CanisterGasoline");
3033 ent = GetInventory().CreateInInventory(
"Blowtorch");
3036 ent.GetInventory().CreateInInventory(
"LargeGasCanister");
3039 ent = GetInventory().CreateInInventory(
"Blowtorch");
3042 ent.GetInventory().CreateInInventory(
"LargeGasCanister");
3055 return CarScriptOwnerState;
3065 auto state = CarScriptOwnerState.Cast(pState);
3069 protected override event void RewindState(PawnOwnerState pState, PawnMove pMove, inout NetworkRewindType pRewindType)
3071 auto state = CarScriptOwnerState.Cast(pState);
3080 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
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
proto native NoiseSystem GetNoiseSystem()
proto native void RPCSingleParam(Object target, int rpc_type, Param param, bool guaranteed, PlayerIdentity recipient=null)
see CGame.RPC
override ScriptCallQueue GetCallQueue(int call_category)
proto native bool IsServer()
proto float SurfaceGetType(float x, float z, out string type)
Returns: Y position the surface was found.
proto int GetTime()
returns mission time in milliseconds
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. Use instead of IsLightsOn().
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 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 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()
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.
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)
proto void CallLater(func fn, int delay=0, bool repeat=false, 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)
adds call into the queue with given parameters and arguments (arguments are held in memory until the ...
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
proto native CGame GetGame()
const int CARS_FLUIDS_TICK
float Impulse
Impulse applied to resolve the collision.
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].
proto native vector dBodyGetVelocityAt(notnull IEntity body, vector globalpos)
proto native vector GetVelocity(notnull IEntity ent)
Returns linear velocity.
proto native float dBodyGetMass(notnull IEntity ent)
const int SAT_DEBUG_ACTION
class JsonUndergroundAreaTriggerData GetPosition
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.