- 0
Cancellation Sys For H5
-
Posts
-
package custom.events.RandomZoneEvent; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ScheduledFuture; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.time.SchedulingPattern; import org.l2jmobius.commons.time.TimeUtil; import org.l2jmobius.commons.util.IXmlReader; import org.l2jmobius.gameserver.managers.ZoneManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.quest.Event; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneType; import org.l2jmobius.gameserver.model.zone.type.RandomZone; import org.l2jmobius.gameserver.util.Broadcast; /** * Random Zone Event - Activates one random PvP zone temporarily. No modifica la clase de la zona: usa flags PvP en runtime. * @author Juan */ public class RandomZoneEvent extends Event { private static final String CONFIG_FILE = "data/scripts/custom/events/RandomZoneEvent/config.xml"; private static int EVENT_DURATION_MINUTES = 15; private static boolean _isActive = false; private ScheduledFuture<?> _eventTask = null; private final List<ZoneType> _availableZones = new ArrayList<>(); private ZoneType _activeZone = null; public RandomZoneEvent() { loadConfig(); loadZones(); registerZoneListeners(); } /** * Registra listeners a TODAS LAS ZONAS random */ private void registerZoneListeners() { for (ZoneType zone : _availableZones) { addEnterZoneId(zone.getId()); addExitZoneId(zone.getId()); LOGGER.info("[RandomZoneEvent] Registered listener for zone: " + zone.getName()); } } private void loadConfig() { new IXmlReader() { @Override public void load() { parseDatapackFile(CONFIG_FILE); } @Override public void parseDocument(Document doc, File file) { forEach(doc, "event", eventNode -> { final StatSet att = new StatSet(parseAttributes(eventNode)); final String name = att.getString("name"); for (Node node = eventNode.getFirstChild(); node != null; node = node.getNextSibling()) { if ("schedule".equals(node.getNodeName())) { final StatSet attributes = new StatSet(parseAttributes(node)); final String pattern = attributes.getString("pattern"); final SchedulingPattern schedulingPattern = new SchedulingPattern(pattern); final StatSet params = new StatSet(); params.set("Name", name); params.set("SchedulingPattern", pattern); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer("Schedule_" + name, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Event " + name + " scheduled at " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } }); } }.load(); } private void loadZones() { for (ZoneType zone : ZoneManager.getInstance().getAllZones(RandomZone.class)) { if ((zone.getName() != null) && zone.getName().toLowerCase().startsWith("random_zone")) { _availableZones.add(zone); LOGGER.info("[RandomZoneEvent] Loaded zone: " + zone.getName() + " (id=" + zone.getId() + ")"); } } LOGGER.info("[RandomZoneEvent] Total random zones loaded: " + _availableZones.size()); } @Override public void onTimerEvent(String event, StatSet params, Npc npc, Player player) { if (event.startsWith("Schedule_")) { eventStart(null); final SchedulingPattern schedulingPattern = new SchedulingPattern(params.getString("SchedulingPattern")); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer(event, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Rescheduled for " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } @Override public boolean eventStart(Player eventMaker) { if (_isActive) { if (eventMaker != null) { eventMaker.sendMessage("RandomZoneEvent already active."); } return false; } if (_availableZones.isEmpty()) { Broadcast.toAllOnlinePlayers("[RandomZoneEvent] No zones configured."); return false; } _isActive = true; Broadcast.toAllOnlinePlayers("⚔️ Random Zone Event has started!"); _eventTask = ThreadPool.schedule(this::activateRandomZone, 5_000); return true; } private void activateRandomZone() { _activeZone = _availableZones.get(new Random().nextInt(_availableZones.size())); _activeZone.setEnabled(true); Broadcast.toAllOnlinePlayers("🔥 Random Zone Event: " + _activeZone.getName() + " is now PvP for " + EVENT_DURATION_MINUTES + " minutes!"); _eventTask = ThreadPool.schedule(this::eventStop, EVENT_DURATION_MINUTES * 60 * 1000L); } @Override public boolean eventStop() { if (!_isActive) { return false; } _isActive = false; if (_eventTask != null) { _eventTask.cancel(true); _eventTask = null; } if (_activeZone != null) { _activeZone.setEnabled(false); Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended. " + _activeZone.getName() + " is back to normal."); _activeZone = null; } else { Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended."); } return true; } @Override public void onEnterZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, true); if (creature.isPlayer()) { creature.sendMessage("Esta zona está en modo PvP temporalmente."); } } } @Override public void onExitZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, false); if (creature.isPlayer()) { creature.sendMessage("Abandonaste la zona PvP temporal."); } } } @Override public boolean eventBypass(Player player, String bypass) { return true; } @Override public String onEvent(String event, Npc npc, Player player) { return super.onEvent(event, npc, player); } @Override public String onFirstTalk(Npc npc, Player player) { return null; } public static void main(String[] args) { new RandomZoneEvent(); } } i have this but its not working
-
ZonePvPSpawnBossRadio=0 ZonePvPSpawnBossBarakiel=0 at the Customs.ini in L2Server folder. Im prety sure this is it because i had the same problem with you in cruma 1 floor for example and i couldn't fix it but i fixed it finally by changing these 2 lines
-
Topics

Question
dasoldier
Hello everyone, i wanted to ask help for a code that returns buffs(cancelled) after a certain amount of time cause i've tried to adapt on latest rev of l2j all existing cancel scripts shared but failed cause
many files removed or codes merged and i cant find a way to do it.
Data Rev:10247
server Rev:6478
First code
open eclipse.
Now go to package explorer.
look into L2J_Datapack and go to data.scripts.handlers.effecthandlers and open Cancel.java
open search
Type: package handlers.skillhandlers;
And paste this under: package handlers.skillhandlers;
import javolution.util.FastList;
import com.l2jserver.gameserver.datatables.SkillTable;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.skills.L2Skill;
then open search
Type: return L2EffectType.CANCEL;
}
And paste under: return L2EffectType.CANCEL;
}
private int seconds = 13;
private void returnbuffs (L2Character player, FastList<L2Effect>list)
{
for (L2Effect e : list)
{
L2Skill skill = SkillTable.getInstance().getInfo(e.getSkill().getId(), e.getLevel());
if(skill != null)
{
skill.getEffects(player, player);
}
}
((L2PcInstance)player).isoncanceltask=false;
}
Then open search
Type: ((L2Npc)activeChar)._spiritshotcharged = false;
}
And remove line under: ((L2Npc)activeChar)._spiritshotcharged = false;
}
L2Character target;
Then open search
Type: if (!(obj instanceof L2Character))
continue;
And remove line under: if (!(obj instanceof L2Character))
continue;
target = (L2Character)obj;
Replace it with: final L2Character target = (L2Character)obj;
Then open search
Type: final L2Effect[] effects = target.getAllEffects();
And paste under: final L2Effect[] effects = target.getAllEffects();
if (target instanceof L2PcInstance)
{
((L2PcInstance)target).clearcancelbuffs();
}
Then open search
Type: lastCanceledSkillId = eff.getSkill().getId();
And paste under: lastCanceledSkillId = eff.getSkill().getId();
if (target instanceof L2PcInstance)
{
((L2PcInstance)target).addcancelbuffs(effect);
}
Then open search
Type: lastCanceledSkillId = eff.getSkill().getId();
And paste under: lastCanceledSkillId = eff.getSkill().getId();
if (target instanceof L2PcInstance)
{
((L2PcInstance)target).addcancelbuffs(effect);
}
Then open search
Type: //Possibility of a lethal strike
Formulas.calcLethalHit(activeChar, target, skill);
And paste under: //Possibility of a lethal strike
Formulas.calcLethalHit(activeChar, target, skill);
if (target instanceof L2PcInstance && ((L2PcInstance)target).getcancelbuffs()!=null && !((L2PcInstance)target).isoncanceltask)
{
((L2PcInstance)target).sendMessage("You will get back your buffs in "+seconds+" seconds.");
ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
{
@Override
public void run()
{
((L2PcInstance)target).isoncanceltask=true;
returnbuffs(target, ((L2PcInstance)target).getcancelbuffs());
}
},seconds * 1000);
}
Second code
Now go to package explorer.
look into com.l2jserver.gameserver.model and open L2Effect.java
Press Ctrl+f to open the search tool.
Type: if (_count == 0 && _icon && getEffected() instanceof L2PcInstance)
{
and press on search.
Remove line under: if (_count == 0 && _icon && getEffected() instanceof L2PcInstance)
{
SystemMessage smsg3 = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_WORN_OFF); smsg3.addSkillName(_skill);
getEffected().sendPacket(smsg3);
and replace with:
if (!((L2PcInstance)getEffected()).isoncanceltask)
{
SystemMessage smsg3 = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_WORN_OFF);
smsg3.addSkillName(_skill);
getEffected().sendPacket(smsg3);
}
Third code
look into L2J_server and go to com.l2jserver.gameserver.model.actor.instance and open L2PcInstance.java
open search
Type: private static final String DELETE_TP_BOOKMARK = "DELETE FROM character_tpbookmark WHERE charId=? AND Id=?";
And paste this under: private static final String DELETE_TP_BOOKMARK = "DELETE FROM character_tpbookmark WHERE charId=? AND Id=?";
//Cancel return back buffs
private FastList<L2Effect> cancelbuffs = new FastList<L2Effect>(); //wyatt
public boolean isoncanceltask = false;
public FastList<L2Effect> getcancelbuffs()
{
return cancelbuffs;
}
public void addcancelbuffs(L2Effect effect)
{
cancelbuffs.add(effect);
}
public void clearcancelbuffs()
{
cancelbuffs.clear();
}
Cancel.java CHANGED DispelByCategory.java
Edited by dasoldierL2Effect CHANGED AbstractEffect
Thnx in advance.
0 answers to this question
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now