Files
game/addons/yt_world/views/yt_world_views.xml
T
2026-09-09 15:04:24 +08:00

566 lines
19 KiB
XML
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.
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- ============ 玩家世界 ============ -->
<record id="action_yt_world" model="ir.actions.act_window">
<field name="name">玩家世界</field>
<field name="res_model">yt.world</field>
<field name="view_mode">list,form</field>
</record>
<record id="view_yt_world_list" model="ir.ui.view">
<field name="name">yt.world.list</field>
<field name="model">yt.world</field>
<field name="arch" type="xml">
<list>
<field name="name"/>
<field name="user_id"/>
<field name="tile_count"/>
<field name="micro_count"/>
<field name="creature_count"/>
<field name="last_active"/>
</list>
</field>
</record>
<record id="view_yt_world_search" model="ir.ui.view">
<field name="name">yt.world.search</field>
<field name="model">yt.world</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<field name="user_id"/>
<field name="seed"/>
</search>
</field>
</record>
<record id="view_yt_world_form" model="ir.ui.view">
<field name="name">yt.world.form</field>
<field name="model">yt.world</field>
<field name="arch" type="xml">
<form>
<sheet>
<div name="button_box">
<button class="oe_stat_button" type="object" name="action_open_characters" icon="fa-user">
<field name="character_count" widget="statinfo" string="角色"/>
</button>
<button class="oe_stat_button" type="object" name="action_open_creatures" icon="fa-paw">
<field name="creature_count" widget="statinfo" string="生物"/>
</button>
<button class="oe_stat_button" type="object" name="action_open_tiles" icon="fa-map">
<field name="tile_count" widget="statinfo" string="地块"/>
</button>
<button class="oe_stat_button" type="object" name="action_open_micros" icon="fa-th-large">
<field name="micro_count" widget="statinfo" string="微观"/>
</button>
</div>
<group>
<field name="name"/>
<field name="user_id"/>
<field name="seed"/>
<field name="world_version"/>
<field name="created_at"/>
<field name="last_active"/>
</group>
<!-- 概览:一眼看全世界状态 -->
<group string="世界概览">
<field name="tile_count"/>
<field name="micro_count"/>
<field name="creature_count"/>
</group>
<group>
<field name="settings_display" colspan="4" nolabel="1"
widget="textarea" readonly="1" class="o_readonly_text_block"/>
</group>
<notebook>
<page string="角色">
<field name="character_ids" readonly="1">
<list>
<field name="name"/>
<field name="level"/>
<field name="exp"/>
<field name="gold"/>
<field name="copper"/>
<field name="silver"/>
<field name="diamond"/>
<field name="inventory_display"/>
<field name="equip_display"/>
</list>
</field>
</page>
<page string="生物">
<field name="creature_ids" readonly="1">
<list>
<field name="name"/>
<field name="species"/>
<field name="level"/>
<field name="hp"/><field name="hp_max"/>
<field name="job"/>
<field name="state"/>
<field name="tile_ref_display"/>
</list>
</field>
</page>
<page string="地表地块">
<field name="tile_ids" readonly="1">
<list>
<field name="q"/>
<field name="r"/>
<field name="terrain"/>
<field name="height"/>
<field name="micro_world_id"/>
<field name="updated_at"/>
</list>
</field>
</page>
<page string="微观世界">
<field name="micro_ids" readonly="1">
<list>
<field name="tile_id"/>
<field name="name"/>
<field name="build_count"/>
<field name="build_items_display"/>
</list>
</field>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<!-- ============ 地表地块 ============ -->
<record id="action_yt_world_tile" model="ir.actions.act_window">
<field name="name">地表地块</field>
<field name="res_model">yt.world.tile</field>
<field name="view_mode">list,form</field>
</record>
<record id="view_yt_world_tile_list" model="ir.ui.view">
<field name="name">yt.world.tile.list</field>
<field name="model">yt.world.tile</field>
<field name="arch" type="xml">
<list>
<field name="world_id"/>
<field name="q"/>
<field name="r"/>
<field name="terrain"/>
<field name="height"/>
<field name="micro_world_id"/>
<field name="updated_at"/>
</list>
</field>
</record>
<record id="view_yt_world_tile_search" model="ir.ui.view">
<field name="name">yt.world.tile.search</field>
<field name="model">yt.world.tile</field>
<field name="arch" type="xml">
<search>
<field name="world_id"/>
<field name="terrain"/>
<field name="q"/>
<field name="r"/>
</search>
</field>
</record>
<record id="view_yt_world_tile_form" model="ir.ui.view">
<field name="name">yt.world.tile.form</field>
<field name="model">yt.world.tile</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="world_id"/>
<field name="q"/>
<field name="r"/>
<field name="terrain"/>
<field name="height"/>
<field name="flags" widget="json"/>
<field name="micro_world_id"/>
<field name="updated_at"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ============ 微观世界(每个地块 1:1) ============ -->
<record id="action_yt_world_tile_micro" model="ir.actions.act_window">
<field name="name">微观世界</field>
<field name="res_model">yt.world.tile.micro</field>
<field name="view_mode">list,form</field>
</record>
<record id="view_yt_world_tile_micro_list" model="ir.ui.view">
<field name="name">yt.world.tile.micro.list</field>
<field name="model">yt.world.tile.micro</field>
<field name="arch" type="xml">
<list>
<field name="tile_id"/>
<field name="name"/>
<field name="build_count"/>
</list>
</field>
</record>
<record id="view_yt_world_tile_micro_search" model="ir.ui.view">
<field name="name">yt.world.tile.micro.search</field>
<field name="model">yt.world.tile.micro</field>
<field name="arch" type="xml">
<search>
<field name="tile_id"/>
<field name="name"/>
</search>
</field>
</record>
<record id="view_yt_world_tile_micro_form" model="ir.ui.view">
<field name="name">yt.world.tile.micro.form</field>
<field name="model">yt.world.tile.micro</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="tile_id"/>
<field name="name"/>
<field name="build_count"/>
</group>
<group string="建造内容">
<field name="build_items_display" colspan="4" nolabel="1"
widget="textarea" readonly="1" class="o_readonly_text_block"/>
</group>
<group>
<field name="build_items" widget="json" colspan="4"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ============ 角色(英雄) ============ -->
<record id="action_yt_world_character" model="ir.actions.act_window">
<field name="name">角色</field>
<field name="res_model">yt.world.character</field>
<field name="view_mode">list,form</field>
</record>
<record id="view_yt_world_character_list" model="ir.ui.view">
<field name="name">yt.world.character.list</field>
<field name="model">yt.world.character</field>
<field name="arch" type="xml">
<list>
<field name="world_id"/>
<field name="name"/>
<field name="level"/>
<field name="exp"/>
<field name="gold"/>
<field name="copper"/>
<field name="silver"/>
<field name="diamond"/>
</list>
</field>
</record>
<record id="view_yt_world_character_search" model="ir.ui.view">
<field name="name">yt.world.character.search</field>
<field name="model">yt.world.character</field>
<field name="arch" type="xml">
<search>
<field name="world_id"/>
<field name="name"/>
</search>
</field>
</record>
<record id="view_yt_world_character_form" model="ir.ui.view">
<field name="name">yt.world.character.form</field>
<field name="model">yt.world.character</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="world_id"/>
<field name="name"/>
<field name="level"/>
<field name="exp"/>
<field name="gold"/>
<field name="copper"/>
<field name="silver"/>
<field name="diamond"/>
</group>
<group string="背包">
<field name="inventory_display" colspan="4" nolabel="1"
widget="textarea" readonly="1" class="o_readonly_text_block"/>
</group>
<group string="装备">
<field name="equip_display" colspan="4" nolabel="1"
widget="textarea" readonly="1" class="o_readonly_text_block"/>
</group>
<group>
<field name="inventory" widget="json" colspan="2"/>
<field name="equip" widget="json" colspan="2"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ============ 生物(居民 / NPC) ============ -->
<record id="action_yt_world_creature" model="ir.actions.act_window">
<field name="name">生物</field>
<field name="res_model">yt.world.creature</field>
<field name="view_mode">list,form</field>
</record>
<record id="view_yt_world_creature_list" model="ir.ui.view">
<field name="name">yt.world.creature.list</field>
<field name="model">yt.world.creature</field>
<field name="arch" type="xml">
<list>
<field name="world_id"/>
<field name="name"/>
<field name="species"/>
<field name="level"/>
<field name="hp"/><field name="hp_max"/>
<field name="job"/>
<field name="state"/>
</list>
</field>
</record>
<record id="view_yt_world_creature_search" model="ir.ui.view">
<field name="name">yt.world.creature.search</field>
<field name="model">yt.world.creature</field>
<field name="arch" type="xml">
<search>
<field name="world_id"/>
<field name="species"/>
<field name="name"/>
<field name="state"/>
</search>
</field>
</record>
<record id="view_yt_world_creature_form" model="ir.ui.view">
<field name="name">yt.world.creature.form</field>
<field name="model">yt.world.creature</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="world_id"/>
<field name="name"/>
<field name="species"/>
<field name="level"/>
<field name="exp"/>
<field name="hp"/><field name="hp_max"/>
<field name="energy"/>
<field name="mood"/>
<field name="job"/>
<field name="state"/>
</group>
<group string="所在地块 / 关联">
<field name="tile_ref_display" colspan="4" nolabel="1"
widget="textarea" readonly="1" class="o_readonly_text_block"/>
<field name="partner_display" colspan="4" nolabel="1"
widget="textarea" readonly="1" class="o_readonly_text_block"/>
</group>
<group>
<field name="tile_ref" widget="json" colspan="2"/>
<field name="partner" widget="json" colspan="2"/>
</group>
<group string="装备实例(与生物关联)">
<field name="equip_instance_ids" nolabel="1">
<list>
<field name="item_id"/>
<field name="equipped_slot"/>
<field name="durability"/>
<field name="max_durability"/>
<field name="enhance_level"/>
<field name="equipped"/>
</list>
</field>
</group>
</sheet>
</form>
</field>
</record>
<!-- ============ 建造素材目录(微观世界数据源,必须可管理) ============ -->
<record id="action_yt_world_build_item" model="ir.actions.act_window">
<field name="name">建造素材</field>
<field name="res_model">yt.world.build.item</field>
<field name="view_mode">list,form</field>
<field name="context">{'search_default_active': 1}</field>
</record>
<record id="view_yt_world_build_item_list" model="ir.ui.view">
<field name="name">yt.world.build.item.list</field>
<field name="model">yt.world.build.item</field>
<field name="arch" type="xml">
<list>
<field name="code"/>
<field name="name"/>
<field name="category"/>
<field name="icon"/>
<field name="footprint_w"/><field name="footprint_h"/>
<field name="flat"/>
<field name="sequence"/>
<field name="active"/>
</list>
</field>
</record>
<record id="view_yt_world_build_item_search" model="ir.ui.view">
<field name="name">yt.world.build.item.search</field>
<field name="model">yt.world.build.item</field>
<field name="arch" type="xml">
<search>
<field name="code"/>
<field name="name"/>
<field name="category"/>
<filter name="active" string="启用" domain="[('active','=',True)]"/>
</search>
</field>
</record>
<record id="view_yt_world_build_item_form" model="ir.ui.view">
<field name="name">yt.world.build.item.form</field>
<field name="model">yt.world.build.item</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="code"/>
<field name="name"/>
<field name="category"/>
<field name="icon"/>
<field name="sequence"/>
<field name="active"/>
</group>
<group>
<field name="footprint_w"/>
<field name="footprint_h"/>
<field name="flat"/>
<field name="stat_level"/>
<field name="stat_hp"/>
</group>
<group>
<field name="terrains" widget="json"/>
<field name="stat_yield" widget="json"/>
<field name="desc" widget="textarea" colspan="2"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ============ 玩家(hr.employee) ============ -->
<!-- 直接用 hr.employee 管理玩家,点进去就是员工列表,无需经 res.users 中转 -->
<record id="action_yt_player" model="ir.actions.act_window">
<field name="name">玩家</field>
<field name="res_model">hr.employee</field>
<field name="view_mode">list,form</field>
<field name="context">{'search_default_active': 1}</field>
<field name="help">游戏玩家(员工)列表。每位玩家对应一个 hr.employee,关联其 Odoo 登录账户。</field>
</record>
<record id="view_yt_player_search" model="ir.ui.view">
<field name="name">res.users.player.search</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_search"/>
<field name="arch" type="xml">
<data>
<separator position="after">
<filter name="active" string="启用" domain="[('active','=',True)]"/>
<filter name="player_only" string="仅玩家" domain="[('share','=',True)]"/>
<filter name="internal" string="仅内部账号" domain="[('share','=',False)]"/>
</separator>
</data>
</field>
</record>
<!-- ============ 资源(框架) ============ -->
<record id="action_yt_resource" model="ir.actions.act_window">
<field name="name">资源</field>
<field name="res_model">yt.resource</field>
<field name="view_mode">list,form</field>
</record>
<record id="view_yt_resource_list" model="ir.ui.view">
<field name="name">yt.resource.list</field>
<field name="model">yt.resource</field>
<field name="arch" type="xml">
<list>
<field name="tile_id"/>
<field name="micro_id"/>
<field name="type"/>
<field name="amount"/>
<field name="capacity"/>
</list>
</field>
</record>
<record id="view_yt_resource_form" model="ir.ui.view">
<field name="name">yt.resource.form</field>
<field name="model">yt.resource</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="tile_id"/>
<field name="micro_id"/>
<field name="type"/>
<field name="amount"/>
<field name="capacity"/>
</group>
</sheet>
</form>
</field>
</record>
<!-- ============ 菜单(全部 record 之后,确保 action 已存在) ============
集成后顶层只剩 5 个:
玩家世界(含全部内嵌 tab,可下钻) / 玩家 / 建造素材 / 资源 / AI NPC
删除的旧菜单:地表地块 / 微观世界 / 角色 / 生物 / 订单 ——
这些都可以通过「玩家世界」表单的页签直达(character_ids/creature_ids/tile_ids/micro_ids 全内嵌)。 -->
<menuitem id="menu_yt_world_root"
name="宇森世界"
sequence="20"
action="action_yt_world"
web_icon="yt_world,static/description/icon.png"/>
<menuitem id="menu_yt_world_overview" name="玩家世界"
parent="menu_yt_world_root" action="action_yt_world" sequence="10"/>
<menuitem id="menu_yt_world_player" name="玩家"
parent="menu_yt_world_root" action="action_yt_player" sequence="20"/>
<menuitem id="menu_yt_world_build_item" name="建造素材"
parent="menu_yt_world_root" action="action_yt_world_build_item" sequence="40"/>
<menuitem id="menu_yt_resource" name="资源"
parent="menu_yt_world_root" action="action_yt_resource" sequence="50"/>
<!-- ============ res.users 玩家世界 smart button ============ -->
<record id="view_users_form_inherit_yt_world" model="ir.ui.view">
<field name="name">res.users.form.inherit.yt.world</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button class="oe_stat_button" type="object" name="action_open_worlds"
icon="fa-globe" groups="base.group_user">
<field name="world_count" widget="statinfo" string="玩家世界"/>
</button>
</div>
</field>
</record>
</odoo>