Jump to content
  • 0

[HELP]Question about splitting Buffs count.


Question

Posted

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.

 

 

0 answers to this question

Recommended Posts

There have been no answers to this question yet

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.



×
×
  • Create New...