📄 l1world.java
字号:
// 奥行きが射程とかみ合わないので直線距離で判定するように変更。
// if (rotX > xmin && rotX <= xmax && rotY >= ymin && rotY <=
// ymax) {
if (rotX > xmin && distance <= xmax && rotY >= ymin
&& rotY <= ymax) {
result.add(element);
}
}
}
return result;
}
public ArrayList<L1Object> getVisibleObjects(L1Object object) {
return getVisibleObjects(object, -1);
}
public ArrayList<L1Object> getVisibleObjects(L1Object object, int radius) {
L1Map map = object.getMap();
Point pt = object.getLocation();
ArrayList<L1Object> result = new ArrayList<L1Object>();
if (map.getId() <= MAX_MAP_ID) {
for (L1Object element : _visibleObjects[map.getId()].values()) {
if (element.equals(object)) {
continue;
}
if (map != element.getMap()) {
continue;
}
switch(radius){
case -1:
if (pt.isInScreen(element.getLocation())) {
result.add(element);
}
break;
case 0:
if (pt.isSamePoint(element.getLocation())) {
result.add(element);
}
break;
//偵測穿人外掛
case 1:
if (pt.isNearPoint(element.getLocation())) {
result.add(element);
}
break;
//~偵測穿人外掛
default:
if (pt.getTileLineDistance(element.getLocation()) <= radius) {
result.add(element);
}
break;
}
}
}
return result;
}
public ArrayList<L1Object> getVisiblePoint(L1Location loc, int radius) {
ArrayList<L1Object> result = new ArrayList<L1Object>();
int mapId = loc.getMapId(); // ループ内で呼ぶと重いため
if (mapId <= MAX_MAP_ID) {
for (L1Object element : _visibleObjects[mapId].values()) {
if (mapId != element.getMapId()) {
continue;
}
if (loc.getTileLineDistance(element.getLocation()) <= radius) {
result.add(element);
}
}
}
return result;
}
public ArrayList<L1PcInstance> getVisiblePlayer(L1Object object) {
return getVisiblePlayer(object, -1);
}
public ArrayList<L1PcInstance> getVisiblePlayer(L1Object object, int radius) {
int map = object.getMapId();
Point pt = object.getLocation();
ArrayList<L1PcInstance> result = new ArrayList<L1PcInstance>();
for (L1PcInstance element : _allPlayers.values()) {
if (element.equals(object)) {
continue;
}
if (map != element.getMapId()) {
continue;
}
if (radius == -1) {
if (pt.isInScreen(element.getLocation())) {
result.add(element);
}
} else if (radius == 0) {
if (pt.isSamePoint(element.getLocation())) {
result.add(element);
}
} else {
if (pt.getTileLineDistance(element.getLocation()) <= radius) {
result.add(element);
}
}
}
return result;
}
public ArrayList<L1PcInstance> getVisiblePlayerExceptTargetSight(
L1Object object, L1Object target) {
int map = object.getMapId();
Point objectPt = object.getLocation();
Point targetPt = target.getLocation();
ArrayList<L1PcInstance> result = new ArrayList<L1PcInstance>();
for (L1PcInstance element : _allPlayers.values()) {
if (element.equals(object)) {
continue;
}
if (map != element.getMapId()) {
continue;
}
if (Config.PC_RECOGNIZE_RANGE == -1) {
if (objectPt.isInScreen(element.getLocation())) {
if (!targetPt.isInScreen(element.getLocation())) {
result.add(element);
}
}
} else {
if (objectPt.getTileLineDistance(element.getLocation()) <= Config.PC_RECOGNIZE_RANGE) {
if (targetPt.getTileLineDistance(element.getLocation()) > Config.PC_RECOGNIZE_RANGE) {
result.add(element);
}
}
}
}
return result;
}
/**
* objectを認識できる範囲にいるプレイヤーを取得する
*
* @param object
* @return
*/
public ArrayList<L1PcInstance> getRecognizePlayer(L1Object object) {
return getVisiblePlayer(object, Config.PC_RECOGNIZE_RANGE);
}
// _allPlayersのビュー
private Collection<L1PcInstance> _allPlayerValues;
public Collection<L1PcInstance> getAllPlayers() {
Collection<L1PcInstance> vs = _allPlayerValues;
return (vs != null) ? vs : (_allPlayerValues = Collections
.unmodifiableCollection(_allPlayers.values()));
}
/**
* ワールド内にいる指定された名前のプレイヤーを取得する。
*
* @param name -
* プレイヤー名(小文字・大文字は無視される)
* @return 指定された名前のL1PcInstance。該当プレイヤーが存在しない場合はnullを返す。
*/
public L1PcInstance getPlayer(String name) {
if (_allPlayers.contains(name)) {
return _allPlayers.get(name);
}
for (L1PcInstance each : getAllPlayers()) {
if (each.getName().equalsIgnoreCase(name)) {
return each;
}
}
return null;
}
// _allPetsのビュー
private Collection<L1PetInstance> _allPetValues;
public Collection<L1PetInstance> getAllPets() {
Collection<L1PetInstance> vs = _allPetValues;
return (vs != null) ? vs : (_allPetValues = Collections
.unmodifiableCollection(_allPets.values()));
}
// _allSummonsのビュー
private Collection<L1SummonInstance> _allSummonValues;
public Collection<L1SummonInstance> getAllSummons() {
Collection<L1SummonInstance> vs = _allSummonValues;
return (vs != null) ? vs : (_allSummonValues = Collections
.unmodifiableCollection(_allSummons.values()));
}
public final Map<Integer, L1Object> getAllVisibleObjects() {
return _allObjects;
}
public final Map<Integer, L1Object>[] getVisibleObjects() {
return _visibleObjects;
}
public final Map<Integer, L1Object> getVisibleObjects(int mapId) {
return _visibleObjects[mapId];
}
public Object getRegion(Object object) {
return null;
}
public void addWar(L1War war) {
if (!_allWars.contains(war)) {
_allWars.add(war);
}
}
public void removeWar(L1War war) {
if (_allWars.contains(war)) {
_allWars.remove(war);
}
}
// _allWarsのビュー
private List<L1War> _allWarList;
public List<L1War> getWarList() {
List<L1War> vs = _allWarList;
return (vs != null) ? vs : (_allWarList = Collections
.unmodifiableList(_allWars));
}
public void storeClan(L1Clan clan) {
L1Clan temp = getClan(clan.getClanName());
if (temp == null) {
_allClans.put(clan.getClanName(), clan);
}
}
public void removeClan(L1Clan clan) {
L1Clan temp = getClan(clan.getClanName());
if (temp != null) {
_allClans.remove(clan.getClanName());
}
}
public L1Clan getClan(String clan_name) {
return _allClans.get(clan_name);
}
// _allClansのビュー
private Collection<L1Clan> _allClanValues;
public Collection<L1Clan> getAllClans() {
Collection<L1Clan> vs = _allClanValues;
return (vs != null) ? vs : (_allClanValues = Collections
.unmodifiableCollection(_allClans.values()));
}
public void setWeather(int weather) {
_weather = weather;
}
public int getWeather() {
return _weather;
}
public void set_worldChatElabled(boolean flag) {
_worldChatEnabled = flag;
}
public boolean isWorldChatElabled() {
return _worldChatEnabled;
}
public void setProcessingContributionTotal(boolean flag) {
_processingContributionTotal = flag;
}
public boolean isProcessingContributionTotal() {
return _processingContributionTotal;
}
/**
* ワールド上に存在する全てのプレイヤーへパケットを送信する。
*
* @param packet
* 送信するパケットを表すServerBasePacketオブジェクト。
*/
public void broadcastPacketToAll(ServerBasePacket packet) {
_log.finest("players to notify : " + getAllPlayers().size());
for (L1PcInstance pc : getAllPlayers()) {
pc.sendPackets(packet);
}
}
/**
* ワールド上に存在する全てのプレイヤーへサーバーメッセージを送信する。
*
* @param message
* 送信するメッセージ
*/
public void broadcastServerMessage(String message) {
broadcastPacketToAll(new S_SystemMessage(message));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -