(e events.Event)
| 272 | } |
| 273 | |
| 274 | func (f *FollowModule) roomChangeHandler(e events.Event) events.ListenerReturn { |
| 275 | evt := e.(events.RoomChange) |
| 276 | |
| 277 | moverId := followId{userId: evt.UserId, mobInstanceId: evt.MobInstanceId} |
| 278 | |
| 279 | allFollowers := f.getFollowers(moverId) |
| 280 | if len(allFollowers) == 0 { |
| 281 | return events.Continue |
| 282 | } |
| 283 | |
| 284 | fromRoom := rooms.LoadRoom(evt.FromRoomId) |
| 285 | if fromRoom == nil { |
| 286 | return events.Continue |
| 287 | } |
| 288 | |
| 289 | followExitName := `` |
| 290 | for exitName, exitInfo := range fromRoom.Exits { |
| 291 | if exitInfo.RoomId == evt.ToRoomId { |
| 292 | followExitName = exitName |
| 293 | break |
| 294 | } |
| 295 | } |
| 296 | |
| 297 | if followExitName == `` { |
| 298 | for exitName, exitInfo := range fromRoom.ExitsTemp { |
| 299 | if exitInfo.RoomId == evt.ToRoomId { |
| 300 | followExitName = exitName |
| 301 | break |
| 302 | } |
| 303 | } |
| 304 | } |
| 305 | |
| 306 | // The exit they went through is gone/missing? (Teleported?) |
| 307 | // End the follow |
| 308 | if followExitName == `` { |
| 309 | if evt.UserId > 0 { |
| 310 | if user := users.GetByUserId(evt.UserId); user != nil { |
| 311 | user.Command(`follow lose`) |
| 312 | } |
| 313 | } |
| 314 | } else { |
| 315 | |
| 316 | for _, fId := range allFollowers { |
| 317 | |
| 318 | if fId.mobInstanceId > 0 { |
| 319 | |
| 320 | if mob := mobs.GetInstance(fId.mobInstanceId); mob != nil { |
| 321 | if fromRoom.RoomId == mob.Character.RoomId { |
| 322 | mob.Command(followExitName, .25) |
| 323 | // Count follows as wandering |
| 324 | // This way if following ends, many/most mobs will head home. |
| 325 | mob.WanderCount++ |
| 326 | continue |
| 327 | } |
| 328 | |
| 329 | mob.Command(`follow stop`) |
| 330 | } |
| 331 | f.stopFollowing(fId) |
nothing calls this directly
no test coverage detected