package server;
import client.MapleCharacter;
import handling.channel.ChannelServer;
import java.util.LinkedList;
import java.util.List;
import java.lang.ref.WeakReference;
import server.maps.MapleMap;
import tools.packet.CField;
public class MapleCarnivalParty {
private final List<Integer> members = new LinkedList<>();
private final WeakReference<MapleCharacter> leader;
private final byte team;
private final int channel;
private short availableCP = 0, totalCP = 0;
private boolean winner = false;
public MapleCarnivalParty(final MapleCharacter owner, final List<MapleCharacter> members1, final byte team1) {
leader = new WeakReference<>(owner);
for (MapleCharacter mem : members1) {
members.add(mem.getId());
mem.setCarnivalParty(this);
}
team = team1;
channel = owner.getClient().getChannel();
}
public final MapleCharacter getLeader() {
return leader.get();
}
public void addCP(MapleCharacter player, int ammount) {
totalCP += ammount;
availableCP += ammount;
player.addCP(ammount);
}
public int getTotalCP() {
return totalCP;
}
public int getAvailableCP() {
return availableCP;
}
public void useCP(MapleCharacter player, int ammount) {
availableCP -= ammount;
player.useCP(ammount);
}
public List<Integer> getMembers() {
return members;
}
public int getTeam() {
return team;
}
public void warp(final MapleMap map, final String portalname) {
for (int chr : members) {
final MapleCharacter c = ChannelServer.getInstance(channel).getPlayerStorage().getCharacterById(chr);
if (c != null) {
c.changeMap(map, map.getPortal(portalname));
}
}
}
public void warp(final MapleMap map, final int portalid) {
for (int chr : members) {
final MapleCharacter c = ChannelServer.getInstance(channel).getPlayerStorage().getCharacterById(chr);
if (c != null) {
c.changeMap(map, map.getPortal(portalid));
}
}
}
public boolean allInMap(MapleMap map) {
for (int chr : members) {
if (map.getCharacterById(chr) == null) {
return false;
}
}
return true;
}
public void removeMember(MapleCharacter chr) {
for (int i = 0; i < members.size(); i++) {
if (members.get(i) == chr.getId()) {
members.remove(i);
chr.setCarnivalParty(null);
}
}
}
public boolean isWinner() {
return winner;
}
public void setWinner(boolean status) {
winner = status;
}
public void displayMatchResult() {
final String effect = winner ? "quest/carnival/win" : "quest/carnival/lose";
final String sound = winner ? "MobCarnival/Win" : "MobCarnival/Lose";
boolean done = false;
for (int chr : members) {
final MapleCharacter c = ChannelServer.getInstance(channel).getPlayerStorage().getCharacterById(chr);
if (c != null) {
c.getClient().getSession().write(CField.showEffect(effect));
c.getClient().getSession().write(CField.playSound(sound));
if (!done) {
done = true;
c.getMap().killAllMonsters(true);
c.getMap().setSpawns(false); //resetFully will take care of this
}
}
}
}
}