Olf's T-Shirt Option.

Support for the latest build of L2J Server, get help here with installations, upgrades, problems.
Do not post bugs reports here, use viewforum.php?f=77 instead.
There is no support for other server builds than the official provided by l2jserver.com
Forum rules
READ NOW: L2j Forums Rules of Conduct
Post Reply
InFocus99
Posts: 2
Joined: Wed Jul 11, 2018 4:54 pm

Olf's T-Shirt Option.

Post by InFocus99 »

Hello everyone. I just want to ask how i can add more options at t-shirt? now max is 3, i want to add more than 3, like 5,6. In EnchantItemOption i make setting, but in EnchantItemOptionData.java i don't know how i can set it. I try wth byte i = 0; i < 4; But that option no work, and don't add the 4nd option. I post here OptionData.java and maybe someone can help me. Thank you

Code: Select all

/*
 * Copyright (C) 2004-2015 L2J Server
 * 
 * This file is part of L2J Server.
 * 
 * L2J Server 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.
 * 
 * L2J Server 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 com.l2jserver.gameserver.model.options;

/**
 * @author UnAfraid
 */
public class EnchantOptions
{
	private final int _level;
	private final int[] _options;
	
	public EnchantOptions(int level)
	{
		_level = level;
		_options = new int[3];
	}
	
	public int getLevel()
	{
		return _level;
	}
	
	public int[] getOptions()
	{
		return _options;
	}
	
	public void setOption(byte index, int option)
	{
		if (_options.length > index)
		{
			_options[index] = option;
		}
	}
}

EnchantItemOption.xsd

Code: Select all

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="list">
		<xs:complexType>
			<xs:sequence maxOccurs="1" minOccurs="1">
				<xs:element name="item" maxOccurs="unbounded" minOccurs="1">
					<xs:complexType>
						<xs:sequence maxOccurs="1" minOccurs="1">
							<xs:element name="options" maxOccurs="51" minOccurs="1">
								<xs:complexType>
									<xs:attribute name="level" use="required">
										<xs:simpleType>
											<xs:restriction base="xs:nonNegativeInteger">
												<xs:minInclusive value="0" />
												<xs:maxInclusive value="50" />
											</xs:restriction>
										</xs:simpleType>
									</xs:attribute>
									<xs:attribute name="option1" use="required">
										<xs:simpleType>
											<xs:restriction base="xs:positiveInteger">
												<xs:minInclusive value="1" />
												<xs:maxInclusive value="65535" />
											</xs:restriction>
										</xs:simpleType>
									</xs:attribute>
									<xs:attribute name="option2">
										<xs:simpleType>
											<xs:restriction base="xs:positiveInteger">
												<xs:minInclusive value="1" />
												<xs:maxInclusive value="65535" />
											</xs:restriction>
										</xs:simpleType>
									</xs:attribute>
									<xs:attribute name="option3">
										<xs:simpleType>
											<xs:restriction base="xs:positiveInteger">
												<xs:minInclusive value="1" />
												<xs:maxInclusive value="65535" />
											</xs:restriction>
										</xs:simpleType>
									</xs:attribute>
									<xs:attribute name="option4">
										<xs:simpleType>
											<xs:restriction base="xs:positiveInteger">
												<xs:minInclusive value="1" />
												<xs:maxInclusive value="65535" />
											</xs:restriction>
										</xs:simpleType>
									</xs:attribute>
								</xs:complexType>
							</xs:element>
						</xs:sequence>
						<xs:attribute name="id" use="required">
							<xs:simpleType>
								<xs:restriction base="xs:positiveInteger">
									<xs:minInclusive value="1" />
									<xs:maxInclusive value="65535" />
								</xs:restriction>
							</xs:simpleType>
						</xs:attribute>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

EnchantItemOptionData.java

Code: Select all

/*
 * Copyright (C) 2004-2015 L2J Server
 * 
 * This file is part of L2J Server.
 * 
 * L2J Server 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.
 * 
 * L2J Server 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 com.l2jserver.gameserver.data.xml.impl;

import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;

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

import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.model.options.EnchantOptions;
import com.l2jserver.gameserver.util.Util;
import com.l2jserver.util.data.xml.IXmlReader;

/**
 * @author UnAfraid
 */
public class EnchantItemOptionsData implements IXmlReader
{
	private final Map<Integer, Map<Integer, EnchantOptions>> _data = new HashMap<>();
	
	protected EnchantItemOptionsData()
	{
		load();
	}
	
	@Override
	public synchronized void load()
	{
		_data.clear();
		parseDatapackFile("data/enchantItemOptions.xml");
	}
	
