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

    • 🔥 All Premium Subscriptions Available: ChatGPT Plus, Claude Pro, Cursor AI, Canva Pro, CapCut Pro, and YouTube Premium. Instant delivery 24/7!
    • Aurelian is a free Lineage 2 website template for L2J and L2Off/PTS servers, with a medieval/gold design and three visual themes.   You can use it as a completely standalone website, connect it to Forgeport for live server data, or have the website hosted directly by Forgeport.   Forgeport is a hosted player portal, website and donation store platform for Lineage 2 servers.   The important distinction here: you do not need Forgeport to use Aurelian. The static edition is a complete standalone website.   What’s inside: Hero News Features Rates Store Vote Rankings Sieges Bosses Media Download FAQ   Three themes are included: Royal Gold Crimson Frozen   Two downloadable editions: Static — complete standalone site. Edit index.html and upload it to any static host. Zero build process, everything is bundled locally and there are no CDN dependencies. No Forgeport subscription required. Forgeport-integrated — same self-hosted website, but live sections such as players online, rankings, sieges, store, vote and news pull their data from your Forgeport portal’s public read-only API. This edition requires an active Forgeport subscription.   Hosted version If you use Forgeport, you don’t have to host the website yourself. When you claim Aurelian, your account also gets an activation code / handoff link. Activate it on your Forgeport organization and the website is served directly by Forgeport with the live portal data connected.   So there are three ways to use it: Static → standalone, self-hosted Integrated → self-hosted + Forgeport live data Hosted → served directly by Forgeport + live data   How to get it Create a free account at https://shop.forgeport.net Open Aurelian (€0) and claim it. Download the edition you want, or use the activation code / handoff link for the hosted version.   No card required.   For clarity: the static edition is fully usable standalone and does not require a Forgeport account or subscription. You only need the free shop account to claim and download the files.     Links Aurelian / download: https://shop.forgeport.net/ro/en/products/aurelian-lineage-2-website-template Forgeport: https://forgeport.net Documentation: https://docs.forgeport.net/docs There are also other Lineage 2 website templates available in the shop.   Two images attached: cover + full-page preview.   Please report issues in this thread  
    • September update: Aurelian is now free   AURELIAN, the medieval/gold Lineage 2 website template, is now free. It includes all three themes: Royal Gold, Crimson and Frozen.   You can have it as: Hosted on Forgeport — activate it on your Forgeport organization. Forgeport serves the website and supplies the live data; nothing to host. Can be modified at your will.  Static — complete standalone site. Edit index.html and upload it to any static host. Zero build process, everything bundled locally, no CDNs. Forgeport-integrated — same self-hosted site, but players online, rankings, sieges, store, vote and news use your portal’s public read-only API. This edition requires an active Forgeport subscription. There are also other Lineage 2 website templates available in the shop.   Claim Aurelian for €0: https://shop.forgeport.net
    • I played this server about 3 years. Many polish and greek players where inside. ShadowHunterIiI was my name. I remember many players like KakoulisGr,JohnRambo,Ephen,Eldar,Nerous etc. Our clan was DeadlySouls. Awesome years we create so many memories and friendships that got lost in the years after the close of the server.
  • 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..