Jump to content
  • 0

Don't know how to adapt this


Question

Posted

Hi to everyone. i'm making this thread to find any help

 

Im new on the world of l2 servers, im using free source of acis (rev 382) and cannot ad this code to my project 

 

/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j.gameserver.data.xml;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

import net.sf.l2j.gameserver.enums.items.CrystalType;
import net.sf.l2j.gameserver.model.L2EnchantScroll;
import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
import net.sf.l2j.gameserver.xmlfactory.XMLDocumentFactory;

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

/**
 * @author Thug
 *
 */
public class EnchantData
{
       private static Logger _log = Logger.getLogger(EnchantData.class.getName());
      
       private static final Map<Integer, L2EnchantScroll> _map = new HashMap<>();
      
       public static EnchantData getInstance()
       {
               return SingletonHolder._instance;
       }
      
       protected EnchantData()
       {
               try
               {
                       File f = new File("./data/xml/enchants.xml");
                       Document doc = XMLDocumentFactory.getInstance().loadDocument(f);
                      
                       for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
                       {
                               if ("list".equalsIgnoreCase(n.getNodeName()))
                               {
                                       for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
                                       {
                                               if ("enchant".equalsIgnoreCase(d.getNodeName()))
                                               {
                                                       NamedNodeMap attrs = d.getAttributes();
                                                      
                                                       int id = Integer.valueOf(attrs.getNamedItem("id").getNodeValue());
                                                       byte grade = Byte.valueOf(attrs.getNamedItem("grade").getNodeValue());
                                                       boolean weapon = Boolean.valueOf(attrs.getNamedItem("weapon").getNodeValue());
                                                       boolean breaks = Boolean.valueOf(attrs.getNamedItem("break").getNodeValue());
                                                       boolean maintain = Boolean.valueOf(attrs.getNamedItem("maintain").getNodeValue());
                                                      
                                                       String[] list = attrs.getNamedItem("chance").getNodeValue().split(";");
                                                       byte[] chance = new byte[list.length];
                                                       for (int i = 0; i < list.length; i++)
                                                               chance[i] = Byte.valueOf(list[i]);
                                                      
                                                       CrystalType grade_test = CrystalType.NONE;
                                                       switch (grade)
                                                       {
                                                               case 1:
                                                                       grade_test = CrystalType.D;
                                                                       break;
                                                               case 2:
                                                                       grade_test = CrystalType.C;
                                                                       break;
                                                               case 3:
                                                                       grade_test = CrystalType.B;
                                                                       break;
                                                               case 4:
                                                                       grade_test = CrystalType.A;
                                                                       break;
                                                               case 5:
                                                                       grade_test = CrystalType.S;
                                                                       break;
                                                       }                                                      
                                                      
                                                       _map.put(id, new L2EnchantScroll(grade_test, weapon, breaks, maintain, chance));
                                               }
                                       }
                               }
                       }
                              
                       _log.info("EnchantTable: Loaded " + _map.size() + " enchants.");
               }
               catch (Exception e)
               {
                       _log.warning("EnchantTable: Error while loading enchant table: " + e);
               }
       }
      
       public L2EnchantScroll getEnchantScroll(ItemInstance item)
       {
               return _map.get(item.getItemId());
       }
      
       private static class SingletonHolder
       {
               protected static final EnchantData _instance = new EnchantData();
       }
}

 

i have errors in the lines:

// -> import net.sf.l2j.gameserver.xmlfactory.XMLDocumentFactory;


// -> Document doc = XMLDocumentFactory.getInstance().loadDocument(f);

 

i will be so grateful if someone could help me

6 answers to this question

Recommended Posts

  • 0
Posted

 

Hey thanks for your reply ... I try to copy the way what i found at class (MultisellData.java) and did this:

 

public class EnchantData implements IXmlReader
{
	private static Logger _log = Logger.getLogger(EnchantData.class.getName());
	private static final Map<Integer, L2EnchantScroll> _map = new HashMap<>();
	
	public EnchantData()
	{
		load();
	}

	@Override
	public void load()
	{
		parseFile("data/xml/enchants.xml");
	}

