一、玩家下线业务思路
二、玩家下线业务实现
1 - 链接断开之前HOOK函数
- src/mmo_game_zinx/main.go
func OnConnecionLost(conn ziface.IConneciton) {
pid, _ := conn.GetProperty("pid")
player := core.WorldMgrObj.GetPlayerByPid(pid.(int32))
player.Offline()
fmt.Println("-=====> Player pid = ", pid, " offline ...<===")
}
func main() {
s := znet.NewServer("MMO Game Zinx")
s.SetOnConnStart(OnConnecionAdd)
s.SetOnConnStop(OnConnecionLost)
s.AddRouter(2, &apis.WorldChatApi{})
s.AddRouter(3, &apis.MoveApi{})
s.Serve()
}
2 - player处理玩家下线
- src/mmo_game_zinx/core/player.go
func (p *Player) Offline() {
players := p.GetSuroundingPlayers()
proto_msg := &pb.SyncPid{
Pid: p.Pid,
}
for _, player := range players {
player.SendMsg(201, proto_msg)
}
WorldMgrObj.AoiMgr.RemoveFromGridbyPos(int(p.Pid), p.X, p.Z)
WorldMgrObj.RemovePlayerByPid(p.Pid)
}
三、目录结构与完整源码
点击下载完整源码:mmo_game_zinxV5.0
点击下载对应客户端:mmo_game_u3d_client