Jump to content
  • 0

Question

Posted

Hello, ive created an NPC that teleports the player into anothet instance and location

/*
 * 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.model.actor.instance;

import cz.nxs.interf.NexusEvents;
import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;

/**
 * @author zabbix
 * Lets drink to code!
 */
public class L2DocTPInstance extends L2NpcInstance
{
	public L2DocTPInstance(int objectId, L2NpcTemplate template)
	{
		super(objectId, template);
	}

	@Override
public void showChatWindow(L2PcInstance player, int val)
{
	player.sendPacket( ActionFailed.STATIC_PACKET );
	String filename = "data/html/doctp/no.htm";
	
	if (player.getFactionId() == 1)
	{
		filename = "data/html/doctp/doc1.htm";
	}
	else if (player.getFactionId() == 2)
	{
		filename = "data/html/doctp/doc2.htm";
	}
	else
		filename = "data/html/doctp/no.htm";
	
	
	NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
	html.setFile(filename);
	html.replace("%objectId%", String.valueOf(getObjectId()));
	player.sendPacket(html);
}

	@Override
	public void onBypassFeedback(L2PcInstance player, String command)
	{
		//doc 1 - Cave of Trials
		//doc 2 - Cemetery
		//doc 3 - Cursed Village
		//doc 4 - Forgotten Temple
		//doc 5 - Parnassus
		if (command.startsWith("doc11"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 15)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 1 || player.getLevel() > 20 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 1 and less or equal than 20!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(15);
					player.setInDoc(true);
					player.teleToLocation(9954, -112487, -2465);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc12"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 15)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 1 || player.getLevel() > 20 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 1 and less or equal than 20!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(15);
					player.setInDoc(true);
					player.teleToLocation(24219, -113663, -3416);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc21"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 16)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 20 || player.getLevel() > 40 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 20 and less or equal than 40!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(16);
					player.setInDoc(true);
					player.teleToLocation(166018, 20334, -3359);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc22"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 16)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 20 || player.getLevel() > 40 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 20 and less or equal than 40!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(16);
					player.setInDoc(true);
					player.teleToLocation(189036, 14870, -2632);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc31"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 17)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 40 || player.getLevel() > 60 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 40 and less or equal than 60!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(17);
					player.setInDoc(true);
					player.teleToLocation(59994, -47643, -2719);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc32"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 17)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 40 || player.getLevel() > 60 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 40 and less or equal than 60!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(17);
					player.setInDoc(true);
					player.teleToLocation(57958, -30857, 369);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc41"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 18)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 60 || player.getLevel() > 76 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 60 and less or equal than 76!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(18);
					player.setInDoc(true);
					player.teleToLocation(-53838, 179285, -4635);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc42"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 18)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 60 || player.getLevel() > 76 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 60 and less or equal than 76!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(18);
					player.setInDoc(true);
					player.teleToLocation(-53781, 188233, -4665);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc51"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 19)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 76 || player.getLevel() > 96 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 76 and less or equal than 95!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(19);
					player.setInDoc(true);
					player.teleToLocation(150153, 192735, -3696);
				}
			}
					}
				}
			}
		}
		else if (command.startsWith("doc52"))
		{
			if(NexusEvents.isInEvent(player))
	{
		player.sendMessage("You can not use this while in event!");
		return;
	}
			if (player.getInstanceId() != 19)
			{
				if (player.getParty() != null)
				{
					for (L2PcInstance ptm : player.getParty().getPartyMembers())
					{
						if (ptm.getMentoreeId() != player.getCharId())
						{
							player.leaveParty();
						}
						else
						{
				if (player.getInventory().getInventoryItemCount(4357, 0) < 3)
				{
					player.sendMessage("You need 3 Silver to enter Document 1!");
				}
				else if (player.getLevel() < 76 || player.getLevel() > 96 || player.getIsMentor() == 1)
				{
					player.sendMessage("Your level needs to be atleast 76 and less or equal than 95!");
				}
				else
				{
					player.getInventory().destroyItemByItemId("", 4357, 3, player, player);
					player.setInstanceId(19);
					player.setInDoc(true);
					player.teleToLocation(146591, 151689, -2877);
				}
			}
					}
				}
			}
		}
		super.onBypassFeedback(player,command);
	}

	@Override
	public String getHtmlPath(int npcId, int val)
	{
		String pom = "";
		if (val == 0)
		{
			pom = "" + npcId;
		}
		else
		{
			pom = npcId + "-" + val;
		}

		return "data/html/doctp/" + pom + ".htm";
	}
}

 