	@Override
	public void parseDocument(Document doc, Path path)
	{
		try
		{
			for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
	        {
	                if ("list".equalsIgnoreCase(n.getNodeName()))
	                {
	                        for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
	                        {
	                                if ("enchant".equalsIgnoreCase(d.getNodeName()))
	                                {
	                                        NamedNodeMap attrs = d.getAttributes();
	                                       
	                                        int id = Integer.valueOf(attrs.getNamedItem("id").getNodeValue());
	                                        byte grade = Byte.valueOf(attrs.getNamedItem("grade").getNodeValue());
	                                        boolean weapon = Boolean.valueOf(attrs.getNamedItem("weapon").getNodeValue());
	                                        boolean breaks = Boolean.valueOf(attrs.getNamedItem("break").getNodeValue());
	                                        boolean maintain = Boolean.valueOf(attrs.getNamedItem("maintain").getNodeValue());
	                                       
	                                        String[] list = attrs.getNamedItem("chance").getNodeValue().split(";");
	                                        byte[] chance = new byte[list.length];
	                                        for (int i = 0; i < list.length; i++)
	                                                chance[i] = Byte.valueOf(list[i]);

 

well it's work fine to me because don't get erros and on live works good each enchant config...

Obviously if someone know Java more than me could say: "dude u are so wrong.." 

So if someone could say if this it's ok or i must do anything more will be so grateful

btw thanks again @Zake

  • 0
Posted

XMLDocumentFactory was deleted on rev 382, it has been replaced by IXmlReader a while back (377). Simply check classes using IXmlReader, it produces far lesser code.

  • 0
Posted

Well i did it if u check my second reply whit new code using the implements of IXmlReader and don't get any problem so i can say i did right...

Thanks to all, can close the topic !

  • 0
Posted
3 hours ago, lyrien said:

Well i did it if u check my second reply whit new code using the implements of IXmlReader and don't get any problem so i can say i did right...

Thanks to all, can close the topic !

locked

Guest
This topic is now closed to further replies.


  • Posts

    • Added FloodProtector utility to prevent packet flooding for actions like item use and dice rolling. Integrated flood protection checks in relevant client packet handlers and registered/removal hooks in player lifecycle. Updated movement logic in L2PcInstance for improved position synchronization and geodata handling. Minor fixes and refactoring in attack logic, private store handling, and admin NPC editing. Refactored AI classes to enhance movement, attack, and skill usage logic for characters and mobs. Improved distance checks, attack range calculations, and skill casting conditions. Removed unused intention command logic from L2CharacterAI. Updated configuration to enable CellPathFinding. Minor code cleanups and bug fixes for more reliable AI behavior. Enhanced GeoPathFinding with detailed debug and error messages for region loading, including success/failure counts and file checks. Refactored L2AttackableAI and L2CharacterAI to improve attack range tolerance, immediate attack behavior, and added safety checks for missing targets. Updated configuration to disable CellPathFinding by default and added a new ShowRedName option for aggressive mobs. Minor config and log updates included. Applied TCP socket optimizations (e.g., TCP_NODELAY, buffer sizes, keepalive) in ClientThread, Connection, and SelectorThread to reduce latency and improve throughput. Enhanced L2AttackableAI with better random walk, aggro, and attack logic, including silent move checks, quest monster handling, and improved faction/raid/minion behavior. Added silent move support to L2PlayableInstance and quest monster flag to L2NpcTemplate/L2NpcInstance. These changes aim to improve server responsiveness, AI realism, and overall stability.
    • I’ve been using this Escape from Tarkov Hack for about a week now with no issues at all. ESP works great without any lag, and the aimbot is smooth and doesn't feel obvious. Had a quick setup with the loader, and support answered my questions right away. The HWID spoofer also did its job without messing with my system. So far, the cheat's staying undetected on my side.
    • Hello everyone, this is ADENA L2REBORN / LU4 / MASTERWORK We also have items, epics, etc. discord - adver745645 Our prices are reasonable, so have a nice shopping and a nice day.
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock