Noticias:

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

Menú Principal

Siege Reward

Iniciado por Swarlog, Jul 26, 2025, 11:28 PM

Tema anterior - Siguiente tema

Swarlog

CitarCORE:

Index: E:/L2j Development/workspace/L2_GameServer_It/java/config/SiegeRewards.properties
===================================================================
--- E:/L2j Development/workspace/L2_GameServer_It/java/config/SiegeRewards.properties	(revision 0)
+++ E:/L2j Development/workspace/L2_GameServer_It/java/config/SiegeRewards.properties	(revision 0)
@@ -0,0 +1,18 @@
+# ===============================================
+# Siege Reward System. By Erol & Setekh
+# ===============================================
+# Description: Siege Reward System is a system that rewards the victor's clan members on a siege.
+# - This engine contains a boolean that enables offline clan member to get rewarded too.
+# - And a list that will get parsed once the engine is instanced.
+# - The list will parse the items id and count and rewords the siege's victor clan.
+# ===============================================
+# Activates the system if its set as true
+ActivateSystem = False
+
+# Set as true it will reward only the online clan members,
+# setting it as false it will reward all members including offline.
+RewardOnlineOnly = False
+
+# The item info list.
+# To add a item with count just add " , " to split the item and count and " ; " to close the statement
+RewardInfo = 57,2000;5575,2000000
\ No newline at end of file
Index: E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java
===================================================================
--- E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java	(revision 4034)
+++ E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java	(working copy)
@@ -41,6 +41,7 @@
 import net.sf.l2j.gameserver.instancemanager.DimensionalRiftManager;
 import net.sf.l2j.gameserver.instancemanager.PetitionManager;
 import net.sf.l2j.gameserver.instancemanager.SiegeManager;
+import net.sf.l2j.gameserver.instancemanager.SiegeRewardManager;
 import net.sf.l2j.gameserver.model.L2Character;
 import net.sf.l2j.gameserver.model.L2Clan;
 import net.sf.l2j.gameserver.model.L2Effect;
@@ -347,6 +348,10 @@
             activeChar.sendPacket(new GameGuardQuery());*/
 
         TvTEvent.onLogin(activeChar);
