209 lines
7.7 KiB
Plaintext
209 lines
7.7 KiB
Plaintext
/*
|
|
文件名: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;
|
|
});
|
|
|
|
/*
|
|
InventorySize : int //背包大小
|
|
InventoryType : byte //背包类型
|
|
InventoryItemCount : short //背包道具数量
|
|
|
|
|
|
ItemInfo : Struct //道具信息 结构体
|
|
{
|
|
Type : byte //类型
|
|
// Type 为 1 装备类型
|
|
{
|
|
Pos : short //装备位置
|
|
EquipId : int //装备ID
|
|
EquipEnchant : int //装备附魔编号
|
|
EquipUpgrade : byte //装备强化等级或增幅等级
|
|
EquipSeparate : byte //装备锻造
|
|
EquipIncrease : byte //装备增幅属性 0 无 1 力量 2 智力 3 体力 4 精神
|
|
EquipPowerPercentage : byte //装备力量百分比
|
|
EquipIntellectPercentage : byte //装备智力百分比
|
|
EquipStaminaPercentage : byte //装备体力百分比
|
|
EquipSpiritPercentage : byte //装备精神百分比
|
|
EquipPhysicalAttackPercentage : byte //装备物理攻击百分比
|
|
EquipMagicAttackPercentage : byte //装备魔法攻击百分比
|
|
EquipIndependentAttackPercentage : byte //装备独立攻击百分比
|
|
EquipPhysicalDefensePercentage : byte //装备物理防御百分比
|
|
EquipMagicDefensePercentage : byte //装备魔法防御百分比
|
|
EquipWrapCount : byte //装备再封装次数
|
|
}
|
|
// Type 为 2 消耗品类型
|
|
{
|
|
Pos : short //道具位置
|
|
ItemId : int //道具ID
|
|
ItemCount : int //道具数量
|
|
}
|
|
}
|
|
*/
|
|
//刷新客户端角色背包数据
|
|
MySocket.RegisterBinaryHandler(PACKET_ID.REFRESH_CLIENT_CHARACTER_INVENTORY_DATA_CALLBACK, function(Binary) {
|
|
local Pack = Packet(Binary);
|
|
local op = Pack.Get_Int();
|
|
//背包大小
|
|
local InventorySize = Pack.Get_Int();
|
|
//背包类型
|
|
local InventoryType = Pack.Get_Byte();
|
|
//背包道具数量
|
|
local InventoryItemCount = Pack.Get_Int();
|
|
|
|
//项目List
|
|
local ItemList = [];
|
|
|
|
//道具数据
|
|
for (local i = 0; i< ItemCount; i++) {
|
|
local Type = Pack.Get_Byte();
|
|
|
|
//装备类型
|
|
if (Type == 1) {
|
|
local EquInfo = {
|
|
//装备位置
|
|
Pos = Pack.Get_Short(),
|
|
//装备ID
|
|
EquipId = Pack.Get_Int(),
|
|
//装备附魔编号
|
|
EquipEnchant = Pack.Get_Int(),
|
|
//装备强化等级或增幅等级
|
|
EquipUpgrade = Pack.Get_Byte(),
|
|
//装备锻造
|
|
EquipSeparate = Pack.Get_Byte(),
|
|
//装备增幅属性 0 无 1 力量 2 智力 3 体力 4 精神
|
|
EquipIncrease = Pack.Get_Byte(),
|
|
//装备力量百分比
|
|
EquipPowerPercentage = Pack.Get_Byte(),
|
|
//装备智力百分比
|
|
EquipIntellectPercentage = Pack.Get_Byte(),
|
|
//装备体力百分比
|
|
EquipStaminaPercentage = Pack.Get_Byte(),
|
|
//装备精神百分比
|
|
EquipSpiritPercentage = Pack.Get_Byte(),
|
|
//装备物理攻击百分比
|
|
EquipPhysicalAttackPercentage = Pack.Get_Byte(),
|
|
//装备魔法攻击百分比
|
|
EquipMagicAttackPercentage = Pack.Get_Byte(),
|
|
//装备独立攻击百分比
|
|
EquipIndependentAttackPercentage = Pack.Get_Byte(),
|
|
//装备物理防御百分比
|
|
EquipPhysicalDefensePercentage = Pack.Get_Byte(),
|
|
//装备魔法防御百分比
|
|
EquipMagicDefensePercentage = Pack.Get_Byte(),
|
|
//装备再封装次数
|
|
EquipWrapCount = Pack.Get_Byte(),
|
|
}
|
|
ItemList.push(EquInfo);
|
|
}
|
|
//消耗品类型
|
|
if (Type == 2) {
|
|
local ItemInfo = {
|
|
//道具位置
|
|
Pos = Pack.Get_Short(),
|
|
//道具ID
|
|
ItemId = Pack.Get_Int(),
|
|
//道具数量
|
|
ItemCount = Pack.Get_Int(),
|
|
}
|
|
ItemList.push(ItemInfo);
|
|
}
|
|
}
|
|
});
|
|
|
|
//城镇中添加角色的回包
|
|
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);
|
|
}
|
|
} |