Пример #1
0
class GmdHeader(Struct):
    STRUCT_SIZE = 40
    magic: ft.uint()
    version: ft.uint()
    language: ft.uint()
    unk1: ft.uint()
    unk2: ft.uint()
    key_count: ft.uint()
    string_count: ft.uint()
    key_block_size: ft.uint()
    string_block_size: ft.uint()
    name_size: ft.uint()

    def __init__(self, parent, index, data, offset):
        super().__init__(parent, index, data, offset)
        self.name = self.read_name()

    def read_name(self):
        bstring = self.data[GmdHeader.name_size.
                            after:GmdHeader.name_size.after + self.name_size]
        try:
            return bstring.decode("UTF-8")
        except Exception:
            return ""

    @property
    def total_size(self):
        return GmdHeader.name_size.after + self.name_size + 1
Пример #2
0
class MkitEntry(Struct):
    STRUCT_SIZE = 20
    result_item_id: ft.uint()
    research_points: ft.uint()
    melding_points: ft.uint()
    category: ft.uint()
    unk1: ft.uint()
Пример #3
0
class MskEntry(Struct):
    STRUCT_SIZE = 20
    id: ft.uint()
    note1: ft.uint(
    )  # note: any notes at FF FF FF FF means that it doesn't exist
    note2: ft.uint()
    note3: ft.uint()
    note4: ft.uint()
Пример #4
0
class RemFile(ft.Struct):
    STRUCT_SIZE = 110
    signature: ft.uint()
    signatureExt: ft.short()
    id: ft.uint()
    drop_mechanic: ft.uint()
    item_ids: ext.blist(ft.uint(), count=16)
    item_qtys: ext.blist(ft.ubyte(), count=16)
    item_chances: ext.blist(ft.ubyte(), count=16)

    def iter_items(self):
        for i in range(16):
            item_id = self.item_ids[i]
            item_qty = self.item_qtys[i]
            item_chance = self.item_chances[i]
            if item_id and item_qty and item_chance:
                yield (item_id, item_qty, item_chance)
Пример #5
0
class GmdInfoItem(Struct):
    STRUCT_SIZE = 32
    string_index: ft.uint()
    hash_key_2x: ft.int()
    hash_key_3x: ft.int()
    pad: ft.pad(4)
    key_offset: ft.long()
    list_index: ft.long()
Пример #6
0
class EqCrtEntry(Struct):
    STRUCT_SIZE = 33
    equip_type: ft.ubyte()
    equip_id: ft.ushort()
    key_item: ft.ushort()
    unk1: ft.int()
    unk2: ft.uint()
    rank: ft.uint()
    item1_id: ft.ushort()
    item1_qty: ft.ubyte()
    item2_id: ft.ushort()
    item2_qty: ft.ubyte()
    item3_id: ft.ushort()
    item3_qty: ft.ubyte()
    item4_id: ft.ushort()
    item4_qty: ft.ubyte()
    unk3: ft.pad(4)
Пример #7
0
class RodInseEntry(Struct):
    STRUCT_SIZE = 28
    id: ft.uint()
    attack_type: ft.ubyte()  # 0 = Server, 1 = Blunt
    unk1: ft.ubyte()  # unknown, could be GMD. Currently the same as id.
    unk2: ft.ubyte()
    base_model_id: ft.ushort()
    tree_id: ft.byte()
    cost: ft.uint()
    rarity: ft.ubyte()
    power: ft.ushort()
    speed: ft.ushort()
    heal: ft.ushort()
    unk3: ft.ushort()
    dust_type: ft.ushort()  # 0 = blast, 1 = heal, 2 = paralysis, 3 = poison
    tree_position: ft.ubyte()
    unk4: ft.ushort()  # can't be GMD, as dragonsoul is OOB
Пример #8
0
class LbmBaseEntry(Struct):
    STRUCT_SIZE = 14
    rarity: ft.ubyte()
    equip_type: ft.ubyte()
    crafting_cost: ft.uint()
    item1_id: ft.ushort()
    item1_qty: ft.ushort()
    item2_id: ft.ushort()
    item2_qty: ft.ushort()
Пример #9
0
class KireEntry(Struct):
    STRUCT_SIZE = 18
    id: ft.uint()
    red: ft.ushort()
    orange: ft.ushort()
    yellow: ft.ushort()
    green: ft.ushort()
    blue: ft.ushort()
    white: ft.ushort()
    purple: ft.ushort()
