117 lines
4.5 KiB
XML
117 lines
4.5 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<odoo>
|
||
<!-- ============ NPC 角色 ============ -->
|
||
<record id="action_game_npc" model="ir.actions.act_window">
|
||
<field name="name">NPC 角色</field>
|
||
<field name="res_model">game.npc</field>
|
||
<field name="view_mode">list,form</field>
|
||
<field name="context">{'group_by': 'archetype'}</field>
|
||
</record>
|
||
<record id="view_game_npc_list" model="ir.ui.view">
|
||
<field name="name">game.npc.list</field>
|
||
<field name="model">game.npc</field>
|
||
<field name="arch" type="xml">
|
||
<list>
|
||
<field name="archetype" column_invisible="1"/>
|
||
<field name="name"/>
|
||
<field name="title"/>
|
||
<field name="current_activity"/>
|
||
<field name="mood" widget="badge"/>
|
||
<field name="energy" widget="progressbar"/>
|
||
<field name="hunger" widget="progressbar"/>
|
||
<field name="goal_progress" widget="progressbar"/>
|
||
<field name="tick_count"/>
|
||
<field name="tick_enabled"/>
|
||
</list>
|
||
</field>
|
||
</record>
|
||
<record id="view_game_npc_form" model="ir.ui.view">
|
||
<field name="name">game.npc.form</field>
|
||
<field name="model">game.npc</field>
|
||
<field name="arch" type="xml">
|
||
<form>
|
||
<header>
|
||
<button name="action_tick" type="object" string="手动 Tick" class="btn-primary"/>
|
||
<field name="tick_enabled" widget="boolean_toggle"/>
|
||
</header>
|
||
<sheet>
|
||
<field name="tick_enabled" widget="boolean_toggle"/>
|
||
<group>
|
||
<group string="身份">
|
||
<field name="name"/>
|
||
<field name="title"/>
|
||
<field name="code"/>
|
||
<field name="archetype"/>
|
||
<field name="personality"/>
|
||
<field name="origin"/>
|
||
<field name="affiliation"/>
|
||
</group>
|
||
<group string="状态">
|
||
<field name="current_activity" widget="badge" decoration-success="1"/>
|
||
<field name="mood" widget="badge"/>
|
||
<field name="activity_label"/>
|
||
<field name="current_area"/>
|
||
<field name="energy" widget="progressbar"/>
|
||
<field name="hunger" widget="progressbar"/>
|
||
<field name="safety" widget="progressbar"/>
|
||
<field name="goal_progress" widget="progressbar"/>
|
||
<field name="tick_count"/>
|
||
<field name="last_tick"/>
|
||
</group>
|
||
</group>
|
||
<group string="目标">
|
||
<field name="current_goal"/>
|
||
<field name="goal_detail" placeholder="详细描述当前目标"/>
|
||
</group>
|
||
<group string="背景">
|
||
<field name="bio" placeholder="NPC 的完整故事……"/>
|
||
</group>
|
||
<notebook>
|
||
<page string="行为日志 (最近 20 条)" name="logs">
|
||
<field name="behavior_log_ids" nolabel="1" readonly="1">
|
||
<list limit="20">
|
||
<field name="tick_time"/>
|
||
<field name="activity"/>
|
||
<field name="location"/>
|
||
<field name="summary"/>
|
||
</list>
|
||
</field>
|
||
</page>
|
||
<page string="关系网" name="relations">
|
||
<field name="relationship_ids" nolabel="1">
|
||
<list>
|
||
<field name="target_npc_id"/>
|
||
<field name="affinity" widget="progressbar" options="{'max_value': 100}"/>
|
||
<field name="status"/>
|
||
<field name="last_interaction"/>
|
||
</list>
|
||
</field>
|
||
</page>
|
||
<page string="所知信息" name="knowledge">
|
||
<field name="knowledge_ids" nolabel="1">
|
||
<list>
|
||
<field name="topic"/>
|
||
<field name="content"/>
|
||
<field name="accuracy" widget="progressbar" options="{'max_value': 1.0}"/>
|
||
<field name="source"/>
|
||
</list>
|
||
</field>
|
||
</page>
|
||
</notebook>
|
||
</sheet>
|
||
</form>
|
||
</field>
|
||
</record>
|
||
|
||
<!-- ============ Cron(每 15 分钟批量 Tick) ============ -->
|
||
<record id="cron_npc_tick" model="ir.cron">
|
||
<field name="name">NPC 定时行为刻</field>
|
||
<field name="model_id" ref="model_game_npc"/>
|
||
<field name="state">code</field>
|
||
<field name="code">model.cron_batch_tick()</field>
|
||
<field name="interval_number">15</field>
|
||
<field name="interval_type">minutes</field>
|
||
<field name="active" eval="True"/>
|
||
</record>
|
||
</odoo>
|