18-zinx-Golang-MMO-玩家下线业务

一、玩家下线业务思路

在这里插入图片描述

二、玩家下线业务实现

1 - 链接断开之前HOOK函数

  • src/mmo_game_zinx/main.go
//给当前链接断开之前触发的Hook钩子函数
func OnConnecionLost(conn ziface.IConneciton) {
	//	通过链接属性得到当前链接所绑定pid
	pid, _ := conn.GetProperty("pid")
	player := core.WorldMgrObj.GetPlayerByPid(pid.(int32))
	//触发玩家下线的业务
	player.Offline()
	fmt.Println("-=====> Player pid = ", pid, " offline ...<===")
}

func main() {
	//创建zinx server句柄
	s := znet.NewServer("MMO Game Zinx")

	//连接创建和销毁的HOOK钩子函数
	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()
	//给周围玩家广播MsgID:201消息
	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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无休止符

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值