Да, действительно не работает
, но это не беда.
Открываем
NpcController (это в ядре путь
com.aionengine.gameserver.controllers)
находим там метод
onDialogRequest, в нём находим следующий код:
Свернуть ↑
PHP код:
if
(
(
// title ids of npcs
titleId == 315018
|| titleId == 350474
|| titleId == 350473
|| titleId == 350212
|| titleId == 350304
|| titleId == 350305
|| titleId == 370000
|| titleId == 370003
//airlines
|| (getOwner().getNpcId() >= 730265 && getOwner().getNpcId() <= 730269)
)
) {
NpcQuestData npcQD = QuestEngine.getInstance().getNpcQuestData(getOwner().getNpcId());
QuestStateList list = player.getQuestStateList();
List<Integer> events = npcQD.getOnTalkEvent();
boolean hasQuestFromNpc = false;
for (int e : events) {
QuestState qs = list.getQuestState(e);
if (qs != null && qs.getStatus() != QuestStatus.COMPLETE) {
hasQuestFromNpc = true;
break;
} else {
continue;
}
}
if (hasQuestFromNpc)
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
else
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 1011));
}
else
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
Свернуть ↑Развернуть ↓
И приводим его к такому состоянию :
Свернуть ↑
PHP код:
if
(
(
// title ids of npcs
titleId == 315018
|| titleId == 350474
|| titleId == 350473
|| titleId == 350212
|| titleId == 350304
|| titleId == 350305
|| titleId == 370000
|| titleId == 370003
)
) {
NpcQuestData npcQD = QuestEngine.getInstance().getNpcQuestData(getOwner().getNpcId());
QuestStateList list = player.getQuestStateList();
List<Integer> events = npcQD.getOnTalkEvent();
boolean hasQuestFromNpc = false;
for (int e : events) {
QuestState qs = list.getQuestState(e);
if (qs != null && qs.getStatus() != QuestStatus.COMPLETE) {
hasQuestFromNpc = true;
break;
} else {
continue;
}
}
if (hasQuestFromNpc)
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
else
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 1011));
}
else if (getOwner().getNpcId() >= 730265 && getOwner().getNpcId() <= 730269)
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
else
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
Свернуть ↑Развернуть ↓
Что изменили :
1) я удалил из общей обработки
PHP код:
(getOwner().getNpcId() >= 730265 && getOwner().getNpcId() <= 730269)
2) добавил отдельную обработку для удалённого фрагмента :
PHP код:
else if (getOwner().getNpcId() >= 730265 && getOwner().getNpcId() <= 730269)
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 10));
То от куда я удалил фрагмент кода, это обработка нпс по титулам и до изменений по npcid , которая проверяет есть ли у игрока сейчас квесты связанные с обрабатываемыми нпс, если есть то игроку кидают диалог 1011, в котором нет кнопки телепортация или других кнопок, если квестов нет, то выкидавыется диалог 10, в котором есть все прописанные кнопки.
Так вот, каким-то образом для нпс 730267 , определялись квесты связанные с игроком, поэтому выкидывался для этой статуи телепорта диалог 1011.
Во внесёных изменениях теперь всегда для статуй телепортов будет выкидываться диалог 10.