Jump to content
  • 0

Litle Help With Zone Checker


Question

Posted

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!");
    }
}

Recommended Posts

  • 0
Posted (edited)

SweeTs, I have this code and still not working, when partyleader goes outside zone he can teleport inside and all ur party will teleport again to the respawn.

   private boolean isAllowedEnter(L2PcInstance player) //Checks if player & his party is allowed to teleport.
    {
            
        if (player.getParty() != null)
        {
            for (final L2PcInstance member : player.getParty().getPartyMembers())
            {
                
            if (member.isInsideZone(ZoneId.FLAG_ZONE))    
                return false;
            
            else
            {
                return true;
            }
            }
            if( player.getParty().getMemberCount() >= MinPtMembers && PartyItemsOk(player))//Party Length & Item Checker
            {
                return true;
            }
            else
            {
                return false;
            }
            }
        
        
        return false;
    }
Edited by ton3
Guest
This topic is now closed to further replies.


×
×
  • Create New...