| 
									
										
										
										
											2025-01-05 00:48:35 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 文件名:FunctionalPack.nut | 
					
						
							|  |  |  | 路径:User/Socket/FunctionalPack.nut | 
					
						
							|  |  |  | 创建日期:2025-01-05	00:07 | 
					
						
							|  |  |  | 文件用途:功能数据包 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //注册功能包 | 
					
						
							|  |  |  | function RegisterFunctionalPack() { | 
					
						
							| 
									
										
										
										
											2025-01-10 23:05:50 +08:00
										 |  |  |     // 选择角色进入游戏回包 | 
					
						
							|  |  |  |     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; | 
					
						
							| 
									
										
										
										
											2025-01-11 23:58:10 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         //以下是角色应当初始化的各项东西 | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             //初始化背包 | 
					
						
							|  |  |  |             if (ClientCharacterInventory) { | 
					
						
							|  |  |  |                 ClientCharacterInventory.DestroyWindow(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             ClientCharacterInventory = _Inventory("背包窗口", 150, 12, 262, 548, 20); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-01-10 23:05:50 +08:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |     /* | 
					
						
							|  |  |  |     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 //道具数量 | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     */ | 
					
						
							| 
									
										
										
										
											2025-01-10 23:05:50 +08:00
										 |  |  |     //刷新客户端角色背包数据 | 
					
						
							|  |  |  |     MySocket.RegisterBinaryHandler(PACKET_ID.REFRESH_CLIENT_CHARACTER_INVENTORY_DATA_CALLBACK, function(Binary) { | 
					
						
							|  |  |  |         local Pack = Packet(Binary); | 
					
						
							|  |  |  |         local op = Pack.Get_Int(); | 
					
						
							|  |  |  |         //背包大小 | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |         local InventorySize = Pack.Get_Int(); | 
					
						
							| 
									
										
										
										
											2025-01-10 23:05:50 +08:00
										 |  |  |         //背包类型 | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |         local InventoryType = Pack.Get_Byte(); | 
					
						
							|  |  |  |         //背包道具数量 | 
					
						
							| 
									
										
										
										
											2025-01-19 09:48:40 +08:00
										 |  |  |         local InventoryItemCount = Pack.Get_Short(); | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         //项目List | 
					
						
							| 
									
										
										
										
											2025-01-19 09:48:40 +08:00
										 |  |  |         local ItemList = {}; | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         //道具数据 | 
					
						
							| 
									
										
										
										
											2025-01-11 23:58:10 +08:00
										 |  |  |         for (local i = 0; i< InventoryItemCount; i++) { | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |             local Type = Pack.Get_Byte(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             //装备类型 | 
					
						
							|  |  |  |             if (Type == 1) { | 
					
						
							|  |  |  |                 local EquInfo = { | 
					
						
							|  |  |  |                     //装备位置 | 
					
						
							|  |  |  |                     Pos = Pack.Get_Short(), | 
					
						
							|  |  |  |                     //装备ID | 
					
						
							|  |  |  |                     EquipId = Pack.Get_Int(), | 
					
						
							| 
									
										
										
										
											2025-01-19 09:48:40 +08:00
										 |  |  |                     //交易类型 | 
					
						
							|  |  |  |                     EquipTradeType = Pack.Get_Byte(), | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |                     //装备附魔编号 | 
					
						
							|  |  |  |                     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(), | 
					
						
							| 
									
										
										
										
											2025-01-19 09:48:40 +08:00
										 |  |  |                     //装备全属强 | 
					
						
							|  |  |  |                     EquipAllElementalAttack = Pack.Get_Byte(), | 
					
						
							|  |  |  |                     //装备水属强 | 
					
						
							|  |  |  |                     EquipWaterAttack = Pack.Get_Byte(), | 
					
						
							|  |  |  |                     //装备火属强 | 
					
						
							|  |  |  |                     EquipFireAttack = Pack.Get_Byte(), | 
					
						
							|  |  |  |                     //装备光属强 | 
					
						
							|  |  |  |                     EquipLightAttack = Pack.Get_Byte(), | 
					
						
							|  |  |  |                     //装备暗属强 | 
					
						
							|  |  |  |                     EquipDarkAttack = Pack.Get_Byte(), | 
					
						
							|  |  |  |                     //装备品质 | 
					
						
							|  |  |  |                     EquipPercentage = Pack.Get_Byte(), | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |                     //装备再封装次数 | 
					
						
							|  |  |  |                     EquipWrapCount = Pack.Get_Byte(), | 
					
						
							| 
									
										
										
										
											2025-01-19 09:48:40 +08:00
										 |  |  |                     //装备是否封装 | 
					
						
							|  |  |  |                     EquipIsWrap = Pack.Get_Byte(), | 
					
						
							|  |  |  |                     //耐久度 | 
					
						
							|  |  |  |                     EquipDurability = Pack.Get_Byte(), | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |                 ItemList[EquInfo.Pos] <- GameItem.Equipment(EquInfo); | 
					
						
							|  |  |  |                 //装备栏 | 
					
						
							|  |  |  |                 if (InventoryType == 2) { | 
					
						
							| 
									
										
										
										
											2025-01-20 16:43:18 +08:00
										 |  |  |                     ClientCharacterInventory.PageList[0].SetItemCollectionList(0, ItemList); | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |                 } | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             //消耗品类型 | 
					
						
							| 
									
										
										
										
											2025-01-19 09:48:40 +08:00
										 |  |  |             if (Type == 2 || Type == 3) { | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |                 local ItemInfo = { | 
					
						
							|  |  |  |                     //道具位置 | 
					
						
							|  |  |  |                     Pos = Pack.Get_Short(), | 
					
						
							|  |  |  |                     //道具ID | 
					
						
							|  |  |  |                     ItemId = Pack.Get_Int(), | 
					
						
							| 
									
										
										
										
											2025-01-19 09:48:40 +08:00
										 |  |  |                     //交易类型 | 
					
						
							|  |  |  |                     ItemTradeType = Pack.Get_Byte(), | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |                     //道具数量 | 
					
						
							|  |  |  |                     ItemCount = Pack.Get_Int(), | 
					
						
							|  |  |  |                 } | 
					
						
							| 
									
										
										
										
											2025-01-20 18:02:26 +08:00
										 |  |  |                 ItemList[ItemInfo.Pos] <- GameItem.Stackable(ItemInfo); | 
					
						
							| 
									
										
										
										
											2025-01-19 09:48:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-20 16:43:18 +08:00
										 |  |  |                 ClientCharacterInventory.PageList[0].SetItemCollectionList(InventoryType - 2, ItemList); | 
					
						
							| 
									
										
										
										
											2025-01-11 16:39:16 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-01-10 23:05:50 +08:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-05 00:48:35 +08:00
										 |  |  |     //城镇中添加角色的回包 | 
					
						
							|  |  |  |     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(); | 
					
						
							| 
									
										
										
										
											2025-01-04 20:03:17 +08:00
										 |  |  |         local moveflag = Pack.Get_Byte(); | 
					
						
							| 
									
										
										
										
											2025-01-05 00:48:35 +08:00
										 |  |  |         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); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-01-04 20:03:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         //设置角色移动状态 | 
					
						
							|  |  |  |         if (moveflag != DIRECTION.NONE) { | 
					
						
							|  |  |  |             Charc.SetMoveFlag(moveflag); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2025-01-10 23:05:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-05 00:48:35 +08:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //城镇中移除角色的回包 | 
					
						
							|  |  |  |     MySocket.RegisterHandler(PACKET_ID.TOWN_REMOVE_CHARACTER_CALLBACK, function(Jso) { | 
					
						
							|  |  |  |         //从全局地图中找到城镇并移除角色 | 
					
						
							|  |  |  |         if (GlobalTownManager.CurrentMap) { | 
					
						
							|  |  |  |             //遍历所有角色 | 
					
						
							| 
									
										
										
										
											2025-01-04 20:03:17 +08:00
										 |  |  |             foreach(obj in GlobalTownManager.CurrentMap.PlayerList) { | 
					
						
							| 
									
										
										
										
											2025-01-05 00:48:35 +08:00
										 |  |  |                 //角色对象 | 
					
						
							|  |  |  |                 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); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2025-01-04 20:03:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     //城镇中角色移动的回包 | 
					
						
							|  |  |  |     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); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2025-01-05 00:48:35 +08:00
										 |  |  | } |