I changed some things from this code http://www.maxcheaters.com/topic/156243-advanced-party-teleporter/ to make it working for acis, but the zone checker is not working at all, the number of players and parties inside still 0 even when someone is inside. Can someone help?
package net.sf.l2j.gameserver.scripting.scripts.custom;
import net.sf.l2j.gameserver.cache.HtmCache;
import net.sf.l2j.gameserver.datatables.ItemTable;
import net.sf.l2j.gameserver.instancemanager.ZoneManager;
import net.sf.l2j.gameserver.model.L2Party;
import net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.L2Npc;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.zone.L2ZoneType;
import net.sf.l2j.gameserver.model.zone.type.L2FlagZone;
import net.sf.l2j.gameserver.network.serverpackets.InventoryUpdate;
import net.sf.l2j.gameserver.network.serverpackets.ItemList;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
import net.sf.l2j.gameserver.scripting.Quest;
/**
* @author `Heroin
* Made For Maxcheaters.com
* PartyTeleporter
*/
public class PartyTeleporter extends Quest
{
private static final String qn = "PartyTeleporter";
private static final int npcid = 36650; // npc id
//-------------------------------------
//Teleport Location Coordinates X,Y,Z.
//Use /loc command in game to find them.
private static final int locationX = -10864; // npc id
private static final int locationY = -185526; // npc id
private static final int locationZ = -10946; // npc id
//-------------------------------------
//-------------------------------------
// Select the id of your zone.
// If you dont know how to find your zone id is simple.
// Go to data/zones/(your zone file).xml and find your zone
// E.g: <zone name="dion_monster_pvp" id="6" type="ArenaZone" shape="NPoly" minZ="-3596" maxZ="0">
/**The id of your zone is id="6" */
/**---------------------------------------------------------------------------*/
/**WARNING: If your zone does not have any id or your location is not on any zone in data/zones/ folder, you have to add one by your self*/ // required to calculate parties & players
/**---------------------------------------------------------------------------*/
private static final int ZoneId = 19; //Here you have to set your zone Id
//-------------------------------------
private static final int MinPtMembers = 2; // Minimum Party Members Count For Enter on Zone.
private static final int ItemConsumeId = 57; // Item Consume id.
private static final int ItemConsumeNum = 100; // Item Consume Am.ount.
private static final boolean ShowPlayersInside = true; //If you set it true, NPC will show how many players are inside area.
private static final boolean ShowPartiesInside = true; //If you set it true, NPC will show how many parties are inside area.
//-------------------------------------
private static String htm = "data/html/partychecker/1.htm"; //html location.
private static String ItemName = ItemTable.getInstance().createDummyItem(ItemConsumeId).getItemName(); //Item name, Dont Change this
public PartyTeleporter()
{
super(-1, "custom");
addFirstTalkId(npcid);
addTalkId(npcid);
addStartNpc(npcid);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.startsWith("partytp"))
{
TP(event, npc, player, event);
}
return "";
}
@SuppressWarnings("deprecation")
public int getPartiesInside(int zoneId)//Calculating parties inside party area.
{
int i = 0;
for (L2ZoneType zone : ZoneManager.getInstance().getAllZones(L2FlagZone.class))
if (zone.getId() == zoneId)
{
for (L2Character character : zone.getCharactersInside())
if (character instanceof L2PcInstance && (!((L2PcInstance) character).getClient().isDetached()) &&
((L2PcInstance) character).getParty() != null &&
((L2PcInstance) character).getParty().isLeader((L2PcInstance) character))
i++;
}
return i;
}
@SuppressWarnings("deprecation")
public int getPlayerInside(int zoneId)//Calculating players inside party area.
{
int i = 0;
for (L2ZoneType zone : ZoneManager.getInstance().getAllZones(L2FlagZone.class))
if (zone.getId() == zoneId)
{
for (L2Character character : zone.getCharactersInside())
if (character instanceof L2PcInstance && (!((L2PcInstance) character).getClient().isDetached()))
i++;
}
return i;
}
private boolean PartyItemsOk(L2PcInstance player)
//Checks if all party members have the item in their inventory.
//If pt member has not enough items, party not allowed to enter.
{
try
{
for (L2PcInstance member : player.getParty().getPartyMembers())
{
if (member.getInventory().getItemByItemId(ItemConsumeId) == null)
{
player.sendMessage("Your party member "+member.getName()+" does not have enough items.");
return false;
}
if (member.getInventory().getItemByItemId(ItemConsumeId).getCount() < ItemConsumeNum)
{
player.sendMessage("Your party member "+member.getName()+" does not have enough items.");
return false;
}
}
return true;
}
catch (Exception e)
{
player.sendMessage("Something went wrong try again.");
return true;
}
}
private void proccessTP(L2PcInstance player) // Teleporting party members to zone
{
for (L2PcInstance member : player.getParty().getPartyMembers())
{
member.teleToLocation(locationX, locationY, locationZ, 0);//Location X, Y ,Z
}
}
private void TP(String event, L2Npc npc, L2PcInstance player, String command) // Teleport player & his party
{
try
{
L2Party pt = player.getParty();
if (pt == null)
{
player.sendMessage("You are not currently on party.");
return;
}
if (!pt.isLeader(player))
{
player.sendMessage("You are not party leader.");
return;
}
if (pt.getMemberCount() < MinPtMembers)
{
player.sendMessage("You are going to need a bigger party " +
"in order to enter party area.");
return;
}
if (!PartyItemsOk(player))
{
return;
}
else
{
proccessTP(player);
for (L2PcInstance ppl : pt.getPartyMembers())
{
if (ppl.getObjectId() != player.getObjectId())//Dont send this message to pt leader.
{
ppl.sendMessage("Your party leader asked to teleport on party area!");//Message only to party members
}
ppl.sendMessage(ItemConsumeNum+" "+ItemName+" have been dissapeared.");//Item delete from inventory message
ppl.getInventory().destroyItemByItemId("Party_Teleporter", ItemConsumeId, ItemConsumeNum, player, null);//remove item from inventory
ppl.sendPacket(new InventoryUpdate());//Update
ppl.sendPacket(new ItemList(ppl, false));//Update
ppl.sendPacket(new StatusUpdate(ppl));//Update
}
//Sends message to party leader.
player.sendMessage(ItemConsumeNum*player.getParty().getMemberCount()+" "+ItemName+" dissapeard from your party.");
}
}
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(htm);
html = html.replaceAll("%player%", player.getName());//Replaces %player% with player name on html
html = html.replaceAll("%itemname%", ItemName);//Item name replace on html
html = html.replaceAll("%price%", player.getParty()!=null ? ""+ItemConsumeNum*player.getParty().getMemberCount()+"": "0");//Price calculate replace
html = html.replaceAll("%minmembers%", ""+MinPtMembers);//Mimum entry party members replace
html = html.replaceAll("%allowed%", isAllowedEnter(player) ? "<font color=00FF00>allowed</font>" :
"<font color=FF0000>not allowed</font>");//Condition checker replace on html
html = html.replaceAll("%parties%", ShowPartiesInside ? "<font color=FFA500>Parties Inside: "+getPartiesInside(ZoneId)+"</font><br>": "");//Parties inside
html = html.replaceAll("%players%", ShowPlayersInside ? "<font color=FFA500>Players Inside: "+getPlayerInside(ZoneId)+"</font><br>": "");//Players Inside
NpcHtmlMessage npcHtml = new NpcHtmlMessage(0);
npcHtml.setHtml(html);
player.sendPacket(npcHtml);
}
return "";
}
private boolean isAllowedEnter(L2PcInstance player) //Checks if player & his party is allowed to teleport.
{
if (player.getParty() != null)
{
if( player.getParty().getMemberCount() >= MinPtMembers && PartyItemsOk(player))//Party Length & Item Checker
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
public static void main(final String[] args)
{
new PartyTeleporter();
System.out.println("Party Teleporter by `Heroin has been loaded successfully!");
}
}
DISCORD :
utchiha_market
telegram :
https://t.me/utchiha_market
SELLIX STORE :
https://utchihamkt.mysellix.io/
Join our server for more products :
https://discord.gg/hood-services
https://campsite.bio/utchihaamkt
Question
ton3
I changed some things from this code http://www.maxcheaters.com/topic/156243-advanced-party-teleporter/ to make it working for acis, but the zone checker is not working at all, the number of players and parties inside still 0 even when someone is inside. Can someone help?
18 answers to this question
Recommended Posts