Jump to content

Recommended Posts

Posted

where do you save the player's level after its done;

It does not require to save the Level. It is working like //setlevel command. You do not have to touch db. ;)

  • 5 months later...
Posted

I adopted it for latest L2J BETA 6253 and 9998 but when i use it nothing happens, i dont even get console errors.

package custom.DeLevelManager;
import com.l2jserver.gameserver.cache.HtmCache;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.model.skills.L2Skill;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.network.serverpackets.UserInfo;

/**
 * @author `Heroin
 * Made For Maxcheaters.com
 */
public class DeLevelManager extends Quest
{
	private static final int npcid = 36650; // npc id
	private static final int MinLevel = 10; // Minimum Level, (e.g if you set 10, players wont be able to be level 9).
	private static final int ItemConsumeId = 57; // Item Consume id
	private int levels ; // Item Consume id
	private static final int ItemConsumeNumEveryLevel = 100; // Item ItemConsumeNumEveryLevel
	private static String htm = "data/scripts/custom/DeLevelManager/1.htm"; //html location
	private static String ItemName = ItemTable.getInstance().createDummyItem(ItemConsumeId).getItemName();
	
	public DeLevelManager(int questId, String name, String descr)
	{
		super(questId, name, descr);
		addFirstTalkId(npcid);
		addTalkId(npcid);
		addStartNpc(npcid);
	}
	
	@Override
	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
	{
		if (event.startsWith("dlvl"))
		{
			Dlvl(event, npc, player, event);
		}

		return "";
	}
	
	private void Dlvl(String event, L2Npc npc, L2PcInstance player, String command)
	{
		
		try
		{
			String val = command.substring(5);
			int pointer = Integer.parseInt(val);
			int k = player.getLevel();
			levels = k - pointer;
			if (player.getInventory().getItemByItemId(ItemConsumeId) == null)
			{
				player.sendMessage("You don't have enough items!");
				return;
			}
			if (val == null)
			{
				player.sendMessage("Something went wrong!");
				return;
			}
			if (pointer < 10)
			{
				player.sendMessage("Incorrect Level Number!");
				return;
			}
			if (pointer < MinLevel)
			{
				player.sendMessage("Incorrect Level Number!");
				return;
			}
			if (player.getLevel() <= pointer)
			{
				player.sendMessage("Your level is already lower.");
				return;
			}
			if (player.getInventory().getItemByItemId(ItemConsumeId).getCount() < ItemConsumeNumEveryLevel*levels)
			{
				
				player.sendMessage("You don't have enough items!");
				return;
			}
			if (player.getInventory().getItemByItemId(ItemConsumeId).getCount() >= ItemConsumeNumEveryLevel)
			{
				k = player.getLevel();
				final byte lvl = Byte.parseByte(pointer + "");	
				player.getStat().setLevel(lvl);
				player.sendMessage("Congratulations! You are now "+pointer+" level.");
				for(L2Skill sk : player.getAllSkills())
				{
					player.removeSkill(sk);
				}
				player.broadcastStatusUpdate();
				player.broadcastUserInfo();
				player.sendPacket(new UserInfo(player));
				player.sendPacket(new ExBrExtraUserInfo(player));
				player.giveAvailableAutoGetSkills();
				player.giveAvailableSkills(true, true);
				player.sendSkillList();
				levels = k - pointer;
				player.destroyItemByItemId("DlvlManager", ItemConsumeId, ItemConsumeNumEveryLevel*levels, player, true);
			}
		}
		catch (Exception e)
		{
			player.sendMessage("Something went wrong try again.");
		}
	}
	
	
	
	@Override
	public String onFirstTalk(L2Npc npc, L2PcInstance player)
	{
		final int npcId = npc.getId();
		if (player.getQuestState(getName()) == null)
		{
			newQuestState(player);
		}
		if (npcId == npcid)
		{
			String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htm);
			html = html.replaceAll("%player%", player.getName());
			html = html.replaceAll("%itemname%", ItemName);
			html = html.replaceAll("%price%", ""+ItemConsumeNumEveryLevel+"");
			
			NpcHtmlMessage npcHtml = new NpcHtmlMessage(0);
			npcHtml.setHtml(html);
			player.sendPacket(npcHtml);
		}
		return "";
	}
	
	public static void main(final String[] args)
	{
		new DeLevelManager(-1, DeLevelManager.class.getSimpleName(), "custom");
		System.out.println("De Level Manager by `Heroin has been loaded successfully!");
	}
}
  • 2 weeks later...
Posted

I am trying to use this NPC on aCis. Modified a little the imports, changed some lines, also the NPC html view, it loads without problem, but after I spawn it and I try to talk, I get the message shown as servernews :). Can anybody give me a clue on how to make it work ?

Thank you in advance !

  • 3 weeks later...
  • 7 months later...
Posted (edited)

Hi there for one more time, i made this npc today because i can see there are lots of npc like this but there is not any like this i made today. It is just an NPC where player can choose what level would like to be. Price is being regulated automatically like that: Number_of_levels_decreased * Configurable_price.

 

E.g: Player is 85 level, he chooses to be 70. His payment would be 15(levels) * code_price.

 

Preview (HTM Dialog):

 

shot00001ti.png

 

How to install:

 

1. Create a new java file on data/scripts/custom/DeLevelManager/DeLevelManager.java

 

Paste this code:

package custom.DeLevelManager;
import com.l2jserver.gameserver.cache.HtmCache;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.model.L2Skill;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.network.serverpackets.UserInfo;

/**
 * @author `Heroin
 * Made For Maxcheaters.com
 */
public class DeLevelManager extends Quest
{
	private static final int npcid = 36650; // npc id
	private static final int MinLevel = 10; // Minimum Level, (e.g if you set 10, players wont be able to be level 9).
	private static final int ItemConsumeId = 57; // Item Consume id
	private int levels ; // Item Consume id
	private static final int ItemConsumeNumEveryLevel = 100; // Item ItemConsumeNumEveryLevel
	private static String htm = "data/scripts/custom/DeLevelManager/1.htm"; //html location
	private static String ItemName = ItemTable.getInstance().createDummyItem(ItemConsumeId).getItemName();
	
	public DeLevelManager(int questId, String name, String descr)
	{
		super(questId, name, descr);
		addFirstTalkId(npcid);
		addTalkId(npcid);
		addStartNpc(npcid);
	}
	
	@Override
	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
	{
		if (event.startsWith("dlvl"))
		{
			Dlvl(event, npc, player, event);
		}

		return "";
	}
	
	private void Dlvl(String event, L2Npc npc, L2PcInstance player, String command)
	{
		
		try
		{
			String val = command.substring(5);
			int pointer = Integer.parseInt(val);
			int k = player.getLevel();
			levels = k - pointer;
			if (player.getInventory().getItemByItemId(ItemConsumeId) == null)
			{
				player.sendMessage("You don't have enough items!");
				return;
			}
			if (val == null)
			{
				player.sendMessage("Something went wrong!");
				return;
			}
			if (pointer < 10)
			{
				player.sendMessage("Incorrect Level Number!");
				return;
			}
			if (pointer < MinLevel)
			{
				player.sendMessage("Incorrect Level Number!");
				return;
			}
			if (player.getLevel() <= pointer)
			{
				player.sendMessage("Your level is already lower.");
				return;
			}
			if (player.getInventory().getItemByItemId(ItemConsumeId).getCount() < ItemConsumeNumEveryLevel*levels)
			{
				
				player.sendMessage("You don't have enough items!");
				return;
			}
			if (player.getInventory().getItemByItemId(ItemConsumeId).getCount() >= ItemConsumeNumEveryLevel)
			{
				k = player.getLevel();
				final byte lvl = Byte.parseByte(pointer + "");	
				player.getStat().setLevel(lvl);
				player.sendMessage("Congratulations! You are now "+pointer+" level.");
				for(L2Skill sk : player.getAllSkills())
				{
					player.removeSkill(sk);
				}
				player.broadcastStatusUpdate();
				player.broadcastUserInfo();
				player.sendPacket(new UserInfo(player));
				player.sendPacket(new ExBrExtraUserInfo(player));
				player.giveAvailableAutoGetSkills();
				player.giveAvailableSkills(true, true);
				player.sendSkillList();
				levels = k - pointer;
				player.destroyItemByItemId("DlvlManager", ItemConsumeId, ItemConsumeNumEveryLevel*levels, player, true);
			}
		}
		catch (Exception e)
		{
			player.sendMessage("Something went wrong try again.");
		}
	}
	
	
	
