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.domain.item.RecordObject;
import org.skfiy.typhon.domain.item.TaskPveProgressObject;
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.spi.pve.PveWarInfo;
import org.skfiy.typhon.util.ComponentUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class TaskPveProgressProvider extends AbstractComponent {
private final List<List<TaskObject>> pveProgressTasks = new ArrayList<>();
@Inject
private RoleProvider roleProvider;
@Inject
private ItemProvider itemProvider;
protected void doInit() {
JSONArray array =
JSONArray.parseArray(ComponentUtils.readDataFile("task_list_pveprogress.json"));
for (int i = 0; i < array.size(); i++) {
JSONArray arr = array.getJSONArray(i);
List<TaskObject> tasks = new ArrayList<>();
for (int j = 0; j < arr.size(); j++) {
TaskObject obj = JSON.toJavaObject(arr.getJSONObject(j), TaskObject.class);
if (arr.getJSONObject(j).getString("#item.id") != null) {
obj.setId(itemProvider.getItem(arr.getJSONObject(j).getString("#item.id")));
}
tasks.add(obj);
}
pveProgressTasks.add(tasks);
}
}
@Override
protected void doDestroy() {}
@Override
protected void doReload() {}
public void taskEntrance(SingleValue packet) {
Player player = SessionUtils.getPlayer();
Normal normal = player.getNormal();
int taskIndex = (int) packet.getVal();
TaskPveProgressObject object = new TaskPveProgressObject();
TaskPveProgressObject taskPve = new TaskPveProgressObject();
for (int i = 0; i < normal.getPveProgressCounts().size(); i++) {
taskPve = normal.getPveProgressCounts().get(i);
if (taskIndex == taskPve.getTid()) {
object = taskPve;
break;
}
}
int index = object.getPveGrowth().size();
if (object.getPveGrowth().get(index - 1).getState() != 1) {
TaskObject taskObject = pveProgressTasks.get(taskIndex).get(index - 1);
getPrize(taskObject, normal);
object.getPveGrowth().get(index - 1).setState(1);
player.getSession().write(Packet.createResult(packet));
} else {
PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict);
player.getSession().write(error);
}
}
public void update(Normal normal, PveWarInfo pveWarInfo) {
TaskPveProgressObject taskPvelist = new TaskPveProgressObject();
for (int i = 0; i < pveProgressTasks.size(); i++) {
List<TaskObject> list = pveProgressTasks.get(i);
if (normal.getPveProgressCounts().size() <= i) {
taskPvelist = new TaskPveProgressObject();
taskPvelist.setTid(i);
normal.addPveProgressCounts(taskPvelist);
}
for (TaskPveProgressObject obj : normal.getPveProgressCounts()) {
if (obj.getTid() == i) {
taskPvelist = obj;
break;
}
}
int size = taskPvelist.getPveGrowth().size();
if (size >= list.size()) {
continue;
}
TaskObject taskObject = list.get(size);
if (normal.getLevel() >= taskObject.getLevel()
&& (taskObject.getCid() == pveWarInfo.getCidx()
&& taskObject.getPid() == pveWarInfo.getPidx()
&& taskObject.getSubject() == pveWarInfo.getSubject() && taskObject
.getMode() == pveWarInfo.getMode())) {
if (size < 1) {
taskPvelist.addPveGrowth(new RecordObject(size, 0));
} else {
RecordObject beTask = taskPvelist.getPveGrowth().get(size - 1);
if (beTask.getState() != 0) {
taskPvelist.addPveGrowth(new RecordObject(size, 0));
}
}
}
}
}
private void getPrize(TaskObject taskObject, Normal normal) {
if (taskObject.getCopper() != 0) {
SessionUtils.incrementCopper(taskObject.getCopper());
}
if (taskObject.getDiamond() != 0) {
JSONObject object = new JSONObject();
object.put("place", "PveProgressTask");
object.put("Subject", taskObject.getSubject());
object.put("pid", taskObject.getPid());
object.put("cid", taskObject.getCid());
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());
}
}
}