コード例 #1
0
ファイル: CMDataBase.cs プロジェクト: DiablosOffens/Moras.Net
        // Diese Funktion tested, ob in einer xml-Datei Items sind
        // und lädt diese dann
        // Das Private gibt an, ob die persönliche Itemdatei geladen wird
        public bool OpenXml(string sFileName, bool Private = false)     // Lade eine angegebene Xml-Datei
        {
            int  n = 0;
            bool ret;

            if (xFile.OpenXml(sFileName))
            {   // Datei konnte geöffnet werden
                initPB();
                if (xFile.isTag("daoc_items"))
                {
                    CItem Item = new CItem();
                    n = 0;
                    do
                    {
                        ret            = Item.Load(xFile);
                        Item.bEquipped = true;  // Items in der Datenbank gelten alle als equipped
                        if (n > 0)
                        {
                            int ii = GetItemUID(Item.iUID); // Die suche ist eigentlich erst nötig, wenn Private = true ist
                            if (ii < 0)                     // Item-UID nicht gefunden, also neu
                            {                               // Wenn es kein Bezugsitem für ein Gelöschtes gibt, dann nicht adden
                                if (!Item.Deleted)
                                {
                                    AddItem(Item);
                                }
                            }
                            else
                            {   // uid gibts
                                // Spezialbehandlung für gelöschte Items
                                if (Item.Deleted)
                                {
                                    arItems[ii].Value.Item.Deleted = true;
                                }
                                else
                                {       // Zeitstempel vergleichen
                                    if (arItems[ii].Value.Item.LastUpdate <= Item.LastUpdate)
                                    {   // Privates Item ist neuer
                                        arItems[ii].Value.Item     = Item;
                                        arItems[ii].Value.bPrivate = Private;
                                    }
                                    else
                                    {   // In Item-DB ist ein neueres oder gleichaltes Item wie das vom Spieler
                                        // Nochmal checken, ob es vielleicht genau das gleiche ist
                                        if (arItems[ii].Value.Item == Item)
                                        {       // Ist genau das gleiche Item. Nicht adden zu privates
                                        }
                                        else
                                        {       // Nicht das gleiche Item
                                            // Als neues Item anlegen und das in DB als updated markieren
                                            arItems[ii].Value.bUpdated = true;
                                            AddItem(Item);
                                        }
                                    }
                                }
                            }
                        }
                        n++;
                        if ((Unit.frmSplash != null) && ((n % 100) == 0))
                        {
                            Unit.frmSplash.pbLoad.Value = n;
                            if (Private)
                            {
                                Unit.frmSplash.lbInfo.Text = "Lade persönliche Itemdaten.. (" + (n).ToString() + " geladen)";
                            }
                            else
                            {
                                Unit.frmSplash.lbInfo.Text = _("Lade Itemdatenbank.. (") + (n).ToString() + _(" geladen)");
                            }
                            Application.DoEvents();
                        }
                    } while (ret == true);
                }
                xFile.CloseXml();
                if (Private)
                {
                    Utils.SetRegistryInteger("CountItemsP", n);
                }
                else
                {
                    Utils.SetRegistryInteger("CountItems", n);
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }