|
楼主 |
发表于 2024-10-12 22:04:33
|
显示全部楼层
- let matcherOnHeal = /^ (\S{2,8})正坐在地下(修炼内力)。$/
- let matcherOnObj = /^ ((\S+) )?(\S*「.+」)?(\S+)\(([^\(\)]+)\)( \[.+\])?(( <.+>)*)$/
- var PlanOnExit = new App.Plan(App.Positions.Connect,
- function (task) {
- task.NewTrigger(matcherOnObj, function (trigger, result, event) {
- let item = new objectModule.Object(result[4], result[5], App.History.CurrentOutput).
- WithParam("身份", result[2]).
- WithParam("外号", result[3]).
- WithParam("描述", result[6] || "").
- WithParam("状态", result[7] || "").
- WithParam("动作", "")
- App.Map.Room.Data.Objects.Append(item)
- event.Context.Set("core.room.onobject", true)
- return true
- })
- task.NewTrigger(matcherOnHeal, function (trigger, result, event) {
- let item = new objectModule.Object(result[1], "", App.History.CurrentOutput).
- WithParam("动作", "result[2]")
- App.Map.Room.Data.Objects.Append(item)
- event.Context.Set("core.room.onobject", true)
- return true
- })
- task.NewCatcher("line", function (catcher, event) {
- return event.Context.Get("core.room.onobject")
- })
- }, function (result) {
- if (result.Type != "cancel") {
- if (App.Map.Room.Name && !App.Map.Room.ID){
- let idlist=App.Map.Data.RoomsByName[App.Map.Room.Name]
- if (idlist&&idlist.length==1){
- App.Map.Room.ID=idlist[0]
- }
- }
- App.RaiseEvent(new App.Event("core.roomentry"))
- }
- })
复制代码
这个开始有点特殊了。
这个是抓房间里的NPC的触发。逻辑基本和北侠的接进。
我的框架里trigger一定是比event要优先的
也就是说,如果匹配到NPC,则不结束,并给当前行的事件打个标记。
如果行匹配结束时没有标记,说明这行不是npc,npc信息结束。
房间信息到此为止。
北侠我现有机器的逻辑和这个差不多。
但是因为意外(BUG)更多,我还加入了GA判断和超时判断。
|
|