GPCracker Posted February 13, 2017 Share Posted February 13, 2017 а метод скорее всего приватный...А метод скорее всего на питоне (который вызывает кнопка). @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted February 13, 2017 Share Posted February 13, 2017 А метод скорее всего на питоне (который вызывает кнопка).но это не точно) @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted February 13, 2017 Share Posted February 13, 2017 но это не точно)Но точно можно проверить. Вообще есть НЯП у окна метод, который вызывается кодом на AS в питон для обработки кнопок. По крайней мере в диалогах это есть. Питон же как-то узнает, что что-то там нажали :) @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted February 13, 2017 Share Posted February 13, 2017 Но точно можно проверить.Ну раз можно, то зачем гадать? @Ekspoint, нужно больше информации. @ Quote Link to comment Short link Share on other sites More sharing options...
Ekspoint Posted February 13, 2017 Share Posted February 13, 2017 Ну раз можно, то зачем гадать?@Ekspoint, нужно больше информации.мне нужно что бы вызываемоее окно само закрывалось через какое то время @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted February 14, 2017 Share Posted February 14, 2017 мне нужно что бы вызываемоее окно само закрывалось через какое то времяНу если делать по-нормальному, нужен таймер в кнопке. А это редактирование флеша 100%. @ Quote Link to comment Short link Share on other sites More sharing options...
伝説の Posted February 14, 2017 Share Posted February 14, 2017 Ну если делать по-нормальному, нужен таймер в кнопке. А это редактирование флеша 100%. А с помощью BigWorld.callback не получится? @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted February 14, 2017 Share Posted February 14, 2017 А с помощью BigWorld.callback не получится?1. А BigWorld.callback(), для тех кто не особо в курсе, зависит от скорости времени в игре, т.е. при паузе реплея колобки тоже встают на паузу. Поэтому нельзя использовать колобки для графического интерфейса. И вообще, колобки имеют узкую сферу применимости, относительно привязанных к игровому времени вещей, просто нубокодеры пихают их куда не попадя. 2. Для отображения времени до автонажатия на кнопке нужно писать код на AS, а не д***ить флешку по DAAPI из питона. Без отображения времени временами может возникать баттхерт у народа. 3. И вообще вещи нужно делать правильно и аккуратно, а не через *опу. @ Quote Link to comment Short link Share on other sites More sharing options...
POLIROID Posted February 14, 2017 Share Posted February 14, 2017 (edited) BigWorld.callback(), для тех кто не особо в курсе, зависит от скорости времени в игре, т.е. при паузе реплея колобки тоже встают на паузу Колобки так не работают. Для теста сделай такой через 0 и он даже не паузе будет работать, а вот почему угадай сам =) PS по теме Все что надо парню это создать callback в методе populate с сохранением ID для своего метода с нужным таймаутом. закрыть окно из питона (destroy/dispose) при вызове своего метода callback-ом. отменить callback по ID при закрытии юзером окна вручную. Это при условиях своя собственная обвязка окна на питоне (с дефолтной будет некрасиво). не надо отображать статус таймера визуально. Edited February 14, 2017 by POLIROID @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted February 14, 2017 Share Posted February 14, 2017 Для теста сделай такой через 0 и он даже не паузе будет работать, а вот почему угадай сам =)"def callback( time, function ): Registers a callback function to be called after a certain time, but not before the next tick. The callback is executed once and is not automatically repeated, so reset the callback again if regular updates are needed. If multiple callbacks are due to be executed within a single frame, the chronological order in which they were added is maintained. Parameters: time A float describing the delay in seconds before function is called. If a time of 0 is given, then it is guaranteed to be called on the next frame. function Function to call. This function must take 0 arguments. Returns: int A handle that can be used to cancel the callback." Это цитата из документации. Ноль, да, на паузе работает, а вот время для колобков на паузе замирает, на задержках тоже тормозится. Как и BigWorld.time(). создать callback в методе populate с сохранением ID для своего метода с нужным таймаутом.Колобок - это в данном случае костыль, по принципу Вовки из известного мультика. Нормальным образом это таймер с флешки. не надо отображать статус таймера визуально.А теперь прикинь, ты кликаешь кнопку, в этот момент окно закрывается по колобку - ты думаешь что это ты нажал на нужную кнопку... А нихера подобного. Вариант 2. У тебя выкинуло окно, а тебя отвлекли или еще что - ты думаешь, окно подождет, потом прочитаю... А нихера. Если есть таймер - его должно быть видно, чтобы пользователь видел, что оно с таймером, и сколько осталось. @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted February 14, 2017 Share Posted February 14, 2017 Вы я вижу по теме ни чего не пишите, потому анекдотец жахну: .... А колобок - повесился (><) 2 @ Quote Link to comment Short link Share on other sites More sharing options...
POLIROID Posted February 14, 2017 Share Posted February 14, 2017 (edited) Колобок - это в данном случае костыль, по принципу Вовки из известного мультика. Нормальным образом это таймер с флешки. А теперь прикинь, ты кликаешь кнопку, в этот момент окно закрывается по колобку - ты думаешь что это ты нажал на нужную кнопку... А нихера подобного. Вариант 2. У тебя выкинуло окно, а тебя отвлекли или еще что - ты думаешь, окно подождет, потом прочитаю... А нихера. Если есть таймер - его должно быть видно, чтобы пользователь видел, что оно с таймером, и сколько осталось.Само собой это костыль, и в здравом уме никто так не делает. Но парень ведь просит костыль на питоне =) Вот если бы он хотел делать как нормальные люди, тогда на изи все делается через "flash.utils.Timer" и визуально отображается с помощью "LoadingBar" из "guiControlsLogin.swf" А по поводу callback-ов, они работают на гейм-тиках (если человеческим то на каждом кадре). И писать зависит от скорости времени в игре, т.е. при паузе реплея колобки тоже встают на паузуне совсем комильфо =) Edited February 14, 2017 by POLIROID @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted February 15, 2017 Share Posted February 15, 2017 (edited) они работают на гейм-тикахНу я в курсе как-бы, точнее это в доках написано. не совсем комильфо =)А вот тут я специально вчера проверял, ставил на паузе реплея колобок на 5 сек через отладчик... и нифига, пока с паузы не снимешь, не сработает. Т.е. колобок работает по игровому времени. BigWorld.time() то же самое, на паузе в реплее оно не увеличивается. Нулевой, да, срабатывает, так как он, как написано в доках, обработается по следующему фрейму. Edited February 15, 2017 by GPCracker @ Quote Link to comment Short link Share on other sites More sharing options...
POLIROID Posted February 15, 2017 Share Posted February 15, 2017 (edited) ставил на паузе реплея колобок на 5 сек через отладчик... и нифига, пока с паузы не снимешь, не сработает. Т.е. колобок работает по игровому времени. BigWorld.time() то же самое, на паузе в реплее оно не увеличивается. Нулевой, да, срабатывает, так как он, как написано в доках, обработается по следующему фрейму. Я разве говорил что время используется реальное, а не игровое? Я тебе о том что обработка callback-ов не зависит от того поставлена у тебя пауза или нет, то есть пробежка по всем callback-ам с проверкой готовности и выстрелом происходит на каждом тике (кадре). PS вот этот оффтоп, он никак парню с кнопкой не поможет =) Edited February 15, 2017 by POLIROID @ Quote Link to comment Short link Share on other sites More sharing options...
Revo1tt Posted May 23, 2017 Share Posted May 23, 2017 Здравствуйте. Недавно заинтересовался созданием модов, и создание окна показалось достаточно простым для начала. Но что-то пошло не так.Что я делал: 1. в FlashDevelop создал AS3 проект, в нём .as файл с содержимым из первого поста (для окна без всего)2. скопировал содержимое из первого поста в файл .py, скопировал его в проект.3. скачал XFW отсюда - https://bitbucket.org/XVM/xfw/downloads/ 4. установил cygwin и запустил скрипт build.sh из папки .../XVM/src/actionscript/ Получил набор файлов в /XVM/~output/swc:wg_battle.swc, wg_lobby.swc, wg_shared.swc, wg_vm.swc, xfw.swc, xfw_shared.swc Файла wg.swc среди них не оказалось5. добавил все эти файлы в проект в папку lib и в свойствах проекта указал эти файлы как external libraries, на всякий случай дописав туда и wg.swc, потому что это ни на что не повлияло6. для .as файла поставил галочку напротив Document Class, поскольку без этого проект отказался собираться 7. собрал проект, получил .swf файл, который добавил в папку с игрой в res_modsНо добавление файла никак не повлияло на работу игры - окно по нажатию F10 не открылось. Подскажите пожалуйста, где я мог допустить ошибку, и если возможно, как я такого рода ошибки могу обнаруживать. @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted May 24, 2017 Share Posted May 24, 2017 установил cygwin и запустил скрипт build.sh из папки .../XVM/src/actionscript/Можно просто зайти в найтлики и скачать оттуда. И не парится со сборкой. @ Quote Link to comment Short link Share on other sites More sharing options...
sergey spb Posted June 6, 2017 Share Posted June 6, 2017 Добрый день!Парни не поможите, что не так? # Embedded file name: mod_clikimport BigWorldfrom notification.NotificationListView import NotificationListViewfrom notification.settings import NOTIFICATION_BUTTON_STATEfrom gui.SystemMessages import SM_TYPEfrom adisp import process@processdef openBrowserWindow(url, title):from gui import game_controlwidth = 990height = 550browserSize = [width, height]yield game_control.g_instance.browser.load(url=url, title=title, showActionBtn=True, browserSize=browserSize, showCloseBtn=True) old_populate = NotificationListView._populate def new_populate(self):message = {'typeID': 1,'message': {'bgIcon': '','defaultIcon': '','savedData': 0,'timestamp': -1,'filters': [],'buttonsStates': {'cancel': NOTIFICATION_BUTTON_STATE.HIDDEN},'buttonsLayout': [{'action': 'action_1','type': 'submit','label': '\xd0\x9e\xd1\x82\xd0\xba\xd1\x80\xd1\x8b\xd1\x82\xd1\x8c','width': 100}, {'action': 'action_2','type': 'cancel','label': 'Button 2','width': 100}],'message': '\xd0\x98\xd0\xbd\xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f ModPackSG','type': 'black','icon': 'img://../icons/SG.png'},'entityID': 99999,'auxData': ['GameGreeting']}old_populate(self)self.as_appendMessageS(message) NotificationListView._populate = new_populateold_onClickAction = NotificationListView.onClickAction def new_onClickAction(self, typeID, entityID, action):if action == 'action_1':openBrowserWindow('https://docviewer.yandex.ru/?url=ya-disk-public%3A%2F%2FzQ%2BixpkQPkBLxjSdk%2B5hLdC1vUIYT%2FnITuvj7140U9A%3D&name=%20information.docx&c=579508c0090d\xd0\x98\xd0\xbd\xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f')elif action == 'action_2':print 'action_2'else:old_onClickAction(self, typeID, entityID, action) NotificationListView.onClickAction = new_onClickAction Работало до версии 0.9.15 (примерно).Спасибо. @ Quote Link to comment Short link Share on other sites More sharing options...
GPCracker Posted June 6, 2017 Share Posted June 6, 2017 Парни не поможите, что не так?Не так то, что код нужно оформлять тегом кода, иначе он нечитаемый! @ Quote Link to comment Short link Share on other sites More sharing options...
sergey spb Posted June 6, 2017 Share Posted June 6, 2017 # Embedded file name: mod_clik import BigWorld from notification.NotificationListView import NotificationListView from notification.settings import NOTIFICATION_BUTTON_STATE from gui.SystemMessages import SM_TYPE from adisp import process @process def openBrowserWindow(url, title): from gui import game_control width = 990 height = 550 browserSize = [width, height] yield game_control.g_instance.browser.load(url=url, title=title, showActionBtn=True, browserSize=browserSize, showCloseBtn=True) old_populate = NotificationListView._populate def new_populate(self): message = {'typeID': 1, 'message': {'bgIcon': '', 'defaultIcon': '', 'savedData': 0, 'timestamp': -1, 'filters': [], 'buttonsStates': {'cancel': NOTIFICATION_BUTTON_STATE.HIDDEN}, 'buttonsLayout': [{'action': 'action_1', 'type': 'submit', 'label': '\xd0\x9e\xd1\x82\xd0\xba\xd1\x80\xd1\x8b\xd1\x82\xd1\x8c', 'width': 100}, {'action': 'action_2', 'type': 'cancel', 'label': 'Button 2', 'width': 100}], 'message': '\xd0\x98\xd0\xbd\xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f ModPackSG', 'type': 'black', 'icon': 'img://../icons/SG.png'}, 'entityID': 99999, 'auxData': ['GameGreeting']} old_populate(self) self.as_appendMessageS(message) NotificationListView._populate = new_populate old_onClickAction = NotificationListView.onClickAction def new_onClickAction(self, typeID, entityID, action): if action == 'action_1': openBrowserWindow('https://docviewer.yandex.ru/?url=ya-disk-public%3A%2F%2FzQ%2BixpkQPkBLxjSdk%2B5hLdC1vUIYT%2FnITuvj7140U9A%3D&name=%20information.docx&c=579508c0090d', '\xd0\x98\xd0\xbd\xd1\x84\xd0\xbe\xd1\x80\xd0\xbc\xd0\xb0\xd1\x86\xd0\xb8\xd1\x8f ModPackSG') elif action == 'action_2': print 'action_2' else: old_onClickAction(self, typeID, entityID, action) NotificationListView.onClickAction = new_onClickAction @ Quote Link to comment Short link Share on other sites More sharing options...
Tester Posted July 11, 2017 Share Posted July 11, 2017 (edited) Помогите с компонентом UILoaderAlt. При загрузке изображений через него всегда искажаются их размеры. Если конечно не включить autoSize, но тогда нельзя изменять высоту с шириной, а нужно... Странно то, что свойства originalWidth и originalHeight всегда 27 и 17. Edited July 11, 2017 by Tester @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.