📄 l1castlelocation.java
字号:
for (Map.Entry<Integer, L1MapArea> entry : _areas.entrySet()) {
if (entry.getValue().contains(loc)) {
return entry.getKey();
}
}
for (Map.Entry<Integer, Integer> entry : _innerTowerMaps.entrySet()) {
if (entry.getValue() == loc.getMapId()) {
return entry.getKey();
}
}
return 0;
}
/**
* 戦争エリア(旗内)の座標からcastle_idを返す
*/
public static int getCastleIdByArea(L1Character cha) {
return getCastleIdByArea(cha.getLocation());
}
public static boolean checkInWarArea(int castleId, L1Location loc) {
return castleId == getCastleIdByArea(loc);
}
/**
* 指定した城の戦争エリア(旗内)にいるか返す
*/
public static boolean checkInWarArea(int castleId, L1Character cha) {
return checkInWarArea(castleId, cha.getLocation());
}
public static boolean checkInAllWarArea(L1Location loc) {
return 0 != getCastleIdByArea(loc);
}
/**
* いずれかの戦争エリア(旗内)かどうかチェック
*/
public static boolean checkInAllWarArea(int locx, int locy, short mapid) {
return checkInAllWarArea(new L1Location(locx, locy, mapid));
}
/**
* castleIdからガーディアンタワーの座標を返す
*/
public static int[] getTowerLoc(int castleId) {
int[] result = new int[3];
L1Location loc = _towers.get(castleId);
if (loc != null) {
result[0] = loc.getX();
result[1] = loc.getY();
result[2] = loc.getMapId();
}
return result;
}
/**
* castleIdから戦争エリア(旗内)の座標を返す
*/
public static int[] getWarArea(int castleId) {
int[] loc = new int[5];
if (castleId == KENT_CASTLE_ID) { // ケント城
loc[0] = KENT_X1;
loc[1] = KENT_X2;
loc[2] = KENT_Y1;
loc[3] = KENT_Y2;
loc[4] = KENT_MAP;
} else if (castleId == OT_CASTLE_ID) { // オークの森
loc[0] = OT_X1;
loc[1] = OT_X2;
loc[2] = OT_Y1;
loc[3] = OT_Y2;
loc[4] = OT_MAP;
} else if (castleId == WW_CASTLE_ID) { // ウィンダウッド城
loc[0] = WW_X1;
loc[1] = WW_X2;
loc[2] = WW_Y1;
loc[3] = WW_Y2;
loc[4] = WW_MAP;
} else if (castleId == GIRAN_CASTLE_ID) { // ギラン城
loc[0] = GIRAN_X1;
loc[1] = GIRAN_X2;
loc[2] = GIRAN_Y1;
loc[3] = GIRAN_Y2;
loc[4] = GIRAN_MAP;
} else if (castleId == HEINE_CASTLE_ID) { // ハイネ城
loc[0] = HEINE_X1;
loc[1] = HEINE_X2;
loc[2] = HEINE_Y1;
loc[3] = HEINE_Y2;
loc[4] = HEINE_MAP;
} else if (castleId == DOWA_CASTLE_ID) { // ドワーフ城
loc[0] = DOWA_X1;
loc[1] = DOWA_X2;
loc[2] = DOWA_Y1;
loc[3] = DOWA_Y2;
loc[4] = DOWA_MAP;
} else if (castleId == ADEN_CASTLE_ID) { // アデン城
loc[0] = ADEN_X1;
loc[1] = ADEN_X2;
loc[2] = ADEN_Y1;
loc[3] = ADEN_Y2;
loc[4] = ADEN_MAP;
} else if (castleId == DIAD_CASTLE_ID) { // ディアド要塞
loc[0] = DIAD_X1;
loc[1] = DIAD_X2;
loc[2] = DIAD_Y1;
loc[3] = DIAD_Y2;
loc[4] = DIAD_MAP;
}
return loc;
}
public static int[] getCastleLoc(int castle_id) { // castle_idから城内の座標を返す
int[] loc = new int[3];
if (castle_id == KENT_CASTLE_ID) { // ケント城
loc[0] = 32731;
loc[1] = 32810;
loc[2] = 15;
} else if (castle_id == OT_CASTLE_ID) { // オークの森
loc[0] = 32800;
loc[1] = 32277;
loc[2] = 4;
} else if (castle_id == WW_CASTLE_ID) { // ウィンダウッド城
loc[0] = 32730;
loc[1] = 32814;
loc[2] = 29;
} else if (castle_id == GIRAN_CASTLE_ID) { // ギラン城
loc[0] = 32724;
loc[1] = 32827;
loc[2] = 52;
} else if (castle_id == HEINE_CASTLE_ID) { // ハイネ城
loc[0] = 32568;
loc[1] = 32855;
loc[2] = 64;
} else if (castle_id == DOWA_CASTLE_ID) { // ドワーフ城
loc[0] = 32853;
loc[1] = 32810;
loc[2] = 66;
} else if (castle_id == ADEN_CASTLE_ID) { // アデン城
loc[0] = 32892;
loc[1] = 32572;
loc[2] = 300;
} else if (castle_id == DIAD_CASTLE_ID) { // ディアド要塞
loc[0] = 32733;
loc[1] = 32985;
loc[2] = 330;
}
return loc;
}
/*
* castle_idから帰還先の座標をランダムに返す
*/
public static int[] getGetBackLoc(int castle_id) {
int[] loc;
if (castle_id == KENT_CASTLE_ID) { // ケント城
loc = L1TownLocation.getGetBackLoc(L1TownLocation.TOWNID_KENT);
} else if (castle_id == OT_CASTLE_ID) { // オークの森
loc = L1TownLocation
.getGetBackLoc(L1TownLocation.TOWNID_ORCISH_FOREST);
} else if (castle_id == WW_CASTLE_ID) { // ウィンダウッド城
loc = L1TownLocation.getGetBackLoc(L1TownLocation.TOWNID_WINDAWOOD);
} else if (castle_id == GIRAN_CASTLE_ID) { // ギラン城
loc = L1TownLocation.getGetBackLoc(L1TownLocation.TOWNID_GIRAN);
} else if (castle_id == HEINE_CASTLE_ID) { // ハイネ城
loc = L1TownLocation.getGetBackLoc(L1TownLocation.TOWNID_HEINE);
} else if (castle_id == DOWA_CASTLE_ID) { // ドワーフ城
loc = L1TownLocation.getGetBackLoc(L1TownLocation.TOWNID_WERLDAN);
} else if (castle_id == ADEN_CASTLE_ID) { // アデン城
loc = L1TownLocation.getGetBackLoc(L1TownLocation.TOWNID_ADEN);
} else if (castle_id == DIAD_CASTLE_ID) { // ディアド要塞
// ディアド要塞の帰還先は未調査
Random random = new Random();
int rnd = random.nextInt(3);
loc = new int[3];
if (rnd == 0) {
loc[0] = 32792;
loc[1] = 32807;
loc[2] = 310;
} else if (rnd == 1) {
loc[0] = 32816;
loc[1] = 32820;
loc[2] = 310;
} else if (rnd == 2) {
loc[0] = 32823;
loc[1] = 32797;
loc[2] = 310;
}
} else { // 存在しないcastle_idが指定された場合はSKT
loc = L1TownLocation
.getGetBackLoc(L1TownLocation.TOWNID_SILVER_KNIGHT_TOWN);
}
return loc;
}
/**
* npcidからcastle_idを返す
*
* @param npcid
* @return
*/
public static int getCastleIdByNpcid(int npcid) {
// アデン城:アデン王国全域
// ケント城:ケント、グルーディン
// ウィンダウッド城:ウッドベック、オアシス、シルバーナイトタウン
// ギラン城:ギラン、話せる島
// ハイネ城:ハイネ
// ドワーフ城:ウェルダン、象牙の塔、象牙の塔の村
// オーク砦:火田村
// ディアド要塞:戦争税の一部
int castle_id = 0;
int town_id = L1TownLocation.getTownIdByNpcid(npcid);
switch (town_id) {
case L1TownLocation.TOWNID_KENT:
case L1TownLocation.TOWNID_GLUDIO:
castle_id = KENT_CASTLE_ID; // ケント城
break;
case L1TownLocation.TOWNID_ORCISH_FOREST:
castle_id = OT_CASTLE_ID; // オークの森
break;
case L1TownLocation.TOWNID_SILVER_KNIGHT_TOWN:
case L1TownLocation.TOWNID_WINDAWOOD:
castle_id = WW_CASTLE_ID; // ウィンダウッド城
break;
case L1TownLocation.TOWNID_TALKING_ISLAND:
case L1TownLocation.TOWNID_GIRAN:
castle_id = GIRAN_CASTLE_ID; // ギラン城
break;
case L1TownLocation.TOWNID_HEINE:
castle_id = HEINE_CASTLE_ID; // ハイネ城
break;
case L1TownLocation.TOWNID_WERLDAN:
case L1TownLocation.TOWNID_OREN:
castle_id = DOWA_CASTLE_ID; // ドワーフ城
break;
case L1TownLocation.TOWNID_ADEN:
castle_id = ADEN_CASTLE_ID; // アデン城
break;
case L1TownLocation.TOWNID_OUM_DUNGEON:
castle_id = DIAD_CASTLE_ID; // ディアド要塞
break;
default:
break;
}
return castle_id;
}
// このメソッドはアデン時間で一日毎に更新される税率を返却する。(リアルタイムな税率ではない)
public static int getCastleTaxRateByNpcId(int npcId) {
int castleId = getCastleIdByNpcid(npcId);
if (castleId != 0) {
return _castleTaxRate.get(castleId);
}
return 0;
}
// 各城の税率を保管しておくHashMap(ショップ用)
private static HashMap<Integer, Integer> _castleTaxRate = new HashMap<Integer, Integer>();
private static L1CastleTaxRateListener _listener;
// GameServer#initialize,L1CastleTaxRateListener#onDayChangedだけに呼び出される予定。
public static void setCastleTaxRate() {
for (L1Castle castle : CastleTable.getInstance().getCastleTableList()) {
_castleTaxRate.put(castle.getId(), castle.getTaxRate());
}
if (_listener == null) {
_listener = new L1CastleTaxRateListener();
L1GameTimeClock.getInstance().addListener(_listener);
}
}
private static class L1CastleTaxRateListener extends L1GameTimeAdapter {
@Override
public void onDayChanged(L1GameTime time) {
L1CastleLocation.setCastleTaxRate();
}
}
/**
* サブタワー番号からサブタワーの座標を返す
*/
public static int[] getSubTowerLoc(int no) {
int[] result = new int[3];
L1Location loc = _subTowers.get(no);
if (loc != null) {
result[0] = loc.getX();
result[1] = loc.getY();
result[2] = loc.getMapId();
}
return result;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -