Jump to content
Korean Random
KL1SK

Вопрос по Python

Recommended Posts

Был мод такой http://forum.worldoftanks.ru/index.php?/topic/884602-0810-wot-fps-вид-от-первого-лица-отключение-стабилизаци/ но автор забил на его, да и функционала в нём было много лишнего.
Но там была функция отображения корпуса в снайперском режиме, благодаря которой можно спокойно гонять в СН режиме и наглядно видеть куда едешь.
Взялся копаться в Python сам и появился вопрос... вернее несколько:
1). Как осуществляется подхват .pyc файлов (я не нашел, что они где-то прописаны)?
2). Можно  ли написать скрипт который будет заменять например параметр в "\scripts\client\AvatarInputHandler\dynamiccameras\snipercamera.pyc"
     строку 
          "self.__showVehicle(False)"
     на
          "self.__showVehicle(True)"
     Без замены самого файла "snipercamera.pyc"? 
     Хук-скрипт как в Lua языке.

 

Те кто считает этот мод гов*** просто пройдите мимо, а кто может помочь - помогите.

Edited by KL1SK

Share this post


Link to post

Short link
Share on other sites

Отвечу на первый твой вопрос.

Если ты начал изучать питон, то наверное уже знаешь что такое модули и пакеты модулей, как происходит импорт модулей и пакетов.

Так вот при запуске движок импортирует модули из папки \res\scripts\client, при импорте происходит создание классов, объектов и пр, каждый импортируемый модуль из этой папки в свою очередь импортирует вложенные модули и пакеты модулей и т.д.

Но как оказывается перед тем как импортировать модули из родной папки \res\scripts\client, движок просматривает на предмет импорта еще и папку модов для текущего патча, о чем радостно сообщает в логфайле:

Checking ./res_mods/0.8.11: mods found

После этого он сначала загружает модули из папки \res_mods\0.8.11\scripts\client, и только потом переходит к своей родной папке \res\scripts\client

А ты наверное уже знаешь, что в питоне при импорте двух модулей с одинаковым названием (даже если они лажат в разных местах) загружается первый, а загрузки второго не происходит (ну разве что явно не указать reload).

Таким образом, если у тебя есть:

\res_mods\0.8.11\scripts\client\CameraNode.pyc и

\res\scripts\client\CameraNode.pyc

то загружен будет первый, т.е. твой. Ради интереса создай файл login.py, с содержимым print('Hello WorldofTanks!'), скомпилируй и положи в \res_mods\0.8.11\scripts\client\

Запускай клиента и смотри что вывалится в python.log

 

А вообще большинство модов, которые народ пишет, используют для загрузки модифицированный \res\scripts\client\CameraNode.pyc. Дописывает функцию обхода каталога модов и импорта всего что встретится в каталоге модов.

Edited by st11ks

Share this post


Link to post

Short link
Share on other sites

import BigWorld

class CameraNode(BigWorld.UserDataObject):

    def __init__(self):
        BigWorld.UserDataObject.__init__(self)


def load_mods():
    import ResMgr, os, glob
    sec = ResMgr.openSection('../paths.xml')
    subsec = sec['Paths']
    vals = subsec.values()
    for val in vals:
        mp = val.asString + '/scripts/client/mods/*.pyc'
        for fp in glob.iglob(mp):
            _, fn = os.path.split(fp)
            sn, _ = fn.split('.')
            if sn != '__init__':
                print 'LoadMod: ' + sn
                try:
                    exec 'import mods.' + sn
                except Exception as e:
                    print e


load_mods()

Я так понимаю, cameranode.pyc должен выглядеть так?

Я кидаю любой файл в "/scripts/client/mods/" и он его подхватывает?

Так с этим разобрался, подхват осуществляется.

 

st11ks питон не изучал, разбираюсь методам анализа кода, кстати много схожего с Lua, немного синтаксис отличается.

Закройте тему. Всё сделано. кому надо скрипт пишите в ЛС.

Edited by KL1SK

Share this post


Link to post

Short link
Share on other sites

showVehicle.zip

 

"showVehicle.pyc" положить в "WoT\res_mods\0.9.5\scripts\client\mods"

 

Вкл\откл на F11

 

Имеется 1 баг.

В бою корпус дёргается как вибратор, в реплеях норм. Что-то типа частоты обновления модельки.  В любом случае не нашел как это исправить.

Кто может помочь пишите.

 

http://www.koreanrandom.com/forum/topic/13834-нужна-помощь-в-допиливании-мода/

Edited by KL1SK

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...