Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Level Up Reward

Iniciado por Swarlog, Jul 25, 2025, 12:11 AM

Tema anterior - Siguiente tema

Swarlog

BETA H5:

### Eclipse Workspace Patch 1.0
#P L2J_DataPack_BETA
Index: dist/game/data/scripts/custom/LevelUpReward/rewards.xsd
===================================================================
--- dist/game/data/scripts/custom/LevelUpReward/rewards.xsd (revision 0)
+++ dist/game/data/scripts/custom/LevelUpReward/rewards.xsd	(working copy)
@@ -0,0 +1,32 @@
+<?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 minOccurs="1" maxOccurs="1">
+				<xs:element name="rewards" minOccurs="1" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence minOccurs="1" maxOccurs="unbounded">
+							<xs:element name="item">
+								<xs:complexType>
+									<xs:attribute name="id" type="xs:integer"></xs:attribute>
+									<xs:attribute name="count" type="xs:long"></xs:attribute>
+								</xs:complexType>
+							</xs:element>
+						</xs:sequence>
+						<xs:attribute name="level" use="required">
+							<xs:simpleType>
+								<xs:restriction base="xs:integer">
+									<xs:minInclusive value="0" />
+									<xs:maxInclusive value="85" />
+								</xs:restriction>
+							</xs:simpleType>
+						</xs:attribute>
+						<xs:attribute name="message" use="optional"></xs:attribute>
+						<xs:attribute name="htmlFile" use="optional"></xs:attribute>
+                    </xs:complexType>
+				</xs:element>
+			</xs:sequence>
+			<xs:attribute name="rewardAll" use="required" type="xs:boolean"></xs:attribute>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>
\ No newline at end of file
Index: dist/game/data/scripts/custom/LevelUpReward/LevelUpReward.java
===================================================================
--- dist/game/data/scripts/custom/LevelUpReward/LevelUpReward.java	(revision 0)
+++ dist/game/data/scripts/custom/LevelUpReward/LevelUpReward.java	(working copy)
@@ -0,0 +1,186 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack 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 DataPack 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 custom.LevelUpReward;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.w3c.dom.Node;
+
+import com.l2jserver.gameserver.engines.DocumentParser;
+import com.l2jserver.gameserver.model.PlayerVariables;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+import com.l2jserver.gameserver.scripting.scriptengine.events.PlayerLevelChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script;
+
+/**
+ * This is a simple custom mod which allows you to give players some items when they level up.<br>
+ * Note: rewardAll attribute if set to true means if player is level 50 and has not yet recieved reward for level 45 he will recieve it.<br
+ * If rewardAll is set to false and new reward was added for level 45 and he is level 50 he will not recieve it.
+ * @author xban1x
+ */
+public final class LevelUpReward extends L2Script
+{
+	// Misc
+	private static final String HTML_PATH = "data/scripts/custom/LevelUpReward/";
+	protected static boolean rewardAll = false;
+	protected static final Map<Integer, LevelData> REWARDS = new HashMap<>();
+	
+	private LevelUpReward(String name, String descr)
+	{
+		super(name, descr);
+		addPlayerLevelNotify(null);
+		new LevelUpRewardData();
+	}
+	
+	@Override
+	public void onPlayerLevelChange(PlayerLevelChangeEvent event)
+	{
+		final L2PcInstance player = event.getPlayer();
+		if (player == null)
+		{
+			return;
+		}
+		final int newLevel = event.getNewLevel();
+		for (int oldLevel = (rewardAll) ? 1 : (event.getOldLevel() + 1); oldLevel <= newLevel; oldLevel++)
+		{
+			if (!REWARDS.containsKey(oldLevel))
+			{
+				continue;
+			}
+			final PlayerVariables vars = player.getVariables();
+			if (vars.getBool("LEVEL_UP_REWARD_" + oldLevel, false))
+			{
+				continue;
+			}
+			final LevelData rewards = REWARDS.get(oldLevel);
+			for (ItemHolder item : rewards.getItems())
+			{
+				player.addItem("Quest", item, player, true);
+			}
+			vars.set("LEVEL_UP_REWARD_" + oldLevel, true);
+			if (rewards.getMessage() != "")
+			{
+				player.sendMessage(rewards.getMessage());
+			}
+			if (rewards.getHtmlFile() != "")
+			{
+				final NpcHtmlMessage html = new NpcHtmlMessage(player.getObjectId());
+				html.setFile(player.getHtmlPrefix(), HTML_PATH + rewards.getHtmlFile());
+				player.sendPacket(html);
+			}
+		}
+	}
+	
+	protected final class LevelUpRewardData extends DocumentParser
+	{
+		public LevelUpRewardData()
+		{
+			load();
+		}
+		
+		@Override
+		public void load()
+		{
+			parseDatapackFile(HTML_PATH + "rewards.xml");
+		}
+		
+		@Override
+		protected void parseDocument()
+		{
+			for (Node n = getCurrentDocument().getFirstChild(); n != null; n = n.getNextSibling())
+			{
+				if ("list".equals(n.getNodeName()))
+				{
+					for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
+					{
+						if ("rewards".equals(d.getNodeName()))
+						{
+							LevelData data = new LevelData();
+							for (Node e = d.getFirstChild(); e != null; e = e.getNextSibling())
+							{
+								if ("item".equals(e.getNodeName()))
+								{
+									data.addItem(parseInteger(e.getAttributes(), "id"), parseLong(e.getAttributes(), "count"));
+								}
+							}
+							data.setMessage(parseString(d.getAttributes(), "message"));
+							data.setHtmlFile(parseString(d.getAttributes(), "htmlFile"));
+							REWARDS.put(parseInteger(d.getAttributes(), "level"), data);
+						}
+					}
+					rewardAll = parseBoolean(n.getAttributes(), "rewardAll");
+				}
+			}
+		}
+	}
+	
+	protected final class LevelData
+	{
+		private String html;
+		private final List<ItemHolder> items;
+		private String message;
+		
+		public LevelData()
+		{
+			html = "";
+			items = new ArrayList<>();
+			message = "";
+		}
+		
+		public void addItem(int itemId, long itemCount)
+		{
+			items.add(new ItemHolder(itemId, itemCount));
+		}
+		
+		public void setHtmlFile(String htmlFile)
+		{
+			html = htmlFile;
+		}
+		
+		public void setMessage(String message)
+		{
+			this.message = message;
+		}
+		
+		public String getHtmlFile()
+		{
+			return html;
+		}
+		
+		public List<ItemHolder> getItems()
+		{
+			return items;
+		}
+		
+		public String getMessage()
+		{
+			return message;
+		}
+	}
+	
+	public static void main(String[] args)
+	{
+		new LevelUpReward(LevelUpReward.class.getSimpleName(), "custom");
+	}
+}
Index: dist/game/data/scripts.cfg
===================================================================
--- dist/game/data/scripts.cfg	(revision 9774)
+++ dist/game/data/scripts.cfg	(working copy)
@@ -755,6 +755,7 @@
 quests/Q10505_JewelOfValakas/Q10505_JewelOfValakas.java
 
 # Custom
+custom/LevelUpReward/LevelUpReward.java
 custom/Nottingale/Nottingale.java
 custom/EchoCrystals/EchoCrystals.java
 custom/ShadowWeapons/ShadowWeapons.java
Index: dist/game/data/scripts/custom/LevelUpReward/rewards.xml
===================================================================
--- dist/game/data/scripts/custom/LevelUpReward/rewards.xml	(revision 0)
+++ dist/game/data/scripts/custom/LevelUpReward/rewards.xml	(working copy)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<list rewardAll="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="rewards.xsd" >
+	<rewards level="5" htmlFile="Reward_5.html">
+		<item id="1060" count="1" />
+	</rewards>
+	<rewards level="10" message="Congratulations for level up">
+		<item id="57" count="10000" />
+	</rewards>
+	<rewards level="15" message="Congratulations for level up">
+		<item id="57" count="10000" />
+	</rewards>
+</list>
\ No newline at end of file
Index: dist/game/data/scripts/custom/LevelUpReward/Reward_5.html
===================================================================
--- dist/game/data/scripts/custom/LevelUpReward/Reward_5.html	(revision 0)
+++ dist/game/data/scripts/custom/LevelUpReward/Reward_5.html	(working copy)
@@ -0,0 +1,4 @@
+<html><body>
+Congratulations, you have gained another level!
+Check your inventory you will see some interesting rewards!
+</body></html>
\ No newline at end of file

ESTABLE H5:

### Eclipse Workspace Patch 1.0
#P L2J_DataPack_BETA
Index: dist/game/data/scripts/custom/LevelUpReward/rewards.xsd
===================================================================
--- dist/game/data/scripts/custom/LevelUpReward/rewards.xsd	(revision 0)
+++ dist/game/data/scripts/custom/LevelUpReward/rewards.xsd	(working copy)
@@ -0,0 +1,32 @@
+<?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 minOccurs="1" maxOccurs="1">
+				<xs:element name="rewards" minOccurs="1" maxOccurs="unbounded">
+					<xs:complexType>
+						<xs:sequence minOccurs="1" maxOccurs="unbounded">
+							<xs:element name="item">
+								<xs:complexType>
+									<xs:attribute name="id" type="xs:integer"></xs:attribute>
+									<xs:attribute name="count" type="xs:long"></xs:attribute>
+								</xs:complexType>
+							</xs:element>
+						</xs:sequence>
+						<xs:attribute name="level" use="required">
+							<xs:simpleType>
+								<xs:restriction base="xs:integer">
+									<xs:minInclusive value="0" />
+									<xs:maxInclusive value="85" />
+								</xs:restriction>
+							</xs:simpleType>
+						</xs:attribute>
+						<xs:attribute name="message" use="optional"></xs:attribute>
+						<xs:attribute name="htmlFile" use="optional"></xs:attribute>
+                    </xs:complexType>
+				</xs:element>
+			</xs:sequence>
+			<xs:attribute name="rewardAll" use="required" type="xs:boolean"></xs:attribute>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>
\ No newline at end of file
Index: dist/game/data/scripts/custom/LevelUpReward/LevelUpReward.java
===================================================================
--- dist/game/data/scripts/custom/LevelUpReward/LevelUpReward.java	(revision 0)
+++ dist/game/data/scripts/custom/LevelUpReward/LevelUpReward.java	(working copy)
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack 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 DataPack 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 custom.LevelUpReward;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.w3c.dom.Node;
+
+import com.l2jserver.gameserver.engines.DocumentParser;
+import com.l2jserver.gameserver.model.PlayerVariables;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+import com.l2jserver.gameserver.scripting.scriptengine.events.PlayerLevelChangeEvent;
+import com.l2jserver.gameserver.scripting.scriptengine.impl.L2Script;
+
+/**
+ * This is a simple custom mod which allows you to give players some items when they level up.<br>
+ * Note: rewardAll attribute if set to true means if player is level 50 and has not yet recieved reward for level 45 he will recieve it.<br
+ * If rewardAll is set to false and new reward was added for level 45 and he is level 50 he will not recieve it.
+ * @author xban1x
+ */
+public final class LevelUpReward extends L2Script
+{
+	// Misc
+	private static final String HTML_PATH = "data/scripts/custom/LevelUpReward/";
+	protected static boolean rewardAll = false;
+	protected static final Map<Integer, LevelData> REWARDS = new HashMap<>();
+	
+	private LevelUpReward(String name, String descr)
+	{
+		super(name, descr);
+		addPlayerLevelNotify(null);
+		new LevelUpRewardData();
+	}
+	
+	@Override
+	public void onPlayerLevelChange(PlayerLevelChangeEvent event)
+	{
+		final L2PcInstance player = event.getPlayer();
+		if (player == null)
+		{
+			return;
+		}
+		final int newLevel = event.getNewLevel();
+		for (int oldLevel = (rewardAll) ? 1 : (event.getOldLevel() + 1); oldLevel <= newLevel; oldLevel++)
+		{
+			if (!REWARDS.containsKey(oldLevel))
+			{
+				continue;
+			}
+			PlayerVariables vars = player.getScript(PlayerVariables.class);
+			if (vars == null)
+			{
+				vars = player.addScript(new PlayerVariables(player.getObjectId()));
+			}
+			if (vars.getBool("LEVEL_UP_REWARD_" + oldLevel, false))
+			{
+				continue;
+			}
+			final LevelData rewards = REWARDS.get(oldLevel);
+			for (ItemHolder item : rewards.getItems())
+			{
+				player.addItem("Quest", item, player, true);
+			}
+			vars.set("LEVEL_UP_REWARD_" + oldLevel, true);
+			if (rewards.getMessage() != "")
+			{
+				player.sendMessage(rewards.getMessage());
+			}
+			if (rewards.getHtmlFile() != "")
+			{
+				final NpcHtmlMessage html = new NpcHtmlMessage(player.getObjectId());
+				html.setFile(player.getHtmlPrefix(), HTML_PATH + rewards.getHtmlFile());
+				player.sendPacket(html);
+			}
+		}
+	}
+	
+	protected final class LevelUpRewardData extends DocumentParser
+	{
+		public LevelUpRewardData()
+		{
+			load();
+		}
+		
+		@Override
+		public void load()
+		{
+			parseDatapackFile(HTML_PATH + "rewards.xml");
+		}
+		
+		@Override
+		protected void parseDocument()
+		{
+			for (Node n = getCurrentDocument().getFirstChild(); n != null; n = n.getNextSibling())
+			{
+				if ("list".equals(n.getNodeName()))
+				{
+					for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
+					{
+						if ("rewards".equals(d.getNodeName()))
+						{
+							LevelData data = new LevelData();
+							for (Node e = d.getFirstChild(); e != null; e = e.getNextSibling())
+							{
+								if ("item".equals(e.getNodeName()))
+								{
+									data.addItem(parseInteger(e.getAttributes(), "id"), parseLong(e.getAttributes(), "count"));
+								}
+							}
+							data.setMessage(parseString(d.getAttributes(), "message"));
+							data.setHtmlFile(parseString(d.getAttributes(), "htmlFile"));
+							REWARDS.put(parseInteger(d.getAttributes(), "level"), data);
+						}
+					}
+					rewardAll = parseBoolean(n.getAttributes(), "rewardAll");
+				}
+			}
+		}
+	}
+	
+	protected final class LevelData
+	{
+		private String html;
+		private final List<ItemHolder> items;
+		private String message;
+		
+		public LevelData()
+		{
+			html = "";
+			items = new ArrayList<>();
+			message = "";
+		}
+		
+		public void addItem(int itemId, long itemCount)
+		{
+			items.add(new ItemHolder(itemId, itemCount));
+		}
+		
+		public void setHtmlFile(String htmlFile)
+		{
+			html = htmlFile;
+		}
+		
+		public void setMessage(String message)
+		{
+			this.message = message;
+		}
+		
+		public String getHtmlFile()
+		{
+			return html;
+		}
+		
+		public List<ItemHolder> getItems()
+		{
+			return items;
+		}
+		
+		public String getMessage()
+		{
+			return message;
+		}
+	}
+	
+	public static void main(String[] args)
+	{
+		new LevelUpReward(LevelUpReward.class.getSimpleName(), "custom");
+	}
+}
Index: dist/game/data/scripts.cfg
===================================================================
--- dist/game/data/scripts.cfg	(revision 9774)
+++ dist/game/data/scripts.cfg	(working copy)
@@ -755,6 +755,7 @@
 quests/Q10505_JewelOfValakas/Q10505_JewelOfValakas.java
 
 # Custom
