Jump to content
  • 0

Toggle Skills After Death


Question

Recommended Posts

  • 0
Posted

Hi, you need a source code to modify that, no idea what pack you're using, but search in methods that called after/along with Die.java server packet.

  • 0
Posted

Hello I am using l2jfrozen pack and this is the DIe.java of it , so what do I have to change?

 

/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package com.l2jfrozen.gameserver.network.serverpackets;

import com.l2jfrozen.gameserver.datatables.AccessLevel;
import com.l2jfrozen.gameserver.datatables.sql.AccessLevels;
import com.l2jfrozen.gameserver.managers.CastleManager;
import com.l2jfrozen.gameserver.managers.FortManager;
import com.l2jfrozen.gameserver.model.L2Attackable;
import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.model.L2SiegeClan;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.event.CTF;
import com.l2jfrozen.gameserver.model.entity.event.DM;
import com.l2jfrozen.gameserver.model.entity.event.TvT;
import com.l2jfrozen.gameserver.model.entity.siege.Castle;
import com.l2jfrozen.gameserver.model.entity.siege.Fort;
import com.l2jfrozen.gameserver.model.zone.type.L2MultiFunctionZone;

/**
 * sample 0b 952a1048 objectId 00000000 00000000 00000000 00000000 00000000 00000000 format dddddd rev 377 format
 * ddddddd rev 417
 * 
 * @version $Revision: 1.3.3 $ $Date: 2009/04/29 00:46:18 $
 */
public class Die extends L2GameServerPacket
{
	private static final String _S__0B_DIE = "[S] 06 Die";
	private int _charObjId;
	private boolean _fake;
	private boolean _sweepable;
	private boolean _canTeleport;
	private AccessLevel _access = AccessLevels.getInstance()._userAccessLevel;
	private com.l2jfrozen.gameserver.model.L2Clan _clan;
	L2Character _activeChar;

	/**
	 * @param cha 
	 */
	public Die(L2Character cha)
	{
		_activeChar = cha;
		if(cha instanceof L2PcInstance)
		{
			L2PcInstance player = (L2PcInstance) cha;
			_access = player.getAccessLevel();
			_clan = player.getClan();
			_canTeleport = !((TvT.is_started() && player._inEventTvT)
							|| (DM.is_started() && player._inEventDM)
							|| (CTF.is_started() && player._inEventCTF)
							|| player.isInFunEvent()
							|| player.isPendingRevive()
							|| (player.isInsideZone(L2Character.ZONE_MULTIFUNCTION) && L2MultiFunctionZone.revive));
		}
		_charObjId = cha.getObjectId();
		_fake = !cha.isDead();
		if(cha instanceof L2Attackable)
		{
			_sweepable = ((L2Attackable) cha).isSweepActive();
		}

	}

	@Override
	protected final void writeImpl()
	{
		if(_fake)
			return;

		writeC(0x06);

		writeD(_charObjId);
		// NOTE:
		// 6d 00 00 00 00 - to nearest village	
		// 6d 01 00 00 00 - to hide away
		// 6d 02 00 00 00 - to castle
		// 6d 03 00 00 00 - to siege HQ
		// sweepable
		// 6d 04 00 00 00 - FIXED

		writeD(_canTeleport ? 0x01 : 0);   // 6d 00 00 00 00 - to nearest village

		if(_canTeleport && _clan != null)
		{
			L2SiegeClan siegeClan = null;
			Boolean isInDefense = false;
			Castle castle = CastleManager.getInstance().getCastle(_activeChar);
			Fort fort = FortManager.getInstance().getFort(_activeChar);

			if(castle != null && castle.getSiege().getIsInProgress())
			{
				//siege in progress
				siegeClan = castle.getSiege().getAttackerClan(_clan);
				if(siegeClan == null && castle.getSiege().checkIsDefender(_clan))
				{
					isInDefense = true;
				}
			}
			else if(fort != null && fort.getSiege().getIsInProgress())
			{
				//siege in progress
				siegeClan = fort.getSiege().getAttackerClan(_clan);
				if(siegeClan == null && fort.getSiege().checkIsDefender(_clan))
				{
					isInDefense = true;
				}
			}

			writeD(_clan.getHasHideout() > 0 ? 0x01 : 0x00); // 6d 01 00 00 00 - to hide away
			writeD(_clan.getHasCastle() > 0 || _clan.getHasFort() > 0 || isInDefense ? 0x01 : 0x00); // 6d 02 00 00 00 - to castle
			writeD(siegeClan != null && !isInDefense && siegeClan.getFlag().size() > 0 ? 0x01 : 0x00); // 6d 03 00 00 00 - to siege HQ
		}
		else
		{
			writeD(0x00); // 6d 01 00 00 00 - to hide away
			writeD(0x00); // 6d 02 00 00 00 - to castle
			writeD(0x00); // 6d 03 00 00 00 - to siege HQ
		}

		writeD(_sweepable ? 0x01 : 0x00); // sweepable  (blue glow)
		writeD(_access.allowFixedRes() ? 0x01 : 0x00); // 6d 04 00 00 00 - to FIXED
	}

	/* (non-Javadoc)
	 * @see com.l2jfrozen.gameserver.serverpackets.ServerBasePacket#getType()
	 */
	@Override
	public String getType()
	{
		return _S__0B_DIE;
	}
}

 

  • 0
Posted

so About the 8k lines I got you the "title" of it.. also at the Pcinstance those are the best matches I could get also at l2 character and continues javas I chose those who made more sence but dont really thing is something from those either..

 

59d2580a530ef_.thumb.png.2f4266043fa03ad58160cc60a09574b4.png

  • 0
Posted (edited)

maybe on l2character.java

try find

    public final void stopAllEffects()

and add this code

               

 if(effect.getSkill().isToggle()) continue;

after this

            if (effect != null)
            {

 

i not tested so it can not work :D

Edited by wongerlt
  • 0
Posted (edited)

even if this is the right place to add the check, check again what you just did. You removing the effect and then you checking if is toggle?

  • L2Character.java -> click the stopAllEffects() with your cursor in order to highlight it
  • In eclipse tools -> Refactor -> Change Method Signature
  • click on Add button . A default column will appear with : Object as 'type' , newParam as Name, null as Default Value. Edit them with 'boolean' as type , 'onDeath' as Name , 'false' as default value 
  • Click ok.
  • L2Character.java -> doDie() method, edit all stopAllEffects(false) with true argument only those are inside of "if (this instanceof L2PcInstance)" check
  • Edit the method stopAllEffects like this:
public final void stopAllEffects(boolean onDeath)
	{
		final L2Effect[] effects = getAllEffects();
		for (final L2Effect effect : effects)
		{
			if (effect != null)
			{
				if (onDeath && effect.getSkill().isToggle())
					continue;
				effect.exit(true);
			}
			else
			{
				synchronized (_effects)
				{
					_effects.remove(effect);
				}
			}
		}
		if (this instanceof L2PcInstance)
		{
			((L2PcInstance) this).updateAndBroadcastStatus(2);
		}
	}

 

If you just add a check in stopAllEffects() for toggle then even in subclass change/add/cancel or idk where this method is used you will keep all toggles ....

 

P.s 'Not tested'

Edited by melron
Guest
This topic is now closed to further replies.


×
×
  • Create New...