# -*- coding: utf-8 -*- from odoo import api, fields, models class GameEmployee(models.Model): """在 hr.employee 上扩展游戏数据字段。""" _inherit = 'hr.employee' # === 等级系统 === game_level = fields.Integer('游戏等级', default=1) game_exp = fields.Integer('经验值', default=0) game_exp_max = fields.Integer('升级经验', default=100) game_title = fields.Char('称号', default='萌新') # === 资源系统 === game_coins = fields.Integer('金币', default=0) game_energy = fields.Integer('灵气', default=0) game_wood = fields.Integer('木材', default=0) game_stone = fields.Integer('石料', default=0) # === 世界数据 === game_world_name = fields.Char('世界名') game_era = fields.Char('历元', default='星元1年·春') game_tiles = fields.Integer('疆域地块', default=0) game_population = fields.Integer('人口', default=0) game_civ_level = fields.Integer('文明度', default=0) # === 身份 === game_uid = fields.Char('游戏UID', index=True) game_reg_date = fields.Date('注册日期', default=fields.Date.today) # === 关联 === achievement_ids = fields.One2many('game.player.achievement', 'employee_id', '成就') mail_ids = fields.One2many('game.player.mail', 'employee_id', '邮件') game_achievement_count = fields.Integer( '已解锁成就数', compute='_compute_achievement_count') game_unread_mail = fields.Integer( '未读邮件数', compute='_compute_unread_mail') @api.depends('achievement_ids.unlocked') def _compute_achievement_count(self): for rec in self: rec.game_achievement_count = len( rec.achievement_ids.filtered('unlocked')) @api.depends('mail_ids.is_read') def _compute_unread_mail(self): for rec in self: rec.game_unread_mail = len( rec.mail_ids.filtered(lambda m: not m.is_read)) def export_game_data(self): """将游戏数据导出为前端可用的字典。""" self.ensure_one() return { 'emp_id': self.id, 'level': self.game_level, 'exp': self.game_exp, 'exp_max': self.game_exp_max, 'title': self.game_title, 'coins': self.game_coins, 'energy': self.game_energy, 'wood': self.game_wood, 'stone': self.game_stone, 'world_name': self.game_world_name or '', 'era': self.game_era or '', 'tiles': self.game_tiles, 'population': self.game_population, 'civ_level': self.game_civ_level, 'game_uid': self.game_uid or '', 'reg_date': str(self.game_reg_date) if self.game_reg_date else None, 'achievement_count': self.game_achievement_count, 'unread_mail': self.game_unread_mail, }