Advertisement
Sarada-L2

Vip System+Vip 2 Click Acis 394+

Mar 2nd, 2021
1,066
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 30.91 KB | None | 0 0
  1. diff --git a/config/CustomMods/Donate.ini b/config/CustomMods/Donate.ini
  2. index e69de29..71feaed 100644
  3. --- a/config/CustomMods/Donate.ini
  4. +++ b/config/CustomMods/Donate.ini
  5. @@ -0,0 +1,59 @@
  6. +#=============================================================
  7. +# VIP System
  8. +#=============================================================
  9. +EnableVipSystem = True
  10. +
  11. +# Enable / Disable Name Color
  12. +AllowVipNameColor = True
  13. +VipNameColor = 88AA88
  14. +
  15. +# Enable / Disable Title Color
  16. +AllowVipTitleColor = True
  17. +VipTitleColor = 88AA88
  18. +
  19. +# VIP Xp/Sp Rate
  20. +VIPXpSpRate = 1.5
  21. +# VIP Adena rate
  22. +VIPAdenaRate = 1.5
  23. +# VIP drop rate
  24. +VIPDropRate = 1.5
  25. +# VIP spoil rate
  26. +VIPSpoilRate = 1.5
  27. +
  28. +#Mensagem vip ao entrar em game
  29. +ScreenVIPMessageText = voce e vip por:
  30. +#Tempo de mensagem na tela
  31. +ScreenVIPMessageTime = 4
  32. +
  33. +#Mensagem quando acabar o periodo vip
  34. +ScreenVIPMessageExitText = seu periodo VIP terminou!
  35. +#Tempo de mensagem na tela Exit
  36. +ScreenVIPMessageTimeExit = 4
  37. +
  38. +#=============================================================
  39. +# VIP Item 1
  40. +#=============================================================
  41. +#registrar esse nome no item no xml abaixo
  42. +#<set name="handler" val="VipCoin" />
  43. +#Item Coin 1
  44. +VipCoin = 0
  45. +VipCoinDays = 1
  46. +
  47. +#=============================================================
  48. +# VIP Item 2
  49. +#=============================================================
  50. +#registrar esse nome no item no xml abaixo
  51. +#<set name="handler" val="VipCoin" />
  52. +#Item Coin 2
  53. +VipCoin2 = 0
  54. +VipCoinDays2 = 30
  55. +
  56. +#=============================================================
  57. +# VIP Item 3
  58. +#=============================================================
  59. +#registrar esse nome no item no xml abaixo
  60. +#<set name="handler" val="VipCoin" />
  61. +#Item Coin 3
  62. +VipCoin3 = 0
  63. +VipCoinDays3 = 45
  64. +
  65. diff --git a/java/net/sf/l2j/Config.java b/java/net/sf/l2j/Config.java
  66. index 53f4314..574f9e0 100644
  67. --- a/java/net/sf/l2j/Config.java
  68. +++ b/java/net/sf/l2j/Config.java
  69. @@ -43,6 +43,7 @@
  70. public static final String FLAGZONEMOD = "./config/CustomMods/FlagZone.ini";
  71. public static final String OFFLINEMOD = "./config/CustomMods/OfflineShop.ini";
  72. public static final String PROTECTION_MODS = "./config/CustomMods/ProtectionMods.ini";
  73. + public static final String DONATEMODS = "./config/CustomMods/Donate.ini";
  74. // --------------------------------------------------
  75. // Clans settings
  76. // --------------------------------------------------
  77. @@ -534,7 +535,25 @@
  78. public static boolean SERVER_LIST_TESTSERVER;
  79. public static boolean SERVER_LIST_PVPSERVER;
  80. public static boolean SERVER_GMONLY;
  81. -
  82. + public static boolean ENABLE_VIP_SYSTEM;
  83. + public static boolean ALLOW_VIP_NCOLOR;
  84. + public static int VIP_NCOLOR;
  85. + public static boolean ALLOW_VIP_TCOLOR;
  86. + public static int VIP_TCOLOR;
  87. + public static float VIP_XP_SP_RATE;
  88. + public static float VIP_ADENA_RATE;
  89. + public static float VIP_DROP_RATE;
  90. + public static float VIP_SPOIL_RATE;
  91. + public static String MESSAGE_VIP_ENTER;
  92. + public static int MESSAGE_TIME_VIP;
  93. + public static String MESSAGE_VIP_EXIT;
  94. + public static int MESSAGE_EXIT_VIP_TIME;
  95. + public static int VIP_COIN_ID1;
  96. + public static int VIP_DAYS_ID1;
  97. + public static int VIP_COIN_ID2;
  98. + public static int VIP_DAYS_ID2;
  99. + public static int VIP_COIN_ID3;
  100. + public static int VIP_DAYS_ID3;
  101. /** clients related */
  102. public static int DELETE_DAYS;
  103. public static int MAXIMUM_ONLINE_USERS;
  104. @@ -1188,6 +1207,30 @@
  105.  
  106. }
  107.  
  108. + private static final void loadDonate()
  109. + {
  110. + final ExProperties Donate = initProperties(DONATEMODS);
  111. + ENABLE_VIP_SYSTEM = Boolean.parseBoolean(Donate.getProperty("EnableVipSystem", "True"));
  112. + ALLOW_VIP_NCOLOR = Boolean.parseBoolean(Donate.getProperty("AllowVipNameColor", "True"));
  113. + VIP_NCOLOR = Integer.decode("0x" + Donate.getProperty("VipNameColor", "88AA88"));
  114. + ALLOW_VIP_TCOLOR = Boolean.parseBoolean(Donate.getProperty("AllowVipTitleColor", "True"));
  115. + VIP_TCOLOR = Integer.decode("0x" + Donate.getProperty("VipTitleColor", "88AA88"));
  116. + VIP_XP_SP_RATE = Float.parseFloat(Donate.getProperty("VIPXpSpRate", "1.5"));
  117. + VIP_ADENA_RATE = Float.parseFloat(Donate.getProperty("VIPAdenaRate", "1.5"));
  118. + VIP_DROP_RATE = Float.parseFloat(Donate.getProperty("VIPDropRate", "1.5"));
  119. + VIP_SPOIL_RATE = Float.parseFloat(Donate.getProperty("VIPSpoilRate", "1.5"));
  120. + MESSAGE_VIP_ENTER = Donate.getProperty("ScreenVIPMessageText", "Forbidden to Use Enchant near the bank!");
  121. + MESSAGE_TIME_VIP = Integer.parseInt(Donate.getProperty("ScreenVIPMessageTime", "6")) * 1000;
  122. + MESSAGE_VIP_EXIT = Donate.getProperty("ScreenVIPMessageExitText", "Forbidden to Use Enchant near the bank!");
  123. + MESSAGE_EXIT_VIP_TIME = Integer.parseInt(Donate.getProperty("ScreenVIPMessageTimeExit", "6")) * 1000;
  124. + VIP_COIN_ID1 = Integer.parseInt(Donate.getProperty("VipCoin", "6392"));
  125. + VIP_DAYS_ID1 = Integer.parseInt(Donate.getProperty("VipCoinDays", "1"));
  126. + VIP_COIN_ID2 = Integer.parseInt(Donate.getProperty("VipCoin2", "6393"));
  127. + VIP_DAYS_ID2 = Integer.parseInt(Donate.getProperty("VipCoinDays2", "2"));
  128. + VIP_COIN_ID3 = Integer.parseInt(Donate.getProperty("VipCoin3", "5557"));
  129. + VIP_DAYS_ID3 = Integer.parseInt(Donate.getProperty("VipCoinDays3", "3"));
  130. + }
  131. +
  132. private static final void loadFlag()
  133. {
  134. final ExProperties flagzone = initProperties(FLAGZONEMOD);
  135. @@ -1652,6 +1695,7 @@
  136. loadCommands();
  137. loadScheme();
  138. loadFlag();
  139. + loadDonate();
  140. loadBoss();
  141. loadNewChar();
  142. // players settings
  143. diff --git a/java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java b/java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
  144. index 56beb09..99efa93 100644
  145. --- a/java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
  146. +++ b/java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
  147. @@ -34,6 +34,7 @@
  148. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTarget;
  149. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTeleport;
  150. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTest;
  151. +import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminVip;
  152. import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminZone;
  153.  
  154. public class AdminCommandHandler
  155. @@ -42,6 +43,7 @@
  156.  
  157. protected AdminCommandHandler()
  158. {
  159. + registerHandler(new AdminVip());
  160. registerHandler(new AdminAdmin());
  161. registerHandler(new AdminAnnouncements());
  162. registerHandler(new AdminBookmark());
  163. diff --git a/java/net/sf/l2j/gameserver/handler/ItemHandler.java b/java/net/sf/l2j/gameserver/handler/ItemHandler.java
  164. index cf6ae07..dbc54c4 100644
  165. --- a/java/net/sf/l2j/gameserver/handler/ItemHandler.java
  166. +++ b/java/net/sf/l2j/gameserver/handler/ItemHandler.java
  167. @@ -29,6 +29,7 @@
  168. import net.sf.l2j.gameserver.handler.itemhandlers.SpecialXMas;
  169. import net.sf.l2j.gameserver.handler.itemhandlers.SpiritShots;
  170. import net.sf.l2j.gameserver.handler.itemhandlers.SummonItems;
  171. +import net.sf.l2j.gameserver.handler.itemhandlers.VipCoin;
  172. import net.sf.l2j.gameserver.model.item.kind.EtcItem;
  173.  
  174. public class ItemHandler
  175. @@ -37,6 +38,7 @@
  176.  
  177. protected ItemHandler()
  178. {
  179. + registerHandler(new VipCoin());
  180. registerHandler(new BeastSoulShots());
  181. registerHandler(new BeastSpices());
  182. registerHandler(new BeastSpiritShots());
  183. diff --git a/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminVip.java b/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminVip.java
  184. new file mode 100644
  185. index 0000000..6b957e3
  186. --- /dev/null
  187. +++ b/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminVip.java
  188. @@ -0,0 +1,213 @@
  189. +/*
  190. + * This program is free software; you can redistribute it and/or modify
  191. + * it under the terms of the GNU General Public License as published by
  192. + * the Free Software Foundation; either version 2, or (at your option)
  193. + * any later version.
  194. + *
  195. + * This program is distributed in the hope that it will be useful,
  196. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  197. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  198. + * GNU General Public License for more details.
  199. + *
  200. + * You should have received a copy of the GNU General Public License
  201. + * along with this program; if not, write to the Free Software
  202. + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  203. + * 02111-1307, USA.
  204. + *
  205. + * http://www.gnu.org/copyleft/gpl.html
  206. + */
  207. +package net.sf.l2j.gameserver.handler.admincommandhandlers;
  208. +
  209. +import java.sql.Connection;
  210. +import java.sql.PreparedStatement;
  211. +import java.util.StringTokenizer;
  212. +import java.util.logging.Level;
  213. +import java.util.logging.Logger;
  214. +
  215. +import net.sf.l2j.commons.pool.ConnectionPool;
  216. +
  217. +import net.sf.l2j.Config;
  218. +import net.sf.l2j.gameserver.data.xml.AdminData;
  219. +import net.sf.l2j.gameserver.enums.SayType;
  220. +import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
  221. +import net.sf.l2j.gameserver.model.World;
  222. +import net.sf.l2j.gameserver.model.WorldObject;
  223. +import net.sf.l2j.gameserver.model.actor.Player;
  224. +import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
  225. +/**
  226. + *
  227. + * @author Sarada
  228. + *
  229. + */
  230. +public class AdminVip implements IAdminCommandHandler
  231. +{
  232. + private static String[] _adminCommands = { "admin_setvip", "admin_removevip" };
  233. + private final static Logger _log = Logger.getLogger(AdminVip.class.getName());
  234. +
  235. + @Override
  236. + public void useAdminCommand(String command, Player activeChar)
  237. + {
  238. + if (command.startsWith("admin_setvip"))
  239. + {
  240. + StringTokenizer str = new StringTokenizer(command);
  241. +
  242. + WorldObject target = activeChar.getTarget();
  243. + Player player = null;
  244. +
  245. + if (target != null && target instanceof Player)
  246. + player = (Player)target;
  247. + else
  248. + player = activeChar;
  249. +
  250. + try
  251. + {
  252. + str.nextToken();
  253. + String time = str.nextToken();
  254. + if (str.hasMoreTokens())
  255. + {
  256. + String playername = time;
  257. + time = str.nextToken();
  258. + player = World.getInstance().getPlayer(playername);
  259. + doVip(activeChar, player, playername, time);
  260. + }
  261. + else
  262. + {
  263. + String playername = player.getName();
  264. + doVip(activeChar, player, playername, time);
  265. + }
  266. + }
  267. + catch(Exception e)
  268. + {
  269. + activeChar.sendMessage("Usage: //setvip <char_name> [time](in days)");
  270. + }
  271. +
  272. + player.broadcastUserInfo();
  273. +
  274. + if(player.isVip())
  275. + return;
  276. + }
  277. + else if(command.startsWith("admin_removevip"))
  278. + {
  279. + StringTokenizer str = new StringTokenizer(command);
  280. +
  281. + WorldObject target = activeChar.getTarget();
  282. + Player player = null;
  283. +
  284. + if (target instanceof Player)
  285. + player = (Player)target;
  286. + else
  287. + player = activeChar;
  288. +
  289. + try
  290. + {
  291. + str.nextToken();
  292. +
  293. + if (str.hasMoreTokens())
  294. + {
  295. + String playername = str.nextToken();
  296. + player = World.getInstance().getPlayer(playername);
  297. + removeVip(activeChar, player, playername);
  298. + }
  299. + else
  300. + {
  301. + String playername = player.getName();
  302. + removeVip(activeChar, player, playername);
  303. + }
  304. + }
  305. + catch(Exception e)
  306. + {
  307. + activeChar.sendMessage("Usage: //removevip <char_name>");
  308. + }
  309. +
  310. + player.broadcastUserInfo();
  311. +
  312. + if(player.isVip())
  313. + return;
  314. + }
  315. + return;
  316. + }
  317. +
  318. + public void doVip(Player activeChar, Player _player, String _playername, String _time)
  319. + {
  320. + int days = Integer.parseInt(_time);
  321. +
  322. + if (_player == null)
  323. + {
  324. + activeChar.sendMessage("Character not found.");
  325. + return;
  326. + }
  327. + if (_player.isVip())
  328. + {
  329. + activeChar.sendMessage("Player " + _playername + " is already an VIP.");
  330. + return;
  331. + }
  332. +
  333. + if(days > 0)
  334. + {
  335. + _player.setVip(true);
  336. + _player.setEndTime("vip", days);
  337. + _player.sendPacket(new CreatureSay(0,SayType.PARTYROOM_COMMANDER,"System","Dear player, you are now an VIP, congratulations."));
  338. +
  339. + try (Connection con = ConnectionPool.getConnection())
  340. + {
  341. + PreparedStatement statement = con.prepareStatement("UPDATE characters SET vip=1, vip_end=? WHERE obj_id=?");
  342. + statement.setLong(1, _player.getVipEndTime());
  343. + statement.setInt(2, _player.getObjectId());
  344. + statement.execute();
  345. + statement.close();
  346. +
  347. + if(Config.ALLOW_VIP_NCOLOR)
  348. + _player.getAppearance().setNameColor(Config.VIP_NCOLOR);
  349. +
  350. + if(Config.ALLOW_VIP_TCOLOR)
  351. + _player.getAppearance().setTitleColor(Config.VIP_TCOLOR);
  352. +
  353. + _player.broadcastUserInfo();
  354. + _player.sendSkillList();
  355. +
  356. + AdminData.getInstance().broadcastMessageToGMs("GM "+ activeChar.getName()+ " set an VIP status for player "+ _playername + " for " + _time + " day(s)");
  357. + }
  358. + catch (Exception e)
  359. + {
  360. + _log.log(Level.WARNING,"Something went wrong, check log folder for details", e);
  361. + }
  362. + }
  363. + }
  364. +
  365. + public void removeVip(Player activeChar, Player _player, String _playername)
  366. + {
  367. + if (!_player.isVip())
  368. + {
  369. + activeChar.sendMessage("Player " + _playername + " is not an VIP.");
  370. + return;
  371. + }
  372. +
  373. + _player.setVip(false);
  374. + _player.setVipEndTime(0);
  375. +
  376. + try (Connection con = ConnectionPool.getConnection())
  377. + {
  378. + PreparedStatement statement = con.prepareStatement("UPDATE characters SET Vip=0, Vip_end=0 WHERE obj_id=?");
  379. + statement.setInt(1, _player.getObjectId());
  380. + statement.execute();
  381. + statement.close();
  382. +
  383. + _player.getAppearance().setNameColor(0xFFFF77);
  384. + _player.getAppearance().setTitleColor(0xFFFF77);
  385. + _player.broadcastUserInfo();
  386. + _player.sendSkillList();
  387. +
  388. + AdminData.getInstance().broadcastMessageToGMs("GM "+activeChar.getName()+" removed Vip status of player "+ _playername);
  389. + }
  390. + catch (Exception e)
  391. + {
  392. + _log.log(Level.WARNING,"Something went wrong, check log folder for details", e);
  393. + }
  394. + }
  395. +
  396. + @Override
  397. + public String[] getAdminCommandList()
  398. + {
  399. + return _adminCommands;
  400. + }
  401. +}
  402. \ No newline at end of file
  403. diff --git a/java/net/sf/l2j/gameserver/handler/itemhandlers/VipCoin.java b/java/net/sf/l2j/gameserver/handler/itemhandlers/VipCoin.java
  404. new file mode 100644
  405. index 0000000..c80e15a
  406. --- /dev/null
  407. +++ b/java/net/sf/l2j/gameserver/handler/itemhandlers/VipCoin.java
  408. @@ -0,0 +1,149 @@
  409. +package net.sf.l2j.gameserver.handler.itemhandlers;
  410. +
  411. +import java.util.Calendar;
  412. +
  413. +import net.sf.l2j.Config;
  414. +import net.sf.l2j.gameserver.handler.IItemHandler;
  415. +import net.sf.l2j.gameserver.model.actor.Playable;
  416. +import net.sf.l2j.gameserver.model.actor.Player;
  417. +import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  418. +import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate;
  419. +
  420. +/**
  421. + *
  422. + * @author Sarada
  423. + *
  424. + */
  425. +public class VipCoin implements IItemHandler
  426. +{
  427. + private static final int ITEM_IDS[] = { Config.VIP_COIN_ID1, Config.VIP_COIN_ID2, Config.VIP_COIN_ID3};
  428. +
  429. + @Override
  430. + public void useItem(Playable playable, ItemInstance item, boolean forceUse)
  431. + {
  432. + if (!(playable instanceof Player))
  433. + return;
  434. +
  435. + Player activeChar = (Player)playable;
  436. +
  437. + int itemId = item.getItemId();
  438. +
  439. + if (itemId == Config.VIP_COIN_ID1)
  440. + {
  441. + if (activeChar.isInOlympiadMode())
  442. + {
  443. + activeChar.sendMessage("This item cannot be used on Olympiad Games.");
  444. + return;
  445. + }
  446. + else if (activeChar.isVip())
  447. + {
  448. + activeChar.sendMessage("You Are Vip!.");
  449. + return;
  450. + }
  451. + if (activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false))
  452. + {
  453. + if (activeChar.isVip())
  454. + {
  455. + long daysleft = (activeChar.getVipEndTime() - Calendar.getInstance().getTimeInMillis()) / 86400000L;
  456. + activeChar.setEndTime("vip", (int)(daysleft + Config.VIP_DAYS_ID1));
  457. + activeChar.sendMessage("Congratulations, You just received another " + Config.VIP_DAYS_ID1 + " day of VIP.");
  458. + }
  459. + else
  460. + {
  461. + activeChar.setVip(true);
  462. + activeChar.setEndTime("vip", Config.VIP_DAYS_ID1);
  463. + activeChar.sendMessage("Congrats, you just became VIP per " + Config.VIP_DAYS_ID1 + " day.");
  464. + }
  465. +
  466. + if (Config.ALLOW_VIP_NCOLOR && activeChar.isVip())
  467. + activeChar.getAppearance().setNameColor(Config.VIP_NCOLOR);
  468. +
  469. + if (Config.ALLOW_VIP_TCOLOR && activeChar.isVip())
  470. + activeChar.getAppearance().setTitleColor(Config.VIP_TCOLOR);
  471. +
  472. + activeChar.broadcastUserInfo();
  473. + activeChar.sendPacket(new EtcStatusUpdate(activeChar));
  474. + }
  475. + }
  476. +
  477. + if (itemId == Config.VIP_COIN_ID2)
  478. + {
  479. + if (activeChar.isInOlympiadMode())
  480. + {
  481. + activeChar.sendMessage("This item cannot be used on Olympiad Games.");
  482. + return;
  483. + }
  484. + else if (activeChar.isVip())
  485. + {
  486. + activeChar.sendMessage("You Are Vip!.");
  487. + return;
  488. + }
  489. + if (activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false))
  490. + {
  491. + if (activeChar.isVip())
  492. + {
  493. + long daysleft = (activeChar.getVipEndTime() - Calendar.getInstance().getTimeInMillis()) / 86400000L;
  494. + activeChar.setEndTime("vip", (int)(daysleft + Config.VIP_DAYS_ID2));
  495. + activeChar.sendMessage("Congratulations, You just received another " + Config.VIP_DAYS_ID2 + " day of VIP.");
  496. + }
  497. + else
  498. + {
  499. + activeChar.setVip(true);
  500. + activeChar.setEndTime("vip", Config.VIP_DAYS_ID2);
  501. + activeChar.sendMessage("Congrats, you just became VIP per " + Config.VIP_DAYS_ID2 + " day.");
  502. + }
  503. +
  504. + if (Config.ALLOW_VIP_NCOLOR && activeChar.isVip())
  505. + activeChar.getAppearance().setNameColor(Config.VIP_NCOLOR);
  506. +
  507. + if (Config.ALLOW_VIP_TCOLOR && activeChar.isVip())
  508. + activeChar.getAppearance().setTitleColor(Config.VIP_TCOLOR);
  509. +
  510. + activeChar.broadcastUserInfo();
  511. + activeChar.sendPacket(new EtcStatusUpdate(activeChar));
  512. + }
  513. + }
  514. +
  515. + if (itemId == Config.VIP_COIN_ID3)
  516. + {
  517. + if (activeChar.isInOlympiadMode())
  518. + {
  519. + activeChar.sendMessage("This item cannot be used on Olympiad Games.");
  520. + return;
  521. + }
  522. + else if (activeChar.isVip())
  523. + {
  524. + activeChar.sendMessage("You Are Vip!.");
  525. + return;
  526. + }
  527. + if (activeChar.destroyItem("Consume", item.getObjectId(), 1, null, false))
  528. + {
  529. + if (activeChar.isVip())
  530. + {
  531. + long daysleft = (activeChar.getVipEndTime() - Calendar.getInstance().getTimeInMillis()) / 86400000L;
  532. + activeChar.setEndTime("vip", (int)(daysleft + Config.VIP_DAYS_ID3));
  533. + activeChar.sendMessage("Congratulations, You just received another " + Config.VIP_DAYS_ID3 + " day of VIP.");
  534. + }
  535. + else
  536. + {
  537. + activeChar.setVip(true);
  538. + activeChar.setEndTime("vip", Config.VIP_DAYS_ID3);
  539. + activeChar.sendMessage("Congrats, you just became VIP per " + Config.VIP_DAYS_ID3 + " day.");
  540. + }
  541. +
  542. + if (Config.ALLOW_VIP_NCOLOR && activeChar.isVip())
  543. + activeChar.getAppearance().setNameColor(Config.VIP_NCOLOR);
  544. +
  545. + if (Config.ALLOW_VIP_TCOLOR && activeChar.isVip())
  546. + activeChar.getAppearance().setTitleColor(Config.VIP_TCOLOR);
  547. +
  548. + activeChar.broadcastUserInfo();
  549. + activeChar.sendPacket(new EtcStatusUpdate(activeChar));
  550. + }
  551. + }
  552. + }
  553. + public int[] getItemIds()
  554. + {
  555. + return ITEM_IDS;
  556. + }
  557. +}
  558. diff --git a/java/net/sf/l2j/gameserver/model/actor/Player.java b/java/net/sf/l2j/gameserver/model/actor/Player.java
  559. index de2c3e1..6c99cca 100644
  560. --- a/java/net/sf/l2j/gameserver/model/actor/Player.java
  561. +++ b/java/net/sf/l2j/gameserver/model/actor/Player.java
  562. @@ -5,6 +5,7 @@
  563. import java.sql.ResultSet;
  564. import java.util.ArrayList;
  565. import java.util.Arrays;
  566. +import java.util.Calendar;
  567. import java.util.Collection;
  568. import java.util.Comparator;
  569. import java.util.HashMap;
  570. @@ -237,7 +238,7 @@
  571. private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?";
  572.  
  573. private static final String INSERT_CHARACTER = "INSERT INTO characters (account_name,obj_Id,char_name,level,maxHp,curHp,maxCp,curCp,maxMp,curMp,face,hairStyle,hairColor,sex,exp,sp,karma,pvpkills,pkkills,clanid,race,classid,deletetime,cancraft,title,accesslevel,online,isin7sdungeon,clan_privs,wantspeace,base_class,nobless,power_grade) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  574. - private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=? WHERE obj_id=?";
  575. + private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,face=?,hairStyle=?,hairColor=?,sex=?,heading=?,x=?,y=?,z=?,exp=?,expBeforeDeath=?,sp=?,karma=?,pvpkills=?,pkkills=?,clanid=?,race=?,classid=?,deletetime=?,title=?,accesslevel=?,online=?,isin7sdungeon=?,clan_privs=?,wantspeace=?,base_class=?,onlinetime=?,punish_level=?,punish_timer=?,nobless=?,power_grade=?,subpledge=?,lvl_joined_academy=?,apprentice=?,sponsor=?,varka_ketra_ally=?,clan_join_expiry_time=?,clan_create_expiry_time=?,char_name=?,death_penalty_level=?,vip=?,vip_end=? WHERE obj_id=?";
  576. private static final String RESTORE_CHARACTER = "SELECT * FROM characters WHERE obj_id=?";
  577.  
  578. private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC";
  579. @@ -320,7 +321,9 @@
  580. private int _mountNpcId;
  581. private int _mountLevel;
  582. private int _mountObjectId;
  583. -
  584. + /** VIP System */
  585. + private boolean _isVip = false;
  586. + private long _vip_endTime = 0;
  587. protected int _throneId;
  588.  
  589. private TeleportMode _teleportMode = TeleportMode.NONE;
  590. @@ -4344,6 +4347,8 @@
  591. player.setAllianceWithVarkaKetra(rs.getInt("varka_ketra_ally"));
  592.  
  593. player.setDeathPenaltyBuffLevel(rs.getInt("death_penalty_level"));
  594. + player.setVip(rs.getInt("vip") == 1 ? true : false);
  595. + player.setVipEndTime(rs.getLong("vip_end"));
  596.  
  597. // Set the position of the Player.
  598. player.getPosition().set(rs.getInt("x"), rs.getInt("y"), rs.getInt("z"), rs.getInt("heading"));
  599. @@ -4574,7 +4579,9 @@
  600. ps.setLong(44, getClanCreateExpiryTime());
  601. ps.setString(45, getName());
  602. ps.setLong(46, getDeathPenaltyBuffLevel());
  603. - ps.setInt(47, getObjectId());
  604. + ps.setInt(47, isVip() ? 1 : 0);
  605. + ps.setLong(48, getVipEndTime());
  606. + ps.setInt(49, getObjectId());
  607.  
  608. ps.execute();
  609. }
  610. @@ -4705,7 +4712,25 @@
  611. LOGGER.error("Couldn't store player effects.", e);
  612. }
  613. }
  614. + public boolean isVip()
  615. + {
  616. + return _isVip;
  617. + }
  618.  
  619. + public void setVip(boolean val)
  620. + {
  621. + _isVip = val;
  622. + }
  623. +
  624. + public long getVipEndTime()
  625. + {
  626. + return _vip_endTime;
  627. + }
  628. +
  629. + public void setVipEndTime(long val)
  630. + {
  631. + _vip_endTime = val;
  632. + }
  633. /**
  634. * @return True if the Player is online.
  635. */
  636. @@ -4713,7 +4738,22 @@
  637. {
  638. return _isOnline;
  639. }
  640. -
  641. + /**
  642. + * Sets the end time.
  643. + * @param process the process
  644. + * @param val the val
  645. + */
  646. + public void setEndTime(String process, int val)
  647. + {
  648. + Calendar calendar = Calendar.getInstance();
  649. + calendar.add(Calendar.DAY_OF_MONTH, val);
  650. + long end_day = calendar.getTimeInMillis();
  651. +
  652. + if(process.equals("vip"))
  653. + _vip_endTime = end_day;
  654. + /*if(process.equals("aio"))
  655. + _aio_endTime = end_day;*/
  656. + }
  657. /**
  658. * @return an int interpretation of online status.
  659. */
  660. diff --git a/java/net/sf/l2j/gameserver/model/actor/instance/Monster.java b/java/net/sf/l2j/gameserver/model/actor/instance/Monster.java
  661. index 51afb41..8663495 100644
  662. --- a/java/net/sf/l2j/gameserver/model/actor/instance/Monster.java
  663. +++ b/java/net/sf/l2j/gameserver/model/actor/instance/Monster.java
  664. @@ -70,6 +70,7 @@
  665. super(objectId, template);
  666. }
  667.  
  668. + @SuppressWarnings("cast")
  669. @Override
  670. protected void calculateRewards(Creature creature)
  671. {
  672. @@ -163,7 +164,16 @@
  673.  
  674. long exp = expSp[0];
  675. int sp = expSp[1];
  676. -
  677. + if (attacker instanceof Player)
  678. + {
  679. + Player a = (Player)attacker;
  680. +
  681. + if (a.isVip())
  682. + {
  683. + exp *= Config.VIP_XP_SP_RATE;
  684. + sp *= Config.VIP_XP_SP_RATE;
  685. + }
  686. + }
  687. exp *= 1 - penalty;
  688.  
  689. // Test over-hit.
  690. @@ -234,7 +244,16 @@
  691. final int[] expSp = calculateExpAndSp(levelDiff, partyDmg, totalDamage);
  692. long exp = expSp[0];
  693. int sp = expSp[1];
  694. -
  695. + if (attacker instanceof Player)
  696. + {
  697. + Player a = (Player)attacker;
  698. +
  699. + if (a.isVip())
  700. + {
  701. + exp *= Config.VIP_XP_SP_RATE;
  702. + sp *= Config.VIP_XP_SP_RATE;
  703. + }
  704. + }
  705. exp *= partyMul;
  706. sp *= partyMul;
  707.  
  708. @@ -514,12 +533,13 @@
  709.  
  710. /**
  711. * Calculate the quantity for a specific drop.
  712. + * @param lastAttacker
  713. * @param drop : The {@link DropData} informations to use.
  714. * @param levelModifier : The level modifier (will be subtracted from drop chance).
  715. * @param isSweep : If True, use the spoil drop chance.
  716. * @return An {@link IntIntHolder} corresponding to the item id and count.
  717. */
  718. - private IntIntHolder calculateRewardItem(DropData drop, int levelModifier, boolean isSweep)
  719. + private IntIntHolder calculateRewardItem(Player lastAttacker,DropData drop, int levelModifier, boolean isSweep)
  720. {
  721. // Get default drop chance
  722. double dropChance = drop.getChance();
  723. @@ -547,11 +567,23 @@
  724. // Applies Drop rates
  725. if (drop.getItemId() == 57)
  726. dropChance *= Config.RATE_DROP_ADENA;
  727. + if (lastAttacker.isVip())
  728. + {
  729. + dropChance *= Config.VIP_ADENA_RATE;
  730. + }
  731. +
  732. else if (isSweep)
  733. dropChance *= Config.RATE_DROP_SPOIL;
  734. + if (lastAttacker.isVip())
  735. + {
  736. + dropChance *= Config.VIP_SPOIL_RATE;
  737. + }
  738. else
  739. dropChance *= (isRaidBoss()) ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS;
  740. -
  741. + if (lastAttacker.isVip())
  742. + {
  743. + dropChance *= Config.VIP_DROP_RATE;
  744. + }
  745. // Set our limits for chance of drop
  746. if (dropChance < 1)
  747. dropChance = 1;
  748. @@ -589,11 +621,12 @@
  749. * Calculate the quantity for a specific drop, according its {@link DropCategory}.<br>
  750. * <br>
  751. * Only a maximum of ONE item from a {@link DropCategory} is allowed to be dropped.
  752. + * @param lastAttacker
  753. * @param cat : The {@link DropCategory} informations to use.
  754. * @param levelModifier : The level modifier (will be subtracted from drop chance).
  755. * @return An {@link IntIntHolder} corresponding to the item id and count.
  756. */
  757. - private IntIntHolder calculateCategorizedRewardItem(DropCategory cat, int levelModifier)
  758. + private IntIntHolder calculateCategorizedRewardItem(Player lastAttacker,DropCategory cat, int levelModifier)
  759. {
  760. if (cat == null)
  761. return null;
  762. @@ -641,9 +674,16 @@
  763. double dropChance = drop.getChance();
  764. if (drop.getItemId() == 57)
  765. dropChance *= Config.RATE_DROP_ADENA;
  766. + if (lastAttacker.isVip())
  767. + {
  768. + dropChance *= Config.VIP_ADENA_RATE;
  769. + }
  770. else
  771. dropChance *= (isRaidBoss()) ? Config.RATE_DROP_ITEMS_BY_RAID : Config.RATE_DROP_ITEMS;
  772. -
  773. + if (lastAttacker.isVip())
  774. + {
  775. + dropChance *= Config.VIP_DROP_RATE;
  776. + }
  777. if (dropChance < DropData.MAX_CHANCE)
  778. dropChance = DropData.MAX_CHANCE;
  779.  
  780. @@ -838,7 +878,7 @@
  781. {
  782. for (DropData drop : cat.getAllDrops())
  783. {
  784. - holder = calculateRewardItem(drop, levelModifier, true);
  785. + holder = calculateRewardItem(player,drop, levelModifier, true);
  786. if (holder == null)
  787. continue;
  788.  
  789. @@ -854,10 +894,10 @@
  790. if (drop == null)
  791. continue;
  792.  
  793. - holder = calculateRewardItem(drop, levelModifier, false);
  794. + holder = calculateRewardItem(player,drop, levelModifier, false);
  795. }
  796. else
  797. - holder = calculateCategorizedRewardItem(cat, levelModifier);
  798. + holder = calculateCategorizedRewardItem(player,cat, levelModifier);
  799.  
  800. if (holder == null)
  801. continue;
  802. diff --git a/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java b/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
  803. index 3e30838..9f6addd 100644
  804. --- a/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
  805. +++ b/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
  806. @@ -1,5 +1,7 @@
  807. package net.sf.l2j.gameserver.network.clientpackets;
  808.  
  809. +import java.util.Calendar;
  810. +import java.util.Date;
  811. import java.util.Map.Entry;
  812.  
  813. import net.sf.l2j.Config;
  814. @@ -37,6 +39,7 @@
  815. import net.sf.l2j.gameserver.network.serverpackets.Die;
  816. import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate;
  817. import net.sf.l2j.gameserver.network.serverpackets.ExMailArrived;
  818. +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
  819. import net.sf.l2j.gameserver.network.serverpackets.ExStorageMaxCount;
  820. import net.sf.l2j.gameserver.network.serverpackets.FriendList;
  821. import net.sf.l2j.gameserver.network.serverpackets.HennaInfo;
  822. @@ -241,6 +244,16 @@
  823. player.sendMessage("I'm sorry, but multibox is not allowed here.");
  824. player.logout(true);
  825. }
  826. +
  827. + if(player.isVip())
  828. + onEnterVip(player);
  829. +
  830. + if(Config.ALLOW_VIP_NCOLOR && player.isVip())
  831. + player.getAppearance().setNameColor(Config.VIP_NCOLOR);
  832. +
  833. + if(Config.ALLOW_VIP_TCOLOR && player.isVip())
  834. + player.getAppearance().setTitleColor(Config.VIP_TCOLOR);
  835. +
  836. // If the Player is a Dark Elf, check for Shadow Sense at night.
  837. if (player.getRace() == ClassRace.DARK_ELF && player.hasSkill(L2Skill.SKILL_SHADOW_SENSE))
  838. player.sendPacket(SystemMessage.getSystemMessage((GameTimeTaskManager.getInstance().isNight()) ? SystemMessageId.NIGHT_S1_EFFECT_APPLIES : SystemMessageId.DAY_S1_EFFECT_DISAPPEARS).addSkillName(L2Skill.SKILL_SHADOW_SENSE));
  839. @@ -320,7 +333,25 @@
  840. {
  841. activeChar.sendMessage("Next Restart: " + Restart.getInstance().getRestartNextTime());
  842. }
  843. -
  844. + private static void onEnterVip(Player activeChar)
  845. + {
  846. + long now = Calendar.getInstance().getTimeInMillis();
  847. + long endDay = activeChar.getVipEndTime();
  848. + if(now > endDay)
  849. + {
  850. + activeChar.setVip(false);
  851. + activeChar.setVipEndTime(0);
  852. + //activeChar.sendPacket(new CreatureSay(0,Say2.PARTY,"System","Your VIP period ends."));
  853. + activeChar.sendPacket(new ExShowScreenMessage(Config.MESSAGE_VIP_EXIT, Config.MESSAGE_EXIT_VIP_TIME));
  854. + }
  855. + else
  856. + {
  857. + Date dt = new Date(endDay);
  858. + if(activeChar.isVip())
  859. + //activeChar.sendMessage("Your VIP period ends at: " + dt);
  860. + activeChar.sendPacket(new ExShowScreenMessage(Config.MESSAGE_VIP_ENTER + dt, Config.MESSAGE_TIME_VIP));
  861. + }
  862. + }
  863. @Override
  864. protected boolean triggersOnActionRequest()
  865. {
  866.  
  867. Colocar num bloco de notas e salvar como SQL e executar em seu navicat
  868. +ALTER TABLE `characters` ADD COLUMN `vip` decimal(1,0) NOT NULL DEFAULT 0 AFTER `death_penalty_level`;
  869. +ALTER TABLE `characters` ADD COLUMN `vip_end` decimal(20,0) NOT NULL DEFAULT 0 AFTER `vip`;
  870.  
  871. Registrar admincomands no xml
  872. +<aCar name="admin_setvip" accessLevel="7" />
  873. +<aCar name="admin_removevip" accessLevel="7" />
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement