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

    • Expanding the dominion, the magical Scroll of Escape   The months passed and Orcis dominance over Aden was absolute. Everyone respected his leadership and authority. Now many of his highly ranked soldiers have learned the boat dance of invulnerability but the army had trouble mastering it.    The orc ordered his most loyal engineer, that stranger who his name we still query, to find a way to teach the dance to the solders to turn them into super-soldiers. The stranger searched and search ed and searched, but he could not make the dance easier. For a soldier, with his heavy armor and slow movement was confined to the limits that this shell provided.   But sometimes, the truth hides in simpler things. One day, after testing the dance on the boat many times, the stranger decided to call it a day. But he was too tired to walk back to the city from the Giran Harbor. So he opened his back and used a scroll of escape while still on the boat.  He visited the weapons store, then the church and later decided to go to the west gate of Giran, to do some light sparring with the random villagers.    To his surprise, he could not fight the villagers. Whenever they tried to swing on him, their sword bounced away. And so it came to the strnager, that its not the dance that makes Einhasad bless him with immortality. It's not gods themselves, but an inherent flaw of the mortal world.    And so ... he went to the king, with a bright idea, and a bunch of Scrolls of Escape in hand.   Master I know of a way. And I know of a thousand other ways to trick the gods and gain immortality without dancing infront of them. For it is not the blessing of Einhasad that gives us the gift.    The gods have erred, the world is flawed and only a redesign of the nature's principles can now stop us ...     Epilogue Years ago, there have been stories of people spontaneously blessed by Einhasad. People who would walk on Primeval Isle or in Sieges and be immortal. The elders of the world, the wise ones, never took notice, never acted. For years and years, the ancient magic went unnoticed, but the stranger, figured it out. There's no magic. There never was. And the only reason why the wise ones never figured it out, was cause they had their "telescopes" pointed to the wrong direction. For it's the insignificant, the in-exceptional places, where "magic begins" (If you find my stories interesting, the next story will be about a Canvas in School of Dark Arts that overflows with Ink)
    • I just found it funny that you reversed the reverse engineer champions. They won't like this for sure.    Anyway, the project vision is very good it is aligned with what the players need and want something that both e-global and l2reborn has failed to provide. These are stable projects, they are not good "games". And players play "games" they don't play "projects".  When no good "games" exist, they flock towards good "projects". Lineage 2 private scene has produced decent projects the last years, but no decent "game". I hope you are the first ones to do so.   Generally there are two axis that Lineage 2 needs to evolve on. Modern gaming concepts and the need to respect the aging player's time. So far, most projects treat these aspects as taboo, they seem so afraid to deviate from what they call "true" Lineage 2. But the reality is that times change, you can't stay static forever, you have to evolve. NCSoft failed,they are not paving the way no more. It is us now, the collective community that have to pave our own pathways. WoW has went the same way, private projects took initiative because the company (while not failed) could not steer the game towards what players want and need in 2026.    For that reason I believe your project is going towards the right direction. The four keystones listed in the vision is what I believe is the community really needs but clearly doesn't understand it wants, because noone so far has give them a glimspe of what is beyond their retail-like garden.    I personally don't respect projects like reborn and e-global. As "games", they are simply trash, regardless of their high professionalism as endeavors. They lack innovation, they lack creativity, they are simply good software products,     
    • Giving up has never been part of my mindset. I respect projects like Reborn and E-Global they've earned their reputation. But every successful project started with people saying it would fail. If everyone gave up because there was competition, nothing new would ever exist. Skepticism is completely fair, and I'm not asking anyone to blindly believe in promises. Judge us by what we release, not by assumptions. That's exactly why we're taking our time instead of rushing something unfinished. At the end of the day, time will tell. I'd rather try to build something different and fail than never try at all.
    • Good luck beating projects like reborn eglobal and other crap l can bet you will give up after 1 year or first grand opening after online drops😁  l am very sceptical if honestly, at least run test server first or make something to show 🙂
  • 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..