Exemplo n.º 1
0
    def __init__(self):
        super().__init__()
        self.statements = set()

        am = AddressManager(self.storage.data, self.logger)
        ptr_main = am.get("main ptr",
                          scan_address,
                          pattern_main,
                          add=0x14,
                          cmd_len=8)
        addr_move_func = am.get("move func addr", scan_pattern,
                                pattern_actor_move)
        self.storage.save()

        self.main_addr = cast(ptr_main, POINTER(c_int64))
        self.main_coor = read_memory(PointerStruct(c_float * 3, 160), ptr_main)
        self._enable = False

        class ActorMoveHook(Hook):
            restype = c_int64
            argtypes = [c_int64, c_float, c_float, c_float]

            def hook_function(_self, addr, x, z, y):
                if self.main_addr[0] == addr and (self._enable
                                                  or self.get_result()):
                    return _self.original(addr, *self.main_coor.value)
                return _self.original(addr, x, z, y)

        self.hook = ActorMoveHook(addr_move_func)
        api.command.register(command, self.process_command)
        self.register_api(
            'PosLock',
            type(
                'obj', (object, ), {
                    'enable': self.enable,
                    'disable': self.disable,
                    'register_statement': self.register_statement,
                    'remove_statement': self.remove_statement,
                }))
Exemplo n.º 2
0
    def __init__(self):
        super().__init__()

        am = AddressManager(self.storage.data, self.logger)

        self.cam_ptr = am.get('cam_ptr', scan_address, cam_sig, cmd_len=7)
        self.cam_collision_jmp_addr = am.get('cam_collision_jmp', scan_pattern,
                                             cam_collision_jmp_sig)
        zoom_offset = read_int(
            am.get('zoom_offset_addr', scan_pattern, zoom_offset_sig, add=4))
        fov_offset = read_int(
            am.get('fov_offset_addr', scan_pattern, fov_offset_sig, add=4))
        angle_offset = read_int(
            am.get('angle_offset_addr', scan_pattern, angle_offset_sig, add=4))
        self.cam_distance_reset_addr = am.get('cam_distance_reset',
                                              scan_pattern,
                                              cam_distance_reset_func_sig)

        version_data = self.storage.data[FFxiv_Version]
        if 'cam_distance_reset_original' not in version_data:
            version_data['cam_distance_reset_original'] = base64.b64encode(
                read_ubytes(self.cam_distance_reset_addr, 8)).decode('ascii')
        self.cam_distance_reset_original = base64.b64decode(
            version_data['cam_distance_reset_original'].encode('ascii'))

        self.storage.data.setdefault('user_default', DEFAULT)
        self.storage.data.setdefault('user_default_no_collision', False)

        self.storage.save()

        self.cam = read_memory(
            PointerStruct(
                OffsetStruct({
                    'zoom': (MinMax, zoom_offset + 4),
                    'fov': (MinMax, fov_offset + 4),
                    'angle': (MinMax, angle_offset),
                }), 0), self.cam_ptr).value
        api.command.register(command, self.process_command)
Exemplo n.º 3
0
speaker = win32com.client.Dispatch("SAPI.SpVoice")

recipe_sheet = realm.game_data.get_sheet('Recipe')
craft_start_sig = "40 53 48 83 EC ? 48 8B D9 C6 81 ? ? ? ? ? E8 ? ? ? ? 48 8D 4B ?"
craft_status_sig = "8B 05 ? ? ? ? BE ? ? ? ? 89 44 24 ?"
base_quality_ptr_sig = "48 83 3D ? ? ? ? ? 74 ? E8 ? ? ? ? 48 8B C8 E8 ? ? ? ? 3C ? 0F B6 CB"

CraftStatus = OffsetStruct({
    'round': (c_uint, 0x18),
    'current_progress': (c_uint, 0x1c),
    'current_quality': (c_uint, 0x24),
    'current_durability': (c_uint, 0x30),
    'status_id': (c_ushort, 0x38)
})
BaseQualityPtr = PointerStruct(c_uint, 0x60, 0x408)

