/* 文件名: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; //以下是角色应当初始化的各项东西 { //初始化背包 if (ClientCharacterInventory) { ClientCharacterInventory.DestroyWindow(); } ClientCharacterInventory = _Inventory("背包窗口", 150, 12, 262, 548, 20); } }); /* 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_Short(); //项目List local ItemList = {}; //道具数据 for (local i = 0; i< InventoryItemCount; i++) { local Type = Pack.Get_Byte(); //装备类型 if (Type == 1) { local EquInfo = { //装备位置 Pos = Pack.Get_Short(), //装备ID EquipId = Pack.Get_Int(), //交易类型 EquipTradeType = Pack.Get_Byte(), //装备附魔编号 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(), //装备全属强 EquipAllElementalAttack = Pack.Get_Byte(), //装备水属强 EquipWaterAttack = Pack.Get_Byte(), //装备火属强 EquipFireAttack = Pack.Get_Byte(), //装备光属强 EquipLightAttack = Pack.Get_Byte(), //装备暗属强 EquipDarkAttack = Pack.Get_Byte(), //装备品质 EquipPercentage = Pack.Get_Byte(), //装备再封装次数 EquipWrapCount = Pack.Get_Byte(), //装备是否封装 EquipIsWrap = Pack.Get_Byte(), //耐久度 EquipDurability = Pack.Get_Byte(), } ItemList[EquInfo.Pos] <- GameItem.Equipment(EquInfo); //装备栏 if (InventoryType == 2) { ClientCharacterInventory.PageList[0].SetItemCollectionList(0, ItemList); } } //消耗品类型 if (Type == 2 || Type == 3) { local ItemInfo = { //道具位置 Pos = Pack.Get_Short(), //道具ID ItemId = Pack.Get_Int(), //交易类型 ItemTradeType = Pack.Get_Byte(), //道具数量 ItemCount = Pack.Get_Int(), } ItemList[ItemInfo.Pos] <- GameItem.Stackable(ItemInfo); ClientCharacterInventory.PageList[0].SetItemCollectionList(InventoryType - 2, ItemList); } } }); //城镇中添加角色的回包 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); } }