Обсуждение F.A.Q. Вопросы и ответы. Python и Python в WoT

Регистрация
15 Июн 2015
Сообщения
68
Репутация
19
Спасибо
3
Монет
0
Немного отвлеченный вопрос из области моих незнаний.

Расскажите пожалуйста про файлы CameraNode.pyc и __init__.pyc которые также присутствуют и в этом моде.

Дело в том, что эти файлы присутствуют и в других модах и модпаках, которые я устанавливаю. Эти файлы, как я заметил, имеют разный размер, сталобыть они разные.

Моды я могу устанавливать в разном порядке, скажем, сперва на основе какого то модпака я закидываю все скопом, а потом добавляю отдельные моды. Файлы с одинаковыми именами затираются. И в каком бы я их порядке не ставил на работоспособность модов это не влияет (я не замечаю разницы).

Как это работает и как правильно с ними поступать?
 
Последнее редактирование:
Немного отвлеченный вопрос из области моих незнаний.

Расскажите пожалуйста про файлы CameraNode.pyc и __init__.pyc которые также присутствуют и в этом моде.

Дело в том, что эти файлы присутствуют и в других модах и модпаках, которые я устанавливаю. Эти файлы, как я заметил, имеют разный размер, сталобыть они разные.

Моды я могу устанавливать в разном порядке, скажем, сперва на основе какого то модпака я закидываю все скопом, а потом добавляю отдельные моды. Файлы с одинаковыми именами затираются. И в каком бы я их порядке не ставил на работоспособность модов это не влияет (я не замечаю разницы).

Как это работает и как правильно с ними поступать?


Это файлы загрузчики. Они могут отличаться по размеру, но функционально они делают одно и то же. __init__.pyc, например, содержит всего одну команду на питоне pass, что означает - "ничего не делать", но чтоб из текущей папки загружались скрипты этот файл необходим. CameraNode.pyc содержит команды загрузки модов из папки mods, в содержимом могут быть вариации (отсюда разный размер), но суть одинакова. Поэтому не имеет значению из какого источника вы загрузите эти файлы, главное чтоб они присутствовали. Более того, если они уже есть, то не обязательно их копировать.
 
Это файлы загрузчики. Они могут отличаться по размеру, но функционально они делают одно и то же. __init__.pyc, например, содержит всего одну команду на питоне pass, что означает - "ничего не делать", но чтоб из текущей папки загружались скрипты этот файл необходим. CameraNode.pyc содержит команды загрузки модов из папки mods, в содержимом могут быть вариации (отсюда разный размер), но суть одинакова. Поэтому не имеет значению из какого источника вы загрузите эти файлы, главное чтоб они присутствовали. Более того, если они уже есть, то не обязательно их копировать.

Зорро, а можно мне тогда тоже? )
Я пока только начал и сейчас у меня первый затык после бинарных операций.

вот тут

class Animal(object):
def __init__(self,name):
self.name = name
zebra = Animal("Jeffrey")

print zebra.name


1) класс объект - определяет объект как объект, в смысле, как юнит, способный хранить и значение и функции, либо же имеет какой-то еще смысл?
2) ок я понимаю что в классе я определяю функцию, которая принимает два аргумента. Но почему далее ниже стоит self.name = name? Что это значит? Правое name - это второй аргумент? Или слева стоит первый аргумент.второй аргумент, а справа яхз что?
3) и в конце концов - ок, zebra.name вызывается примерно также, как dict.items. Но почему именно так... Где указано что написав zebra.name я получу именно Jeffrey?

Короче я запутался и буду о-очень благодарен за объяснение ) Или ссылку.

Я знаю: списки, словари, функции, интеграцию библиотек, бинарные операции
Остальное пока не трогал. очень извиняюсь за нищенскую терминологию, к сожалению пока путаюсь в понятиях.
 
Последнее редактирование:
Зорро, а можно мне тогда тоже? )
Я пока только начал и сейчас у меня первый затык после бинарных операций.

вот тут

class Animal(object):
def __init__(self,name):
self.name = name
zebra = Animal("Jeffrey")

