补提交 migrations: 0.9 grain 数据迁移 / 0.10 farmland 直立修复 / 0.4 spec 同步(此前漏提交导致线上缺迁移脚本)
This commit is contained in:
@@ -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})
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user