class Value(Model): """数值""" value = FloatField(0x6C, label='数量') scaled_maximum = FloatField(0x58, label='缩放最大值') base_maximum = FloatField(0x5C, label='最大值') def value_max(self): self.set_with('value', 'scaled_maximum')
class MovementManager(Model): base_move_speed = FloatField(0x2D0, label='基本移动速度') current_move_speed = FloatField(0x2CC, label='当前移动速度') current_jump_height = FloatField(0x300, label='当前跳跃高度') base_jump_height = FloatField(0x304, label='基本跳跃高度') rriction = FloatField(0x2FC, label='摩擦力') coord = CoordField(0x5C, label='坐标') move_vector = CoordField(0x124, label='移动向量')
class Unit(Model): type = ModelPtrField(8, UnitType) player = ModelPtrField(0xC, Player) hp = FloatField(0x30, label='HP') ptr_unknow1 = Field(0x18, label='不明指针') selected = ByteField(0x36, label='选中状态') resource = FloatField(0x44, label='资源') ptr_unknow2 = Field(0x6C, label='不明指针2') construction_progress = FloatField(0x1FC, label="建造进度")
class PlayerConfig(Model): """玩家属性""" player_model_scale = FloatField(0x78, label='角色模型大小') player_visibility = ByteField(0xBF, label='角色能见度') move_speed_mult = FloatField(0x310, label='移动速度倍数') current_weapon = ModelPtrField(0x470, Weapon) second_wind = ModelPtrField((0x6A4, 0x68), SecondWind) hit_ricochet_chance = FloatField(0x948, label='击飞') miss_ricochet_chance = FloatField(0x9AC, label='避开击飞') ignore_fatal_damage_chance = FloatField(0x9E8, label='免受致命伤') coord = CoordField(0x60, label='坐标') move_vector = CoordField(0x104, label='移动向量')
class Global(Model): energy = FloatField(0xAE4, label="体力 f 3.39") vigour = FloatField(0xAB4, label="元气 f 5.23") health = Field(0xA98, label="元精 4 2346") skill = Field(0xB18, label="战意技 4 1000 截风100") atk = Field(0xB88, label="攻击 9999") defense = Field(0xBB8, label="防御") critical_buff = Field(0xBE8, label="爆击伤害加成 999") critical = Field(0xBF0, label="暴击率") attr_wood = Field(0xC10, label="木属性") attr_fire = Field(0xC30, label="火属性") attr_earth = Field(0xC50, label="土属性") attr_metal = Field(0xC70, label="金属性") attr_water = Field(0xC90, label="水属性")
class Weapon(Model): level = Field(0x230, label='需求等级') real_magazine_size = FloatField(0x3B0, label='计算弹夹容量') base_magazine_size = FloatField(0x3B4, label='基本弹夹容量') current_ammo = FloatField(0x3CC, label='当前弹药') total_ammo = FloatField(0x390, label='总弹药数') # all_ammo = ModelPtrField(0x3BC, Value, label='包含弹夹的总弹药数') calculated_damage = FloatField(0x2BC, label='计算伤害') base_damage = FloatField(0x2C0, label='基本伤害') calculated_accuracy = FloatField(0x2A8, label='计算偏移率') base_accuracy = FloatField(0x2AC, label='基本偏移率') calculated_fire_rate = FloatField(0x294, label='计算射击延迟') base_fire_rate = FloatField(0x298, label='基本射击延迟') calculated_bullets_used = Field(0x398, label='计算使用子弹') base_bullets_used = Field(0x39C, label='基本使用子弹') item_price = Field(0x21C, label='物品价格')
class PlayerConfig(Model): """玩家属性""" player_model_scale = FloatField(0x78, label='角色模型大小') time_scale_multiplier = FloatField(0x328, label='时间流逝倍数') gravity = FloatField(0x3A0, label='重力') # confirm player_visibility = ByteField(0xBF, label='角色能见度') player_allegiance = Field(0x518, label='角色忠诚') move_speed_mult = FloatField(0x320, label='移动速度倍数') current_weapon = ModelPtrField(0x480, Weapon) hit_ricochet_chance = FloatField(0xA1C, label='击飞') miss_ricochet_chance = FloatField(0xA80, label='避开击飞') ignore_fatal_damage_chance = FloatField(0xABC, label='免受致命伤') bullet_reflect_chance = FloatField(0xA44, label='子弹反弹几率') coord = CoordField(0x60, label='坐标') move_vector = CoordField(0x104, label='移动向量') ffyl_time_mult = FloatField(0xBDC, label='原地复活时间倍数') ffyl_Health_mult = FloatField(0xBDC, label='原地复活生命倍数') current_vehicle = ModelPtrField(0x450, VehicleManager)
class Weapon(Model): display_level = Field(0x1E0, label='显示等级') specification_level = Field(0x1E4, label='作用等级') actual_level = Field(0xE3C, label='武器实际等级') item_actual_level = Field(0x8B4, label='物品实际等级') calculated_damage = FloatField(0x8E8, label='计算伤害') base_damage = FloatField(0x8EC, label='基本伤害') calculated_accuracy = FloatField(0x8D4, label='计算偏移率') base_accuracy = FloatField(0x8D8, label='基本偏移率') calculated_fire_rate = FloatField(0x8C0, label='计算射击延迟') base_fire_rate = FloatField(0x8C4, label='基本射击延迟') calculated_projectile_speed = FloatField(0xEB4, label='计算子弹速') base_projectile_speed = FloatField(0xEB8, label='基本子弹速') calculated_reload_speed = FloatField(0xA30, label='计算换弹速') base_reload_speed = FloatField(0xA34, label='基本换弹速') calculated_burst_length = Field(0xAFC, label='计算爆发长度') # 0: Auto base_burst_length = Field(0xB00, label='基本爆发长度') calculated_projectiles_per_shot = Field(0xDB8, label='计算射击子弹数') base_projectiles_per_shot = Field(0xDBC, label='基本射击子弹数') calculated_bullets_used = Field(0x9DC, label='计算使用子弹') base_bullets_used = Field(0x9E0, label='基本使用子弹') calculated_extra_shot_chance = Field(0xD28, label='计算额外射击机会') base_extra_shot_chance = Field(0xD2C, label='基本额外射击机会') magazine_size = Field(0xA0C, label='弹药库容量') current_bullets = Field(0xA28, label='当前子弹') ammo = ModelPtrField(0x9D0, WeaponAmmo, label='弹药') clip_ammo = Field(0x9D4, label='弹夹子弹') item_price = Field(0x1D0, label='物品价格') item_quantity = Field(0x1D8, label='物品数量') item_state = Field(0x224, label='物品状态') # Favorited, Crossed, Equipped, ect def set_level(self, level): """设置等级""" self.display_level = self.specification_level = level if self.actual_level: self.actual_level = level elif self.item_actual_level: self.item_actual_level = level
class TeamConfig(Model): """团队属性""" moxxi_drink_duration = FloatField(0x10BC, label='莫西饮酒时长') skill_mgr = ModelPtrField((0xC98, 0x58), SkillManager, label='技能') ability_cooldown = ModelPtrField(0xC58, AbilityCooldown, label='主技能冷却') damage_heals_self = FloatField(0xD54) team_ammo_regen = FloatField(0xFE0, label='团队弹药回复') explosives_heal_allies = FloatField(0x114C) bullets_heal_allies = FloatField(0x1110) badass_tokens = FloatField(0x182C, label='坏小子徽章') badass_bonuses = ArrayField((0x183C, 0), 14, Field(0)) # 坏小子加成效果 team_kill_skill_timer_mult = FloatField(0x1A7C) damage_taken_mult = FloatField(0x590, label='伤害倍数?') shock_time = FloatField(0x4A0, label='闪电时间') corrosive_time = FloatField(0x4B4, label='腐蚀时间') fire_time = FloatField(0x48C, label='火焰时间') frost_time = FloatField(0x4DC, label='冰冻时间') melee_damage = FloatField(0x374, label='近战伤害') physical_damage = FloatField(0x608, label='物理伤害') explosive_damage = FloatField(0x5E0, label='爆炸伤害') shock_damage = FloatField(0x5CC, label='闪电伤害') corrosive_damage = FloatField(0x5F4, label='腐蚀伤害') fire_damage = FloatField(0x5B8, label='火焰伤害') frost_damage = FloatField(0x630, label='冰冻伤害')
class AbilityCooldown(Value): mult = FloatField(0x70, label='冷却倍数')
class WeaponAmmo(Value): """弹药""" regen_rate = FloatField(0x84, label='回复速度') status = Field(0x108, label='切换') # Normal: 5, Infinite: 6 infinite = ToggleField(0x108, enable=6, disable=5, label='不减')
class ResourceManager(Model): SIZE = 12 food = FloatField(0, label='食物') wood = FloatField(4, label='木材') rock = FloatField(8, label='石材') gold = FloatField(12, label='黄金')
class SkillManager(Model): ability_status = Field(0x1C, label='主技能状态') ability_duration = FloatField((0, 0x74), label='主技能持续时间') skills = ArrayField(0x40, 33, ModelField(0, SkillItem))
class UnitType(Model): # type = ByteField(0x4, label="类型") # 类型 # dll_name = WordField(0xC, label="语言DLL:名称") # dll_hint = WordField(0xE, label="语言DLL:创建提示") # id1 = WordField(0x10, label="ID 1") # id2 = WordField(0x12, label="ID 2") # id3 = WordField(0x14, label="ID 3") # type2 = WordField(0x16, label="类别") # fn_str = ModelPtrField(0x18, StringField(0), 'fn名称指针') # name_str = ModelPtrField(0x20, StringField(0), '名称指针') # dll_help = Field(0xA8, label="语言DLL:帮助说明") # dll_hot_text = Field(0xAC, label="语言DLL:热键文字") # dll_hot_text_ = Field(0xB0, label="热键文字") hp_max = WordField(0x2A, label="HP上限") view = FloatField(0x2C, label="视野") shipload = ByteField(0x30, label="Shipload") collision = FloatField(0x34, label="碰撞") move_speed = FloatField(0xC8, label="移动速度") search = FloatField(0x104, label="搜索") work_efficiency = FloatField(0x108, label="工作效率") def_items = ModelPtrField(0x128, AtkDefItems) # 防御列表 atk_items = ModelPtrField(0x130, AtkDefItems) # 攻击列表 range_max = FloatField(0x138, label="最大射程") damage_radius = FloatField(0x13C, label="攻击范围") damage_type = Field(0x140, label="伤害方式") atk_interval = FloatField(0x144, label="攻击间隔") # 越小攻速越快(>0) atk_interval2 = FloatField(0x168, label="攻击间隔2") range_min = FloatField(0x15C, label="最小射程") base_def = WordField(0x160, label="显示的防御") base_atk = WordField(0x162, label="显示的攻击") range_base = FloatField(0x164, label="显示的射程") construction_time = WordField(0x182, label="建造时间") thrown_object = WordField(0x148, label="抛掷物单位") addition_thrown_object = WordField(0x1AC, label="附加抛掷物单位") min_thrown_object_count = WordField(0x19C, label="最小附加弹药数") thrown_object_area = CoordField(0x1A0, label="抛掷物产生区域")
class SecondWind(Model): """原地复活""" multiplier = FloatField(0x650, label='生命倍数') fight_time_multiplier = FloatField(0x434, label='时间倍数')
class ShieldHealth(Value): """护甲和生命""" regen_rate = FloatField(0x98, label='回复速度') status = Field(0x108, label='切换') # Normal: 5, God: 6
class Movement(Model): coord = CoordField(0, label='坐标') air_time = FloatField(-0x14, label='空中滞留时间') # 初始30, 减慢为15 jump_height = FloatField(-0x18, label='跳跃高度') move_speed_mult = FloatField(-0x38, label='移动速度倍数')
class PhysicsConfig(Model): """物理属性""" move_speed = FloatField(0x2A8, label='移动速度') jump_height = FloatField(0x2EC, label='跳跃高度') friction = FloatField(0x2D8, label='摩擦力') viewing_height = FloatField(0x360, label='可视高度')
class PhysicsManager(Model): movement_mgr = ModelPtrField((0, 0x28, 0x5A0), MovementManager) view_height = FloatField((0x10, 0x28, 0x360), label='可视高度')
class WeaponAmmo(Value): """弹药""" SIZE = 4 regen_rate = FloatField(0x80, label='回复速度')
class Weapon(Model): display_level = Field(0x1DC, label='显示等级') specification_level = Field(0x1E0, label='作用等级') actual_level = Field(0xE84, label='武器实际等级') item_actual_level = Field(0x8AC, label='物品实际等级') calculated_damage = FloatField(0x8E0, label='计算伤害') base_damage = FloatField(0x8E4, label='基本伤害') calculated_accuracy = FloatField(0x8CC, label='计算偏移率') base_accuracy = FloatField(0x8D0, label='基本偏移率') calculated_fire_rate = FloatField(0x8B8, label='计算射击延迟') base_fire_rate = FloatField(0x8BC, label='基本射击延迟') calculated_projectile_speed = FloatField(0xD74, label='计算子弹速') base_projectile_speed = FloatField(0xD78, label='基本子弹速') calculated_swap_speed = FloatField(0x940, label='计算切换速') base_swap_speed = FloatField(0x944, label='基本切换速') calculated_reload_speed = FloatField(0xA2C, label='计算换弹速') base_reload_speed = FloatField(0xA30, label='基本换弹速') calculated_burst_length = Field(0xB38, label='计算爆发长度') # 0: Auto base_burst_length = Field(0xB3C, label='基本爆发长度') calculated_projectiles_per_shot = Field(0xDF0, label='计算射击子弹数') base_projectiles_per_shot = Field(0xDF4, label='基本射击子弹数') calculated_bullets_used = Field(0x9D8, label='计算使用子弹') base_bullets_used = Field(0x9DC, label='基本使用子弹') calculated_extra_shot_chance = Field(0x404, label='计算额外射击机会') base_extra_shot_chance = Field(0x408, label='基本额外射击机会') magazine_size = Field(0xA04, label='弹药库容量') current_bullets = Field(0xA24, label='当前子弹') ammo = ModelPtrField(0x9CC, WeaponAmmo, label='弹药') clip_ammo = Field(0x9D0, label='弹夹子弹') item_price = Field(0x1CC, label='物品价格') item_quantity = Field(0x1D4, label='物品数量') item_state = Field(0x21C, label='物品状态') # Favorited, Crossed, Equipped, ect # type = Field(0xE78, label='类别') # balance = Field(0xE7C, label='平衡') # manufacturer = Field(0xE80, label='制造商') # body = Field(0xE88, label='枪身') # grip = Field(0xE8C, label='握把') # barrel = Field(0xE90, label='枪管') # sight = Field(0xE94, label='准镜') # stock = Field(0xE98, label='枪托') # elemental = Field(0xE9C, label='元素') # accessory1 = Field(0xEA0, label='配件1') # accessory2 = Field(0xEA4, label='配件2') # material = Field(0xEA8, label='材料') def set_level(self, level): """设置等级""" self.display_level = self.specification_level = level if self.actual_level: self.actual_level = level elif self.item_actual_level: self.item_actual_level = level
class TeamConfig(Model): """团队属性""" skill_mgr = ModelPtrField((0xB74, 0x58), SkillManager, label='技能') ability_cooldown = ModelPtrField(0xB64, AbilityCooldown, label='主技能冷却') damage_heals_self = FloatField(0xBF4) team_ammo_regen = FloatField(0xE58, label='团队弹药回复') explosives_heal_allies = FloatField(0xF90) bullets_heal_allies = FloatField(0xF54) badass_tokens = FloatField(0x1664, label='坏小子徽章') badass_bonuses = ArrayField((0x1678, 0), 14, Field(0)) # 坏小子加成效果 team_kill_skill_timer_mult = FloatField(0x18A4) bullets_resistance = FloatField(0x4A0, label='普通抗性') physical_resistance = FloatField(0x580, label='物理抗性') melee_resistance = FloatField(0x4C8, label='近战抗性') explosive_resistance = FloatField(0x5A8, label='爆炸抗性') shock_resistance = FloatField(0x5D0, label='闪电抗性') corrosive_resistance = FloatField(0x5F8, label='腐蚀抗性') fire_resistance = FloatField(0x620, label='火焰抗性') slag_resistance = FloatField(0x648, label='紫渣抗性') elemental_resistance = FloatField(0x4B4, label='元素抗性') grenades_resistance = FloatField(0x4DC, label='手榴弹/枪桶抗性') rockets_resistance = FloatField(0x4F0, label='火箭炮抗性') chock_time = FloatField(0x464, label='闪电时间') corrosive_time = FloatField(0x478, label='腐蚀时间') fire_time = FloatField(0x450, label='火焰时间') melee_damage = FloatField(0x374, label='近战伤害') physical_damage = FloatField(0x57C, label='物理伤害') explosive_damage = FloatField(0x554, label='爆炸伤害') shock_damage = FloatField(0x540, label='闪电伤害') corrosive_damage = FloatField(0x568, label='腐蚀伤害') fire_damage = FloatField(0x52C, label='火焰伤害') slag_damage = FloatField(0x590, label='紫渣伤害')
class VehicleManager(Model): boost = ModelPtrField((0x38C, 0x188), Value, label='推进剂') health = ModelPtrField(0x394, Value, label='血量') scale = FloatField(0x78, label='缩放') coord = CoordField(0x60, label='坐标')
class SystemConfig(Model): """系统属性""" time_scale_multiplier = FloatField(0x328, label='时间流逝倍数') gravity = FloatField(0x3A0, label='重力')
class Experience(Value): """经验值""" multiplier = FloatField(0x144, label='经验倍数')
class PopulationManager(Model): current = FloatField(0x2C, label='当前') total = FloatField(0x10, label='剩余') max = FloatField(0x80, label='上限')