Untitled
unknown
java
a year ago
40 kB
5
Indexable
//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;
}
}
Editor is loading...
Leave a Comment