actionemptymagazine.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. class EmptyMagazineActionData : ActionData
  2. {
  3. Magazine m_magazinePile;
  4. }
  5. class ActionEmptyMagazineCB : ActionContinuousBaseCB
  6. {
  7. override void CreateActionComponent()
  8. {
  9. m_ActionData.m_ActionComponent = new CAContinuousRepeat(UATimeSpent.MAG_EMPTY);
  10. }
  11. };
  12. class ActionEmptyMagazine: ActionContinuousBase
  13. {
  14. void ActionEmptyMagazine()
  15. {
  16. m_CallbackClass = ActionEmptyMagazineCB;
  17. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_EMPTYMAG;
  18. m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_EMPTYMAG;
  19. m_Text = "#empty_magazine";
  20. }
  21. override bool SetupAction(PlayerBase player, ActionTarget target, ItemBase item, out ActionData action_data, Param extra_data = NULL)
  22. {
  23. if ( super.SetupAction( player, target, item, action_data, extra_data))
  24. {
  25. EmptyMagazineActionData emActionData = EmptyMagazineActionData.Cast(action_data);
  26. emActionData.m_magazinePile = NULL;
  27. return true;
  28. }
  29. return false;
  30. }
  31. override ActionData CreateActionData()
  32. {
  33. EmptyMagazineActionData action_data = new EmptyMagazineActionData;
  34. return action_data;
  35. }
  36. override void CreateConditionComponents()
  37. {
  38. m_ConditionItem = new CCINonRuined;
  39. m_ConditionTarget = new CCTNone;
  40. }
  41. override bool HasProneException()
  42. {
  43. return true;
  44. }
  45. bool CanEmpty(ItemBase item)
  46. {
  47. Magazine mag;
  48. return ( item && Class.CastTo(mag, item) && mag.GetAmmoCount() > 0 );
  49. }
  50. override bool ActionConditionContinue( ActionData action_data )
  51. {
  52. return CanEmpty(action_data.m_MainItem);
  53. }
  54. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  55. {
  56. Magazine itm;
  57. return CanEmpty(item);
  58. }
  59. override bool HasTarget()
  60. {
  61. return false;
  62. }
  63. override void OnExecuteServer( ActionData action_data )
  64. {
  65. EmptyMagazineActionData emActionData = EmptyMagazineActionData.Cast(action_data);
  66. Magazine mag;
  67. if (!Class.CastTo(mag, action_data.m_MainItem))
  68. return;
  69. //float dmg;
  70. //string bulletType;
  71. /*int ammoCount = mag.GetAmmoCount();
  72. if(GetAmmoCount() > 0)
  73. {
  74. mag.Get
  75. mag.SetAmmoCount( ammoCount - 1 );
  76. array< Magazine > piles;
  77. if( !callback.m_magazinePile )
  78. {
  79. piles = MiscGameplayFunctions.CreateMagazinePilesFromBullet(bulletType, action_data.m_Player.GetPosition(),1,dmg);
  80. if( piles.Count() > 0 )
  81. callback.m_magazinePile = piles.Get(0);
  82. }
  83. else
  84. {
  85. if( callback.m_magazinePile.GetAmmoMax() > callback.m_magazinePile.GetAmmoCount() && (vector.Distance(action_data.m_Player.GetPosition(), callback.m_magazinePile.GetPosition()) < MAX_GROUND_PILE_DISTANCE ) )
  86. {
  87. callback.m_magazinePile.StoreCartridge(dmg, bulletType);
  88. }
  89. else
  90. {
  91. piles = MiscGameplayFunctions.CreateMagazinePilesFromBullet(bulletType, action_data.m_Player.GetPosition(),1,dmg);
  92. if( piles.Count() > 0 )
  93. callback.m_magazinePile = piles.Get(0);
  94. }
  95. }
  96. } */
  97. //----Uncomment after AcquireCartridge will work
  98. float dmg;
  99. string ammoType;
  100. if ( !mag.ServerAcquireCartridge(dmg,ammoType) )
  101. return;
  102. mag.ApplyManipulationDamage();
  103. string magazineTypeName;
  104. GetGame().ConfigGetText( "CfgAmmo " + ammoType + " spawnPileType" , magazineTypeName);
  105. if ( !DayZPlayerUtils.HandleStoreCartridge(action_data.m_Player, NULL, -1, dmg, ammoType, magazineTypeName, false) )
  106. {
  107. array< Magazine > piles;
  108. if ( !emActionData.m_magazinePile )
  109. {
  110. piles = MiscGameplayFunctions.CreateMagazinePilesFromBullet(ammoType,action_data.m_Player.GetPosition(),1,dmg);
  111. if ( piles.Count() > 0 )
  112. emActionData.m_magazinePile = piles.Get(0);
  113. }
  114. else
  115. {
  116. if ( emActionData.m_magazinePile.GetAmmoMax() > emActionData.m_magazinePile.GetAmmoCount() && emActionData.m_magazinePile.GetType() == magazineTypeName && (vector.DistanceSq(action_data.m_Player.GetPosition(), emActionData.m_magazinePile.GetPosition()) < (UAMaxDistances.DEFAULT * UAMaxDistances.DEFAULT) ) )
  117. {
  118. emActionData.m_magazinePile.ServerStoreCartridge(dmg,ammoType);
  119. }
  120. else
  121. {
  122. piles = MiscGameplayFunctions.CreateMagazinePilesFromBullet(ammoType, action_data.m_Player.GetPosition(), 1, dmg);
  123. if ( piles.Count() > 0 )
  124. emActionData.m_magazinePile = piles.Get(0);
  125. }
  126. }
  127. //emActionData.m_magazinePile.SetSynchDirty();
  128. }
  129. //mag.SetSynchDirty();
  130. }
  131. };