Пример #10
0
class AmDatEntry(Struct):
    STRUCT_SIZE = 60
    id: ft.uint()
    order: ft.ushort()
    variant: ft.ubyte()
    set_id: ft.ushort()
    type: ft.ubyte()
    equip_slot: ft.ubyte()
    defense: ft.ushort()
    mdl_main_id: ft.ushort()
    mdl_secondary_id: ft.ushort()
    icon_color: ft.ubyte()
    pad8: ft.ubyte()
    icon_effect: ft.ubyte()
    rarity: ft.ubyte()
    cost: ft.uint()
    fire_res: ft.byte()
    water_res: ft.byte()
    ice_res: ft.byte()
    thunder_res: ft.byte()
    dragon_res: ft.byte()
    num_gem_slots: ft.ubyte()
    gem_slot1_lvl: ft.ubyte()
    gem_slot2_lvl: ft.ubyte()
    gem_slot3_lvl: ft.ubyte()
    set_skill1: ft.short()
    set_skill1_lvl: ft.ubyte()
    set_skill2: ft.short()
    set_skill2_lvl: ft.ubyte()
    skill1: ft.short()
    skill1_lvl: ft.ubyte()
    skill2: ft.short()
    skill2_lvl: ft.ubyte()
    skill3: ft.short()
    skill3_lvl: ft.ubyte()
    gender: ft.ubyte()
    pad11: ft.ubyte()
    pad12: ft.ubyte()
    pad13: ft.ubyte()
    set_group: ft.ushort()
    gmd_name_index: ft.ushort()
    gmd_desc_index: ft.ushort()
    is_permanent: ft.ubyte()
Пример #11
0
class SgpaEntry(Struct):
    STRUCT_SIZE = 28
    id: ft.uint()
    order: ft.uint()
    size: ft.uint()
    skill1_id: ft.uint()
    skill1_incr: ft.uint()
    skill2_id: ft.uint()
    skill2_incr: ft.uint()
Пример #12
0
class WpDatGEntry(Struct):
    STRUCT_SIZE = 69
    id: ft.uint()
    unk1: ft.ushort()
    base_model_id: ft.short()
    part1_id: ft.short()
    part2_id: ft.short()
    unk7: ft.ubyte()
    color: ft.ubyte()
    tree_id: ft.ubyte()
    is_fixed_upgrade: ft.ubyte()
    muzzle_type: ft.ubyte()
    barrel_type: ft.ubyte()
    magazine_type: ft.ubyte()
    scope_type: ft.ubyte()
    crafting_cost: ft.uint()
    rarity: ft.ubyte()
    raw_damage: ft.ushort()
    defense: ft.ushort()
    affinity: ft.byte()
    element_id: ft.ubyte()
    element_damage: ft.ushort()
    hidden_element_id: ft.ubyte()
    hidden_element_damage: ft.ushort()
    elderseal: ft.ubyte()
    shell_table_id: ft.ushort()
    deviation: ft.ubyte()
    num_gem_slots: ft.ubyte()
    gem_slot1_lvl: ft.ubyte()
    gem_slot2_lvl: ft.ubyte()
    gem_slot3_lvl: ft.ubyte()
    unk2: ft.uint()
    unk3: ft.uint()
    unk4: ft.uint()
    unk5: ft.ubyte()
    special_ammo_type: ft.ubyte()
    tree_position: ft.ubyte()
    order: ft.ushort()
    gmd_name_index: ft.ushort()
    gmd_description_index: ft.ushort()
    skill_id: ft.ushort()
    unk6: ft.ushort()
Пример #13
0
class WpDatEntry(Struct):
    STRUCT_SIZE = 66
    id: ft.uint()
    unk1: ft.ubyte()
    unk6: ft.ubyte()
    base_model_id: ft.ushort()
    part1_id: ft.ushort()
    part2_id: ft.ushort()
    unk7: ft.ubyte()
    color: ft.ubyte()
    tree_id: ft.ubyte()
    is_fixed_upgrade: ft.ubyte()
    crafting_cost: ft.uint()
    rarity: ft.ubyte()
    kire_id: ft.ubyte()
    handicraft: ft.ubyte()
    raw_damage: ft.ushort()
    defense: ft.ushort()
    affinity: ft.byte()
    element_id: ft.ubyte()
    element_damage: ft.ushort()
    hidden_element_id: ft.ubyte()
    hidden_element_damage: ft.ushort()
    elderseal: ft.ubyte()
    num_gem_slots: ft.ubyte()
    gem_slot1_lvl: ft.ubyte()
    gem_slot2_lvl: ft.ubyte()
    gem_slot3_lvl: ft.ubyte()
    wep1_id: ft.ushort()
    wep2_id: ft.ushort()
    unk2: ft.uint()
    unk3: ft.uint()
    unk4: ft.uint()
    tree_position: ft.ubyte()
    order: ft.ushort()
    gmd_name_index: ft.ushort()
    gmd_description_index: ft.ushort()
    skill_id: ft.ushort()
    unk5: ft.ushort()
Пример #14
0
class EqCusEntry(Struct):
    STRUCT_SIZE = 41
    equip_type: ft.ubyte()
    equip_id: ft.ushort()
    key_item_id: ft.ushort()
    unk1: ft.int()
    unk2: ft.uint()
    unk3: ft.uint()
    item1_id: ft.ushort()
    item1_qty: ft.ubyte()
    item2_id: ft.ushort()
    item2_qty: ft.ubyte()
    item3_id: ft.ushort()
    item3_qty: ft.ubyte()
    item4_id: ft.ushort()
    item4_qty: ft.ubyte()
    descendant1_idx: ft.ushort()
    descendant2_idx: ft.ushort()
    descendant3_idx: ft.ushort()
    descendant4_idx: ft.ushort()
    unk4: ft.ubyte()
    group: ft.ubyte()
    unk5: ft.ushort()