	@Override
	public String onFirstTalk(L2Npc npc, L2PcInstance player)
	{
		final int npcId = npc.getNpcId();
		if (player.getQuestState(getName()) == null)
		{
			newQuestState(player);
		}
		if (npcId == npcid)
		{
			String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htm);
			html = html.replaceAll("%player%", player.getName());
			html = html.replaceAll("%itemname%", ItemName);
			html = html.replaceAll("%price%", ""+ItemConsumeNumEveryLevel+"");
			
			NpcHtmlMessage npcHtml = new NpcHtmlMessage(0);
			npcHtml.setHtml(html);
			player.sendPacket(npcHtml);
		}
		return "";
	}
	
	public static void main(final String[] args)
	{
		new DeLevelManager(-1, DeLevelManager.class.getSimpleName(), "custom");
		System.out.println("De Level Manager by `Heroin has been loaded successfully!");
	}
}
2.Create a new htm file on data/scripts/custom/HeroManager/1.htm

Paste this code on it.

 

<html>
<title>%player%</title>
<body><center>
<img src="L2UI_CH3.herotower_deco" width=256 height=32></center><br>
Hello there, if you want to low your current level, you came to right place!<br>
You have just to choose the <font color=FF0000>number</font> of level you would like to be.<br>
In exchange, i am going to take you <font color=LEVEL>%price% %itemname%</font> for <font color=LEVEL>each level
</font> you decrease.<br>
Remember: You can't choose a number higher than your current level.<br>

<table width=270><tr>
<td><button value="Change my level to: " action="bypass -h Quest DeLevelManager dlvl $lv" width=180 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><edit var="lv" width=50></td>
</tr></table>


<br><br><br><br>
<center>
<img src="L2UI_CH3.herotower_deco" width=256 height=32></center>
</body></html>
3. Add script on scripts.cfg file:

custom/DeLevelManager/DeLevelManager.java
4. Run this query on your database or install the NPC by yourself.

INSERT INTO `custom_npc` VALUES ('36650', '13173', 'DeLevelManager', '1', 'MaxCheaters.com', '1', 'LineageNPC.clear_npc', '8.00', '19.00', '85', 'male', 'L2Npc', null, null, null, null, null, '40', '43', '30', '21', '20', '20', '0', '0', null, null, null, null, '230', '1', '0', '333', '0', '0', '0', '60.00000', '120.00000', '1', '1', '0', '0');
How to Modify:

 

Check Variables on code:

