8 private SoundOnVehicle m_LoopSoundEntity;
10 bool m_CanReceiveUpgrade;
11 bool m_IsBeingDestructed =
false;
13 float m_BurnTimePerRagEx;
14 float m_BurnTimePerFullLardEx;
15 float m_BurnTimePerFullFuelDoseEx;
16 float m_MaxConsumableLardQuantityEx;
17 float m_MaxConsumableFuelQuantityEx;
18 float m_WaterEvaporationByFireIntensityEx = 0.001;
19 int m_StartFadeOutOfLightAtQuantityEx = 3;
21 int m_RagsUpgradedCount;
22 bool m_ConsumeRagFlipFlop;
25 string m_DecraftResult =
"WoodenStick";
35 if(m_RagsUpgradedCount)
43 if ( m_BurnTimePerRagEx == 0 || m_BurnTimePerFullLardEx == 0 || m_MaxConsumableLardQuantityEx == 0 || m_MaxConsumableFuelQuantityEx == 0 )
45 string cfg_path =
"CfgVehicles " +
GetType();
46 m_BurnTimePerRagEx =
GetGame().ConfigGetFloat( cfg_path +
" burnTimePerRag" );
47 m_BurnTimePerFullLardEx =
GetGame().ConfigGetFloat( cfg_path +
" burnTimePerFullLardDose" );
48 m_BurnTimePerFullFuelDoseEx =
GetGame().ConfigGetFloat( cfg_path +
" burnTimePerFullFuelDose" );
49 m_MaxConsumableLardQuantityEx =
GetGame().ConfigGetFloat( cfg_path +
" maxConsumableLardDose" );
50 m_MaxConsumableFuelQuantityEx =
GetGame().ConfigGetFloat( cfg_path +
" maxConsumableFuelDose" );
52 RegisterNetSyncVariableBool(
"m_CanReceiveUpgrade");
77 if (GetHierarchyRoot())
79 return GetHierarchyRoot().GetPosition();
82 return super.GetPosition();
87 super.EEDelete(parent);
88 if ( m_LoopSoundEntity != NULL &&
GetGame() != NULL )
90 GetGame().ObjectDelete( m_LoopSoundEntity );
99 if (att && att.IsFullQuantity())
107 if( !super.CanPutInCargo(parent) ) {
return false;}
113 if( !super.CanReleaseAttachment( attachment ) )
115 return !GetCompEM().IsWorking();
125 return !GetCompEM().IsWorking();
131 return !GetCompEM().IsWorking();
136 return GetCompEM().IsWorking();
141 return GetCompEM().IsWorking();
152 if ( !GetCompEM().CheckWetness() )
157 if (rag && GetCompEM().
GetEnergy() < GetCompEM().GetEnergyUsage() * GetCompEM().GetUpdateInterval() )
163 if ( !GetCompEM().CanWork() )
172 if (
this != player.GetItemInHands())
183 float wetness = rag.GetWet();
184 bool is_dry_enough = wetness <= 1-GetCompEM().GetWetnessExposure();
185 return is_dry_enough;
199 if ( !GetCompEM().HasEnoughStoredEnergy() )
204 GetCompEM().SwitchOn();
209 if (!GetCompEM().HasEnoughStoredEnergy())
211 GetCompEM().SwitchOff();
230 m_DecraftResult = type;
239 if (rag.GetQuantity() <= 1)
257 float lard_quant = lard.GetQuantity();
259 float available_lard_quant = lard_quant;
261 if ( available_lard_quant > m_MaxConsumableLardQuantityEx )
262 available_lard_quant = m_MaxConsumableLardQuantityEx;
264 float available_lard_coef = available_lard_quant / m_MaxConsumableLardQuantityEx;
266 float add_energy = m_BurnTimePerFullLardEx * available_lard_coef;
267 float add_energy_coef = 1;
269 float energy_limit = GetCompEM().GetEnergyMax() - GetCompEM().GetEnergy();
271 if (add_energy > energy_limit )
273 add_energy_coef = energy_limit / add_energy;
274 add_energy = energy_limit;
275 available_lard_quant = available_lard_quant * add_energy_coef;
278 GetCompEM().AddEnergy( add_energy );
279 lard.AddQuantity(-available_lard_quant);
295 float torchCurrentEnergy = GetCompEM().GetEnergy();
296 float sourceQuantity = 100000;
300 sourceQuantity = source.GetQuantity();
303 float maxOverallCapacity =
GetRagQuantity() * 2 * m_BurnTimePerRagEx;
305 float currentlyUpgraded =
Math.Max(0, torchCurrentEnergy - (
GetRagQuantity() * m_BurnTimePerRagEx));
307 float freeUpgradeCapacity = maxOverallCapacity - torchCurrentEnergy;
308 float upgradeQuantity =
Math.Min(freeUpgradeCapacity, sourceQuantity);
309 int upgradedRags =
Math.Ceil((upgradeQuantity + currentlyUpgraded) / m_BurnTimePerRagEx);
311 m_RagsUpgradedCount = upgradedRags;
312 GetCompEM().AddEnergy(upgradeQuantity);
313 m_ConsumeRagFlipFlop = 0;
316 source.AddQuantity(-upgradeQuantity);
328 float vessel_quant = vessel.GetQuantity();
330 float available_vessel_quant = vessel_quant;
332 if ( available_vessel_quant > m_MaxConsumableFuelQuantityEx )
333 available_vessel_quant = m_MaxConsumableFuelQuantityEx;
335 float available_vessel_coef = available_vessel_quant / m_MaxConsumableFuelQuantityEx;
337 float add_energy = m_BurnTimePerFullFuelDoseEx * available_vessel_coef;
338 float add_energy_coef = 1;
340 float energy_limit = GetCompEM().GetEnergyMax() - GetCompEM().GetEnergy();
342 if (add_energy > energy_limit )
344 add_energy_coef = energy_limit / add_energy;
345 add_energy = energy_limit;
346 available_vessel_quant = available_vessel_quant * add_energy_coef;
349 GetCompEM().AddEnergy( add_energy );
350 vessel.AddQuantity(-available_vessel_quant);
360 float add_energy = m_BurnTimePerFullFuelDoseEx;
361 float add_energy_coef = 1;
363 float energy_limit = GetCompEM().GetEnergyMax() - GetCompEM().GetEnergy();
365 if (add_energy > energy_limit )
367 add_energy_coef = energy_limit / add_energy;
368 add_energy = energy_limit;
371 GetCompEM().AddEnergy( add_energy );
389 super.OnInventoryExit(player);
402 if ( is_surface_soft && !IsRuined() )
404 vector ori_rotate =
"0 0 0";
405 ori_rotate[0] =
Math.RandomFloat(0, 360);
406 ori_rotate[1] =
Math.RandomFloat(0, 10);
407 SetOrientation(ori_rotate);
425 return m_CanReceiveUpgrade;
430 GetCompEM().SetEnergy(m_BurnTimePerRagEx * quantity);
431 m_CanReceiveUpgrade =
true;
438 super.EEItemAttached( item, slot_name );
446 super.EEItemDetached( item, slot_name );
448 if (m_IsBeingDestructed)
454 MiscGameplayFunctions.TransferItemProperties(item, rags);
475 if ( m_IsBeingDestructed || (player && player.IsPlayerDisconnected()) )
480 m_IsBeingDestructed =
true;
487 player.ServerReplaceItemInHandsWithNew(lambda);
495 if (
GetType() ==
"WoodenStick" )
496 ori = ori +
Vector(0,90,0);
500 stick.SetPosition(pos);
501 stick.PlaceOnSurface();
503 if ( stick.GetType() ==
"LongWoodenStick" )
505 pos = stick.GetPosition() +
Vector(0,-0.3,0);
506 stick.SetPosition(pos);
509 stick.SetOrientation(ori);
527 m_FireParticle.
Stop();
533 return Rag.Cast( GetAttachmentByType(Rag) );
545 else if (!m_RagsUpgradedCount)
547 rag.UnlockFromParent();
557 m_Light.AttachOnObject(
this, m_ParticleLocalPos +
Vector (0,0.2,0));
564 if (direct_particle && direct_particle !=
m_Light.GetAttachmentParent())
570 float update_interval = GetCompEM().GetUpdateInterval();
572 if (
GetQuantity() <= m_StartFadeOutOfLightAtQuantityEx)
574 float brightness_coef =
GetQuantity() / m_StartFadeOutOfLightAtQuantityEx;
575 float radius_coef =
GetQuantity() / m_StartFadeOutOfLightAtQuantityEx;
577 if (radius_coef < m_StartFadeOutOfLightAtQuantityEx/10)
578 radius_coef = m_StartFadeOutOfLightAtQuantityEx/10;
580 if (brightness_coef < m_StartFadeOutOfLightAtQuantityEx/10)
581 brightness_coef = m_StartFadeOutOfLightAtQuantityEx/10;
583 m_Light.FadeBrightnessTo(
m_Light.m_TorchBrightness * brightness_coef, update_interval);
584 m_Light.FadeRadiusTo(
m_Light.m_TorchRadius * radius_coef, update_interval);
588 m_Light.FadeBrightnessTo(
m_Light.m_TorchBrightness, update_interval);
595 GetCompEM().SwitchOff();
599 override void OnWork(
float consumed_energy )
606 if (m_RagsUpgradedCount==0)
610 else if (m_ConsumeRagFlipFlop)
613 m_ConsumeRagFlipFlop = !m_ConsumeRagFlipFlop;
617 m_RagsUpgradedCount--;
618 m_ConsumeRagFlipFlop = !m_ConsumeRagFlipFlop;
631 AddWet( -m_WaterEvaporationByFireIntensityEx * GetCompEM().GetUpdateInterval() );
637 rag.AddWet( -m_WaterEvaporationByFireIntensityEx * GetCompEM().GetUpdateInterval() );
641 if ( !m_LoopSoundEntity &&
GetGame() && ( !
GetGame().IsDedicatedServer() ) )
647 if ( !
GetGame().IsDedicatedServer() )
675 m_FireParticle.ScaleParticleParamFromOriginal(
EmitorParam.SIZE, scale);
676 m_FireParticle.ScaleParticleParamFromOriginal(
EmitorParam.VELOCITY, scale);
677 m_FireParticle.ScaleParticleParamFromOriginal(
EmitorParam.VELOCITY_RND, scale);
686 m_FireParticle.
Stop();
700 if ( m_LoopSoundEntity &&
GetGame() && ( !
GetGame().IsDedicatedServer() ) )
702 GetGame().ObjectDelete( m_LoopSoundEntity );
703 m_LoopSoundEntity = NULL;
708 m_FireParticle.
Stop();
709 m_FireParticle = NULL;
732 if ( GetCompEM().IsWorking() )
740 if ( GetCompEM().IsWorking() )
748 if ( GetCompEM().IsWorking() )
763 super.OnAttachmentQuantityChangedEx(item, delta);
766 if (delta > 0 || !GetCompEM().IsWorking())
767 GetCompEM().AddEnergy(m_BurnTimePerRagEx * delta);
782 GetInventory().CreateAttachment(
"Rag");
810 if (GetCompEM().IsWorking())
830 super.OnStoreSave(ctx);
837 if (!super.OnStoreLoad(ctx, version))
843 if (!ctx.Read( m_WasLit ))
854 result.SetQuantity(1);
861 override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
866 super.GetDebugActions(outputList);
871 if (super.OnAction(action_id, player, ctx))
875 if (action_id ==
EActions.ACTIVATE_ENTITY)
888 debug_output = super.GetDebugText();
890 if(
GetGame().IsDedicatedServer())
892 debug_output+=
"m_RagsUpgradedCount:"+m_RagsUpgradedCount+
"\n";
893 debug_output+=
"m_ConsumeRagFlipFlop:"+m_ConsumeRagFlipFlop+
"\n";
896 debug_output+=
"Burning rag \n";
900 debug_output+=
"Burning lard/fuel \n";
917 static float m_BurnTimePerFullLard;
918 static float m_BurnTimePerFullFuelDose;
919 static float m_MaxConsumableLardQuantity;
920 static float m_MaxConsumableFuelQuantity;
921 static float m_WaterEvaporationByFireIntensity = 0.001;
922 static int m_StartFadeOutOfLightAtQuantity = 3;
931 m_BurnTimePerFullLard = m_BurnTimePerFullLardEx;
932 m_BurnTimePerFullFuelDose = m_BurnTimePerFullFuelDoseEx;
933 m_MaxConsumableLardQuantity = m_MaxConsumableLardQuantityEx;
934 m_MaxConsumableFuelQuantity = m_MaxConsumableFuelQuantityEx;
946 override void OnWasAttached(
EntityAI parent,
int slot_id )
948 super.OnWasAttached(parent, slot_id);
956 super.OnWasDetached(parent, slot_id);
964 super.OnStoreSave(ctx);
965 ctx.Write(m_ConsumeRagFlipFlop);
966 ctx.Write(m_RagsUpgradedCount);
972 if (!super.OnStoreLoad(ctx, version))
979 if (!ctx.Read( m_ConsumeRagFlipFlop ))
984 if (!ctx.Read( m_RagsUpgradedCount ))
989 UpdateCheckForReceivingUpgrade();
996 override void CopyOldPropertiesToNew (notnull
EntityAI old_item,
EntityAI new_item)
1002 Class.CastTo(stick, new_item);
1003 if (stick && flammable)
Param4< int, int, string, int > TSelectableActionInfoWithColor
eBleedingSourceType GetType()
ActionLightItemOnFireCB ActionContinuousBaseCB ActionLightItemOnFire()
void AddAction(typename actionName)
const int ECE_PLACE_ON_SURFACE
bool IsSurfaceDigable(string surface)
Checks if the surface is digable.
proto float SurfaceGetType(float x, float z, out string type)
Returns: Y position the surface was found.
Super root of all classes in Enforce script.
void ConsumeFuelFromGasStation()
override void OnDebugSpawn()
override bool CanPutInCargo(EntityAI parent)
void ApplyResultModifications(ItemBase result)
bool IsRagDryEnough(ItemBase rag)
override void OnInventoryExit(Man player)
override int GetMeleeMode()
void UpdateCheckForReceivingUpgrade()
void ConsumeLard(Lard lard)
override bool IsIgnited()
override bool CanReleaseAttachment(EntityAI attachment)
bool CanTransformIntoStick()
ref UniversalTemperatureSource m_UTSource
override bool OnStoreLoad(ParamsReadContext ctx, int version)
override void OnIgnitedThis(EntityAI fire_source)
override void SetActions()
void CraftingInit(float quantity)
override void OnWork(float consumed_energy)
override void OnStoreSave(ParamsWriteContext ctx)
override void OnWorkStop()
void TryTransformIntoStick()
override void DeferredInit()
override void EEDelete(EntityAI parent)
void Upgrade(ItemBase source)
override void EEItemDetached(EntityAI item, string slot_name)
void LockRags(bool do_lock)
override bool CanRemoveFromCargo(EntityAI parent)
override void OnSwitchOff()
string GetBurningMaterial()
override bool CanBeIgnitedBy(EntityAI igniter=NULL)
ref UniversalTemperatureSourceLambdaConstant m_UTSLConstant
void SetTorchDecraftResult(string type)
override void OnSwitchOn()
override void OnWorkStart()
override void OnAttachmentQuantityChangedEx(ItemBase item, float delta)
ref UniversalTemperatureSourceSettings m_UTSSettings
override bool DisassembleOnLastDetach()
override vector GetUniversalTemperatureSourcePosition()
override bool CanReceiveAttachment(EntityAI attachment, int slotId)
override int GetMeleeSprintMode()
override bool CanIgniteItem(EntityAI ignite_target=NULL)
override int GetMeleeHeavyMode()
override bool CanPutAsAttachment(EntityAI parent)
override void EEItemAttached(EntityAI item, string slot_name)
void ConsumeFuelFromBottle(ItemBase vessel)
override bool HasFlammableMaterial()
override void OnItemInHandsPlayerSwimStart(PlayerBase player)
string GetBurntMaterial()
override void GetDebugActions(out TSelectableActionInfoArrayEx outputList)
override bool OnAction(int action_id, Man player, ParamsReadContext ctx)
override bool CanReceiveAttachment(EntityAI attachment, int slotId)
Legacy way of using particles in the game.
static Particle PlayOnObject(int particle_id, Object parent_obj, vector local_pos="0 0 0", vector local_ori="0 0 0", bool force_world_rotation=false)
Creates a particle emitter, attaches it on the given object and activates it.
int GetParticleID()
Gets particle id.
void Stop()
Legacy function for backwards compatibility with 1.14 and below.
Object GetDirectParticleEffect()
Returns direct particle effect entity which is usually handled by this class 'Particle' if there is o...
base class for transformation operations (creating one item from another)
void CopyOldPropertiesToNew(notnull EntityAI old_item, EntityAI new_item)
Step E. copy properties from old object to the created one.
Serialization general interface. Serializer API works with:
original Timer deletes m_params which is unwanted
proto native CGame GetGame()
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
const int SAT_DEBUG_ACTION
class JsonUndergroundAreaTriggerData GetPosition
override float GetQuantity()
override void SetQuantityNormalized(float value, bool destroy_config=true, bool destroy_forced=false)
Sets quantity in normalized 0..1 form between the item's Min a Max values as defined by item's config...
override void AddWet(float value)
class Land_Buoy extends House m_Light
void OnStoreSave(ParamsWriteContext ctx)
bool OnStoreLoad(ParamsReadContext ctx, int version)
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)
override void OnWasDetached(EntityAI parent, int slot_id)
FlammableBase m_BurnTimePerRag