/*
OrpheusMS: MapleStory Private Server based on OdinMS
Copyright (C) 2012 Aaron Weiss <aaron@deviant-core.net>
Patrick Huy <patrick.huy@frz.cc>
Matthias Butz <matze@odinms.de>
Jan Christian Meyer <vimes@odinms.de>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package server.partyquest;
import client.MapleCharacter;
import java.util.LinkedList;
import java.util.List;
import server.maps.MapleMap;
import tools.MaplePacketCreator;
/**
* @author Rob //Thanks :3 - LOST MOTIVATION >=(
*/
public class MonsterCarnivalParty {
private List<MapleCharacter> members = new LinkedList<MapleCharacter>();
private MapleCharacter leader;
private byte team;
private short availableCP = 0, totalCP = 0;
private int summons = 7;
private boolean winner = false;
public MonsterCarnivalParty(final MapleCharacter owner, final List<MapleCharacter> members1, final byte team1) {
leader = owner;
members = members1;
team = team1;
for (final MapleCharacter chr : members) {
chr.setCarnivalParty(this);
chr.setTeam(team);
}
}
public final MapleCharacter getLeader() {
return leader;
}
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<MapleCharacter> getMembers() {
return members;
}
public int getTeam() {
return team;
}
public void warpOut(final int map) {
for (MapleCharacter chr : members) {
chr.changeMap(map, 0);
chr.setCarnivalParty(null);
chr.setCarnival(null);
}
members.clear();
}
public void warp(final MapleMap map, final int portalid) {
for (MapleCharacter chr : members) {
chr.changeMap(map, map.getPortal(portalid));
}
}
public void warpOut() {
if (winner == true)
warpOut(980000003 + (leader.getCarnival().getRoom() * 100));
else
warpOut(980000004 + (leader.getCarnival().getRoom() * 100));
}
public boolean allInMap(MapleMap map) {
boolean status = true;
for (MapleCharacter chr : members) {
if (chr.getMap() != map) {
status = false;
}
}
return status;
}
public void removeMember(MapleCharacter chr) {
members.remove(chr);
chr.changeMap(980000010);
chr.setCarnivalParty(null);
chr.setCarnival(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";
for (final MapleCharacter chr : members) {
chr.announce(MaplePacketCreator.showEffect(effect));
}
}
public void summon() {
this.summons--;
}
public boolean canSummon() {
return this.summons > 0;
}
}