75 lines
2.8 KiB
Python
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,
|
|
}
|