Jump to content
  • 0

Question

Posted

Hello all..i have created a party zone for 5+ players...and i set a check if a player leaves pt or die and pressed go to village and the party goes <5 then all going back to spawn.

but when a player leaves party he isn't teleported back to Town.. party also stay inside party zone with less than 5 players..  only if the player restart will be teleported back to town.any suggestions>?

https://pastebin.com/THVrji14 

13 answers to this question

Recommended Posts

  • 0
Posted
15 hours ago, Rootware said:

Check the L2Party or something like this the methods where player leaving from party or party disband. And add there check for zone and teleport out from zone.

        {
        }
    if (player.isInsideZone(ZoneId.PVP))
    {
        if (getMemberCount() < 5)
        {
            getPartyMembers().forEach(s -> s.teleToLocation(MapRegionTable.TeleportWhereType.Town));
        }
    }
    }

 

i added this one under this part of code on L2Party.java

 

    /**
     * Remove player from party Overloaded method that takes player's name as parameter
     * @param name
     */
    public void removePartyMember(final String name)
    {
        final L2PcInstance player = getPlayerByName(name);
        
        if (player != null)
            removePartyMember(player);

 

but i am getting an error on (ZoneId.PVP)

 

 

  • 0
Posted

Most likely bcs you remove player from party and then loop party, which doesn't exists anymore for that player.

 

Move it above, first do check for members count and teleport them ALL and then remove player from party.

 

Also, this is funny

 

  1. public boolean isInsidePartyZone()
  2. {
  3. return isInsidePartyZone();
  4. }
  • 0
Posted
On 10/16/2020 at 1:07 AM, SweeTs said:

Most likely bcs you remove player from party and then loop party, which doesn't exists anymore for that player.

 

Move it above, first do check for members count and teleport them ALL and then remove player from party.

 

Also, this is funny

 

  1. public boolean isInsidePartyZone()
  2. {
  3. return isInsidePartyZone();
  4. }

i manage to do it work for the player whos leaving the Party Inside party zone. but the rest party stays inside even if they are <5 ..here is the code i added on L2Party.java

    /**
     * Remove player from party
     * @param player
     */
    public void removePartyMember(final L2PcInstance player)
    {
        removePartyMember(player, true);
        {
            if (!player.isInsideZone(L2Character.ZONE_PARTYZONE))
            {
                if (player.getPartyMembers() < 5)
            {                
                    player.sendMessage("You can't stay inside party zone without party!");
                    {
                        player.teleToLocation(MapRegionTable.TeleportWhereType.Town);
                        return;
                }
                    }
    }
        }
    }

  • 0
Posted
1 hour ago, Rootware said:

You need use 2 checks:

1. For leaving player.

2. For patry after player kick.

Hello Rootware...you mean something like that under the code i placed?
    /**
     * Remove Party From PartyZone
     * @param Party
     */
    
    public void removeParty(final L2PcInstance Party)
    {
        removePartyMember(Party, true);
        {
            if (!Party.isInsideZone(L2Character.ZONE_PARTYZONE))
            {
             if (Party.getPartyMembers() < 5)
            {                
                    Party.sendMessage("You can't stay inside party zone with less than 5 players party!");
                    {
                        getPartyMembers.teleToLocation(MapRegionTable.TeleportWhereType.Town);
                        return;
                }
            }
            }
        }
    }
 

  • 0
Posted

No. Inside L2PartyZone you need manages only 2 events: enter or exit from zone. All other cases with Party you need manage inside L2Party.java class with checking all actions for location in this zone.

  • 0
Posted
2 hours ago, Rootware said:

No. Inside L2PartyZone you need manages only 2 events: enter or exit from zone. All other cases with Party you need manage inside L2Party.java class with checking all actions for location in this zone.

even this one is not working.. 

 

 

    public void removePartyMember(final L2PcInstance player)
    {
        removePartyMember(player, true);
        {
            if (player.isInsideZone(L2Character.ZONE_PARTYZONE) && (player.isInParty() && player.getPartyMembers() < 5 ))
            {            
                    player.sendMessage("You can't stay inside party zone without party!");
                    {
                        getPartyMembers().forEach(s -> s.teleToLocation(MapRegionTable.TeleportWhereType.Town));
                        return;
                }
            }
            }
        }

  • 0
Posted (edited)

When you do Party#removePartyMember, it does what it says ; therefore all additional checks about Player's Party will return false, since he is ALREADY OUT OF THE PARTY. Interrogating Player#getParty() will therefore return ALWAYS NULL, which is PERFECTLY LOGICAL.

 

If you want to code such thing, you have to either :

  • In case of a second method using Party#removePartyMember (what you currently do) RETAIN the Party of the Player into a variable, and reuse it just after Party#removePartyMember if != null (Party can be disband by default in removePartyMember)
  • In case of Party#removePartyMember method edit : write directly in the method whatever check (there are already such checks for Duel and Dimensional Rift, DuelManager/DimensionalRiftManager#onPartyEdit - in L2J, EVERYTHING ALREADY EXISTS).

The good approach is the SECOND approach, since some vars are already validated inside the method (notably, player != null and Party#contains)

Edited by Tryskell
  • 0
Posted
On 10/18/2020 at 11:49 AM, MoNsT3ReN4RgY said:

i manage to do it work for the player whos leaving the Party Inside party zone. but the rest party stays inside even if they are <5

I already told you what to do. Not my fault you don't listen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...