skipping_drop

savemysoul

Путник
Пользователь
Сообщения
4
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
0
Добрый день форум. Возникла проблема - не получается убрать определенные итемы из дроплиста (в моем случае книги).
  • Сборка - ацис ~370
  • Вшита в датапак xml с айдишниками для пропуска дропа.
Как итог - ненужные вещи все равно выпадают.
Собственно, вопрос - как на ацисе убрать ненужный дроп?
 

Вложения

  • skipdrop.jpg
    skipdrop.jpg
    96,9 КБ · Просмотры: 138
Выкладывай решение, может кто нибудь подскажет как оптимизировать. Да и другим польза будет
 
  • Мне нравится
Реакции: kick
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(1512);
items.add(3039);
items.add(3940);
items.add(1513);
items.add(1377);
items.add(3040);
items.add(3038);
items.add(3041);
items.add(3432);
items.add(1378);
items.add(3042);
items.add(3043);
items.add(1096);
items.add(1379);
items.add(3044);
items.add(3045);
items.add(3046);
items.add(1097);
items.add(3047);
items.add(1095);
items.add(3048);
items.add(1294);
items.add(1380);
items.add(3049);
items.add(1381);
items.add(1382);
items.add(3050);
items.add(3051);
items.add(3052);
items.add(1383);
items.add(1384);
items.add(3053);
items.add(3054);
items.add(3055);
items.add(3056);
items.add(4203);
items.add(4921);
items.add(1518);
items.add(1519);
items.add(3103);
items.add(1520);
items.add(1521);
items.add(1522);
items.add(3104);
items.add(1523);
items.add(1524);
items.add(1152);
items.add(1053);
items.add(1385);
items.add(1050);
items.add(1514);
items.add(3072);
items.add(3068);
items.add(1054);
items.add(3073);
items.add(1386);
items.add(3094);
items.add(1387);
items.add(3069);
items.add(1388);
items.add(3095);
items.add(1058);
items.add(3070);
items.add(1389);
items.add(1390);
items.add(3096);
items.add(4207);
items.add(3097);
items.add(3071);
items.add(3098);
items.add(3079);
items.add(1391);
items.add(1392);
items.add(3064);
items.add(1048);
items.add(1394);
items.add(3082);
items.add(3080);
items.add(1515);
items.add(3074);
items.add(1397);
items.add(1398);
items.add(1399);
items.add(1401);
items.add(3099);
items.add(1402);
items.add(1525);
items.add(1526);
items.add(1527);
items.add(1528);
items.add(1529);
items.add(1530);
items.add(1531);
items.add(1532);
items.add(1533);
items.add(3105);
items.add(1534);
items.add(1535);
items.add(3106);
items.add(1403);
items.add(1404);
items.add(1405);
items.add(1667);
items.add(3057);
items.add(3091);
items.add(3092);
items.add(3093);
items.add(1406);
items.add(1407);
items.add(1408);
items.add(1051);
items.add(3065);
items.add(1516);
items.add(3058);
items.add(3059);
items.add(3060);
items.add(1517);
items.add(3066);
items.add(1409);
items.add(3061);
items.add(1056);
items.add(1410);
items.add(1055);
items.add(3062);
items.add(3063);
items.add(3075);
items.add(1411);
items.add(3083);
items.add(1370);
items.add(3089);
items.add(1371);
items.add(1052);
items.add(1412);
items.add(3084);
items.add(1049);
items.add(1413);
items.add(1414);
items.add(1415);
items.add(1098);
items.add(1099);
items.add(1536);
items.add(1537);
items.add(3107);
items.add(3108);
items.add(3429);
items.add(3430);
items.add(3431);
items.add(1372);
items.add(1416);
items.add(1417);
items.add(1418);
items.add(1668);
items.add(1669);
items.add(1670);
items.add(1671);
items.add(1856);
items.add(3076);
items.add(3081);
items.add(3077);
items.add(3078);
items.add(3067);
items.add(3085);
items.add(3086);
items.add(3087);
items.add(3088);
items.add(3090);
items.add(3100);
items.add(3101);
items.add(3102);
items.add(3115);
items.add(3114);
items.add(3109);
items.add(3110);
items.add(3111);
items.add(3112);
items.add(3113);
items.add(3116);
items.add(3117);
items.add(3118);
items.add(3941);
items.add(3943);
items.add(3944);
items.add(4200);
items.add(4201);
items.add(4204);
items.add(4205);
items.add(4206);
items.add(4208);
items.add(4906);
items.add(4907);
items.add(4908);
items.add(4909);
items.add(4910);
items.add(4911);
items.add(4912);
items.add(4913);
items.add(4914);
items.add(4915);
items.add(4916);
items.add(4917);
items.add(4918);
items.add(4919);
items.add(4920);
items.add(4922);
items.add(4923);
items.add(4924);
items.add(4925);
items.add(4926);
items.add(4927);
items.add(4928);
items.add(4929);
items.add(4930);
items.add(4931);
items.add(4932);
items.add(4933);
items.add(4934);
items.add(5013);
items.add(5014);
items.add(5015);
items.add(5809);
items.add(5810);
items.add(5811);
items.add(5812);
items.add(5813);
items.add(5814);
items.add(5815);
items.add(5816);
items.add(6350);
items.add(6351);
items.add(6352);
items.add(6395);
items.add(6396);
items.add(6397);
items.add(6398);
items.add(7638);
items.add(7639);
items.add(7640);
items.add(7641);
items.add(7642);
items.add(7643);
items.add(7644);
items.add(7645);
items.add(7646);
items.add(7647);
items.add(7648);
items.add(7649);
items.add(7650);
items.add(7651);
items.add(7652);
items.add(7653);
items.add(7654);
items.add(7655);
items.add(7656);
items.add(7657);
items.add(7658);
items.add(7659);
items.add(7660);
items.add(7661);
items.add(7662);
items.add(7663);
items.add(7664);
items.add(7665);
items.add(7666);
items.add(7667);
items.add(7668);
items.add(7669);
items.add(7670);
items.add(7671);
items.add(7672);
items.add(7673);
items.add(7674);
items.add(7675);
items.add(7676);
items.add(7835);
items.add(8380);
items.add(8381);
items.add(8382);
items.add(8383);
items.add(8384);
items.add(8385);
items.add(8386);
items.add(8387);
items.add(8388);
items.add(8389);
items.add(8390);
items.add(8391);
items.add(8392);
items.add(8393);
items.add(8394);
items.add(8395);
items.add(8396);
items.add(8397);
items.add(8398);
items.add(8399);
items.add(8400);
items.add(8401);
items.add(8402);
items.add(8616);
items.add(8617);
items.add(8877);
items.add(8878);
items.add(8879);
items.add(8880);
items.add(8881);
items.add(8882);
items.add(8883);
items.add(8884);
items.add(8885);
items.add(8886);
items.add(8887);
items.add(8888);
items.add(8889);
items.add(8890);
items.add(8891);
items.add(8892);
items.add(8893);
items.add(8894);
items.add(8895);
items.add(8896);
items.add(8897);
items.add(8898);
items.add(8899);
items.add(8900);
items.add(8901);
items.add(8902);
items.add(8903);
items.add(8904);
items.add(8905);
items.add(8906);
items.add(8907);
items.add(8908);
items.add(8909);
items.add(8945);
items.add(8946);

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

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!");

}
}
 