registered_solvers = [
    JustDoIt.JustDoIt,
    #MacroCraft.MacroCraft,
    MacroCraft2.MacroCraft,
    SkyBuilders.SkyBuilders,
]

callback = lambda ans: speaker.Speak(ans)


class CraftStart(EventBase):
    id = "craft_start"
    name = "craft start"
Exemplo n.º 4
0
from .AddressManager import do_text_command_addr, text_command_ui_module_ptr_addr
from threading import Lock

_lock = Lock()

TextCommandStruct = OffsetStruct(
    {
        "cmd": c_void_p,
        "t1": c_longlong,
        "tLength": c_longlong,
        "t3": c_longlong,
    },
    full_size=400)

_ = ida_sig_to_pattern
ui_module = memory.read_memory(PointerStruct(c_void_p, 0),
                               text_command_ui_module_ptr_addr)
_text_command_func = CFUNCTYPE(c_int64, c_void_p, c_void_p, c_int64,
                               c_char)(do_text_command_addr)


def _do_text_command(command: str) -> int:
    encoded_command = command.encode('utf-8')
    cmd_size = len(encoded_command)
    cmd = OffsetStruct({"cmd": c_char * cmd_size},
                       full_size=cmd_size + 30)(cmd=encoded_command)
    arg = TextCommandStruct(cmd=addressof(cmd),
                            t1=64,
                            tLength=cmd_size + 1,
                            t3=0)
    return _text_command_func(ui_module.value, addressof(arg), 0, 0)
Exemplo n.º 5
0
from FFxivPythonTrigger.memory import *
from FFxivPythonTrigger.memory.StructFactory import PointerStruct
from .struct import Combat
from . import AddressManager

Enemies = PointerStruct(Combat.Enemies, *AddressManager.enemies_shifts)


class CombatData(object):
    combo_state: Combat.ComboState = read_memory(
        Combat.ComboState, AddressManager.combo_state_addr)
    skill_queue: Combat.SkillQueue = read_memory(
        Combat.SkillQueue, AddressManager.skill_queue_addr)
    cool_down_group: Combat.CoolDownGroups = read_memory(
        Combat.CoolDownGroups, AddressManager.cool_down_group_addr)
    _enemies: Enemies = read_memory(Enemies, AddressManager.enemies_base_addr)

    @property
    def skill_ani_lock(self):
        return read_memory(c_float, AddressManager.skill_ani_lock_addr)

    @skill_ani_lock.setter
    def skill_ani_lock(self, value):
        write_float(AddressManager.skill_ani_lock_addr, float(value))

    @property
    def enemies(self) -> Combat.Enemies:
        return self._enemies.value

    @property
    def is_in_fight(self) -> bool:
Exemplo n.º 6
0
                    w/west,
                    s/south
"""

command = "@tp"
pattern_main = "f3 0f ?? ?? ?? ?? ?? ?? eb ?? 48 8b ?? ?? ?? ?? ?? e8 ?? ?? ?? ?? 48 85"
pattern_fly = "48 8d ?? ?? ?? ?? ?? 84 c0 75 ?? 48 8d ?? ?? ?? ?? ?? 80 79 66 ?? 74 ?? e8 ?? ?? ?? ?? c6 87 f4 03 ?? ??"

Vector = OffsetStruct({
    "x": (c_float, 0),
    "y": (c_float, 8),
    "z": (c_float, 4),
    "r": (c_float, 16),
})

MainCoor = PointerStruct(Vector, 160)


class Teleporter(PluginBase):
    name = "Teleporter"

    def __init__(self):
        super().__init__()
        am = AddressManager(self.storage.data, self.logger)
        ptr_main = am.get("main ptr",
                          scan_address,
                          pattern_main,
                          add=0x14,
                          cmd_len=8)
        addr_fly = am.get("fly addr",
                          scan_address,