And the html:

<center>
<a action="bypass -h npc_%objectId%_doc11">Test</a>
</center>

but when i click to the link ingame the html closed and im getting no errors in console, while nth happends in game

3 answers to this question

Recommended Posts

  • 0
Posted

Not sure if that's the issue, could be, but you have to use 2 times for loop. One loop as a condition - your checks - and then second loop, if everything is okay, teleport. Also, dunno if you noticed but you teleport, try to, only the player - test purposes, perhaps :P

  • 0
Posted

The bypass is wrong ofc

You have to check first the levels etc then make the teleport

If player destroy the item you want..

If(player.destroyitembyitemid

Then teleport

And as i saw you want to remove the player from the party before the teleport

If(player.getparty() != null)

Player.leaveparty

Then teleport him

  • 0
Posted

Consider to transform your content into data (xml, sql, whatever), it's extremely redundant if you got a lot of instances.

 

The logic seems completely wrong too, you only want to check party to remove the dude form party, while you included all the leftover logic (money consumption, teleport) inside it.

 

That's the problem when you use hundreds of {}{}{}{}{}. The stuff becomes way more cleaner when you put every check on the same level and don't imbricate stuff :

if (player.getInstanceId() == 19)
	return;

 

What's the idea you want to do with the mentoree / party system ? I didn't get it. Is it uspposed to teleport all people from party, check only yourself,...

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

    • What is the reason for this new behavior where people criticize other users' posts? Do they think people are naive? Here everyone understands and everyone knows who's who. Focus on your work and be happy!    Lately, all they do is criticize anyone who posts anything; it's pure spam. Are they just looking for fame?  
    • Of course, bro So he writes to the admin: “Remove reactions because Skylord talks too much and says things that will make me lose clients.” And boom.. Maxor removes the reactions. Then he says: “Close my topics because too much nonsense is being written on my server.” And boom... the topics get closed. Bro, what century are we living in? People are not stupid. Just think for a second. Of course I won’t be able to fix anything like this. But at the same time, everyone here acts like they’re so great. They write their projects here, selling things for $5k–$10k  but in reality these fools just can’t find clients, so they spam nonsense and pretend they’re some huge professionals selling “super professional” files. From this point on, I can confirm that I will no longer be writing comments, replying to topics, or saying anything about anyone here. Honestly, I no longer care about the people on this forum who are trying to sell things, make a quick $100, and pretend to be something they are not. Many of these so-called “projects” and “official files” turn out to be fake, copied, or misleading. And let’s be honest this is not something new. There have been situations in the past where people asked me for help, copied things from my test servers, took my scripts or folders, and then tried to present them as their own official work. This kind of behavior should be visible to everyone. I am addressing the administration of this forum directly: these things should not be hidden. You should not be deleting posts, closing topics, removing replies, or covering up the truth just because someone is exposing what is actually happening. What kind of community are you building if the truth is constantly being hidden? For years, posts have been removed, topics have been closed, and replies have disappeared just because people said something uncomfortable. That is honestly sad. This is my final message. I no longer care what happens with this forum. Ban me if you want, remove my posts if you want, do whatever you want. I am done here.   I said what I had to say. @Maxtor    
    • TG Support: https://t.me/buyingproxysup | Channel: https://t.me/buyingproxycom Discord support: #buyingproxy | Server: Join the BuyingProxy Discord Server!  Create your free account here
  • 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..