但还是不行,依然会出现队列阻塞的问题,本着头痛医头,脚痛医脚的精神,这时我们换个想法,欸,如果每一次玩家指挥的是时候强制中断Job,在派遣我们的任务前清理队列那么是不是就没有堵塞的问题了,只需要在点击后调用StopAll()即可
那么下面我们就要分析玩家的行为如何强制Pawn行动
首先我想到了Unity的函数Input.GetMouseDown用于获取鼠标右键相关行为,没看到.GetMouse太多不想看.
然后就是游戏里面的翻译,右键Pawn可以看见 自我治疗 的相关选项,搜索中文.可以找到SelfTend标签,反汇编搜索SelfTend得到工作JobDefOf.TendPatient和WorkTypeDefOf.Doctor.再搜工作,一眼就看见FloatMenuOptionProvider_DraftedTend,有心再搜索一下FloatMenuOptionProvider_Drafted,可以看见
FloatMenuOptionProvider_DraftedAttack
FloatMenuOptionProvider_DraftedMove
FloatMenuOptionProvider_DraftedRepair
FloatMenuOptionProvider_DraftedTend
而点击Pawn自己触发的是FloatMenuOptionProvider_DraftedTend,为了实现玩家能主动灭火,我们修改这个
查看发现获得多选项的是FloatMenuOptionProvider_DraftedTend.GetOptionsFor()这个函数,

后面一堆null,0f,一看就是默认值不管它,再看一眼FloatMenuOption的构造函数,其中只要添加第一二个参数,分别为显示标签和用于添加Job的委托,添加方式是通过Jobs.TryTakeOrderdJob添加
那就立刻编写手动添加灭火的补丁并翻译一下



那么下面我们就要分析玩家的行为如何强制Pawn行动
首先我想到了Unity的函数Input.GetMouseDown用于获取鼠标右键相关行为,没看到.GetMouse太多不想看.
然后就是游戏里面的翻译,右键Pawn可以看见 自我治疗 的相关选项,搜索中文.可以找到SelfTend标签,反汇编搜索SelfTend得到工作JobDefOf.TendPatient和WorkTypeDefOf.Doctor.再搜工作,一眼就看见FloatMenuOptionProvider_DraftedTend,有心再搜索一下FloatMenuOptionProvider_Drafted,可以看见
FloatMenuOptionProvider_DraftedAttack
FloatMenuOptionProvider_DraftedMove
FloatMenuOptionProvider_DraftedRepair
FloatMenuOptionProvider_DraftedTend
而点击Pawn自己触发的是FloatMenuOptionProvider_DraftedTend,为了实现玩家能主动灭火,我们修改这个
查看发现获得多选项的是FloatMenuOptionProvider_DraftedTend.GetOptionsFor()这个函数,

后面一堆null,0f,一看就是默认值不管它,再看一眼FloatMenuOption的构造函数,其中只要添加第一二个参数,分别为显示标签和用于添加Job的委托,添加方式是通过Jobs.TryTakeOrderdJob添加
那就立刻编写手动添加灭火的补丁并翻译一下














