actionsawplanks.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. class SawPlanksActionData : ActionData
  2. {
  3. ItemBase m_LastPlanksPile; //locally used on server only
  4. }
  5. class ActionSawPlanksCB : ActionContinuousBaseCB
  6. {
  7. static const float TIME_SAW_HANDSAW = 1.5;
  8. static const float TIME_SAW_HACKSAW = 3.0;
  9. static const float TIME_AXES = 1.2;
  10. override void CreateActionComponent()
  11. {
  12. m_ActionData.m_ActionComponent = new CAContinuousRepeat(GetDefaultTime());
  13. }
  14. float GetDefaultTime()
  15. {
  16. string item_type = m_ActionData.m_MainItem.GetType();
  17. switch(item_type)
  18. {
  19. case "Hacksaw":
  20. return TIME_SAW_HACKSAW;
  21. break;
  22. case "HandSaw":
  23. return TIME_SAW_HANDSAW;
  24. break;
  25. default: // axes
  26. return TIME_AXES;
  27. break
  28. }
  29. Debug.Log("ActionSawPlanksCB | Item detection error, assigning negative time","recipes");
  30. return -1;
  31. }
  32. };
  33. class ActionSawPlanks: ActionContinuousBase
  34. {
  35. static const int DECREASE_HEALTH_OF_TOOL_DEFAULT = 10; // this constant is not use anymore see ActionConstants.c UADamageApplied
  36. //static const int DECREASE_HEALTH_OF_TOOL_AXE = 20; // axes
  37. //static const int DECREASE_FUEL_OF_CHAINSAW = 20; // chainsaw fuel in ml
  38. static const int YIELD = 3;
  39. void ActionSawPlanks()
  40. {
  41. m_CallbackClass = ActionSawPlanksCB;
  42. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DISASSEMBLE;
  43. m_FullBody = true;
  44. m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
  45. m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_MEDIUM;
  46. m_Text = "#saw_planks";
  47. m_LockTargetOnUse = false;
  48. }
  49. override void CreateConditionComponents()
  50. {
  51. m_ConditionTarget = new CCTNonRuined(UAMaxDistances.DEFAULT);
  52. m_ConditionItem = new CCINonRuined;
  53. }
  54. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  55. {
  56. Object target_O = target.GetObject();
  57. if ( item && target_O.IsInherited(PileOfWoodenPlanks))
  58. {
  59. string item_type = item.GetType();
  60. switch(item_type)
  61. {
  62. case "Chainsaw":
  63. if ( item.HasEnergyManager() && item.GetCompEM().CanWork() )
  64. {
  65. return true;
  66. }
  67. else
  68. {
  69. return false;
  70. }
  71. break;
  72. }
  73. return true;
  74. }
  75. return false;
  76. }
  77. override ActionData CreateActionData()
  78. {
  79. SawPlanksActionData action_data = new SawPlanksActionData();
  80. return action_data;
  81. }
  82. override void OnFinishProgressServer( ActionData action_data )
  83. {
  84. SawPlanksActionData sawPlanksData = SawPlanksActionData.Cast(action_data);
  85. PileOfWoodenPlanks item_POWP = PileOfWoodenPlanks.Cast( sawPlanksData.m_Target.GetObject() );
  86. item_POWP.RemovePlanks(YIELD);
  87. if (!sawPlanksData.m_LastPlanksPile)
  88. {
  89. SpawnNewPlankPile(sawPlanksData,YIELD);
  90. }
  91. else if ((sawPlanksData.m_LastPlanksPile.GetQuantity() + YIELD) >= sawPlanksData.m_LastPlanksPile.GetQuantityMax())
  92. {
  93. int remnant = sawPlanksData.m_LastPlanksPile.GetQuantity() + YIELD - sawPlanksData.m_LastPlanksPile.GetQuantityMax();
  94. sawPlanksData.m_LastPlanksPile.SetQuantity(sawPlanksData.m_LastPlanksPile.GetQuantityMax());
  95. if (remnant > 0)
  96. SpawnNewPlankPile(sawPlanksData,remnant);
  97. }
  98. else
  99. {
  100. sawPlanksData.m_LastPlanksPile.AddQuantity(YIELD);
  101. }
  102. sawPlanksData.m_MainItem.DecreaseHealth("", "", UADamageApplied.SAW_PLANKS);
  103. }
  104. protected void SpawnNewPlankPile(SawPlanksActionData data, float quantity)
  105. {
  106. ItemBase planksNewResult = ItemBase.Cast(data.m_Player.SpawnEntityOnGroundRaycastDispersed("WoodenPlank",0.3,UAItemsSpreadRadius.VERY_NARROW));
  107. planksNewResult.SetQuantity(quantity);
  108. data.m_LastPlanksPile = planksNewResult;
  109. }
  110. ///////////////////////////////////////////////////////////////
  111. //DEPREDATED; do NOT store anything on the shared server action directly!
  112. ItemBase m_Planks;
  113. ref InventoryLocation m_PlanksLocation = new InventoryLocation;
  114. };