print zebra.name


1) класс объект - определяет объект как объект, в смысле, как юнит, способный хранить и значение и функции, либо же имеет какой-то еще смысл?
2) ок я понимаю что в классе я определяю функцию, которая принимает два аргумента. Но почему далее ниже стоит self.name = name? Что это значит? Правое name - это второй аргумент? Или слева стоит первый аргумент.второй аргумент, а справа яхз что?
3) и в конце концов - ок, zebra.name вызывается примерно также, как dict.items. Но почему именно так... Где указано что написав zebra.name я получу именно Jeffrey?

Короче я запутался и буду о-очень благодарен за объяснение ) Или ссылку.

Я знаю: списки, словари, функции, интеграцию библиотек, бинарные операции
Остальное пока не трогал. очень извиняюсь за нищенскую терминологию, к сожалению пока путаюсь в понятиях.

Ничего сложного.
self - нужен, чтоб иметь возможность обращаться к самому себе, т.е. self - это объект собственный и идентичен Animal в данном контексте. self кстати - просто принятая форма, вместо self можно использовать и другие названия, например если self заменить на selfy, то это тоже сработает. Если использовать декоратор @ staticmethod, то можно вообще без первого аргумента обойтись, а к методу обращаться через имя объекта, будет выглядеть так:

PHP:
class Animal:
    
    @ staticmethod
    def __init__(name):
        Animal.name = name

zebra = Animal("Jeffrey")

print zebra.name

и кстати (object) можно опустить. В питоне всё object по умолчанию.

"Где указано что написав zebra.name я получу именно Jeffrey? "
а именно в строке self.name = name и указано.

вы передали через метод __init__ классу Animal (он же self внутри себя) аргумент (строка "Jeffrey") и присвоили его методу name, поэтому у вас zebra.name = Animal.name (self.name внутри класса) содержит строку "Jeffrey"

Вот так всё просто.

ЗЫ. Надо только тему другую для таких вопросов создавать
 
Последнее редактирование:
Ничего сложного.
self - нужен, чтоб иметь возможность обращаться к самому себе, т.е. self - это объект собственный и идентичен Animal в данном контексте. self кстати - просто принятая форма, вместо self можно использовать и другие названия, например если self заменить на selfy, то это тоже сработает. Если использовать декоратор @ staticmethod, то можно вообще без первого аргумента обойтись, а к методу обращаться через имя объекта, будет выглядеть так:

PHP:
class Animal:
    
    @ staticmethod
    def __init__(name):
        Animal.name = name

zebra = Animal("Jeffrey")

print zebra.name

и кстати (object) можно опустить. В питоне всё object по умолчанию.

"Где указано что написав zebra.name я получу именно Jeffrey? "
а именно в строке self.name = name и указано.

вы передали через метод __init__ классу Animal (он же self внутри себя) аргумент (строка "Jeffrey") и присвоили его методу name, поэтому у вас zebra.name = Animal.name (self.name внутри класса) содержит строку "Jeffrey"

Вот так всё просто.

ЗЫ. Надо только тему другую для таких вопросов создавать

Это у вас просто, а я весь день гугл мучаю. Всё понял наконец-то. Вернее, почти всё, но это я сейчас добью манами ))
Спасибо!

ЗЫ. а подфорум же есть по вопросам о питоне, просто я подумал, эта информация не будет сильно ценной для последующих разборок в нём )
 
Решил создать тему в формате FAQ, для тех кому интересно как работают моды и что может Питон, ну и обо всём, что связано с игровым движком WOT. Задавайте вопросы, смогу отвечу.
 
Какой софт нужен для написания мода?
 
Какой софт нужен для написания мода?

PjOrion 1.2.5 - достойный, бесплатный продукт, который, на данный момент, лучше всего приспособлен для написания, редактирования и обфусцирования скриптов (модов) на Python. Более того, он написан специально для этих целей.
 
Немного отвлеченный вопрос из области моих незнаний.

