123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- class GetOutTransportActionData : ActionData
- {
- Transport m_Vehicle;
- float m_Speed;
- float m_JumpingOutThreshold;
- bool m_WasJumpingOut = false;
- bool m_WasJumpingOutAnim= false;
-
- // obsolete
- Car m_Car;
- float m_CarSpeed;
- vector m_StartLocation;
- float m_DmgTaken;
- float m_ShockTaken;
- }
- // client determines animation, server will still deal damage
- class GetOutTransportActionReciveData : ActionReciveData
- {
- bool m_WasJumpingOutAnim = false;
- }
- class ActionGetOutTransport : ActionBase
- {
- //For the two following values -> The HIGHER the value, the LOWER the output
- const int DMG_FACTOR = 60; //value used to translate impact strength into actual damage (impact strength -> velocity squared)
- const int SHOCK_FACTOR = 15; //Value used to translate impact strength into actual shock
- //Variables used to determine the different speed levels for bleeding checks
- const int LOW_SPEED_VALUE = 20;
- const int HIGH_SPEED_VALUE = 30;
-
- protected const float CAR_JUMPOUT_THRESHOLD = 8.0; // speed in km/h at which leaving the vehicle is considered a jump out
- protected const float BOAT_JUMPOUT_THRESHOLD = 5.0;
-
- const int HEALTH_LOW_SPEED_VALUE = 30;
- const int HEALTH_HIGH_SPEED_VALUE = 70;
-
- void ActionGetOutTransport()
- {
- m_StanceMask = DayZPlayerConstants.STANCEMASK_ALL;
- m_Text = "#leave_vehicle";
- }
-
- override ActionData CreateActionData()
- {
- ActionData data = new GetOutTransportActionData();
- return data;
- }
- override void CreateConditionComponents()
- {
- m_ConditionItem = new CCINone();
- m_ConditionTarget = new CCTNone();
- }
- override typename GetInputType()
- {
- return ContinuousInteractActionInput;
- }
-
- override bool HasProgress()
- {
- return false;
- }
- override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
- {
- HumanCommandVehicle vehCommand = player.GetCommand_Vehicle();
- if (vehCommand)
- {
- Transport trans = vehCommand.GetTransport();
- if (trans)
- {
- int crewIndex = trans.CrewMemberIndex(player);
- return crewIndex >= 0 && trans.CrewCanGetThrough(crewIndex) && trans.IsAreaAtDoorFree(crewIndex);
- }
- }
- return false;
- }
- override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
- {
- if (super.SetupAction(player, target, item, action_data, extra_data))
- {
- HumanCommandVehicle vehCommand = action_data.m_Player.GetCommand_Vehicle();
- if (vehCommand)
- {
- Transport trans = vehCommand.GetTransport();
- if (trans)
- {
- GetOutTransportActionData gotActionData = GetOutTransportActionData.Cast(action_data);
- ProcessGetOutTransportActionData(trans, gotActionData);
- return true;
- }
- }
- }
- return false;
- }
- override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
- {
- super.WriteToContext(ctx, action_data);
-
- GetOutTransportActionData gotActionData = GetOutTransportActionData.Cast(action_data);
- ctx.Write(gotActionData.m_WasJumpingOutAnim);
- }
-
- override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data)
- {
- if (!action_recive_data)
- action_recive_data = new GetOutTransportActionReciveData;
- super.ReadFromContext(ctx, action_recive_data);
- GetOutTransportActionReciveData action_data_got = GetOutTransportActionReciveData.Cast(action_recive_data);
-
- if (!ctx.Read(action_data_got.m_WasJumpingOutAnim))
- return false;
-
- return true;
- }
-
- override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
- {
- super.HandleReciveData(action_recive_data, action_data);
-
- GetOutTransportActionReciveData recive_data_got = GetOutTransportActionReciveData.Cast(action_recive_data);
- GetOutTransportActionData action_data_got = GetOutTransportActionData.Cast(action_data);
-
- action_data_got.m_WasJumpingOutAnim = recive_data_got.m_WasJumpingOutAnim;
- }
- void ProcessGetOutTransportActionData(Transport veh, GetOutTransportActionData got_action_data)
- {
- float speed;
- if (Car.Cast(veh))
- {
- got_action_data.m_JumpingOutThreshold = CAR_JUMPOUT_THRESHOLD;
- speed = Car.Cast(veh).GetSpeedometerAbsolute();
- }
- else if (Boat.Cast(veh))
- {
- got_action_data.m_JumpingOutThreshold = BOAT_JUMPOUT_THRESHOLD;
- vector playerPosition = got_action_data.m_Player.PhysicsGetPositionWS();
- vector velocity = dBodyGetVelocityAt(veh, playerPosition);
- velocity[1] = 0; // sliding check doesn't use vertical velocity
- speed = velocity.Normalize();
- }
- got_action_data.m_Speed = speed;
- got_action_data.m_Vehicle = veh;
- got_action_data.m_WasJumpingOut = got_action_data.m_Speed > got_action_data.m_JumpingOutThreshold;
- if (got_action_data.m_Player.IsOwner())
- got_action_data.m_WasJumpingOutAnim = got_action_data.m_WasJumpingOut;
- }
- override void OnStart(ActionData action_data)
- {
- super.OnStart(action_data);
- HumanCommandVehicle vehCommand = action_data.m_Player.GetCommand_Vehicle();
- if (vehCommand)
- {
- Transport trans = vehCommand.GetTransport();
- if (trans)
- {
- GetOutTransportActionData gotActionData = GetOutTransportActionData.Cast(action_data);
- ProcessGetOutTransportActionData(trans, gotActionData);
- if (!gotActionData.m_WasJumpingOutAnim)
- vehCommand.GetOutVehicle();
- else
- vehCommand.JumpOutVehicle();
-
- if (Car.Cast(trans))
- GetDayZGame().GetBacklit().OnLeaveCar();
- if (action_data.m_Player.GetInventory())
- action_data.m_Player.GetInventory().LockInventory(LOCK_FROM_SCRIPT);
- }
- }
- }
-
- override void OnStartServer(ActionData action_data)
- {
- super.OnStartServer(action_data);
-
- HumanCommandVehicle vehCommand = action_data.m_Player.GetCommand_Vehicle();
- if (vehCommand)
- {
- Transport trans = vehCommand.GetTransport();
- if (trans)
- {
- CarScript car;
- if (Class.CastTo(car, trans))
- car.ForceUpdateLightsStart();
- }
- }
- }
-
- void Unhide(PlayerBase player);
- override void OnUpdate(ActionData action_data)
- {
- if (action_data.m_State == UA_START)
- {
- if (!action_data.m_Player.GetCommand_Vehicle())
- End(action_data);
- }
- }
-
- override bool CanBeUsedInRestrain()
- {
- return true;
- }
-
- override bool CanBeUsedInVehicle()
- {
- return true;
- }
-
- override bool HasTarget()
- {
- return false;
- }
-
- override int GetActionCategory()
- {
- return AC_INTERACT;
- }
-
- override void OnEnd(ActionData action_data)
- {
- if (action_data.m_Player.GetInventory())
- action_data.m_Player.GetInventory().UnlockInventory(LOCK_FROM_SCRIPT);
- }
-
- override void OnEndServer(ActionData action_data)
- {
- super.OnEndServer(action_data);
-
- GetOutTransportActionData gotActionData = GetOutTransportActionData.Cast(action_data);
-
- // if server determined it was a jump out, or client played jump out animation, deal damage
- if (gotActionData.m_WasJumpingOut || gotActionData.m_WasJumpingOutAnim)
- {
- gotActionData.m_Player.OnJumpOutVehicleFinish(gotActionData.m_Speed);
-
- ApplyJumpOutDmg(action_data);
- }
- CarScript car = CarScript.Cast(gotActionData.m_Vehicle);
- if (car)
- car.ForceUpdateLightsEnd();
- }
-
- //Manage all jumping out of vehicle damage logic
- void ApplyJumpOutDmg(ActionData action_data)
- {
- GetOutTransportActionData gotActionData = GetOutTransportActionData.Cast(action_data);
-
- CarScript car;
- if (Class.CastTo(car, gotActionData.m_Vehicle))
- car.OnVehicleJumpOutServer(gotActionData);
-
- BoatScript boat;
- if (Class.CastTo(boat, gotActionData.m_Vehicle))
- boat.OnVehicleJumpOutServer(gotActionData);
- }
-
- // deprecated
- int m_DmgFactor;
- int m_ShockFactor;
-
- void ProcessGetOutActionData(Car car, GetOutTransportActionData got_action_data);
- }
|