actioncollectbloodtarget.c 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. //action_data.m_Player.GetItemInHands().SetQuantity();
  41. }
  42. };
  43. class ActionCollectBloodTargetLambda : ReplaceItemWithNewLambda
  44. {
  45. float m_SpecialtyWeight;
  46. float m_percentFilled;
  47. PlayerBase m_Target;
  48. 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; }
  49. override void CopyOldPropertiesToNew(notnull EntityAI old_item, EntityAI new_item)
  50. {
  51. float maxQuantity;
  52. float quantitySet;
  53. super.CopyOldPropertiesToNew(old_item, new_item);
  54. if ( new_item )
  55. {
  56. ItemBase old_item_IB = ItemBase.Cast(old_item);
  57. ItemBase new_item_IB = ItemBase.Cast(new_item);
  58. ItemBase.Cast( old_item ).TransferModifiers( m_Target );
  59. MiscGameplayFunctions.TransferItemProperties( old_item_IB, new_item_IB, true, false, true );
  60. ItemBase.Cast( new_item ).SetLiquidType( m_Target.GetStatBloodType().Get() );
  61. maxQuantity = ItemBase.Cast( new_item ).GetQuantityMax();
  62. quantitySet = m_percentFilled * maxQuantity;
  63. ItemBase.Cast( new_item ).SetQuantity( quantitySet );
  64. m_Target.AddHealth( "", "Blood", -quantitySet );
  65. if ( m_Player.HasBloodTypeVisible() )
  66. BloodContainerBase.Cast( new_item ).SetBloodTypeVisible( true );
  67. PluginTransmissionAgents plugin = PluginTransmissionAgents.Cast(GetPlugin(PluginTransmissionAgents));
  68. plugin.TransmitAgents(m_Target, new_item, AGT_UACTION_TO_ITEM);
  69. }
  70. else
  71. {
  72. Debug.LogError("ActionCollectBloodTargetLambda: failed to create new item","static");
  73. }
  74. }
  75. };