New Emulator

It's not win when you've done it before -.-

I have never got equipment to work before actually. I was talking to Lambda and RoA about this. Also:

Code:
        public static void ResponseBuyItem(Client client, Packet packet)
        {
            MUID uidChar = new MUID();
            Int32 nItem = 0;
            ResultSet result = ResultSet.Accepted;

            if (!packet.Read(ref uidChar) ||
                !packet.Read(ref nItem))
            {
                Log.Write("ResponseBuyItem", "Invalid Packet.");
                client.Disconnect();
                return;
            }

            if (uidChar.uiCharacter != client.UIDClient.uiCharacter)
            {
                Log.Write("ResponseBuyItem", "UID Spoofing Detected.");
                client.Disconnect();
                return;
            }

            if (MatchServer.Items.Find(i => i.nItemID == nItem) == null)
                result = ResultSet.ShopItemNonExistant;
            else
            {
                SQL.getNonQuery(string.Format("INSERT INTO CharacterItem(CID,ItemID,RegDate) VALUES ({0},{1},GetDate())", client.CharInfo.nCID, nItem));
                Item item = new Item();
                item.nItemID = nItem;
                item.nItemCID = SQL.getScalar("SELECT CIID from CharacterItem WHERE CID=" + client.CharInfo.nCID + " AND ItemID=" + nItem);
                client.CharInfo.nItems.Add(item);
            }
            packet = new Packet(Operation.MatchResponseBuyItem, PacketVersion.Decrypted, client.m_bPacketCount);
            packet.Write((Int32)result);
            packet.Finalize(client.m_bCrypt);
            client.Send(packet.getPacket());
        }
        public static void ResponseSellItem(Client client, Packet packet)
        {
            MUID uidChar = new MUID();
            Int32 nItemLow = 0, nItemHigh = 0;
            ResultSet result = ResultSet.Accepted;

            if (!packet.Read(ref uidChar) ||
                !packet.Read(ref nItemLow) ||
                !packet.Read(ref nItemHigh))
            {
                Log.Write("ResponseSellItem", "Invalid Packet.");
                client.Disconnect();
                return;
            }
            if (client.CharInfo.nItems.Find(i => i.nItemCID == nItemHigh) == null)
                result = ResultSet.ShopItemNonExistant;
            else
            {
                Item item = client.CharInfo.nItems.Find(i => i.nItemCID == nItemHigh);
                SQL.getNonQuery(string.Format("DELETE FROM CharacterItem WHERE CIID={0}", item.nItemCID));
                client.CharInfo.nItems.Remove(item);
            }

            packet = new Packet(Operation.MatchResponseSellItem, PacketVersion.Decrypted, client.m_bPacketCount);
            packet.Write((Int32)result);
            packet.Finalize (client.m_bCrypt);
            client.Send(packet.getPacket());
        }
        public static void ResponseEquipItem(Client client, Packet packet)
        {
            MUID uidChar = new MUID();
            Int32 nItemLow = 0, nItemHigh = 0, nEquipSlot = 0;
            ResultSet result = ResultSet.Accepted;

            if (!packet.Read(ref uidChar) ||
                !packet.Read(ref nItemLow) ||
                !packet.Read(ref nItemHigh) ||
                !packet.Read(ref nEquipSlot))
            {
                Log.Write("ResponseEquipItem", "Invalid Packet.");
                client.Disconnect();
                return;
            }
            Item nItem = client.CharInfo.nItems.Find(i => i.nItemCID == nItemHigh);

            if (nItem == null)
                result = ResultSet.ShopItemNonExistant;
            else
            {
                client.CharInfo.nEquippedItems[nEquipSlot] = nItemHigh;
                SQL.getNonQuery(string.Format("UPDATE Character SET {0}={1} WHERE CID={2}", (MMatchItemSlotType)nEquipSlot, nItem.nItemID, client.CharInfo.nCID));
            }

            packet = new Packet(Operation.MatchResponseEquipItem, PacketVersion.Decrypted, client.m_bPacketCount);
            packet.Write((Int32)result);
            packet.Finalize(client.m_bCrypt);
            client.Send(packet.getPacket());
        }
        public static void ResponseTakeOffItem(Client client, Packet packet)
        {
            MUID uidPlayer = new MUID();
            Int32 nEquipSlot = 0;

            if (!packet.Read (ref uidPlayer) ||
                !packet.Read (ref nEquipSlot))
            {
                client.Disconnect ();
                return;
            }

            if (uidPlayer.uiCharacter != client.UIDClient.uiCharacter)
            {
                client.Disconnect ();
                return;
            }
            
            client.CharInfo.nEquippedItems[nEquipSlot] = 0;
            SQL.getNonQuery(string.Format("UPDATE Character SET {0}=0 WHERE CID={1}",(MMatchItemSlotType)nEquipSlot,client.CharInfo.nCID));
            packet = new Packet(Operation.MatchResponseTakeOffItem, PacketVersion.Decrypted, client.m_bPacketCount);
            packet.Write((Int32)0);
            packet.Finalize(client.m_bCrypt);
            client.Send(packet.getPacket());
        }

You laugh you lose:
Code:
        private void PacketQueuqe(object Object)
        {
            while (m_nSocket.Connected && RecieveQueue.Count > 0)
            {
                HandlePacket handle = null;
                Packet packet = RecieveQueue.Dequeue();
                Packets.TryGetValue(packet.getOperation(), out handle);

                if (handle != null) handle(this, packet);
            }
        }
 
Last edited:

(dotdot)
 
All of these things were already working in the public source for my emu. Just look at this. Also, I lol'd@handle(this, packet);
 
Cool
I think I'll re-visit S4 League and see what I can do 8D Good luck with this.
Figure out how to unpack the resources folder plz
 
Use google and find the definition of Emulator.

Phail I like your work, I am now learning C + + and I went well, very soon we begin to design and program my own software.



Figure out how to unpack the resources folder plz

Done; take a look at their file-system library (FileSystem.dll; there's some very valuable exports ), or just dump the files from memory.

I think Gene did that already.

Durr.
 
Incredible. Would be good if you either start with Oracle or PG...

Oh my, but oracle is uber expensive!!!11one...well you always have oracle xe.

11/10. I wish I could help but my .NET knowledge is GIS-limited.