// 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); } }