Jump to content
Korean Random

Serfer_78

User
  • Content Count

    71
  • Joined

  • Last visited

Everything posted by Serfer_78

  1. ShuraBB от всей души благодарю за помощь новичкам и за скорый ответ! Кстати в голове крутилось что то подобное так как интуитивно понимал что должен быть способ.. А если не секрет что делает dependency.instance с родителем? Это чтобы в будущем у меня не возникало вопросов в таких ситуациях :) И да! Все работает проверил))))
  2. Выдает ошибку 2017-08-28 18:22:34.037: ERROR: [EXCEPTION] (scripts/client/gui/mods/__init__.py, 71): Traceback (most recent call last): File "scripts/client/gui/mods/__init__.py", line 64, in _findValidMODs File "scripts/common/Lib/importlib/__init__.py", line 37, in import_module File "mod_testEvents", line 2, in <module> ImportError: No module named ConnectionManager Подскажите пожалуйста как теперь импортировать ConnectionManager ? Он сейчас вроде как дочерний класс IConnectionManager , а вот как правильно сделать не соображу?
  3. SkepticalFox раскажите пожалуста подробнее насчет "декоратор trace поместить в __builtin__ в корневом скрипте (Account.py?): " со всем остальным разобрался без проблем. А вот не догнал где в скрипте Account находится __builtin__ и как в него поместить декоратор trace. Тема прикольная но информации мало.. Если я правильно понял приведенный код нужно поместить в скрипте (Account.py?) прогнать регуляркой все скрипты и скомпилить их?
  4. "но так, как реализовал это на примере ты.." Та нет это только псевдокод, набросок для понимания вопроса)) Я уже почти разобрался как данные передавать в клиент, вот только осталось прикрутить это дело к чату, но пока не разобрался как правильно отправлять стандартное сообщение в командный чат.. Спасибо за быстрый ответ. Мечтаю общий чат вернуть хотя бы посредством доп софта, с общим прикольнее было.. ))
  5. А можно ли таким способом отправить сообщение в командный чат с помощью сокетов? Например как нибудь так.. from gui import SystemMessages import socket #данные сервера UDP_IP = '127.0.0.1' UDP_PORT = 10020 udp_socket = socket.socket(AF_INET, SOCK_DGRAM).bind( (UDP_IP,UDP_PORT) ) data, adress = udp_socket.recvfrom(1024) if not data : udp_socket.close() common_controller = getBattleChatControllers()[2] if common_controller is not None and common_controller.canSendMessage()[0]: message = data common_controller.sendMessage(message.encode('utf-8')) udp_socket.close()
  6. С передачей из клиента во внешнее приложение разобрался.. Передача идет в отдельном потоке. def threadDecorate(object): def decorate(*args, **kwargs): th = threading.Thread(target=object, args=args, kwargs=kwargs) th.setDaemon = True th.start() return decorate @threadDecorate def sendMessage(Message): try: socket.socket(socket.AF_INET, socket.SOCK_DGRAM).sendto(Message, (UDP_IP, UDP_PORT)) socket.close() except: pass А можно ли как то к этому делу приладить прием данных в клиент? К примеру вывод сообщения в ангаре , что то типа from gui import SystemMessages import socket #данные сервера UDP_IP = '127.0.0.1' UDP_PORT = 10020 udp_socket = socket.socket(AF_INET, SOCK_DGRAM).bind( (UDP_IP,UDP_PORT) ) data, adress = udp_socket.recvfrom(1024) if not data : udp_socket.close() type = SystemMessages.SM_TYPE.Warning SystemMessages.pushMessage(str(data), type) udp_socket.close() Есть ли такой функционал в картохе? ЗЫ: Отвечаю сам Можно)
  7. Вообщем начитавшись литературы слепил простенький код для запуска UDP в отдельном потоке... def threadDecorate(object): def decorate(*args, **kwargs): th = threading.Thread(target=object, args=args, kwargs=kwargs) th.setDaemon = True th.start() return decorate @threadDecorate def sendMessage(Message): try: socket.socket(socket.AF_INET, socket.SOCK_DGRAM).sendto(Message, (UDP_IP, UDP_PORT)) socket.close() except: pass Работает как часики, но за пример благодарен. Т.к подтолкнул в нужное русло...
  8. Нет перемещать прицел не нужно , пытаюсь получить условные координаты камеры в любой момент игры в стратегическом режиме, что -ж значит сам что то в коде намудрил , буду смотреть что не так... Спасибо за подробный ответ, значит я на верном пути.
  9. Совершенно верно , видимо я не правильно выразился, назвал консолью системный канал, изначально хотел отправлять в него события из ангара во внешнее приложение... Но решил не извращаться и запилил это дело на UDP сокетах , получилось гораздо эффективнее) А код действительно картофельный) PS: Отвечу на свой вопрос)) Есть переменная var = 5 Вывод в строковом виде... print('Per = %s' % var) Результат : 2017-08-28 22:34:44.805: INFO: 5
  10. Приветствую гуру python - a ! Подскажите можно ли таким способом получить положение камеры в стратегическом режиме? Пробовал вот так выудить... from AvatarInputHandler import cameras cameraDir, cameraPos = cameras.getWorldRayAndPoint(0, 0) print('PosCam: %s %s' %cameraDir, cameraPos) Что то не удалось получить координаты ...
  11. Хук логов с обновлением через 1 десятую секунды в цикле))) Оказалось что ларчик просто открывался нужно было : import BigWorld import sys from gui import SystemMessages from Account import Account Var = 'Hello User!!!': link = Account.onBecomePlayer def _First(self): link(self) msg = 'Var' type = SystemMessages.SM_TYPE.Information SystemMessages.pushMessage(msg, type) print 'Сообщение' Account.onBecomePlayer = link Account.onBecomePlayer = _First
  12. Огромнейшее тебе человеческое спасибо! А то я тут уже нагородить успел... Вместо if chk_killed_to_vehicle == True: g_windowsManager.onInitBattleGUI += __startBattle g_windowsManager.onDestroyBattleGUI += __stopBattle Вписал if chk_killed_to_vehicle == True: old_afterCreate = Battle.afterCreate Battle.afterCreate = new_afterCreate old_beforeDelete = Battle.beforeDelete Battle.beforeDelete = new_beforeDelete А вместо if chk_killed_to_vehicle == True: def __startBattle(): BigWorld.player().arena.onVehicleKilled += AO_onVehicleKilled def __stopBattle(): enemyListLP = {} BigWorld.player().arena.onVehicleKilled -= AO_onVehicleKilled вот это:) if chk_killed_to_vehicle == True: #добавил ... def new_afterCreate(self): old_afterCreate(self) BigWorld.player().arena.onVehicleKilled += AO_onVehicleKilled def new_beforeDelete(self): old_beforeDelete(self) enemyListLP = {} BigWorld.player().arena.onVehicleKilled -= AO_onVehicleKilled
  13. Пытаюсь реанимировать мод от споттера autoaim_optimize Не могу разобраться как приладить туда код old_afterCreate = Battle.afterCreate def new_afterCreate(self): old_afterCreate(self) Battle.afterCreate = new_afterCreate old_beforeDelete = Battle.beforeDelete def new_beforeDelete(self): old_beforeDelete(self) Battle.beforeDelete = new_beforeDelete from gui.WindowsManager import g_windowsManager заменил на from gui.app_loader import g_appLoader а дальше в тупик встал, нужен совет профи... Как я понял нужно вместо if chk_killed_to_vehicle == True: g_windowsManager.onInitBattleGUI += __startBattle g_windowsManager.onDestroyBattleGUI += __stopBattle И if chk_killed_to_vehicle == True: def __startBattle(): BigWorld.player().arena.onVehicleKilled += AO_onVehicleKilled def __stopBattle(): enemyListLP = {} BigWorld.player().arena.onVehicleKilled -= AO_onVehicleKilled Вставить верхний код "old_afterCreate..." и в него прописать то что в __startBattle(): и __stopBattle(): Сами то функции можно поменять , по моему как то так if chk_killed_to_vehicle == True: #добавил ... old_afterCreate = Battle.afterCreate def new_afterCreate(self): old_afterCreate(self) BigWorld.player().arena.onVehicleKilled += AO_onVehicleKilled Battle.afterCreate = new_afterCreate old_beforeDelete = Battle.beforeDelete def new_beforeDelete(self): old_beforeDelete(self) enemyListLP = {} BigWorld.player().arena.onVehicleKilled -= AO_onVehicleKilled Battle.beforeDelete = new_beforeDelete Если ошибаюсь поправьте.. а вот в '''init use class''' Что писать не пойму, или можно верхнюю часть вообще откинуть? Читал тему , вижу ты вроде разобрался, тем более в питоне уже как рыба в воде) Решил к тебе обратиться за помощью.
  14. Подскажи пожалуйста как реализовал если не сложно, реанимирую старый мод но в питоне пока не ас.
  15. День добрый! То есть все что начинается с get передается на сервер? Я правильно понял?
  16. Я уже ее бедную замучал)) from Avatar import PlayerAvatar def speedTank(): speed, rspeed = BigWorld.player().getOwnVehicleSpeeds() return '%s %d %d' % ('speed:', speed, rspeed) И аргументы ей разные совал, результат не отдает, весь мозг вывихнул и не пойму что ей надо. В __dumpVehicleState имеется полностью вся инфа.. Однажды запустил лончер дочерним процессом и в лог из этой функции получил вот такую картину.. Но и __dumpVehicleState не чего не отдает.. Но тем не менее спасибо что откликнулись... Как видим из лога , название карты отдает game.py , а остальные данные уже идут из аватара. Как уже выше писал , у меня получалось выдернуть скорость и обновлять ее "realtime" но я по неосторожности удалил готовую функцию)) Ребята кто шарит подскажите с аргументами, какие указать чтобы получить результат? def speedTank(???, ???):
  17. Доброго времени суток , нашел в твоем моде AdvancedAimingSystem функцию : def getSpeed(self): vehicle = self.getVehicle() return abs(vehicle.filter.speedInfo.value[0]) if vehicle is not None else None на ее базе попытался вывести в сообщении скорость собственного танка но результат 0, если не затруднит подскажи пожалуйста как правильно ей можно воспользоваться, может есть какие то аналоги ? def getSpeed(self): vehicle = BigWorld.entity(self.playerVehicleID) speed = abs(vehicle.speedInfo.value[0]) if vehicle is not None else None return '%s %d' % ('Speed', speed)
  18. Вот же не задача, разобрался с хуками но теперь с аргументами путаница, пытаюсь получить скорость собственного танка: import BigWorld, Math from Avatar import PlayerAvatar def speedTank(): speed, rspeed = BigWorld.player().getOwnVehicleSpeeds() return '%s %d %d' % ('speed:', speed, rspeed) не могу разобраться что передать в функцию ... def speedTank(speed, rspeed): #или def speedTank(self, getInstantaneous=False): #а возможно def speedTank(self, speed, rspeed): Самое комичное то что вчера написал функцию, она работала, передавала положительную скорость (например (10) и отрицательную (-10)) , при сохранении перезаписал документ и удалил функцию, а теперь не помню что я там накалякал)) возможно что то типа def speedTank(self): speed, rspeed = BigWorld.player().getSpeed() return '%s %d %d' % ('speed:', speed, rspeed) Не пойму где моя ошибка, в логах питона чисто .
  19. Не , я про " from Queue import Queue" Хотя про "self.Data = Queue()" тоже полезно было узнать.
  20. Совершенно верно, разницы никакой не заметил, проверил на несколькох разных хуках только что..
  21. Сейчас ознакомлюсь. !!! Прямо мысли прочитал, сижу я значит пишу вопрос на тему "в какой последовательности интерпритатор выполняет команды в питоне))))" вижу твое сообщение читаю .. открываю файл и!!! "В любой момент времени интерпретатор Python знает, какую команду исполнить следующей. После исполнения команды становится известно, какой команде передать управление. Эта ниточка непрерывна в ходе выполнения программы и обрывается только по ее завершении." Бывает же так ... Значит правильно Queue это очередь для потоков на выполнение своей части кода. И вообще в этом документе куча интересного, причем очень коротко и... самое главное на русском! оффтоп: Зря я учил немецкий он мне не пригодился, хотел английский выучить но т.к родители учили немецкий мне было не двузначно намекнуто - выберешь инглиш помощи не будет в его изучении :-(
  22. GPCracker это наилучшее описание работы хука! Премного тебе благодарен. Вот теперь все встало в голове на свои места, я понял таки как хукать функции, и даже про подводный камень предупредил ""что функция часто возвращает какое-то значение"" не сомневаюсь что я бы на него нарвался однажды :) ShuraBB вот это да... Не ожидал однако))) Был бы рядом проставился бы ;-) Вот только я настолько зелен в питоне, что его классы меня слегка пугают, я с отступами то воевал долго)) Тем не менее постараюсь разобраться как все это дело работает! Что то мне подсказывает , что если приаттачить все это дело к коду то возможно код станет гораздо стабильнее, а возможно и быстрее. Получается при хуке оригинальная функция: def onGeometryMapped(spaceID, path): SoundGroups.g_instance.unloadAll() LOG_NOTE('[SPACE] Loading space: ' + path) SoundGroups.g_instance.preloadSoundGroups(path.split('/')[-1]) Принимает по сути вот такой вид)) def onGeometryMapped(spaceID, path): SoundGroups.g_instance.unloadAll() LOG_NOTE('[SPACE] Loading space: ' + path) SoundGroups.g_instance.preloadSoundGroups(path.split('/')[-1]) #отработал основной код функции print 'mapName: %s, mapPath: %s' % (path.split('/')[-1], path) #выполняем наш код в этой функции return result #(А по завершении выполнения хукнутой функции возвращаем в оригинальный код то что должна была вернуть реальная не хукнутая функция.) А если она ничего не возвращала то просто вернется None . Как я понял из приведенного примера , Хук это способ выполнения своего кода в теле оригинальной функции без изменения оригинального кода картошки (или других программ на python) А ведь хук удобен тем, что не нужно расписывать условия при которых выполнится код хука, ибо выполнится он как раз в нужный момент, если правильную функцию хукнуть ! :) А есть ли раздница между таким способом import game def hookOnGeometryMapped(spaceID, path): hookedOnGeometryMapped(spaceID, path) print 'mapName: %s, mapPath: %s' % (path.split('/')[-1], path) hookedOnGeometryMapped = game.onGeometryMapped game.onGeometryMapped = hookOnGeometryMapped И вот таким ? import game hookedOnGeometryMapped = game.onGeometryMapped def hookOnGeometryMapped(spaceID, path): hookedOnGeometryMapped(spaceID, path) print 'mapName: %s, mapPath: %s' % (path.split('/')[-1], path) game.onGeometryMapped = hookOnGeometryMapped
  23. import game def hookOnGeometryMapped(spaceID, path): hookedOnGeometryMapped(spaceID, path) print 'mapName: %s, mapPath: %s' % (path.split('/')[-1], path) hookedOnGeometryMapped = game.onGeometryMapped game.onGeometryMapped = hookOnGeometryMapped Интересно , а что происходит в коде при хуке функции, не пойму что делает эта строка hookedOnGeometryMapped = game.onGeometryMapped а в момент обращения к жертве вместо ее кода подсовывается хук функция game.onGeometryMapped = hookOnGeometryMapped или я не так понял? , и получается что пока мод на месте функция будет хукаться ?
  24. Получается не в том месте я пытался событие ловить :) Я в аватаре функцию __dumpVehicleState пытал , а она не колется))) Оказывается не там копал, 'spoter' еще раз спасибо за помощь, все отлично отрабатывает , из твоего первого примера уловил общую картину с передачей аргументов, в голове по этому вопросу была каша:)
×
×
  • Create New...