Сообщений: 9
Тем: 4
Зарегистрирован: Apr 2011
Репутация:
0
Телепорт в район Крайнделла вместо того чтобы телепортировать ведет диалог... Смотрел, кувырял, не понял...
Помогите разобраться в чем проблема...
как заставить его тп?
Сообщений: 202
Тем: 7
Зарегистрирован: Dec 2010
Репутация:
54
Какой нпс тебе диалог выдаёт вместо телепорта? Желательно точное его имя в игре и его id.
Дверь запили!
Сообщений: 9
Тем: 4
Зарегистрирован: Apr 2011
Репутация:
0
npc_id="730267" name="The Crandale District"
именно этот и выдает диалог..
Прописано всё как должно быть, не могу понять почему он такой ленивый)
Сообщений: 202
Тем: 7
Зарегистрирован: Dec 2010
Репутация:
54
Да, действительно не работает ![Smile Smile](https://forum.zone-game.info/images/smilies/smile.png) , но это не беда.
Открываем NpcController (это в ядре путь com.aionengine.gameserver.controllers)
находим там метод onDialogRequest, в нём находим следующий код:
Искомый код
PHP код: <?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 код: <?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 код: <?php
(getOwner().getNpcId() >= 730265 && getOwner().getNpcId() <= 730269)
2) добавил отдельную обработку для удалённого фрагмента :
PHP код: <?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.
Дверь запили!
Сообщений: 2,124
Тем: 84
Зарегистрирован: Jul 2010
Репутация:
3,419
flashman, эта твоя наработка командами будет взята на заметку и внедрена?
Сообщений: 982
Тем: 73
Зарегистрирован: Jan 2009
Репутация:
2,862
не знаю кто как я уже взял ,спс
MiR @ Aion Emu
Продам сборки v2.7 v3.9 v4.7 v4.8 v4.9 v5.1 , сборки мастер сервера v1.9 и v2.7 ,пишу скрипты и квесты на заказ , правки ядра , правки даты , писать в ПМ
Сообщений: 202
Тем: 7
Зарегистрирован: Dec 2010
Репутация:
54
TieLay, этого я незнаю, я обитаю на этом форуме ![Smile Smile](https://forum.zone-game.info/images/smilies/smile.png) , так что эту наработку могут заметить только случайно.
Дверь запили!
Сообщений: 202
Тем: 7
Зарегистрирован: Dec 2010
Репутация:
54
Упустил кое что из виду, вот финальный вариант кода, оказывается целью удалённой мною обработки были вовсе не статуи телепорта по городу, а статуи которые телепортируют в храм маркутана и в храм кайсинель, а так же те которые портают из храма обратно. А вот проблемная статуя телепорта в район Крайнделла оказалась в обрабатываемом диапазоне npc_id, теперь всё чётко ![Smile Smile](https://forum.zone-game.info/images/smilies/smile.png) :
code
PHP код: <?php
@Override
public void onDialogRequest(Player player) {
getOwner().getAi().handleEvent(Event.TALK);
if (QuestEngine.getInstance().onDialog(new QuestCookie(getOwner(), player, 0, -1)))
return;
// Zephyr Deliveryman
if (getOwner().getObjectId() == player.getZephyrObjectId()) {
PacketSendUtility.sendPacket(player, new SM_DIALOG_WINDOW(getOwner().getObjectId(), 18));
return;
}
int npc_id = getOwner().getNpcId();
int titleId = getOwner().getObjectTemplate().getTitleId();
if
(
(
// title ids of npcs
titleId == 315018
|| titleId == 350474
|| titleId == 350473
|| titleId == 350212
|| titleId == 350304
|| titleId == 350305
|| titleId == 370000
|| titleId == 370003
|| (npc_id == 730265 || npc_id == 730266 || npc_id == 730268 || npc_id == 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));
}
Дверь запили!
Сообщений: 982
Тем: 73
Зарегистрирован: Jan 2009
Репутация:
2,862
flashman дружище знаю ты можеш помочь ))
подскажи где что прописать?
MiR @ Aion Emu
Продам сборки v2.7 v3.9 v4.7 v4.8 v4.9 v5.1 , сборки мастер сервера v1.9 и v2.7 ,пишу скрипты и квесты на заказ , правки ядра , правки даты , писать в ПМ
Сообщений: 202
Тем: 7
Зарегистрирован: Dec 2010
Репутация:
54
C 2.5 ещё не работал, но тут можно сказать что запрашивается страница с id 10001, но обычно кнопки выкидывающие id 10000, 10001 и дальше это кнопки подтвержадиющие какие-то дейтсвия, в данном случае по нажатию кнопки надо тпешнуть игрока в нужную локацию. Этот id надо обрабатывать в методе onDialogSelect в классе NpcController.
Дверь запили!
|