+        
+        if(SiegeRewardManager.ACTIVATED_SYSTEM && !SiegeRewardManager.REWARD_ACTIVE_MEMBERS_ONLY)
+        	SiegeRewardManager.getInstance().processWorldEnter(activeChar);
+
 	}
 
     /**
Index: E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java
===================================================================
--- E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java	(revision 4034)
+++ E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java	(working copy)
@@ -34,6 +34,7 @@
 import net.sf.l2j.gameserver.instancemanager.MercTicketManager;
 import net.sf.l2j.gameserver.instancemanager.SiegeGuardManager;
 import net.sf.l2j.gameserver.instancemanager.SiegeManager;
+import net.sf.l2j.gameserver.instancemanager.SiegeRewardManager;
 import net.sf.l2j.gameserver.instancemanager.SiegeManager.SiegeSpawn;
 import net.sf.l2j.gameserver.model.L2Character;
 import net.sf.l2j.gameserver.model.L2Clan;
@@ -290,6 +291,10 @@
             if (getCastle().getOwnerId() > 0) _siegeGuardManager.removeMercs();
             getCastle().spawnDoor(); // Respawn door to castle
             getCastle().getZone().updateZoneStatusForCharactersInside();
+
+            // Siege Reward Manager
+            if(getCastle().getOwnerId() > 0)
+            	SiegeRewardManager.getInstance().notifySiegeEnded(ClanTable.getInstance().getClan(getCastle().getOwnerId()), getCastle().getName());
         }
     }
 
Index: E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/GameServer.java	(revision 4034)
+++ E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/GameServer.java	(working copy)
@@ -214,6 +214,7 @@
 import net.sf.l2j.gameserver.instancemanager.QuestManager;
 import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager;
 import net.sf.l2j.gameserver.instancemanager.SiegeManager;
+import net.sf.l2j.gameserver.instancemanager.SiegeRewardManager;
 import net.sf.l2j.gameserver.model.AutoChatHandler;
 import net.sf.l2j.gameserver.model.AutoSpawnHandler;
 import net.sf.l2j.gameserver.model.L2Manor;
@@ -413,6 +414,10 @@
 		//PartyCommandManager.getInstance();
 		PetitionManager.getInstance();
 		QuestManager.getInstance();
+		
+		// Siege Reward Manager - Seth
+		SiegeRewardManager.getInstance();
+		
 		AugmentationData.getInstance();
 		if (Config.SAVE_DROPPED_ITEM)
 			ItemsOnGroundManager.getInstance();
Index: E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/SiegeRewardManager.java
===================================================================
--- E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/SiegeRewardManager.java	(revision 0)
+++ E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/SiegeRewardManager.java	(revision 0)
@@ -0,0 +1,306 @@
+/* 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 2, 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+package net.sf.l2j.gameserver.instancemanager;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Properties;
+import java.util.logging.Logger;
+
+import javolution.util.FastList;
+import javolution.util.FastMap;
+import net.sf.l2j.L2DatabaseFactory;
+import net.sf.l2j.gameserver.model.L2Clan;
+import net.sf.l2j.gameserver.model.L2ClanMember;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+/**
+ * @author  Setekh
+ * Doing your mom while ur reading
+ */
+public class SiegeRewardManager
+{
+	// Singleton
+	private static SiegeRewardManager _instance;
+	static Logger _log = Logger.getLogger(SiegeRewardManager.class.getName());
+	
+	// Config
+	public static boolean ACTIVATED_SYSTEM;
+	public static boolean REWARD_ACTIVE_MEMBERS_ONLY;
+
+	// Constant
+	private final FastList<RewardInfoz> _list;
+	private final FastMap<Integer, FastList<ToReward>> _toReward; // Offline players that didn't get rewarded. =( poor guys, But they'll have a surprise
+	
+	public SiegeRewardManager()
+	{
+		_list = new FastList<RewardInfoz>();
+		_toReward = new FastMap<Integer, FastList<ToReward>>();
+		_log.info("SiegeRewardManager: Activated.");
+	}
+
+	public static SiegeRewardManager getInstance()
+	{
+		if(_instance == null)
+		{
+			_instance = new SiegeRewardManager();
+			_instance.loadConfigs();
+			_instance.loadOfflineMembers();
+		}
+		
+		return _instance;
+	}
+	
+	private void loadOfflineMembers()
+	{
+		// Mysql connector
+		Connection con = null;
+		
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			PreparedStatement st = con.prepareStatement("select charId, itemId, count, castle_name, rewarded from reward_list");
+			ResultSet rs = st.executeQuery();
+			
+			while(rs.next())
+			{
+				int charId = rs.getInt("charId");
+				int itemId = rs.getInt("itemId");
+				int count = rs.getInt("count");
+				String castle_name = rs.getString("castle_name");
+				boolean rewarded = rs.getBoolean("rewarded");
+				
+				if(rewarded)
+				{
+					deleteRewarded(charId, itemId);
+					continue;
+				}
+				
+				ToReward tr = new ToReward();
+				tr.charId = charId;
+				tr.itemId = itemId;
+				tr.count = count;
+				tr.castleName = castle_name;
+				
+				if(!_toReward.containsKey(charId))
+				{
+					try // prevent errors
+					{
+						_toReward.put(charId, new FastList<ToReward>());
+					}
+					finally
+					{
+						_toReward.get(charId).add(tr);
+					}
+				}
+				else
+					_toReward.get(charId).add(tr);
+				
+			}
+			
+			rs.close();
+			st.close();
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+		finally
+		{
+			try
+			{
+				con.close();
+			}
+			catch (SQLException e)
+			{
+				e.printStackTrace();
+			}
+		}
+	}
+
+	public void deleteRewarded(int charId, int itemId)
+	{
+		// Mysql connector
+		Connection con = null;
+		
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			PreparedStatement st = con.prepareStatement("delete from reward_list where charId=? and itemId=?");
+			st.setInt(1, charId);
+			st.setInt(2, itemId);
+			st.execute();
+			st.close();
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+		finally
+		{
+			try
+			{
+				con.close();
+			}
+			catch (SQLException e)
+			{
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	private void loadConfigs()
+	{
+		try
+		{
+			Properties prop = new Properties();
+			prop.load(new FileInputStream(new File("./config/SiegeRewards.properties")));
+			
+			ACTIVATED_SYSTEM = Boolean.parseBoolean(prop.getProperty("ActivateSystem", "false"));
+			REWARD_ACTIVE_MEMBERS_ONLY = Boolean.parseBoolean(prop.getProperty("RewardOnlineOnly", "false"));
+			
+			if(ACTIVATED_SYSTEM)
+			{
+				String[] splitz = prop.getProperty("RewardInfo").split(";");
+				
+				for(String str: splitz)
+				{
+					String[] splits = str.split(",");
+					_list.add(new RewardInfoz(splits));
+				}
+			}
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+		finally
+		{
+			_log.info("SiegeRewardManager Loaded: "+_list.size()+" Reword Item(s).");
+		}
+	}
+
+	public void storeDataBase(int charId, String castleName)
+	{
+		// Mysql connector
+		Connection con = null;
+		
+		try
+		{
+			con = L2DatabaseFactory.getInstance().getConnection();
+			
+			for(RewardInfoz rewz : _list)
+			{
+				PreparedStatement st = con.prepareStatement("replace into reward_list values(?,?,?,?,?)");
+				st.setInt(1, charId);
+				st.setInt(2, rewz.getItemId());
+				st.setInt(3, rewz.getItemCount());
+				st.setString(4, castleName);
+				st.setInt(5, 0);
+				st.execute();
+				st.close();
+			}
+		}
+		catch(Exception e)
+		{
+			e.printStackTrace();
+		}
+		finally
+		{
+			try
+			{
+				con.close();
+			}
+			catch (SQLException e)
+			{
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public void processWorldEnter(L2PcInstance activeChar)
+	{
+		if(_toReward.containsKey(activeChar.getObjectId()))
+		{
+			String castleName = "";
+			
+			for(ToReward tr :_toReward.get(activeChar.getObjectId()))
+			{
+				activeChar.addItem("SiegeReward", tr.itemId, tr.count, activeChar, true);
+				castleName = tr.castleName;
+				tr.rewarded = true;
+			}
+			activeChar.sendMessage("Congratulations! You have been rewarded for the " +castleName+ " siege victory!");
+		}
+	}
+	
+	public class ToReward { String castleName; int charId, itemId, count; boolean rewarded; }
+	
+	public class RewardInfoz
+	{
+		// Constants
+		private final int _itemId;
+		private final int _itemCount;
+		
+		public RewardInfoz(String...strings)
+		{
+			_itemId = Integer.parseInt(strings[0]);
+			_itemCount = Integer.parseInt(strings[1]);
+		}
+
+		/**
+		 * @return Returns the itemId.
+		 */
+		public int getItemId()
+		{
+			return _itemId;
+		}
+
+		/**
+		 * @return Returns the itemCount.
+		 */
+		public int getItemCount()
+		{
+			return _itemCount;
+		}
+		
+	}
+
+	public void notifySiegeEnded(L2Clan clan, String castleName)
+	{
+		for(L2ClanMember member : clan.getMembers())
+		{
+			if(member.isOnline())
+			{
+				L2PcInstance activeChar = member.getPlayerInstance();
+				
+				for(RewardInfoz tr : _list)
+					activeChar.addItem("SiegeReward", tr.getItemId(), tr.getItemCount(), activeChar, true);
+
+				activeChar.sendMessage("Congratulations! You have been rewarded for the " +castleName+ " siege victory!");
+			}
+			else
+				storeDataBase(member.getObjectId(), castleName);
+		}
+	}
+	
+}

CitarSQL:

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `reward_list`
-- ----------------------------
DROP TABLE IF EXISTS `reward_list`;
CREATE TABLE `reward_list` (
  `charid` int(11) NOT NULL default '0',
  `itemId` int(11) NOT NULL default '0',
  `count` int(22) NOT NULL default '0',
  `castle_name` varchar(50) NOT NULL default '',
  `rewarded` int(2) NOT NULL default '0',
  PRIMARY KEY  (`charid`,`itemId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;