package org.skfiy.typhon.spi.dargon; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import org.skfiy.typhon.Typhons; 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.SessionUtils; import org.skfiy.typhon.spi.ItemProvider; import org.skfiy.typhon.spi.store.Commodity; import org.skfiy.typhon.spi.store.MyCommodity; import org.skfiy.typhon.spi.store.StoreProvider; import org.skfiy.typhon.util.ComponentUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class DargonStoreProvider extends StoreProvider { private static final Map<String, Commodity> HYCOMMODITY_MAP = new HashMap<>(); private static final List<Commodity> HYCOMMODITIESA = new ArrayList<>(); private static final List<Commodity> HYCOMMODITIESB = new ArrayList<>(); private static final List<Commodity> HYCOMMODITIESC = new ArrayList<>(); private static final List<Commodity> HYCOMMODITIESD = new ArrayList<>(); private static final List<Commodity> HYCOMMODITIESE = new ArrayList<>(); private static final List<Commodity> HYCOMMODITIESF = new ArrayList<>(); private static final List<Commodity> HYCOMMODITIES = new ArrayList<>(); private List<Integer> refreshExpenses; private List<Integer> refreshTimes; @Inject protected ItemProvider itemProvider; @Override protected void doInit() { JSONArray array = JSON.parseArray(ComponentUtils.readDataFile("dargon_store.json")); for (int i = 0; i < array.size(); i++) { JSONObject json = array.getJSONObject(i); Commodity commodity = toCommodity(json); commodity.setItem(itemProvider.getItem(json.getString("#item.id"))); if (commodity.getPos() == 1) { HYCOMMODITIESA.add(commodity); } else if (commodity.getPos() == 2) { HYCOMMODITIESB.add(commodity); } else if (commodity.getPos() == 3) { HYCOMMODITIESC.add(commodity); } else if (commodity.getPos() == 4) { HYCOMMODITIESD.add(commodity); } else if (commodity.getPos() == 5) { HYCOMMODITIESE.add(commodity); } else if (commodity.getPos() == 6) { HYCOMMODITIESF.add(commodity); } else { HYCOMMODITIES.add(commodity); } HYCOMMODITY_MAP.put(commodity.getId(), commodity); } // 打乱顺序 Collections.shuffle(HYCOMMODITIESA); Collections.shuffle(HYCOMMODITIESB); Collections.shuffle(HYCOMMODITIESC); Collections.shuffle(HYCOMMODITIESD); Collections.shuffle(HYCOMMODITIESE); Collections.shuffle(HYCOMMODITIESF); Collections.shuffle(HYCOMMODITIES); array = JSON.parseArray(ComponentUtils.readDataFile("dargon_store_refresh_time.json")); List<Integer> tempRefreshTimes = new ArrayList<>(); Collections.addAll(tempRefreshTimes, array.toArray(new Integer[] {})); refreshTimes = Collections.unmodifiableList(tempRefreshTimes); array = JSON.parseArray(ComponentUtils.readDataFile("dargon_store_refresh.json")); refreshExpenses = Arrays.asList(array.toArray(new Integer[] {})); } @Override protected void doDestroy() {} @Override protected void doReload() {} @Override public List<Integer> getRefreshTimes() { return refreshTimes; } @Override public void refreshCommodity(Player player) { int level = player.getRole().getLevel(); List<MyCommodity> myCommodities = new ArrayList<>(); randomCommodity(HYCOMMODITIESA, myCommodities, level); randomCommodity(HYCOMMODITIESB, myCommodities, level); randomCommodity(HYCOMMODITIESC, myCommodities, level); randomCommodity(HYCOMMODITIESD, myCommodities, level); randomCommodity(HYCOMMODITIESE, myCommodities, level); randomCommodity(HYCOMMODITIESF, myCommodities, level); int index = index() - myCommodities.size(); for (int i = 0; i < index; i++) { randomCommodity(HYCOMMODITIES, myCommodities, level); } player.getNormal().setDargonCommodities(myCommodities); } @Override public void refreshCommodity(SingleValue packet) { Player player = SessionUtils.getPlayer(); int count = player.getNormal().getRefreshDargonStore(); int i = count; if (count >= refreshExpenses.size()) { i = refreshExpenses.size() - 1; } int cost = refreshExpenses.get(i); SessionUtils.decrementDargonMoney(cost); player.getNormal().setRefreshDargonStore(count + 1); refreshCommodity(player); player.getSession().write(Packet.createResult(packet)); } @Override public void buyCommodities(SingleValue packet) { Player player = SessionUtils.getPlayer(); String cid = (String) packet.getVal(); Commodity commodity = HYCOMMODITY_MAP.get(cid); if (buyCommodities0(player.getNormal().getDargonCommodities(), commodity)) { player.getSession().write(Packet.createResult(packet)); } else { PacketError error = PacketError.createResult(packet, PacketError.Condition.conflict); error.setText("Without the id" + cid + " on the table OR the id count is more<Store> "); player.getSession().write(error); } } public int index() { return Typhons.getInteger("typhon.spi.dargon.store"); } }