package org.skfiy.typhon.spi.task; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; import org.skfiy.typhon.AbstractComponent; 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 com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public abstract class AbstractTaskProvider extends AbstractComponent { private final List<TaskObject> taskObjects = new ArrayList<>(); @Inject private RoleProvider roleProvider; @Inject private ItemProvider itemProvider; @Override protected void doInit() { JSONArray array = JSON.parseArray(loadTaskTable()); for (int i = 0; i < array.size(); i++) { TaskObject obj = array.getObject(i, TaskObject.class); JSONObject jsonObject = array.getJSONObject(i); if (jsonObject.getString("#item.id") != null) { obj.setId(itemProvider.getItem(jsonObject.getString("#item.id"))); } taskObjects.add(obj); } } @Override protected void doDestroy() {} @Override protected void doReload() {} protected boolean getRewards(int reference, int index,String type) { Player player = SessionUtils.getPlayer(); Normal normal = player.getNormal(); boolean bool = false; if (index >= taskObjects.size()) { return bool; } TaskObject taskObject = taskObjects.get(index); if (reference >= taskObject.getTerms()) { getPrize(taskObject, normal,type,index); bool = true; } return bool; } protected List<TaskObject> taskObjects() { return taskObjects; } protected void getPrize(TaskObject taskObject, Normal normal,String type,int index) { if (taskObject.getCopper() != 0) { SessionUtils.incrementCopper(taskObject.getCopper()); } if (taskObject.getDiamond() != 0) { JSONObject object = new JSONObject(); object.put("place", "ContinuousTask"); object.put("continuousTaskType", type); object.put("continuousTaskCounts", index); SessionUtils.incrementDiamond(taskObject.getDiamond(), object.toString()); } if (taskObject.getExp() != 0) { roleProvider.pushExp(normal, taskObject.getExp()); } if (taskObject.getVigor() != 0) { normal.setVigor(normal.getVigor() + taskObject.getVigor()); } if (taskObject.getId() != null) { BagUtils.intoItem(taskObject.getId(), taskObject.getCount()); } } public void taskEntrance(SingleValue packet) { Player player = SessionUtils.getPlayer(); if (!taskEntrance(player, packet)) { PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict); error.setText("the Task is not complete"); player.getSession().write(error); return; } player.getSession().write(Packet.createResult(packet)); } /** * * @return */ protected abstract String loadTaskTable(); protected abstract boolean taskEntrance(Player player, SingleValue packet); }