Skip to content

[HELP]Question about splitting Buffs count.

Featured Replies

Hello,

I have a question. On my server, I successfully joined Dance/Songs and Buffs count.

But question is, how can I split maxBuffCount for mages and fighters? Especially I want 25 buffs for mages and ... 30 buffs for fighters??

 

I currently use Scheme buffer by House. In buffer, I splited it successfully. Only thing, I added is isMageClass boolean: (BUFFS_MAX_AMMOUNT config setted to 25, so on fighters it adds 5 slots)

else if (currentCommand.startsWith("skill"))
	{
		String skill_group = st.nextToken();
		String scheme_key = st.nextToken();
		int skill_id = Integer.parseInt(st.nextToken());
		int level = BufferSkillsTable.getInstance().getSkillLevelById(skill_id);
		int maxBuffs;

		if(player.isMageClass())
			maxBuffs = Config.BUFFS_MAX_AMOUNT + Math.max(0, getSkillLevel(L2Skill.SKILL_DIVINE_INSPIRATION));
		else
			maxBuffs = Config.BUFFS_MAX_AMOUNT + 5 + Math.max(0, getSkillLevel(L2Skill.SKILL_DIVINE_INSPIRATION));

		if (currentCommand.startsWith("skillselect") && !scheme_key.equalsIgnoreCase("unselected"))
		{	
			if (CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).size()< maxBuffs)
				CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).add(SkillTable.getInstance().getInfo(skill_id, level));
			else 
				player.sendMessage("You can have only " + maxBuffs + " buffs.");
		}
		else if (currentCommand.startsWith("skillunselect"))
		{
			CharSchemesTable.getInstance().getScheme(player.getObjectId(), scheme_key).remove(SkillTable.getInstance().getInfo(skill_id, level));
		}

		showEditSchemeWindow(player, skill_group, scheme_key);			
	}

 

But now, in gameserver/model/CharEffectsList.java, in method addEffectFromQueue I need to make similar thing - boolean, if player's class is Mage and set different buff count.

But... there is a problem. I need L2PcInstance variable (something like "player" in buffer) and i don't know, how to make it. I've tried to cast _owner variable (L2Character) but it gave me error... so guys, somebody knows, how to do it? Code looks like this:

	private void addEffectFromQueue(L2Effect newEffect)
{
	if (newEffect == null) return;
	L2Skill newSkill = newEffect.getSkill();

	//This is, what i need to declare
	L2PcInstance player == ???
	//I tried things like this:
	//L2PcInstance player = _owner.getActingPlayer();
	//L2PcInstance player = (L2PcInstance)_owner;
	//L2PcInstance player = getClient().getActiveChar();
	int maxBuffs = _owner.getMaxBuffCount();
	if(player.isMageClass())
		maxBuffs = _owner.getMaxBuffCount() + 5;

	if (newSkill.isDebuff())
	{
		if (_debuffs == null) _debuffs = new FastList<L2Effect>();
		for (L2Effect e : _debuffs)
		{
			if (e != null
					&& e.getSkill().getId() == newEffect.getSkill().getId()
					&& e.getEffectType() == newEffect.getEffectType()
					&& e.getStackOrder() == newEffect.getStackOrder()
					&& e.getStackType().equals(newEffect.getStackType()))
			{
				// Started scheduled timer needs to be canceled.
				newEffect.stopEffectTask(); 
				return; 
			}
		}
		_debuffs.addLast(newEffect);
	}
	else
	{
		if (_buffs == null) _buffs = new FastList<L2Effect>();

		for (L2Effect e : _buffs)
		{
			if (e != null
					&& e.getSkill().getId() == newEffect.getSkill().getId()
					&& e.getEffectType() == newEffect.getEffectType()
					&& e.getStackOrder() == newEffect.getStackOrder()
					&& e.getStackType().equals(newEffect.getStackType()))
			{
				e.exit(); // exit this
			}
		}

		// if max buffs, no herb effects are used, even if they would replace one old
		if (newEffect.isHerbEffect() && getBuffCount() >= maxBuffs)
		{ 
			newEffect.stopEffectTask(); 
			return; 
		}

		// Remove first buff when buff list is full
		if (!doesStack(newSkill) && !newSkill.is7Signs())
		{
			int effectsToRemove;
			//if (newSkill.isDance())
			//{
			//	effectsToRemove = getDanceCount() - Config.DANCES_MAX_AMOUNT;
			//	if (effectsToRemove >= 0)
			//	{
			//		for (L2Effect e : _buffs)
			//		{
			//			if (e == null || !e.getSkill().isDance())
			//				continue;

			//			effectsToRemove--;
			//			if (effectsToRemove < 0)
			//				break;
			//		}
			//	}
			//}
			//else
			//{
				effectsToRemove = getBuffCount() - maxBuffs;
				if (effectsToRemove >= 0)
				{
					switch (newSkill.getSkillType())
					{
						case BUFF:
						case REFLECT:
						case HEAL_PERCENT:
						case MANAHEAL_PERCENT:
							for (L2Effect e : _buffs)
							{
								//if (e == null || e.getSkill().isDance())
								//	continue;
								if (e == null)
									continue;

								switch (e.getSkill().getSkillType())
								{
									case BUFF:
									case REFLECT:
									case HEAL_PERCENT:
									case MANAHEAL_PERCENT:
										e.exit();
										effectsToRemove--;
										break; // break switch()
									default:
										continue; // continue for()
								}
								if (effectsToRemove < 0)
									break; // break for()
							}
					}
				}
			//}
		}

 

I just need, how to create L2PcInstance variable (like "player" in House's buffer), or how to make boolean, which check if player is mage... Anybody knows, how to do it?

 

Thanks for answers.

 

P.S. I'm using L2J orig, rev 6321. Gracia Final.

 

 

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.