Tammy-Street

Untitled

Nov 10th, 2025
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.72 KB | None | 0 0
  1. Index: L2jFrozen_GameServer/config/system_config/events/SiegeRewards.properties
  2. ================================================================================
  3. # ===========================================================
  4. # Siege Reward System by Erol & Setekh
  5. # ===========================================================
  6. # Description:
  7. # This system rewards victorious clan members after a siege.
  8. # Supports both online and offline members.
  9. # Separate rewards for clan leader.
  10. #
  11. # Instructions:
  12. # 1. Set ActivateSystem = True to enable the system.
  13. # 2. Set RewardOnlineOnly = True if only online members should be rewarded.
  14. # 3. Configure rewards for members in RewardInfo (ItemID,Count;ItemID,Count;...)
  15. # 4. Configure rewards for clan leader in RewardClInfo (ItemID,Count;ItemID,Count;...)
  16. #
  17. # Example:
  18. # RewardInfo = 57,2000;5575,2000000
  19. # RewardClInfo = 57,5000;5575,5000000
  20. # ===========================================================
  21.  
  22. # Activates the Siege Reward System (True = ON, False = OFF)
  23. ActivateSystem = False
  24.  
  25. # Reward only online members? (True = only online, False = include offline)
  26. RewardOnlineOnly = False
  27.  
  28. # Reward list for regular clan members (ID,Count;ID,Count;...)
  29. RewardInfo = 57,2000;5575,2000000
  30.  
  31. # Reward list for clan leader (ID,Count;ID,Count;...)
  32. RewardClInfo = 57,2000;5575,2000000
  33.  
  34. Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java
  35. ===============================================================================
  36.  
  37.         if (Config.RESTART_BY_TIME_OF_DAY)
  38.         {
  39.             ShowNextRestart(activeChar);
  40.         }
  41.  
  42. +           if(SiegeRewardManager.ACTIVATED_SYSTEM && !SiegeRewardManager.REWARD_ACTIVE_MEMBERS_ONLY)
  43. +                       SiegeRewardManager.getInstance().processWorldEnter(activeChar);
  44. +                  
  45.         // NPCBuffer
  46.         if (PowerPakConfig.BUFFER_ENABLED)
  47.             CharSchemesTable.getInstance().onPlayerLogin(activeChar.getObjectId());
  48.  
  49. Index: head-src/com/l2jarchid/gameserver/model/entity/Siege.java
  50. ===================================================================
  51.             // Respawn door to castle
  52.             getCastle().spawnDoor();
  53. +
  54. +            // Siege Reward Manager
  55. +            if(getCastle().getOwnerId() > 0)
  56. +               SiegeRewardManager.getInstance().notifySiegeEnded(ClanTable.getInstance().getClan(getCastle().getOwnerId()), getCastle().getName());
  57.          }
  58.      }
  59.  
  60. Index: head-src/com/l2jfrozen/gameserver/GameServer.java
  61. ===================================================================
  62.  
  63.         RecipeController.getInstance();
  64.         EventDroplist.getInstance();
  65.         AugmentationData.getInstance();
  66. +
  67. +       // Siege Reward Manager - Seth
  68. +       SiegeRewardManager.getInstance();
  69. +      
  70.         MonsterRace.getInstance();
  71.         MercTicketManager.getInstance();
  72.  
  73. Index: head-src/com/l2jfrozen/gameserver/custom/SiegeRewardManager.java
  74. ========================================================================
  75.  
  76. package com.l2jfrozen.gameserver.custom;
  77.  
  78. import java.io.File;
  79. import java.io.FileInputStream;
  80. import java.sql.Connection;
  81. import java.sql.PreparedStatement;
  82. import java.sql.ResultSet;
  83. import java.sql.SQLException;
  84. import java.util.*;
  85. import java.util.concurrent.ConcurrentHashMap;
  86. import java.util.logging.Logger;
  87.  
  88. import com.l2jfrozen.gameserver.model.L2Clan;
  89. import com.l2jfrozen.gameserver.model.L2ClanMember;
  90. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  91. import com.l2jfrozen.util.database.L2DatabaseFactory;
  92.  
  93. public class SiegeRewardManager
  94. {
  95.     private static SiegeRewardManager _instance;
  96.     private static final Logger _log = Logger.getLogger(SiegeRewardManager.class.getName());
  97.  
  98.     public static boolean ACTIVATED_SYSTEM;
  99.     public static boolean REWARD_ACTIVE_MEMBERS_ONLY;
  100.  
  101.     private final List<MemberReward> memberRewards;
  102.     private final List<LeaderReward> leaderRewards;
  103.     private final Map<Integer, List<ToReward>> offlineRewards;
  104.  
  105.     private SiegeRewardManager()
  106.     {
  107.         memberRewards = new ArrayList<>();
  108.         leaderRewards = new ArrayList<>();
  109.         offlineRewards = new ConcurrentHashMap<>();
  110.         _log.info("SiegeRewardManager initialized.");
  111.     }
  112.  
  113.     public static SiegeRewardManager getInstance()
  114.     {
  115.         if (_instance == null)
  116.         {
  117.             _instance = new SiegeRewardManager();
  118.             _instance.loadConfigs();
  119.             _instance.loadOfflineMembers();
  120.         }
  121.         return _instance;
  122.     }
  123.  
  124.     private void loadConfigs()
  125.     {
  126.         try (FileInputStream fis = new FileInputStream(new File("./config/system_config/events/SiegeRewards.properties")))
  127.         {
  128.             Properties prop = new Properties();
  129.             prop.load(fis);
  130.  
  131.             ACTIVATED_SYSTEM = Boolean.parseBoolean(prop.getProperty("ActivateSystem", "false"));
  132.             REWARD_ACTIVE_MEMBERS_ONLY = Boolean.parseBoolean(prop.getProperty("RewardOnlineOnly", "false"));
  133.  
  134.             if (ACTIVATED_SYSTEM)
  135.             {
  136.                 String[] memberItems = prop.getProperty("RewardInfo", "").split(";");
  137.                 for (String s : memberItems)
  138.                     memberRewards.add(new MemberReward(s.split(",")));
  139.  
  140.                 String[] leaderItems = prop.getProperty("RewardClInfo", "").split(";");
  141.                 for (String s : leaderItems)
  142.                     leaderRewards.add(new LeaderReward(s.split(",")));
  143.             }
  144.         }
  145.         catch (Exception e)
  146.         {
  147.             _log.severe("Failed to load SiegeRewardManager configs: " + e);
  148.         }
  149.  
  150.         _log.info("SiegeRewardManager Loaded: " + memberRewards.size() + " member reward(s), " + leaderRewards.size() + " leader reward(s).");
  151.     }
  152.  
  153.     private void loadOfflineMembers()
  154.     {
  155.         try (Connection con = L2DatabaseFactory.getInstance().getConnection();
  156.             PreparedStatement st = con.prepareStatement("SELECT charId, itemId, count, castle_name FROM reward_list");
  157.             ResultSet rs = st.executeQuery())
  158.         {
  159.             while (rs.next())
  160.             {
  161.                 int charId = rs.getInt("charId");
  162.                 int itemId = rs.getInt("itemId");
  163.                 int count = rs.getInt("count");
  164.                 String castleName = rs.getString("castle_name");
  165.  
  166.                 ToReward tr = new ToReward(itemId, count, castleName);
  167.                 offlineRewards.computeIfAbsent(charId, k -> new ArrayList<>()).add(tr);
  168.             }
  169.         }
  170.         catch (SQLException e)
  171.         {
  172.             _log.severe("Error loading offline siege rewards: " + e);
  173.         }
  174.     }
  175.  
  176.     public void storeOfflineReward(int charId, String castleName)
  177.     {
  178.         try (Connection con = L2DatabaseFactory.getInstance().getConnection();
  179.             PreparedStatement st = con.prepareStatement("REPLACE INTO reward_list VALUES(?,?,?,?)"))
  180.         {
  181.             for (MemberReward rew : memberRewards)
  182.             {
  183.                 st.setInt(1, charId);
  184.                 st.setInt(2, rew.getItemId());
  185.                 st.setInt(3, rew.getItemCount());
  186.                 st.setString(4, castleName);
  187.                 st.addBatch();
  188.             }
  189.             st.executeBatch();
  190.         }
  191.         catch (SQLException e)
  192.         {
  193.             _log.severe("Error storing offline reward: " + e);
  194.         }
  195.     }
  196.  
  197.     public void processWorldEnter(L2PcInstance player)
  198.     {
  199.         List<ToReward> rewards = offlineRewards.get(player.getObjectId());
  200.         if (rewards == null) return;
  201.  
  202.         Set<String> castles = new HashSet<>();
  203.  
  204.         for (ToReward tr : rewards)
  205.         {
  206.             if (player.getInventory().validateCapacity(tr.count))
  207.                 player.addItem("SiegeReward", tr.itemId, tr.count, player, true);
  208.  
  209.             castles.add(tr.castleName);
  210.         }
  211.  
  212.         player.sendMessage("Congratulations! You have been rewarded for the siege(s): " + String.join(", ", castles));
  213.         offlineRewards.remove(player.getObjectId());
  214.     }
  215.  
  216.     public void notifySiegeEnded(L2Clan clan, String castleName)
  217.     {
  218.         int leaderId = clan.getLeaderId();
  219.  
  220.         for (L2ClanMember member : clan.getMembers())
  221.         {
  222.             L2PcInstance player = member.getPlayerInstance();
  223.  
  224.             if (player != null && player.isOnline() == 1)
  225.             {
  226.                 boolean isLeader = (member.getObjectId() == leaderId);
  227.  
  228.                 List<? extends Reward> rewardsList = isLeader ? leaderRewards : memberRewards;
  229.  
  230.                 for (Reward rew : rewardsList)
  231.                 {
  232.                     if (player.getInventory().validateCapacity(rew.getItemCount()))
  233.                         player.addItem("SiegeReward", rew.getItemId(), rew.getItemCount(), player, true);
  234.                 }
  235.  
  236.                 player.sendMessage("Congratulations! You have been rewarded for the " + castleName + " siege victory!");
  237.             }
  238.             else
  239.             {
  240.                 storeOfflineReward(member.getObjectId(), castleName);
  241.             }
  242.         }
  243.     }
  244.  
  245.     // ----------------------- Inner classes -----------------------
  246.     private static class ToReward
  247.     {
  248.         int itemId, count;
  249.         String castleName;
  250.  
  251.         public ToReward(int itemId, int count, String castleName)
  252.         {
  253.             this.itemId = itemId;
  254.             this.count = count;
  255.             this.castleName = castleName;
  256.         }
  257.     }
  258.  
  259.     private interface Reward
  260.     {
  261.         int getItemId();
  262.         int getItemCount();
  263.     }
  264.  
  265.     private static class MemberReward implements Reward
  266.     {
  267.         private final int itemId, itemCount;
  268.  
  269.         public MemberReward(String[] params)
  270.         {
  271.             this.itemId = Integer.parseInt(params[0]);
  272.             this.itemCount = Integer.parseInt(params[1]);
  273.         }
  274.  
  275.         @Override
  276.         public int getItemId()
  277.         {
  278.             return itemId;
  279.         }
  280.  
  281.         @Override
  282.         public int getItemCount()
  283.         {
  284.             return itemCount;
  285.         }
  286.     }
  287.  
  288.     private static class LeaderReward implements Reward
  289.     {
  290.         private final int itemId, itemCount;
  291.  
  292.         public LeaderReward(String[] params)
  293.         {
  294.             this.itemId = Integer.parseInt(params[0]);
  295.             this.itemCount = Integer.parseInt(params[1]);
  296.         }
  297.  
  298.         @Override
  299.         public int getItemId()
  300.         {
  301.             return itemId;
  302.         }
  303.         @Override
  304.         public int getItemCount()
  305.         {
  306.             return itemCount;
  307.         }
  308.     }
  309. }
  310.  
  311. Index: L2jFrozen_DataPack/sql/reward_list.sql
  312. ==============================================
  313.  
  314. +SET FOREIGN_KEY_CHECKS=0;
  315. +-- ----------------------------
  316. +-- Table structure for `reward_list`
  317. +-- ----------------------------
  318. +DROP TABLE IF EXISTS `reward_list`;
  319. +CREATE TABLE `reward_list` (
  320. +  `charid` int(11) NOT NULL default '0',
  321. +  `itemId` int(11) NOT NULL default '0',
  322. +  `count` int(22) NOT NULL default '0',
  323. +  `castle_name` varchar(50) NOT NULL default '',
  324. +  `rewarded` int(2) NOT NULL default '0',
  325. +  PRIMARY KEY  (`charid`,`itemId`)
  326. +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  327. +
  328. +-- ----------------------------
  329. +-- Records of reward_list
  330. +-- ----------------------------
  331.  
  332. Index: L2jFrozen_DataPack/tools/database_installer.sh
  333. ======================================================
  334.  
  335. $MYG < ../sql/quest_global_data.sql &> /dev/null
  336. $MYG < ../sql/reward_log.sql &> /dev/null
  337. +$MYG < ../sql/reward_list.sql &> /dev/null
  338. $MYG < ../sql/raidboss_spawnlist.sql &> /dev/null
  339.  
  340. Index: L2jFrozen_DataPack/tools/Database Installer.bat
  341. =======================================================
  342.  
  343. echo *** Sucesfull 69 percents. ***
  344. %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/reward_log.sql
  345. +%mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/reward_list.sql
  346. %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/raidboss_spawnlist.sql
  347.  
  348. Index: L2jFrozen_DataPack/tools/full_install.sql
  349. =================================================
  350.  
  351. DROP TABLE IF EXISTS quest_global_data;
  352. DROP TABLE IF EXISTS reward_log;
  353. +DROP TABLE IF EXISTS reward_list;
  354. DROP TABLE IF EXISTS raidboss_spawnlist;
Tags: SiegeReward
Advertisement
Add Comment
Please, Sign In to add comment