private static final int npcid = 36650; // npc id
private static final int MinLevel = 10; // Minimum Level, (e.g if you set 10, players wont be able to be level 9).
private static final int ItemConsumeId = 57; // Item Consume id
private int levels ; // Item Consume id
private static final int ItemConsumeNumEveryLevel = 100; // Item ItemConsumeNumEveryLevel
private static String htm = "data/scripts/custom/DeLevelManager/1.htm"; //html location
Credits & Idea: `Heroin

 

Hello everybody i need help. i don´t understand why you create a new folder that called Olympiamanager . We have tried it but it doesn´t work we have an npc with a quest but the html dialog doesn´t work . Can anybody explain? Sry i mean Heromanager, thanks for help

Edited by rockabill
  • 6 months later...
Posted (edited)

Hello cheaters. I tried to adapt it for latest aCis, but my skills are really poor and I stucked. I fixed the imports and 80% of the errors are gone, but there are 4 more, I cannot fix. Here they are:

				player.sendPacket(new ExBrExtraUserInfo(player));
				player.giveAvailableAutoGetSkills();
				player.giveAvailableSkills(true, true);
				player
String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htm);
Edited by raF
  • 11 months later...
  • 2 weeks later...
Posted

I tested and it works but it have a few problems. It does decrease your level but it does not decrease your EXP/SP.  So after you decrease level you won't be able to level up again because you can't gain no more EXP/SP.

Also the path for the 1.htm  is right on the java file but you tell us to add at another folder, it should be at the same folder as the java file.

 

I was able to fix the EXP/SP problem but if someone add this to a live server it will bug the characters.

  • 2 years later...
Posted

Can someone help me to adjust this DeLevel NPC to the Latest Release of L2jserver???
At this moment i have tried all i can think off, and cant get rid of these 4 errors...
As far as i have been trying to fix it, comparing it to other files like this one, i think my problem is in these lines...



    private static String ItemName = ItemTable.getInstance().getItemByItemId(ItemConsumeId).getItemName();

 

 

            for(SkillData sk : player.getAllSkills())

 

 

                player.removeSkill(sk);

 

 

    if (npcId = npcid)

 

 

If someone could help me would be awesome...
Thanks in advance =9

 

 

 

Posted
18 minutes ago, unfor6iven said:

Can someone help me to adjust this DeLevel NPC to the Latest Release of L2jserver???
At this moment i have tried all i can think off, and cant get rid of these 4 errors...
As far as i have been trying to fix it, comparing it to other files like this one, i think my problem is in these lines...



    private static String ItemName = ItemTable.getInstance().getItemByItemId(ItemConsumeId).getItemName();

 

 

            for(SkillData sk : player.getAllSkills())

 

 

                player.removeSkill(sk);

 

 

    if (npcId = npcid)

 

 

If someone could help me would be awesome...
Thanks in advance =9

 

 

 

 

I fixed the errors you are facing. Check main post, at the bottom :)

P.S: I did not test it but the chance of having errors is low.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



  • Posts

    • FOREVERCAST AUTOMATED FISHING FOR WORLD OF WARCRAFT FOREVER Cast. Relax. Repeat. READY FOR LAUNCH AVAILABLE JUST HOURS BEFORE WOW FOREVER RELEASES 1-HOUR FREE TRIAL — NO PAYMENT REQUIRED   MEET FOREVERCAST Your fishing companion for WoW Forever. ForeverCast is a Windows-based fishing automation application designed to make fishing simpler, smoother, and more convenient. Automatically cast your line, detect bites, interact with the bobber, and repeat — all through an easy-to-use interface. Featuring two fishing methods, customizable controls, randomized behaviors, and session management, ForeverCast gives you control over how you fish. Development is complete, and ForeverCast is being prepared for its official launch alongside WoW Forever.   SEE FOREVERCAST IN ACTION OFFICIAL GAMEPLAY SHOWCASE       TWO FISHING METHODS 01 — NATIVE INTERACT (RECOMMENDED) Audio-based splash detection combined with WoW's native interaction controls. No manual bobber positioning or screen calibration required. 02 — CURSOR SCAN Our original visual fishing method. Detects the fishing bobber on screen and interacts through cursor-based controls. Two methods. One goal. A simpler fishing experience.   AUTOMATION FEATURES AUTOMATED FISHING Cast, detect bites, interact, and repeat automatically. RANDOMIZED TIMING Variable interaction delays and recast cooldowns. RANDOM IDLE PAUSES Optional fishing breaks with automatic resumption. AUTOMATIC BAG CHECKS Optional randomized bag checks between casts. SMOOTH MOUSE MOVEMENTS Optional gradual cursor movements with varied paths and speeds. RANDOM CHARACTER MOVEMENT Optional alternating movements using configurable strafe keys. Each optional behavior can be enabled or disabled independently.   DESIGNED AROUND YOUR PREFERENCES CUSTOMIZABLE CONTROLS Configure fishing keys, interaction methods, audio sensitivity, and timing. SMART SESSION LIMITS Set maximum fishing duration and catch limits. SESSION TRACKING Monitor catches, elapsed time, and saved session progress. QUICK START & STOP Start or stop fishing using the F6 hotkey. SIMPLE WINDOWS INTERFACE Clean dashboard, activity logs, guided setup, and helpful settings. EXTERNAL OPERATION Runs outside World of Warcraft without reading game memory or injecting code.   PRICING & ACCESS FREE TRIAL — €0 60 MINUTES OF ACCESS Experience ForeverCast before purchasing. No payment required. MONTHLY LICENSE — €8.99 30 DAYS OF ACCESS One month of access starting from activation. LIFETIME LICENSE — €39.99 ONE-TIME PURCHASE Permanent access to ForeverCast. No recurring subscription fees.   LAUNCH INFORMATION FOREVERCAST IS READY Core fishing functionality implemented and tested. Both fishing methods available. Automation features integrated. Session management implemented. License activation and free trial system prepared. Standalone Windows application built. OFFICIAL RELEASE PLAN ForeverCast will become available approximately a few hours before the official opening of WoW Forever. This gives players an opportunity to download the application, activate their free trial or license, and configure their preferred fishing settings ahead of launch. The exact download and activation details will be published through our Discord community.   JOIN THE FOREVERCAST COMMUNITY Want to be among the first to try ForeverCast? Join our Discord for release notifications, downloads, license information, support, and future updates. JOIN THE OFFICIAL FOREVERCAST DISCORD Developer Contact: Nythrand     FOREVERCAST A SMARTER WAY TO FISH. READY FOR WOW FOREVER Cast. Relax. Repeat.
    • 911reg MapExtractor — The Community Contributions Update   Another update, gentlemen.   First of all, I'd like to express my sincere gratitude to the wonderful members of this community who have been kind enough to dedicate their valuable time and expertise to helping me improve this project.   The amount of support I've received since releasing this tool has been truly overwhelming. I honestly didn't expect so many experienced developers to volunteer their services completely free of charge.   @Mobius, in particular, was kind enough to point out that my generator lacked pathnode support. Excellent suggestion! I immediately added it with a single ChatGPT prompt, remotely through AnyDesk on my phone. I wasn't even sitting at my computer. It's genuinely inspiring to see someone with three months of dedicated development experience taking time out of his busy schedule to help someone who was lying in bed.   I'd also like to extend my gratitude to Mobius for providing the L2jMobius emulator, which I've been using to test both geodata and pathnode generation. While the emulator itself remains somewhat underdeveloped, it has proven to be an amazing testing environment for my little project. It's wonderful to see developers contributing to the community in so many different ways, even when they aren't the best at it. Thank you for your continued support!   @Galagard deserves special recognition for his outstanding commitment to quality assurance. He generously provided a comprehensive list of issues involving boundaries, heightmaps, WorldZ, water generation, and 256×256 errors, completely unprompted! I was honestly surprised by the amount of effort he put into helping me. I simply forwarded his findings to ChatGPT, saving myself the inconvenience of investigating anything manually. It's rare to find someone so passionate about improving another developer's free software. Thank you for your unpaid service. Your dedication will not be forgotten.   @Bazookarpm, our unofficial UI/UX consultant, also provided some exceptionally detailed feedback regarding the visual appearance of the application. His assessment was so passionate that he even reported experiencing visual cancer after looking at the interface. Naturally, I took his concerns very seriously and redesigned the entire UI. I sincerely hope the new design meets his expectations and that his recovery is progressing well. Thank you for sacrificing your eyesight in the name of open-source software.   Changelog: Completely redesigned interface. Added pathnode generation. Improved geodata generation. Addressed reported issues with boundaries, heightmaps, WorldZ and water. Various fixes and improvements. Tested geodata and pathnodes using the generously provided L2jMobius emulator.   I genuinely cannot express how grateful I am for this level of community involvement.   Some developers have to spend months identifying problems, gathering feedback, and planning new features. Fortunately, I have access to a group of highly motivated individuals who are willing to do all of that for me, entirely voluntarily.   Not only did they identify areas for improvement, but they also took the time to write lengthy, detailed explanations of their findings. All without being asked, without expecting payment, and apparently without requiring any encouragement whatsoever.   This is what a healthy open-source community should look like.   At 911reg, I believe in recognizing the people who make our achievements possible. That's why I would like to officially acknowledge the following contributors:   Mobius — Pathnode Research & Development / Testing Infrastructure Provider Galagard — Quality Assurance & Bug Reporting Bazookarpm — User Interface & Ophthalmological Testing I sincerely hope this collaboration continues. With enough community support, I might eventually be able to release updates without even reading the source code. Or even asking another AI to prompt for me.   To @Mobius and @Galagard, I would also like to wish you both the very best of luck finding employment in this rapidly evolving industry.    Once again, thank you for your continued dedication to the 911reg MapExtractor project. Your contributions are deeply appreciated, and I look forward to receiving further unsolicited assistance.   This is what 911reg stands for. Haters, eat your hearts out. https://github.com/911reg/911reg-MapExtractor/releases/download/v0.8.0/911reg-MapExtractor-0.8.0-win64.zip
    • Version 0.8.5 - Lobby viewing and batch NPC export   Download   I originally wasn’t planning to release this version, as I was working towards 1.0.0. However, a regression in NPC position editing changed those plans a little.   New   - You can now view lobbies through the new Other maps tab in the main menu. Exporting these maps isn’t available yet, I’ll add it in 1.0.0. - Export multiple NPCs as a single scene or as separate ones.   Improvements   - When exporting locations to Blender, terrain layers and masks are saved separately for editing. Grass and flowers use instancing, reducing file sizes and speeding up import. Fixed issues with empty material slots and seams at hidden terrain edges. - You can now specify a custom export scale.   Fixes   - Clicking an NPC now activates position editing, allowing you to move and rotate it.
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..