utility.lua 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. btu.place_at = function(item)
  2. return bt.Sequence("", {
  3. bt.Approach(2),
  4. bt.Animate("punch"),
  5. bt.SetNode(item),
  6. })
  7. end
  8. btu.build_to = function(item)
  9. return bt.Sequence("", {
  10. bt.Approach(2),
  11. bt.Animate("punch"),
  12. bt.SetNode(item),
  13. })
  14. end
  15. btu.wander_around = function()
  16. return bt.Sequence("", {
  17. bt.RandomDirection(),
  18. bt.MoveInDirection(7),
  19. bt.Approach(2),
  20. })
  21. end
  22. -- designed for use in a selector
  23. btu.forage_node = function(items, dist, counter, maxItems)
  24. return bt.UntilFailed(bt.Sequence("forage "..dump(items), {
  25. bt.Invert(bt.Counter(counter, "gte", maxItems)),
  26. bt.FindNodeNear(items, dist),
  27. bt.Approach(2),
  28. bt.Animate("punch"),
  29. bt.DigNode(),
  30. bt.WaitTicks(1),
  31. bt.Counter(counter, "inc"),
  32. }))
  33. end
  34. btu.forage_item = function(items, dist, counter, maxItems)
  35. return bt.UntilFailed(bt.Sequence("forage "..dump(items), {
  36. bt.Invert(bt.Counter(counter, "gte", maxItems)),
  37. bt.FindItemNear(item, dist),
  38. bt.Approach(2),
  39. bt.Animate("punch"),
  40. bt.PickUpNearbyItems(item, 2.5),
  41. bt.WaitTicks(1),
  42. bt.Counter(counter, "inc"),
  43. }))
  44. end
  45. btu.dig_region = function(item)
  46. return bt.Sequence("", {
  47. bt.Invert(bt.UntilFailed(bt.Sequence("dig the hole", {
  48. bt.FindNodeInRange(item),
  49. bt.Approach(2),
  50. -- chop it down
  51. bt.Invert(bt.UntilFailed(bt.Sequence("dig hole", {
  52. bt.FindNodeInRange(item),
  53. bt.Approach(3),
  54. bt.Animate("punch"),
  55. bt.DigNode(),
  56. bt.WaitTicks(1),
  57. }))),
  58. bt.Print("end of loop"),
  59. })))
  60. })
  61. end
  62. btu.dig_hole = function(item)
  63. return bt.Sequence("", {
  64. bt.Succeed(bt.FindGroupCampfire()),
  65. -- find a place for a hole
  66. bt.FindSpotOnGround(),
  67. bt.SetWaypoint("hole"),
  68. bt.FindRegionAround(4),
  69. btu.dig_region(item),
  70. bt.ScaleRegion({x=-1, y=0, z=-1}),
  71. bt.MoveRegion({x=0, y=-1, z=0}),
  72. btu.dig_region(item),
  73. bt.ScaleRegion({x=-1, y=0, z=-1}),
  74. bt.MoveRegion({x=0, y=-1, z=0}),
  75. btu.dig_region(item),
  76. bt.Die(),
  77. })
  78. end
  79. btu.fill_region = function(item)
  80. return bt.Sequence("", {
  81. bt.Invert(bt.UntilFailed(bt.Sequence("fill region", {
  82. bt.FindNodeInRange({"air"}),
  83. bt.Approach(2),
  84. -- chop it down
  85. bt.Invert(bt.UntilFailed(bt.Sequence("fill region", {
  86. bt.FindNodeInRange({"air"}),
  87. bt.Approach(3),
  88. bt.Animate("punch"),
  89. bt.SetNode(item),
  90. bt.WaitTicks(1),
  91. }))),
  92. bt.Print("end of loop"),
  93. })))
  94. })
  95. end