123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- class RepairCarPartActionReciveData : RepairVehiclePartActionReciveData
- {}
- class RepairCarPartActionData : RepairVehiclePartActionData
- {}
- class ActionRepairCarPartCB : ActionContinuousBaseCB
- {
- override void CreateActionComponent()
- {
- m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.BASEBUILDING_REPAIR_FAST);
- }
- }
- class ActionRepairCarPart : ActionContinuousBase
- {
- typename m_LastValidType;
- string m_CurrentDamageZone = "";
- int m_LastValidComponentIndex = -1;
-
- void ActionRepairCarPart()
- {
- m_CallbackClass = ActionRepairCarPartCB;
- m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
-
- m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
- m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT;
- m_FullBody = true;
- m_LockTargetOnUse = false;
- m_Text = "#repair";
- }
- override void CreateConditionComponents()
- {
- m_ConditionItem = new CCINonRuined();
- m_ConditionTarget = new CCTCursor(UAMaxDistances.REPAIR);
- }
- override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
- {
- if (player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS)
- return false;
-
- Object targetObject = target.GetObject();
- Object targetParent = target.GetParent();
- CarDoor carDoor = CarDoor.Cast(targetObject);
-
- if (!carDoor || !player)
- return false;
-
- if (GetGame().IsMultiplayer() && GetGame().IsServer())
- return true;
-
- if (carDoor)
- {
- //Check if item is attached to car -> If so, block repair if door is closed
- if (targetParent != null)
- {
- InventoryLocation loc = new InventoryLocation();
- bool isPresent = carDoor.GetInventory().GetCurrentInventoryLocation(loc);
-
- if (!isPresent || loc.GetSlot() == -1)
- return false;
-
- string slotName = InventorySlots.GetSlotName(loc.GetSlot());
- if (slotName && CarScript.Cast(targetParent).GetCarDoorsState(slotName) != CarDoorState.DOORS_OPEN)
- return false;
- }
-
- //Check health level of door
- int zoneHP = carDoor.GetHealthLevel("");
- return zoneHP > GameConstants.STATE_WORN && zoneHP < GameConstants.STATE_RUINED);
- }
-
- return false;
- }
- override void OnFinishProgressServer(ActionData action_data)
- {
- Object tgObject = action_data.m_Target.GetObject();
-
- string damageZone = RepairCarPartActionData.Cast(action_data).m_DamageZone;
- if (!GetGame().IsMultiplayer())
- damageZone = m_CurrentDamageZone;
-
- if (tgObject)
- {
- CarDoor carDoor = CarDoor.Cast(tgObject);
- if (carDoor)
- {
- int newDmgLevel = Math.Clamp(carDoor.GetHealthLevel(damageZone) - 1, GameConstants.STATE_WORN, GameConstants.STATE_RUINED);
- float zoneMax = carDoor.GetMaxHealth("", "");
- float randomValue = Math.RandomFloatInclusive(zoneMax * 0.05, zoneMax * 0.15);
-
- switch (newDmgLevel)
- {
- case GameConstants.STATE_BADLY_DAMAGED:
- carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_RUINED_VALUE) + randomValue);
- break;
- case GameConstants.STATE_DAMAGED:
- carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_BADLY_DAMAGED_VALUE) + randomValue);
- break;
- case GameConstants.STATE_WORN:
- carDoor.SetHealth("", "", (zoneMax * GameConstants.DAMAGE_DAMAGED_VALUE) + randomValue);
- break;
-
- default:
- break;
- }
- if (action_data.m_MainItem.HasQuantity())
- {
- if (action_data.m_MainItem.GetQuantity() > 1)
- {
- int qnt = action_data.m_MainItem.GetQuantity();
- qnt -= action_data.m_MainItem.GetQuantityMax() * 0.25;
- action_data.m_MainItem.SetQuantity(qnt);
- }
- else
- action_data.m_MainItem.Delete();
- }
- }
- }
- }
- override ActionData CreateActionData()
- {
- RepairCarPartActionData actionData = new RepairCarPartActionData();
- return actionData;
- }
-
- override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
- {
- super.WriteToContext(ctx, action_data);
- RepairCarPartActionData repairActionData;
- if (HasTarget() && Class.CastTo(repairActionData, action_data))
- {
- repairActionData.m_DamageZone = m_CurrentDamageZone;
- ctx.Write(repairActionData.m_DamageZone);
- }
- }
-
- override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
- {
- if (!action_recive_data)
- action_recive_data = new RepairCarPartActionReciveData();
- super.ReadFromContext(ctx, action_recive_data);
- RepairCarPartActionReciveData reciveDataRepair = RepairCarPartActionReciveData.Cast(action_recive_data);
- if (HasTarget())
- {
- string zone;
- if (!ctx.Read(zone))
- return false;
- reciveDataRepair.m_DamageZoneRecived = zone;
- }
- return true;
- }
-
- override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
- {
- super.HandleReciveData(action_recive_data, action_data);
- RepairCarPartActionReciveData reciveDataRepair = RepairCarPartActionReciveData.Cast(action_recive_data);
- RepairCarPartActionData.Cast(action_data).m_DamageZone = reciveDataRepair.m_DamageZoneRecived;
- }
- }
|