MCPcopy Create free account
hub / github.com/GoMudEngine/GoMud / roomChangeHandler

Method roomChangeHandler

modules/follow/follow.go:274–352  ·  view source on GitHub ↗
(e events.Event)

Source from the content-addressed store, hash-verified

272}
273
274func (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)

Callers

nothing calls this directly

Calls 6

getFollowersMethod · 0.95
stopFollowingMethod · 0.95
LoadRoomFunction · 0.92
GetByUserIdFunction · 0.92
GetInstanceFunction · 0.92
CommandMethod · 0.45

Tested by

no test coverage detected