Untitled
//noel /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.nguyenduong.event; import com.nguyenduong.bot.Bot; import com.nguyenduong.bot.SantaClaus; import com.nguyenduong.bot.move.SantaClausMove; import com.nguyenduong.constants.ItemOptionName; import com.nguyenduong.constants.CMDInputDialog; import com.nguyenduong.constants.CMDMenu; import com.nguyenduong.constants.ConstTime; import com.nguyenduong.constants.ItemName; import com.nguyenduong.constants.MapName; import com.nguyenduong.constants.MobName; import com.nguyenduong.constants.NpcName; import com.nguyenduong.effect.Effect; import com.nguyenduong.event.eventpoint.EventPoint; import com.nguyenduong.item.Item; import com.nguyenduong.item.ItemFactory; import com.nguyenduong.lib.RandomCollection; import com.nguyenduong.map.Map; import com.nguyenduong.map.MapManager; import com.nguyenduong.map.zones.Zone; import com.nguyenduong.mob.Mob; import com.nguyenduong.model.Char; import com.nguyenduong.model.InputDialog; import com.nguyenduong.model.Menu; import com.nguyenduong.npc.Npc; import com.nguyenduong.npc.NpcFactory; import com.nguyenduong.option.ItemOption; import com.nguyenduong.server.GlobalService; import com.nguyenduong.server.ServerManager; import com.nguyenduong.store.ItemStore; import com.nguyenduong.store.StoreManager; import com.nguyenduong.util.NinjaUtils; import java.time.Duration; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import com.nguyenduong.server.Config; import java.util.Calendar; public class Noel extends Event { public static final String TOP_DECORATION_GIFT_BOX = "decoration_gift_box"; public static final String TOP_KILL_REINDEER_KING = "kill_reindeer_king"; public static final String TOP_CHOCOLATE_CAKE = "chocholate_cake"; public static final String TOP_KILL_SNOWMAN = "kill_snowman"; public static final String RECEIVED_GIFT = "received_gift"; private static final int LAM_BANH_KHUC_DAU_TAY = 0; private static final int LAM_BANH_KHUC_CHOCOLATE = 1; private static final int LAM_HOP_QUA = 2; private static final int DOI_DIEM_NGUOI_TUYET_XU = 3; private static final int DOI_DIEM_NGUOI_TUYET_LUONG = 4; private RandomCollection<Integer> vipItems = new RandomCollection<>(); private ZonedDateTime start, end; public Noel() { setId(Event.NOEL); endTime = Calendar.getInstance(); endTime.set(Config.getInstance().getEventYear(), Config.getInstance().getEventMonth() - 1, // Calendar.MONTH bắt đầu từ 0 Config.getInstance().getEventDay(), Config.getInstance().getEventHour(), Config.getInstance().getEventMinute(), Config.getInstance().getEventSecond()); itemsThrownFromMonsters.add(5, ItemName.BO); itemsThrownFromMonsters.add(5, ItemName.KEM); itemsThrownFromMonsters.add(5, ItemName.DUONG_BOT); itemsThrownFromMonsters.add(3, ItemName.TRAI_CHAU); itemsThrownFromMonsters.add(3, ItemName.RUY_BANG); itemsThrownFromMonsters.add(3, ItemName.CHUONG_VANG); itemsThrownFromMonsters.add(0.005, ItemName.LANH_DUOC); keyEventPoint.add(EventPoint.DIEM_TIEU_XAI); keyEventPoint.add(TOP_DECORATION_GIFT_BOX); keyEventPoint.add(TOP_KILL_REINDEER_KING); keyEventPoint.add(TOP_CHOCOLATE_CAKE); keyEventPoint.add(TOP_KILL_SNOWMAN); keyEventPoint.add(RECEIVED_GIFT); itemsRecFromGoldItem.add(0.5, ItemName.SHIRAIJI); itemsRecFromGoldItem.add(0.5, ItemName.HAJIRO); itemsRecFromGoldItem.add(2, ItemName.PHUONG_HOANG_BANG); itemsRecFromGoldItem.add(1, ItemName.PET_UNG_LONG); itemsRecFromGoldItem.add(2, ItemName.GAY_TRAI_TIM); itemsRecFromGoldItem.add(2, ItemName.GAY_MAT_TRANG); itemsRecFromGoldItem.add(15, ItemName.DA_DANH_VONG_CAP_1); itemsRecFromGoldItem.add(12, ItemName.DA_DANH_VONG_CAP_2); itemsRecFromGoldItem.add(9, ItemName.DA_DANH_VONG_CAP_3); itemsRecFromGoldItem.add(7, ItemName.DA_DANH_VONG_CAP_4); itemsRecFromGoldItem.add(5, ItemName.DA_DANH_VONG_CAP_5); itemsRecFromGoldItem.add(15, ItemName.VIEN_LINH_HON_CAP_1); itemsRecFromGoldItem.add(12, ItemName.VIEN_LINH_HON_CAP_2); itemsRecFromGoldItem.add(9, ItemName.VIEN_LINH_HON_CAP_3); itemsRecFromGoldItem.add(7, ItemName.VIEN_LINH_HON_CAP_4); itemsRecFromGoldItem.add(5, ItemName.VIEN_LINH_HON_CAP_5); itemsRecFromGold2Item.add(0.5, ItemName.SHIRAIJI); itemsRecFromGold2Item.add(0.5, ItemName.HAJIRO); itemsRecFromGold2Item.add(2, ItemName.PHUONG_HOANG_BANG); itemsRecFromGold2Item.add(1, ItemName.PET_UNG_LONG); itemsRecFromGold2Item.add(2, ItemName.GAY_TRAI_TIM); itemsRecFromGold2Item.add(2, ItemName.GAY_MAT_TRANG); vipItems.add(1, ItemName.PHUONG_HOANG_BANG); vipItems.add(2, ItemName.PET_UNG_LONG); vipItems.add(2, ItemName.TUAN_LOC); vipItems.add(2, ItemName.HAKAIRO_YOROI); vipItems.add(2, ItemName.SHIRAIJI); vipItems.add(2, ItemName.HAJIRO); vipItems.add(2, ItemName.GAY_TRAI_TIM); vipItems.add(2, ItemName.GAY_MAT_TRANG); timerSpawnSantaClaus(); } private void timerSpawnSantaClaus() { LocalDateTime localNow = LocalDateTime.now(); ZoneId currentZone = ZoneId.of("Asia/Ho_Chi_Minh"); ZonedDateTime zonedNow = ZonedDateTime.of(localNow, currentZone); start = zonedNow.withMonth(12).withDayOfMonth(24).withHour(22).withMinute(0).withSecond(0); end = zonedNow.withMonth(12).withDayOfMonth(25).withHour(2).withMinute(0).withSecond(0); if (zonedNow.isAfter(start) && zonedNow.isBefore(end)) { start = zonedNow.plusMinutes(5);// thời gian khởi động server } if (zonedNow.compareTo(start) <= 0) { Duration duration = Duration.between(zonedNow, start); long initalDelay = duration.getSeconds(); Runnable runnable = new Runnable() { public void run() { spawnSantaClaus(); } }; ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(runnable, initalDelay, 24 * 60 * 60, TimeUnit.SECONDS); } } private void spawnSantaClaus() { GlobalService.getInstance().chat("Hệ thống", "Ông già Noel đã xuất hiện, hãy tới nhặt quà dưới gốc Cây thông."); int[] maps = {MapName.TRUONG_HIROSAKI, MapName.TRUONG_OOKAZA, MapName.TRUONG_HARUNA, MapName.LANG_CHAI, MapName.LANG_CHAKUMI, MapName.LANG_ECHIGO, MapName.LANG_FEARRI, MapName.LANG_KOJIN, MapName.LANG_OSHIN, MapName.LANG_SANZU, MapName.LANG_SHIIBA, MapName.LANG_TONE}; for (int mapID : maps) { Map map = MapManager.getInstance().find(mapID); Zone z = map.rand(); Npc npc = z.getNpc(NpcName.CAY_THONG); if (npc != null) { Bot bot = new SantaClaus(-NinjaUtils.nextInt(100000, 200000)); bot.setDefault(); bot.recovery(); bot.setXY((short) npc.cx, (short) npc.cy); bot.setMove(new SantaClausMove(npc)); z.join(bot); } } } public void initEffectCool() { NinjaUtils.schedule(() -> { GlobalService.getInstance().chat("Người tuyết", "Màn đêm đã buông, làn gió lạnh lẽo đang thổi tới trên khắp bản đồ, các ngươi hãy cẩn thận nhé!"); ServerManager.getChars().stream().forEach((Char _char) -> { _char.serverMessage("Lạnh quá, sức đánh và khả năng hồi phục của bạn bị giảm đi 50%, hãy tìm gosho để mua lãnh dược!"); }); }, 6, 0, 0); NinjaUtils.schedule(() -> { GlobalService.getInstance().chat("Người tuyết", "Trời sáng rồi, thật tuyệt!"); }, 18, 0, 0); } @Override public void initStore() { StoreManager.getInstance().addItem((byte) StoreManager.TYPE_MISCELLANEOUS, ItemStore.builder() .id(996) .itemID(ItemName.CHOCOLATE) .gold(20) .expire(ConstTime.FOREVER) .build()); StoreManager.getInstance().addItem((byte) StoreManager.TYPE_MISCELLANEOUS, ItemStore.builder() .id(997) .itemID(ItemName.DAU_TAY) .coin(100000) .expire(ConstTime.FOREVER) .build()); StoreManager.getInstance().addItem((byte) StoreManager.TYPE_MISCELLANEOUS, ItemStore.builder() .id(998) .itemID(ItemName.TUAN_THU_LENH) .gold(20) .expire(ConstTime.FOREVER) .build()); List<ItemOption> options = new ArrayList<>(); StoreManager.getInstance().addItem((byte) StoreManager.TYPE_MISCELLANEOUS, ItemStore.builder() .id(999) .itemID(ItemName.TUAN_LOC) .gold(500) .options(options) .expire(ConstTime.MONTH) .build()); StoreManager.getInstance().addItem((byte) StoreManager.TYPE_MISCELLANEOUS, ItemStore.builder() .id(1000) .itemID(ItemName.LANH_DUOC) .gold(20) .expire(ConstTime.DAY * 7) .build()); StoreManager.getInstance().addItem((byte) StoreManager.TYPE_MISCELLANEOUS, ItemStore.builder() .id(1001) .itemID(ItemName.QUA_TRANG_TRI) .gold(20) .expire(ConstTime.FOREVER) .build()); } @Override public void action(Char p, int type, int amount) { if (isEnded()) { p.serverMessage("Sự kiện đã kết thúc"); return; } switch (type) { case LAM_BANH_KHUC_DAU_TAY: makeStrawberryCake(p, amount); break; case LAM_BANH_KHUC_CHOCOLATE: makeChocolateCake(p, amount); break; case LAM_HOP_QUA: makeGiftBox(p, amount); break; case DOI_DIEM_NGUOI_TUYET_XU: snowmanKilledCoin(p, amount); break; case DOI_DIEM_NGUOI_TUYET_LUONG: snowmanKilledGold(p, amount); break; } } private void makeStrawberryCake(Char p, int amount) { int[][] itemRequires = new int[][]{{ItemName.BO, 5}, {ItemName.KEM, 5}, {ItemName.DUONG_BOT, 5}, {ItemName.DAU_TAY, 2}}; int itemIdReceive = ItemName.BANH_KHUC_CAY_DAU_TAY; makeEventItem(p, amount, itemRequires, 0, 0, 0, itemIdReceive); } private void makeChocolateCake(Char p, int amount) { int[][] itemRequires = new int[][]{{ItemName.BO, 5}, {ItemName.KEM, 5}, {ItemName.DUONG_BOT, 5}, {ItemName.CHOCOLATE, 1}}; int itemIdReceive = ItemName.BANH_KHUC_CAY_CHOCOLATE; boolean isDone = makeEventItem(p, amount, itemRequires, 0, 0, 0, itemIdReceive); if (isDone) { p.getEventPoint().addPoint(Noel.TOP_CHOCOLATE_CAKE, amount); p.getEventPoint().addPoint(EventPoint.DIEM_TIEU_XAI, amount); } } private void makeGiftBox(Char p, int amount) { int[][] itemRequires = new int[][]{{ItemName.TRAI_CHAU, 3}, {ItemName.RUY_BANG, 3}, {ItemName.CHUONG_VANG, 3}}; int itemIdReceive = ItemName.HOP_QUA_TRANG_TRI; boolean isDone = makeEventItem(p, amount, itemRequires, 20, 0, 0, itemIdReceive); if (isDone) { p.getEventPoint().addPoint(EventPoint.DIEM_TIEU_XAI, amount); } } private void snowmanKilledCoin(Char p, int amount) { if (isCanExchangeSnowmanSkilledPoint(p, amount)) { useEventItem(p, amount, 0, 200000, itemsRecFromCoinItem); if (NinjaUtils.nextInt(1000) == 0) { Item item = new Item(ItemName.LAM_SON_DA); p.addItemToBag(item); } p.getEventPoint().subPoint(TOP_KILL_SNOWMAN, 20 * amount); } } private void snowmanKilledGold(Char p, int amount) { if (isCanExchangeSnowmanSkilledPoint(p, amount)) { useEventItem(p, amount, 20, 0, itemsRecFromGold2Item); if (NinjaUtils.nextInt(2000) == 0) { Item item = new Item(ItemName.TRUC_BACH_THIEN_LU); p.addItemToBag(item); } p.getEventPoint().subPoint(TOP_KILL_SNOWMAN, 20 * amount); } } private boolean isCanExchangeSnowmanSkilledPoint(Char p, int amount) { if (p.getEventPoint().getPoint(TOP_KILL_SNOWMAN) < 20 * amount) { p.getService().npcChat(NpcName.TIEN_NU, "Ngươi cần tối thiểu " + NinjaUtils.getCurrency(20 * amount) + " điểm tiêu diệt người tuyết mới có thể trao đổi."); return false; } return true; } @Override public void menu(Char p) { p.menus.clear(); p.menus.add(new Menu(CMDMenu.EXECUTE, "Làm bánh", () -> { p.menus.add(new Menu(CMDMenu.EXECUTE, "Bánh khúc dâu tây", () -> { p.setInput(new InputDialog(CMDInputDialog.EXECUTE, "Bánh khúc dâu tây", () -> { InputDialog input = p.getInput(); try { int number = input.intValue(); action(p, LAM_BANH_KHUC_DAU_TAY, number); } catch (NumberFormatException e) { if (!input.isEmpty()) { p.inputInvalid(); } } })); p.getService().showInputDialog(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Bánh khúc chocolate", () -> { p.setInput(new InputDialog(CMDInputDialog.EXECUTE, "Bánh khúc chocolate", () -> { InputDialog input = p.getInput(); try { int number = input.intValue(); action(p, LAM_BANH_KHUC_CHOCOLATE, number); } catch (NumberFormatException e) { if (!input.isEmpty()) { p.inputInvalid(); } } })); p.getService().showInputDialog(); })); p.getService().openUIMenu(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Làm Hộp Quà", () -> { p.setInput(new InputDialog(CMDInputDialog.EXECUTE, "Làm Hộp Quà", () -> { InputDialog input = p.getInput(); try { int number = input.intValue(); action(p, LAM_HOP_QUA, number); } catch (NumberFormatException e) { if (!input.isEmpty()) { p.inputInvalid(); } } })); p.getService().showInputDialog(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Đổi quà", () -> { p.menus.clear(); p.menus.add(new Menu(CMDMenu.EXECUTE, "Đổi bằng 200.000 xu", () -> { p.setInput(new InputDialog(CMDInputDialog.EXECUTE, "Đổi bằng 200.000 xu", () -> { InputDialog input = p.getInput(); try { int number = input.intValue(); action(p, DOI_DIEM_NGUOI_TUYET_XU, number); } catch (NumberFormatException e) { if (!input.isEmpty()) { p.inputInvalid(); } } })); p.getService().showInputDialog(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Đổi bằng 20 lượng", () -> { p.setInput(new InputDialog(CMDInputDialog.EXECUTE, "Đổi bằng 20 lượng", () -> { InputDialog input = p.getInput(); try { int number = input.intValue(); action(p, DOI_DIEM_NGUOI_TUYET_LUONG, number); } catch (NumberFormatException e) { if (!input.isEmpty()) { p.inputInvalid(); } } })); p.getService().showInputDialog(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Hướng dẫn", () -> { StringBuilder sb = new StringBuilder(); sb.append("- Tiêu diệt người tuyết: ") .append(NinjaUtils.getCurrency(p.getEventPoint().getPoint(TOP_KILL_SNOWMAN))).append("\n"); sb.append("-- CÔNG THỨC --").append("\n"); sb.append("- 1: 20 điểm tiêu diệt + 20 lượng").append("\n"); sb.append("- 2: 20 điểm tiêu diệt + 200.000 xu.").append("\n"); sb.append("- Công thức 1 có tỉ lệ ra Lam Sơn Dạ.").append("\n"); sb.append("- Công thức 2 có tỉ lệ ra Trúc Bạch Thiên Lữ.").append("\n"); p.getService().showAlert("Hướng Dẫn", sb.toString()); })); p.getService().openUIMenu(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Trân hi thụ", () -> { p.menus.clear(); p.menus.add(new Menu(CMDMenu.EXECUTE, "Lam sơn dạ", () -> { makePreciousTree(p, 1); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Trúc bạch thiên lữ", () -> { makePreciousTree(p, 2); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Điểm sự kiện", () -> { p.getService().showAlert("Hướng dẫn", "- Điểm sự kiện: " + NinjaUtils.getCurrency(p.getEventPoint().getPoint(EventPoint.DIEM_TIEU_XAI)) + "\n\nBạn có thể quy đổi điểm sự kiện như sau\n- Lam sơn dạ: 5.000 điểm\n- Trúc bạch thiên lữ: 20.000 điểm\n"); })); p.getService().openUIMenu(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Đua TOP", () -> { p.menus.clear(); p.menus.add(new Menu(CMDMenu.EXECUTE, "Trang trí", () -> { p.menus.clear(); p.menus.add(new Menu(CMDMenu.EXECUTE, "Bảng xếp hạng", () -> { viewTop(p, TOP_DECORATION_GIFT_BOX, "Trang trí cây thông Noel", "%d. %s đã trang trí %s lần"); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Phần thưởng", () -> { StringBuilder sb = new StringBuilder(); sb.append("Top 1:").append("\n"); sb.append("- Phượng Hoàng Băng v.v MCS\n"); sb.append("- Gậy thời trang v.v\n"); sb.append("- 3 Rương huyền bí\n"); sb.append("- 10 Trúc bạch thiên lữ\n\n"); sb.append("Top 2:").append("\n"); sb.append("- Phượng Hoàng Băng v.v\n"); sb.append("- Gậy thời trang v.v\n"); sb.append("- 1 Rương huyền bí\n"); sb.append("- 5 Trúc bạch thiên lữ\n\n"); sb.append("Top 3 - 5:").append("\n"); sb.append("- Phượng Hoàng Băng 3 tháng\n"); sb.append("- Gậy thời trang 3 tháng\n"); sb.append("- 2 Rương bạch ngân\n"); sb.append("- 3 Trúc bạch thiên lữ\n\n"); sb.append("Top 6 - 10:").append("\n"); sb.append("- Phượng Hoàng Băng 1 tháng\n"); sb.append("- 1 rương bạch ngân\n"); p.getService().showAlert("Phần thưởng", sb.toString()); })); if (isEnded()) { int ranking = getRanking(p, TOP_DECORATION_GIFT_BOX); if (ranking <= 10 && p.getEventPoint().getRewarded(TOP_DECORATION_GIFT_BOX) == 0) { p.menus.add(new Menu(CMDMenu.EXECUTE, String.format("Nhận Thưởng TOP %d", ranking), () -> { receiveReward(p, TOP_DECORATION_GIFT_BOX); })); } } p.getService().openUIMenu(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Thợ làm bánh", () -> { p.menus.clear(); p.menus.add(new Menu(CMDMenu.EXECUTE, "Bảng xếp hạng", () -> { viewTop(p, TOP_CHOCOLATE_CAKE, "Thợ làm bánh", "%d. %s đã làm %s chiếc bánh"); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Phần thưởng", () -> { StringBuilder sb = new StringBuilder(); sb.append("Top 1:").append("\n"); sb.append("- Pet ứng long v.v MCS\n"); sb.append("- SHIRAIJI/HAJIRO v.v MCS\n"); sb.append("- 3 rương huyền bí\n"); sb.append("- 10 Trúc bạch thiên lữ\n\n"); sb.append("Top 2:").append("\n"); sb.append("- Pet ứng long v.v\n"); sb.append("- SHIRAIJI/HAJIRO v.v\n"); sb.append("- 1 rương huyền bí\n"); sb.append("- 5 Trúc bạch thiên lữ\n\n"); sb.append("Top 3 - 5:").append("\n"); sb.append("- Pet ứng long 3 tháng\n"); sb.append("- SHIRAIJI/HAJIRO 3 tháng\n"); sb.append("- 2 rương bạch ngân\n"); sb.append("- 3 Trúc bạch thiên lữ\n\n"); sb.append("Top 6 - 10:").append("\n"); sb.append("- Pet ứng long 1 tháng\n"); sb.append("- 1 rương bạch ngân\n"); p.getService().showAlert("Phần thưởng", sb.toString()); })); if (isEnded()) { int ranking = getRanking(p, TOP_CHOCOLATE_CAKE); if (ranking <= 10 && p.getEventPoint().getRewarded(TOP_CHOCOLATE_CAKE) == 0) { p.menus.add(new Menu(CMDMenu.EXECUTE, String.format("Nhận Thưởng TOP %d", ranking), () -> { receiveReward(p, TOP_CHOCOLATE_CAKE); })); } } p.getService().openUIMenu(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Vua tuần lộc", () -> { p.menus.clear(); p.menus.add(new Menu(CMDMenu.EXECUTE, "Bảng xếp hạng", () -> { viewTop(p, TOP_KILL_REINDEER_KING, "Tiêu diệt vua tuần lộc", "%d. %s đã tiêu diệt %s Boss Vua Tuần Lộc"); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Phần thưởng", () -> { StringBuilder sb = new StringBuilder(); sb.append("Top 1:").append("\n"); sb.append("- Pet Tuần Lộc v.v\n"); sb.append("- 3 rương huyền bí\n"); sb.append("- 10 Trúc bạch thiên lữ\n\n"); sb.append("Top 2:").append("\n"); sb.append("- Pet Tuần Lộc v.v\n"); sb.append("- 1 rương huyền bí\n"); sb.append("- 5 Trúc bạch thiên lữ\n\n"); sb.append("Top 3 - 5:").append("\n"); sb.append("- Pet Tuần Lộc 3 tháng\n"); sb.append("- 2 rương bạch ngân\n"); sb.append("- 3 Trúc bạch thiên lữ\n\n"); sb.append("Top 6 - 10:").append("\n"); sb.append("- Pet Tuần Lộc 1 tháng\n"); sb.append("- 1 rương bạch ngân\n\n"); sb.append("Lưu ý: - Tối thiểu trên 1,000 điểm mới được nhận thưởng\n"); p.getService().showAlert("Phần thưởng", sb.toString()); })); if (isEnded()) { int ranking = getRanking(p, TOP_KILL_REINDEER_KING); int point = p.getEventPoint().getPoint(TOP_KILL_REINDEER_KING); if (ranking <= 10 && p.getEventPoint().getRewarded(TOP_KILL_REINDEER_KING) == 0 && point >= 1000) { p.menus.add(new Menu(CMDMenu.EXECUTE, String.format("Nhận Thưởng TOP %d", ranking), () -> { receiveReward(p, TOP_KILL_REINDEER_KING); })); } } p.getService().openUIMenu(); })); p.getService().openUIMenu(); })); p.menus.add(new Menu(CMDMenu.EXECUTE, "Hướng dẫn", () -> { StringBuilder sb = new StringBuilder(); sb.append("- Số lần trang trí: ").append(NinjaUtils.getCurrency(p.getEventPoint().getPoint(TOP_DECORATION_GIFT_BOX))).append("\n"); sb.append("- Số bánh đã làm: ").append(NinjaUtils.getCurrency(p.getEventPoint().getPoint(TOP_CHOCOLATE_CAKE))).append("\n"); sb.append("- Tiêu diệt vua tuần lộc: ").append(NinjaUtils.getCurrency(p.getEventPoint().getPoint(TOP_KILL_REINDEER_KING))).append("\n"); sb.append("- Tiêu diệt người tuyết: ").append(NinjaUtils.getCurrency(p.getEventPoint().getPoint(TOP_KILL_SNOWMAN))).append("\n"); sb.append("===CÔNG THỨC===").append("\n"); sb.append("- Bánh khúc Dâu tây: 5 Bơ + 5 Kem + 5 Đường bột + 2 Dâu tây.").append("\n"); sb.append("- Bánh khúc Chocolate: 5 Bơ + 5 Kem + 5 Đường bột + 1 Chocolate.").append("\n"); sb.append("- Hộp quà: 3 Trái châu + 3 Ruy băng + 3 Chuông vàng + 20 Lượng.").append("\n"); p.getService().showAlert("Hướng Dẫn", sb.toString()); })); } public void makePreciousTree(Char p, int type) { int point = type == 1 ? 5000 : 20000; if (p.getEventPoint().getPoint(EventPoint.DIEM_TIEU_XAI) < point) { p.getService().npcChat(NpcName.TIEN_NU, "Ngươi cần tối thiểu " + NinjaUtils.getCurrency(point) + " điểm sự kiện mới có thể đổi được vật này."); return; } if (p.getSlotNull() == 0) { p.getService().npcChat(NpcName.TIEN_NU, p.language.getString("BAG_FULL")); return; } Item item = ItemFactory.getInstance().newItem(type == 1 ? ItemName.LAM_SON_DA : ItemName.TRUC_BACH_THIEN_LU); p.addItemToBag(item); p.getEventPoint().subPoint(EventPoint.DIEM_TIEU_XAI, point); } @Override public void initMap(Zone zone) { Map map = zone.map; int mapID = map.id; switch (mapID) { case MapName.KHU_LUYEN_TAP: break; case MapName.TRUONG_OOKAZA: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 1426, 552, 0)); break; case MapName.TRUONG_HARUNA: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 502, 408, 0)); break; case MapName.TRUONG_HIROSAKI: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 1207, 168, 0)); break; case MapName.LANG_TONE: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 1427, 264, 0)); break; case MapName.LANG_KOJIN: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 621, 288, 0)); break; case MapName.LANG_CHAI: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 1804, 384, 0)); break; case MapName.LANG_SANZU: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 320, 288, 0)); break; case MapName.LANG_CHAKUMI: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 626, 312, 0)); break; case MapName.LANG_ECHIGO: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 360, 360, 0)); break; case MapName.LANG_OSHIN: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 921, 408, 0)); break; case MapName.LANG_SHIIBA: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 583, 408, 0)); break; case MapName.LANG_FEARRI: zone.addNpc(NpcFactory.getInstance().newNpc(99, NpcName.CAY_THONG, 611, 312, 0)); break; case MapName.RUNG_DAO_SAKURA: Mob monster = new Mob(zone.getMonsters().size(), (short) MobName.NGUOI_TUYET, 3000, (byte) 0, (short) 1928, (short) 240, false, true, zone); zone.addMob(monster); break; } } public void receiveReward(Char p, String key) { int ranking = getRanking(p, key); if (ranking > 10) { p.getService().serverDialog("Bạn không đủ điều kiện nhận phần thưởng"); return; } if (p.getEventPoint().getRewarded(key) == 1) { p.getService().serverDialog("Bạn đã nhận phần thưởng rồi"); return; } if (p.getSlotNull() < 10) { p.getService().serverDialog("Bạn cần để hành trang trống tối thiểu 10 ô"); return; } if (key == TOP_DECORATION_GIFT_BOX) { topDecorationGiftBox(ranking, p); } else if (key == TOP_CHOCOLATE_CAKE) { topChocolateCake(ranking, p); } else if (key == TOP_KILL_REINDEER_KING) { topKillReindeerKing(ranking, p); } p.getEventPoint().setRewarded(key, 1); } public void topDecorationGiftBox(int ranking, Char p) { Item mount = ItemFactory.getInstance().newItem(ItemName.PHUONG_HOANG_BANG); int tickId = p.gender == 1 ? ItemName.GAY_MAT_TRANG : ItemName.GAY_TRAI_TIM; Item fashionStick = ItemFactory.getInstance().newItem(tickId); Item tree = ItemFactory.getInstance().newItem(ItemName.TRUC_BACH_THIEN_LU); if (ranking == 1) { mount.options.add(new ItemOption(ItemOptionName.NE_DON_ADD_POINT_TYPE_1, 200)); mount.options.add(new ItemOption(ItemOptionName.CHINH_XAC_ADD_POINT_TYPE_1, 100)); mount.options.add(new ItemOption(ItemOptionName.TAN_CONG_KHI_DANH_CHI_MANG_POINT_PERCENT_TYPE_1, 100)); mount.options.add(new ItemOption(ItemOptionName.CHI_MANG_ADD_POINT_TYPE_1, 100)); tree.setQuantity(10); p.addItemToBag(tree); for (int i = 0; i < 3; i++) { Item mysteryChest = ItemFactory.getInstance().newItem(ItemName.RUONG_HUYEN_BI); p.addItemToBag(mysteryChest); } } else if (ranking == 2) { tree.setQuantity(5); p.addItemToBag(tree); Item mysteryChest = ItemFactory.getInstance().newItem(ItemName.RUONG_HUYEN_BI); p.addItemToBag(mysteryChest); } else if (ranking >= 3 && ranking <= 5) { mount.expire = System.currentTimeMillis() + ConstTime.DAY * 90L; fashionStick.expire = System.currentTimeMillis() + ConstTime.DAY * 90L; tree.setQuantity(3); p.addItemToBag(tree); for (int i = 0; i < 2; i++) { Item blueChest = ItemFactory.getInstance().newItem(ItemName.RUONG_BACH_NGAN); p.addItemToBag(blueChest); } } else { mount.expire = System.currentTimeMillis() + ConstTime.DAY * 30L; fashionStick.expire = System.currentTimeMillis() + ConstTime.DAY * 30L; Item blueChest = ItemFactory.getInstance().newItem(ItemName.RUONG_BACH_NGAN); p.addItemToBag(blueChest); } p.addItemToBag(mount); p.addItemToBag(fashionStick); } public void topChocolateCake(int ranking, Char p) { Item pet = ItemFactory.getInstance().newItem(ItemName.PET_UNG_LONG); int maskId = p.gender == 1 ? ItemName.SHIRAIJI : ItemName.HAJIRO; Item mask = ItemFactory.getInstance().newItem(maskId); Item tree = ItemFactory.getInstance().newItem(ItemName.TRUC_BACH_THIEN_LU); if (ranking == 1) { pet.options.add(new ItemOption(ItemOptionName.HP_TOI_DA_ADD_POINT_TYPE_1, 3000)); pet.options.add(new ItemOption(ItemOptionName.MP_TOI_DA_ADD_POINT_TYPE_1, 3000)); pet.options.add(new ItemOption(ItemOptionName.CHI_MANG_POINT_TYPE_1, 100)); // chi mang pet.options.add(new ItemOption(ItemOptionName.TAN_CONG_ADD_POINT_PERCENT_TYPE_8, 10)); pet.options.add(new ItemOption(ItemOptionName.MOI_5_GIAY_PHUC_HOI_MP_POINT_TYPE_1, 200)); pet.options.add(new ItemOption(ItemOptionName.MOI_5_GIAY_PHUC_HOI_HP_POINT_TYPE_1, 200)); pet.options.add(new ItemOption(ItemOptionName.KHONG_NHAN_EXP_TYPE_0, 1)); tree.setQuantity(10); p.addItemToBag(tree); for (int i = 0; i < 3; i++) { Item mysteryChest = ItemFactory.getInstance().newItem(ItemName.RUONG_HUYEN_BI); p.addItemToBag(mysteryChest); } } else if (ranking == 2) { tree.setQuantity(5); p.addItemToBag(tree); Item mysteryChest = ItemFactory.getInstance().newItem(ItemName.RUONG_HUYEN_BI); p.addItemToBag(mysteryChest); } else if (ranking >= 3 && ranking <= 5) { pet.expire = System.currentTimeMillis() + ConstTime.DAY * 90L; mask.expire = System.currentTimeMillis() + ConstTime.DAY * 90L; tree.setQuantity(3); p.addItemToBag(tree); for (int i = 0; i < 2; i++) { Item blueChest = ItemFactory.getInstance().newItem(ItemName.RUONG_BACH_NGAN); p.addItemToBag(blueChest); } } else { pet.expire = System.currentTimeMillis() + ConstTime.DAY * 30L; mask.expire = System.currentTimeMillis() + ConstTime.DAY * 90L; Item blueChest = ItemFactory.getInstance().newItem(ItemName.RUONG_BACH_NGAN); p.addItemToBag(blueChest); } p.addItemToBag(pet); p.addItemToBag(mask); } public void topKillReindeerKing(int ranking, Char p) { Item pet = ItemFactory.getInstance().newItem(ItemName.TUAN_LOC); Item tree = ItemFactory.getInstance().newItem(ItemName.TRUC_BACH_THIEN_LU); if (ranking == 1) { pet.expire = -1; tree.setQuantity(10); p.addItemToBag(tree); for (int i = 0; i < 3; i++) { Item mysteryChest = ItemFactory.getInstance().newItem(ItemName.RUONG_HUYEN_BI); p.addItemToBag(mysteryChest); } } else if (ranking == 2) { pet.expire = -1; tree.setQuantity(5); p.addItemToBag(tree); Item mysteryChest = ItemFactory.getInstance().newItem(ItemName.RUONG_HUYEN_BI); p.addItemToBag(mysteryChest); } else if (ranking >= 3 && ranking <= 5) { pet.expire = System.currentTimeMillis() + ConstTime.DAY * 90L; tree.setQuantity(3); p.addItemToBag(tree); for (int i = 0; i < 2; i++) { Item blueChest = ItemFactory.getInstance().newItem(ItemName.RUONG_BACH_NGAN); p.addItemToBag(blueChest); } } else { pet.expire = System.currentTimeMillis() + ConstTime.DAY * 30L; Item blueChest = ItemFactory.getInstance().newItem(ItemName.RUONG_BACH_NGAN); p.addItemToBag(blueChest); } p.addItemToBag(pet); } @Override public void useItem(Char p, Item item) { switch (item.id) { case ItemName.BANH_KHUC_CAY_CHOCOLATE: if (p.getSlotNull() == 0) { p.warningBagFull(); return; } useEventItem(p, item.id, itemsRecFromGoldItem); break; case ItemName.BANH_KHUC_CAY_DAU_TAY: if (p.getSlotNull() == 0) { p.warningBagFull(); return; } useEventItem(p, item.id, itemsRecFromCoinItem); break; case ItemName.LAM_SON_DA: case ItemName.TRUC_BACH_THIEN_LU: if (p.getSlotNull() == 0) { p.warningBagFull(); return; } useVipEventItem(p, item.id == ItemName.LAM_SON_DA ? 1 : 2, vipItems); p.removeItem(item.index, 1, true); break; case ItemName.LANH_DUOC: int time = 6 * 60 * 60 * 1000; short param = 2; byte templateID = 45; Effect eff = p.getEm().findByID(templateID); if (eff != null) { eff.addTime(time); p.getEm().setEffect(eff); } else { Effect effect = new Effect(templateID, time, param); effect.param2 = item.id; p.getEm().setEffect(effect); } p.removeItem(item.index, 1, true); break; case ItemName.HOP_QUA_TRANG_TRI: if (p.getSlotNull() == 0) { p.warningBagFull(); return; } Npc npc = p.zone.getNpc(NpcName.CAY_THONG); if (npc == null) { p.serverMessage("Hãy lại gần Cây Thông để sử dụng."); return; } int distance = NinjaUtils.getDistance(npc.cx, npc.cy, p.x, p.y); if (distance > 100) { p.serverMessage("Hãy lại gần Cây Thông để sử dụng."); return; } useEventItem(p, item.id, itemsRecFromGold2Item); p.getEventPoint().addPoint(Noel.TOP_DECORATION_GIFT_BOX, 1); break; case ItemName.HOP_QUA_NOEL: break; } } public boolean isCoolTime() { Calendar rightNow = Calendar.getInstance(); int hour = rightNow.get(Calendar.HOUR_OF_DAY); if (hour > 18 || hour < 6) { return true; } return false; } }
Leave a Comment