forked from xWar131x/TPT2
-
Notifications
You must be signed in to change notification settings - Fork 1
/
analyze loot.tpt2
104 lines (95 loc) · 2.86 KB
/
analyze loot.tpt2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
:import adventure_lib
:name {package}:analyze loot
:local string queue
:local string idx
:local vector curPos
:local string targetPos
:local string lootPositions
#setField(index, value) lss("_f" . {index}, {value})
#getField(index) lsg("_f" . {index})
#setTPos(index, value) lss("_t" . {index}, {value})
#getTPos(index) lsg("_t" . {index})
queue = {posToString(x(adventure.playerPos()), y(adventure.playerPos()))} . "S:"
; On the first entry of this loop, the junk entry "_f" will be set to "S".
; This has no effect.
; In general, lootPositions, queue and setField are protected so that if the field
; has already been set, we won't take action again.
loop1:
curPos = {firstElementPos}
idx = sub(queue, 0, 4)
lootPositions = if(\
{getField(idx)} == ""\
&& contains(adventure.entityType(curPos), "Chest"),\
{posToString(x(curPos), y(curPos))} . ":",\
"") . lootPositions
{setField(if({getField(idx)} != "", "", idx), {firstElementDir})}
queue = sub(queue, 6, 99999) . if({getField(idx)} != {firstElementDir},\
"",\
if(\
adventure.isWall(curPos + vec(0., 1.)) || y(curPos) >= 18.,\
"",\
{posToString(x(curPos), y(curPos) + 1.)} . "U:"\
) . if(\
adventure.isWall(curPos + vec(0., -1.)) || y(curPos) < 1.,\
"",\
{posToString(x(curPos), y(curPos) - 1.)} . "D:"\
) . if(\
adventure.isWall(curPos + vec(1., 0.)) || x(curPos) >= 18.,\
"",\
{posToString(x(curPos) + 1., y(curPos))} . "R:"\
) . if(\
adventure.isWall(curPos + vec(-1., 0.)) || x(curPos) < 1.,\
"",\
{posToString(x(curPos) - 1., y(curPos))} . "L:"\
)\
)
gotoif(loop1, queue != "")
continue:
lootPositions = {target_positions} . lootPositions
loop2:
targetPos = sub(lootPositions, 0, 4)
curPos = {strToVec(targetPos)}
lootPositions = sub(lootPositions, 5, 99999)
innerLoop2:
idx = {posToString(x(curPos), y(curPos))}
global.string.set({target_pos_var}, if(\
{getField({posToString(\
x(curPos) - {nextX({getField(idx)})},\
y(curPos) - {nextY({getField(idx)})}\
)})} == "S"\
&& false == contains({target_positions}, targetPos),\
targetPos . ":" . {target_positions},\
if(\
false == contains({target_positions}, targetPos) \
&& {getTPos(idx)} != "",\
sub(\
{target_positions},\
0,\
index({target_positions}, {getTPos(idx)}, 0)\
)\
. targetPos . ":"\
. sub(\
{target_positions},\
index({target_positions}, {getTPos(idx)}, 0),\
99999\
),\
{target_positions}\
)\
))
{setTPos(\
idx,\
if(\
false == contains({target_positions}, targetPos)\
|| {getTPos(idx)} == sub({target_positions}, index({target_positions}, targetPos, 0) + 5, 4),\
targetPos,\
{getTPos(idx)}\
)\
)}
curPos -= {nextDir({getField(idx)})}
goto(if(\
{getField({posToString(x(curPos), y(curPos))})} != "S",\
innerLoop2,\
if(len(lootPositions) > 0, loop2, end)\
))
end:
wait(0.)