Расскажите пожалуйста про файлы CameraNode.pyc и __init__.pyc которые также присутствуют и в этом моде.

Дело в том, что эти файлы присутствуют и в других модах и модпаках, которые я устанавливаю. Эти файлы, как я заметил, имеют разный размер, сталобыть они разные.

Моды я могу устанавливать в разном порядке, скажем, сперва на основе какого то модпака я закидываю все скопом, а потом добавляю отдельные моды. Файлы с одинаковыми именами затираются. И в каком бы я их порядке не ставил на работоспособность модов это не влияет (я не замечаю разницы).

Как это работает и как правильно с ними поступать?

Вот посмотри:
http://4cheat.ru/showthread.php?t=39918
 
Ну короче. Я получил RHCE. И теперь могу вернуться к питону. Еще разок про классы:


PHP:
class Animal(object):
    """Makes cute animals."""
    is_alive = True
    def __init__(self, name, age):
        self.name = name
        self.age = age

 # Add your method here!

    
    def description(self):
        print self.name
        print self.age
        
hippo = Animal("Hujak", 1239)
hippo.description()

Почему я должен использовать print self.name а не print Animal.name?
 
Последнее редактирование:
Ну короче. Я получил RHCE. И теперь могу вернуться к питону. Еще разок про классы:


PHP:
class Animal(object):
    """Makes cute animals."""
    is_alive = True
    def __init__(self, name, age):
        self.name = name
        self.age = age

 # Add your method here!

    
    def description(self):
        print self.name
        print self.age
        
hippo = Animal("Hujak", 1239)
hippo.description()

Почему я должен использовать print self.name а не print Animal.name?

На самом деле это одно и тоже, но практически принято писать self. В этом случае вы сможете переименовать класс без последствий.
 
На самом деле это одно и тоже, но практически принято писать self. В этом случае вы сможете переименовать класс без последствий.

Traceback (most recent call last):
File "python", line 16, in <module>
File "python", line 11, in description
AttributeError: type object 'Animal' has no attribute 'name'

:(

Это если писать def description(self):
print Animal.name
print Animal.age
 
Traceback (most recent call last):
File "python", line 16, in <module>
File "python", line 11, in description
AttributeError: type object 'Animal' has no attribute 'name'

:(

Это если писать def description(self):
print Animal.name
print Animal.age

Ты определяешь класс как self в строке def description(self) и работаешь с ним
PHP:
    def description(self):
        print self.name
        print self.age

а можешь написать хоть так:
PHP:
class Animal(object):
    """Makes cute animals."""
    is_alive = True
    def __init__(self, name, age):
        self.name = name
        self.age = age

 # Add your method here!


    def description(selfyrius):
        print selfyrius.name
        print selfyrius.age

hippo = Animal("Hujak", 1239)
hippo.description()

и будет работать
 
Ты определяешь класс как self в строке def description(self) и работаешь с ним
PHP:
    def description(self):
        print self.name
        print self.age

а можешь написать хоть так:
PHP:
class Animal(object):
    """Makes cute animals."""
    is_alive = True
    def __init__(self, name, age):
        self.name = name
        self.age = age

 # Add your method here!


    def description(selfyrius):
        print selfyrius.name
        print selfyrius.age

hippo = Animal("Hujak", 1239)
hippo.description()

и будет работать

Да, понятно, это обхяснено в учебнике. Мне не понятно, почему метод принимает первый аргумент - self, его значение в виде класса, но далее я могу работать только с аргументом, а с его значение напрямую не могу.

Для меня self = Animal. А раз это значение уже есть в методе и один раз он смог с ним поработать, то я предполагаю, что смогу и дальше. Но не могу.

Скажем тут:

variable1 = "a"
variable2 = "b"

variable3 = variable1

Далее мне не придется каждый раз для вывода "a" ссылаться на variable3, я с тем же успехом могу и с variable1 работать.


Я пытаюсь понять, что на самом деле делает передача аргумента self (или аргумента с любым другим именем на 1 месте, как вы заметили), зачем оно нужно в описании класса.

Я не тупой, правда ))
 
