Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Quake PvP System

Iniciado por Swarlog, Jun 28, 2025, 11:42 PM

Tema anterior - Siguiente tema

Swarlog

Index: D:/Other/WorkSpace/l2jbg/L2J_Server/java/com/l2jserver/Config.java
===================================================================
--- D:/Other/WorkSpace/l2jbg/L2J_Server/java/com/l2jserver/Config.java	(revision 4957)
+++ D:/Other/WorkSpace/l2jbg/L2J_Server/java/com/l2jserver/Config.java	(working copy)
@@ -41,6 +41,8 @@
 
 import javax.xml.parsers.DocumentBuilderFactory;
 
+import javolution.util.FastList;
+
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -84,8 +86,8 @@
 	public static final String SECURITY_CONFIG_FILE = "./config/security.properties";
 	public static final String EMAIL_CONFIG_FILE = "./config/email.properties";
 	public static final String CH_SIEGE_FILE = "./config/ConquerableHallSiege.properties";
+	public static final String QUAKEPVP_CONFIG_FILE = "./config/QuakePvPReward.properties";
 	
-	
 	//--------------------------------------------------
 	// L2J Variable Definitions
 	//--------------------------------------------------
@@ -1060,6 +1062,20 @@
 	public static int SOD_TIAT_KILL_COUNT;
 	public static long SOD_STAGE_2_LENGTH;
 	
+	// Quake PvP Reward System by (Micr0)
+	public static boolean ALLOW_QUAKE_PVP;
+	public static boolean ALLOW_QUAKE_PVP_SET_HERO;
+	public static boolean ALLOW_QUAKE_PVP_REWARD_SKILL;
+	public static List<int[]> QUAKE_REWARD_1 = new FastList<int[]>();
+	public static List<int[]> QUAKE_REWARD_2 = new FastList<int[]>();
+	public static List<int[]> QUAKE_REWARD_3 = new FastList<int[]>();
+	public static List<int[]> QUAKE_REWARD_5 = new FastList<int[]>();
+	public static List<int[]> QUAKE_REWARD_10 = new FastList<int[]>();
+	public static List<int[]> QUAKE_REWARD_15 = new FastList<int[]>();
+	public static List<int[]> QUAKE_REWARD_25 = new FastList<int[]>();
+	public static List<int[]> QUAKE_REWARD_SKILL = new FastList<int[]>();
+	
+	
 	//chatfilter
 	public static ArrayList<String>	FILTER_LIST;
 	
