Jump to content
Sign in to follow this  
YuraAAA1

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

Recommended Posts

Бывает так, что дроп описывается в 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

Share this post


Link to post
Share on other sites

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

Edited by kaganpwnz

Share this post


Link to post
Share on other sites

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

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

Edited by Link

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...