Skip to content

Instantly share code, notes, and snippets.

@Pandragon
Last active January 23, 2016 12:41
Show Gist options
  • Save Pandragon/67caa1831974a142f7ce to your computer and use it in GitHub Desktop.
Save Pandragon/67caa1831974a142f7ce to your computer and use it in GitHub Desktop.
### Eclipse Workspace Patch 1.0
#P L2J_Server_BETA
Index: java/com/l2jserver/gameserver/network/serverpackets/ExNevitAdventTimeChange.java
===================================================================
--- java/com/l2jserver/gameserver/network/serverpackets/ExNevitAdventTimeChange.java (revision 6625)
+++ java/com/l2jserver/gameserver/network/serverpackets/ExNevitAdventTimeChange.java (working copy)
@@ -26,10 +26,10 @@
private final boolean _paused;
private final int _time;
- public ExNevitAdventTimeChange(int time)
+ public ExNevitAdventTimeChange(int time, boolean paused)
{
- _time = time > 240000 ? 240000 : time;
- _paused = _time < 1;
+ _time = (time > 14400) ? 14400 : time;
+ _paused = paused;
}
@Override
Index: java/com/l2jserver/gameserver/network/SystemMessageId.java
===================================================================
--- java/com/l2jserver/gameserver/network/SystemMessageId.java (revision 6625)
+++ java/com/l2jserver/gameserver/network/SystemMessageId.java (working copy)
@@ -15189,6 +15189,30 @@
public static final SystemMessageId YOU_HAVE_S1_MATCHES_REMAINING_THAT_YOU_CAN_PARTECIPATE_IN_THIS_WEEK_S2_CLASSED_S3_NON_CLASSED_S4_TEAM;
/**
+ * The angel Nevit has blessed you from above. You are imbued with full Vitality as well as a Vitality Replenishing effect. And should you die, you will not lose Exp! Nevit's Advent Blessing is Upon You!
+ */
+ public static final SystemMessageId THE_ANGEL_NEVIT_HAS_BLESSED_YOU_FROM_ABOVE;
+ /**
+ * You are starting to feel the effects of Nevit's Advent Blessing.
+ */
+ public static final SystemMessageId YOU_ARE_STARTING_TO_FEEL_THE_EFFECTS_OF_NEVITS_ADVENT_BLESSING;
+
+ /**
+ * You are further infused with the blessings of Nevit! Continue to battle evil wherever it may lurk.
+ */
+ public static final SystemMessageId YOU_ARE_FURTHER_INFUSED_WITH_THE_BLESSINGS_OF_NEVIT;
+
+ /**
+ * Nevit's Advent Blessing shines strongly from above. You can almost see his divine aura.
+ */
+ public static final SystemMessageId NEVITS_ADVENT_BLESSING_SHINES_STRONGLY_FROM_ABOVE;
+
+ /**
+ * Nevit's Advent Blessing has ended. Continue your journey and you will surely meet his favor again sometime soon.
+ */
+ public static final SystemMessageId NEVITS_ADVENT_BLESSING_HAS_ENDED;
+
+ /**
* ID: 6004<br>
* Message: Enchant failed. The enchant level for the corresponding item will be exactly retained.
*/
@@ -17738,6 +17762,11 @@
MP_BECAME_0_ARCANE_SHIELD_DISAPPEARING = new SystemMessageId(3256);
CANNOT_USE_SKILL_WITHOUT_SERVITOR = new SystemMessageId(3260);
YOU_HAVE_S1_MATCHES_REMAINING_THAT_YOU_CAN_PARTECIPATE_IN_THIS_WEEK_S2_CLASSED_S3_NON_CLASSED_S4_TEAM = new SystemMessageId(3261);
+ THE_ANGEL_NEVIT_HAS_BLESSED_YOU_FROM_ABOVE = new SystemMessageId(3266);
+ YOU_ARE_STARTING_TO_FEEL_THE_EFFECTS_OF_NEVITS_ADVENT_BLESSING = new SystemMessageId(3267);
+ YOU_ARE_FURTHER_INFUSED_WITH_THE_BLESSINGS_OF_NEVIT = new SystemMessageId(3268);
+ NEVITS_ADVENT_BLESSING_SHINES_STRONGLY_FROM_ABOVE = new SystemMessageId(3269);
+ NEVITS_ADVENT_BLESSING_HAS_ENDED = new SystemMessageId(3275);
SAFE_ENCHANT_FAILED = new SystemMessageId(6004);
YOU_CANNOT_BOOKMARK_THIS_LOCATION_BECAUSE_YOU_DO_NOT_HAVE_A_MY_TELEPORT_FLAG = new SystemMessageId(6501);
THOMAS_D_TURKEY_APPEARED = new SystemMessageId(6503);
Index: java/com/l2jserver/gameserver/model/entity/NevitSystem.java
===================================================================
--- java/com/l2jserver/gameserver/model/entity/NevitSystem.java (revision 0)
+++ java/com/l2jserver/gameserver/model/entity/NevitSystem.java (working copy)
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2004-2014 L2J Server
+ *
+ * This file is part of L2J Server.
+ *
+ * L2J Server 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * L2J Server 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, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.model.entity;
+
+import java.util.Calendar;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
+
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.events.EventType;
+import com.l2jserver.gameserver.model.events.annotations.RegisterEvent;
+import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerLogin;
+import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerLogout;
+import com.l2jserver.gameserver.model.events.listeners.ConsumerEventListener;
+import com.l2jserver.gameserver.model.interfaces.IUniqueId;
+import com.l2jserver.gameserver.model.skills.AbnormalVisualEffect;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ExNevitAdventEffect;
+import com.l2jserver.gameserver.network.serverpackets.ExNevitAdventPointInfoPacket;
+import com.l2jserver.gameserver.network.serverpackets.ExNevitAdventTimeChange;
+
+/**
+ * Nevit's Blessing handler.
+ * @author Janiko
+ */
+public class NevitSystem implements IUniqueId
+{
+ // Timers
+ private static final int MAX_POINTS = 7200;
+ private static final int BONUS_EFFECT_TIME = 180;
+
+ // Nevit Hour
+ private static final int ADVENT_TIME = 14400;
+ public final L2PcInstance _player;
+
+ private volatile ScheduledFuture<?> _adventTask;
+ private volatile ScheduledFuture<?> _nevitEffectTask;
+
+ public NevitSystem(L2PcInstance player)
+ {
+ _player = player;
+
+ player.addListener(new ConsumerEventListener(player, EventType.ON_PLAYER_LOGIN, (OnPlayerLogin event) -> onPlayerLogin(event), this));
+ player.addListener(new ConsumerEventListener(player, EventType.ON_PLAYER_LOGOUT, (OnPlayerLogout event) -> OnPlayerLogout(event), this));
+ }
+
+ @RegisterEvent(EventType.ON_PLAYER_LOGIN)
+ private void onPlayerLogin(OnPlayerLogin event)
+ {
+ final Calendar cal = Calendar.getInstance();
+ cal.set(Calendar.HOUR_OF_DAY, 6);
+ cal.set(Calendar.MINUTE, 30);
+ cal.set(Calendar.SECOND, 0);
+ cal.set(Calendar.MILLISECOND, 0);
+
+ // Reset Nevit's Blessing
+ if ((_player.getLastAccess() < (cal.getTimeInMillis() / 1000L)) && (System.currentTimeMillis() > cal.getTimeInMillis()))
+ {
+ _player.getVariables().set("hunting_time", 0);
+ }
+
+ // Send Packets
+ _player.sendPacket(new ExNevitAdventPointInfoPacket(getAdventPoints()));
+ _player.sendPacket(new ExNevitAdventTimeChange(getAdventTime(), true));
+
+ startNevitEffect(_player.getVariables().getInt("nevit_b", 0));
+
+ // Set percent
+ int percent = calcPercent(_player.getVariables().getInt("hunting_points", 0));
+
+ if ((percent >= 45) && (percent < 50))
+ {
+ _player.sendPacket(SystemMessageId.YOU_ARE_STARTING_TO_FEEL_THE_EFFECTS_OF_NEVITS_ADVENT_BLESSING);
+ }
+ else if ((percent >= 50) && (percent < 75))
+ {
+ _player.sendPacket(SystemMessageId.YOU_ARE_FURTHER_INFUSED_WITH_THE_BLESSINGS_OF_NEVIT);
+ }
+ else if (percent >= 75)
+ {
+ _player.sendPacket(SystemMessageId.NEVITS_ADVENT_BLESSING_SHINES_STRONGLY_FROM_ABOVE);
+ }
+ }
+
+ @RegisterEvent(EventType.ON_PLAYER_LOGOUT)
+ private void OnPlayerLogout(OnPlayerLogout event)
+ {
+ stopNevitEffectTask(true);
+ stopAdventTask(false);
+ }
+
+ public void addPoints(int val)
+ {
+ if (getEffectTime() > 0)
+ {
+ setAdventPoints(0);
+ }
+ else
+ {
+ setAdventPoints(getAdventPoints() + val);
+ }
+
+ if (getAdventPoints() > MAX_POINTS)
+ {
+ setAdventPoints(0);
+ startNevitEffect(BONUS_EFFECT_TIME);
+ }
+
+ int percent = calcPercent(getAdventPoints());
+ switch (percent)
+ {
+ case 45:
+ {
+ getPlayer().sendPacket(SystemMessageId.YOU_ARE_STARTING_TO_FEEL_THE_EFFECTS_OF_NEVITS_ADVENT_BLESSING);
+ break;
+ }
+ case 50:
+ {
+ getPlayer().sendPacket(SystemMessageId.YOU_ARE_FURTHER_INFUSED_WITH_THE_BLESSINGS_OF_NEVIT);
+ break;
+ }
+ case 75:
+ {
+ getPlayer().sendPacket(SystemMessageId.NEVITS_ADVENT_BLESSING_SHINES_STRONGLY_FROM_ABOVE);
+ break;
+ }
+ }
+
+ getPlayer().sendPacket(new ExNevitAdventPointInfoPacket(getAdventPoints()));
+ }
+
+ public void startAdventTask()
+ {
+ if (_adventTask == null)
+ {
+ synchronized (this)
+ {
+ if ((_adventTask == null) && (getAdventTime() < ADVENT_TIME))
+ {
+ _adventTask = ThreadPoolManager.getInstance().scheduleGeneral(new AdventTask(), 30000);
+ getPlayer().sendPacket(new ExNevitAdventTimeChange(getAdventTime(), false));
+ }
+ }
+ }
+ }
+
+ public class AdventTask implements Runnable
+ {
+ @Override
+ public void run()
+ {
+ setAdventTime(getAdventTime() + 30);
+ if (getAdventTime() >= ADVENT_TIME)
+ {
+ setAdventTime(ADVENT_TIME);
+ stopAdventTask(true);
+ }
+ else
+ {
+ addPoints(72);
+ if ((getAdventTime() % 60) == 0)
+ {
+ getPlayer().sendPacket(new ExNevitAdventTimeChange(getAdventTime(), false));
+ }
+ }
+ stopAdventTask(false);
+ }
+ }
+
+ public synchronized void stopAdventTask(boolean sendPacket)
+ {
+ if (_adventTask != null)
+ {
+ _adventTask.cancel(true);
+ _adventTask = null;
+ }
+ if (sendPacket)
+ {
+ getPlayer().sendPacket(new ExNevitAdventTimeChange(getAdventTime(), true));
+ }
+ }
+
+ public synchronized void startNevitEffect(int time)
+ {
+ if (getEffectTime() > 0)
+ {
+ stopNevitEffectTask(false);
+ time += getEffectTime();
+ }
+ if ((getAdventTime() < ADVENT_TIME) && (time > 0))
+ {
+ getPlayer().getVariables().set("nevit_b", time);
+ getPlayer().sendPacket(new ExNevitAdventEffect(time));
+ getPlayer().sendPacket(SystemMessageId.THE_ANGEL_NEVIT_HAS_BLESSED_YOU_FROM_ABOVE);
+ getPlayer().startAbnormalVisualEffect(true, AbnormalVisualEffect.NAVIT_ADVENT);
+ _nevitEffectTask = ThreadPoolManager.getInstance().scheduleGeneral(new NevitEffectEnd(), time * 1000L);
+ }
+ }
+
+ public class NevitEffectEnd implements Runnable
+ {
+ @Override
+ public void run()
+ {
+ getPlayer().getVariables().remove("nevit_b");
+ getPlayer().sendPacket(new ExNevitAdventEffect(0));
+ getPlayer().sendPacket(new ExNevitAdventPointInfoPacket(getAdventPoints()));
+ getPlayer().sendPacket(SystemMessageId.NEVITS_ADVENT_BLESSING_HAS_ENDED);
+ getPlayer().stopAbnormalVisualEffect(true, AbnormalVisualEffect.NAVIT_ADVENT);
+ stopNevitEffectTask(false);
+ }
+ }
+
+ public synchronized void stopNevitEffectTask(boolean saveTime)
+ {
+ if (_nevitEffectTask != null)
+ {
+ if (saveTime)
+ {
+ int time = getEffectTime();
+ if (time > 0)
+ {
+ getPlayer().getVariables().set("nevit_b", time);
+ }
+ else
+ {
+ getPlayer().getVariables().remove("nevit_b");
+ }
+ }
+ _nevitEffectTask.cancel(true);
+ _nevitEffectTask = null;
+ }
+ }
+
+ public L2PcInstance getPlayer()
+ {
+ return _player;
+ }
+
+ @Override
+ public int getObjectId()
+ {
+ return _player.getObjectId();
+ }
+
+ private int getEffectTime()
+ {
+ if (_nevitEffectTask == null)
+ {
+ return 0;
+ }
+ return (int) Math.max(0, _nevitEffectTask.getDelay(TimeUnit.SECONDS));
+ }
+
+ public boolean isAdventBlessingActive()
+ {
+ return ((_nevitEffectTask != null) && (_nevitEffectTask.getDelay(TimeUnit.MILLISECONDS) > 0));
+ }
+
+ public static int calcPercent(int points)
+ {
+ return (int) ((100.0D / MAX_POINTS) * points);
+ }
+
+ public void setAdventPoints(int points)
+ {
+ getPlayer().getVariables().set("hunting_points", points);
+ }
+
+ public void setAdventTime(int time)
+ {
+ getPlayer().getVariables().set("hunting_time", time);
+ }
+
+ public int getAdventPoints()
+ {
+ return getPlayer().getVariables().getInt("hunting_points", 0);
+ }
+
+ public int getAdventTime()
+ {
+ return getPlayer().getVariables().getInt("hunting_time", 0);
+ }
+}
\ No newline at end of file
Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 6625)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -198,6 +198,7 @@
import com.l2jserver.gameserver.model.entity.Hero;
import com.l2jserver.gameserver.model.entity.Instance;
import com.l2jserver.gameserver.model.entity.L2Event;
+import com.l2jserver.gameserver.model.entity.NevitSystem;
import com.l2jserver.gameserver.model.entity.Siege;
import com.l2jserver.gameserver.model.entity.TvTEvent;
import com.l2jserver.gameserver.model.events.EventDispatcher;
@@ -5380,7 +5381,7 @@
if (Config.ALT_GAME_DELEVEL)
{
// If player is Lucky shouldn't get penalized.
- if (!isLucky())
+ if (!isLucky() && !getNevitSystem().isAdventBlessingActive())
{
// Reduce the Experience of the L2PcInstance in function of the calculated Death Penalty
// NOTE: deathPenalty +- Exp will update karma
@@ -5820,6 +5821,11 @@
}
}
+ if (getNevitSystem().isAdventBlessingActive())
+ {
+ lostExp = 0;
+ }
+
// Set the new Experience value of the L2PcInstance
getStat().addExp(-lostExp);
}
@@ -14485,4 +14491,12 @@
{
return (_actionMask & act.getMask()) == act.getMask();
}
+
+ // High Five: Nevit's Bonus System
+ private final NevitSystem _nevitSystem = new NevitSystem(this);
+
+ public NevitSystem getNevitSystem()
+ {
+ return _nevitSystem;
+ }
}
\ No newline at end of file
Index: java/com/l2jserver/gameserver/taskmanager/tasks/TaskNevit.java
===================================================================
--- java/com/l2jserver/gameserver/taskmanager/tasks/TaskNevit.java (revision 0)
+++ java/com/l2jserver/gameserver/taskmanager/tasks/TaskNevit.java (working copy)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2004-2014 L2J Server
+ *
+ * This file is part of L2J Server.
+ *
+ * L2J Server 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * L2J Server 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, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.taskmanager.tasks;
+
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.ExNevitAdventTimeChange;
+import com.l2jserver.gameserver.taskmanager.Task;
+import com.l2jserver.gameserver.taskmanager.TaskManager;
+import com.l2jserver.gameserver.taskmanager.TaskManager.ExecutedTask;
+import com.l2jserver.gameserver.taskmanager.TaskTypes;
+
+/**
+ * @author Janiko
+ */
+public class TaskNevit extends Task
+{
+ private static final String NAME = "nevit_system";
+
+ @Override
+ public String getName()
+ {
+ return NAME;
+ }
+
+ @Override
+ public void onTimeElapsed(ExecutedTask task)
+ {
+ for (L2PcInstance player : L2World.getInstance().getPlayers())
+ {
+ if ((player == null) || !player.isOnline())
+ {
+ continue;
+ }
+
+ player.getVariables().set("hunting_time", 0);
+ player.sendPacket(new ExNevitAdventTimeChange(0, true));
+ }
+ _log.info("Nevit system reseted.");
+ }
+
+ @Override
+ public void initializate()
+ {
+ super.initializate();
+ TaskManager.addUniqueTask(NAME, TaskTypes.TYPE_GLOBAL_TASK, "1", "06:30:00", "");
+ }
+}
Index: java/com/l2jserver/gameserver/model/actor/stat/PcStat.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/stat/PcStat.java (revision 6625)
+++ java/com/l2jserver/gameserver/model/actor/stat/PcStat.java (working copy)
@@ -136,6 +136,11 @@
bonusSp = getSpBonusMultiplier();
}
+ if ((addToExp > 0) && !activeChar.isInsideZone(ZoneId.PEACE))
+ {
+ activeChar.getNevitSystem().startAdventTask();
+ }
+
addToExp *= bonusExp;
addToSp *= bonusSp;
@@ -320,6 +325,8 @@
getActiveChar().sendPacket(new UserInfo(getActiveChar()));
getActiveChar().sendPacket(new ExBrExtraUserInfo(getActiveChar()));
getActiveChar().sendPacket(new ExVoteSystemInfo(getActiveChar()));
+ // Nevit Points For Level
+ getActiveChar().getNevitSystem().addPoints(2000);
return levelIncreased;
}
@@ -742,6 +749,11 @@
{
int stat = (int) calcStat(Stats.VITALITY_CONSUME_RATE, 1, getActiveChar(), null);
+ if (getActiveChar().getNevitSystem().isAdventBlessingActive())
+ {
+ stat = -10; // increase Vitality During Blessing
+ }
+
if (stat == 0)
{
return;
@@ -813,6 +825,10 @@
*/
public byte getVitalityLevel()
{
+ if (getActiveChar().getNevitSystem().isAdventBlessingActive())
+ {
+ return 4;
+ }
return _vitalityLevel;
}
Index: java/com/l2jserver/gameserver/taskmanager/TaskManager.java
===================================================================
--- java/com/l2jserver/gameserver/taskmanager/TaskManager.java (revision 6625)
+++ java/com/l2jserver/gameserver/taskmanager/TaskManager.java (working copy)
@@ -46,6 +46,7 @@
import com.l2jserver.gameserver.taskmanager.tasks.TaskDailySkillReuseClean;
import com.l2jserver.gameserver.taskmanager.tasks.TaskGlobalVariablesSave;
import com.l2jserver.gameserver.taskmanager.tasks.TaskJython;
+import com.l2jserver.gameserver.taskmanager.tasks.TaskNevit;
import com.l2jserver.gameserver.taskmanager.tasks.TaskOlympiadSave;
import com.l2jserver.gameserver.taskmanager.tasks.TaskRaidPointsReset;
import com.l2jserver.gameserver.taskmanager.tasks.TaskRecom;
@@ -192,6 +193,7 @@
registerTask(new TaskDailySkillReuseClean());
registerTask(new TaskGlobalVariablesSave());
registerTask(new TaskJython());
+ registerTask(new TaskNevit());
registerTask(new TaskOlympiadSave());
registerTask(new TaskRaidPointsReset());
registerTask(new TaskRecom());
Index: java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java (revision 6625)
+++ java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java (working copy)
@@ -68,8 +68,6 @@
import com.l2jserver.gameserver.network.serverpackets.EtcStatusUpdate;
import com.l2jserver.gameserver.network.serverpackets.ExBasicActionList;
import com.l2jserver.gameserver.network.serverpackets.ExGetBookMarkInfoPacket;
-import com.l2jserver.gameserver.network.serverpackets.ExNevitAdventPointInfoPacket;
-import com.l2jserver.gameserver.network.serverpackets.ExNevitAdventTimeChange;
import com.l2jserver.gameserver.network.serverpackets.ExNoticePostArrived;
import com.l2jserver.gameserver.network.serverpackets.ExNotifyPremiumItem;
import com.l2jserver.gameserver.network.serverpackets.ExShowContactList;
@@ -488,8 +486,6 @@
sendPacket(new SkillCoolTime(activeChar));
sendPacket(new ExVoteSystemInfo(activeChar));
- sendPacket(new ExNevitAdventPointInfoPacket(0));
- sendPacket(new ExNevitAdventTimeChange(-1)); // only set pause state...
sendPacket(new ExShowContactList(activeChar));
for (L2ItemInstance i : activeChar.getInventory().getItems())
Index: java/com/l2jserver/gameserver/model/zone/type/L2PeaceZone.java
===================================================================
--- java/com/l2jserver/gameserver/model/zone/type/L2PeaceZone.java (revision 6625)
+++ java/com/l2jserver/gameserver/model/zone/type/L2PeaceZone.java (working copy)
@@ -53,6 +53,9 @@
{
return;
}
+
+ /* Nevit Turn Off on Peace Zone */
+ player.getNevitSystem().stopAdventTask(true);
}
if (Config.PEACE_ZONE_MODE != 2)
@maneco2
Copy link

maneco2 commented Mar 20, 2015

Update please dont works on Master Branch L2J Server

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment