Скрипт видит не только то, что создал сам. Ему доступны все встроенные модули клиента: Aura, Speed, ESP и остальные. Можно спросить, включён ли модуль, переключить его, прочитать и поменять его настройки. Это нужно, когда твой скрипт должен дружить со штатными функциями клиента, а не мешать им.
Всё начинается с поиска по имени. Имя бери прямо из меню клиента, большие и маленькие буквы и пробелы неважны.
aura = client.find("Aura") # вернёт модуль или None, если такого нет
if aura is None:
client.error("Модуль Aura не найден")
else:
client.msg("Aura сейчас " + ("включена" if aura.isEnabled() else "выключена"))Найденный модуль ведёт себя точно так же, как твой собственный: у него есть isEnabled(), setEnabled(), toggle(), getName().
Если объект модуля тебе не нужен, а нужно только действие, есть короткая форма.
client.modules.enabled("Aura") # включена ли, отвечает True или False
client.modules.enable("Aura") # включить
client.modules.disable("Aura") # выключить
client.modules.toggle("Aura") # переключитьСамый частый случай: не мешать ауре. Пока она работает, наш модуль молчит.
mod = Module("Polite", "Combat")
mod.setDesc("Не работает, пока включена Aura")
@events.tick
def on_tick(event):
if not mod.isEnabled() or not world.ingame():
return
if client.modules.enabled("Aura"):
return # уступаем дорогу
# дальше своя логикаНастройка чужого модуля достаётся тем же client.find, только вторым аргументом. Вернётся такой же объект, какой ты создаёшь через Slider или Checkbox, со всеми привычными get() и set().
dist = client.find("Aura", "modules.settings.aura.attackDistance")
if dist is not None:
print("дистанция атаки:", dist.get())
dist.set(4.0) # можно и записатьГадать не нужно. У любого модуля можно попросить список всех его настроек и распечатать их вместе с именами. Один раз запустил, выписал нужное из лога и дальше работаешь напрямую.
mod = Module("Dumper", "Other")
def dump(module_name):
other = client.find(module_name)
if other is None:
client.error("Модуль %s не найден" % module_name)
return
for ps in list(other.settings()):
t = ps.type()
if t == "boolean":
value = ps.boolGet()
elif t == "slider":
value = ps.numGet()
elif t == "mode":
i = ps.modeIndex()
labels = list(ps.optionLabels())
value = labels[i] if i >= 0 else "-"
else:
value = "<%s>" % t
# rawName() это то самое постоянное имя, name() это подпись из меню
print("%s [%s] = %s" % (ps.rawName(), ps.name(), value))
Button(mod, "Показать настройки Aura").action(lambda: dump("Aura"))Результат ищи в latest.log. У каждой настройки свой тип, и методы у типов разные.
| Тип | Чем читать и менять |
|---|---|
у любого типа | name() rawName() type() |
boolean | boolGet() boolSet(b) boolToggle() |
slider | numGet() numSet(v) numMin() numMax() |
mode | optionLabels() modeIndex() modeSelect(i) |
select | optionLabels() selOn(i) selToggle(i) |
color | colorGet() colorSet(c) |
button | click() |
bind | bindName() bindSet(key) |