actionlightitemonfire.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. class ActionLightItemOnFireCB : ActionContinuousBaseCB
  2. {
  3. override void CreateActionComponent()
  4. {
  5. m_ActionData.m_ActionComponent = new CAContinuousTime( UATimeSpent.FIREPLACE_IGNITE );
  6. }
  7. }
  8. class ActionLightItemOnFire: ActionContinuousBase
  9. {
  10. void ActionLightItemOnFire()
  11. {
  12. m_CallbackClass = ActionLightItemOnFireCB;
  13. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_STARTFIRE;
  14. m_FullBody = true;
  15. m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
  16. m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_HIGH;
  17. m_Text = "#ignite";
  18. }
  19. override void CreateConditionComponents()
  20. {
  21. m_ConditionTarget = new CCTNonRuined( UAMaxDistances.DEFAULT );
  22. m_ConditionItem = new CCINonRuined;
  23. }
  24. override bool CanBePerformedFromQuickbar()
  25. {
  26. return true;
  27. }
  28. // Removed as a fix for igniting Torch by Matchbox through drag&drop in inventory
  29. /*override bool CanBePerformedFromInventory()
  30. {
  31. return true;
  32. }*/
  33. // Check if ignite candidate is in cargo of something or not.
  34. bool IsItemInCargoOfSomething(ItemBase item)
  35. {
  36. if ( item.GetInventory() )
  37. {
  38. InventoryLocation loc = new InventoryLocation;
  39. item.GetInventory().GetCurrentInventoryLocation(loc);
  40. if ( loc.GetIdx() > -1 )
  41. {
  42. return true;
  43. }
  44. }
  45. return false;
  46. }
  47. override bool ActionConditionContinue( ActionData action_data )
  48. {
  49. FireworksBase fireworks = FireworksBase.Cast( action_data.m_Target.GetObject() );
  50. if (fireworks)
  51. {
  52. return true;//something might begin occluding the item after the ignition began, we don't want that to cancel the ignition process, not the prettiest solution, but it works
  53. }
  54. else
  55. {
  56. return ActionCondition(action_data.m_Player, action_data.m_Target,action_data.m_MainItem);
  57. }
  58. }
  59. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  60. {
  61. ItemBase targetItem = ItemBase.Cast(target.GetObject());
  62. if (targetItem && item)
  63. {
  64. // when igniting item on the ground with igniter in hands
  65. if (!targetItem.IsIgnited() && !IsItemInCargoOfSomething(targetItem) && item.CanIgniteItem(targetItem) && targetItem.CanBeIgnitedBy(item))
  66. {
  67. // oven stage of standard fireplace
  68. if (targetItem.IsKindOf("Fireplace"))
  69. {
  70. if (Fireplace.Cast(targetItem).IsOven())
  71. return true;
  72. if (Fireplace.CanIgniteEntityAsFireplace(targetItem))
  73. return true;
  74. return false;
  75. }
  76. return true;
  77. }
  78. // when igniting item in hands from something on ground
  79. else if (!item.IsIgnited() && !IsItemInCargoOfSomething(item) && targetItem.CanIgniteItem(item) && item.CanBeIgnitedBy(targetItem))
  80. {
  81. return true;
  82. }
  83. }
  84. return false;
  85. }
  86. override void OnFinishProgressServer( ActionData action_data )
  87. {
  88. ClearActionJuncture(action_data);
  89. ItemBase target_item = ItemBase.Cast( action_data.m_Target.GetObject() );
  90. ItemBase item = action_data.m_MainItem;
  91. bool is_ignition_successful;
  92. ItemBase ignited_item; //item that was lit on fire
  93. ItemBase fire_source_item; //item that was the source of fire
  94. if ( item.CanIgniteItem( target_item ) )
  95. {
  96. is_ignition_successful = target_item.IsThisIgnitionSuccessful( item );
  97. ignited_item = target_item;
  98. fire_source_item = item;
  99. }
  100. else if ( item.CanBeIgnitedBy( target_item ) )
  101. {
  102. is_ignition_successful = target_item.IsTargetIgnitionSuccessful( item );
  103. ignited_item = item;
  104. fire_source_item = target_item;
  105. }
  106. if ( is_ignition_successful )
  107. {
  108. fire_source_item.OnIgnitedTarget( ignited_item );
  109. ignited_item.OnIgnitedThis( fire_source_item );
  110. }
  111. else
  112. {
  113. fire_source_item.OnIgnitedTargetFailed( ignited_item );
  114. ignited_item.OnIgnitedThisFailed( fire_source_item );
  115. }
  116. }
  117. //setup
  118. override bool SetupAction( PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL )
  119. {
  120. if ( super.SetupAction( player, target, item, action_data, extra_data ) )
  121. {
  122. ItemBase target_item = ItemBase.Cast( target.GetObject() );
  123. if ( target_item )
  124. {
  125. SetIgnitingAnimation( target_item );
  126. }
  127. return true;
  128. }
  129. return false;
  130. }
  131. void SetIgnitingAnimation( ItemBase target_item )
  132. {
  133. if ( target_item.HasFlammableMaterial() )
  134. {
  135. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_STARTFIRE;
  136. }
  137. else
  138. {
  139. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_CRAFTING;
  140. }
  141. }
  142. }