SHOW:
|
|
- or go back to the newest paste.
| 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" /> |