package org.skfiy.typhon.spi.task; import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.inject.Inject; import org.skfiy.typhon.AbstractComponent; import org.skfiy.typhon.domain.DailyTask; import org.skfiy.typhon.domain.Normal; import org.skfiy.typhon.domain.Player; import org.skfiy.typhon.packet.Packet; import org.skfiy.typhon.packet.PacketError; import org.skfiy.typhon.packet.SingleValue; import org.skfiy.typhon.session.BagUtils; import org.skfiy.typhon.session.SessionUtils; import org.skfiy.typhon.spi.ItemProvider; import org.skfiy.typhon.spi.RoleProvider; import org.skfiy.typhon.util.ComponentUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class TaskProvider extends AbstractComponent { @Inject private RoleProvider roleProvider; @Inject private ItemProvider itemProvider; private Map<Integer, TaskObject> dailyTasks = new HashMap<>(); @Override protected void doInit() { JSONObject object = JSON.parseObject(ComponentUtils.readDataFile("task_list_day.json")); TaskObject taskDailyObject; for (Entry<String, Object> str : object.entrySet()) { taskDailyObject = object.getObject(str.getKey(), TaskObject.class); JSONObject obj = object.getJSONObject(str.getKey()); if (obj.getString("#item.id") != null) { taskDailyObject.setId(itemProvider.getItem(obj.getString("#item.id"))); } dailyTasks.put(TaskDayEventEnum.valueOf(str.getKey()).getFlag(), taskDailyObject); } } @Override protected void doDestroy() { // TODO Auto-generated method stub } @Override protected void doReload() { // TODO Auto-generated method stub } /** * 日常任务 * * @param packet */ public void dailyTask(SingleValue packet) { Player player = SessionUtils.getPlayer(); Normal normal = SessionUtils.getPlayer().getNormal(); int index = (int) packet.getVal(); TaskObject taskDailyObject = dailyTasks.get(index); int terms = 0; String type=null; switch (TaskDayEventEnum.valueOf(index)) { case hpve: terms = normal.getDailyTask().getTaskHpveCounts(); type="HpveTask"; break; case hdpve: terms = normal.getDailyTask().getTaskHdpveCounts(); type="TaskHdpveCounts"; break; case spve: terms = normal.getDailyTask().getTaskSpveCounts(); type="TaskSpveCounts"; break; case pvp: terms = normal.getDailyTask().getTaskPvpCounts(); type="TaskPvpCounts"; break; case enchant: terms = normal.getDailyTask().getTaskEnchants(); type="TaskEnchants"; break; case lotteries: terms = normal.getDailyTask().getTaskLotteries(); type="TaskLotteries"; break; case dargon: terms = normal.getDailyTask().getTaskDargonCounts(); type="TaskDargonCounts"; break; case activities: terms = normal.getDailyTask().getTaskActivities(); type="TaskapveProgresses"; break; case tree: terms = normal.getDailyTask().getTaskTree(); type="TaskTree"; break; case troopStreng: terms = normal.getDailyTask().getTaskTroopStreng(); type="TaskTroopStreng"; break; case hardenStreng: terms = normal.getDailyTask().getTaskHardenStreng(); type="TaskHardenStreng"; break; case societyBoss: terms = normal.getDailyTask().getTaskSocietyBoss(); type="societyBoss"; break; case caravan: terms = normal.getDailyTask().getTaskCaravan(); type="societyBoss"; break; default: break; } if (taskHpve(taskDailyObject, normal, terms,type)) { reset(TaskDayEventEnum.valueOf(index), normal); } player.getSession().write(Packet.createResult(packet)); } private boolean taskHpve(TaskObject taskDailyObject, Normal normal, int terms,String type) { boolean bool = false; if (terms >= taskDailyObject.getTerms()) { dayRewards(taskDailyObject, normal,type); bool = true; } return bool; } public void taskAccessVigor(SingleValue packet) { Player player = SessionUtils.getPlayer(); Normal normal = player.getNormal(); int index = (int) packet.getVal(); TaskObject taskDailyObject = dailyTasks.get(TaskDayEventEnum.vigor.getFlag()); if (index == normal.getDailyTask().getTaskAccessVigor()) { PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict); error.setText("Have to receive"); player.getSession().write(error); return; } if (index > taskDailyObject.getTime().length) { PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict); error.setText("TaskDaily Beyond the time"); player.getSession().write(error); return; } Calendar curCal = Calendar.getInstance(); Calendar becurCal = Calendar.getInstance(); dailyTasks.get(TaskDayEventEnum.vigor); becurCal.set(Calendar.HOUR_OF_DAY, taskDailyObject.getTime()[index - 1]); becurCal.set(Calendar.MINUTE, 0); becurCal.set(Calendar.SECOND, 0); long time = curCal.getTimeInMillis() - becurCal.getTimeInMillis(); if (time >= 0 && time <= taskDailyObject.getTerms() * 60 * 60 * 1000) { normal.getDailyTask().setTaskAccessVigor(index); dayRewards(taskDailyObject, normal,"taskAccessVigor"); player.getSession().write(Packet.createResult(packet)); } else { PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict); error.setText("have not to access vigor time"); player.getSession().write(error); return; } } private void reset(TaskDayEventEnum taskDayEventEnum, Normal normal) { DailyTask dailyTask = normal.getDailyTask(); switch (taskDayEventEnum) { case hpve: dailyTask.setTaskHpveCounts(-1); break; case hdpve: dailyTask.setTaskHdpveCounts(-1); break; case spve: dailyTask.setTaskSpveCounts(-1); break; case pvp: dailyTask.setTaskPvpCounts(-1); break; case enchant: dailyTask.setTaskEnchants(-1); break; case lotteries: dailyTask.setTaskLotteries(-1); break; case dargon: dailyTask.setTaskDargonCounts(-1); break; case activities: dailyTask.setTaskActivities(-1); break; case tree: dailyTask.setTaskTree(-1); break; case troopStreng: dailyTask.setTaskTroopStreng(-1); break; case hardenStreng: dailyTask.setTaskHardenStreng(-1); break; case societyBoss: dailyTask.setTaskSocietyBoss(-1); break; case caravan: dailyTask.setTaskCaravan(-1); break; default: break; } } private void dayRewards(TaskObject taskDailyObject, Normal normal,String type) { if (taskDailyObject.getCopper() != 0) { SessionUtils.incrementCopper(taskDailyObject.getCopper()); } if (taskDailyObject.getDiamond() != 0) { JSONObject object = new JSONObject(); object.put("place", "DailyTask"); object.put("TaskType", type); SessionUtils.incrementDiamond(taskDailyObject.getDiamond(), object.toString()); } if (taskDailyObject.getExp() != 0) { roleProvider.pushExp(normal, taskDailyObject.getExp()); } if (taskDailyObject.getVigor() != 0) { normal.setVigor(normal.getVigor() + taskDailyObject.getVigor()); } if (taskDailyObject.getId() != null) { BagUtils.intoItem(taskDailyObject.getId(), taskDailyObject.getCount()); } } public List<Integer> refreshVigorTime() { TaskObject taskDailyObject = dailyTasks.get(TaskDayEventEnum.vigor.getFlag()); List<Integer> refreshTime = Arrays.asList(taskDailyObject.getTime()); return refreshTime; } }