Noticias:

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

Menú Principal

PvP Color

Iniciado por Swarlog, Ago 31, 2022, 08:36 PM

Tema anterior - Siguiente tema

Swarlog

CitarCORE:

Index: config/custom.properties
===================================================================
--- config/custom.properties (revision 0)
+++ config/custom.properties (working copy)
@@ -0,0 +1,7 @@
+#=============================================================
+#                       Custom settings
+#=============================================================
+# Enable / disable pvp features
+# Note: pvp_color.xml and pvp_reward.xml are located in "data/xml" folder
+# Default: false
+EnablePvpFeatures = false
\ No newline at end of file
Index: java/net/sf/l2j/Config.java
===================================================================
--- java/net/sf/l2j/Config.java (revision 21)
+++ java/net/sf/l2j/Config.java (working copy)
@@ -43,6 +43,7 @@
  protected static final Logger _log = Logger.getLogger(Config.class.getName());
 
  public static final String CLANS_FILE = "./config/clans.properties";
+ public static final String CUSTOM_FILE = "./config/custom.properties";
  public static final String EVENTS_FILE = "./config/events.properties";
  public static final String GEOENGINE_FILE = "./config/geoengine.properties";
  public static final String HEXID_FILE = "./config/hexid.txt";
@@ -132,6 +133,12 @@
  public static int CH_FRONT2_FEE;
 
  // --------------------------------------------------
+ // Custom settings
+ // --------------------------------------------------
+
+ public static boolean ENABLE_PVP_FEATURES;
+
+ // --------------------------------------------------
  // Events settings
  // --------------------------------------------------
 
@@ -761,6 +768,10 @@
  CH_FRONT1_FEE = clans.getProperty("ClanHallFrontPlatformFunctionFeeLvl1", 3031);
  CH_FRONT2_FEE = clans.getProperty("ClanHallFrontPlatformFunctionFeeLvl2", 9331);
 
+ // Custom settings
+ ExProperties custom = load(CUSTOM_FILE);
+ ENABLE_PVP_FEATURES = custom.getProperty("EnablePvpFeatures", false);
+
  // Events config
  ExProperties events = load(EVENTS_FILE);
  ALT_OLY_START_TIME = events.getProperty("AltOlyStartTime", 18);
Index: java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- java/net/sf/l2j/gameserver/GameServer.java (revision 21)
+++ java/net/sf/l2j/gameserver/GameServer.java (working copy)
@@ -57,6 +57,7 @@
 import net.sf.l2j.gameserver.datatables.NpcTable;
 import net.sf.l2j.gameserver.datatables.NpcWalkerRoutesTable;
 import net.sf.l2j.gameserver.datatables.PetDataTable;
+import net.sf.l2j.gameserver.datatables.PvpFeaturesTable;
 import net.sf.l2j.gameserver.datatables.RecipeTable;
 import net.sf.l2j.gameserver.datatables.ServerMemo;
 import net.sf.l2j.gameserver.datatables.SkillTable;
@@ -200,6 +201,9 @@
  PartyMatchRoomList.getInstance();
  RaidBossPointsManager.getInstance();
 
+ if (Config.ENABLE_PVP_FEATURES)
+ PvpFeaturesTable.getInstance();
+
  StringUtil.printSection("Community server");
  if (Config.ENABLE_COMMUNITY_BOARD) // Forums has to be loaded before clan data
  ForumsBBSManager.getInstance().initRoot();
