public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     if (Main.netMode == 2)
     {
         CommandBoardcast.ConsoleMessage("受到玩家请求离线玩家背包");
         int plr     = reader.ReadInt32();
         var splayer = ServerSideCharacter2.PlayerCollection.Get(plr);
         var sender  = Main.player[playerNumber].GetServerPlayer();
         if (splayer == null)
         {
             sender.SendInfoMessage("找不到这个玩家", Color.Red);
             return;
         }
         if (splayer.IsLogin && splayer.PrototypePlayer != null && splayer.PrototypePlayer.active)
         {
             sender.SendInfoMessage("该玩家在线,请使用资料页面查看背包");
             return;
         }
         var p = ServerSideCharacter2.Instance.GetPacket();
         p.Write((int)SSCMessageType.GetEquipsOffline);
         var list = splayer.GetInventory();
         p.Write(splayer.Name);
         p.Write((byte)list.Count);
         for (int i = 0; i < list.Count; i++)
         {
             p.Write((short)list[i].netID);
             p.Write((short)list[i].stack);
             p.Write((byte)list[i].prefix);
             ItemIO.SendModData(list[i], p);
         }
         p.Send(playerNumber);
     }
     else
     {
         var         name = reader.ReadString();
         int         num  = reader.ReadByte();
         List <Item> list = new List <Item>();
         for (int i = 0; i < num; i++)
         {
             int  type   = reader.ReadInt16();
             int  stack  = reader.ReadInt16();
             int  prefix = reader.ReadByte();
             Item item   = new Item();
             item.netDefaults(type);
             item.stack = stack;
             item.Prefix(prefix);
             ItemIO.ReceiveModData(item, reader);
             list.Add(item);
         }
         lock (PlayerInventoryState2.Instance)
         {
             ServerSideCharacter2.GuiManager.OpenInventory2();
             PlayerInventoryState2.Instance.GetInventory(name, list);
         }
     }
 }
Ejemplo n.º 2
0
        public static void SyncSingleEquip2(string name, int index, Item item)
        {
            var p = ServerSideCharacter2.Instance.GetPacket();

            p.Write((int)SSCMessageType.SyncSingleEquip2);
            p.Write(name);
            p.Write((byte)index);
            p.Write((short)item.netID);
            p.Write((byte)item.prefix);
            p.Write((short)item.stack);
            ItemIO.SendModData(item, p);
            p.Send();
        }
Ejemplo n.º 3
0
        public static void SendGuardianEquippedItem(PlayerMod pm, int MyGuardianPosID, int Slot, int ToWho = -1, int FromWho = -1)
        {
            if (!MultiplayerActive || Main.netMode == 0 || !pm.MyGuardians.ContainsKey(MyGuardianPosID))
            {
                return;
            }
            ModPacket packet = StartNewMessage(MessageIDs.GuardianEquippedItem);

            packet.Write((byte)pm.player.whoAmI);
            packet.Write(MyGuardianPosID);
            packet.Write(Slot);
            Item i = pm.MyGuardians[MyGuardianPosID].Equipments[Slot];

            packet.Write(i.netID);
            if (i.netID != 0)
            {
                packet.Write(i.prefix);
                packet.Write(i.stack);
            }
            ItemIO.SendModData(i, packet);
            packet.Send(ToWho, (FromWho == -1 ? pm.player.whoAmI : FromWho));
        }