123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- class RepairVehiclePartActionReciveData : ActionReciveData
- {
- string m_DamageZoneRecived;
- }
- class RepairVehiclePartActionData : ActionData
- {
- string m_DamageZone;
- }
- class ActionRepairVehiclePartCB : ActionContinuousBaseCB
- {
- override void CreateActionComponent()
- {
- m_ActionData.m_ActionComponent = new CAContinuousRepeat(UATimeSpent.BASEBUILDING_REPAIR_FAST);
- }
- };
- class ActionRepairVehiclePartBase : ActionContinuousBase
- {
- protected string m_CurrentDamageZone; // needs to be assigned in action condition so it can be properly written to context
- override void CreateConditionComponents()
- {
- m_ConditionItem = new CCINonRuined();
- m_ConditionTarget = new CCTCursor(UAMaxDistances.REPAIR);
- }
- override void OnFinishProgressServer(ActionData action_data)
- {
- AdjustVehicleHealthServer(action_data);
- AdjustItemQuantityServer(action_data);
- }
-
- protected void AdjustVehicleHealthServer(ActionData action_data)
- {
- Object tgObject = action_data.m_Target.GetObject();
-
- string damageZone = RepairVehiclePartActionData.Cast(action_data).m_DamageZone;
- if (!GetGame().IsMultiplayer())
- damageZone = m_CurrentDamageZone;
- if (tgObject && damageZone != "")
- {
- Transport vehicle = Transport.Cast(tgObject);
- if (vehicle)
- {
- int newDmgLevel = Math.Clamp(vehicle.GetHealthLevel(damageZone) - 1, GameConstants.STATE_WORN, GameConstants.STATE_RUINED);
- float zoneMax = vehicle.GetMaxHealth(damageZone, "");
- float randomValue = Math.RandomFloatInclusive(zoneMax * 0.05, zoneMax * 0.15);
-
- switch (newDmgLevel)
- {
- case GameConstants.STATE_BADLY_DAMAGED:
- vehicle.SetHealth(damageZone, "", (zoneMax * GameConstants.DAMAGE_RUINED_VALUE) + randomValue);
- break;
- case GameConstants.STATE_DAMAGED:
- vehicle.SetHealth(damageZone, "", (zoneMax * GameConstants.DAMAGE_BADLY_DAMAGED_VALUE) + randomValue);
- break;
- case GameConstants.STATE_WORN:
- vehicle.SetHealth(damageZone, "", (zoneMax * GameConstants.DAMAGE_DAMAGED_VALUE) + randomValue);
- break;
- }
- }
- }
- }
-
- protected void AdjustItemQuantityServer(ActionData action_data)
- {
- if (action_data.m_MainItem.HasQuantity())
- {
- if (action_data.m_MainItem.GetQuantity() > 1)
- {
- int qnt = action_data.m_MainItem.GetQuantity() - action_data.m_MainItem.GetQuantityMax() * 0.25;
- action_data.m_MainItem.SetQuantity(qnt);
- }
- else
- {
- action_data.m_MainItem.Delete();
- }
- }
- }
- override ActionData CreateActionData()
- {
- RepairVehiclePartActionData actionData = new RepairVehiclePartActionData();
- return actionData;
- }
-
- override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
- {
- super.WriteToContext(ctx, action_data);
- RepairVehiclePartActionData 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 RepairVehiclePartActionReciveData();
- }
- super.ReadFromContext(ctx, action_recive_data);
- RepairVehiclePartActionReciveData recieveDataRepair = RepairVehiclePartActionReciveData.Cast(action_recive_data);
- if (HasTarget())
- {
- string zone;
- if (!ctx.Read(zone))
- {
- return false;
- }
- recieveDataRepair.m_DamageZoneRecived = zone;
- }
- return true;
- }
-
- override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
- {
- super.HandleReciveData(action_recive_data, action_data);
- RepairVehiclePartActionReciveData recieveDataRepair = RepairVehiclePartActionReciveData.Cast(action_recive_data);
- RepairVehiclePartActionData.Cast(action_data).m_DamageZone = recieveDataRepair.m_DamageZoneRecived;
- }
- };
|