Jump to content
  • 0

a little help with ArrayList and Map


Question

Posted

hello im try to make a code but i have stuck here

first of all i have 3 npc
flag 1
flag 2
flag 3
in flag 2 i have use to spawn something guard all is works file but
am try every time to kill Flag2 to delete or kill guard if have guard alive
my problem is i have much flag and if i kill one flag the guard from all flags is delete
i need delete guard only in killed flag
here is the code

 

in flagGuard i put all name from flag npc
and after i put all spawn from FlagGuardSpawn

	public Map<String, ArrayList<L2Spawn>> _FlagGuard = new ConcurrentHashMap<>();
	public ArrayList<L2Spawn> _FlagGuardSpawn = new ArrayList<>();
	

 

and here is the delete - doDie code

is work but kill all guard from all flags

i need kill only guard from flag name
 


			for(Entry<String, ArrayList<L2Spawn>> TpGuard : FactionData.getInstance()._FlagGuard.entrySet())
			{
				if(TpGuard.getKey().equals(getName()))
				{
					for(L2Spawn g : TpGuard.getValue())
					{
						g.getNpc().doDie(null);
					}
				}
				
				System.out.println("test " + TpGuard);
			}

 

3 answers to this question

Recommended Posts

  • 0
Posted
19 hours ago, tazerman2 said:

tnx for info but can you explance me more like how can start use a map list and how can get from 20 list only one and delete him or kill guard? and if you can explance me how can put that flag with guard in a list

 

You basically ask me to describe/code you a whole system. 

 

Before you code something you need to think of a hierarchy, means how your code will look like.

Ex. each guard belong to a flag and maybe flags belong to a bases. So guards are children of flags and flags are children of bases. 

 

So we start from the top to the bottom, we move from the parents to the children.

 

Let's say we have a Flag class, we want upon spawn to spawn guards around it and upon delete or capture to delete guards. So basically this flag will own a List with the spawned guards.

 

So you create a ArrayList inside the flag that accepts guards as objects. 

Each instance has overriden methods such as onDie(), onSpawn(), deleteMe() e.t.c. 

In these events you must handle the guards.

 

Example:

 

@Override
public void onSpawn()
{
	super.onSpawn();
}

 

Here you should spawn and add to the list all your guards. 

I guess you know how to manage a spawn of an NPC.

 

After you do that you have a list full of guard objects that belong to this flag. 

Now you can manage onDie() method. Same way in there you do a for in your guard list to delete all guards, they will respawn again once the flag is spawned cause the onSpawn() will be called.

 

You should really do some tests and some practice before make such systems. 

You need learn over super and overriden methods, difference between map and a list, thread safety e.t.c. 

 

 

 

 

  • 0
Posted (edited)

Your whole structure is wrong and this is java before VM was a thing.

 

First of all your code can be all in 1 line. You haven't understand what a MAP is and how to use it base on this code i just saw:

 

MAP.getOrDefault("key", Collections.emptyList()).forEach(s -> s.doDie(s));

 

But again this is not the best perspective.

The proper one is to bind the guards on the flag itself.

 

Either create a method on the FlagInstance.java you created such as:

 

public void addSpawn(final L2Spawn spawn)
{
   GUARD_SPAWN.computeIfAbsent("key", k -> new ArrayList<>()).add(spawn);
}

 

and on the @Override method doDie() of the FlagInstance.java simply kill and delete all guards. Then upon onSpawn() method of FlagInstance.java you can spawn again all guards.

 

In addition using a String as a key is not good nor the object itself. Instead use it's objectId and make sure to remove it upon object's delete. 

 

In addition (2). ArrayList is not thread safe since you write and delete. Use CopyOnWriteArrayList (even tho it's slow)

Edited by Kara
  • 0
Posted

tnx for info but can you explance me more like how can start use a map list and how can get from 20 list only one and delete him or kill guard? and if you can explance me how can put that flag with guard in a list

Guest
This topic is now closed to further replies.


  • Posts

    • Unfortunately, I already tried using it a while ago and it didn't work; besides, it said "gira" and the other person heard it in Godart; and it doesn't have a source.
    • 💎 Unlock Advanced Google Workspace AI integrations with 5TB storage for up to 18 months. Tested, verified, and automated delivery!     FINAL CALL: Google is Shutting This Down After October 2026! Google will NEVER bring back this window of opportunity again. Once this month ends, this massive backdoor upgrade is gone permanently!  BUY 2, GET 1 FREE IS STILL LIVE! Stock up now for yourself, your family, your business, and your friends! Think about it: Every single person you know uses a Gmail account, and everyone is running out of storage. Don't let your loved ones get trapped paying $20–$30 every single month when you can set them up with 5TB Cloud Storage + Gemini Advanced (12–18 Months) right now for only $15! Why Buy Bulk Activations Today? Instant Gift Value: Perfect lifetime-style gift for clients, family, or team members. 100% Private & Safe: Activates on personal Gmails—zero passwords or logins required. Global Access: Works worldwide with zero VPN hassles. Instant Automated Delivery: Receive your activation links in seconds 24/7! ‍ Time is running out fast—secure your extra free licenses before the October deadline hits! Order Your Bundle Now on the Website
    • 31 Interlude Classes Reworked - Interested in Your Opinions One of the biggest challenges while developing L2 WARFRONT has been class balance. Interlude was never designed around continuous, fully buffed faction battles where players return to combat within seconds. Mechanics that work reasonably well in traditional PvP can behave very differently when entire groups are fighting over objectives. Over the past months, we've worked on all 31 playable classes, trying to give each a meaningful battlefield role without removing what makes them recognisable as Interlude classes. Some examples of what we've been experimenting with: Tanks: Chain Strike, Frontline Bulwark and adjustments aimed at making them more valuable in frontline combat. Titan: Frenzy, Zealot and Guts dynamically scale with current HP rather than simply being locked behind an activation threshold. Daggers: Shadow Step, Hide and other changes to mobility and close-range gameplay. Healers: Adjusted healing effectiveness and an offensive Inquisitor option, with the aim of preventing organised parties from becoming almost impossible to kill. Support classes: Additional combat and party-support mechanics to encourage more class diversity. The goal is not to make every class equally strong in a 1v1. A tank, a dagger, a nuker and a healer should have very different strengths. We're not claiming we've achieved perfect balance. We completed a Closed Beta with around 110 participants, collected feedback and have continued making adjustments. We've also published a breakdown of the changes to all 31 classes: https://l2warfront.com/guides/interlude-class-balance/   I'd genuinely be interested in hearing from experienced Interlude players: Which classes do you think are most overlooked in large-scale PvP? Are there any mechanics you believe become particularly problematic in continuous faction warfare? Criticism is welcome. Even when we disagree on a particular approach, a good discussion can help us make better decisions. L2 WARFRONT — Grand Opening: 30 October 2026.
    • I love seeing so much activity on Maxcheaters—users sharing things and all that. Honestly, I want to congratulate every single member of the Maxcheaters staff.   Keep it up! 🙂
  • 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..