+custom/LevelUpReward/LevelUpReward.java
 custom/Nottingale/Nottingale.java
 custom/EchoCrystals/EchoCrystals.java
 custom/ShadowWeapons/ShadowWeapons.java
Index: dist/game/data/scripts/custom/LevelUpReward/rewards.xml
===================================================================
--- dist/game/data/scripts/custom/LevelUpReward/rewards.xml	(revision 0)
+++ dist/game/data/scripts/custom/LevelUpReward/rewards.xml	(working copy)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<list rewardAll="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="rewards.xsd" >
+	<rewards level="5" htmlFile="Reward_5.html">
+		<item id="1060" count="1" />
+	</rewards>
+	<rewards level="10" message="Congratulations for level up">
+		<item id="57" count="10000" />
+	</rewards>
+	<rewards level="15" message="Congratulations for level up">
+		<item id="57" count="10000" />
+	</rewards>
+</list>
\ No newline at end of file
Index: dist/game/data/scripts/custom/LevelUpReward/Reward_5.html
===================================================================
--- dist/game/data/scripts/custom/LevelUpReward/Reward_5.html	(revision 0)
+++ dist/game/data/scripts/custom/LevelUpReward/Reward_5.html	(working copy)
@@ -0,0 +1,4 @@
+<html><body>
+Congratulations, you have gained another level!
+Check your inventory you will see some interesting rewards!
+</body></html>
\ No newline at end of file