Advertisement
warc222

Lame: Siege Reward System

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