@@ -2859,6 +2875,294 @@
 				
 				try
 				{
+					L2Properties QuakeSettings = new L2Properties();
+					is = new FileInputStream(new File(QUAKEPVP_CONFIG_FILE));
+					QuakeSettings.load(is);
+					
+					ALLOW_QUAKE_PVP = Boolean.parseBoolean(QuakeSettings.getProperty("AllowQuakeSystem", "false"));
+					ALLOW_QUAKE_PVP_SET_HERO = Boolean.parseBoolean(QuakeSettings.getProperty("EnableSetHero", "false"));
+					ALLOW_QUAKE_PVP_REWARD_SKILL = Boolean.parseBoolean(QuakeSettings.getProperty("EnableRewardSkills", "false"));
+					
+					// reward 1
+					if (ALLOW_QUAKE_PVP)
+					{
+						String[] propertySplit = QuakeSettings.getProperty("PvPQuakeReward1", "0,0").split(";");
+						for (String rewarditem1 : propertySplit)
+						{
+							String[] reward1Split = rewarditem1.split(",");
+							if (reward1Split.length != 2)
+							{
+								ALLOW_QUAKE_PVP = false;
+								System.out.println("RewardItem1[Config.load()]: invalid config property -> Reward items \"" + rewarditem1 + "\"");
+							}
+							else
+							{
+								try
+								{
+									QUAKE_REWARD_1.add(new int[]
+									{
+										Integer.valueOf(reward1Split[0]), Integer.valueOf(reward1Split[1])
+									});
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!rewarditem1.equals(""))
+									{
+										ALLOW_QUAKE_PVP = false;
+										System.out.println("RewardItem1[Config.load()]: invalid config property -> Reward items \"" + rewarditem1 + "\"");
+									}
+								}
+							}
+						}
+					}
+					// end reward 1
+					
+					// reward 2
+					if (ALLOW_QUAKE_PVP)
+					{
+						String[] propertySplit = QuakeSettings.getProperty("PvPQuakeReward2", "0,0").split(";");
+						for (String rewarditem2 : propertySplit)
+						{
+							String[] reward2Split = rewarditem2.split(",");
+							if (reward2Split.length != 2)
+							{
+								ALLOW_QUAKE_PVP = false;
+								System.out.println("RewardItem2[Config.load()]: invalid config property -> Reward items \"" + rewarditem2 + "\"");
+							}
+							else
+							{
+								try
+								{
+									QUAKE_REWARD_2.add(new int[]
+									{
+										Integer.valueOf(reward2Split[0]), Integer.valueOf(reward2Split[1])
+									});
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!rewarditem2.equals(""))
+									{
+										ALLOW_QUAKE_PVP = false;
+										System.out.println("RewardItem2[Config.load()]: invalid config property -> Reward items \"" + rewarditem2 + "\"");
+									}
+								}
+							}
+						}
+					}
+					// end reward 2
+					
+					// reward 3
+					if (ALLOW_QUAKE_PVP)
+					{
+						String[] propertySplit = QuakeSettings.getProperty("PvPQuakeReward3", "0,0").split(";");
+						for (String rewarditem3 : propertySplit)
+						{
+							String[] reward3Split = rewarditem3.split(",");
+							if (reward3Split.length != 2)
+							{
+								ALLOW_QUAKE_PVP = false;
+								System.out.println("RewardItem3[Config.load()]: invalid config property -> Reward items \"" + rewarditem3 + "\"");
+							}
+							else
+							{
+								try
+								{
+									QUAKE_REWARD_3.add(new int[]
+									{
+										Integer.valueOf(reward3Split[0]), Integer.valueOf(reward3Split[1])
+									});
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!rewarditem3.equals(""))
+									{
+										ALLOW_QUAKE_PVP = false;
+										System.out.println("RewardItem3[Config.load()]: invalid config property -> Reward items \"" + rewarditem3 + "\"");
+									}
+								}
+							}
+						}
+					}
+					// end reward 3
+					
+					// reward 5
+					if (ALLOW_QUAKE_PVP)
+					{
+						String[] propertySplit = QuakeSettings.getProperty("PvPQuakeReward5", "0,0").split(";");
+						for (String rewarditem5 : propertySplit)
+						{
+							String[] reward5Split = rewarditem5.split(",");
+							if (reward5Split.length != 2)
+							{
+								ALLOW_QUAKE_PVP = false;
+								System.out.println("RewardItem5[Config.load()]: invalid config property -> Reward items \"" + rewarditem5 + "\"");
+							}
+							else
+							{
+								try
+								{
+									QUAKE_REWARD_5.add(new int[]
+									{
+										Integer.valueOf(reward5Split[0]), Integer.valueOf(reward5Split[1])
+									});
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!rewarditem5.equals(""))
+									{
+										ALLOW_QUAKE_PVP = false;
+										System.out.println("RewardItem5[Config.load()]: invalid config property -> Reward items \"" + rewarditem5 + "\"");
+									}
+								}
+							}
+						}
+					}
+					// end reward 5
+					
+					// reward 10
+					if (ALLOW_QUAKE_PVP)
+					{
+						String[] propertySplit = QuakeSettings.getProperty("PvPQuakeReward10", "0,0").split(";");
+						for (String rewarditem10 : propertySplit)
+						{
+							String[] reward10Split = rewarditem10.split(",");
+							if (reward10Split.length != 2)
+							{
+								ALLOW_QUAKE_PVP = false;
+								System.out.println("RewardItem10[Config.load()]: invalid config property -> Reward items \"" + rewarditem10 + "\"");
+							}
+							else
+							{
+								try
+								{
+									QUAKE_REWARD_10.add(new int[]
+									{
+										Integer.valueOf(reward10Split[0]), Integer.valueOf(reward10Split[1])
+									});
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!rewarditem10.equals(""))
+									{
+										ALLOW_QUAKE_PVP = false;
+										System.out.println("RewardItem10[Config.load()]: invalid config property -> Reward items \"" + rewarditem10 + "\"");
+									}
+								}
+							}
+						}
+					}
+					// end reward 10
+					
+					// reward 15
+					if (ALLOW_QUAKE_PVP)
+					{
+						String[] propertySplit = QuakeSettings.getProperty("PvPQuakeReward15", "0,0").split(";");
+						for (String rewarditem15 : propertySplit)
+						{
+							String[] reward15Split = rewarditem15.split(",");
+							if (reward15Split.length != 2)
+							{
+								ALLOW_QUAKE_PVP = false;
+								System.out.println("RewardItem15[Config.load()]: invalid config property -> Reward items \"" + rewarditem15 + "\"");
+							}
+							else
+							{
+								try
+								{
+									QUAKE_REWARD_15.add(new int[]
+									{
+										Integer.valueOf(reward15Split[0]), Integer.valueOf(reward15Split[1])
+									});
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!rewarditem15.equals(""))
+									{
+										ALLOW_QUAKE_PVP = false;
+										System.out.println("RewardItem15[Config.load()]: invalid config property -> Reward items \"" + rewarditem15 + "\"");
+									}
+								}
+							}
+						}
+					}
+					// end reward 15
+					
+					// reward 25
+					if (ALLOW_QUAKE_PVP)
+					{
+						String[] propertySplit = QuakeSettings.getProperty("PvPQuakeReward25", "0,0").split(";");
+						for (String rewarditem25 : propertySplit)
+						{
+							String[] reward25Split = rewarditem25.split(",");
+							if (reward25Split.length != 2)
+							{
+								ALLOW_QUAKE_PVP = false;
+								System.out.println("RewardItems25[Config.load()]: invalid config property -> Reward items \"" + rewarditem25 + "\"");
+							}
+							else
+							{
+								try
+								{
+									QUAKE_REWARD_25.add(new int[]
+									{
+										Integer.valueOf(reward25Split[0]), Integer.valueOf(reward25Split[1])
+									});
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!rewarditem25.equals(""))
+									{
+										ALLOW_QUAKE_PVP = false;
+										System.out.println("RewardItem25[Config.load()]: invalid config property -> Reward items \"" + rewarditem25 + "\"");
+									}
+								}
+							}
+						}
+					}
+					// end reward 25
+					
+					// reward Skill
+					if (ALLOW_QUAKE_PVP)
+					{
+						String[] propertySplit = QuakeSettings.getProperty("PvPQuakeRewardSkills", "0,0,0,0").split(";");
+						for (String rewardskills : propertySplit)
+						{
+							String[] rewardskillsSplit = rewardskills.split(",");
+							if (rewardskillsSplit.length != 4)
+							{
+								ALLOW_QUAKE_PVP = false;
+								System.out.println("RewardSkill[Config.load()]: invalid config property -> Reward Skills \"" + rewardskills + "\"");
+							}
+							else
+							{
+								try
+								{
+									QUAKE_REWARD_SKILL.add(new int[]
+									{
+										Integer.valueOf(rewardskillsSplit[0]), Integer.valueOf(rewardskillsSplit[1]), Integer.valueOf(rewardskillsSplit[2]), Integer.valueOf(rewardskillsSplit[3])
+									});
+								}
+								catch (NumberFormatException nfe)
+								{
+									if (!rewardskills.equals(""))
+									{
+										ALLOW_QUAKE_PVP = false;
+										System.out.println("RewardSkills[Config.load()]: invalid config property -> Reward Skills \"" + rewardskills + "\"");
+									}
+								}
+							}
+						}
+					}
+					// End reward Skill
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+					throw new Error("Failed to Load " + QUAKEPVP_CONFIG_FILE + " File.");
+				}
+				
+				try
+				{
 					FILTER_LIST = new ArrayList<String>();
 					LineNumberReader lnr = new LineNumberReader(new BufferedReader(new FileReader(new File(CHAT_FILTER_FILE))));
 					String line = null;
Index: D:/Other/WorkSpace/l2jbg/L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- D:/Other/WorkSpace/l2jbg/L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java	(revision 4957)
+++ D:/Other/WorkSpace/l2jbg/L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -197,6 +197,7 @@
 import com.l2jserver.gameserver.network.serverpackets.ExOlympiadMode;
 import com.l2jserver.gameserver.network.serverpackets.ExPrivateStoreSetWholeMsg;
 import com.l2jserver.gameserver.network.serverpackets.ExSetCompassZoneCode;
+import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
 import com.l2jserver.gameserver.network.serverpackets.ExSpawnEmitter;
 import com.l2jserver.gameserver.network.serverpackets.ExStartScenePlayer;
 import com.l2jserver.gameserver.network.serverpackets.ExStorageMaxCount;
@@ -571,6 +572,9 @@
 	private boolean _noble = false;
 	private boolean _hero = false;
 	
+	/**PvP Quake Reward System (Micr0)*/
+	private int QuakePvPSystem = 0;
+	
 	/** The L2FolkInstance corresponding to the last Folk wich one the player talked. */
 	private L2Npc _lastFolkNpc = null;
 	
@@ -5505,6 +5509,7 @@
 		{
 			reviveRequest(this, null, false);
 		}
+		QuakePvPSystem = 0;
 		return true;
 	}
 	
