package org.reunionemu.jreunion.game; import java.util.List; import java.util.Vector; import org.reunionemu.jreunion.server.LocalMap; import org.reunionemu.jreunion.server.PacketFactory.Type; /** * @author Aidamina * @license http://reunion.googlecode.com/svn/trunk/license.txt */ public class Party { private Player leader; private List<Player> members = new Vector<Player> (); private int expOption; private int itemOption; private LocalMap map; public Party(Player leader, int expOption, int itemOption) { setLeader(leader); addMember(leader); setExpOption(expOption); setItemOption(itemOption); leader.setParty(this); setMap(leader.getPosition().getLocalMap()); } public Player getLeader() { return leader; } public void setLeader(Player leader) { this.leader = leader; } public List<Player> getMembers() { return members; } public void addMember(Player newMember){ if(!members.contains(newMember)){ members.add(newMember); } } public void removeMember(Player member){ while(members.contains(member)){ members.remove(member); } } public Player getMember(int memberEntityId){ for(Player player : members){ if(player.getEntityId() == memberEntityId) return player; } return null; } public int getMemberPosition(Player member){ return members.indexOf(member)+1; } public int getExpOption() { return expOption; } public void setExpOption(int expOption) { this.expOption = expOption; } public int getItemOption() { return itemOption; } public void setItemOption(int itemOption) { this.itemOption = itemOption; } public LocalMap getMap() { return map; } public void setMap(LocalMap map) { this.map = map; } public void request(Player newMember){ newMember.getClient().sendPacket(Type.PARTY_REQUEST, this); } public void reject(int inviterEntityId, Player newMember){ Player member = getMember(inviterEntityId); member.getClient().sendPacket(Type.PARTY_SECESSION, inviterEntityId); member.getClient().sendPacket(Type.MSG, newMember.getName()+" rejected the party invitation."); if(getMembers().size() == 1){ cancel(); } } public void exit(Player memberLeaving){ for(Player member : members){ member.getClient().sendPacket(Type.PARTY_SECESSION, memberLeaving.getEntityId()); } removeMember(memberLeaving); memberLeaving.setParty(null); if(memberLeaving == getLeader()){ for(Player member : members){ setLeader(member); break; } } if(getMembers().size() == 1){ //getLeader().getClient().sendPacket(Type.PARTY_DISBAND); cancel(); } } public void cancel(){ for(Player member : members){ member.setParty(null); member.getClient().sendPacket(Type.PARTY_DISBAND); } getMap().removeParty(this); } public void accept(int inviterEntityId, Player newMember){ Player member = getMember(inviterEntityId); member.getClient().sendPacket(Type.SAY, "*Party* "+newMember.getName()+" becomes a party member."); newMember.getClient().sendPacket(Type.SAY, "*Party* You become a party member."); addMember(newMember); newMember.setParty(this); for(Player player : getMembers()){ player.getClient().sendPacket(Type.PARTY_LIST, getMembers().size()); for(Player temp : getMembers()){ player.getClient().sendPacket(Type.PARTY_MEMBER, temp); } for(Player temp : getMembers()){ player.getClient().sendPacket(Type.PARTY_INFO, temp); } player.getClient().sendPacket(Type.PARTY_CHANGE, 1, getExpOption()); player.getClient().sendPacket(Type.PARTY_CHANGE, 2, getItemOption()); } } }