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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...