package org.skfiy.typhon.spi.store;
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 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.util.ComponentUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class SocietyStoreProvider extends StoreProvider {
private static final Map<String, Commodity> COMMODITY_MAP = new HashMap<>();
private static final List<Commodity> COMMODITIESA = new ArrayList<>();
private static final List<Commodity> COMMODITIESB = new ArrayList<>();
private static final List<Commodity> COMMODITIESC = new ArrayList<>();
private static final List<Commodity> COMMODITIESD = new ArrayList<>();
private static final List<Commodity> COMMODITIESE = new ArrayList<>();
private static final List<Commodity> COMMODITIESF = new ArrayList<>();
private static final List<Commodity> COMMODITIES = new ArrayList<>();
private List<Integer> refreshExpenses;
private List<Integer> refreshTimes;
@Override
protected void doInit() {
JSONArray array = JSON.parseArray(ComponentUtils.readDataFile("society_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) {
COMMODITIESA.add(commodity);
} else if (commodity.getPos() == 2) {
COMMODITIESB.add(commodity);
} else if (commodity.getPos() == 3) {
COMMODITIESC.add(commodity);
} else if (commodity.getPos() == 4) {
COMMODITIESD.add(commodity);
} else if (commodity.getPos() == 5) {
COMMODITIESE.add(commodity);
} else if (commodity.getPos() == 6) {
COMMODITIESF.add(commodity);
} else {
COMMODITIES.add(commodity);
}
COMMODITY_MAP.put(commodity.getId(), commodity);
}
// 打乱顺序
Collections.shuffle(COMMODITIESA);
Collections.shuffle(COMMODITIESB);
Collections.shuffle(COMMODITIESC);
Collections.shuffle(COMMODITIESD);
Collections.shuffle(COMMODITIESE);
Collections.shuffle(COMMODITIESF);
Collections.shuffle(COMMODITIES);
array = JSON.parseArray(ComponentUtils.readDataFile("society_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("society_store_refresh_cost.json"));
refreshExpenses = Arrays.asList(array.toArray(new Integer[] {}));
}
@Override
protected void doDestroy() {}
@Override
public List<Integer> getRefreshTimes() {
return refreshTimes;
}
@Override
public void refreshCommodity(Player player) {
int level = player.getRole().getLevel();
if (level < 32) {
return;
}
List<MyCommodity> myCommodities = new ArrayList<>();
randomCommodity(COMMODITIESA, myCommodities, level);
randomCommodity(COMMODITIESB, myCommodities, level);
randomCommodity(COMMODITIESC, myCommodities, level);
randomCommodity(COMMODITIESD, myCommodities, level);
randomCommodity(COMMODITIESE, myCommodities, level);
randomCommodity(COMMODITIESF, myCommodities, level);
int index = index() - myCommodities.size();
for (int i = 0; i < index; i++) {
randomCommodity(COMMODITIES, myCommodities, level);
}
player.getNormal().setSocietyCommodities(myCommodities);
}
@Override
public void refreshCommodity(SingleValue packet) {
Player player = SessionUtils.getPlayer();
int count = player.getNormal().getSocietyRefreshCounts();
int i = count;
if (count >= refreshExpenses.size()) {
i = refreshExpenses.size() - 1;
}
int cost = refreshExpenses.get(i);
SessionUtils.decrementSocietyMoney(cost);
player.getNormal().setSocietyRefreshCounts(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 = COMMODITY_MAP.get(cid);
if (buyCommodities0(player.getNormal().getSocietyCommodities(), 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<SocietyStore> ");
player.getSession().write(error);
}
}
public int index() {
return Typhons.getInteger("typhon.spi.society.store");
}
}