Jump to content
Korean Random
tormozniak

напишите нормальный FAQ плиз

Recommended Posts

.... поудалял неконструктив ...

 

FAQ размещен там внизу

Edited by tormozniak

Share this post


Link to post

Short link
Share on other sites

кидаешь в C:\Games\World_of_Tanks\res_mods\0.9.14.1\scripts\client\gu\mods и называешь mod_stata1

  • Upvote 2

Share this post


Link to post

Short link
Share on other sites

... поудалял неконструктив ...

 

FAQ размещен там внизу

Edited by tormozniak

Share this post


Link to post

Short link
Share on other sites

должно начинатся на mod_ ? или не важно ?

Если кидать в gui/mods то важно.

а если mod_stata1.pyc то в python.log появляюццо ошибки

Какие ошибки? Покажите нам или приложите весь python.log.

Share this post


Link to post

Short link
Share on other sites

Если кидать в 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 by tormozniak

Share this post


Link to post

Short link
Share on other sites

шлем 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 by ShadowHunterRUS

Share this post


Link to post

Short link
Share on other sites

ууу какие ползеные функции.

 

api.worldoftanks.ru  .....

 

 

вооще то я играю Кибер Танком и хочу собирать статистику.

и не мог найти инструкцию "как начать писать моды.."

мне в целом  интересен именно лог боя, чтоб знать какие танчики лучше фармят

 

( и python я тоже в целом не знаю... но скоро...)

  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...