Перейти к содержимому
La2Base
Главная
ЗагрузкиВикиФорумFAQ
ruen
Регистрация Войти
ГлавнаяФайлыВикиВойти
  • Главная
  • Загрузки
  • Вики
  • FAQ
  • Обратная связь
  • О проекте
  • Правила
  • Конфиденциальность
  • Условия использования

© 2026 la2base.com · Все права защищены

ruen
Форум/Квесты/Confirmdlg через Python
Поиск

Confirmdlg через Python

11 ответов288 просмотровСейчас просматривают: 1
T
TosikZOL
· 18.11.2009, 13:42

L2Emu Rev 508

Вот это типо того окна которое вылазиет когда кидают пати или дуэль мне нужно так что бы при ножатие (Ок) или (Да) произошла дапустим регистрация например (ATTAKERS.append(player.getName())) как это сделать ???

окно я вывел вот так через это через питон

Код
sendPacket((ConfirmDlg(2010)).addString("TEST").addTime(60000).addRequesterId(????????))

Импорт
Код
from net.l2emuproject.gameserver.network.clientpackets      import DlgAnswer

0
T
TosikZOL
· 20.11.2009, 13:18

Ну что нету знатаков ?(АПлеОП)

0
G
Gradesk
· 20.11.2009, 18:30

хм, поглядел бы ты в ядре (какой нить шарносорсной сборки) как там это происходит...
Пока что нету возможности самому глянть так что даю только наводку...

0
T
TosikZOL
· 21.11.2009, 05:50

Gradesk: хм, поглядел бы ты в ядре (какой нить шарносорсной сборки) как там это происходит...
Пока что нету возможности самому глянть так что даю только наводку...


у меня L2EmuRT Rev 508 шарносорсной сборкА!
Уваж Gradesk!
Спасибо! я вас и ждал! происходит это так
напримере когда сумон тепешит к себе.
Это всё выводит то окно где идет время и можно ответить "да" то засумонит к себе если "нет" то нет :

Код
if (skill.getId() == 1403) //summon friend
                {
                    // Send message
                    ConfirmDlg confirm = new ConfirmDlg(SystemMessageId.S1_WISHES_TO_SUMMON_YOU_FROM_S2_DO_YOU_ACCEPT.getId());
                    confirm.addCharName(activeChar);
                    confirm.addZoneName(activeChar.getX(), activeChar.getY(), activeChar.getZ());
                    confirm.addTime(30000);
                    confirm.addRequesterId(activePlayer.getCharId());
                    target.sendPacket(confirm);
                }
                else
                {
                    teleToTarget(target, activePlayer, skill);
                    target.teleportRequest(null, null);



дальше вот что, вот тут net.l2emuproject.gameserver.network.clientpackets.DlgAnswer

Код
public void runImpl()
    {
        L2PcInstance cha = getClient().getActiveChar();
        if (cha == null)
            return;

        if (_messageId == SystemMessageId.S1_MAKING_RESSURECTION_REQUEST.getId())
            cha.reviveAnswer(_answer);
        else if (_messageId == SystemMessageId.S1_WISHES_TO_SUMMON_YOU_FROM_S2_DO_YOU_ACCEPT.getId())
            cha.teleportAnswer(_answer, _requesterId);
        else if (_messageId == SystemMessageId.S1.getId() && Config.ALLOW_WEDDING && cha.isEngageRequest())
            cha.engageAnswer(_answer);
        else if (_messageId == 1140)
            cha.gatesAnswer(_answer, 1);
        else if (_messageId == 1141)
            cha.gatesAnswer(_answer, 0);
    }


Код
else if (_messageId == SystemMessageId.S1_WISHES_TO_SUMMON_YOU_FROM_S2_DO_YOU_ACCEPT.getId())
            cha.teleportAnswer(_answer, _requesterId);


А тут уже если ответ "Да" то происходит телепорт cha.teleportAnswer(_answer, _requesterId)

это всё в ядре!
Мне нужно без вмешательство в Ядро сделать это всё на питоне "Эвент"

Выважу я эту табличьку вот так

Код
     player.sendPacket((ConfirmDlg(2010)).addString("Бла Бла бла Это собшение на табличьке ").addTime(тут время).addRequesterId(Тут Хз что))


Теперь нужно при ответе "ДА" зарегить играков на Эвент
Без вмешательство в ядро всё в питоне!
Как это сделать!
P.s Можно в аську

0
G
Gradesk
· 22.11.2009, 15:20

Я не совсем понял что ты написал (даже не вдумывался ибо уже грубо говоря с начала лета серверами особо не занимаюсь) но если ты добился некого результата ответа на вопрос, то есть если можно проверить в питоне как ответил игрок, то регистрация его очень лёгкая, либо через запрос в БД (на случай если регистраци будет происходить до и после перезапуска сервера), или через так называемые "глобальные" переменные.
Второй вариант предпочтительнее (дабы не нагружать сервер и БД).
По этому сразу второй вариант:
для начала надо создать переменную и сделать это так:
"REG_CHAR = [] " //это надо вверху файла прописать.
Дальше в разделе он евент (или он адвевент) указать что переменная является глобальной:
"global REG_CHAR"

и уже после согласия игроква сделать так:
"REG_CHAR.append(player.getName())"
И тогда в масиве REG_CHAR появится имя регнувшегося игрока, после чего банальным "for" мы всех регнутых из масива портаем куда нам надо, и не забываем что прям непосредственно перед началом эвента сделать проверку на то чтобы чар был в онлайне, и для лучшего эффекта если чара не будет в онлайне то удалить его имя из масива (ну правда я бы порекомендовал ещё првоерку на олимп и другие эвенты сделать но это уже тонкости) кодом "REG_CHAR.remove(player.getName())".

P.S. Я правда не совсем понял каким кодом ты узнаеш что ответил чар...

0
T
TosikZOL
· 22.11.2009, 15:39

Gradesk: Я не совсем понял что ты написал (даже не вдумывался ибо уже грубо говоря с начала лета серверами особо не занимаюсь) но если ты добился некого результата ответа на вопрос, то есть если можно проверить в питоне как ответил игрок, то регистрация его очень лёгкая, либо через запрос в БД (на случай если регистраци будет происходить до и после перезапуска сервера), или через так называемые "глобальные" переменные.
Второй вариант предпочтительнее (дабы не нагружать сервер и БД).
По этому сразу второй вариант:
для начала надо создать переменную и сделать это так:
"REG_CHAR = [] " //это надо вверху файла прописать.
Дальше в разделе он евент (или он адвевент) указать что переменная является глобальной:
"global REG_CHAR"

и уже после согласия игроква сделать так:
"REG_CHAR.append(player.getName())"
И тогда в масиве REG_CHAR появится имя регнувшегося игрока, после чего банальным "for" мы всех регнутых из масива портаем куда нам надо, и не забываем что прям непосредственно перед началом эвента сделать проверку на то чтобы чар был в онлайне, и для лучшего эффекта если чара не будет в онлайне то удалить его имя из масива (ну правда я бы порекомендовал ещё првоерку на олимп и другие эвенты сделать но это уже тонкости) кодом "REG_CHAR.remove(player.getName())".

P.S. Я правда не совсем понял каким кодом ты узнаеш что ответил чар...


Как сделать реакцию на кнопку в ядре я разобрался а вот как в питоне нет мне нужно это сделать без ядра чтобы в нем не чего не менять регесарацию я уже сам сделаю нужно только чтобы среагировала на нажатие кнопки!?

Я незнаю как добится реакции на ответ!!Знаю как в ядре !а вот как в питоне ХЗ!
Как в питоне ?

0
G
Gradesk
· 23.11.2009, 17:17

хм, а тут уже надо посидеть поковыряться... но думаю гдето в "селфах" надо копаться и не в оневенте а чтото типо он инт... который в самом начале описывается... хотя хз.
Я уже пока забил на сервера... так что тут думаю мои доводы прекращаются beach.gif

0
T
TosikZOL
· 24.11.2009, 14:21

Gradesk: хм, а тут уже надо посидеть поковыряться... но думаю гдето в "селфах" надо копаться и не в оневенте а чтото типо он инт... который в самом начале описывается... хотя хз.
Я уже пока забил на сервера... так что тут думаю мои доводы прекращаются beach.gif

Я жду вашей помоши!спасибо!

0
T
TosikZOL
· 28.11.2009, 05:47

Ап =)

0
T
TosikZOL
· 29.11.2009, 14:31

На правах АппА !

0
G
Gradesk
· 29.11.2009, 15:33

Чтото мне подсказывает (а если быть точным то здравый смысл) решения для этой темы нету на питоне... ибо это питон :) вернее квестовый движок... но без вмешательства в ядро это не исправить...
Как я предпологал - можно попробовать обойтиь простым диалоговым окном и "глобальным" таймером, но есть нъюанс - чар должен быть рядом с НПСом. Иначе его ответ ничего не даст, это тоже самое что открыть диалог и отойти от НПСа а потом тыкать кнопки, тыкниш и ничего не произайдёт...
Так же есть вероятность траблов с выдачей диалога если чар далеко от НПСа, но вроде это можно обойти используя пакетный уровень а не "return"...

0
Войдите или зарегистрируйтесь чтобы ответить