逆向:程序研究/AT1/事件处理例程:修订间差异

跳转到导航 跳转到搜索
新发现
(新建页面)
 
(新发现)
第5行: 第5行:
EventCheck 通常由一个包装函数调用,该包装函数会设置触发类型的枚举值。并对另一参数设定一个值。
EventCheck 通常由一个包装函数调用,该包装函数会设置触发类型的枚举值。并对另一参数设定一个值。


此外,夜会话也有一套处理例程来管理其触发。并且部分会触发事件<ref>指保存在evd中的事件</ref>而非夜会话事件<ref>指保存在ELF中的对话数据</ref>。


== EventCheck ==
== EventCheck ==
第166行: 第167行:


加载一个[[逆向:程序研究/AT1/Evd文件]]并执行其中的宏序列。
加载一个[[逆向:程序研究/AT1/Evd文件]]并执行其中的宏序列。
== 主动夜会话触发检查 ==
夜会话也有一套触发检查用的数据。登记为mk_trig_metadata。还有触发之后的数据记录,MkTrigSaveData。
=== MkTrigSaveData ===
保存数据之一。位置可通过保存数据表确认。
<pre>struct MkTrigSaveDatum {uint32_t flg; uint32_t expire;}</pre>
记录两个数据。flg用于记录该事件是否被标记需要触发/抑制等信息。休息时检查这个标志,如果为2就会触发对应的对话。expire记录事件过期时间,和ManaClock做比较。''注意:该过期时间为遗留设计,ManaClock和过期时间总是不会被设置。''
=== mk_trig_metadata ===
日版位置:0x7359B0
<pre>
<struct name='MusumeKaiwaTrigCond'>
  <field type='uint16' name='character' />
  <field type='uint16' name='mkdata_id' /> <!-- 触发时调用的mkdata,为-1表示不适用 -->
  <field type='uint16' name='evd_id' /> <!-- 触发时调用的evd,为-1表示不适用 -->
  <field type='uint16' name='ukn' /> <!-- 类型?排他性标记?优先级? -->
  <field type='uint16' name='ukn' />
  <field type='uint16' name='evd_not_cond' /> <!-- 抑制evd,为-1表示不检查。一旦指定evd被调用此会话就不再可以触发 -->
  <field type='uint16' name='evd_req_cond' /> <!-- 前置evd,为-1表示不检查,否则前置evd必须首先运行才可触发本会话 -->
  <field type='uint16' name='ukn' />
  <field type='uint16' name='ukn' />
  <field type='uint16' name='ukn' />
  <field type='uint16' name='ukn' />
</struct>
</pre>
== 注释 ==
<references />
1,075

个编辑

导航菜单