Jump to content
  • 0

Feanor L2Jacis For Xml


Question

Posted (edited)

Hello tou trying to create a feanor with the droplist of the game so you do not have to do with a frozen type lib is able to work? I do not know how to create from 0 so I copied the drop list and removed the parts of npcs and left only the part of the drope someone can help me I know not to be right but I do not know what to do right anymore.


/*
 * 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.datatables;
 
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
 
import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
import net.sf.l2j.gameserver.model.item.DropCategory;
import net.sf.l2j.gameserver.model.item.DropData;
import net.sf.l2j.gameserver.templates.StatsSet;
import net.sf.l2j.gameserver.xmlfactory.XMLDocumentFactory;
 
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
 
 
/**
 * @author williams
 *
 */
public class FeanorTable
{
private static final Logger _log = Logger.getLogger(FeanorTable.class.getName());
 
private final Map<Integer, NpcTemplate> _feanor = new HashMap<>();
 
protected FeanorTable()
{
load();
}
 
public void reloadAllNpc()
{
_feanor.clear();
load();
}
 
private void load()
{
try
{
final File dir = new File("./data/xml/feanor.xml");
final StatsSet set = new StatsSet();
 
for (File file : dir.listFiles())
{
final Document doc = XMLDocumentFactory.getInstance().loadDocument(file);
 
Node list = doc.getFirstChild();
for (Node feanor = list.getFirstChild(); feanor != null; feanor = feanor.getNextSibling())
{
 
NamedNodeMap attrs = feanor.getAttributes();
if ("drops".equalsIgnoreCase(feanor.getNodeName()))
{
final String type = set.getString("type");
final boolean isRaid = type.equalsIgnoreCase("L2RaidBoss") || type.equalsIgnoreCase("L2GrandBoss");
 
final List<DropCategory> drops = new ArrayList<>();
 
for (Node dropCat = feanor.getFirstChild(); dropCat != null; dropCat = dropCat.getNextSibling())
{
if ("category".equalsIgnoreCase(dropCat.getNodeName()))
{
attrs = dropCat.getAttributes();
 
final DropCategory category = new DropCategory(Integer.parseInt(attrs.getNamedItem("id").getNodeValue()));
 
for (Node item = dropCat.getFirstChild(); item != null; item = item.getNextSibling())
{
if ("drop".equalsIgnoreCase(item.getNodeName()))
{
attrs = item.getAttributes();
 
final DropData data = new DropData();
data.setItemId(Integer.parseInt(attrs.getNamedItem("itemid").getNodeValue()));
data.setMinDrop(Integer.parseInt(attrs.getNamedItem("min").getNodeValue()));
data.setMaxDrop(Integer.parseInt(attrs.getNamedItem("max").getNodeValue()));
data.setChance(Integer.parseInt(attrs.getNamedItem("chance").getNodeValue()));
 
if (ItemTable.getInstance().getTemplate(data.getItemId()) == null)
{
_log.warning("Droplist data for undefined itemId: " + data.getItemId());
continue;
}
category.addDropData(data, isRaid);
}
}
drops.add(category);
}
}
set.set("drops", drops);
}
else if ("teachTo".equalsIgnoreCase(feanor.getNodeName()))
set.set("teachTo", feanor.getAttributes().getNamedItem("classes").getNodeValue());
}
}
}
 
catch (Exception e)
{
_log.log(Level.SEVERE, "FeanorTable: Error parsing Feanor Table : ", e);
}
_log.info("FeanorTable: Loaded " + _feanor.size() + " Feanor Table.");
}
 
public NpcTemplate getTemplate(int id)
{
return _feanor.get(id);
}
 
/**
* @param name to search.
* @return the template list of NPCs for a given name.
*/
public NpcTemplate getTemplateByName(String name)
{
for (NpcTemplate npcTemplate : _feanor.values())
{
if (npcTemplate.getName().equalsIgnoreCase(name))
return npcTemplate;
}
return null;
}
 
/**
* Gets all templates matching the filter.
* @param filter
* @return the template list for the given filter
*/
public List<NpcTemplate> getTemplates(Predicate<NpcTemplate> filter)
{
return _feanor.values().stream().filter(filter).collect(Collectors.toList());
}
 
public Collection<NpcTemplate> getAllNpcs()
{
return _feanor.values();
}
 
public static FeanorTable getInstance()
{
return SingletonHolder._instance;
}
 
private static class SingletonHolder
{
protected static final FeanorTable _instance = new FeanorTable();
}
}
Edited by l2jkain

1 answer to this question

Recommended Posts

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
Answer this question...

×   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.



×
×
  • Create New...