game/addons/game_base/models/currency.py
李鹏宇 f5c7ea4ddf 1.世界等级五个阶段,自己想办法命名和设计
2.势力等级分为6个
3.人物角色等级分为14个
4.货币也分为6档

一个背景的菜单栏。
写特色,介绍,背景,说明,致玩家等等
2026-07-23 18:53:54 +08:00

43 lines
1.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
from odoo import models, fields, api
class GameCurrency(models.Model):
_name = 'game.currency'
_description = '游戏货币等级'
_order = 'level asc'
level = fields.Integer(string='等级', required=True)
name = fields.Char(string='名称', required=True)
desc = fields.Text(string='描述')
rate = fields.Integer(
string='兑换比例',
default=1,
help='多少单位本货币可兑换 1 单位下一等级货币。例如 100 墟铢 = 1 灵币,则墟铢的 rate 为 100。'
)
@api.model
def convert(self, amount, from_level, to_level):
"""按等级汇率将 amount 从 from_level 换算为 to_level 货币。
汇率方向:低等级 → 高等级 为除以 rate高等级 → 低等级 为乘以 rate。
最高等级货币(元玺)的 rate 固定为 1仅作占位。
"""
if from_level == to_level:
return amount
currencies = self.search_read([], ['level', 'rate'], order='level asc')
rate_map = {c['level']: c['rate'] or 1 for c in currencies}
if from_level < to_level:
# 低等级 → 高等级:逐级除以兑换比例
result = amount
for lv in range(from_level, to_level):
result = result / rate_map.get(lv, 1)
return result
else:
# 高等级 → 低等级:逐级乘以兑换比例
result = amount
for lv in range(to_level, from_level):
result = result * rate_map.get(lv, 1)
return result