Пример #15
0
class OAmDatEntry(Struct):
    STRUCT_SIZE = 42
    id: ft.uint()
    set_id: ft.ushort()
    equip_slot: ft.ubyte()
    unk1: ft.ubyte()
    defense: ft.uint()
    rarity: ft.ubyte()
    list_order: ft.ushort()
    model_id: ft.uint()
    crafting_cost: ft.uint()
    variant: ft.ubyte()
    unk2: ft.ubyte()
    unk3: ft.ubyte()
    unk4: ft.ubyte()
    fire_res: ft.byte()
    water_res: ft.byte()
    ice_res: ft.byte()
    thunder_res: ft.byte()
    dragon_res: ft.byte()
    unk5: ft.uint()
    set_group: ft.ushort()
    gmd_name_index: ft.ushort()
    gmd_desc_index: ft.ushort()
Пример #16
0
class StmpEntry(Struct):
    STRUCT_SIZE = 40
    id: ft.uint()
    unk1: ft.ushort()
    unk3: ft.ushort()
    unk4: ft.ushort()
    unk6: ft.ushort()
    client_id: ft.int()
    unk7: ft.uint()
    rp_cost: ft.uint()
    item1_id: ft.uint()
    item2_id: ft.uint()
    item1_qty: ft.uint()
    item2_qty: ft.uint()
Пример #17
0
class ItmEntry(Struct):
    STRUCT_SIZE = 32
    id: ft.uint()
    sub_type: ft.ubyte()
    type: ft.uint()
    rarity: ft.ubyte()
    carry_limit: ft.ubyte()
    unk_limit: ft.ubyte()
    order: ft.ushort()
    flags: ft.uint()
    icon_id: ft.uint()
    icon_color: ft.ubyte()
    carry_item: ft.ubyte()
    sell_price: ft.uint()
    buy_price: ft.uint()
Пример #18
0
class AmrsEntry(Struct):
    STRUCT_SIZE = 4
    id: ft.uint()
Пример #19
0
class WepWslEntry(Struct):
    STRUCT_SIZE = 7
    id: ft.uint()
    note1: ft.ubyte()
    note2: ft.ubyte()
    note3: ft.ubyte()
Пример #20
0
class MibHeader(ft.Struct):
    STRUCT_SIZE = (17 * 4) + (6 * 2) + 3
    mibSignature: ft.ushort()
    padding: ft.uint()
    mibId: ft.uint()
    starRating: ft.ubyte()
    unk1: ft.uint(
    )  # Looks to be HR vs LR, in terms of damage modifiers (zorah quests are 6star and LR damage)
    unk2: ft.uint()
    rankRewards: ft.uint()  # LR or HR?
    mapId: ft.uint()
    unk4: ft.uint()
    playerSpawn: ft.uint()
    binaryMapToggle: ft.uint()
    dayNightControl: ft.uint()
    weatherControl: ft.uint()
    unk5: ft.uint()
    zennyReward: ft.uint()
    faintPenalty: ft.uint()
    unk6: ft.uint()
    questTimer: ft.uint()
    unk7: ft.ubyte()
    monsterIconId: ext.blist(ft.ushort(), 5)
    hrRestriction: ft.ubyte()  # difficulty modifier
    unk8: ft.uint()
Пример #21
0
class SedEntry(Struct):
    STRUCT_SIZE = 12
    equip_type: ft.uint()
    equip_id: ft.uint()
    cost: ft.uint()
Пример #22
0
class WepGlanEntry(Struct):
    STRUCT_SIZE = 8
    id: ft.uint()
    type: ft.ushort()
    level: ft.ushort()
Пример #23
0
class WepSaxeEntry(Struct):
    STRUCT_SIZE = 7
    id: ft.uint()
    unk1: ft.ubyte()
    unk2: ft.ubyte()
    unk3: ft.ubyte()
Пример #24
0
class MibObjectiveSection(ft.Struct):
    STRUCT_SIZE = (13 * 4) + 4
    unk1: ft.uint()
    unk2: ft.uint()
    highlightedUnknown2: ft.uint()
    questType: ft.ubyte()
    questTypeIcon: ft.ubyte()
    atFlag: ft.ubyte()  # 02 enables AT global modifier
    unk3: ft.ubyte()
    rem_ids: ext.blist(ft.uint(), count=3)
    suppId1: ft.uint()
    unk4: ft.uint()  # suppid 2?
    unk5: ft.uint()  # suppid 3?
    unk6: ft.uint()
    hrPoints: ft.uint()
    unk7: ft.uint()
    unk8: ft.uint()