/**
* Copyright (C) 2013-2014 Project-Vethrfolnir
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.vethrfolnir.game.module;
import java.util.ArrayList;
import com.vethrfolnir.game.entitys.GameObject;
import com.vethrfolnir.game.entitys.components.player.PlayerMapping;
import com.vethrfolnir.game.entitys.components.player.PlayerState;
import com.vethrfolnir.game.network.mu.MuPackets;
import com.vethrfolnir.game.network.mu.send.SystemMessage.MessageType;
import com.vethrfolnir.logging.MuLogger;
import com.vethrfolnir.network.WritePacket;
/**
* @author Constantin
*
*/
public final class MuParty {
public static int MaxPartyMembers = 5;
private final ArrayList<GameObject> partyMembers = new ArrayList<GameObject>();
private final GameObject leader;
private static final MuLogger log = MuLogger.getLogger(MuParty.class);
public MuParty(GameObject lead) {
leader = lead;
partyMembers.add(leader);
PlayerState state = leader.get(PlayerMapping.PlayerState);
state.setParty(this);
}
public ArrayList<GameObject> getPartyMembers() {
return partyMembers;
}
public int size() {
return partyMembers.size();
}
public boolean isPartyLeader(GameObject activeChar) {
return activeChar == leader;
}
/**
* @param target
* @param answer
*/
public void invitePartyAnswer(GameObject target, boolean answer) {
PlayerState targetState = target.get(PlayerMapping.PlayerState);
if(targetState.getParty() != null) {
leader.sendPacket(MuPackets.SystemMessage, target.getName()+" is already in a party.", MessageType.Normal);
return;
}
log.info("Client["+leader+"] added "+target.getName()+" to his party.");
partyMembers.add(target);
targetState.setParty(this);
updateUI(false);
sendPacket(MuPackets.SystemMessage, "Veth: "+target.getName()+" has joined the party.", MessageType.Normal);
}
public GameObject getPartyMember(int partySlot) {
return partyMembers.get(partySlot);
}
public void removePartyMember(GameObject target) {
PlayerState targetState = target.get(PlayerMapping.PlayerState);
if(isPartyLeader(target)) { // delete party
dismatleParty();
return;
}
targetState.setParty(null);
updateUI(target, true);
partyMembers.remove(target);
if(size() <= 1) {
dismatleParty();
return;
}
sendPacket(MuPackets.SystemMessage, "Veth: "+target.getName()+" has left the party.", MessageType.Normal);
updateUI(false);
}
public void dismatleParty() {
sendPacket(MuPackets.SystemMessage, "Veth: The party has been dismantled.", MessageType.Normal);
updateUI(true);
for(GameObject member : partyMembers) {
PlayerState memberState = member.get(PlayerMapping.PlayerState);
memberState.setParty(null);
}
partyMembers.clear();
PlayerState leaderState = leader.get(PlayerMapping.PlayerState);
leaderState.setParty(null);
}
public void sendPacket(WritePacket serverPacket, Object... params) {
for (GameObject member : partyMembers) {
member.sendPacket(serverPacket, params);
}
}
public void updateUI(boolean dismantle) {
sendPacket(MuPackets.PartyInfo, this, dismantle);
sendPacket(MuPackets.ExPartyInfoBar, this);
}
public void updateUI(GameObject player, boolean dismantle) {
player.sendPacket(MuPackets.PartyInfo, this, dismantle);
}
}