Да, понятно, это обхяснено в учебнике. Мне не понятно, почему метод принимает первый аргумент - self, его значение в виде класса, но далее я могу работать только с аргументом, а с его значение напрямую не могу.

Для меня self = Animal. А раз это значение уже есть в методе и один раз он смог с ним поработать, то я предполагаю, что смогу и дальше. Но не могу.

Скажем тут:

variable1 = "a"
variable2 = "b"

variable3 = variable1

Далее мне не придется каждый раз для вывода "a" ссылаться на variable3, я с тем же успехом могу и с variable1 работать.


Я пытаюсь понять, что на самом деле делает передача аргумента self (или аргумента с любым другим именем на 1 месте, как вы заметили), зачем оно нужно в описании класса.

Я не тупой, правда ))

вот вариант без первого аргумента:
PHP:
class Animal(object):
    """Makes cute animals."""
    is_alive = True
    [MENTION=16006]sTa[/MENTION]ticmethod
    def __init__(name, age):
        Animal.name = name
        Animal.age = age

 # Add your method here!


    [MENTION=16006]sTa[/MENTION]ticmethod
    def description():
        print Animal.name
        print Animal.age

hippo = Animal("Hujak", 1239)
hippo.description()

оно нужно чтоб определить переменную для последуюцего обращения. Дело в том, что обычная переменная работает только внутри метода и уничтожается за его пределами. Для работы внутри класса она должна быть отпределена внутри его самого - это делается с помощью self , то же касается и методов. Все они работают по одному принципу, т.к. они все объекты. Но... правило объектности подразумевает ограничения использования всего того, что создано в объекте, определено и работает только внутри его, если хочешь использовать что-то выше, то его необходимо и определить выше. Простая иерархическая система.
 
Последнее редактирование:
Вот решил, для жаждущих начать писать моды, но не знающих с чего начать накропать небольшое напутствие.

GreedoX написал(а):
Привет, не подскажешь где ты искал информацию о python'е в танках?

О-о-о-о вопрос риторический, с миру по нитке. На самом деле, пока сам в скрипты с головой не залезешь никто те ничего объяснить не сможет. Вопрос, типа: "Как писать моды?", тут не прокатит, сам в этом убедился. Внятные ответы можно получить только на внятные вопросы. Поэтому надо залезать, а потом спрашивать, как например сделать вот так? Ну, это всё лирика, теперь серьёзно.

1. Необходимо маломальски изучить питон, ну на начальном уровне хотяб. Для этого существует куча литературы, сайтов, видеоуроков наконец. Да, процесс не быстрый, но необходимый.

2. Если с 1-м пунктом всё окей, токда тебе сюда:
PjOrion
Это самая лучшая оболочка для работы с скриптами (модами) для WOT, ну и вообще с прогами на питоне. О, спасибо тебе великий СТРАННИК (это чувак который её разработал)
Умеет она очень многое, но разбираться тебе придётся самому.
Просто кидаешь в неё скрипт и декомпилишь его - если он конечно не защищён, то откроется без проблем.

3. Дальше напрягаешь мозг и медленно, но уверенно мидитируешь над кодом.
Может что-то на ходу поймёшь, но в основном появятся те самые истинные вопросы о которых я писал выше. Но, не спеши с ними обращаться.
Есть ещё один очень хороший, но к сожалению тоже не очень лёгкий инструмент для изучения структуры питоновского движка в WOT.

4. Тебе понадобится вышеописанный ОРИОН и Нотепод++ и такая программа как WotModTools 0.5.3 multy)))
В ОРИОНе есть возможность группового декомпилирования берёшь из оригинала игры папку \World_of_Tanks\res\scripts и пропускаешь её череза ОРИОН (групповая декомпиляция скриптов) и WotModTools (распаковка .xml и dev файлов, тоже групповая). Потом получившуюся папку загоняешь в Нотепад++ всю полностью и там через минутку откроются все файлы. Для нахождения необходимой информации используй поиск во всех файлах. И потихонечку изучай движок

Вот впринципе и всё, что я могу посоветовать тебе на первом этапе ;)
Удачи.
 
Последнее редактирование:
Вот решил, для жаждущих начать писать моды, но не знающих с чего начать накропать небольшое напутствие.



О-о-о-о вопрос риторический, с миру по нитке. На самом деле, пока сам в скрипты с головой не залезешь никто те ничего объяснить не сможет. Вопрос, типа: "Как писать моды?", тут не прокатит, сам в этом убедился. Внятные ответы можно получить только на внятные вопросы. Поэтому надо залезать, а потом спрашивать, как например сделать вот так? Ну, это всё лирика, теперь серьёзно.

1. Необходимо маломальски изучить питон, ну на начальном уровне хотяб. Для этого существует куча литературы, сайтов, видеоуроков наконец. Да, процесс не быстрый, но необходимый.

2. Если с 1-м пунктом всё окей, токда тебе сюда:
БАЦ
Тут лежит самая лучшая оболочка для работы с скриптами (модами) для WOT, ну и вообще с прогами на питоне. О, спасибо тебе великий СТРАННИК (это чувак который её разработал)
Умеет она очень многое, но разбираться тебе придётся самому.
Просто кидаешь в неё скрипт и декомпилишь его - если он конечно не защищён, то откроется без проблем.

3. Дальше напрягаешь мозг и медленно, но уверенно мидитируешь над кодом.
Может что-то на ходу поймёшь, но в основном появятся те самые истинные вопросы о которых я писал выше. Но, не спеши с ними обращаться.
Есть ещё один очень хороший, но к сожалению тоже не очень лёгкий инструмент для изучения структуры питоновского движка в WOT.

4. Тебе понадобится вышеописанный ОРИОН и Нотепод++ и такая программа как WotModTools 0.5.3 multy)))
В ОРИОНе есть возможность группового декомпилирования берёшь из оригинала игры папку \World_of_Tanks\res\scripts и пропускаешь её череза ОРИОН (групповая декомпиляция скриптов) и WotModTools (распаковка .xml и dev файлов, тоже групповая). Потом получившуюся папку загоняешь в Нотепад++ всю полностью и там через минутку откроются все файлы. Для нахождения необходимой информации используй поиск во всех файлах. И потихонечку изучай движок

Вот впринципе и всё, что я могу посоветовать тебе на первом этапе ;)
Удачи.

ZJ благодарен нужная тема, вот только ссылка не работает, или только у меня?
 
блокируется, гугли так...

Давайте на примере разберем, что за что отвечает:
BigWorld worldoftanks 2.8.0 (compiled at 12:49:28 Jun 15 2015) starting on 08/21/15 01:04:51

INFO: [Config] Default encoding set to utf-8
INFO: [PY_DEBUG] BigWorld Release Client - Content Type: sd

