Перейти к содержанию
Авторизация  
YuraAAA1

Способ Выкинуть Ненужный Дроп Из Xml

Рекомендуемые сообщения

Бывает так, что дроп описывается в npcs.xml и выкинуть ненужный дроп достаточно муторное занятие.

 

Хочу поделиться с форумчанами одним инструментом для быстрого удаления ненужного дропа:

 

 

Надо создать папки xml/source и xml/output в папке с этим файлом.

В source положить xml файл, в output будет отфильтрованный

 


import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.util.LinkedList;
import java.util.List;


public class Runner {

   static List<Integer> items = new LinkedList<Integer>();
   static Integer[] helperArray;


   static {
       items.clear();
       //Заталкиваем ID в коллекцию, например адену и краски
       items.add(57);
       items.add(4448);

/*        
Для удобства можно добавлять через и массив:
Раскомментируйте для работы через массив

helperArray = new Integer[]{
               1518,
               1518,
               1518,
               1518,
               1518,
               1518,
               1518,


       };
       items.addAll(Arrays.asList(helperArray));
       */

   }

   public static void main(String[] args) {
       File f = new File("xml\\source");
       File[] files = f.listFiles();
       for (File file : files) {
           try {
               if (!(file.exists() && file.isFile())) {
                   System.out.println("File " + file.getName() + " doesn't exists or not a file");
                   continue;
               }
               File fXMlFile = file;
               DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
               DocumentBuilder documentBuilder = factory.newDocumentBuilder();
               InputSource inputSource = new InputSource();
               inputSource.setCharacterStream(new StringReader(convertXMLFileToString(fXMlFile.getAbsolutePath())));
               Document parse = documentBuilder.parse(file);
               deleteDropDate(parse);
               File newFile = new File("xml\\output\\" + file.getName());
               if (newFile.exists()) {
                   newFile.delete();
               } else {
                   newFile.createNewFile();
               }

               saveFile(parse, newFile);
               System.out.println("Success. Total affected rows: " + count);
           } catch (ParserConfigurationException e) {
               e.printStackTrace();
           } catch (SAXException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           } catch (TransformerException e) {
               e.printStackTrace();
           }
       }

   }


   static int count;

   public static void deleteDropDate(Document document) {
       count = 0;
       document.normalize();

       NodeList nodes = document.getElementsByTagName("npc");

       for (int i = 0; i < nodes.getLength(); i++) {
           Element element = (Element) nodes.item(i);
           NodeList drops = element.getElementsByTagName("drops");
           for (int j = 0; j < drops.getLength(); j++) {
               NodeList category = element.getElementsByTagName("category");
               for (int k = 0; k < category.getLength(); k++) {
                   Element currDropData = (Element) category.item(k);
                   NodeList drop = currDropData.getElementsByTagName("drop");
                   for (int l = 0; l < drop.getLength(); l++) {
                       Node item = drop.item(l);
                       Integer integer = Integer.valueOf(item.getAttributes().item(1).getTextContent());
                       if (items.contains(integer)) {
                           item.getParentNode().removeChild(item);
                           System.out.println("Removed " + integer);
                           ++count;
                       }
                   }
               }
           }
       }
   }

   public static String convertXMLFileToString(String fileName) {
       try {
           DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
           InputStream inputStream = new FileInputStream(new File(fileName));
           org.w3c.dom.Document doc = documentBuilderFactory.newDocumentBuilder().parse(inputStream);
           StringWriter stw = new StringWriter();
           Transformer serializer = TransformerFactory.newInstance().newTransformer();
           serializer.transform(new DOMSource(doc), new StreamResult(stw));
           return stw.toString();
       } catch (Exception e) {
           e.printStackTrace();
       }
       return null;
   }

   public static void saveFile(Document document, File file) throws TransformerException {
       TransformerFactory transformerFactory = TransformerFactory.newInstance();
       Transformer transformer = transformerFactory.newTransformer();
       DOMSource source = new DOMSource(document);
       StreamResult result = new StreamResult(file);
       transformer.transform(source, result);
       System.out.println("File saved!");

   }
}

  • Upvote 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скрипта нету не у кого нормально под aCis 376+, этот прямо со всем печально удаляет.

Изменено пользователем kaganpwnz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня удаление всех книг татемов через Notepad++ заняло в порядке 5 - 10 минут! Не чего тяжелого нету. 

Хотя в сборке  присутствует мод по убиранию любых вещей из дропа.

Изменено пользователем Link

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...