⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 l1castlelocation.java

📁 网络游戏天堂1的java源代码。。。。。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		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 + -