actioncollectbloodtarget.c 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. class ActionCollectBloodTargetCB : ActionContinuousBaseCB
  2. {
  3. override void CreateActionComponent()
  4. {
  5. m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.COLLECT_BLOOD);
  6. }
  7. };
  8. class ActionCollectBloodTarget: ActionContinuousBase
  9. {
  10. void ActionCollectBloodTarget()
  11. {
  12. m_CallbackClass = ActionCollectBloodTargetCB;
  13. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_SALINEBLOODBAGTARGET;
  14. m_FullBody = true;
  15. m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
  16. m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_HIGH;
  17. m_Text = "#collect_persons_blood";
  18. }
  19. override void CreateConditionComponents()
  20. {
  21. m_ConditionItem = new CCINonRuined;
  22. m_ConditionTarget = new CCTMan( UAMaxDistances.DEFAULT );
  23. }
  24. override void OnEndServer( ActionData action_data )
  25. {
  26. super.OnEndServer(action_data);
  27. PlayerBase ntarget = PlayerBase.Cast( action_data.m_Target.GetObject() );
  28. if ( !ntarget )
  29. return;
  30. Param1<float> nacdata;
  31. Class.CastTo( nacdata, action_data.m_ActionComponent.GetACData() );
  32. float delta = 0;
  33. if ( nacdata )
  34. delta = ( nacdata.param1 / UATimeSpent.COLLECT_BLOOD );
  35. if ( delta > 0 )
  36. {
  37. ActionCollectBloodTargetLambda lambda = new ActionCollectBloodTargetLambda(action_data.m_MainItem, "BloodBagFull", action_data.m_Player, m_SpecialtyWeight, ntarget, delta);
  38. action_data.m_Player.ServerReplaceItemInHandsWithNew(lambda);
  39. }
  40. }
  41. };
  42. class ActionCollectBloodTargetLambda : ReplaceItemWithNewLambda
  43. {
  44. float m_SpecialtyWeight;
  45. float m_percentFilled;
  46. PlayerBase m_Target;
  47. void ActionCollectBloodTargetLambda(EntityAI old_item, string new_item_type, PlayerBase player, float specialtyWeight, PlayerBase target, float delta) { m_SpecialtyWeight = specialtyWeight; m_Target = target; m_percentFilled = delta; }
  48. override void CopyOldPropertiesToNew(notnull EntityAI old_item, EntityAI new_item)
  49. {
  50. float maxQuantity;
  51. float quantitySet;
  52. super.CopyOldPropertiesToNew(old_item, new_item);
  53. if ( new_item )
  54. {
  55. ItemBase old_item_IB = ItemBase.Cast(old_item);
  56. ItemBase new_item_IB = ItemBase.Cast(new_item);
  57. ItemBase.Cast( old_item ).TransferModifiers( m_Target );
  58. MiscGameplayFunctions.TransferItemProperties( old_item_IB, new_item_IB, true, false, true );
  59. ItemBase.Cast( new_item ).SetLiquidType( m_Target.GetStatBloodType().Get() );
  60. maxQuantity = ItemBase.Cast( new_item ).GetQuantityMax();
  61. quantitySet = m_percentFilled * maxQuantity;
  62. ItemBase.Cast( new_item ).SetQuantity( quantitySet );
  63. m_Target.AddHealth( "", "Blood", -quantitySet );
  64. if ( m_Player.HasBloodTypeVisible() )
  65. BloodContainerBase.Cast( new_item ).SetBloodTypeVisible( true );
  66. PluginTransmissionAgents plugin = PluginTransmissionAgents.Cast(GetPlugin(PluginTransmissionAgents));
  67. plugin.TransmitAgents(m_Target, new_item, AGT_UACTION_TO_ITEM);
  68. }
  69. else
  70. {
  71. Debug.LogError("ActionCollectBloodTargetLambda: failed to create new item","static");
  72. }
  73. }
  74. };