Remove AddWorld,AddChannel,RemoveWorld,RemoveChannel cmds
These are incredibly error prone and hinder the database migration work.
This commit is contained in:
@@ -185,15 +185,10 @@ import client.command.commands.gm6.EraseAllPNpcsCommand;
|
|||||||
import client.command.commands.gm6.GetAccCommand;
|
import client.command.commands.gm6.GetAccCommand;
|
||||||
import client.command.commands.gm6.MapPlayersCommand;
|
import client.command.commands.gm6.MapPlayersCommand;
|
||||||
import client.command.commands.gm6.SaveAllCommand;
|
import client.command.commands.gm6.SaveAllCommand;
|
||||||
import client.command.commands.gm6.ServerAddChannelCommand;
|
|
||||||
import client.command.commands.gm6.ServerAddWorldCommand;
|
|
||||||
import client.command.commands.gm6.ServerRemoveChannelCommand;
|
|
||||||
import client.command.commands.gm6.ServerRemoveWorldCommand;
|
|
||||||
import client.command.commands.gm6.SetGmLevelCommand;
|
import client.command.commands.gm6.SetGmLevelCommand;
|
||||||
import client.command.commands.gm6.ShutdownCommand;
|
import client.command.commands.gm6.ShutdownCommand;
|
||||||
import client.command.commands.gm6.SpawnAllPNpcsCommand;
|
import client.command.commands.gm6.SpawnAllPNpcsCommand;
|
||||||
import client.command.commands.gm6.SupplyRateCouponCommand;
|
import client.command.commands.gm6.SupplyRateCouponCommand;
|
||||||
import client.command.commands.gm6.WarpWorldCommand;
|
|
||||||
import constants.id.MapId;
|
import constants.id.MapId;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@@ -535,7 +530,6 @@ public class CommandsExecutor {
|
|||||||
levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
|
levelCommandsCursor = new Pair<>(new ArrayList<String>(), new ArrayList<String>());
|
||||||
|
|
||||||
addCommand("setgmlevel", 6, SetGmLevelCommand.class);
|
addCommand("setgmlevel", 6, SetGmLevelCommand.class);
|
||||||
addCommand("warpworld", 6, WarpWorldCommand.class);
|
|
||||||
addCommand("saveall", 6, SaveAllCommand.class);
|
addCommand("saveall", 6, SaveAllCommand.class);
|
||||||
addCommand("dcall", 6, DCAllCommand.class);
|
addCommand("dcall", 6, DCAllCommand.class);
|
||||||
addCommand("mapplayers", 6, MapPlayersCommand.class);
|
addCommand("mapplayers", 6, MapPlayersCommand.class);
|
||||||
@@ -546,10 +540,6 @@ public class CommandsExecutor {
|
|||||||
addCommand("supplyratecoupon", 6, SupplyRateCouponCommand.class);
|
addCommand("supplyratecoupon", 6, SupplyRateCouponCommand.class);
|
||||||
addCommand("spawnallpnpcs", 6, SpawnAllPNpcsCommand.class);
|
addCommand("spawnallpnpcs", 6, SpawnAllPNpcsCommand.class);
|
||||||
addCommand("eraseallpnpcs", 6, EraseAllPNpcsCommand.class);
|
addCommand("eraseallpnpcs", 6, EraseAllPNpcsCommand.class);
|
||||||
addCommand("addchannel", 6, ServerAddChannelCommand.class);
|
|
||||||
addCommand("addworld", 6, ServerAddWorldCommand.class);
|
|
||||||
addCommand("removechannel", 6, ServerRemoveChannelCommand.class);
|
|
||||||
addCommand("removeworld", 6, ServerRemoveWorldCommand.class);
|
|
||||||
addCommand("devtest", 6, DevtestCommand.class);
|
addCommand("devtest", 6, DevtestCommand.class);
|
||||||
|
|
||||||
commandsNameDesc.add(levelCommandsCursor);
|
commandsNameDesc.add(levelCommandsCursor);
|
||||||
|
|||||||
@@ -1,68 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of the HeavenMS MapleStory Server, commands OdinMS-based
|
|
||||||
Copyleft (L) 2016 - 2019 RonanLana
|
|
||||||
|
|
||||||
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 version 3 as published by
|
|
||||||
the Free Software Foundation. You may not use, modify or distribute
|
|
||||||
this program under any other version of the GNU Affero General Public
|
|
||||||
License.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Author: Arthur L - Refactored command content into modules
|
|
||||||
*/
|
|
||||||
package client.command.commands.gm6;
|
|
||||||
|
|
||||||
import client.Character;
|
|
||||||
import client.Client;
|
|
||||||
import client.command.Command;
|
|
||||||
import client.command.CommandContext;
|
|
||||||
import net.server.Server;
|
|
||||||
import server.ThreadManager;
|
|
||||||
|
|
||||||
public class ServerAddChannelCommand extends Command {
|
|
||||||
{
|
|
||||||
setDescription("Add a new channel to a world.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Client c, String[] params, CommandContext ctx) {
|
|
||||||
final Character player = c.getPlayer();
|
|
||||||
|
|
||||||
if (params.length < 1) {
|
|
||||||
player.dropMessage(5, "Syntax: @addchannel <worldid>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int worldid = Integer.parseInt(params[0]);
|
|
||||||
|
|
||||||
ThreadManager.getInstance().newTask(() -> {
|
|
||||||
int chid = Server.getInstance().addChannel(worldid);
|
|
||||||
if (player.isLoggedinWorld()) {
|
|
||||||
if (chid >= 0) {
|
|
||||||
player.dropMessage(5, "NEW Channel " + chid + " successfully deployed on world " + worldid + ".");
|
|
||||||
} else {
|
|
||||||
if (chid == -3) {
|
|
||||||
player.dropMessage(5, "Invalid worldid detected. Channel creation aborted.");
|
|
||||||
} else if (chid == -2) {
|
|
||||||
player.dropMessage(5, "Reached channel limit on worldid " + worldid + ". Channel creation aborted.");
|
|
||||||
} else if (chid == -1) {
|
|
||||||
player.dropMessage(5, "Error detected when loading the 'world.ini' file. Channel creation aborted.");
|
|
||||||
} else {
|
|
||||||
player.dropMessage(5, "NEW Channel failed to be deployed. Check if the needed port is already in use or other limitations are taking place.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of the HeavenMS MapleStory Server, commands OdinMS-based
|
|
||||||
Copyleft (L) 2016 - 2019 RonanLana
|
|
||||||
|
|
||||||
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 version 3 as published by
|
|
||||||
the Free Software Foundation. You may not use, modify or distribute
|
|
||||||
this program under any other version of the GNU Affero General Public
|
|
||||||
License.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Author: Arthur L - Refactored command content into modules
|
|
||||||
*/
|
|
||||||
package client.command.commands.gm6;
|
|
||||||
|
|
||||||
import client.Character;
|
|
||||||
import client.Client;
|
|
||||||
import client.command.Command;
|
|
||||||
import client.command.CommandContext;
|
|
||||||
import net.server.Server;
|
|
||||||
import server.ThreadManager;
|
|
||||||
|
|
||||||
public class ServerAddWorldCommand extends Command {
|
|
||||||
{
|
|
||||||
setDescription("Add a new world.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Client c, String[] params, CommandContext ctx) {
|
|
||||||
final Character player = c.getPlayer();
|
|
||||||
|
|
||||||
ThreadManager.getInstance().newTask(() -> {
|
|
||||||
int wid = Server.getInstance().addWorld();
|
|
||||||
|
|
||||||
if (player.isLoggedinWorld()) {
|
|
||||||
if (wid >= 0) {
|
|
||||||
player.dropMessage(5, "NEW World " + wid + " successfully deployed.");
|
|
||||||
} else {
|
|
||||||
if (wid == -2) {
|
|
||||||
player.dropMessage(5, "Error detected when loading the 'world.ini' file. World creation aborted.");
|
|
||||||
} else {
|
|
||||||
player.dropMessage(5, "NEW World failed to be deployed. Check if needed ports are already in use or maximum world count has been reached.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of the HeavenMS MapleStory Server, commands OdinMS-based
|
|
||||||
Copyleft (L) 2016 - 2019 RonanLana
|
|
||||||
|
|
||||||
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 version 3 as published by
|
|
||||||
the Free Software Foundation. You may not use, modify or distribute
|
|
||||||
this program under any other version of the GNU Affero General Public
|
|
||||||
License.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Author: Arthur L - Refactored command content into modules
|
|
||||||
*/
|
|
||||||
package client.command.commands.gm6;
|
|
||||||
|
|
||||||
import client.Character;
|
|
||||||
import client.Client;
|
|
||||||
import client.command.Command;
|
|
||||||
import client.command.CommandContext;
|
|
||||||
import net.server.Server;
|
|
||||||
import server.ThreadManager;
|
|
||||||
|
|
||||||
public class ServerRemoveChannelCommand extends Command {
|
|
||||||
{
|
|
||||||
setDescription("Remove channel from a world.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Client c, String[] params, CommandContext ctx) {
|
|
||||||
final Character player = c.getPlayer();
|
|
||||||
|
|
||||||
if (params.length < 1) {
|
|
||||||
player.dropMessage(5, "Syntax: @removechannel <worldid>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int worldId = Integer.parseInt(params[0]);
|
|
||||||
ThreadManager.getInstance().newTask(() -> {
|
|
||||||
if (Server.getInstance().removeChannel(worldId)) {
|
|
||||||
if (player.isLoggedinWorld()) {
|
|
||||||
player.dropMessage(5, "Successfully removed a channel on World " + worldId + ". Current channel count: " + Server.getInstance().getWorld(worldId).getChannelsSize() + ".");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (player.isLoggedinWorld()) {
|
|
||||||
player.dropMessage(5, "Failed to remove last Channel on world " + worldId + ". Check if either that world exists or there are people currently playing there.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of the HeavenMS MapleStory Server, commands OdinMS-based
|
|
||||||
Copyleft (L) 2016 - 2019 RonanLana
|
|
||||||
|
|
||||||
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 version 3 as published by
|
|
||||||
the Free Software Foundation. You may not use, modify or distribute
|
|
||||||
this program under any other version of the GNU Affero General Public
|
|
||||||
License.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Author: Arthur L - Refactored command content into modules
|
|
||||||
*/
|
|
||||||
package client.command.commands.gm6;
|
|
||||||
|
|
||||||
import client.Character;
|
|
||||||
import client.Client;
|
|
||||||
import client.command.Command;
|
|
||||||
import client.command.CommandContext;
|
|
||||||
import net.server.Server;
|
|
||||||
import server.ThreadManager;
|
|
||||||
|
|
||||||
public class ServerRemoveWorldCommand extends Command {
|
|
||||||
{
|
|
||||||
setDescription("Remove a world.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Client c, String[] params, CommandContext ctx) {
|
|
||||||
final Character player = c.getPlayer();
|
|
||||||
|
|
||||||
final int rwid = Server.getInstance().getWorldsSize() - 1;
|
|
||||||
if (rwid <= 0) {
|
|
||||||
player.dropMessage(5, "Unable to remove world 0.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ThreadManager.getInstance().newTask(() -> {
|
|
||||||
if (Server.getInstance().removeWorld()) {
|
|
||||||
if (player.isLoggedinWorld()) {
|
|
||||||
player.dropMessage(5, "Successfully removed a world. Current world count: " + Server.getInstance().getWorldsSize() + ".");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (player.isLoggedinWorld()) {
|
|
||||||
if (rwid < 0) {
|
|
||||||
player.dropMessage(5, "No registered worlds to remove.");
|
|
||||||
} else {
|
|
||||||
player.dropMessage(5, "Failed to remove world " + rwid + ". Check if there are people currently playing there.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of the HeavenMS MapleStory Server, commands OdinMS-based
|
|
||||||
Copyleft (L) 2016 - 2019 RonanLana
|
|
||||||
|
|
||||||
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 version 3 as published by
|
|
||||||
the Free Software Foundation. You may not use, modify or distribute
|
|
||||||
this program under any other version of the GNU Affero General Public
|
|
||||||
License.
|
|
||||||
|
|
||||||
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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
@Author: Arthur L - Refactored command content into modules
|
|
||||||
*/
|
|
||||||
package client.command.commands.gm6;
|
|
||||||
|
|
||||||
import client.Character;
|
|
||||||
import client.Client;
|
|
||||||
import client.command.Command;
|
|
||||||
import client.command.CommandContext;
|
|
||||||
import net.server.Server;
|
|
||||||
import tools.PacketCreator;
|
|
||||||
|
|
||||||
import java.net.InetAddress;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
|
|
||||||
public class WarpWorldCommand extends Command {
|
|
||||||
{
|
|
||||||
setDescription("Warp to a different world.");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void execute(Client c, String[] params, CommandContext ctx) {
|
|
||||||
Character player = c.getPlayer();
|
|
||||||
if (params.length < 1) {
|
|
||||||
player.yellowMessage("Syntax: !warpworld <worldid>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Server server = Server.getInstance();
|
|
||||||
byte worldb = Byte.parseByte(params[0]);
|
|
||||||
if (worldb <= (server.getWorldsSize() - 1)) {
|
|
||||||
try {
|
|
||||||
String[] socket = server.getInetSocket(c, worldb, c.getChannel());
|
|
||||||
c.getWorldServer().removePlayer(player);
|
|
||||||
player.getMap().removePlayer(player);//LOL FORGOT THIS ><
|
|
||||||
player.setSessionTransitionState();
|
|
||||||
player.setWorld(worldb);
|
|
||||||
ctx.characterSaver().save(player);//To set the new world :O (true because else 2 player instances are created, one in both worlds)
|
|
||||||
c.sendPacket(PacketCreator.getChannelChange(InetAddress.getByName(socket[0]), Integer.parseInt(socket[1])));
|
|
||||||
} catch (UnknownHostException | NumberFormatException ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
player.message("Unexpected error when changing worlds, are you sure the world you are trying to warp to has the same amount of channels?");
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
player.message("Invalid world; highest number available: " + (server.getWorldsSize() - 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -358,82 +358,6 @@ public class Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void dumpData() {
|
|
||||||
wldRLock.lock();
|
|
||||||
try {
|
|
||||||
log.debug("Worlds: {}", worlds);
|
|
||||||
log.debug("Channels: {}", channels);
|
|
||||||
log.debug("World recommended list: {}", worldRecommendedList);
|
|
||||||
log.debug("---------------------");
|
|
||||||
} finally {
|
|
||||||
wldRLock.unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int addChannel(int worldid) {
|
|
||||||
World world;
|
|
||||||
Map<Integer, String> channelInfo;
|
|
||||||
int channelid;
|
|
||||||
|
|
||||||
wldRLock.lock();
|
|
||||||
try {
|
|
||||||
if (worldid >= worlds.size()) {
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
|
|
||||||
channelInfo = channels.get(worldid);
|
|
||||||
if (channelInfo == null) {
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
|
|
||||||
channelid = channelInfo.size();
|
|
||||||
if (channelid >= YamlConfig.config.server.CHANNEL_SIZE) {
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
channelid++;
|
|
||||||
world = this.getWorld(worldid);
|
|
||||||
} finally {
|
|
||||||
wldRLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
Channel channel = new Channel(worldid, channelid, getCurrentTime(), channelDependencies);
|
|
||||||
channel.setServerMessage(YamlConfig.config.worlds.get(worldid).why_am_i_recommended);
|
|
||||||
|
|
||||||
if (world.addChannel(channel)) {
|
|
||||||
wldWLock.lock();
|
|
||||||
try {
|
|
||||||
channelInfo.put(channelid, channel.getIP());
|
|
||||||
} finally {
|
|
||||||
wldWLock.unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return channelid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int addWorld() {
|
|
||||||
int newWorld = initWorld();
|
|
||||||
if (newWorld > -1) {
|
|
||||||
installWorldPlayerRanking(newWorld);
|
|
||||||
|
|
||||||
Set<Integer> accounts;
|
|
||||||
lgnRLock.lock();
|
|
||||||
try {
|
|
||||||
accounts = new HashSet<>(accountChars.keySet());
|
|
||||||
} finally {
|
|
||||||
lgnRLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Integer accId : accounts) {
|
|
||||||
loadAccountCharactersView(accId, 0, newWorld);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return newWorld;
|
|
||||||
}
|
|
||||||
|
|
||||||
private int initWorld() {
|
private int initWorld() {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -501,74 +425,6 @@ public class Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean removeChannel(int worldid) { //lol don't!
|
|
||||||
World world;
|
|
||||||
|
|
||||||
wldRLock.lock();
|
|
||||||
try {
|
|
||||||
if (worldid >= worlds.size()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
world = worlds.get(worldid);
|
|
||||||
} finally {
|
|
||||||
wldRLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world != null) {
|
|
||||||
int channel = world.removeChannel();
|
|
||||||
wldWLock.lock();
|
|
||||||
try {
|
|
||||||
Map<Integer, String> m = channels.get(worldid);
|
|
||||||
if (m != null) {
|
|
||||||
m.remove(channel);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
wldWLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
return channel > -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean removeWorld() { //lol don't!
|
|
||||||
World w;
|
|
||||||
int worldid;
|
|
||||||
|
|
||||||
wldRLock.lock();
|
|
||||||
try {
|
|
||||||
worldid = worlds.size() - 1;
|
|
||||||
if (worldid < 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
w = worlds.get(worldid);
|
|
||||||
} finally {
|
|
||||||
wldRLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (w == null || !w.canUninstall()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
removeWorldPlayerRanking();
|
|
||||||
w.shutdown();
|
|
||||||
|
|
||||||
wldWLock.lock();
|
|
||||||
try {
|
|
||||||
if (worldid == worlds.size() - 1) {
|
|
||||||
worlds.remove(worldid);
|
|
||||||
channels.remove(worldid);
|
|
||||||
worldRecommendedList.remove(worldid);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
wldWLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void resetServerWorlds() { // thanks maple006 for noticing proprietary lists assigned to null
|
private void resetServerWorlds() { // thanks maple006 for noticing proprietary lists assigned to null
|
||||||
wldWLock.lock();
|
wldWLock.lock();
|
||||||
try {
|
try {
|
||||||
@@ -750,50 +606,6 @@ public class Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void installWorldPlayerRanking(int worldid) {
|
|
||||||
List<Pair<Integer, List<Pair<String, Integer>>>> ranking = loadPlayerRankingFromDB(worldid);
|
|
||||||
if (!ranking.isEmpty()) {
|
|
||||||
wldWLock.lock();
|
|
||||||
try {
|
|
||||||
if (!YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) {
|
|
||||||
for (int i = playerRanking.size(); i <= worldid; i++) {
|
|
||||||
playerRanking.add(new ArrayList<>(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
playerRanking.add(worldid, ranking.get(0).getRight());
|
|
||||||
} else {
|
|
||||||
playerRanking.add(0, ranking.get(0).getRight());
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
wldWLock.unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void removeWorldPlayerRanking() {
|
|
||||||
if (!YamlConfig.config.server.USE_WHOLE_SERVER_RANKING) {
|
|
||||||
wldWLock.lock();
|
|
||||||
try {
|
|
||||||
if (playerRanking.size() < worlds.size()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
playerRanking.remove(playerRanking.size() - 1);
|
|
||||||
} finally {
|
|
||||||
wldWLock.unlock();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
List<Pair<Integer, List<Pair<String, Integer>>>> ranking = loadPlayerRankingFromDB(-1 * (this.getWorldsSize() - 2)); // update ranking list
|
|
||||||
|
|
||||||
wldWLock.lock();
|
|
||||||
try {
|
|
||||||
playerRanking.add(0, ranking.get(0).getRight());
|
|
||||||
} finally {
|
|
||||||
wldWLock.unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateWorldPlayerRanking() {
|
public void updateWorldPlayerRanking() {
|
||||||
List<Pair<Integer, List<Pair<String, Integer>>>> rankUpdates = loadPlayerRankingFromDB(-1 * (this.getWorldsSize() - 1));
|
List<Pair<Integer, List<Pair<String, Integer>>>> rankUpdates = loadPlayerRankingFromDB(-1 * (this.getWorldsSize() - 1));
|
||||||
if (rankUpdates.isEmpty()) {
|
if (rankUpdates.isEmpty()) {
|
||||||
@@ -1357,15 +1169,6 @@ public class Server {
|
|||||||
return buffStorage;
|
return buffStorage;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteGuildCharacter(Character mc) {
|
|
||||||
setGuildMemberOnline(mc, false, (byte) -1);
|
|
||||||
if (mc.getMGC().getGuildRank() > 1) {
|
|
||||||
leaveGuild(mc.getMGC());
|
|
||||||
} else {
|
|
||||||
disbandGuild(mc.getMGC().getGuildId());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteGuildCharacter(GuildCharacter mgc) {
|
public void deleteGuildCharacter(GuildCharacter mgc) {
|
||||||
if (mgc.getCharacter() != null) {
|
if (mgc.getCharacter() != null) {
|
||||||
setGuildMemberOnline(mgc.getCharacter(), false, (byte) -1);
|
setGuildMemberOnline(mgc.getCharacter(), false, (byte) -1);
|
||||||
@@ -1377,17 +1180,6 @@ public class Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reloadGuildCharacters(int world) {
|
|
||||||
World worlda = getWorld(world);
|
|
||||||
for (Character mc : worlda.getPlayerStorage().getAllCharacters()) {
|
|
||||||
if (mc.getGuildId() > 0) {
|
|
||||||
setGuildMemberOnline(mc, true, worlda.getId());
|
|
||||||
memberLevelJobUpdate(mc.getMGC());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
worlda.reloadGuildSummary();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastMessage(int world, Packet packet) {
|
public void broadcastMessage(int world, Packet packet) {
|
||||||
for (Channel ch : getChannelsFromWorld(world)) {
|
for (Channel ch : getChannelsFromWorld(world)) {
|
||||||
ch.broadcastPacket(packet);
|
ch.broadcastPacket(packet);
|
||||||
|
|||||||
@@ -350,10 +350,6 @@ public final class Channel {
|
|||||||
playersAway.remove(chrId);
|
playersAway.remove(chrId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canUninstall() {
|
|
||||||
return players.getSize() == 0 && playersAway.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void disconnectAwayPlayers() {
|
private void disconnectAwayPlayers() {
|
||||||
World wserv = getWorldServer();
|
World wserv = getWorldServer();
|
||||||
for (Integer cid : playersAway) {
|
for (Integer cid : playersAway) {
|
||||||
|
|||||||
@@ -296,55 +296,6 @@ public class World {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int removeChannel() {
|
|
||||||
Channel ch;
|
|
||||||
int chIdx;
|
|
||||||
|
|
||||||
chnRLock.lock();
|
|
||||||
try {
|
|
||||||
chIdx = channels.size() - 1;
|
|
||||||
if (chIdx < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ch = channels.get(chIdx);
|
|
||||||
} finally {
|
|
||||||
chnRLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ch == null || !ch.canUninstall()) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
chnWLock.lock();
|
|
||||||
try {
|
|
||||||
if (chIdx == channels.size() - 1) {
|
|
||||||
channels.remove(chIdx);
|
|
||||||
} else {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
chnWLock.unlock();
|
|
||||||
}
|
|
||||||
|
|
||||||
ch.shutdown();
|
|
||||||
return ch.getId();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean canUninstall() {
|
|
||||||
if (players.getSize() > 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Channel ch : this.getChannels()) {
|
|
||||||
if (!ch.canUninstall()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFlag(byte b) {
|
public void setFlag(byte b) {
|
||||||
this.flag = b;
|
this.flag = b;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user