public override void Execute(string[] command, NecClient client, ChatMessage message,
                                     List <ChatResponse> responses)
        {
            //recv_stall_sell_item = 0x919C,
            IBuffer res = BufferProvider.Provide();

            res.WriteCString("C1Str"); // find max size Character name/Soul name
            res.WriteCString("CStr2"); // find max size Character name/Soul name
            res.WriteInt64(25);
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteInt16(16);
            res.WriteUInt32(client.character.instanceId); //Item id

            router.Send(client, (ushort)AreaPacketId.recv_stall_sell_item, res, ServerType.Area);
        }
        private void SendItemPlaceChange(NecClient client)
        {
            x = -1;
            x++;
            IBuffer res = BufferProvider.Provide();

            //res.WriteInt64(invItem.StorageItem.InstanceId); // item id
            //res.WriteByte(fromStoreType);// 0 = adventure bag. 1 = character equipment, 2 = royal bag ??
            //res.WriteByte(fromBagId); // Position 2 ??
            //res.WriteInt16(fromSlot); // bag index 0 to 24
            //res.WriteInt64(invItem.StorageItem.InstanceId); // item id
            //res.WriteByte(toStoreType); // 0 = adventure bag. 1 = character equipment, 2 = royal bag ??
            //res.WriteByte(toBagId); // Position 2 ??
            //res.WriteInt16(toSlot); // bag index 0 to 24
            Router.Send(client, (ushort)AreaPacketId.recv_item_update_place_change, res, ServerType.Area);
        }
Example #3
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            ushort mantleDesign = packet.Data.ReadUInt16();

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            Router.Send(client, (ushort)MsgPacketId.recv_union_request_set_mantle_r, res, ServerType.Msg);

            IBuffer res2 = BufferProvider.Provide();

            res2.WriteUInt16(mantleDesign); //design

            Router.Send(client.Map /*myUnion.UnionMembers*/, (ushort)MsgPacketId.recv_union_notify_mantle, res2,
                        ServerType.Msg);
        }
Example #4
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            uint    targetId = packet.Data.ReadUInt32();
            IBuffer res      = BufferProvider.Provide();

            res.WriteInt32(0);

            Router.Send(client, (ushort)AreaPacketId.recv_charabody_salvage_request_r, res, ServerType.Area);

            IBuffer res2 = BufferProvider.Provide();

            res2.WriteUInt32(targetId);
            res2.WriteCString("soul"); // find max size
            res2.WriteCString("char"); // find max size
            Router.Send(client.Map, (ushort)AreaPacketId.recv_charabody_salvage_notify_body, res2, ServerType.Area);
        }
Example #5
0
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteUInt32(_character.instanceId); // Object ID

            res.WriteFloat(_character.x);           // x
            res.WriteFloat(_character.y);           // y
            res.WriteFloat(_character.z + 100);     // z
            res.WriteByte(_character.heading);      //heading

            res.WriteInt32(_serialId);              //serial ID.  1 is a box

            res.WriteInt32(0b11111111);             //state
            return(res);
        }
Example #6
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            int questId   = packet.data.ReadInt32();
            int prizeSlot = packet.data.ReadInt32();


            IBuffer res = BufferProvider.Provide();

            //remove quest
            //receive item
            //add completed quest to history
            //increase exp
            //increase soul points
            //next quest hint
            //etc.....
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            router.Send(client, (ushort)AreaPacketId.recv_soul_dispitem_request_data_r, res, ServerType.Area);


            //ToDo  find a better home for these functionalities . This send is the last stop before initial map entry.
            LoadInventory(client, _server);
            LoadCloakRoom(client, _server);
            //LoadBattleStats(client);
            LoadHonor(client);
            //LoadSoulDispItem(client);
            LoadSoulState(client);
        }
Example #8
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            IBuffer res = BufferProvider.Provide();

            router.Send(client, (ushort)AreaPacketId.recv_battle_guard_end_self, res, ServerType.Area);

            res.WriteInt32(0);
            router.Send(client, (ushort)AreaPacketId.recv_battle_guard_end_r, res, ServerType.Area);

            client.character.ClearStateBit(CharacterState.BlockPose);


            res = BufferProvider.Provide();
            res.WriteUInt32(client.character.instanceId);
            router.Send(client.map, (ushort)AreaPacketId.recv_dbg_battle_guard_end_notify, res, ServerType.Area);
        }
