U3Games
Games | Desarrollo & Soporte => L2 | Sección de Servidores => Lineage => L2 | Implementaciones => Mensaje iniciado por: Swarlog en Jul 26, 2025, 11:28 PM
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;