sotid Posted August 10, 2017 Posted August 10, 2017 (edited) How can I make Toggle skills to still be active after death? Edited August 11, 2017 by sotid
0 l2-scripts Posted August 15, 2017 Posted August 15, 2017 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 sotid Posted September 22, 2017 Author Posted September 22, 2017 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 Tryskell Posted September 29, 2017 Posted September 29, 2017 Search for isToggle() on sources, you will find all uses. One is probably set on doDie().
0 sotid Posted September 29, 2017 Author Posted September 29, 2017 (edited) Ok thanks I will search it later and reply! Edited September 29, 2017 by sotid
0 sotid Posted September 29, 2017 Author Posted September 29, 2017 I searched everything related to isToggle() ,but couldnt figure this out and when I search for doDie() I get nothing.
0 Tryskell Posted September 29, 2017 Posted September 29, 2017 L2Character ones... Do an effort mate. Once you got results, you can double click on them and see directly what it does.
0 sotid Posted September 30, 2017 Author Posted September 30, 2017 Its not that I am not giving an efford I just dont want to break anything.. Do I have to change here something?
0 Tryskell Posted September 30, 2017 Posted September 30, 2017 Probably nope (the 8k lines one I got no clue what is the method, it could be), try your chance on L2PcInstance.
0 sotid Posted October 2, 2017 Author Posted October 2, 2017 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..
0 wongerlt Posted October 8, 2017 Posted October 8, 2017 (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 October 8, 2017 by wongerlt
0 sotid Posted October 11, 2017 Author Posted October 11, 2017 Didnt work even when I had to modify some lines and remove some others.. after build success no difference.
0 melron Posted October 11, 2017 Posted October 11, 2017 (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 October 12, 2017 by melron
Question
sotid
How can I make Toggle skills to still be active after death?
Edited by sotid17 answers to this question
Recommended Posts