Guest User

Lame: Siege Reward System

a guest
Apr 1st, 2010
1,485
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 12.80 KB | None | 0 0
  1. Index: E:/L2j Development/workspace/L2_GameServer_It/java/config/SiegeRewards.properties
  2. ===================================================================
  3. --- E:/L2j Development/workspace/L2_GameServer_It/java/config/SiegeRewards.properties   (revision 0)
  4. +++ E:/L2j Development/workspace/L2_GameServer_It/java/config/SiegeRewards.properties   (revision 0)
  5. @@ -0,0 +1,18 @@
  6. +# ===============================================
  7. +# Siege Reward System. By Erol & Setekh
  8. +# ===============================================
  9. +# Description: Siege Reward System is a system that rewards the victor's clan members on a siege.
  10. +# - This engine contains a boolean that enables offline clan member to get rewarded too.
  11. +# - And a list that will get parsed once the engine is instanced.
  12. +# - The list will parse the items id and count and rewords the siege's victor clan.
  13. +# ===============================================
  14. +# Activates the system if its set as true
  15. +ActivateSystem = False
  16. +
  17. +# Set as true it will reward only the online clan members,
  18. +# setting it as false it will reward all members including offline.
  19. +RewardOnlineOnly = False
  20. +
  21. +# The item info list.
  22. +# To add a item with count just add " , " to split the item and count and " ; " to close the statement
  23. +RewardInfo = 57,2000;5575,2000000
  24. \ No newline at end of file
  25. Index: E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java
  26. ===================================================================
  27. --- E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java  (revision 4034)
  28. +++ E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java  (working copy)
  29. @@ -41,6 +41,7 @@
  30.  import net.sf.l2j.gameserver.instancemanager.DimensionalRiftManager;
  31.  import net.sf.l2j.gameserver.instancemanager.PetitionManager;
  32.  import net.sf.l2j.gameserver.instancemanager.SiegeManager;
  33. +import net.sf.l2j.gameserver.instancemanager.SiegeRewardManager;
  34.  import net.sf.l2j.gameserver.model.L2Character;
  35.  import net.sf.l2j.gameserver.model.L2Clan;
  36.  import net.sf.l2j.gameserver.model.L2Effect;
  37. @@ -347,6 +348,10 @@
  38.              activeChar.sendPacket(new GameGuardQuery());*/
  39.  
  40.          TvTEvent.onLogin(activeChar);
  41. +        
  42. +        if(SiegeRewardManager.ACTIVATED_SYSTEM && !SiegeRewardManager.REWARD_ACTIVE_MEMBERS_ONLY)
  43. +           SiegeRewardManager.getInstance().processWorldEnter(activeChar);
  44. +
  45.     }
  46.  
  47.      /**
  48. Index: E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java
  49. ===================================================================
  50. --- E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java    (revision 4034)
  51. +++ E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/model/entity/Siege.java    (working copy)
  52. @@ -34,6 +34,7 @@
  53.  import net.sf.l2j.gameserver.instancemanager.MercTicketManager;
  54.  import net.sf.l2j.gameserver.instancemanager.SiegeGuardManager;
  55.  import net.sf.l2j.gameserver.instancemanager.SiegeManager;
  56. +import net.sf.l2j.gameserver.instancemanager.SiegeRewardManager;
  57.  import net.sf.l2j.gameserver.instancemanager.SiegeManager.SiegeSpawn;
  58.  import net.sf.l2j.gameserver.model.L2Character;
  59.  import net.sf.l2j.gameserver.model.L2Clan;
  60. @@ -290,6 +291,10 @@
  61.              if (getCastle().getOwnerId() > 0) _siegeGuardManager.removeMercs();
  62.              getCastle().spawnDoor(); // Respawn door to castle
  63.              getCastle().getZone().updateZoneStatusForCharactersInside();
  64. +
  65. +            // Siege Reward Manager
  66. +            if(getCastle().getOwnerId() > 0)
  67. +               SiegeRewardManager.getInstance().notifySiegeEnded(ClanTable.getInstance().getClan(getCastle().getOwnerId()), getCastle().getName());
  68.          }
  69.      }
  70.  
  71. Index: E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/GameServer.java
  72. ===================================================================
  73. --- E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/GameServer.java    (revision 4034)
  74. +++ E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/GameServer.java    (working copy)
  75. @@ -214,6 +214,7 @@
  76.  import net.sf.l2j.gameserver.instancemanager.QuestManager;
  77.  import net.sf.l2j.gameserver.instancemanager.RaidBossSpawnManager;
  78.  import net.sf.l2j.gameserver.instancemanager.SiegeManager;
  79. +import net.sf.l2j.gameserver.instancemanager.SiegeRewardManager;
  80.  import net.sf.l2j.gameserver.model.AutoChatHandler;
  81.  import net.sf.l2j.gameserver.model.AutoSpawnHandler;
  82.  import net.sf.l2j.gameserver.model.L2Manor;
  83. @@ -413,6 +414,10 @@
  84.         //PartyCommandManager.getInstance();
  85.         PetitionManager.getInstance();
  86.         QuestManager.getInstance();
  87. +      
  88. +       // Siege Reward Manager - Seth
  89. +       SiegeRewardManager.getInstance();
  90. +      
  91.         AugmentationData.getInstance();
  92.         if (Config.SAVE_DROPPED_ITEM)
  93.             ItemsOnGroundManager.getInstance();
  94. Index: E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/SiegeRewardManager.java
  95. ===================================================================
  96. --- E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/SiegeRewardManager.java    (revision 0)
  97. +++ E:/L2j Development/workspace/L2_GameServer_It/java/net/sf/l2j/gameserver/instancemanager/SiegeRewardManager.java    (revision 0)
  98. @@ -0,0 +1,306 @@
  99. +/* This program is free software; you can redistribute it and/or modify
  100. + * it under the terms of the GNU General Public License as published by
  101. + * the Free Software Foundation; either version 2, or (at your option)
  102. + * any later version.
  103. + *
  104. + * This program is distributed in the hope that it will be useful,
  105. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  106. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  107. + * GNU General Public License for more details.
  108. + *
  109. + * You should have received a copy of the GNU General Public License
  110. + * along with this program; if not, write to the Free Software
  111. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  112. + * 02111-1307, USA.
  113. + *
  114. + * http://www.gnu.org/copyleft/gpl.html
  115. + */
  116. +package net.sf.l2j.gameserver.instancemanager;
  117. +
  118. +import java.io.File;
  119. +import java.io.FileInputStream;
  120. +import java.sql.Connection;
  121. +import java.sql.PreparedStatement;
  122. +import java.sql.ResultSet;
  123. +import java.sql.SQLException;
  124. +import java.util.Properties;
  125. +import java.util.logging.Logger;
  126. +
  127. +import javolution.util.FastList;
  128. +import javolution.util.FastMap;
  129. +import net.sf.l2j.L2DatabaseFactory;
  130. +import net.sf.l2j.gameserver.model.L2Clan;
  131. +import net.sf.l2j.gameserver.model.L2ClanMember;
  132. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  133. +
  134. +/**
  135. + * @author  Setekh
  136. + * Doing your mom while ur reading
  137. + */
  138. +public class SiegeRewardManager
  139. +{
  140. +   // Singleton
  141. +   private static SiegeRewardManager _instance;
  142. +   static Logger _log = Logger.getLogger(SiegeRewardManager.class.getName());
  143. +  
  144. +   // Config
  145. +   public static boolean ACTIVATED_SYSTEM;
  146. +   public static boolean REWARD_ACTIVE_MEMBERS_ONLY;
  147. +
  148. +   // Constant
  149. +   private final FastList<RewardInfoz> _list;
  150. +   private final FastMap<Integer, FastList<ToReward>> _toReward; // Offline players that didn't get rewarded. =( poor guys, But they'll have a surprise
  151. +  
  152. +   public SiegeRewardManager()
  153. +   {
  154. +       _list = new FastList<RewardInfoz>();
  155. +       _toReward = new FastMap<Integer, FastList<ToReward>>();
  156. +       _log.info("SiegeRewardManager: Activated.");
  157. +   }
  158. +
  159. +   public static SiegeRewardManager getInstance()
  160. +   {
  161. +       if(_instance == null)
  162. +       {
  163. +           _instance = new SiegeRewardManager();
  164. +           _instance.loadConfigs();
  165. +           _instance.loadOfflineMembers();
  166. +       }
  167. +      
  168. +       return _instance;
  169. +   }
  170. +  
  171. +   private void loadOfflineMembers()
  172. +   {
  173. +       // Mysql connector
  174. +       Connection con = null;
  175. +      
  176. +       try
  177. +       {
  178. +           con = L2DatabaseFactory.getInstance().getConnection();
  179. +           PreparedStatement st = con.prepareStatement("select charId, itemId, count, castle_name, rewarded from reward_list");
  180. +           ResultSet rs = st.executeQuery();
  181. +          
  182. +           while(rs.next())
  183. +           {
  184. +               int charId = rs.getInt("charId");
  185. +               int itemId = rs.getInt("itemId");
  186. +               int count = rs.getInt("count");
  187. +               String castle_name = rs.getString("castle_name");
  188. +               boolean rewarded = rs.getBoolean("rewarded");
  189. +              
  190. +               if(rewarded)
  191. +               {
  192. +                   deleteRewarded(charId, itemId);
  193. +                   continue;
  194. +               }
  195. +              
  196. +               ToReward tr = new ToReward();
  197. +               tr.charId = charId;
  198. +               tr.itemId = itemId;
  199. +               tr.count = count;
  200. +               tr.castleName = castle_name;
  201. +              
  202. +               if(!_toReward.containsKey(charId))
  203. +               {
  204. +                   try // prevent errors
  205. +                   {
  206. +                       _toReward.put(charId, new FastList<ToReward>());
  207. +                   }
  208. +                   finally
  209. +                   {
  210. +                       _toReward.get(charId).add(tr);
  211. +                   }
  212. +               }
  213. +               else
  214. +                   _toReward.get(charId).add(tr);
  215. +              
  216. +           }
  217. +          
  218. +           rs.close();
  219. +           st.close();
  220. +       }
  221. +       catch(Exception e)
  222. +       {
  223. +           e.printStackTrace();
  224. +       }
  225. +       finally
  226. +       {
  227. +           try
  228. +           {
  229. +               con.close();
  230. +           }
  231. +           catch (SQLException e)
  232. +           {
  233. +               e.printStackTrace();
  234. +           }
  235. +       }
  236. +   }
  237. +
  238. +   public void deleteRewarded(int charId, int itemId)
  239. +   {
  240. +       // Mysql connector
  241. +       Connection con = null;
  242. +      
  243. +       try
  244. +       {
  245. +           con = L2DatabaseFactory.getInstance().getConnection();
  246. +           PreparedStatement st = con.prepareStatement("delete from reward_list where charId=? and itemId=?");
  247. +           st.setInt(1, charId);
  248. +           st.setInt(2, itemId);
  249. +           st.execute();
  250. +           st.close();
  251. +       }
  252. +       catch(Exception e)
  253. +       {
  254. +           e.printStackTrace();
  255. +       }
  256. +       finally
  257. +       {
  258. +           try
  259. +           {
  260. +               con.close();
  261. +           }
  262. +           catch (SQLException e)
  263. +           {
  264. +               e.printStackTrace();
  265. +           }
  266. +       }
  267. +   }
  268. +  
  269. +   private void loadConfigs()
  270. +   {
  271. +       try
  272. +       {
  273. +           Properties prop = new Properties();
  274. +           prop.load(new FileInputStream(new File("./config/SiegeRewards.properties")));
  275. +          
  276. +           ACTIVATED_SYSTEM = Boolean.parseBoolean(prop.getProperty("ActivateSystem", "false"));
  277. +           REWARD_ACTIVE_MEMBERS_ONLY = Boolean.parseBoolean(prop.getProperty("RewardOnlineOnly", "false"));
  278. +          
  279. +           if(ACTIVATED_SYSTEM)
  280. +           {
  281. +               String[] splitz = prop.getProperty("RewardInfo").split(";");
  282. +              
  283. +               for(String str: splitz)
  284. +               {
  285. +                   String[] splits = str.split(",");
  286. +                   _list.add(new RewardInfoz(splits));
  287. +               }
  288. +           }
  289. +       }
  290. +       catch(Exception e)
  291. +       {
  292. +           e.printStackTrace();
  293. +       }
  294. +       finally
  295. +       {
  296. +           _log.info("SiegeRewardManager Loaded: "+_list.size()+" Reword Item(s).");
  297. +       }
  298. +   }
  299. +
  300. +   public void storeDataBase(int charId, String castleName)
  301. +   {
  302. +       // Mysql connector
  303. +       Connection con = null;
  304. +      
  305. +       try
  306. +       {
  307. +           con = L2DatabaseFactory.getInstance().getConnection();
  308. +          
  309. +           for(RewardInfoz rewz : _list)
  310. +           {
  311. +               PreparedStatement st = con.prepareStatement("replace into reward_list values(?,?,?,?,?)");
  312. +               st.setInt(1, charId);
  313. +               st.setInt(2, rewz.getItemId());
  314. +               st.setInt(3, rewz.getItemCount());
  315. +               st.setString(4, castleName);
  316. +               st.setInt(5, 0);
  317. +               st.execute();
  318. +               st.close();
  319. +           }
  320. +       }
  321. +       catch(Exception e)
  322. +       {
  323. +           e.printStackTrace();
  324. +       }
  325. +       finally
  326. +       {
  327. +           try
  328. +           {
  329. +               con.close();
  330. +           }
  331. +           catch (SQLException e)
  332. +           {
  333. +               e.printStackTrace();
  334. +           }
  335. +       }
  336. +   }
  337. +  
  338. +   public void processWorldEnter(L2PcInstance activeChar)
  339. +   {
  340. +       if(_toReward.containsKey(activeChar.getObjectId()))
  341. +       {
  342. +           String castleName = "";
  343. +          
  344. +           for(ToReward tr :_toReward.get(activeChar.getObjectId()))
  345. +           {
  346. +               activeChar.addItem("SiegeReward", tr.itemId, tr.count, activeChar, true);
  347. +               castleName = tr.castleName;
  348. +               tr.rewarded = true;
  349. +           }
  350. +           activeChar.sendMessage("Congratulations! You have been rewarded for the " +castleName+ " siege victory!");
  351. +       }
  352. +   }
  353. +  
  354. +   public class ToReward { String castleName; int charId, itemId, count; boolean rewarded; }
  355. +  
  356. +   public class RewardInfoz
  357. +   {
  358. +       // Constants
  359. +       private final int _itemId;
  360. +       private final int _itemCount;
  361. +      
  362. +       public RewardInfoz(String...strings)
  363. +       {
  364. +           _itemId = Integer.parseInt(strings[0]);
  365. +           _itemCount = Integer.parseInt(strings[1]);
  366. +       }
  367. +
  368. +       /**
  369. +        * @return Returns the itemId.
  370. +        */
  371. +       public int getItemId()
  372. +       {
  373. +           return _itemId;
  374. +       }
  375. +
  376. +       /**
  377. +        * @return Returns the itemCount.
  378. +        */
  379. +       public int getItemCount()
  380. +       {
  381. +           return _itemCount;
  382. +       }
  383. +      
  384. +   }
  385. +
  386. +   public void notifySiegeEnded(L2Clan clan, String castleName)
  387. +   {
  388. +       for(L2ClanMember member : clan.getMembers())
  389. +       {
  390. +           if(member.isOnline())
  391. +           {
  392. +               L2PcInstance activeChar = member.getPlayerInstance();
  393. +              
  394. +               for(RewardInfoz tr : _list)
  395. +                   activeChar.addItem("SiegeReward", tr.getItemId(), tr.getItemCount(), activeChar, true);
  396. +
  397. +               activeChar.sendMessage("Congratulations! You have been rewarded for the " +castleName+ " siege victory!");
  398. +           }
  399. +           else
  400. +               storeDataBase(member.getObjectId(), castleName);
  401. +       }
  402. +   }
  403. +  
  404. +}
Advertisement
Add Comment
Please, Sign In to add comment