package client;
import constants.GameConstants;
import java.sql.SQLException;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import server.CharacterCardFactory;
import tools.Pair;
import tools.Triple;
import tools.data.MaplePacketLittleEndianWriter;
public class MapleCharacterCards {
private Map<Integer, CardData> cards = new LinkedHashMap();
private List<Pair<Integer, Integer>> skills = new LinkedList();
public final Map<Integer, CardData> getCards() {
return this.cards;
}
public final void setCards(Map<Integer, CardData> cads) {
this.cards = cads;
}
public final List<Pair<Integer, Integer>> getCardEffects() {
return this.skills;
}
public final void calculateEffects() {
this.skills.clear();
int deck1amount = 0;
int deck2amount = 0;
int lowD1 = 0;
int lowD2 = 0;
List cardids1 = new LinkedList();
List cardids2 = new LinkedList();
for (Map.Entry x : this.cards.entrySet()) {
if (((CardData) x.getValue()).cid > 0) {
Triple skillData = CharacterCardFactory.getInstance().getCardSkill(((CardData) x.getValue()).job, ((CardData) x.getValue()).level);
if (((Integer) x.getKey()).intValue() < 4) {
if (skillData != null) {
cardids1.add(skillData.getLeft());
this.skills.add(new Pair(skillData.getMid(), skillData.getRight()));
}
deck1amount++;
if ((lowD1 == 0) || (lowD1 > ((CardData) x.getValue()).level)) {
lowD1 = ((CardData) x.getValue()).level;
}
} else {
if (skillData != null) {
cardids2.add(skillData.getLeft());
this.skills.add(new Pair(skillData.getMid(), skillData.getRight()));
}
deck2amount++;
if ((lowD2 == 0) || (lowD2 > ((CardData) x.getValue()).level)) {
lowD2 = ((CardData) x.getValue()).level;
}
}
}
}
if ((deck1amount == 3) && (cardids1.size() == 3)) {
List<Integer> uid = CharacterCardFactory.getInstance().getUniqueSkills(cardids1);
for (Integer ii : uid) {
this.skills.add(new Pair(ii, Integer.valueOf(GameConstants.getSkillLevel(lowD1))));
}
this.skills.add(new Pair(Integer.valueOf(CharacterCardFactory.getInstance().getRankSkill(lowD1)), Integer.valueOf(1)));
}
if ((deck2amount == 3) && (cardids2.size() == 3)) {
List<Integer> uid = CharacterCardFactory.getInstance().getUniqueSkills(cardids2);
for (Integer ii : uid) {
this.skills.add(new Pair(ii, Integer.valueOf(GameConstants.getSkillLevel(lowD2))));
}
this.skills.add(new Pair(Integer.valueOf(CharacterCardFactory.getInstance().getRankSkill(lowD2)), Integer.valueOf(1)));
}
}
public final void recalcLocalStats(MapleCharacter chr) {
int pos = -1;
for (Map.Entry x : this.cards.entrySet()) {
if (((CardData) x.getValue()).cid == chr.getId()) {
pos = ((Integer) x.getKey()).intValue();
break;
}
}
if (pos != -1) {
if (!CharacterCardFactory.getInstance().canHaveCard(chr.getLevel(), chr.getJob())) {
this.cards.remove(Integer.valueOf(pos));
} else {
this.cards.put(Integer.valueOf(pos), new CardData(chr.getId(), chr.getLevel(), chr.getJob()));
}
}
// calculateEffects();
}
public final void loadCards(MapleClient c, boolean channelserver) throws SQLException {
this.cards = CharacterCardFactory.getInstance().loadCharacterCards(c.getAccID(), c.getWorld());
if (channelserver) {
// calculateEffects();
}
}
public final void connectData(MaplePacketLittleEndianWriter mplew) {
if (this.cards.isEmpty()) {
mplew.writeZeroBytes(81);
return;
}
int poss = 0;
for (CardData i : this.cards.values()) {
poss++;
if (poss > 9) {
break;
}
mplew.writeInt(i.cid);
mplew.write(i.level);
mplew.writeInt(i.job);
}
}
}