Guild & Alliances Patches
As reported by J0k3r613, patched guild system not recognizing properly the guild leader just after creation. Patched many more issues related to guilds and alliances.
This commit is contained in:
@@ -3922,7 +3922,7 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
||||
ret.dojoPoints = rs.getInt("dojoPoints");
|
||||
ret.dojoStage = rs.getInt("lastDojoStage");
|
||||
ret.dataString = rs.getString("dataString");
|
||||
if (ret.guildid > 0) ret.mgc = new MapleGuildCharacter(ret);
|
||||
ret.mgc = new MapleGuildCharacter(ret);
|
||||
int buddyCapacity = rs.getInt("buddyCapacity");
|
||||
ret.buddylist = new BuddyList(buddyCapacity);
|
||||
ret.getInventory(MapleInventoryType.EQUIP).setSlotLimit(rs.getByte("equipslots"));
|
||||
@@ -5295,17 +5295,6 @@ public class MapleCharacter extends AbstractAnimatedMapleMapObject {
|
||||
|
||||
public void setGuildId(int _id) {
|
||||
guildid = _id;
|
||||
if (guildid > 0) {
|
||||
if (mgc == null) {
|
||||
mgc = new MapleGuildCharacter(this);
|
||||
} else {
|
||||
mgc.setGuildId(guildid);
|
||||
}
|
||||
} else {
|
||||
mgc = null;
|
||||
guildRank = 5;
|
||||
allianceRank = 5;
|
||||
}
|
||||
}
|
||||
|
||||
public void setGuildRank(int _rank) {
|
||||
|
||||
@@ -498,7 +498,9 @@ public class Server implements Runnable {
|
||||
}
|
||||
|
||||
if(mc != null) {
|
||||
g.addGuildMember(mc.getMGC()); // i really REALLY must make player MGC the same as the guild MGC
|
||||
mc.setMGC(g.getMGC(mc.getId()));
|
||||
if(g.getMGC(mc.getId()) == null) System.out.println("null for " + mc.getName() + " when loading " + id);
|
||||
g.getMGC(mc.getId()).setCharacter(mc);
|
||||
g.setOnline(mc.getId(), true, mc.getClient().getChannel());
|
||||
}
|
||||
|
||||
@@ -520,10 +522,10 @@ public class Server implements Runnable {
|
||||
g.setOnline(mc.getId(), bOnline, channel);
|
||||
}
|
||||
|
||||
public int addGuildMember(MapleGuildCharacter mgc) {
|
||||
public int addGuildMember(MapleGuildCharacter mgc, MapleCharacter chr) {
|
||||
MapleGuild g = guilds.get(mgc.getGuildId());
|
||||
if (g != null) {
|
||||
return g.addGuildMember(mgc);
|
||||
return g.addGuildMember(mgc, chr);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
|
||||
Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.addGuildToAlliance(alliance, guildid, c), -1, -1);
|
||||
Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.updateAllianceInfo(alliance, c), -1, -1);
|
||||
Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1);
|
||||
victim.getGuild().dropMessage("Your guild has joined in the [" + alliance.getName() + "] union.");
|
||||
victim.getGuild().dropMessage("Your guild has joined the [" + alliance.getName() + "] union.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -164,6 +164,8 @@ public final class AllianceOperationHandler extends AbstractMaplePacketHandler {
|
||||
String notice = slea.readMapleAsciiString();
|
||||
Server.getInstance().setAllianceNotice(alliance.getId(), notice);
|
||||
Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), notice), -1, -1);
|
||||
|
||||
alliance.dropMessage(5, "* Alliance Notice : " + notice);
|
||||
break;
|
||||
default:
|
||||
c.getPlayer().dropMessage("Feature not available");
|
||||
|
||||
@@ -31,6 +31,7 @@ import java.util.Iterator;
|
||||
import tools.MaplePacketCreator;
|
||||
import client.MapleCharacter;
|
||||
import net.server.Server;
|
||||
import net.server.guild.MapleAlliance;
|
||||
|
||||
public final class GuildOperationHandler extends AbstractMaplePacketHandler {
|
||||
private boolean isGuildNameAcceptable(String name) {
|
||||
@@ -115,21 +116,22 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
|
||||
c.getPlayer().dropMessage(1, "The Guild name you have chosen is not accepted.");
|
||||
return;
|
||||
}
|
||||
int gid;
|
||||
|
||||
gid = Server.getInstance().createGuild(mc.getId(), guildName);
|
||||
int gid = Server.getInstance().createGuild(mc.getId(), guildName);
|
||||
if (gid == 0) {
|
||||
c.announce(MaplePacketCreator.genericGuildMessage((byte) 0x1c));
|
||||
return;
|
||||
}
|
||||
mc.gainMeso(-MapleGuild.CREATE_GUILD_COST, true, false, true);
|
||||
|
||||
Server.getInstance().getWorld(mc.getWorld()).setGuildAndRank(mc.getId(), gid, 1);
|
||||
Server.getInstance().setGuildMemberOnline(mc, true, mc.getClient().getChannel());
|
||||
mc.getMGC().setGuildId(gid);
|
||||
Server.getInstance().getGuild(mc.getGuildId(), mc.getWorld(), mc); // initialize guild structure
|
||||
Server.getInstance().changeRank(gid, mc.getId(), 1);
|
||||
|
||||
c.announce(MaplePacketCreator.showGuildInfo(mc));
|
||||
|
||||
c.getPlayer().dropMessage(1, "You have successfully created a Guild.");
|
||||
respawnPlayer(mc);
|
||||
break;
|
||||
case 0x05:
|
||||
if (mc.getGuildId() <= 0 || mc.getGuildRank() > 2) {
|
||||
@@ -172,15 +174,14 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
|
||||
System.out.println("[hax] " + mc.getName() + " is trying to join a guild that never invited him/her (or that the invitation has expired)");
|
||||
return;
|
||||
}
|
||||
mc.setGuildId(gid); // joins the guild
|
||||
mc.setGuildRank(5); // start at lowest rank
|
||||
mc.setAllianceRank(5);
|
||||
int s;
|
||||
mc.getMGC().setGuildId(gid); // joins the guild
|
||||
mc.getMGC().setGuildRank(5); // start at lowest rank
|
||||
mc.getMGC().setAllianceRank(5);
|
||||
|
||||
s = Server.getInstance().addGuildMember(mc.getMGC());
|
||||
int s = Server.getInstance().addGuildMember(mc.getMGC(), mc);
|
||||
if (s == 0) {
|
||||
c.getPlayer().dropMessage(1, "The Guild you are trying to join is already full.");
|
||||
mc.setGuildId(0);
|
||||
mc.getMGC().setGuildId(0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -207,7 +208,7 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
|
||||
c.announce(MaplePacketCreator.showGuildInfo(null));
|
||||
if(allianceId > 0) Server.getInstance().getAlliance(allianceId).updateAlliancePackets(mc);
|
||||
|
||||
mc.setGuildId(0);
|
||||
mc.getMGC().setGuildId(0);
|
||||
mc.saveGuildStatus();
|
||||
respawnPlayer(mc);
|
||||
break;
|
||||
@@ -262,12 +263,18 @@ public final class GuildOperationHandler extends AbstractMaplePacketHandler {
|
||||
short logo = slea.readShort();
|
||||
byte logocolor = slea.readByte();
|
||||
Server.getInstance().setGuildEmblem(mc.getGuildId(), bg, bgcolor, logo, logocolor);
|
||||
|
||||
if (mc.getGuild() != null && mc.getGuild().getAllianceId() > 0) {
|
||||
MapleAlliance alliance = mc.getAlliance();
|
||||
Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1);
|
||||
}
|
||||
|
||||
mc.gainMeso(-MapleGuild.CHANGE_EMBLEM_COST, true, false, true);
|
||||
respawnPlayer(mc);
|
||||
break;
|
||||
case 0x10:
|
||||
if (mc.getGuildId() <= 0 || mc.getGuildRank() > 2) {
|
||||
System.out.println("[hax] " + mc.getName() + " tried to change guild notice while not in a guild.");
|
||||
if(mc.getGuildId() <= 0) System.out.println("[hax] " + mc.getName() + " tried to change guild notice while not in a guild.");
|
||||
return;
|
||||
}
|
||||
String notice = slea.readMapleAsciiString();
|
||||
|
||||
@@ -51,6 +51,7 @@ import client.inventory.MaplePet;
|
||||
import client.inventory.PetDataFactory;
|
||||
import constants.GameConstants;
|
||||
import constants.ServerConstants;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import server.TimerManager;
|
||||
|
||||
@@ -187,12 +188,10 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
MapleGuild playerGuild = server.getGuild(player.getGuildId(), player.getWorld(), player);
|
||||
if (playerGuild == null) {
|
||||
player.deleteGuild(player.getGuildId());
|
||||
player.setMGC(null);
|
||||
player.setGuildId(0);
|
||||
player.getMGC().setGuildId(0);
|
||||
} else {
|
||||
playerGuild.getMGC(player.getId()).setCharacter(player);
|
||||
player.setMGC(playerGuild.getMGC(player.getId()));
|
||||
|
||||
server.setGuildMemberOnline(player, true, c.getChannel());
|
||||
c.announce(MaplePacketCreator.showGuildInfo(player));
|
||||
int allianceId = player.getGuild().getAllianceId();
|
||||
@@ -206,12 +205,13 @@ public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
|
||||
player.getGuild().setAllianceId(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (newAlliance != null) {
|
||||
c.announce(MaplePacketCreator.updateAllianceInfo(newAlliance, c));
|
||||
c.announce(MaplePacketCreator.allianceNotice(newAlliance.getId(), newAlliance.getNotice()));
|
||||
|
||||
server.allianceMessage(allianceId, MaplePacketCreator.allianceMemberOnline(player, true), player.getId(), -1);
|
||||
if (newcomer) {
|
||||
server.allianceMessage(allianceId, MaplePacketCreator.allianceMemberOnline(player, true), player.getId(), -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,10 +121,13 @@ public class MapleAlliance {
|
||||
|
||||
MapleCharacter chr = guildMasters.get(i);
|
||||
chr.getMGC().setAllianceRank((i == 0) ? 1 : 2);
|
||||
Server.getInstance().getGuild(chr.getGuildId()).getMGC(chr.getId()).setAllianceRank((i == 0) ? 1 : 2);
|
||||
chr.saveGuildStatus();
|
||||
}
|
||||
|
||||
Server.getInstance().addAlliance(id, alliance);
|
||||
|
||||
System.out.println("\n\n\n\n----");
|
||||
Server.getInstance().allianceMessage(id, MaplePacketCreator.updateAllianceInfo(alliance, guildMasters.get(0).getClient()), -1, -1);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -304,7 +307,7 @@ public class MapleAlliance {
|
||||
Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1);
|
||||
Server.getInstance().guildMessage(guildId, MaplePacketCreator.disbandAlliance(alliance.getId()));
|
||||
|
||||
alliance.dropMessage("[" + Server.getInstance().getGuild(guildId, worldId) + "] guild has left the union.");
|
||||
alliance.dropMessage("[" + Server.getInstance().getGuild(guildId, worldId).getName() + "] guild has left the union.");
|
||||
}
|
||||
|
||||
public void updateAlliancePackets(MapleCharacter chr) {
|
||||
|
||||
@@ -372,13 +372,14 @@ public class MapleGuild {
|
||||
}
|
||||
}
|
||||
|
||||
public int addGuildMember(MapleGuildCharacter mgc) {
|
||||
public int addGuildMember(MapleGuildCharacter mgc, MapleCharacter chr) {
|
||||
synchronized (members) {
|
||||
if (members.size() >= capacity) {
|
||||
return 0;
|
||||
}
|
||||
for (int i = members.size() - 1; i >= 0; i--) {
|
||||
if (members.get(i).getGuildRank() < 5 || members.get(i).getName().compareTo(mgc.getName()) < 0) {
|
||||
mgc.setCharacter(chr);
|
||||
members.add(i + 1, mgc);
|
||||
bDirty = true;
|
||||
break;
|
||||
@@ -439,23 +440,30 @@ public class MapleGuild {
|
||||
public void changeRank(int cid, int newRank) {
|
||||
for (MapleGuildCharacter mgc : members) {
|
||||
if (cid == mgc.getId()) {
|
||||
try {
|
||||
if (mgc.isOnline()) {
|
||||
Server.getInstance().getWorld(mgc.getWorld()).setGuildAndRank(cid, this.id, newRank);
|
||||
} else {
|
||||
Server.getInstance().getWorld(mgc.getWorld()).setOfflineGuildStatus((short) this.id, (byte) newRank, cid);
|
||||
}
|
||||
} catch (Exception re) {
|
||||
re.printStackTrace();
|
||||
return;
|
||||
}
|
||||
mgc.setGuildRank(newRank);
|
||||
this.broadcast(MaplePacketCreator.changeRank(mgc));
|
||||
changeRank(mgc, newRank);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void changeRank(MapleGuildCharacter mgc, int newRank) {
|
||||
try {
|
||||
if (mgc.isOnline()) {
|
||||
Server.getInstance().getWorld(mgc.getWorld()).setGuildAndRank(mgc.getId(), this.id, newRank);
|
||||
mgc.setGuildRank(newRank);
|
||||
} else {
|
||||
Server.getInstance().getWorld(mgc.getWorld()).setOfflineGuildStatus((short) this.id, (byte) newRank, mgc.getId());
|
||||
mgc.setOfflineGuildRank(newRank);
|
||||
}
|
||||
} catch (Exception re) {
|
||||
re.printStackTrace();
|
||||
return;
|
||||
}
|
||||
|
||||
this.broadcast(MaplePacketCreator.changeRank(mgc));
|
||||
return;
|
||||
}
|
||||
|
||||
public void setGuildNotice(String notice) {
|
||||
this.notice = notice;
|
||||
writeToDB(false);
|
||||
@@ -594,7 +602,11 @@ public class MapleGuild {
|
||||
|
||||
public void resetAllianceGuildPlayersRank() {
|
||||
try {
|
||||
for(MapleGuildCharacter mgc: members) mgc.setAllianceRank(5);
|
||||
for(MapleGuildCharacter mgc: members) {
|
||||
if(mgc.isOnline()) {
|
||||
mgc.setAllianceRank(5);
|
||||
}
|
||||
}
|
||||
|
||||
try (PreparedStatement ps = DatabaseConnection.getConnection().prepareStatement("UPDATE characters SET allianceRank = ? WHERE guildid = ?")) {
|
||||
ps.setInt(1, 5);
|
||||
|
||||
@@ -111,15 +111,20 @@ public class MapleGuildCharacter {
|
||||
|
||||
public void setGuildId(int gid) {
|
||||
guildid = gid;
|
||||
character.setGuildId(gid);
|
||||
}
|
||||
|
||||
public int getGuildRank() {
|
||||
return guildrank;
|
||||
}
|
||||
|
||||
public void setOfflineGuildRank(int rank) {
|
||||
guildrank = rank;
|
||||
}
|
||||
|
||||
public void setGuildRank(int rank) {
|
||||
guildrank = rank;
|
||||
if(character != null) character.setGuildRank(rank);
|
||||
character.setGuildRank(rank);
|
||||
}
|
||||
|
||||
public int getAllianceRank() {
|
||||
@@ -128,7 +133,7 @@ public class MapleGuildCharacter {
|
||||
|
||||
public void setAllianceRank(int rank) {
|
||||
allianceRank = rank;
|
||||
if(character != null) character.setAllianceRank(rank);
|
||||
character.setAllianceRank(rank);
|
||||
}
|
||||
|
||||
public boolean isOnline() {
|
||||
|
||||
@@ -206,8 +206,7 @@ public class World {
|
||||
if(mgc == null) return null;
|
||||
|
||||
int gid = mgc.getGuildId();
|
||||
MapleGuild g;
|
||||
g = Server.getInstance().getGuild(gid, mgc.getWorld(), mgc.getCharacter());
|
||||
MapleGuild g = Server.getInstance().getGuild(gid, mgc.getWorld(), mgc.getCharacter());
|
||||
if (gsStore.get(gid) == null) {
|
||||
gsStore.put(gid, new MapleGuildSummary(g));
|
||||
}
|
||||
@@ -274,13 +273,10 @@ public class World {
|
||||
bDifferentGuild = true;
|
||||
} else {
|
||||
bDifferentGuild = guildid != mc.getGuildId();
|
||||
mc.setGuildId(guildid);
|
||||
mc.getMGC().setGuildId(guildid);
|
||||
mc.getMGC().setGuildRank(rank);
|
||||
|
||||
MapleGuildCharacter mgc = mc.getMGC();
|
||||
if(mgc != null) {
|
||||
mgc.setGuildRank(rank);
|
||||
if(bDifferentGuild) mgc.setAllianceRank(5);
|
||||
}
|
||||
if(bDifferentGuild) mc.getMGC().setAllianceRank(5);
|
||||
|
||||
mc.saveGuildStatus();
|
||||
}
|
||||
|
||||
@@ -235,7 +235,18 @@ public class EventInstanceManager {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void dropMessage(int type, String message) {
|
||||
for (MapleCharacter chr : getPlayers()) {
|
||||
chr.dropMessage(type, message);
|
||||
}
|
||||
}
|
||||
|
||||
public void restartEventTimer(long time) {
|
||||
stopEventTimer();
|
||||
startEventTimer(time);
|
||||
}
|
||||
|
||||
public void startEventTimer(long time) {
|
||||
timeStarted = System.currentTimeMillis();
|
||||
eventTime = time;
|
||||
|
||||
@@ -279,7 +279,7 @@ public class EventManager {
|
||||
startLobbyInstance(lobbyId);
|
||||
}
|
||||
|
||||
EventInstanceManager eim = (EventInstanceManager) (iv.invokeFunction("setup", (Object) null));
|
||||
EventInstanceManager eim = (EventInstanceManager) (iv.invokeFunction("setup", leader.getId()));
|
||||
if(eim == null) {
|
||||
if(lobbyId > -1) setLockLobby(lobbyId, false);
|
||||
return false;
|
||||
|
||||
@@ -352,7 +352,9 @@ public class NPCConversationManager extends AbstractPlayerInteraction {
|
||||
public void upgradeAlliance() {
|
||||
MapleAlliance alliance = Server.getInstance().getAlliance(c.getPlayer().getGuild().getAllianceId());
|
||||
alliance.increaseCapacity(1);
|
||||
c.announce(MaplePacketCreator.updateAllianceInfo(alliance, c));
|
||||
|
||||
Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.getGuildAlliances(alliance, c.getWorld()), -1, -1);
|
||||
Server.getInstance().allianceMessage(alliance.getId(), MaplePacketCreator.allianceNotice(alliance.getId(), alliance.getNotice()), -1, -1);
|
||||
}
|
||||
|
||||
public void disbandAlliance(MapleClient c, int allianceId) {
|
||||
|
||||
@@ -80,8 +80,8 @@ public class MapleExpedition {
|
||||
private MapleMap startMap;
|
||||
private ArrayList<String> bossLogs;
|
||||
private ScheduledFuture<?> schedule;
|
||||
private List<MapleCharacter> members = new ArrayList<MapleCharacter>();
|
||||
private List<MapleCharacter> banned = new ArrayList<MapleCharacter>();
|
||||
private List<MapleCharacter> members = new ArrayList<>();
|
||||
private List<Integer> banned = new ArrayList<>();
|
||||
private long startTime;
|
||||
|
||||
public MapleExpedition(MapleCharacter player, MapleExpeditionType met) {
|
||||
@@ -126,7 +126,7 @@ public class MapleExpedition {
|
||||
public void start(){
|
||||
registering = false;
|
||||
startMap.broadcastMessage(MaplePacketCreator.removeClock());
|
||||
broadcastExped(MaplePacketCreator.serverNotice(6, "The expedition has started! The expedition leader is waiting inside!"));
|
||||
broadcastExped(MaplePacketCreator.serverNotice(6, "The expedition has started! Good luck, brave heroes!"));
|
||||
startTime = System.currentTimeMillis();
|
||||
Server.getInstance().broadcastGMMessage(MaplePacketCreator.serverNotice(6, type.toString() + " Expedition started with leader: " + leader.getName()));
|
||||
}
|
||||
@@ -135,7 +135,7 @@ public class MapleExpedition {
|
||||
if (!registering){
|
||||
return "Sorry, this expedition is already underway. Registration is closed!";
|
||||
}
|
||||
if (banned.contains(player)){
|
||||
if (banned.contains(player.getId())){
|
||||
return "Sorry, you've been banned from this expedition by #b" + leader.getName() + "#k.";
|
||||
}
|
||||
if (members.size() >= type.getMaxSize()){ //Would be a miracle if anybody ever saw this
|
||||
@@ -155,7 +155,13 @@ public class MapleExpedition {
|
||||
}
|
||||
|
||||
public boolean removeMember(MapleCharacter chr) {
|
||||
return members.remove(chr);
|
||||
if(members.remove(chr)) {
|
||||
broadcastExped(MaplePacketCreator.serverNotice(6, chr.getName() + " has left the expedition."));
|
||||
chr.dropMessage(6, "You have left this expedition.");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public MapleExpeditionType getType() {
|
||||
@@ -192,9 +198,14 @@ public class MapleExpedition {
|
||||
}
|
||||
|
||||
public void ban(MapleCharacter player) {
|
||||
if (!banned.contains(player)) {
|
||||
banned.add(player);
|
||||
if (!banned.contains(player.getId())) {
|
||||
banned.add(player.getId());
|
||||
members.remove(player);
|
||||
|
||||
broadcastExped(MaplePacketCreator.serverNotice(6, player.getName() + " has been banned from the expedition."));
|
||||
|
||||
player.announce(MaplePacketCreator.removeClock());
|
||||
player.dropMessage(6, "You have been banned from this expedition.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ public class MapleMap {
|
||||
private Collection<MapleCharacter> characters = new LinkedHashSet<>();
|
||||
private Map<Integer, MaplePortal> portals = new HashMap<>();
|
||||
private Map<Integer, Integer> backgroundTypes = new HashMap<>();
|
||||
private Map<String, Integer> environment = new LinkedHashMap<String, Integer>();
|
||||
private List<Rectangle> areas = new ArrayList<>();
|
||||
private MapleFootholdTree footholds = null;
|
||||
private int mapid;
|
||||
@@ -252,6 +253,28 @@ public class MapleMap {
|
||||
objectRLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public final void limitReactor(final int rid, final int num) {
|
||||
List<MapleReactor> toDestroy = new ArrayList<>();
|
||||
Map<Integer, Integer> contained = new LinkedHashMap<>();
|
||||
|
||||
for (MapleMapObject obj : getReactors()) {
|
||||
MapleReactor mr = (MapleReactor) obj;
|
||||
if (contained.containsKey(mr.getId())) {
|
||||
if (contained.get(mr.getId()) >= num) {
|
||||
toDestroy.add(mr);
|
||||
} else {
|
||||
contained.put(mr.getId(), contained.get(mr.getId()) + 1);
|
||||
}
|
||||
} else {
|
||||
contained.put(mr.getId(), 1);
|
||||
}
|
||||
}
|
||||
|
||||
for (MapleReactor mr : toDestroy) {
|
||||
destroyReactor(mr.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
public int getForcedReturnId() {
|
||||
return forcedReturnMap;
|
||||
@@ -837,6 +860,22 @@ public class MapleMap {
|
||||
killMonster(monster, null, false, 1);
|
||||
}
|
||||
}
|
||||
|
||||
public final void destroyReactors(final int first, final int last) {
|
||||
List<MapleReactor> toDestroy = new ArrayList<>();
|
||||
List<MapleMapObject> reactors = getReactors();
|
||||
|
||||
for (MapleMapObject obj : reactors) {
|
||||
MapleReactor mr = (MapleReactor) obj;
|
||||
if (mr.getId() >= first && mr.getId() <= last) {
|
||||
toDestroy.add(mr);
|
||||
}
|
||||
}
|
||||
|
||||
for (MapleReactor mr : toDestroy) {
|
||||
destroyReactor(mr.getObjectId());
|
||||
}
|
||||
}
|
||||
|
||||
public void destroyReactor(int oid) {
|
||||
final MapleReactor reactor = getReactorByOid(oid);
|
||||
@@ -897,6 +936,25 @@ public class MapleMap {
|
||||
objectRLock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
public final void shuffleReactors(int first, int last) {
|
||||
List<Point> points = new ArrayList<>();
|
||||
List<MapleMapObject> reactors = getReactors();
|
||||
List<MapleMapObject> targets = new LinkedList<>();
|
||||
|
||||
for (MapleMapObject obj : reactors) {
|
||||
MapleReactor mr = (MapleReactor) obj;
|
||||
if (mr.getId() >= first && mr.getId() <= last) {
|
||||
points.add(mr.getPosition());
|
||||
targets.add(obj);
|
||||
}
|
||||
}
|
||||
Collections.shuffle(points);
|
||||
for (MapleMapObject obj : targets) {
|
||||
MapleReactor mr = (MapleReactor) obj;
|
||||
mr.setPosition(points.remove(points.size() - 1));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Automagically finds a new controller for the given monster from the chars
|
||||
@@ -2035,6 +2093,27 @@ public class MapleMap {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// \/\/\/\/\/\/ CWKPQ things \/\/\/\/\/\/
|
||||
|
||||
public final void toggleEnvironment(final String ms) {
|
||||
if (environment.containsKey(ms)) {
|
||||
moveEnvironment(ms, environment.get(ms) == 1 ? 2 : 1);
|
||||
} else {
|
||||
moveEnvironment(ms, 1);
|
||||
}
|
||||
}
|
||||
|
||||
public final void moveEnvironment(final String ms, final int type) {
|
||||
broadcastMessage(MaplePacketCreator.environmentChange(ms, type));
|
||||
environment.put(ms, type);
|
||||
}
|
||||
|
||||
public final Map<String, Integer> getEnvironment() {
|
||||
return environment;
|
||||
}
|
||||
|
||||
// /\/\/\/\/\/\/\ CWKPQ things /\/\/\/\/\/\
|
||||
|
||||
public String getMapName() {
|
||||
return mapName;
|
||||
|
||||
@@ -5939,7 +5939,7 @@ public class MaplePacketCreator {
|
||||
mplew.writeInt(alliance.getCapacity()); // probably capacity
|
||||
mplew.writeShort(0);
|
||||
for (Integer guildd : alliance.getGuilds()) {
|
||||
getGuildInfo(mplew, Server.getInstance().getGuild(guildd, c.getWorld(), c.getPlayer()));
|
||||
getGuildInfo(mplew, Server.getInstance().getGuild(guildd, c.getWorld()));
|
||||
}
|
||||
return mplew.getPacket();
|
||||
}
|
||||
@@ -5950,7 +5950,7 @@ public class MaplePacketCreator {
|
||||
mplew.write(0x0D);
|
||||
mplew.writeInt(alliance.getGuilds().size());
|
||||
for (Integer guild : alliance.getGuilds()) {
|
||||
getGuildInfo(mplew, Server.getInstance().getGuild(guild, worldId, null));
|
||||
getGuildInfo(mplew, Server.getInstance().getGuild(guild, worldId));
|
||||
}
|
||||
return mplew.getPacket();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user