Jump to content
Korean Random

denis79513

User
  • Content Count

    23
  • Joined

  • Last visited

Everything posted by denis79513

  1. Как я понимаю, команда клика по миникарте является функцией чата. Т.е. главным образом идет сообщение в чат а дополнительно анимация на миникарте, и выдрать ее оттуда нельзя. Единственный выход искать исходник анимации в swf и самому прикручивать к своему событию клика.
  2. Ребятки, хелп в 9.17 перестало работать prbDispatcher = g_prbLoader.getDispatcher() prbDispatcher.doSelectAction(PrbAction(actionName=PREBATTLE_ACTION_NAME.SQUAD), callback=test) Ошибок не возникает, но взвод не создается. Декомпилил новый клиент, там структура папок немного изменилась, видно что перепилили функционал, но все нужные функции вроде остались, поменял пути в импортах и все вроде как должно работать но нифига( Что-то нарыл, вот так в 9.17 можно отправить приглашения, но вот взвод создавать ни в какую не хочет( entity = prbDispatcher.getEntity() entity.request(SendInvitesCtx([73730118], "Message"))
  3. WOT Team - сервис для автоматического поиска взвода. Часто бывает, что друзей нет онлайн и поиграть во взводе не с кем, а просаживать статистику в нынешнем рандоме не хочется. После установки мода вы сможете выбрать необходимые уровни боев и сервис автоматически подберет игроков по уровню техники, рейтингу эффективности среди пользователей сервиса и сформирует взвод. Внимание, всем игрокам, скачавшим предыдущую версию мода 2.0 просьба обновиться до версии 2.1, т.к. в версии 2.0 был обнаружен серьезный баг препятствующий формированию взвода. Хорошая новость заключается в том, что количество пользователей мода начинает расти и после перехода на версию 2.1 поиск взвода значительно ускорится. Версия мода 2.1 от 18.12.16 содержит следующие изменения: - исправлен серьезный баг, появившийся в связи с выходом патча игры, препятствующий формированию взводов, теперь все работает нормально - добавлено уведомление в ангаре о необходимости обновления мода в случае выхода новой версии, теперь не нужно заходить сюда и искать новую версию мода, ссылка на него будет доступна в ангаре Версия мода 2.0 от 15.12.16 содержит следующие изменения: - мод модифицирован для актуальной версии игры (0.9.17) - в ангар добавлена кнопка для поиска взвода, теперь не нужно помнить адрес сервиса, достаточно кликнуть на кнопку в ангаре - внесены мелкие изменения в логику работы сервиса для более быстрого подбора игроков Результат проверки мода на сайте VirusTotal: открыть в новом окне Внимание: В связи с тем что сервис только открылся, пока не наберется необходимое количество игроков, подбор игроков будет осуществляться с большим разбросом по рейтингу эффективности, для наименьшего времени ожидания формирования взвода. Так например сервис будет подбирать для вас игроков, рейтинг эффективности которых будет отличаться от вашего на +/- 50%, в дальнейшем, когда количество пользователей увеличится, процент значительно снизится и игроки будут подбираться более близкие к вам по РЭ. [СКАЧАТЬ] Тема на оф. форуме игры: ссылка
  4. Читал несколько раз уже, там кнопки, мне не нужны кнопки, я просто ссылку хочу
  5. Решил проблему. Осталось последнее, насчет SystemMessages.pushMessage(). Как сделать, чтобы сообщение появлялось один раз при входе в игру и все время висело зафиксированным внизу после всех уведомлений? Ну по идее можно его добавлять каждый раз при входе в ангар но тогда много копий, к чему этот мусор. И второй вопрос, если в текст pushMessage вставить ссылку <a href=""></a> почему она не работает?
  6. Смотрите, я вызываю available.set() при событии events.GUICommonEvent.LOBBY_VIEW_LOADED, при этом после available.wait() ставлю задержку на 10 секунд: def mainLoop(): while True: available.wait() time.sleep(10) .... Но когда ангар прогрузился, код уже выполнился, значит и events.GUICommonEvent.LOBBY_VIEW_LOADED и onAccountShowGUI срабатывают до прогрузки ангара, что придумать?
  7. Ок, читал англоязычный вариант, не так перевел, пасиб
  8. Вы тут немного перепутали с событиями. available.set() устанавливает флаг в true, что значит, что available.wait() начинает ждать пока available не станет false. Делаю так: def mainLoop(): while True: available.wait() #do_something def inHangar(self): available.clear() def inBattle(): available.set() available = threading.Event() thread = threading.Thread(target=mainLoop) thread.setDaemon(True) available.set() thread.start() g_playerEvents.onAccountShowGUI += inHangar g_playerEvents.onAvatarBecomePlayer += inBattle Но все равно что-то не так работает, цикл не повторяется
  9. Ого, спасибо, особенно за предыдущее сообщение, а насчет проверки формирования, из ангара как-то можно? Собственно в бою мне это незачем. Возможно проще не проверять а подписаться на события вступления/выхода из взвода/роты/команды и менять значение переменной.
  10. Еще было бы супер если бы все таки я смог как-то проверять состоит ли игрок в каком то формировании или нет, мож кто знает?
  11. Отлично, собрал из этого то, что нужно, спасибо) А как насчет события выхода из игры? UPD: Нашел connectionManager.onDisconnected, в принципе мне подходит и его юзаю, но в нем уже недоступен BigWorld.player(), я так понимаю в этот момент он уже уничтожился. Может есть какое событие до connectionManager.onDisconnected в котором player еще существует?
  12. JavaScript, С# в миллисекундах, php тоже вроде. Можете рассказать как пользоваться BigWorld.callback или отправьте куда нибудь, где написано. Мне нужно чтобы процесс работал на фоне когда юзер в ангаре а когда в бою приостанавливался.
  13. Шикарно, благодарю. А можете еще подсказать, пытаюсь сделать фоновый процесс: def OneTick(x): while True: SystemMessages.pushMessage("5 seconds", type=SystemMessages.SM_TYPE.Information) time.sleep(x) def AddThread(self): parent(self) WotTeamWorker = threading.Thread(target=OneTick, args=(5000,)) WotTeamWorker.start() Account.onBecomePlayer = parent parent = Account.onBecomePlayer Account.onBecomePlayer = AddThread Но сообщение выводится только 1 раз. Хотя дополнительный процесс висит в диспетчере задач Аааааа, чертов питон, во всех нормальных языках время в милисекундах а тут в секундах, и я пишу 5000... Ладно, осталось по сути два вопроса: первый - проверка, состоит ли юзер в формировании, было бы неплохо если бы с этим кто помог, и второй, на какие события подписаться, чтобы гасить поток при начале боя, то есть нужно какое-то событие начало боя или клик по кнопке начала боя чтобы отрубить фоновый обработчик. Upd: событие начала боя уже не нужно. Нужно решить 2 вопроса: как проверить состоит ли пользователь в формировании, как проверить в бою сейчас игрок или нет, то есть, что бы я мог в фоновом процессе определить в бою игрок или нет, если нет то что-то делать а если да то ничего не делать, чтобы не создавать нагрузки.
  14. Повесил на g_playerEvents.onAccountShowGUI, то же самое, ошибок нет, ничего не происходит
  15. Естественно) Для теста это все привязано к onBecomePlayer, остальной функционал срабатывает. И еще попутный вопрос, как проверить принадлежность к формированию? Чтобы делать эту проверку перед созданием формирования?
  16. @POLIROID, Итого все вместе: prbDispatcher = g_prbLoader.getDispatcher() if prbDispatcher: prbDispatcher.doSelectAction(PrebattleAction(PREBATTLE_ACTION_NAME.SQUAD)) functional = prbDispatcher.getFunctional(CTRL_ENTITY_TYPE.UNIT) if functional: functional.request(SendInvitesCtx(accountsToInvite, "Displayed invite text")) Ошибок в логах нет, но ничего не происходит вообще, логично предположить что prbDispatcher почему то пустой??
  17. Пока обновлял свое предыдущее сообщение, вы ответили, посмотреть пожалуйся сообщение выше. Если вы еще скажете как создать взвод, цены вам не будет))) Ну и я запилю одну классную штуку на основе этого.
  18. Огромное спасибо! А я еще вот это нашел: def prb_sendInvites(self, accountsToInvite, comment): if events.isPlayerEntityChanging: return self.base.accountPrebattle_sendPrebattleInvites(accountsToInvite, comment) Это то же самое или нет? Предполагаю что это просто обертка над вашей функцией, или это что-то другое? И что насчет создания взвода? Или если отправить приглашения он создается автоматически? П.с. попробовал ваш код, ошибка в логе: ERROR: AttributeError: 'NoneType' object has no attribute 'getFunctional' Пробую вариант: accountsToInvite = [34751051] BigWorld.player().prb_sendInvites(accountsToInvite, "Message") В логах ошибок нет, но в уведомлениях исходящих инвайтов нет, предполагаю что это из-за отсутсивя созданного взвода. Помогите разобраться плиз
  19. Решил идти по другому пути, нашел кнопку создания взвода в swf файлах, но как тут определить какой метод питона она вызывает по клику? Не вижу никаких евентов тут : package net.wg.gui.lobby.header.headerButtonBar { import flash.text.*; import net.wg.gui.components.controls.*; import net.wg.gui.events.*; import net.wg.gui.lobby.header.vo.*; import scaleform.clik.constants.*; public class HBC_Squad extends HeaderButtonContentItem { public var arrow:HBC_ArrowDown = null; public var textField:TextField = null; public var icon:UILoaderAlt = null; private var _squadDataVo:HBC_SquadDataVo = null; private static const ICON_ARROW_GAP:int = 3; private static const TEXT_ARROW_GAP:int = 14; private static const ARROW_RIGHT_PADDING:int = 4; public function HBC_Squad() { minScreenPadding.left = 13; minScreenPadding.right = 11; additionalScreenPadding.left = 4; additionalScreenPadding.right = -2; maxFontSize = 14; hideDisplayObjList.push(this.icon); return; }// end function override public function onPopoverClose() : void { this.arrow.state = HBC_ArrowDown.STATE_NORMAL; return; }// end function override public function onPopoverOpen() : void { this.arrow.state = HBC_ArrowDown.STATE_UP; return; }// end function override protected function configUI() : void { super.configUI(); this.icon.addEventListener(UILoaderEvent.COMPLETE, this.onIconLoadCompleteHandler); this.icon.source = RES_ICONS.MAPS_ICONS_BATTLETYPES_40X40_SQUAD; return; }// end function override protected function updateSize() : void { if (this._squadDataVo.isEvent) { bounds.width = this.arrow.x + this.arrow.width + ARROW_RIGHT_PADDING; } else { bounds.width = this.icon.visible ? (this.icon.x + this.icon.width) : (this.textField.x + this.textField.width); } super.updateSize(); return; }// end function override protected function updateData() : void { if (data) { this.textField.text = this._squadDataVo.buttonName; } else { this.textField.text = MENU.HEADERBUTTONS_BTNLABEL_CREATESQUAD; } if (this.isNeedUpdateFont()) { updateFontSize(this.textField, useFontSize); needUpdateFontSize = false; } this.icon.source = this._squadDataVo.icon; this.textField.width = this.textField.textWidth + TEXT_FIELD_MARGIN; if (this.icon.visible) { this.icon.x = this.textField.width + ICON_MARGIN ^ 0; this.arrow.x = this.icon.x + this.icon.width + ICON_ARROW_GAP ^ 0; } else { this.arrow.x = this.textField.x + this.textField.textWidth + TEXT_ARROW_GAP ^ 0; } this.arrow.visible = this._squadDataVo.isEvent; super.updateData(); return; }// end function override protected function onDispose() : void { this.icon.removeEventListener(UILoaderEvent.COMPLETE, this.onIconLoadCompleteHandler); this.textField = null; this.icon.dispose(); this.icon = null; this._squadDataVo = null; this.arrow.dispose(); this.arrow = null; super.onDispose(); return; }// end function override protected function isNeedUpdateFont() : Boolean { return super.isNeedUpdateFont() || useFontSize != this.textField.getTextFormat().size; }// end function override public function set data(param1:Object) : void { this._squadDataVo = HBC_SquadDataVo(param1); super.data = param1; return; }// end function private function onIconLoadCompleteHandler(event:UILoaderEvent) : void { invalidate(InvalidationType.DATA, InvalidationType.SIZE); return; }// end function } }
  20. Сижу весь день, шарясь в декомпилированных исходниках питона. Нашел ClientChat.py вижу методы createChatChannel, findUsers, addFriend и с ними вроде бы все как понятно. Но как отправить приглашение во взвод/команду и простое сообщение?
×
×
  • Create New...