Example #9
0
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            res.WriteInt32(0);
            res.WriteInt32(0);
            res.WriteFixedString("", 0x31);
            res.WriteFixedString("", 0x25);

            res.WriteInt32(0);
            res.WriteInt32(0);
            res.WriteInt32(0);
            res.WriteFixedString("", 0x301);
            return(res);
        }
        public override void Execute(string[] command, NecClient client, ChatMessage message,
                                     List <ChatResponse> responses)
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(-10);

            /*
             *  LOOT	-1	It is carrying nothing
             *  LOOT	-10	No one can be looted nearby
             *  LOOT	-207	No space available in inventory
             *  LOOT	-1500	No permission to loot
             */

            Router.Send(client, (ushort)AreaPacketId.recv_loot_access_object_r, res, ServerType.Area);
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            client.Character.battleAnim =
                231; //at the start of every attack, set the battle anim to 231.  231 is the 1st anim for all weapon types
            client.Character.battleNext = 0;

            IBuffer res = BufferProvider.Provide();

            res.WriteUInt32(client.Character.InstanceId); //0 means success
            Router.Send(client, (ushort)AreaPacketId.recv_battle_attack_start_r, res, ServerType.Area);

            IBuffer res2 = BufferProvider.Provide();

            res2.WriteUInt32(client.Character.InstanceId);
            Router.Send(client.Map, (ushort)AreaPacketId.recv_battle_attack_start, res2, ServerType.Area, client);
        }
Example #12
0
        protected override IBuffer ToBuffer()
        {
            IBuffer res        = BufferProvider.Provide();
            int     numEntries = 0x2;

            res.WriteInt32(numEntries); //less than 0x5
            for (int k = 0; k < numEntries; k++)
            {
                //sub_496E30
                res.WriteInt32(0);
                res.WriteInt32(0);
                res.WriteByte(0);
            }

            return(res);
        }
        private void NotifyFriendInvite(NecClient client, uint targetInstanceId)
        {
            IBuffer res2 = BufferProvider.Provide();

            res2.WriteUInt32(client.Character
                             .InstanceId);                           // Change nothing visibaly ?  Friend Relationship instance ID??? for database lookup?
            res2.WriteUInt32(client.Character.InstanceId);           //?
            res2.WriteFixedString($"{client.Soul.Name}", 0x31);      //size is 0x31
            res2.WriteFixedString($"{client.Character.Name}", 0x5B); //size is 0x5B
            res2.WriteUInt32(client.Character.InstanceId);           //?
            res2.WriteByte(1);
            Router.Send(Server.Clients.GetByCharacterInstanceId(targetInstanceId),
                        (ushort)MsgPacketId.recv_friend_notify_link_invite, res2, ServerType.Msg);
            Server.Clients.GetByCharacterInstanceId(targetInstanceId).Character.friendRequest =
                client.Character.InstanceId;
        }
Example #14
0
        private void SendMapChangeForce(NecClient client)
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(1001001);
            res.WriteInt32(1001001);
            res.WriteFixedString("127.0.0.1", 65); //IP
            res.WriteInt16(60002);                 //Port

            res.WriteFloat(100);                   //x coord
            res.WriteFloat(100);                   //y coord
            res.WriteFloat(100);                   //z coord
            res.WriteByte(1);                      //view offset maybe?

            Router.Send(client, (ushort)AreaPacketId.recv_map_change_force, res);
        }
        public override void Execute(string[] command, NecClient client, ChatMessage message,
                                     List <ChatResponse> responses)
        {
            if (!int.TryParse(command[0], out int x))
            {
                responses.Add(ChatResponse.CommandError(client, $"Invalid Number: {command[0]}"));
                return;
            }

            IBuffer res = BufferProvider.Provide();

            res.WriteUInt32(client.Character.InstanceId);
            res.WriteInt32(x);

            Router.Send(client.Map, 0x1489, res, ServerType.Area);
        }
Example #16
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            string recipient  = packet.Data.ReadCString();
            string title      = packet.Data.ReadCString();
            string content    = packet.Data.ReadCString();
            int    unknownInt = packet.Data.ReadInt32();
            byte   itemCount  = packet.Data.ReadByte();
            long   money      = packet.Data.ReadInt64();

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);//Failed to send message error if not 0
            Router.Send(client, (ushort)AreaPacketId.recv_create_package_r, res, ServerType.Area);

            SendPackageNotifyAdd(client, recipient, title, content, unknownInt, itemCount, money);
        }
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide();

            //res.WriteInt64(dropItem.Item.Id); //Item Object Instance ID
            res.WriteUInt64(_invItem.InstanceId);        //Item Object Instance ID

            res.WriteCString(_invItem.StorageItem.Name); //Name

            //res.WriteInt32(dropItem.Item.IconType);
            res.WriteInt32(_invItem.StorageItem.IconType); //item type

            res.WriteInt32(0);

            res.WriteByte(_invItem.StorageCount);    //Number of items

            res.WriteInt32(0);                       //Item status 0 = identified

            res.WriteInt32(_invItem.StorageItem.Id); //Item icon 50100301 = camp
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteInt32(0);
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteByte(0);

            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteByte(1); // bool
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteByte(0);

            res.WriteByte(_invItem.StorageType);  // 0 = adventure bag. 1 = character equipment
            res.WriteByte(_invItem.StorageId);    // 0~2
            res.WriteInt16(_invItem.StorageSlot); // bag index
            res.WriteInt32(0);                    //bit mask. This indicates where to put items.   e.g. 01 head 010 arm 0100 feet etc (0 for not equipped)

            res.WriteInt64(0);

            res.WriteInt32(0);

            return(res);
        }
Example #18
0
        public bool MonsterCheck()
        {
            // Logger.Debug($"Monster HP [{_monster.GetHP()}]");
            if (_monster.Hp.current <= 0)
            {
                foreach (uint instanceId in _monster.GetAgroInstanceList())
                {
                    _monster.MonsterHate(_server, false, instanceId);
                }

                Logger.Debug($"Monster is dead InstanceId [{_monster.InstanceId}]");
                //Death Animation
                List <PacketResponse>       brList  = new List <PacketResponse>();
                RecvBattleReportStartNotify brStart = new RecvBattleReportStartNotify(_monster.InstanceId);
                RecvBattleReportEndNotify   brEnd   = new RecvBattleReportEndNotify();
                RecvBattleReportNoactDead   brDead  = new RecvBattleReportNoactDead(_monster.InstanceId, 1);
                brList.Add(brStart);
                brList.Add(brDead);
                brList.Add(brEnd);
                _server.Router.Send(Map, brList);

                //Make the monster a lootable state
                IBuffer res10 = BufferProvider.Provide();
                res10.WriteUInt32(_monster.InstanceId);
                res10.WriteInt32(2); //Toggles state between Alive(attackable),  Dead(lootable), or Inactive(nothing).
                _server.Router.Send(Map, (ushort)AreaPacketId.recv_monster_state_update_notify, res10,
                                    ServerType.Area);

                Thread.Sleep(_monster.RespawnTime);
                //decompose the body
                IBuffer res7 = BufferProvider.Provide();
                res7.WriteUInt32(_monster.InstanceId);
                res7.WriteInt32(
                    5); //4 here causes a cloud and the model to disappear, 5 causes a mist to happen and disappear
                res7.WriteInt32(1);
                _server.Router.Send(Map, (ushort)AreaPacketId.recv_charabody_notify_deadstate, res7, ServerType.Area);
                Thread.Sleep(2000);
                RecvObjectDisappearNotify objectDisappearData = new RecvObjectDisappearNotify(_monster.InstanceId);
                _server.Router.Send(Map, objectDisappearData);
                _monster.MonsterVisible = false;

                spawnMonster = true;
                return(true);
            }

            return(false);
        }
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            res.WriteInt16(0);
            res.WriteByte(0);
            res.WriteInt32(0);
            res.WriteInt32(0);
            int numEntries = 19;

            res.WriteInt32(numEntries); // less than or equal to 19
            for (int i = 0; i < numEntries; i++)
            {
                res.WriteInt32(0);
            }
            numEntries = 19;
            res.WriteInt32(numEntries); //less than or equal to 19
            for (int i = 0; i < numEntries; i++)
            {
                res.WriteInt32(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteInt32(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);

                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0); //bool
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);
                res.WriteByte(0);
            }

            numEntries = 19;
            res.WriteInt32(numEntries); //less than or equal to 19
            for (int i = 0; i < numEntries; i++)
            {
                res.WriteInt32(0);
            }
            return(res);
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            /*int32, party type: 1 = open, 0 = closed
             * int32, normal item distribution: 1 = random, 0 = do not distribute
             * int32, rare item distribution: 1 = draw, 0 = do not distribute
             * int32, target client(character) id*/

            int  partyType        = packet.data.ReadInt32();
            int  normItemDist     = packet.data.ReadInt32();
            int  rareItemDist     = packet.data.ReadInt32();
            uint targetInstanceId = packet.data.ReadUInt32();

            Party myFirstParty = new Party();

            server.instances.AssignInstance(myFirstParty);
            myFirstParty.partyType      = partyType;
            myFirstParty.normalItemDist = normItemDist;
            myFirstParty.rareItemDist   = rareItemDist;
            myFirstParty.targetClientId = targetInstanceId;
            myFirstParty.Join(client);
            myFirstParty.partyLeaderId = client.character.instanceId;
            client.character.partyId   = myFirstParty.instanceId;

            RecvPartyNotifyEstablish recvPartyNotifyEstablish = new RecvPartyNotifyEstablish(client, myFirstParty);

            router.Send(recvPartyNotifyEstablish, client); // Only establish the party for the acceptee. everyone else is already established.

            RecvCharaBodyNotifyPartyJoin recvCharaBodyNotifyPartyJoin = new RecvCharaBodyNotifyPartyJoin(client.character.instanceId, myFirstParty.instanceId, myFirstParty.partyType);

            router.Send(client.map, recvCharaBodyNotifyPartyJoin); //Only send the Join Notify of the Accepting Client to the Map.  Existing members already did that when they joined.

            RecvCharaNotifyPartyJoin recvCharaNotifyPartyJoin = new RecvCharaNotifyPartyJoin(client.character.instanceId, myFirstParty.instanceId, myFirstParty.partyType);

            router.Send(recvCharaNotifyPartyJoin, client); //Only send the Join of the Accepting Client to the Accepting Client.

            if (targetInstanceId != 0)
            {
                NecClient             targetClient          = server.clients.GetByCharacterInstanceId(targetInstanceId);
                RecvPartyNotifyInvite recvPartyNotifyInvite = new RecvPartyNotifyInvite(targetClient, myFirstParty);
                router.Send(recvPartyNotifyInvite, targetClient);
            }

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            router.Send(client, (ushort)AreaPacketId.recv_party_establish_r, res, ServerType.Area);
        }
        private void LogOutRequest()
        {
            _logoutTime = DateTime.MinValue;
            IBuffer res  = BufferProvider.Provide();
            IBuffer res2 = BufferProvider.Provide();
            IBuffer res3 = BufferProvider.Provide();
            IBuffer res4 = BufferProvider.Provide();
            IBuffer res5 = BufferProvider.Provide();

            Logger.Debug($"_logoutType [{_logoutType}]");
            if (_logoutType == 0x00) // Return to Title   also   Exit Game
            {
                res = null;
                res = BufferProvider.Provide();
                //res.WriteInt64(1);
                //res.WriteInt16(1);
                _server.Router.Send(_client, (ushort)AreaPacketId.recv_escape_start, res, ServerType.Area);


                //IBuffer buffer = BufferProvider.Provide();
                //buffer.WriteInt32(0);
                //NecPacket response = new NecPacket((ushort)CustomPacketId.RecvDisconnect,buffer,ServerType.Msg,PacketType.Disconnect);

                //_server.Router.Send(_client, response);
            }

            if (_logoutType == 0x01) // Return to Character Select
            {
                res.WriteInt32(0);
                _server.Router.Send(_client, (ushort)MsgPacketId.recv_chara_select_back_soul_select_r, res,
                                    ServerType.Msg);

                Thread.Sleep(4100);

                res = null;
                res = BufferProvider.Provide();
                res.WriteInt32(0);
                res.WriteByte(0);
                _server.Router.Send(_client, (ushort)MsgPacketId.recv_soul_authenticate_passwd_r, res, ServerType.Msg);
            }

            if (_logoutType == 0x02)
            {
                res.WriteInt32(0);
                _server.Router.Send(_client, (ushort)MsgPacketId.recv_chara_select_back_r, res, ServerType.Msg);
            }
        }
Example #22
0
        public override void Handle(NecClient client, NecPacket packet)
        {
            int     partyMode = packet.Data.ReadInt32();
            IBuffer res       = BufferProvider.Provide();

            res.WriteInt32(0);
            Router.Send(client, (ushort)AreaPacketId.recv_party_change_mode_r, res, ServerType.Area);

            Party myParty = Server.Instances.GetInstance(client.Character.partyId) as Party;

            IBuffer res2 = BufferProvider.Provide();

            res2.WriteInt32(partyMode); //must be newLeaderInstanceId
            Router.Send(myParty.PartyMembers, (ushort)MsgPacketId.recv_party_notify_change_mode, res2, ServerType.Msg);

            myParty.PartyType = partyMode;
        }
        public override void Handle(NecConnection connection, NecPacket packet)
        {
            uint unknown = packet.Data.ReadUInt32();
            uint major   = packet.Data.ReadUInt32();
            uint minor   = packet.Data.ReadUInt32();

            Logger.Info($"{major} - {minor}");

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            res.WriteUInt32(unknown);
            res.WriteUInt32(major);
            res.WriteUInt32(minor);

            Router.Send(connection, (ushort)MsgPacketId.recv_base_check_version_r, res);
        }
Example #24
0
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide(); // it's the aura portal for map

            res.WriteUInt32(_instanceId);           // Unique ID

            res.WriteFloat(_mapPos.X);              //x
            res.WriteFloat(_mapPos.Y);              //y
            res.WriteFloat(_mapPos.Z);              //z
            res.WriteByte(_heading);                //

            res.WriteFloat(_width);                 // Width
            res.WriteFloat(_offset);                // distance away from map coords for particle effects

            res.WriteInt32(_color);                 // Aura color 0=blue 1=gold 2=white 3=red 4=purple 5=black  0 to 5, crash above 5
            return(res);
        }
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            res.WriteFixedString("Xeno", 0x31);
            res.WriteInt32(0);
            res.WriteInt32(0);
            res.WriteFixedString("Xeno", 0x5B);
            for (int j = 0; j < 0x3; j++)
            {
                res.WriteInt64(0);
            }

            res.WriteInt32(0);
            return(res);
        }
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(1); // must be under 0x3E8 // wtf?

            int numEntries = 0x1;

            for (int i = 0; i < numEntries; i++)
            {
                res.WriteInt32(0);
                res.WriteInt32(0);
                res.WriteByte(0); // bool
            }

            return(res);
        }
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);
            res.WriteFloat(0);
            res.WriteFloat(0);
            res.WriteFloat(0);
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteInt16(0);
            res.WriteByte(0);
            res.WriteByte(0);
            res.WriteByte(0);
            return(res);
        }
        protected override IBuffer ToBuffer()
        {
            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(_errorCode); //see sys_msg.csv

            /*
             *  -1      Unable to use skill
             *  -1322   Incorrect target
             *  -1325   Insufficient usage count for Power Level
             *  1       Not enough distance
             *  GENERIC Unable to use skill: < errcode >
             */
            res.WriteFloat(_coolTime);     //Cool time   2   ./Skill_base.csv   Column J
            res.WriteFloat(_rigidityTime); //Rigidity time 1 ./Skill_base.csv   Column L
            return(res);
        }
        public override void Execute(string[] command, NecClient client, ChatMessage message,
                                     List <ChatResponse> responses)
        {
            int x = 10010101;

            if (command[0] == "all")
            {
                //foreach (HonorSetting honorSetting in Server.SettingRepository.Honor.Values)
                int[] honorSettings = server.settingRepository.honor.Keys.ToArray();
                int   numEntries    = server.settingRepository.honor.Count; //its over 1000!

                IBuffer res = BufferProvider.Provide();
                res.WriteInt32(1000); // must be under 0x3E8 // wtf?
                for (int i = 0; i < 1000; i++)
                {
                    res.WriteInt32(honorSettings[i]);
                    res.WriteUInt32(client.character.instanceId);
                    res.WriteByte(1); // bool	New Title 0:Yes  1:No
                }

                router.Send(client, (ushort)AreaPacketId.recv_get_honor_notify, res, ServerType.Area);
                res = BufferProvider.Provide();
                res.WriteInt32(numEntries - 1000); // must be under 0x3E8 // wtf?
                for (int i = 1000; i < numEntries; i++)
                {
                    res.WriteInt32(honorSettings[i]);
                    res.WriteUInt32(client.character.instanceId);
                    res.WriteByte(0); // bool	New Title 0:Yes  1:No
                }

                router.Send(client, (ushort)AreaPacketId.recv_get_honor_notify, res, ServerType.Area);
            }
            else if (!int.TryParse(command[0], out x))
            {
                responses.Add(ChatResponse.CommandError(client, $"Invalid Number: {command[0]}.  try 10010101"));
                return;
            }

            IBuffer res2 = BufferProvider.Provide();

            res2 = BufferProvider.Provide();
            res2.WriteInt32(x);
            res2.WriteUInt32(client.character.instanceId);
            res2.WriteByte(1); // bool		New Title 0:Yes  1:No
            router.Send(client, (ushort)AreaPacketId.recv_get_honor, res2, ServerType.Area);
        }
        public override void Handle(NecClient client, NecPacket packet)
        {
            //Testing Logic.  Delete after blacklist is databased
            int TempCharacterCount = Server.Characters.GetAll().Count;

            if (TempCharacterCount > 10)
            {
                TempCharacterCount = 10;
            }

            IBuffer res = BufferProvider.Provide();

            res.WriteInt32(0);                  //must be 0

            res.WriteInt32(TempCharacterCount); //count of entries to display

            //for (int i = 0; i < 10; i++)
            foreach (Character blackCharacter in Server.Characters.GetAll()
                     ) //Max 10 Loops. will break if more than 10 characters in Db.
            {
                Soul blackSoul = Server.Database.SelectSoulById(blackCharacter.SoulId);

                res.WriteUInt32(blackCharacter
                                .InstanceId);                      //Unique Row ID for blacklist.  using Character InstanceID, but can be anything
                res.WriteInt32(client.Character.AdventureBagGold); //???
                res.WriteInt32(Util.GetRandomNumber(1, 10));       //Count of times BlackListMember PKed you
                res.WriteInt32(Util.GetRandomNumber(0, 3));        //count of times BlackListMember looted you
                res.WriteInt32(Util.GetRandomNumber(0, 150));      //Count of items BlackListMember looted from you
                res.WriteInt32(client.Character.unionId);          //Union ID?  we dont have any unions yet
                res.WriteByte(255);
                res.WriteByte(1);                                  // bool

                res.WriteInt32(blackSoul.Id);                      //Soul ID of BlackListMember for sending bounty to Area server
                res.WriteFixedString(blackSoul.Name, 49);          //Soul Name of BlackListMember

                res.WriteUInt32(blackCharacter.InstanceId);        //for online location tracking?
                res.WriteFixedString(blackCharacter.Name, 91);     //character name of BlackListMember
                res.WriteUInt32(blackCharacter.ClassId);           // Character Class of BlackListMember
                res.WriteByte(blackCharacter.Level);               //Character level of BlackListMember
                res.WriteInt32(blackCharacter.MapId);              //Character Map ID of BlackListMember
                res.WriteInt32(client.Character.AdventureBagGold); //world number?? or Map Area?
                res.WriteFixedString($"Channel {blackCharacter.Channel}", 97);
            }

            Router.Send(client, (ushort)AreaPacketId.recv_blacklist_open_r, res, ServerType.Area);
        }