tormozniak 27 Posted May 21, 2016 (edited) .... поудалял неконструктив ... FAQ размещен там внизу Edited May 22, 2016 by tormozniak Quote Share this post Link to post Short link Share on other sites
PinkElfant 25 #327997 Posted May 21, 2016 В python log ошибки сыпятся какие-нибудь? Quote Share this post Link to post Short link Share on other sites
Ekspoint 2,122 #328039 Posted May 21, 2016 кидаешь в C:\Games\World_of_Tanks\res_mods\0.9.14.1\scripts\client\gu\mods и называешь mod_stata1 2 Quote Share this post Link to post Short link Share on other sites
tormozniak 27 #328139 Posted May 22, 2016 (edited) ... поудалял неконструктив ... FAQ размещен там внизу Edited May 22, 2016 by tormozniak Quote Share this post Link to post Short link Share on other sites
VasyaPRO_2014 163 #328165 Posted May 22, 2016 должно начинатся на mod_ ? или не важно ? Если кидать в gui/mods то важно. а если mod_stata1.pyc то в python.log появляюццо ошибки Какие ошибки? Покажите нам или приложите весь python.log. Quote Share this post Link to post Short link Share on other sites
tormozniak 27 #328225 Posted May 22, 2016 (edited) Если кидать в gui/mods то важно. Какие ошибки? Покажите нам или приложите весь python.log. я там фигни понаписывал, с целью хотя бы увидеть что оно пытается работать. я уже поисправлял. FAQ как писать моды Элементарный Пример 1 скачайте себе PjOrion -- где то тут http://www.koreanrandom.com/forum/topic/15280-pjorion-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%B4%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%BE%D0%B1%D1%84/ 2 запустите PjOrion и в нем напишите функцыональность мода на языке python (хаха это самое простое) например напишите туды текст из одной строки print 'Hello world' 3 скомпилируйте CTRL-F9 оно спросит - а куда сохранить? - сохраните куда нибудь, главное чтоб имя начиналось на mod_ (например mod_hello.py) компилятор создаст .pyc файло (например mod_hello.pyс) 4 скопируйте мод mod_hello.pyс в директорию [...путь к танчикам... .\res_mods\...версия ... \scripts\client\gui\mods например C:\Games\World_of_Tanks\res_mods\0.9.14.1\scripts\client\gui\mods 5 запустите танчики и оно должно начать работать работа примера заключается в том что в файл C:\Games\python.log будет напечатана строка INFO: Hello world Ура! тоесть когда танчики запускаются, происходит исполнение мода mod_hello.pyс печатается строка, которая попадает в лог -------------------------- ну а дальше пример mod_hello.py надо усложнять, наворачивать, добавлять всякие нужные команды.. исходный пример содержит код, который выполнится один раз при запуске танчиков. что как бы не очень полезно. когда в игре происходит какое нибудь событие, оно вызывает стандартную функцию. эту стандартную функцию можно перенаправить, чтобы выполнялся Нужный Код. вот тут есть хороший пример http://www.koreanrandom.com/forum/topic/31287-%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2-%D0%B1%D0%BE%D1%8F/ краткие пояснения: - когда танчики стартуют, мод запускается. - создается функция BF_new_afterCreate - внизу две строчки производят перенаправление стандартной функции Battle.afterCreate на Свою Написанную функцию BF_new_afterCreate - теперь когда начинается Бой, оно всегда начинает вызывать функцию BF_new_afterCreate - оригинальная стандартная функция сохранена в BF_orig_afterCreate, - новая написанная функция вызывает стандартную - потом она делает то что нам нужно вообщем разработка мода состоит в том чтобы узнать какую функцию перехватывать и натулить туда своего кода, который делает чо то полезное. --------------- ОШИБКИ Если в тексте мода будут всякие ошибки, то танчики могут воще не запустицца, а в файле C:\Games\python.log будут всякие сообщения об ошибках что то типо ERROR: [EXCEPTION] (scripts/client/game.py, 184): Traceback (most recent call last): File "scripts/client/game.py", line 155, in init File "scripts/client/gui/shared/personality.py", line 329, in init File "scripts/client/gui/mods/__init__.py", line 17, in init File "scripts/client/gui/mods/__init__.py", line 64, in _findValidMODs File "scripts/common/Lib/importlib/__init__.py", line 37, in import_module File "stata1", line 24, in <module> AttributeError: 'NoneType' object has no attribute 'arena' --------------------------------- усложняем КАК НАПИСАТЬ СВОЙ МОД ОЛЕНЕМЕР берем за основу http://www.koreanrandom.com/forum/topic/31287-%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA-%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2-%D0%B1%D0%BE%D1%8F/ итак, когда танчики стартуют, происходит подмена функции Battle.afterCreate теперь во время начала каждой битвы будет вызывацца наш код из BF_new_afterCreate глобальный объект BigWorld.player().arena.vehicles.values() содержит список всех участников боя. перебираем список. pl['name'] даст нам имя игрока pl['accountDBID'] даст нам ID игрока в базе каргаминга например игрок warboss86 имеет ID 1008410489 шлем http запрос на ссайт варгаминга http://worldoftanks.com/en/community/accounts/[ID игрока]-[имя игрока] например http://worldoftanks.com/en/community/accounts/1008410489-warboss86 парсим полученный html table class="t-personal-data и видим что он полное днище - процент побед 46.95% и так узнаем данные всех остальных игроков из боя. сохраняем этот список позора и унижения. в моде также надо переопределить вывод игроков. это функция ..... [скоро допишу] програмируем код, чтобы вместо [ИмяИгрока - имя танчика] печаталось [ИмяИгрока - %побед% имя танчика] %побед% мы будем брать из сохраненного списка ------------- вот так все просто ------------ Edited May 22, 2016 by tormozniak Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #328278 Posted May 23, 2016 (edited) шлем http запрос на ссайт варгамингаи это во времена Public API? ------------- вот так все просто ------------Ты никогда так не ошибался) в моде также надо переопределить вывод игроков.Изи way: import BigWorld from gui.Scaleform.Battle import Battle from gui.battle_control.battle_arena_ctrl import BattleArenaController from urllib2 import urlopen from json import load players_stat = dict() def new_afterCreate(*args, **kwargs): orig_afterCreate(*args, **kwargs) global players_stat players_stat.clear() accounts = [] for pl in BigWorld.player().arena.vehicles.values(): accounts.append(str(pl['accountDBID'])) try: url = 'http://api.worldoftanks.ru/wot/account/info/?application_id=demo&fields=statistics.all.wins,statistics.all.battles&account_id=%s' % ','.join(accounts) stats = load(urlopen(url)) for dbid, stat in stats['data'].iteritems(): players_stat[dbid] = getPercentFor(stat['statistics']['all']) except:pass def getPercentFor(stat): try: return 100.*stat['wins']/stat['battles'] except:pass def new_makeHash(*args, **kwargs): result = orig_makeHash(*args, **kwargs) global players_stat uid = str(result['uid']) if players_stat.get(uid) is not None: result['vehicle'] = '%.1f%% %s' % (players_stat[uid], result['vehicle']) return result orig_makeHash = BattleArenaController._makeHash BattleArenaController._makeHash = new_makeHash orig_afterCreate = Battle.afterCreate Battle.afterCreate = new_afterCreate Edited May 23, 2016 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
tormozniak 27 #328626 Posted May 25, 2016 ууу какие ползеные функции. api.worldoftanks.ru ..... вооще то я играю Кибер Танком и хочу собирать статистику. и не мог найти инструкцию "как начать писать моды.." мне в целом интересен именно лог боя, чтоб знать какие танчики лучше фармят ( и python я тоже в целом не знаю... но скоро...) 1 Quote Share this post Link to post Short link Share on other sites