GM爱好者

 找回密码
 立即注册

在线
客服

在线客服服务时间: 10:00-20:00{不定期回复}

选择下列客服马上在线沟通:

快速
发帖

客服
热线

290016403
7*24小时客服服务热线

关注
微信

关注Q群二维码
顶部
查看: 1050|回复: 18

[其他教程] 传奇客户端源码分析(五)

[复制链接]
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
41
帖子
556
金币
6552

建功勋章

最佳新人活跃会员

发表于 2022-8-7 16:28:05 | 显示全部楼层 |阅读模式

马上注册 立即下载

您需要 登录 才可以下载或查看,没有账号?立即注册

x
器执行流程:(玩家走动)
    GameSrv服务器ProcessUserHuman线程处理玩家消息:
遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObject->Operate()调用。
判断玩家if (!m_fIsDead),如果已死,则发送_MSG_FAIL消息。我们在前面看到过,该消息是被优先处理的。否则则调用WalkTo,并发送_MSG_GOOD消息给客户端。
WalkTo函数的流程:
1) WalkNextPos 根据随机值产生,八个方向的坐标位置。
2) WalkXY怪物走动到一个坐标值中。
CheckDoorEvent根据pMapCellInfo->m_sLightNEvent返回四种状态。
a) 要移动的位置是一扇门 _DOOR_OPEN
b) 不是一扇门 _DOOR_NOT
c) 是一扇门不可以打开返回 _DOOR_MAPMOVE_BACK或_DOOR_MAPMOVE_FRONT玩家前/后移动
3) 如果_DOOR_OPEN则发送SM_DOOROPEN消息给周围玩家。
4) m_pMap->CanMove如果可以移动,则MoveToMovingObject从当前点移动到另一点。并发送AddRefMsg(RM_WALK)给周围玩家。
    AddRefMsg函数,我们在后面的服务器代码里分析过:它会根据X,Y坐标,在以自己坐标为中心周围26*26区域里面,按地图单元格的划分,遍历所有单元格,再遍历所有单元格内的玩家列表,广播发送RM_WALK消息。

客户端执行流程:(反馈服务器端本玩家走动)
1. 服务器如果发送_MSG_FAIL 由客户端CGameProcess::OnProcPacketNotEncode处理。
     m_xMyHero.SetOldPosition();
人:  SetMotionFrame(_MT_STAND
           AdjustMyPostion(); 重绘地图
           m_bMotionLock = m_bInputLock = FALSE;
     骑马:SetMotionFrame(_MT_HORSESTAND
            AdjustMyPostion(); 重绘地图
            m_bMotionLock = m_bInputLock = FALSE;
   2. 服务器如果发送_MSG_GOOD, 由客户端CGameProcess::OnProcPacketNotEncode处理。m_xMyHero.m_bMotionLock = FALSE;

其它客户端执行流程:(反馈服务器端其它玩家)
1.其它玩家:
     人: SetMotionFrame(_MT_WALK, bDir);
     骑马:SetMotionFrame(_MT_HORSEWALK, bDir);
     m_bMoveSpeed = _SPEED_WALK;
     SetMoving(); 设置m_shShiftPixelX, m_shShiftPixelY坐标。
2.NPC,怪物:
SetMotionFrame(_MT_MON_WALK, bDir);
     m_bMoveSpeed = _SPEED_WALK;
     SetMoving(); 设置m_shShiftPixelX, m_shShiftPixelY坐标。
CGameProcess::RenderObject->DrawActor(m_shShiftPixelX, m_shShiftPixelY)重绘发消息的玩家,NPC怪物位置。
等级头衔

等級:提辖

Rank: 10Rank: 10Rank: 10Rank: 10

积分成就
精华
0
G币
0
主题
0
帖子
668
金币
2041

建功勋章

最佳新人活跃会员

发表于 2022-9-4 22:48:19 | 显示全部楼层
金币我要攒金币!!!
等级头衔

等級:提辖

Rank: 10Rank: 10Rank: 10Rank: 10

积分成就
精华
0
G币
0
主题
1
帖子
672
金币
2095

建功勋章

热心会员灌水之王最佳新人活跃会员

发表于 2022-9-4 23:58:40 | 显示全部楼层
论坛不能没有像楼主这样的人才啊!我会一直支持GM爱好者:www.gmahz.com
等级头衔

等級:提辖

Rank: 10Rank: 10Rank: 10Rank: 10

积分成就
精华
0
G币
0
主题
0
帖子
646
金币
2066

建功勋章

最佳新人活跃会员

发表于 2022-9-5 05:45:22 | 显示全部楼层
楼主发贴辛苦了,谢谢楼主分享!我觉得GM爱好者:www.gmahz.com是注册对了!
等级头衔

等級:经略使

Rank: 11Rank: 11Rank: 11Rank: 11Rank: 11

积分成就
精华
0
G币
0
主题
1
帖子
811
金币
12582

建功勋章

最佳新人活跃会员

发表于 2022-9-11 07:17:17 | 显示全部楼层
论坛不能没有像楼主这样的人才啊!我会一直支持GM爱好者:www.gmahz.com
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
36
帖子
836
金币
11957

建功勋章

最佳新人活跃会员

发表于 2022-9-13 03:00:22 | 显示全部楼层
我看不错噢 谢谢楼主!GM爱好者:www.gmahz.com越来越好!
等级头衔

等級:提辖

Rank: 10Rank: 10Rank: 10Rank: 10

积分成就
精华
0
G币
0
主题
1
帖子
786
金币
11260

建功勋章

最佳新人活跃会员

发表于 2022-9-25 05:13:53 | 显示全部楼层
拿币走人。。。。
等级头衔

等級:郡王

Rank: 14Rank: 14Rank: 14Rank: 14Rank: 14

积分成就
精华
0
G币
0
主题
47
帖子
529
金币
6104

建功勋章

最佳新人活跃会员

发表于 2022-9-26 22:28:27 | 显示全部楼层
楼主太厉害了!楼主,I*老*虎*U!我觉得GM爱好者:www.gmahz.com真是个好地方
等级头衔

等級:里正

Rank: 4

积分成就
精华
0
G币
0
主题
0
帖子
93
金币
893

建功勋章

发表于 2022-10-9 10:47:08 | 显示全部楼层
金币我要攒金币!!!
等级头衔

等級:里正

Rank: 4

积分成就
精华
0
G币
0
主题
0
帖子
100
金币
890

建功勋章

发表于 2022-11-1 20:49:32 | 显示全部楼层
楼主,大恩不言谢了!GM爱好者:www.gmahz.com是最棒的!
*滑块验证:
懒得打字嘛,点击右侧快捷回复 【GM爱好者:www.gmahz.com】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|GM爱好者 ( 赣ICP备20009465号-1 )|网站地图

GMT+8, 2025-12-17 04:08 , Processed in 3.122215 second(s), 47 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表