We moved our repositories to BitBucket!

If you can't login or you can't register to the forums do not rise an issue, instead please write to support (at) l2jserver.com

Check our wiki!

Report server issues here

Forum has been updated to phpBB 3.2, let's see if this fixes some minor bugs we had.

Thank you for visiting http://www.l2jserver.com/

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 » Sun Jul 29, 2018 6:07 pm

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: 85
Joined: Wed May 04, 2011 9:12 am

Re: Olf's T-Shirt Option.

Post by Amrod » Tue Jul 31, 2018 3:09 pm

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