Index: java/net/sf/l2j/gameserver/datatables/PvpFeaturesTable.java
===================================================================
--- java/net/sf/l2j/gameserver/datatables/PvpFeaturesTable.java (revision 0)
+++ java/net/sf/l2j/gameserver/datatables/PvpFeaturesTable.java (working copy)
@@ -0,0 +1,228 @@
+/*
+ * 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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.datatables;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Logger;
+
+import net.sf.l2j.gameserver.model.holder.IntIntHolder;
+import net.sf.l2j.gameserver.templates.StatsSet;
+import net.sf.l2j.gameserver.xmlfactory.XMLDocumentFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+/**
+ * @author rapfersan92
+ */
+public class PvpFeaturesTable
+{
+ protected static final Logger _log = Logger.getLogger(PvpFeaturesTable.class.getName());
+
+ private static List<PvpColor> _pvpColors;
+ private static List<PvpReward> _pvpRewards;
+
+ public static PvpFeaturesTable getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ private static class SingletonHolder
+ {
+ protected static final PvpFeaturesTable _instance = new PvpFeaturesTable();
+ }
+
+ protected PvpFeaturesTable()
+ {
+ _pvpColors = new ArrayList<>();
+ _pvpRewards = new ArrayList<>();
+ loadPvpColor();
+ loadPvpReward();
+ }
+
+ public void reload()
+ {
+ _pvpColors.clear();
+ _pvpRewards.clear();
+ loadPvpColor();
+ loadPvpReward();
+ }
+
+ private void loadPvpColor()
+ {
+ try
+ {
+ File f = new File("./data/xml/pvp_color.xml");
+ Document doc = XMLDocumentFactory.getInstance().loadDocument(f);
+
+ Node n = doc.getFirstChild();
+ for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
+ {
+ if (d.getNodeName().equalsIgnoreCase("template"))
+ {
+ NamedNodeMap attrs = d.getAttributes();
+ int pvpAmount = Integer.valueOf(attrs.getNamedItem("pvpAmount").getNodeValue());
+ int nameColor = Integer.decode("0x" + attrs.getNamedItem("nameColor").getNodeValue());
+ int titleColor = Integer.decode("0x" + attrs.getNamedItem("titleColor").getNodeValue());
+ String skills = attrs.getNamedItem("skills").getNodeValue();
+
+ StatsSet set = new StatsSet();
+ set.set("pvpAmount", pvpAmount);
+ set.set("nameColor", nameColor);
+ set.set("titleColor", titleColor);
+ set.set("skills", skills);
+
+ _pvpColors.add(new PvpColor(set));
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ _log.warning("Exception: PvpFeaturesTable loadPvpColor: " + e);
+ }
+
+ _log.info("PvpFeaturesTable: Loaded " + _pvpColors.size() + " color's template(s).");
+ }
+
+ private void loadPvpReward()
+ {
+ try
+ {
+ File f = new File("./data/xml/pvp_reward.xml");
+ Document doc = XMLDocumentFactory.getInstance().loadDocument(f);
+
+ Node n = doc.getFirstChild();
+ for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
+ {
+ if (d.getNodeName().equalsIgnoreCase("template"))
+ {
+ NamedNodeMap attrs = d.getAttributes();
+ int itemId = Integer.valueOf(attrs.getNamedItem("itemId").getNodeValue());
+ int itemCount = Integer.valueOf(attrs.getNamedItem("itemCount").getNodeValue());
+ double chance = Double.valueOf(attrs.getNamedItem("chance").getNodeValue());
+
+ StatsSet set = new StatsSet();
+ set.set("itemId", itemId);
+ set.set("itemCount", itemCount);
+ set.set("chance", chance);
+
+ _pvpRewards.add(new PvpReward(set));
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ _log.warning("Exception: PvpFeaturesTable loadPvpReward: " + e);
+ }
+
+ _log.info("PvpFeaturesTable: Loaded " + _pvpRewards.size() + " reward's template(s).");
+ }
+
+ public List<PvpColor> getPvpColorsTable()
+ {
+ return _pvpColors;
+ }
+
+ public List<PvpReward> getPvpRewardsTable()
+ {
+ return _pvpRewards;
+ }
+
+ public class PvpColor
+ {
+ private int _pvpAmount;
+ private int _nameColor;
+ private int _titleColor;
+ private IntIntHolder[] _skillHolder;
+
+ public PvpColor(StatsSet set)
+ {
+ _pvpAmount = set.getInteger("pvpAmount");
+ _nameColor = set.getInteger("nameColor");
+ _titleColor = set.getInteger("titleColor");
+
+ String[] skills = set.getString("skills").split(";");
+ if (skills != null)
+ {
+ _skillHolder = new IntIntHolder[skills.length];
+ int used = 0;
+
+ for (String val : skills)
+ {
+ String[] valSplit = val.split(",");
+ int skillId = Integer.parseInt(valSplit[0]);
+ int skillLevel = Integer.parseInt(valSplit[1]);
+ if (skillId == 0 || skillLevel == 0)
+ continue;
+
+ _skillHolder[used] = new IntIntHolder(skillId, skillLevel);
+ ++used;
+ }
+ }
+ }
+
+ public int getPvpAmount()
+ {
+ return _pvpAmount;
+ }
+
+ public int getNameColor()
+ {
+ return _nameColor;
+ }
+
+ public int getTitleColor()
+ {
+ return _titleColor;
+ }
+
+ public IntIntHolder[] getSkillHolder()
+ {
+ return _skillHolder;
+ }
+ }
+
+ public class PvpReward
+ {
+ private int _itemId;
+ private int _itemCount;
+ private double _chance;
+
+ public PvpReward(StatsSet set)
+ {
+ _itemId = set.getInteger("itemId");
+ _itemCount = set.getInteger("itemCount");
+ _chance = set.getDouble("chance");
+ }
+
+ public int getItemId()
+ {
+ return _itemId;
+ }
+
+ public int getItemCount()
+ {
+ return _itemCount;
+ }
+
+ public double getChance()
+ {
+ return _chance;
+ }
+ }
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (revision 21)
+++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (working copy)
@@ -28,6 +28,7 @@
 import net.sf.l2j.gameserver.datatables.MultisellData;
 import net.sf.l2j.gameserver.datatables.NpcTable;
 import net.sf.l2j.gameserver.datatables.NpcWalkerRoutesTable;
+import net.sf.l2j.gameserver.datatables.PvpFeaturesTable;
 import net.sf.l2j.gameserver.datatables.SkillTable;
 import net.sf.l2j.gameserver.datatables.TeleportLocationTable;
 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
@@ -238,6 +239,11 @@
  NpcWalkerRoutesTable.getInstance().reload();
  activeChar.sendMessage("NPCwalkers' routes have been reloaded.");
  }
+ else if (type.startsWith("pvp"))
+ {
+ PvpFeaturesTable.getInstance().reload();
+ activeChar.sendMessage("Pvp's colors have been reloaded.");
+ }
  else if (type.startsWith("skill"))
  {
  SkillTable.getInstance().reload();
@@ -258,7 +264,7 @@
  {
  activeChar.sendMessage("Usage : //reload <acar|announcement|config|crest|door>");
  activeChar.sendMessage("Usage : //reload <htm|item|multisell|npc|npcwalker>");
- activeChar.sendMessage("Usage : //reload <skill|teleport|zone>");
+ activeChar.sendMessage("Usage : //reload <pvp|skill|teleport|zone>");
  }
  }
  return true;
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 21)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -58,6 +58,9 @@
 import net.sf.l2j.gameserver.datatables.ItemTable;
 import net.sf.l2j.gameserver.datatables.MapRegionTable;
 import net.sf.l2j.gameserver.datatables.PetDataTable;
+import net.sf.l2j.gameserver.datatables.PvpFeaturesTable;
+import net.sf.l2j.gameserver.datatables.PvpFeaturesTable.PvpColor;
+import net.sf.l2j.gameserver.datatables.PvpFeaturesTable.PvpReward;
 import net.sf.l2j.gameserver.datatables.RecipeTable;
 import net.sf.l2j.gameserver.datatables.SkillTable;
 import net.sf.l2j.gameserver.datatables.SkillTable.FrequentSkill;
@@ -2013,6 +2016,9 @@
 
  // Add Death Penalty Buff Level
  restoreDeathPenaltyBuffLevel();
+
+ if (Config.ENABLE_PVP_FEATURES)
+ pvpColor();
  }
 
  /**
@@ -4233,6 +4239,12 @@
  // Add PvP point to attacker.
  setPvpKills(getPvpKills() + 1);
 
+ if (Config.ENABLE_PVP_FEATURES)
+ {
+ pvpColor();
+ pvpReward();
+ }
+
  // Send UserInfo packet to attacker with its Karma and PK Counter
  sendPacket(new UserInfo(this));
  }
@@ -8665,6 +8677,9 @@
 
  revalidateZone(true);
  notifyFriends(true);
+
+ if (Config.ENABLE_PVP_FEATURES)
+ pvpColor();
  }
 
  public long getLastAccess()
@@ -10705,4 +10720,39 @@
  break;
  }
  }
+
+ private void pvpColor()
+ {
+ for (PvpColor pvpFeatures : PvpFeaturesTable.getInstance().getPvpColorsTable())
+ {
+ if (getPvpKills() >= pvpFeatures.getPvpAmount())
+ {
+ getAppearance().setNameColor(pvpFeatures.getNameColor());
+ getAppearance().setTitleColor(pvpFeatures.getTitleColor());
+
+ final IntIntHolder[] skills = pvpFeatures.getSkillHolder();
+ if (skills == null)
+ continue;
+
+ for (IntIntHolder skillHolder : skills)
+ {
+ if (skillHolder == null)
+ continue;
+
+ addSkill(skillHolder.getSkill(), false);
+ }
+ }
+ }
+
+ broadcastUserInfo();
+ }
+
+ private void pvpReward()
+ {
+ for (PvpReward pvpFeatures : PvpFeaturesTable.getInstance().getPvpRewardsTable())
+ {
+ if (Rnd.nextDouble() < pvpFeatures.getChance())
+ addItem("Pvp Reward", pvpFeatures.getItemId(), pvpFeatures.getItemCount(), this, true);
+ }
+ }
 }
\ No newline at end of file

CitarDATA:

Index: data/html/admin/server_menu.htm
===================================================================
--- data/html/admin/server_menu.htm (revision 21)
+++ data/html/admin/server_menu.htm (working copy)
@@ -18,7 +18,7 @@
  Reload
  <table width=240>
  <tr>
- <td><combobox width=120 height=21 var="cb" list=acar;announcement;config;crest;cw;door;htm;item;multisell;npc;npcwalker;skill;teleport;zone;></td>
+ <td><combobox width=120 height=21 var="cb" list=acar;announcement;config;crest;cw;door;htm;item;multisell;npc;npcwalker;pvp;skill;teleport;zone;></td>
  <td><button value="Reload" action="bypass -h admin_reload $cb" width=75 height=21 back="L2UI_ch3.Btn1_normalOn" fore="L2UI_ch3.Btn1_normal"></td>
  </tr>
  </table><br>
Index: data/xml/pvp_color.xml
===================================================================
--- data/xml/pvp_color.xml (revision 0)
+++ data/xml/pvp_color.xml (working copy)
@@ -0,0 +1,12 @@
+<?xml version='1.0' encoding='utf-8'?>
+<list>
+ <!--
+ No limit for templates. If you want to edit or add new templates, do it by copying a line and replacing values.
+ Listed values below are used for examples.
+ -->
+ <template pvpAmount="100" nameColor="FF9900" titleColor="FFFF77" skills="3206,10;"/>
+ <template pvpAmount="200" nameColor="FF99FF" titleColor="FFFF77" skills="3156,1;"/>
+ <template pvpAmount="300" nameColor="00FF00" titleColor="FFFF77" skills="3157,1;"/>
+ <template pvpAmount="400" nameColor="00FFFF" titleColor="FFFF77" skills="3147,1;"/>
+ <template pvpAmount="500" nameColor="FFFF00" titleColor="FFFF77" skills="3158,1;"/>
+</list>
\ No newline at end of file
Index: data/xml/pvp_reward.xml
===================================================================
--- data/xml/pvp_reward.xml (revision 0)
+++ data/xml/pvp_reward.xml (working copy)
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='utf-8'?>
+<list>
+ <!--
+ No limit for templates. If you want to edit or add new templates, do it by copying a line and replacing values.
+ Listed values below are used for examples.
+ -->
+ <template itemId="57" itemCount="1000" chance="0.7"/>
+</list>
\ No newline at end of file