@@ -5692,17 +5697,132 @@
 	
 	/**
 	 * Increase the pvp kills count and send the info to the player
-	 * @param target 
+	 * 
+	 * @param target
 	 */
 	public void increasePvpKills(L2Character target)
 	{
 		if (target instanceof L2PcInstance
-				&& AntiFeedManager.getInstance().check(this, target))
+			&& AntiFeedManager.getInstance().check(this, target))
 		{
 			// Add karma to attacker and increase its PK counter
 			setPvpKills(getPvpKills() + 1);
 			
-			// Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
+			if (Config.ALLOW_QUAKE_PVP)
+			{
+				QuakePvPSystem++;
+				switch (QuakePvPSystem)
+				{
+					case 1:
+						for (int[] reward1 : Config.QUAKE_REWARD_1)
+						{
+							addItem("Loot", reward1[0], reward1[1], this, true);
+						}
+						PlaySound _snd1 = new PlaySound(1, "firstblood", 0, 0, 0, 0, 0);
+						sendPacket(_snd1);
+						sendMessage("You will be rewarded for 1,pvp kill!");
+						ExShowScreenMessage _msg1 = new ExShowScreenMessage("Frist Blood", 3333);
+						sendPacket(_msg1);
+						break;
+					case 2:
+						for (int[] reward2 : Config.QUAKE_REWARD_2)
+						{
+							addItem("Loot", reward2[0], reward2[1], this, true);
+						}
+						PlaySound _snd2 = new PlaySound(1, "doublekill", 0, 0, 0, 0, 0);
+						sendPacket(_snd2);
+						sendMessage("You will be rewarded for 2,pvp kill!");
+						ExShowScreenMessage _msg2 = new ExShowScreenMessage("Duble Kills", 3333);
+						sendPacket(_msg2);
+						break;
+					case 3:
+						for (int[] reward3 : Config.QUAKE_REWARD_3)
+						{
+							addItem("Loot", reward3[0], reward3[1], this, true);
+						}
+						PlaySound _snd3 = new PlaySound(1, "triplekill", 0, 0, 0, 0, 0);
+						sendPacket(_snd3);
+						sendMessage("You will be rewarded for 3, pvp kill!");
+						ExShowScreenMessage _msg3 = new ExShowScreenMessage("Triple Kills", 33333);
+						sendPacket(_msg3);
+						break;
+					case 5:
+						for (int[] reward5 : Config.QUAKE_REWARD_5)
+						{
+							addItem("Loot", reward5[0], reward5[1], this, true);
+						}
+						PlaySound _snd4 = new PlaySound(1, "megakill", 0, 0, 0, 0, 0);
+						sendPacket(_snd4);
+						sendMessage("You will be rewarded for 5,  pvp kill!");
+						ExShowScreenMessage _msg5 = new ExShowScreenMessage("Mega Kills", 3333);
+						sendPacket(_msg5);
+						break;
+					case 10:
+						for (int[] reward10 : Config.QUAKE_REWARD_10)
+						{
+							addItem("Loot", reward10[0], reward10[1], this, true);
+						}
+						PlaySound _snd5 = new PlaySound(1, "ultrakill", 0, 0, 0, 0, 0);
+						sendPacket(_snd5);
+						sendMessage("You will be rewarded for 10, pvp kill!");
+						ExShowScreenMessage _msg10 = new ExShowScreenMessage("Ultra Kills", 3333);
+						sendPacket(_msg10);
+						break;
+					case 15:
+						for (int[] reward15 : Config.QUAKE_REWARD_15)
+						{
+							addItem("Loot", reward15[0], reward15[1], this, true);
+						}
+						PlaySound _snd10 = new PlaySound(1, "monsterkill", 0, 0, 0, 0, 0);
+						sendPacket(_snd10);
+						sendMessage("You will be rewarded for 15, pvp kill!");
+						ExShowScreenMessage _msg15 = new ExShowScreenMessage("Monster Kills", 3333);
+						sendPacket(_msg15);
+						break;
+					case 25:
+						for (int[] reward25 : Config.QUAKE_REWARD_25)
+						{
+							addItem("Loot", reward25[0], reward25[1], this, true);
+						}
+						PlaySound _snd15 = new PlaySound(1, "killingspree", 0, 0, 0, 0, 0);
+						sendPacket(_snd15);
+						sendMessage("You will be rewarded for 25, pvp kill");
+						ExShowScreenMessage _msg25 = new ExShowScreenMessage("Killing Spree, 25 Kills Are you kidding me O.o!", 3333);
+						sendPacket(_msg25);
+						if (Config.ALLOW_QUAKE_PVP_SET_HERO)
+						{
+							setHero(true);
+							sendMessage("You Are now Hero, Congratulations!");
+						}
+				}
+			}
+			
+			if (Config.ALLOW_QUAKE_PVP_REWARD_SKILL)
+			{
+				for (int[] rewardskills : Config.QUAKE_REWARD_SKILL)
+				{
+					if (getPvpKills() == rewardskills[3])
+					{
+						final int skillId = rewardskills[0];
+						addSkill(SkillTable.getInstance().getInfo(skillId, rewardskills[1]));
+						sendPacket(new ExShowScreenMessage("You got a skill! your skill is " + getSkillLevel(rewardskills[1]) + " level!", 4444));
+						
+						ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
+						{
+							public void run()
+							{
+								stopSkillEffects(skillId);
+								removeSkill(skillId);
+								sendPacket(new ExShowScreenMessage("Rewarded Skill has ben removed", 4444));
+							}
+							
+						},
+							rewardskills[2]);
+					}
+				}
+			}
+			// Send a Server->Client UserInfo packet to attacker with its Karma
+			// and PK Counter
 			sendPacket(new UserInfo(this));
 			sendPacket(new ExBrExtraUserInfo(this));
 		}

