Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: L2jFrozen_GameServer/config/system_config/events/SiegeRewards.properties
- ================================================================================
- # ===========================================================
- # Siege Reward System by Erol & Setekh
- # ===========================================================
- # Description:
- # This system rewards victorious clan members after a siege.
- # Supports both online and offline members.
- # Separate rewards for clan leader.
- #
- # Instructions:
- # 1. Set ActivateSystem = True to enable the system.
- # 2. Set RewardOnlineOnly = True if only online members should be rewarded.
- # 3. Configure rewards for members in RewardInfo (ItemID,Count;ItemID,Count;...)
- # 4. Configure rewards for clan leader in RewardClInfo (ItemID,Count;ItemID,Count;...)
- #
- # Example:
- # RewardInfo = 57,2000;5575,2000000
- # RewardClInfo = 57,5000;5575,5000000
- # ===========================================================
- # Activates the Siege Reward System (True = ON, False = OFF)
- ActivateSystem = False
- # Reward only online members? (True = only online, False = include offline)
- RewardOnlineOnly = False
- # Reward list for regular clan members (ID,Count;ID,Count;...)
- RewardInfo = 57,2000;5575,2000000
- # Reward list for clan leader (ID,Count;ID,Count;...)
- RewardClInfo = 57,2000;5575,2000000
- Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java
- ===============================================================================
- if (Config.RESTART_BY_TIME_OF_DAY)
- {
- ShowNextRestart(activeChar);
- }
- + if(SiegeRewardManager.ACTIVATED_SYSTEM && !SiegeRewardManager.REWARD_ACTIVE_MEMBERS_ONLY)
- + SiegeRewardManager.getInstance().processWorldEnter(activeChar);
- +
- // NPCBuffer
- if (PowerPakConfig.BUFFER_ENABLED)
- CharSchemesTable.getInstance().onPlayerLogin(activeChar.getObjectId());
- Index: head-src/com/l2jarchid/gameserver/model/entity/Siege.java
- ===================================================================
- // Respawn door to castle
- getCastle().spawnDoor();
- +
- + // Siege Reward Manager
- + if(getCastle().getOwnerId() > 0)
- + SiegeRewardManager.getInstance().notifySiegeEnded(ClanTable.getInstance().getClan(getCastle().getOwnerId()), getCastle().getName());
- }
- }
- Index: head-src/com/l2jfrozen/gameserver/GameServer.java
- ===================================================================
- RecipeController.getInstance();
- EventDroplist.getInstance();
- AugmentationData.getInstance();
- +
- + // Siege Reward Manager - Seth
- + SiegeRewardManager.getInstance();
- +
- MonsterRace.getInstance();
- MercTicketManager.getInstance();
- Index: head-src/com/l2jfrozen/gameserver/custom/SiegeRewardManager.java
- ========================================================================
- package com.l2jfrozen.gameserver.custom;
- 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.*;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.logging.Logger;
- import com.l2jfrozen.gameserver.model.L2Clan;
- import com.l2jfrozen.gameserver.model.L2ClanMember;
- import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
- import com.l2jfrozen.util.database.L2DatabaseFactory;
- public class SiegeRewardManager
- {
- private static SiegeRewardManager _instance;
- private static final Logger _log = Logger.getLogger(SiegeRewardManager.class.getName());
- public static boolean ACTIVATED_SYSTEM;
- public static boolean REWARD_ACTIVE_MEMBERS_ONLY;
- private final List<MemberReward> memberRewards;
- private final List<LeaderReward> leaderRewards;
- private final Map<Integer, List<ToReward>> offlineRewards;
- private SiegeRewardManager()
- {
- memberRewards = new ArrayList<>();
- leaderRewards = new ArrayList<>();
- offlineRewards = new ConcurrentHashMap<>();
- _log.info("SiegeRewardManager initialized.");
- }
- public static SiegeRewardManager getInstance()
- {
- if (_instance == null)
- {
- _instance = new SiegeRewardManager();
- _instance.loadConfigs();
- _instance.loadOfflineMembers();
- }
- return _instance;
- }
- private void loadConfigs()
- {
- try (FileInputStream fis = new FileInputStream(new File("./config/system_config/events/SiegeRewards.properties")))
- {
- Properties prop = new Properties();
- prop.load(fis);
- ACTIVATED_SYSTEM = Boolean.parseBoolean(prop.getProperty("ActivateSystem", "false"));
- REWARD_ACTIVE_MEMBERS_ONLY = Boolean.parseBoolean(prop.getProperty("RewardOnlineOnly", "false"));
- if (ACTIVATED_SYSTEM)
- {
- String[] memberItems = prop.getProperty("RewardInfo", "").split(";");
- for (String s : memberItems)
- memberRewards.add(new MemberReward(s.split(",")));
- String[] leaderItems = prop.getProperty("RewardClInfo", "").split(";");
- for (String s : leaderItems)
- leaderRewards.add(new LeaderReward(s.split(",")));
- }
- }
- catch (Exception e)
- {
- _log.severe("Failed to load SiegeRewardManager configs: " + e);
- }
- _log.info("SiegeRewardManager Loaded: " + memberRewards.size() + " member reward(s), " + leaderRewards.size() + " leader reward(s).");
- }
- private void loadOfflineMembers()
- {
- try (Connection con = L2DatabaseFactory.getInstance().getConnection();
- PreparedStatement st = con.prepareStatement("SELECT charId, itemId, count, castle_name 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 castleName = rs.getString("castle_name");
- ToReward tr = new ToReward(itemId, count, castleName);
- offlineRewards.computeIfAbsent(charId, k -> new ArrayList<>()).add(tr);
- }
- }
- catch (SQLException e)
- {
- _log.severe("Error loading offline siege rewards: " + e);
- }
- }
- public void storeOfflineReward(int charId, String castleName)
- {
- try (Connection con = L2DatabaseFactory.getInstance().getConnection();
- PreparedStatement st = con.prepareStatement("REPLACE INTO reward_list VALUES(?,?,?,?)"))
- {
- for (MemberReward rew : memberRewards)
- {
- st.setInt(1, charId);
- st.setInt(2, rew.getItemId());
- st.setInt(3, rew.getItemCount());
- st.setString(4, castleName);
- st.addBatch();
- }
- st.executeBatch();
- }
- catch (SQLException e)
- {
- _log.severe("Error storing offline reward: " + e);
- }
- }
- public void processWorldEnter(L2PcInstance player)
- {
- List<ToReward> rewards = offlineRewards.get(player.getObjectId());
- if (rewards == null) return;
- Set<String> castles = new HashSet<>();
- for (ToReward tr : rewards)
- {
- if (player.getInventory().validateCapacity(tr.count))
- player.addItem("SiegeReward", tr.itemId, tr.count, player, true);
- castles.add(tr.castleName);
- }
- player.sendMessage("Congratulations! You have been rewarded for the siege(s): " + String.join(", ", castles));
- offlineRewards.remove(player.getObjectId());
- }
- public void notifySiegeEnded(L2Clan clan, String castleName)
- {
- int leaderId = clan.getLeaderId();
- for (L2ClanMember member : clan.getMembers())
- {
- L2PcInstance player = member.getPlayerInstance();
- if (player != null && player.isOnline() == 1)
- {
- boolean isLeader = (member.getObjectId() == leaderId);
- List<? extends Reward> rewardsList = isLeader ? leaderRewards : memberRewards;
- for (Reward rew : rewardsList)
- {
- if (player.getInventory().validateCapacity(rew.getItemCount()))
- player.addItem("SiegeReward", rew.getItemId(), rew.getItemCount(), player, true);
- }
- player.sendMessage("Congratulations! You have been rewarded for the " + castleName + " siege victory!");
- }
- else
- {
- storeOfflineReward(member.getObjectId(), castleName);
- }
- }
- }
- // ----------------------- Inner classes -----------------------
- private static class ToReward
- {
- int itemId, count;
- String castleName;
- public ToReward(int itemId, int count, String castleName)
- {
- this.itemId = itemId;
- this.count = count;
- this.castleName = castleName;
- }
- }
- private interface Reward
- {
- int getItemId();
- int getItemCount();
- }
- private static class MemberReward implements Reward
- {
- private final int itemId, itemCount;
- public MemberReward(String[] params)
- {
- this.itemId = Integer.parseInt(params[0]);
- this.itemCount = Integer.parseInt(params[1]);
- }
- @Override
- public int getItemId()
- {
- return itemId;
- }
- @Override
- public int getItemCount()
- {
- return itemCount;
- }
- }
- private static class LeaderReward implements Reward
- {
- private final int itemId, itemCount;
- public LeaderReward(String[] params)
- {
- this.itemId = Integer.parseInt(params[0]);
- this.itemCount = Integer.parseInt(params[1]);
- }
- @Override
- public int getItemId()
- {
- return itemId;
- }
- @Override
- public int getItemCount()
- {
- return itemCount;
- }
- }
- }
- Index: L2jFrozen_DataPack/sql/reward_list.sql
- ==============================================
- +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;
- +
- +-- ----------------------------
- +-- Records of reward_list
- +-- ----------------------------
- Index: L2jFrozen_DataPack/tools/database_installer.sh
- ======================================================
- $MYG < ../sql/quest_global_data.sql &> /dev/null
- $MYG < ../sql/reward_log.sql &> /dev/null
- +$MYG < ../sql/reward_list.sql &> /dev/null
- $MYG < ../sql/raidboss_spawnlist.sql &> /dev/null
- Index: L2jFrozen_DataPack/tools/Database Installer.bat
- =======================================================
- echo *** Sucesfull 69 percents. ***
- %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/reward_log.sql
- +%mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/reward_list.sql
- %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/raidboss_spawnlist.sql
- Index: L2jFrozen_DataPack/tools/full_install.sql
- =================================================
- DROP TABLE IF EXISTS quest_global_data;
- DROP TABLE IF EXISTS reward_log;
- +DROP TABLE IF EXISTS reward_list;
- DROP TABLE IF EXISTS raidboss_spawnlist;
Advertisement
Add Comment
Please, Sign In to add comment