섭따없이 리로드하기
기존 에바팩에 들어있는 리로드 명령어를 몇가지 더 추가해서 쓰기 편하게 짜집기 해봤습니다
원본소스가 누구인지 모르니 태클은 사양해주세요
실력이 미천해서 새로운소스는 못만들고 초보분들께 도움이 되는 간단한 응용법을 올렸습니다
리로드를 쉽게 추가하는 방법은
예:)
NpcTable.java
private final HashMap<Integer, L1Npc> _npcs = new HashMap<Integer, L1Npc>();
테이블을 열어보시면 위와같은게 있죠?
public static void reload() {
NpcTable oldInstance = _instance; //NpcTable <<각테이블명 이름
_instance = new NpcTable();
oldInstance._npcs.clear();
}
L1Reload.java //리로드명령어 넣기
gm.sendPackets(new S_SystemMessage("혈맹테이블 리로드완료"));//리로드 완료후 보여주는 문구입니다
} else if (arg.equalsIgnoreCase("엔피시")){//.리로드 다음 사용할 명령어
NpcTable.reload(); //엔피시테이블에서 리로드를 추가해줫으니 불러와야겠죠?
이런식으로 응용하시면 모든테이블에 리로드를 추가하실수있고 서버다운 없이 사용가능해지죠 편합니다 ㅋ
L1Reload.java
package l1j.server.server.command.executor;
import java.util.logging.Logger;
import l1j.server.server.datatables.ClanTable;
import l1j.server.server.datatables.DropItemTable;
import l1j.server.server.datatables.DropTable;
import l1j.server.server.datatables.ItemTable;
import l1j.server.server.datatables.MapFixKeyTable;
import l1j.server.server.datatables.MobSkillTable;
import l1j.server.server.datatables.NpcSpawnTable;
import l1j.server.server.datatables.NpcTable;
import l1j.server.server.datatables.PolyTable;
import l1j.server.server.datatables.ResolventTable;
import l1j.server.server.datatables.ServerRateTable;
import l1j.server.server.datatables.ShopTable;
import l1j.server.server.datatables.SkillsTable;
import l1j.server.server.datatables.SpawnTable;
import l1j.server.server.model.L1Object;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1DoorInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.item.L1TreasureBox;
import l1j.server.server.serverpackets.S_RemoveObject;
import l1j.server.server.serverpackets.S_SystemMessage;
public class L1Reload implements L1CommandExecutor {
@SuppressWarnings("unused")
private static Logger _log = Logger.getLogger(L1Reload.class.getName());
private L1Reload() {
}
public static L1CommandExecutor getInstance() {
return new L1Reload();
}
@Override
public void execute(L1PcInstance gm, String cmdName, String arg) {
if (arg.equalsIgnoreCase("드랍")) {
DropTable.reload();
gm.sendPackets(new S_SystemMessage("드랍 리로드완료"));
} else if (arg.equalsIgnoreCase("드랍아이템")) {
DropItemTable.reload();
} else if (arg.equalsIgnoreCase("상점")) {
ShopTable.reload();
gm.sendPackets(new S_SystemMessage("드랍아이템 리로드완료"));
} else if (arg.equalsIgnoreCase("변신")) {
PolyTable.reload();
gm.sendPackets(new S_SystemMessage("변신(pol)테이블 리로드완료"));
} else if (arg.equalsIgnoreCase("용해제")) {
ResolventTable.reload();
gm.sendPackets(new S_SystemMessage("용해제 리로드완료"));
} else if (arg.equalsIgnoreCase("상자")) {
L1TreasureBox.load();
gm.sendPackets(new S_SystemMessage("보물상자 리로드완료"));
} else if (arg.equalsIgnoreCase("스킬")) {
SkillsTable.reload();
gm.sendPackets(new S_SystemMessage("스킬테이블 리로드완료"));
} else if (arg.equalsIgnoreCase("몹스킬")) {
MobSkillTable.reload();
gm.sendPackets(new S_SystemMessage("몹스킬 리로드완료"));
} else if (arg.equalsIgnoreCase("맵")){
MapFixKeyTable.reload();
gm.sendPackets(new S_SystemMessage("맵테이블 리로드완료"));
} else if (arg.equalsIgnoreCase("아이템")){
ItemTable.reload();
gm.sendPackets(new S_SystemMessage("아이템테이블 리로드완료"));
} else if (arg.equalsIgnoreCase("맵")){
MapFixKeyTable.reload();
gm.sendPackets(new S_SystemMessage("Maps 리로드완료"));
} else if (arg.equalsIgnoreCase("맵픽스")){
MapFixKeyTable.reload();
gm.sendPackets(new S_SystemMessage("Map Fix key 리로드완료"));
} else if (arg.equalsIgnoreCase("혈맹")){
ClanTable.reload();
gm.sendPackets(new S_SystemMessage("혈맹테이블 리로드완료"));
} else if (arg.equalsIgnoreCase("엔피시")){
NpcTable.reload();
gm.sendPackets(new S_SystemMessage("Npc테이블 리로드완료"));
} else if (arg.equalsIgnoreCase("엔피시스폰")){
NpcSpawnTable.reload();
gm.sendPackets(new S_SystemMessage("Npc 스폰 테이블 리로드완료"));
} else if (arg.equalsIgnoreCase("몹스폰")){
SpawnTable.reload();
gm.sendPackets(new S_SystemMessage("스폰리스트 테이블 리로드완료"));
} else if (arg.equalsIgnoreCase("스폰삭제") ) {
for (L1Object l1object : L1World.getInstance().getObject()) {
if (l1object instanceof L1NpcInstance) {
if (!(l1object instanceof L1DoorInstance)) {
L1NpcInstance L1NpcInstance = (L1NpcInstance) l1object;
L1World.getInstance().removeVisibleObject(L1NpcInstance);
L1World.getInstance().broadcastPacketToAll(new S_RemoveObject(L1NpcInstance));
}
}
}
gm.sendPackets(new S_SystemMessage("스폰삭제가 완료되었습니다 "));
}else {
gm.sendPackets(new S_SystemMessage(cmdName + " : [드랍, 드랍아이템,상자,용해제,상점,혈맹, 변신, 혈맹," +
" 스킬,, 몹스킬, 아이템,엔피시,스폰,몹스폰,스폰삭제,맵,맵픽스"));
}
}
}
//있는팩도 있고 없는팩도 있을겁니다 나비켓에 있는 테이블을읽어 올려면 아래와 같이 각 테이블 마다 리로드를 추가해주시면
게임상에서 .리로드 명령어 를 사용하시면 서버다운 없이 서버수정을 간편하고 용이하게 하실수잇습니다
주로상점 가격과 상점아이템 추가 부분 또는 엔피시 추가 재배치 등으로 서버를 재시작 하는경우가 많죠?
리로드를 응용해보니 엔피시 배치를 다지우고 새로 깔아보면서 쉽게 서버를 꾸미고 만들수 있더군요
NpcTable.java
public static void reload() {
NpcTable oldInstance = _instance;
_instance = new NpcTable();
oldInstance._npcs.clear();
}//추가
NpcSpawnTable.java
public static void reload() {
NpcSpawnTable oldInstance = _instance;
_instance = new NpcSpawnTable();
oldInstance._spawntable.clear();
}//추가
SpawnTable.java
public static void reload() {
SpawnTable oldInstance = _instance;
_instance = new SpawnTable();
oldInstance._spawntable.clear();
}//추가
ShopTable.java
public static void reload() {
ShopTable oldInstance = _instance;
_instance = new ShopTable();
oldInstance._allShops.clear();
}//추가
출처 옆동네(팝X)

로스트사가 님의 최근 댓글
감사합니다. 2019 06.13 감사합니다. 2019 06.12 감사합니다. 2019 05.03 감사합니다. 2019 05.03 감사합니다. 2018 03.11