Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Nevit's Advent Blessing

Iniciado por Swarlog, Sep 01, 2022, 12:13 AM

Tema anterior - Siguiente tema

Swarlog

Index: java/com/l2jserver/gameserver/model/zone/type/L2PeaceZone.java
===================================================================
--- java/com/l2jserver/gameserver/model/zone/type/L2PeaceZone.java (revision 6515)
+++ 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)
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 (revision 0)
@@ -0,0 +1,292 @@
+/*
+ * 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.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;
+import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerDespawnListener;
+import com.l2jserver.gameserver.scripting.scriptengine.listeners.player.PlayerSpawnListener;
+
+/**
+ * Nevit's Blessing handler.
+ * @author Janiko
+ */
+public class NevitSystem
+{
+ // 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;
+
+ ScheduledFuture<?> _adventTask;
+ private ScheduledFuture<?> _nevitEffectTask;
+
+ public NevitSystem(L2PcInstance player)
+ {
+ _player = player;
+ }
+
+ PlayerSpawnListener spawn = new PlayerSpawnListener()
+ {
+ @Override
+ public void onPlayerLogin(L2PcInstance player)
+ {
+ player.sendPacket(new ExNevitAdventPointInfoPacket(getAdventPoints()));
+ player.sendPacket(new ExNevitAdventTimeChange(getAdventTime(), true));
+
+ Calendar temp = Calendar.getInstance();
+ temp.set(Calendar.HOUR_OF_DAY, 6);
+ temp.set(Calendar.MINUTE, 30);
+ temp.set(Calendar.SECOND, 0);
+ temp.set(Calendar.MILLISECOND, 0);
+
+ // Reset Nevit's Blessing
+ if ((player.getLastAccess() < (temp.getTimeInMillis() / 1000L)) && (System.currentTimeMillis() > temp.getTimeInMillis()))
+ {
+ player.getVariables().set("hunting_time", 0);
+ }
+
+ 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);
+ }
+ }
+ };
+
+ PlayerDespawnListener despawn = new PlayerDespawnListener()
+ {
+ @Override
+ public void onPlayerLogout(L2PcInstance player)
+ {
+ stopNevitEffectTask(true);
+ stopAdventTask(false);
+ }
+ };
+
+ public void addPoints(int val)
+ {
+ 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;
+ }
+ }
+
+ if (getEffectTime() > 0)
+ {
+ setAdventPoints(0);
+ }
+ else
+ {
+ setAdventPoints(getAdventPoints() + val);
+ }
+
+ if (getAdventPoints() > MAX_POINTS)
+ {
+ setAdventPoints(0);
+ startNevitEffect(BONUS_EFFECT_TIME);
+ }
+
+ getPlayer().sendPacket(new ExNevitAdventPointInfoPacket(getAdventPoints()));
+ }
+
+ public void startAdventTask()
+ {
+ 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 void stopAdventTask(boolean sendPacket)
+ {
+ if (_adventTask != null)
+ {
+ _adventTask.cancel(true);
+ _adventTask = null;
+ }
+ if (sendPacket)
+ {
+ getPlayer().sendPacket(new ExNevitAdventTimeChange(getAdventTime(), true));
+ }
+ }
+
+ public 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 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;
+ }
+
+ 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/stat/PcStat.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/stat/PcStat.java (revision 6515)
+++ java/com/l2jserver/gameserver/model/actor/stat/PcStat.java (working copy)
@@ -141,12 +141,22 @@
  double bonusExp = 1.;
  double bonusSp = 1.;
 
+ if (activeChar.getNevitSystem().isAdventBlessingActive())
+ {
+ setVitalityPoints(getVitalityPoints() + 10, false);// increase Vitality During Blessing
+ }
+
  if (useBonuses)
  {
  bonusExp = getExpBonusMultiplier();
  bonusSp = getSpBonusMultiplier();
  }
 
+ if ((addToExp > 0) && !activeChar.isInsideZone(ZoneId.PEACE))
+ {
+ activeChar.getNevitSystem().startAdventTask();
+ }
+
  addToExp *= bonusExp;
  addToSp *= bonusSp;
 
@@ -323,6 +333,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;
  }
@@ -617,8 +629,12 @@
  {
  final byte level;
 
- if (_vitalityPoints <= VITALITY_LEVELS[0])
+ if (getActiveChar().getNevitSystem().isAdventBlessingActive())
  {
+ level = 4;
+ }
+ else if (_vitalityPoints <= VITALITY_LEVELS[0])
+ {
  level = 0;
  }
  else if (_vitalityPoints <= VITALITY_LEVELS[1])
Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 6515)
+++ 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.fishing.L2Fish;
@@ -5462,7 +5463,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
@@ -5902,6 +5903,11 @@
  }
  }
 
+ if (getNevitSystem().isAdventBlessingActive())
+ {
+ lostExp = 0;
+ }
+
  // Set the new Experience value of the L2PcInstance
  getStat().addExp(-lostExp);
  }
@@ -14750,4 +14756,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/network/SystemMessageId.java
===================================================================
--- java/com/l2jserver/gameserver/network/SystemMessageId.java (revision 6515)
+++ java/com/l2jserver/gameserver/network/SystemMessageId.java (working copy)
@@ -15177,6 +15177,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.
  */
@@ -17724,6 +17748,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/network/serverpackets/ExNevitAdventTimeChange.java
===================================================================
--- java/com/l2jserver/gameserver/network/serverpackets/ExNevitAdventTimeChange.java (revision 6515)
+++ 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;
+ _paused = paused;
  }
 
  @Override
Index: java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java (revision 6515)
+++ java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java (working copy)
@@ -68,7 +68,6 @@
 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;
@@ -506,7 +505,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())