566 lines
19 KiB
XML
566 lines
19 KiB
XML
<?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>
|