123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- class SawPlanksActionData : ActionData
- {
- ItemBase m_LastPlanksPile; //locally used on server only
- }
- class ActionSawPlanksCB : ActionContinuousBaseCB
- {
- static const float TIME_SAW_HANDSAW = 1.5;
- static const float TIME_SAW_HACKSAW = 3.0;
- static const float TIME_AXES = 1.2;
-
- override void CreateActionComponent()
- {
- m_ActionData.m_ActionComponent = new CAContinuousRepeat(GetDefaultTime());
- }
-
- float GetDefaultTime()
- {
- string item_type = m_ActionData.m_MainItem.GetType();
-
- switch(item_type)
- {
- case "Hacksaw":
- return TIME_SAW_HACKSAW;
- break;
-
- case "HandSaw":
- return TIME_SAW_HANDSAW;
- break;
-
- default: // axes
- return TIME_AXES;
- break
- }
- Debug.Log("ActionSawPlanksCB | Item detection error, assigning negative time","recipes");
- return -1;
- }
- };
- class ActionSawPlanks: ActionContinuousBase
- {
- static const int DECREASE_HEALTH_OF_TOOL_DEFAULT = 10; // this constant is not use anymore see ActionConstants.c UADamageApplied
- //static const int DECREASE_HEALTH_OF_TOOL_AXE = 20; // axes
- //static const int DECREASE_FUEL_OF_CHAINSAW = 20; // chainsaw fuel in ml
-
- static const int YIELD = 3;
-
- void ActionSawPlanks()
- {
- m_CallbackClass = ActionSawPlanksCB;
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_DISASSEMBLE;
- m_FullBody = true;
- m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
- m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_MEDIUM;
- m_Text = "#saw_planks";
- m_LockTargetOnUse = false;
- }
-
- override void CreateConditionComponents()
- {
- m_ConditionTarget = new CCTNonRuined(UAMaxDistances.DEFAULT);
- m_ConditionItem = new CCINonRuined;
- }
-
- override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
- {
- Object target_O = target.GetObject();
-
- if ( item && target_O.IsInherited(PileOfWoodenPlanks))
- {
- string item_type = item.GetType();
-
- switch(item_type)
- {
- case "Chainsaw":
- if ( item.HasEnergyManager() && item.GetCompEM().CanWork() )
- {
- return true;
- }
- else
- {
- return false;
- }
- break;
- }
-
- return true;
- }
-
- return false;
- }
-
- override ActionData CreateActionData()
- {
- SawPlanksActionData action_data = new SawPlanksActionData();
- return action_data;
- }
-
- override void OnFinishProgressServer( ActionData action_data )
- {
- SawPlanksActionData sawPlanksData = SawPlanksActionData.Cast(action_data);
-
- PileOfWoodenPlanks item_POWP = PileOfWoodenPlanks.Cast( sawPlanksData.m_Target.GetObject() );
- item_POWP.RemovePlanks(YIELD);
-
- if (!sawPlanksData.m_LastPlanksPile)
- {
- SpawnNewPlankPile(sawPlanksData,YIELD);
- }
- else if ((sawPlanksData.m_LastPlanksPile.GetQuantity() + YIELD) >= sawPlanksData.m_LastPlanksPile.GetQuantityMax())
- {
- int remnant = sawPlanksData.m_LastPlanksPile.GetQuantity() + YIELD - sawPlanksData.m_LastPlanksPile.GetQuantityMax();
- sawPlanksData.m_LastPlanksPile.SetQuantity(sawPlanksData.m_LastPlanksPile.GetQuantityMax());
-
- if (remnant > 0)
- SpawnNewPlankPile(sawPlanksData,remnant);
- }
- else
- {
- sawPlanksData.m_LastPlanksPile.AddQuantity(YIELD);
- }
-
- sawPlanksData.m_MainItem.DecreaseHealth("", "", UADamageApplied.SAW_PLANKS);
- }
-
- protected void SpawnNewPlankPile(SawPlanksActionData data, float quantity)
- {
- ItemBase planksNewResult = ItemBase.Cast(data.m_Player.SpawnEntityOnGroundRaycastDispersed("WoodenPlank",0.3,UAItemsSpreadRadius.VERY_NARROW));
- planksNewResult.SetQuantity(quantity);
- data.m_LastPlanksPile = planksNewResult;
- }
-
- ///////////////////////////////////////////////////////////////
- //DEPREDATED; do NOT store anything on the shared server action directly!
- ItemBase m_Planks;
- ref InventoryLocation m_PlanksLocation = new InventoryLocation;
- };
|