/* 文件名:FunctionalPack.nut 路径:User/Socket/FunctionalPack.nut 创建日期:2025-01-05 00:07 文件用途:功能数据包 */ //注册功能包 function RegisterFunctionalPack() { // 选择角色进入游戏回包 MySocket.RegisterHandler(PACKET_ID.SELECT_CHARACTER_ENTER_GAME_CALLBACK, function(Jso) { local Info = Jso.charac; local TownObj = Town(Info.town); local Charc = GameObject.CreateCharacter(Info.job, Info.equ, true); Charc.Cid = Info.cid; TownObj.AddObject(Charc, true); ClientCharacter = Charc; }); //刷新客户端角色背包数据 MySocket.RegisterBinaryHandler(PACKET_ID.REFRESH_CLIENT_CHARACTER_INVENTORY_DATA_CALLBACK, function(Binary) { local Pack = Packet(Binary); local op = Pack.Get_Int(); //背包大小 local size = Pack.Get_Int(); //背包类型 local type = Pack.Get_Int(); }); //城镇中添加角色的回包 MySocket.RegisterBinaryHandler(PACKET_ID.TOWN_ADD_CHARACTER_CALLBACK, function(Binary) { local Pack = Packet(Binary); local op = Pack.Get_Int(); local cid = Pack.Get_Int(); local namelen = Pack.Get_Byte(); local name = Pack.Get_String(namelen); local job = Pack.Get_Byte(); local lv = Pack.Get_Byte(); local moveflag = Pack.Get_Byte(); local posx = Pack.Get_Int(); local posy = Pack.Get_Int(); local posz = 0; local equcount = Pack.Get_Byte(); local equ = []; for (local i = 0; i< equcount; i++) { equ.push(Pack.Get_Int()); } //构造角色 local Charc = GameObject.CreateCharacter(job, equ); Charc.Cid = cid; Charc.SetPosition(posx, posy, posz); //从全局地图中找到城镇并添加角色 if (GlobalTownManager.CurrentMap) { GlobalTownManager.CurrentMap.AddObject(Charc); } //设置角色移动状态 if (moveflag != DIRECTION.NONE) { Charc.SetMoveFlag(moveflag); } }); //城镇中移除角色的回包 MySocket.RegisterHandler(PACKET_ID.TOWN_REMOVE_CHARACTER_CALLBACK, function(Jso) { //从全局地图中找到城镇并移除角色 if (GlobalTownManager.CurrentMap) { //遍历所有角色 foreach(obj in GlobalTownManager.CurrentMap.PlayerList) { //角色对象 if (typeof obj == "character" && obj.Cid == Jso.cid) { GlobalTownManager.CurrentMap.RemoveObject(obj); } } } }); //移动城镇的回包 MySocket.RegisterHandler(PACKET_ID.CHANGE_TOWN_AREA_CALLBACK, function(Jso) { //我自己的移动城镇添加角色对象 local MapObj = GlobalTownManager.TownList[Jso.town].map[Jso.region]; MapObj.AddObjectByChangeTown(ClientCharacter, Jso.pos); }); //城镇中角色移动的回包 MySocket.RegisterBinaryHandler(PACKET_ID.TOWN_CHARACTER_MOVE_CALLBACK, function(Binary) { local Pack = Packet(Binary); Pack.Get_Int(); local cid = Pack.Get_Int(); local MoveFlag = Pack.Get_Byte(); local X = Pack.Get_Int(); local Y = Pack.Get_Int(); //获取角色对象 local obj = GameObject.GetCharacterByCid(cid); if (obj) { obj.SetPosition(X, Y, 0); obj.SetMoveFlag(MoveFlag); } }); } //城镇包 TOWN_PACKET <- { //城镇角色移动改变状态包 function SendTownMoveStatePacket(X, Y, MoveFlag) { local Pack = Packet(); Pack.Put_Byte(MoveFlag); Pack.Put_Int(X); Pack.Put_Int(Y); MySocket.Send(PACKET_ID.TOWN_CHARACTER_MOVE, Pack.Data); } }