Citar# ---------------------------------------- #
#    PvPQuakeReward System V3.1 By (Micr0) #
# ---------------------------------------- #
#Default: False
AllowQuakeSystem = false

# Default: false
# when do 25 killings without dying become heroes
EnableSetHero = false

# Default: false
EnableRewardSkills = false

# Default Reward: 57,100;
# Example: id,count;id,count;
PvPQuakeReward1 = 57,100;

# Default Reward: 57,200;
# Example: id,count;id,count;
PvPQuakeReward2 = 57,200;

# Default Reward: 57,300;
# Example: id,count;id,count;
PvPQuakeReward3 = 57,300;

# Default Reward: 57,500;
# Example: id,count;id,count;
PvPQuakeReward5 = 57,500;

# Default Reward: 57,10000;
# Example: id,count;id,count;
PvPQuakeReward10 = 57,10000;

# Default Reward: 57,1000000;
# Example: id,count;id,count;
PvPQuakeReward15 = 57,1000000;

# Default Reward: 57,10000000;
# Example: id,count;id,count;
PvPQuakeReward25 = 57,10000000;

# Default Reward: 1530,1,60000,10;
# Example: SkillID,SkillLvL,SkillTime,PvpToReward;
# Warning Skill Time is in Millisecond
# for 1 min use 60000 2 min 120000 and etc
# Work only when > EnableRewardSkills = true
PvPQuakeRewardSkills = 1530,1,60000,10;