Подскажите что сделать с этим кодом?
 
Извиняйте не так выразился, нужен гайд как воспользоваться сея чудом.

Разобрался.
 
Последнее редактирование модератором:
Есть ли у кого нормальный скрипт на удаление лишнего дропа aCis 376+?
 
500 р конфигом сделаю
 
1000р накидаю на шарпе редактор дропа)
 
500 р конфигом сделаю
Вы серьёзно?!
за кусок кода
Java:
if (Config.ENABLE_SKIPPING && SkipDropData.isSkipped(data.getItemId()))
continue;
и один класс 500 рублей
Java:
package net.sf.l2j.gameserver.data.xml;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import net.sf.l2j.gameserver.xmlfactory.XMLDocumentFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class SkipDropData
{
    private static final Logger _log = Logger.getLogger(SkipDropData.class.getName());

    private static final List<Integer> _skip = new ArrayList<>();

    public static SkipDropData getInstance()
    {
        return SingletonHolder._instance;
    }

    public SkipDropData()
    {
        load();
    }

    private static void load()
    {
        try
        {
            File f = new File("./data/xml/skipdrop/skipping_drop.xml");
            Document doc = XMLDocumentFactory.getInstance().loadDocument(f);

            Node n = doc.getFirstChild();
            for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
            {
                if (d.getNodeName().equalsIgnoreCase("item"))
                {
                    int itemId = Integer.parseInt(d.getAttributes().getNamedItem("id").getNodeValue());
                    _skip.add(itemId);
                }
            }
        }
        catch (Exception e)
        {
            _log.warning("SkipDropData: Error parsing SkipDrop.xml " + e);
        }

        _log.info("SkipDropData: Loaded " + _skip.size() + " skipping item(s).");
    }

    public void reload()
    {
        _skip.clear();
        load();
    }

    public static boolean isSkipped(int itemId)
    {
        return _skip.contains(itemId);
    }

    private static class SingletonHolder
    {
        protected static final SkipDropData _instance = new SkipDropData();
    }
}
Вам бы вместо группы 'Местный' выдать группу 'Дошик'
 
Вы серьёзно?!
за кусок кода
Java:
if (Config.ENABLE_SKIPPING && SkipDropData.isSkipped(data.getItemId()))
continue;
и один класс 500 рублей
Java:
package net.sf.l2j.gameserver.data.xml;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import net.sf.l2j.gameserver.xmlfactory.XMLDocumentFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;

public class SkipDropData
{
    private static final Logger _log = Logger.getLogger(SkipDropData.class.getName());

    private static final List<Integer> _skip = new ArrayList<>();

    public static SkipDropData getInstance()
    {
        return SingletonHolder._instance;
    }

    public SkipDropData()
    {
        load();
    }

    private static void load()
    {
        try
        {
            File f = new File("./data/xml/skipdrop/skipping_drop.xml");
            Document doc = XMLDocumentFactory.getInstance().loadDocument(f);

            Node n = doc.getFirstChild();
            for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
            {
                if (d.getNodeName().equalsIgnoreCase("item"))
                {
                    int itemId = Integer.parseInt(d.getAttributes().getNamedItem("id").getNodeValue());
                    _skip.add(itemId);
                }
            }
        }
        catch (Exception e)
        {
            _log.warning("SkipDropData: Error parsing SkipDrop.xml " + e);
        }

        _log.info("SkipDropData: Loaded " + _skip.size() + " skipping item(s).");
    }

    public void reload()
    {
        _skip.clear();
        load();
    }

    public static boolean isSkipped(int itemId)
    {
        return _skip.contains(itemId);
    }

    private static class SingletonHolder
    {
        protected static final SkipDropData _instance = new SkipDropData();
    }
}
Вам бы вместо группы 'Местный' выдать группу 'Дошик'
Вам бы вместо л2 лучше бы собирать деньги с гитарой на улице
 
Назад
Сверху Снизу