INFO: [PY_DEBUG] Checking ./res_mods/0.9.9: mods found
INFO: [XFW] Version: 3.1.0
INFO: [XFW] Working dir: C:\Games\World_of_Tanks\res_mods\mods
INFO: [XFW] Loading mod: xvm_main 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_autologin 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_battle 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_battleloading 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_battleresults 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_contacts 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_crew 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_equip 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_export 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_hangar 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_hotfix 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_integrity 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_limits 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_online 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_ping 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_profile 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_profiler 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_quests 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_sounds 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_tcarousel 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_techtree 3.1.0 (http://www.modxvm.com/)
INFO: [XFW] Loading mod: xvm_tooltips 3.1.0 (http://www.modxvm.com/)

INFO: [ENOT]Loading mod: AutoEquip
INFO: [ENOT]Loading mod: autoextinguisher098_v2
INFO: [ENOT]Loading mod: BrokenDestructibles
INFO: [ENOT]Loading mod: cammod
INFO: [ENOT]Loading mod: DamageLog
INFO: [INFO DamageLog] Version: 0.1.6 beta (Date: 14.07.2015) by GambitER
INFO: [ENOT]Loading mod: destruction_on_minimap
INFO: [ENOT]Loading mod: GunConstraints
INFO: [ENOT]Loading mod: HIT_Inviz
INFO: [ENOT]Loading mod: InfoPanel
INFO: [ENOT]Loading mod: laser
INFO: [ENOT]Loading mod: minimap_tankview
INFO: [ENOT]Loading mod: ModificationProjectile
INFO: [ENOT]Loading mod: mod_pack_lpt
INFO: [ENOT]Loading mod: PMOD
INFO: [ENOT]Loading mod: ProAchivments
INFO: [ENOT]Loading mod: ProArmorResist
INFO: [ENOT]Loading mod: ProControlCenter
INFO: [ENOT]Loading mod: ProSafeShot
INFO: [ENOT]Loading mod: ProSights
INFO: [ENOT]Loading mod: ProSkin
INFO: [ENOT]Loading mod: ProSound
INFO: [ENOT]Loading mod: ProStaff
INFO: [ENOT]Loading mod: ProStatControl
INFO: [ENOT]Loading mod: ProUpdater
INFO: [ENOT]Loading mod: RTCS_gui
INFO: [RTCS] GUI: Mod loaded succesfully! (c) Naval_Bearder_Man & xasic
INFO: [ENOT]Loading mod: RTCS_radiochat
INFO: [RTCS] RadioChat: Mod loaded succesfully! (c) Naval_Bearder_Man & xasic
INFO: [ENOT]Loading mod: RTCS_timer
INFO: [RTCS] Timer Sound: Mod loaded succesfully! (c) Naval_Bearder_Man & xasic
INFO: [ENOT]Loading mod: RTCS_voices
INFO: [RTCS] Crew Voices: Mod loaded succesfully! (c) Naval_Bearder_Man & xasic
INFO: [ENOT]Loading mod: ServerAim
INFO: [ "ServerAim ON/OFF" by Makct. Exclusive for AtotIK ]
INFO: [ENOT]Loading mod: wotXp
INFO: [ENOT]Loading mod: ZJ_AimBotShaytan
INFO: ntp-servers.net url time test successful.
INFO: Config file successfully loaded.
INFO: [ENOT]Loading mod: ZJ_ContourLook
INFO: limit test successful.
INFO: Config file successfully loaded.
INFO: [ENOT]Loading mod: ZJ_MRL
INFO: ntp-servers.net url time test successful.
INFO: Config file successfully loaded.
NOTICE: [NOTE] (scripts/common/fortified_regions.py, 208): fortified_regions.init()
NOTICE: [NOTE] (scripts/common/clubs_settings.py, 34): clubs.init()
NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 4 was selected.
NOTICE: [NOTE] (scripts/client/post_processing/__init__.py, 267): The quality = 3 was selected.
ERROR: RuntimeError: Sound system error, can't register DSP in category `inside`, category not found

INFO: =============================
INFO: 2015-08-21 01:05:37: [ERROR] ./res_mods/mods//xfw/python\xfw\events.pyc
ERROR: Traceback (most recent call last):
ERROR: File "mods/xfw/python/xfw/events.py", line 54, in __event_handler
ERROR: File "scripts/client/gui/Scaleform/Flash.py", line 21, in __init__
ERROR: IOError: scripts/client/mods/ProArmorResist/ProArmorResist.swf

INFO: =============================
ERROR: Traceback (most recent call last):
ERROR: File "ProArmorResist.py", line 65, in initialize
ERROR: File "scripts/client/gui/Scaleform/Flash.py", line 106, in getMember
ERROR: File "scripts/client/gui/Scaleform/Flash.py", line 61, in movie
ERROR: AttributeError: 'armorResistFlash' object has no attribute 'component'

NOTICE: [NOTE] (scripts/client/ConnectionManager.py, 151): User authentication method: token2
NOTICE: [NOTE] (scripts/client/account_helpers/settings_core/options.py, 721): Change state of voip: (True,)
NOTICE: [NOTE] (scripts/client/game.py, 425): [SPACE] Loading space: spaces/hangar_premium_v2
 
Назад
Сверху