	@Override
	public void parseDocument(Document doc)
	{
		int counter = 0;
		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 ("item".equalsIgnoreCase(d.getNodeName()))
					{
						int itemId = parseInteger(d.getAttributes(), "id");
						if (!_data.containsKey(itemId))
						{
							_data.put(itemId, new HashMap<Integer, EnchantOptions>());
						}
						for (Node cd = d.getFirstChild(); cd != null; cd = cd.getNextSibling())
						{
							if ("options".equalsIgnoreCase(cd.getNodeName()))
							{
								final EnchantOptions op = new EnchantOptions(parseInteger(cd.getAttributes(), "level"));
								_data.get(itemId).put(op.getLevel(), op);
								
								for (byte i = 0; i < 4; i++)
								{
									final Node att = cd.getAttributes().getNamedItem("option" + (i + 1));
									if ((att != null) && Util.isDigit(att.getNodeValue()))
									{
										op.setOption(i, parseInteger(att));
									}
								}
								counter++;
							}
						}
					}
				}
			}
		}
		LOGGER.log(Level.INFO, getClass().getSimpleName() + ": Loaded: " + _data.size() + " Items and " + counter + " Options.");
	}
	
	/**
	 * @param itemId
	 * @param enchantLevel
	 * @return enchant effects information.
	 */
	public EnchantOptions getOptions(int itemId, int enchantLevel)
	{
		if (!_data.containsKey(itemId) || !_data.get(itemId).containsKey(enchantLevel))
		{
			return null;
		}
		return _data.get(itemId).get(enchantLevel);
	}
	
	/**
	 * @param item
	 * @return enchant effects information.
	 */
	public EnchantOptions getOptions(L2ItemInstance item)
	{
		return item != null ? getOptions(item.getId(), item.getEnchantLevel()) : null;
	}
	
	/**
	 * Gets the single instance of EnchantOptionsData.
	 * @return single instance of EnchantOptionsData
	 */
	public static final EnchantItemOptionsData getInstance()
	{
		return SingletonHolder._instance;
	}
	
	private static class SingletonHolder
	{
		protected static final EnchantItemOptionsData _instance = new EnchantItemOptionsData();
	}
}
Amrod
Posts: 95
Joined: Wed May 04, 2011 9:12 am

Re: Olf's T-Shirt Option.

Post by Amrod »

Hi

First I thought: sooo easy, but then I saw it is not where i was looking for it :problem:

The skill iteself says nothing in detail

Code: Select all

<skill id="22247" levels="1" name="Olf's T-shirt Enchant Scroll">
		<set name="isMagic" val="2" /> <!-- Static Skill -->
		<set name="magicLvl" val="1" />
		<set name="operateType" val="A1" />
		<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
		<set name="targetType" val="SELF" />
	</skill>
	<skill id="22248" levels="1" name="Blessed Olf's T-shirt Enchant Scroll">
		<set name="isMagic" val="2" /> <!-- Static Skill -->
		<set name="magicLvl" val="1" />
		<set name="operateType" val="A1" />
		<set name="rideState" val="NONE;STRIDER;WYVERN;WOLF" />
		<set name="targetType" val="SELF" />
	</skill>
Then I came across this file: Enchantitemoptions.xml

Code: Select all

<item id="21580"> <!-- Olf's T-shirt -->
		<options level="0" option1="24965" />
		<options level="1" option1="24966" />
		<options level="2" option1="24967" />
		<options level="3" option1="24968" />
		<options level="4" option1="24969" option2="24975" />
		<options level="5" option1="24970" option2="24976" />
		<options level="6" option1="24971" option2="24977" />
		<options level="7" option1="24972" option2="24978" option3="24982" />
		<options level="8" option1="24973" option2="24979" option3="24982" />
		<options level="9" option1="24974" option2="24980" option3="24983" />
		<options level="10" option1="24984" option2="24985" option3="24983" />
	</item>
	<item id="21706"> <!-- Olf's T-shirt (Event) -->
		<options level="0" option1="24965" />
		<options level="1" option1="24966" />
		<options level="2" option1="24967" />
		<options level="3" option1="24968" />
		<options level="4" option1="24969" option2="24975" />
		<options level="5" option1="24970" option2="24976" />
		<options level="6" option1="24971" option2="24977" />
		<options level="7" option1="24972" option2="24978" option3="24982" />
		<options level="8" option1="24973" option2="24979" option3="24982" />
		<options level="9" option1="24974" option2="24980" option3="24983" />
		<options level="10" option1="24984" option2="24985" option3="24983" />
	</item>
Unfortunately I don't know where to find or modify these "options"... Furthermore do I not know what the 2 stands for in <set name="enchant_enabled" val="2" />. Normally it's either a 1 or a 0, don't remember seeing a 2 in there
Post Reply