actionplantseed.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. class ActionPlantSeed : ActionSingleUseBase
  2. {
  3. void ActionPlantSeed()
  4. {
  5. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_DROPITEM_HANDS;
  6. m_FullBody = false;
  7. m_Text = "#plant_seed";
  8. }
  9. override void CreateConditionComponents()
  10. {
  11. m_ConditionItem = new CCINonRuined();
  12. m_ConditionTarget = new CCTDummy();
  13. }
  14. override bool HasTarget()
  15. {
  16. return true;
  17. }
  18. override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
  19. {
  20. GardenBase gardenBase = GardenBase.Cast(target.GetObject());
  21. if (gardenBase && (!gardenBase.IsHologram() || !gardenBase.IsBeingPlaced()))
  22. {
  23. array<string> selections = new array<string>();
  24. gardenBase.GetActionComponentNameList(target.GetComponentIndex(), selections);
  25. foreach (string selection : selections)
  26. {
  27. Slot slot = gardenBase.GetSlotBySelection(selection);
  28. if (slot)
  29. {
  30. if (item != null && item.GetQuantity() > 0 && gardenBase.CanPlantSeed(selection))
  31. return true;
  32. }
  33. }
  34. }
  35. return false;
  36. }
  37. override void OnExecuteServer(ActionData action_data)
  38. {
  39. super.OnExecuteServer(action_data);
  40. Process(action_data);
  41. }
  42. void Process(ActionData action_data)
  43. {
  44. GardenBase gardenBase = GardenBase.Cast(action_data.m_Target.GetObject());
  45. if (gardenBase)
  46. {
  47. int slotID;
  48. array<string> selections = new array<string>();
  49. gardenBase.GetActionComponentNameList(action_data.m_Target.GetComponentIndex(), selections);
  50. foreach (string selection : selections)
  51. {
  52. Slot slot = gardenBase.GetSlotBySelection(selection);
  53. if (slot)
  54. {
  55. slotID = slot.GetSlotId();
  56. break;
  57. }
  58. }
  59. ItemBase seed = ItemBase.Cast(action_data.m_MainItem);
  60. if (seed.GetQuantity() > 1)
  61. seed.SplitIntoStackMax(gardenBase, slotID, action_data.m_Player);
  62. else
  63. gardenBase.ServerTakeEntityToTargetAttachmentEx(gardenBase, seed, slotID);
  64. }
  65. }
  66. }