Jump to content
Korean Random

IzeBerg

User
  • Content Count

    199
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by IzeBerg


  1. Гайды о чем?

    Например, мне вот не понятно стало как вызывать питоновские функции из формы с передачей параметров? И наоборот, как вызывать AS-функции из питона? И как в эти функции передавать параметры?

     

    Как вызывать такие окошки в бою?


  2. идея в том чтоб задать 2 точки: первую глубоко под землей, другую высоко над землей и вызвать данную функцию:

    BigWorld.wg_collideSegment(BigWorld.player().spaceID, стартовая позиция, финальная позиция, 128)

    она возвращает tuple: первый аргумент точка на земле, второй аргумент нормаль поверхности земли в точке.

    Я это умею и использую. Но данным способом находится только высота земли в заданных координатах. Там наклон земли не передается, на сколько я понял.

     

    Была мысль на соседних точках сделать такое и как-то провести два вектора, но как это сделать я пока не могу понять.

     

     

     

    я понимаю что можно поставить и сквозь камни, но это ведь не желаемое поведение?  

    Ну хоть какое-то. Если с этим разобраться, то можно уже и пробовать сталкивать с камешками и другими объектами.


  3. вопрос не тривиальный.

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

    attachicon.gifrelief.png

    ...или получатся какие то столкновения с окружающими объектами?

    может в движке уже есть что то готовое, но сам "на коленке" такое не напишешь

    Паинт доставил, но сначала хотя-бы просто научится узнавать угол наклона земли в конкретной очке. А потом уже есть в клиенте куча способов "сталкивать" друг с другом Entity (а камень, как ни странно, еще какое Entity), думаю один из них подойдет.

     

    P.s. Если как на картинке ставить - то он просто сквозь камни ляжет (если не учитывать камни и подобные объекты).


  4. entity.model.motors[0].signal - это матрица которую можно редактировать. например, так:

     

    from gui.ClientHangarSpace import _createMatrix

    import math

    entity.model.motors[0].signal = _createMatrix(1, (-math.pi/2, -math.pi/4, -math.pi/4), (50, 30 + index * 10, 50))

     

    первый аргумент _createMatrix масштаб элемента, второй это tuple углов в радианах, третий tuple координат в пространстве.

     

    забавные вещи получаются:

    Двигается, спасибо. Нас сколько я понял - двигая signal двигается только моделька, т.е. поля у Entity position/yaw/pitch/roll не трогаются. Печаль.

     

    Остался первый вопрос (как определить наклоны, что правильно относительно земли расположить?).


  5. лично не пробовал задавать эти параметры, но в принципе это yaw, roll и pitch в свойствах класса танка.

    Их задавать можно до создания, как оределять их (roll/pitch)? Они Read-Only, т.е. после создания уже не изменить.


  6. Мне удалось (спустя немало костылей) сделать так, чтобы можно было создать Vehicle (наследник BigWorld.Entity, по-сути является объектом-танком) в указанной точке на карте.

    Теперь возникли вопросы:

    Как его корректно "устанавливать" на землю (настроить наклон вперед-назад/вправо-влево)? - Сейчас я могу ставить на землю/дома/другие объекты (x/y/z координаты), но нормально подстроить наклоны не могу.

    Как ему корректно менять координаты (телепортировать/двигать)? - В методах я не нашел ничего, вызывать поля base/cell можно только для "подключенных" энтити (это мне сообщает BigWorld), т.е. тех, которые получены от сервера. Как вариант - пробовал пересоздать модель, но она пересоздается очень долго (грузят заново ресурсы и т.д.)

     

    Если мне тут дадут ответ хотя-бы на первый вопрос - со вторым мне уже будет проще (на костылях смогу, может быть).


  7. снимут шифрование с исходников + сами исходники в нормальный вид приведут

     

    Снимут шифрование не полностью. Они будут делать API, мне тут отписал один разработчик:

    По API - в первой итерации оно, наверное будет еще не тем, что в танках, но реально - мы будем стремиться к тому, чтобы оно стало песочницей с нужными мододелам возможностями, которую мы будем документировать, по мере сил, и не ломать, тоже по мере сил, а если ломаем, то предупреждать. Все вне этой песочницы будем как-то закрывать, и если что-то нужно, то пробрасывать в песочницу.

    Условно, есть логика игры, которую разработчики считают "не должна изменяться", остальное - даем в виде API и стараемся поддерживать. То, что не должно изменяться - значит или дает возможности делать ботов или другие моды, которые противопоказаны игре.


  8. Интереса ради решил попробовать вызывать/удалять разные интефейсы, но столкнулся с проблемой. Я вызываю интерфейс боя:

        battleWindow = Flash('battle.swf')
        battleWindow.movie.backgroundAlpha = 0
    

    Через существующий класс Battle не судьба, я в оффлайне (там надо много всяких переменных инициализировать, которые в оффлайне не нужны).

     

    Далее гружу карту и все остальное, и все бы было хорошо, но:

    image.png

     

    В классе Battle (который по умолчанию грузит то-же самое) я нашел, вроде как должно подстраивать Falsh-элемент под новое разрешение экрана:

    battleWindow.call('Stage.Update',  list(GUI.screenResolution())) 

    GUI.screenResolution() - размер окна/экрана в нецелых пикселях, может выдать (1200.123, 600.123). Округлять/приводить к int пробовал.

    На деле оно удаляет все, кроме пинга-фпс и кусочка ушей.

     

    Пробовал еще так:

    screen = GUI.screenResolution()
    battleWindow.component.size = g_battleWindow.flashSize = (screen[0], screen[1])

    Как подстроить размер под разрешение экрана?

     

    UPD. Я как всегда - сначала спрошу, потом сам же отвечаю :heh: :

        from gui.shared.utils.graphics import getScaleByIndex
        from account_helpers.settings_core import settings_constants
        params = list(g_screen)
        index = g_settingsCore.getSetting(settings_constants.GRAPHICS.INTERFACE_SCALE)
        params.append(getScaleByIndex(index))
        battleWindow.call('Stage.Update', params)

    На ОТ 9.7 я забыл про новую настройку "разрешения интерфейса". 

    • Upvote 1

  9. "Дело было вечером, делать было нечего."

    Не было интернета, захотелось мне попробовать полетать, да посмотреть различные карты. Вспомнил что есть замечательный мод на оффлайн просмотр карт. Но я столкнулся с букетом ошибок. Начал исправлять (вроде даже исправил почти все), но в логах постоянно фигурирует это:

    Traceback (most recent call last):
      File "scripts/client/game.py", line 606, in wg_onChunkLoad
      File "scripts/client/AreaDestructibles.py", line 174, in onChunkLoad
      File "scripts/client/AreaDestructibles.py", line 433, in __setDestructibleInitialState
    SystemError: error return without exception set

    При этом карта отрисовывается, но камерой управлять нельзя.

     

    С чем сия ошибка может быть связана, в какую сторону копать?

     

    P.s. В прикреплении единственный скрипт из мода, который связывается с game (с AreaDestructibles ничего не связывается вообще). Единственное что я менял в этом скрипте - сменил объект-камеру на VideoCamera (встроенная в клиент, у мода был свой велосипед на основе этой камеры),и заменил ссылку на настройки (теперь мод работает только с этим модом, и соответственно управление то-же), почистил импорты (было много не нужных).

    map_observer_u.zip

    • Upvote 1

  10. Берете Орион, запускаете клиенте игры через Главное меню - WOT-Transmission - Run - ...

    После этого жмякаете в редакторе правой кнопкой мыши, вылезет меню. В меню находите пункт Select the attributes source и переключаете его с Orion на WOT.

    Затем пишите в редакторе import BigWorld и выполняете код командой SHIFT+F5.

    После этого набираете в редакторе BigWorld, затем ставите точку и перед вами появляется выпадающий список со всеми атрибутами этого базового класса.

     

    Ну а дальше уже исследуете их методом тыка.

     

    print BigWorld.xxxx

    print BigWorld.xxxx()

    ....

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


  11. С создания прошлого вопроса прошло больше года, не ожидал что мой вопрос превратиться в целую дискуссию)

    Спасибо, в итоге помогли.

    Но собственно только сейчас дошли руки пытаться что-то делать, во многом я сам разобрался, но не могу разобраться в одном вопросе:

    Какие есть методы/поля у класса (или что это? я просто с Java прибежал) BigWorld? Что они делают и какие параметры в них передавать?

    P.s. Если после патча в нем что-то меняется, как узнать что изменилось?


  12. Неа не помогло. Нашел какие-то декомпиляторы, но никакой инструкции к ним нет, через коммандную строку рыл их ихние команды, ничего про декомпиляцию не сказано.


  13. Собственно вопрос припёк меня давно. Есть-ли какие-то утилиты/способы декомпилировать и компилировать *.pyc файлы?

    P.s. Гугл не помог, кидал в какие-то онлайн-декомпиляторы, но там ограничение 10кб.

×
×
  • Create New...