91 lines
3.0 KiB
Plaintext
91 lines
3.0 KiB
Plaintext
/*
|
|
文件名:FunctionalPack.nut
|
|
路径:User/Socket/FunctionalPack.nut
|
|
创建日期:2025-01-05 00:07
|
|
文件用途:功能数据包
|
|
*/
|
|
|
|
//注册功能包
|
|
function RegisterFunctionalPack() {
|
|
//城镇中添加角色的回包
|
|
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);
|
|
}
|
|
} |