game/addons/game_base/models/game_employee.py
2026-07-28 19:06:32 +08:00

75 lines
2.8 KiB
Python

# -*- 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,
}