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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock