逆向:程序研究/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 /> |