Jump to content
  • 0

help with map list & arraylist


tazerman2

Question

hello i have make a restore buffer with map & arraylist

so i need make a more option like player can save that list with name + can make a new list like fighter/mage

i think for me this method is better from scheme buffer.

anyway. how to get a list and make a new list with name

	private Map<Integer, ArrayList<Integer>> _restore = new HashMap<>();

i call this from add buff

	private ArrayList<Integer> getOwnBuffs(final int objectId)
	{
		if (_restore.get(objectId) == null)
		{
			synchronized (_restore)
			{
				_restore.put(objectId, new ArrayList<Integer>());
			}
		}
		return _restore.get(objectId);
	}

restore list
ArrayList<Integer> bufs = getOwnBuffs(player.getObjectId());
				for (final Integer id : bufs)
				{
					player.broadcastPacket(new MagicSkillUse(this, player, id, SkillTable.getInstance().getMaxLevel(id), 500, 0));
					SkillTable.getInstance().getInfo(id, SkillTable.getInstance().getMaxLevel(id)).getEffects(this, player);
				}
from here he add buffs and he check if skill is not same from skill list
						if (!getOwnBuffs(player.getObjectId()).contains(skillId))
						{
							getOwnBuffs(player.getObjectId()).add(skillId);
						}

 

Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

I don't know if this is what you want:

 

public static class BuffInfo
	{
		int skillId;
		int skillLvl;
		
		public BuffInfo(int skillId, int skillLvl)
		{
			this.skillId = skillId;
			this.skillLvl = skillLvl;
		}
		
		public int getSkillId()
		{
			return skillId;
		}
		
		public int getSkillLevel()
		{
			return skillLvl;
		}
		
		public Skill getSkill()
		{
			return SkillData.getInstance().getSkill(skillId, skillLvl);
		}
	}
	
	public Map<String, List<BuffInfo>> _buff = new HashMap<>();
	
	public Collection<BuffInfo> getBuffOfScheme(String scheme)
	{
		return _buff.get(scheme);
	}
	
	public void addBuffToScheme(String scheme, BuffInfo buff)
	{
		if (!_buff.containsKey(scheme))
		{
			_buff.put(scheme, new ArrayList<>());
		}
		_buff.get(scheme).add(buff);
	}
	
	public void applyScheme(L2PcInstance player, String scheme)
	{
		getBuffOfScheme(scheme).forEach(b -> b.getSkill().applyEffects(player, player));
	}

 

Note i gave you all possible methods, to store, save, retreive buffs. 

 

Also synchronized (_restore) ? Why since is not accessible from other.

Edited by Kara`
Link to comment
Share on other sites

  • 0

You can literally inspire yourself from my scheme buffer and pick the codes part you want.

 

Kara the following method creates an empty list for nothing.

getBuffOfScheme
Link to comment
Share on other sites

  • 0
48 minutes ago, Tryskell said:

You can literally inspire yourself from my scheme buffer and pick the codes part you want.

 

Kara the following method creates an empty list for nothing.


getBuffOfScheme

Oke, i changed it.

Edited by Kara`
Link to comment
Share on other sites

  • 0

tnx kara & tryskell for help i try to make a list restore buff without use name and if any player need make a second list the only need to do is to use a name to old list for save buff like "fighter" and after make a new list like "mage"

Edited by tazerman2
Link to comment
Share on other sites

  • 0
8 minutes ago, tazerman2 said:

tnx kata & tryskell for help i try to make a list restore buff without use name and if any player need make a second list the only need to do is to use a name to old list for save buff like "fighter" and after make a new list like "mage"

kata? Bitch plz.

Link to comment
Share on other sites

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.



  • Posts

    • Will it work for GOD H5 Client Protocol 140??
    • 6.2K followers growth from 500K DMs campaign for Onlyfan niche 🚀 ⭐️ Instant Instagram followers growth & gain subscribers ⭐️ GO VIRAL easier with reels on IG ⭐️ Scraping & Sending in less than 24 hours For consulting contact us on telegram @igmassdm ✅
    • ANOTHER LOGO DESIGN FOR ANOTHER EPIC PROJECT 😎 Thank You for using my support 🙏    
    • In this guide we will cover how to understand and implement the packages belonging to the Lineage 2 UI. More specifically the Essence version UI. Required UTPT (Unreal Tournament Package Tool) : https://github.com/l2jsourcecode/ut-package-tool File : InterfaceClassic.U   The packages are embedded into the interface, specifically located in the InterfaceClassic.u file. Some key classes include: UIPacket.uc (defines package structure) UIProtocol.uc (defines package opcode)   The packages are split into two main types: Client to Server (prefix: C) Server to Client (prefix: S) For example, in the UIProtocol class:   const C_EX_COSTUME_LOCK = 573; // packet from client to server const S_EX_COSTUME_LOCK = 785; // packet from server to client   We’ll use this package as a case study to delve deeper. Understanding Client to Server Packets Let's examine a packet from the client with an opcode of 573. On the server side, opcodes are converted into hexadecimal values using a formula: opcode - C_MAX   where C_MAX is an opcode defined in UIProtocol. Recently, C_MAX has been set to 209. For instance: 573 - 209 = 364 364 -> hex = 16C This hexadecimal value (16C) corresponds to the opcode for the Java class. Understanding Server to Client Packets For server packets, we also use hexadecimal conversion but with a different opcode: S_MAX = 255 S_MAX is applied to packages with an opcode above 255. For values below this, simply convert the number to hex. For example: const S_EX_COSTUME_LOCK = 785; 785 - 255 = 530 530 -> hex = 212 = 0xFE:0x212 Here, 0xFE represents S_MAX. Packet Structure Finally, let’s look at the packet structure. Open UIPacket.uc and locate the C_EX_COSTUME_LOCK to examine its structure in detail.   struct _C_EX_COSTUME_LOCK { var int nCostumeId; var int nLockState; };   We observe two integer variables, representing the structure of the package transmitted to the server. By continuing our search within this file, we find the following code:   static function bool Encode_C_EX_COSTUME_LOCK(out array<byte> stream, _C_EX_COSTUME_LOCK packet) { if(!EncodeInt(stream, packet.nCostumeId)) { return false; } if(!EncodeChar(stream, packet.nLockState)) { return false; } return true; }   This function encodes the packet structure for transmission. As discussed earlier, the data types within the packet are crucial. Specifically:   EncodeInt corresponds to an integer. EncodeChar is treated as a short in Java, typically read using readC, while readD is used for EncodeInt. Having examined the client-to-server packet structure, let's now explore the structure expected by the client from the server. The process is similar. We locate _S_EX_COSTUME_LOCK within UIPacket:     struct _S_EX_COSTUME_LOCK { var byte bResult; var int nCostumeId; var int nLockState; };   Data Decryption The corresponding decryption function is:   static function bool Decode_S_EX_COSTUME_LOCK(out _S_EX_COSTUME_LOCK packet) { if(!DecodeBool(packet.bResult)) { return false; } if(!DecodeInt(packet.nCostumeId)) { return false; } if(!DecodeChar(packet.nLockState)) { return false; } return true; }   Here, the variables are decoded as follows:   bResult is decoded as a Bool. nCostumeId is decoded as an Int. nLockState is decoded as a Char.   This consistent approach to encoding and decoding ensures reliable data transmission between the client and server. Example usage :  https://imgur.com/a/zVZHVzq Credits : L2j West Coast Custom ( https://discord.gg/n2c8meMN )
  • Topics

×
×
  • Create New...