SHOW:
|
|
- or go back to the newest paste.
1 | - | --Enchanting Turtle V0.1 by QQII |
1 | + | --Enchanting Turtle V0.2 by QQII |
2 | - | --Badly attempt to find an optimum times to attack before enchanting |
2 | + | |
3 | local enchantLevel = 0 --The level the turtle initially attemps to perform an enchant at | |
4 | local enchants = 0 --The number of enchants performed by the turtle | |
5 | - | local xp = peripheral.wrap("right") |
5 | + | local slot = 1 --The slot number that the items to be enchanted are in |
6 | ||
7 | --Functions | |
8 | - | local attacks = 165 --The number of attacks it performs before attempting to enchant |
8 | + | function wrapPeripheral(thing) |
9 | - | local enchantLevel = 0 --The level the turtle initially attemps to perform an enchant at |
9 | + | local Sides = { |
10 | - | local enchants = 0 --The number of enchants performed by the turtle |
10 | + | "left","right", |
11 | - | local levels = 0 --The amount of levels collected for the number of attacks performed |
11 | + | "top","bottom", |
12 | - | local slot = 1 --The slot number that the items to be enchanted are in |
12 | + | "front","back", |
13 | - | xp.setAutoCollect(true) --Sets the turtle to automatically collect xp |
13 | + | } |
14 | ||
15 | for i,v in pairs(Sides) do | |
16 | - | print("Make sure that the mobs fall ontop of the turtle.") |
16 | + | if (peripheral.isPresent(v) and peripheral.getType(v) == thing) then |
17 | - | print("Make sure that there is an inventory infront containing books or other items for enchating.") |
17 | + | print("'"..thing.."' found on side '"..v.."'.") |
18 | - | print("Make sure that there is an inventory below the turtle for it to place the items it has encanted.") |
18 | + | return peripheral.wrap(v), v |
19 | - | print("Enter the level you want the turtle to enchant at:") |
19 | + | |
20 | - | while enchantLevel <= 0 |
20 | + | |
21 | - | enchantLevel = tonumber(read()) |
21 | + | |
22 | print("ERROR: '"..thing.."' not found!") | |
23 | return nil, nil | |
24 | end | |
25 | - | local function clearSlot(slotNumber) --Attemps to clear the slot slotNumber |
25 | + | |
26 | - | turtle.select(slotNumber) |
26 | + | local function toLevel(experience) |
27 | if experience <= 272 then | |
28 | - | if not turtle.dropDown() then |
28 | + | return experience / 17 |
29 | elseif experience > 272 and experience <= 825 then | |
30 | return 9.84 + 0.17 * math.sqrt(24 * experience - 5159) | |
31 | else | |
32 | return 21.6 + 0.075 * math.sqrt(56 * experience - 32511) | |
33 | end | |
34 | end | |
35 | ||
36 | - | clearSlot(i) |
36 | + | local function clearSlot(slotNumber) --Attemps to clear the slot slotNumber |
37 | if turtle.getItemCount(slotNumber) ~= 0 then | |
38 | turtle.select(slotNumber) | |
39 | if not turtle.drop() then | |
40 | - | local function getItem() --Attemps to take something from the chest above the turtle |
40 | + | |
41 | end | |
42 | end | |
43 | end | |
44 | ||
45 | local function clearSlots() --Places all the items into the chest under the turtle | |
46 | for i = 1,16 do | |
47 | if turtle.getItemCount(i) ~= 0 then | |
48 | clearSlot(i) | |
49 | end | |
50 | end | |
51 | end | |
52 | ||
53 | local function getItem() --Attempts to take something from the chest above the turtle | |
54 | clearSlots() | |
55 | turtle.select(slot) | |
56 | if not turtle.suck() then | |
57 | - | print("Number of enchants performed by the turtle: " .. enchants) |
57 | + | |
58 | end | |
59 | - | turtle.drop() --Replaces the items if it doesn't have enough levels |
59 | + | |
60 | if not turtle.drop(turtle.getItemCount(slot) - 1) then | |
61 | print("ERROR: failure to reduce slot number " .. slot .. " to one item") | |
62 | end | |
63 | end | |
64 | end | |
65 | ||
66 | - | levels = xp.getLevels() |
66 | + | |
67 | turtle.select(slot) | |
68 | - | for i = 1,attacks do |
68 | + | |
69 | - | while not turtle.attackUp() do end |
69 | + | |
70 | print("Enchants Performed: " .. enchants) | |
71 | end | |
72 | - | xp.collect() |
72 | + | |
73 | - | levels = xp.getLevels() - levels |
73 | + | |
74 | - | print("Gained " .. levels .. " for " .. attacks .. " attacks.") |
74 | + | |
75 | - | if levels >= enchantLevel then --Assumes all mobs that drop xp (for fine tuning) |
75 | + | |
76 | - | attacks = attacks - 1 |
76 | + | local xp = wrapPeripheral("xp") |
77 | - | elseif levels < enchantLevel then --Assumes a constant flow of 1 hit kill mobs that drop 5 xp each |
77 | + | if (not xp) then |
78 | - | attacks = attacks + 5 * (enchantLevel - levels) |
78 | + | print("ERROR: xp peripheral is necessary") |
79 | os.shutdown() | |
80 | - | print("Turtle will now attack " .. attacks .. " times before attempting to enchant") |
80 | + | |
81 | xp.setAutoCollect(true) --Sets the turtle to automatically collect xp | |
82 | - | getItem() |
82 | + | |
83 | - | enchant() |
83 | + | |
84 | print("The turtle will attack mobs above it.") | |
85 | print("It will look for items to enchant in the inventory infront of it.") | |
86 | print("It will place enchanted items in an inventory below it.") | |
87 | io.write("Level to Enchant: ") | |
88 | if enchantLevel <= 0 then | |
89 | while enchantLevel <= 0 do | |
90 | enchantLevel = tonumber(read()) | |
91 | end | |
92 | else | |
93 | print(enchantLevel) | |
94 | end | |
95 | ||
96 | --Main Script | |
97 | while true do | |
98 | while not turtle.attackUp() do | |
99 | xp.collect() | |
100 | end | |
101 | if xp.getLevels() >= enchantLevel then | |
102 | getItem() | |
103 | enchant() | |
104 | end | |
105 | end |