245 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			245 lines
		
	
	
		
			9.3 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;
 | |
| 
 | |
|         //以下是角色应当初始化的各项东西
 | |
|         {
 | |
|             //初始化背包
 | |
|             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);
 | |
|     }
 | |
| } |