diff --git a/addons/yt_world/migrations/0.10/post-01_farmland_upright.py b/addons/yt_world/migrations/0.10/post-01_farmland_upright.py new file mode 100644 index 0000000..549cbe4 --- /dev/null +++ b/addons/yt_world/migrations/0.10/post-01_farmland_upright.py @@ -0,0 +1,18 @@ +# 0.10 迁移:农田改为竖直站立立绘(flat=0),不再当作平面贴地设施。 +# +# 背景:早期建库时 bi_farmland 被归进「设施(平面俯视,压成菱形贴地)」组,flat=1。 +# 而农田立绘是 3/4 直立麦田(与农舍/风车同款),flat=1 会把整张图压扁铺在地面菱形上, +# 视觉上麦子"躺倒",与建筑立体感不一致。本次把 flat 改回 0,让农田竖直站立。 +# +# 注:yt_world_build_item.xml 是 noupdate=1,改 XML 只影响新装库;存量库的 flat 字段 +# 必须由本迁移刷。前端的 MICRO_BUILD_EXTRA 兜底 flat:false 已就位,但登录后目录覆盖 +# 用的是后端字段,所以后端 DB 必须同步修正才能真正生效。 + +def migrate(cr, version): + import odoo + from odoo import api + + env = api.Environment(cr, odoo.SUPERUSER_ID, {}) + items = env['yt.world.build.item'].sudo().search([('code', '=', 'farmland')]) + if items: + items.write({'flat': False}) diff --git a/addons/yt_world/migrations/0.4/post-01_sync_specs.py b/addons/yt_world/migrations/0.4/post-01_sync_specs.py new file mode 100644 index 0000000..91bb0d5 --- /dev/null +++ b/addons/yt_world/migrations/0.4/post-01_sync_specs.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +"""升级到 0.4:建筑产出规格迁移到代码单一真源(BUILD_SPECS)。 + +此前产出写在 noupdate 的 XML 记录里,模块升级时 Odoo 不会重放已存在记录的字段, +导致改了产出必须手动补写 DB。本次把单一真源移到 build_spec.py, +本迁移在每次跨越 0.3→0.4 的升级时执行一次:把代码规格刷进 item 字段, +并对所有世界做全量对账(速率 tick + 即时属性 instant)。 + +以后调任何建筑产出:改 build_spec.BUILD_SPECS + 升一次级(如需再次 sync 则 bump 版本)即可。 +运行时结算/算速率/前端目录均已直接读 BUILD_SPECS,即使不跑本迁移游戏也正确。 +""" +def migrate(cr, version): + from odoo.addons.yt_world import sync_specs_from_code + sync_specs_from_code(cr, None) diff --git a/addons/yt_world/migrations/0.9/post-01_food_to_grain.py b/addons/yt_world/migrations/0.9/post-01_food_to_grain.py new file mode 100644 index 0000000..8e826a7 --- /dev/null +++ b/addons/yt_world/migrations/0.9/post-01_food_to_grain.py @@ -0,0 +1,34 @@ +# 0.9 迁移:农田产出由笼统 food 改为具体 grain(谷物) +# +# 背景:farmland 原本 stat_yield_tick = {'food': 3},与牧场(肉/奶)、风车(面粉)、 +# 水井(水) 这些具体品类不一致,food 是个模糊桶。本次把 farmland 产出改为 grain。 +# 其余 food 来源(village / 宏观农场 / windmill_produce / grocery 任务奖励)按需求保留不动, +# 因此迁移后 grain 与 food 两个资源并存:grain 由农田喂,food 由其余来源喂。 +# +# 存量处理:把玩家 yt.world.stock 里已有的 resource_code='food' 行改名为 'grain', +# 余额不丢;若同世界已存在 grain 行则合并金额后删除 food 行(规避唯一约束)。 +# 改名后再调用 sync_specs_from_code 把 BUILD_SPECS 的新 grain 规格刷进 build.item, +# 并对所有世界重算速率与即时属性(grain 行拿到正确 rate_per_min,food 不会复活)。 + +def migrate(cr, version): + import odoo + from odoo import api + + env = api.Environment(cr, odoo.SUPERUSER_ID, {}) + Stock = env['yt.world.stock'].sudo() + + foods = Stock.search([('resource_code', '=', 'food')]) + for f in foods: + grain = Stock.search( + [('world_id', '=', f.world_id.id), ('resource_code', '=', 'grain')], + limit=1, + ) + if grain: + grain.amount = (grain.amount or 0.0) + (f.amount or 0.0) + f.unlink() + else: + f.write({'resource_code': 'grain'}) + + # 同步建筑规格进库 + 全量对账(速率/即时),与 0.4 迁移同款做法 + from odoo.addons.yt_world import sync_specs_from_code + sync_specs_from_code(cr, None)