forked from rpherbig/dr-scripts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
gate.lic
138 lines (115 loc) · 3.86 KB
/
gate.lic
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# Documentation: https://elanthipedia.play.net/Lich_script_repository#gate
custom_require.call(%w[common common-arcana events spellmonitor])
# expects a 'gate' waggle set
# expects raw channeling feat
class Moongate
include DRC
include DRCA
def initialize
arg_definitions = [
[
{ name: 'person', regex: /\w+/, description: 'Person to gate' },
{ name: 'release', regex: /release/i, optional: true, description: 'Release gate once person comes through' },
{ name: 'teleport', regex: /teleport/i, optional: true, description: 'Cast teleport instead of moongate' }
]
]
args = parse_args(arg_definitions)
@settings = get_settings
@lnet = (Script.running + Script.hidden).find { |val| val.name == 'lnet' }
gate_prep(args.person, args.release, args.teleport)
end
def gate_prep(person, release, teleport)
send_message(person, 'Lets try to gate!')
check_buffs
moon = get_moon
unless moon
send_message(person, 'No moons, no gates!')
exit
end
focus_moonbeam(moon)
send_message(person, 'Locating and shifting...')
locate_and_shift(moon, person)
unless verify_moon?(moon)
send_message(person, 'The moon is no longer visible. Try again!')
echo "#{moon} is no longer visible. Try again!"
exit
end
if teleport
cast_teleport(moon)
else
send_message(person, 'Here comes the gate...')
cast_moongate(moon)
send_message(person, 'Moongate should be open!')
if release
bput('mana', "#{person} came through a")
bput('release moongate', 'You release your mental hold on the lunar energy that sustains your moongate.')
end
end
end
def cast_moongate(moon)
data = { 'abbrev' => 'MG' }
data = check_discern(data, @settings)
cast_spell('moongate', data['mana'], moon)
end
def cast_teleport(moon)
data = { 'abbrev' => 'teleport' }
data = check_discern(data, @settings)
cast_spell('teleport', data['mana'], moon)
end
def focus_moonbeam(moon)
cast_spell('fm', 1, moon, true)
end
def shift_moonbeam
return if check_if_buff_active('Shift Moonbeam', 6)
cast_spell('sm', 25, 'self')
end
def locate(person, mana = 25)
cast_spell('locate', mana, person)
end
def locate_and_shift(moon, person)
shift_moonbeam
cast_cv
locate(person)
send_message(person, 'found you!')
bput("gesture #{moon} #{person}", 'Roundtime')
end
def cast_cv
return if check_if_buff_active('Clear Vision', 4)
cast_spell('cv', 1, 'self', true)
end
def verify_moon?(moon, uptime = 4)
is_vis = UserVars.moons['visible'].include? moon
is_time = UserVars.moons[moon]['timer'] >= uptime
is_vis && is_time
end
def check_if_buff_active(spell, time)
DRSpells.active_spells[spell] && DRSpells.active_spells[spell] > time
end
def get_moon
unless moon = UserVars.moons.find { |moon_name, moon_data| UserVars.moons['visible'].include?(moon_name) && moon_data['timer'] >= 8 }.first
unless Script.running? 'moonwatch'
echo 'moonwatch is not running. Starting it now'
custom_require.call('moonwatch')
echo "Run `;e autostart('moonwatch')` to avoid this in the future"
end
unless moon = UserVars.moons.find { |moon_name, moon_data| UserVars.moons['visible'].include?(moon_name) && moon_data['timer'] >= 8 }.first
echo "Couldn't find any moons to cast with."
UserVars.moons.values[0..2].each { |x| echo x['pretty'] }
return false
end
end
moon
end
def check_buffs
wait_for_script_to_complete('buff', ['gate'])
end
def send_message(character, message)
@lnet.unique_buffer.push("chat to #{character} #{message}")
end
def cast_spell(spell, mana, target, snap = false)
prepare?(spell, mana, false)
snap ? pause(5) : waitcastrt?
cast?("cast #{target}")
end
end
Moongate.new