StranikS_Scan Posted August 11, 2018 Share Posted August 11, 2018 1 час назад, SkepticalFox сказал: @Dragon armor го нормальный чат создай, тут весьма неудобно А ты не стесняйся, тут все свои. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
Pavel3333 Posted August 11, 2018 Share Posted August 11, 2018 @StranikS_Scan кстати, да. Форум для того и нужен, чтобы делиться знаниями и получать их от других. 1 @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 11, 2018 Share Posted August 11, 2018 @Pavel3333 @StranikS_Scan я вот по двум своим темам понял, что крайне неудобно вести так разработку @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted August 11, 2018 Author Share Posted August 11, 2018 6 часов назад, SkepticalFox сказал: го нормальный чат создай Где? И что в нём обсуждать сверх того, что в теме? Как загрузить ландшафт? На данный момент не интересует статичная геометрия, только сам ландшафт. Что у меня есть - это загруженный terrain2\heights из .cdata_processed. Получил массив чисел -28.190001 -28.200001 -28.200001 -28.230001 -28.240002 -28.250002 -28.250002 и так далее Они как группируются? 3 числа - вектор, 3 вектора - полигон? Или как-то по-другому? Смотрел в исходниках blender-tools/wot_maps_viewer, но там так мудрёно, что ничего не понял. 10 минут назад, SkepticalFox сказал: крайне неудобно вести так разработку Разработки, как таковой, пока что и нет. Когда будет уже что-то, чем можно поделиться, тогда можно будет делать. Карта, если что, "spaces/28_desert", файл "00000000o.cdata_processed". И как мне помнится, буква в конце имени файла ("o") что-то означает. Или нет? @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 11, 2018 Share Posted August 11, 2018 (edited) 1 hour ago, Dragon armor said: Они как группируются? 3 числа - вектор, 3 вектора - полигон? Или как-то по-другому? Смотрел в исходниках blender-tools/wot_maps_viewer, но там так мудрёно, что ничего не понял у тебя есть 2D картинка - из RGB получаешь z-координату x, y получаешь умножением на chunkSize позиции пикселя а полигональность можно различными способами достичь, не факт что у меня верно 1 hour ago, Dragon armor said: И как мне помнится, буква в конце имени файла ("o") что-то означает. Или нет? она всегда o (outside?) Edited August 11, 2018 by SkepticalFox @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted August 12, 2018 Author Share Posted August 12, 2018 15 часов назад, SkepticalFox сказал: у тебя есть 2D картинка - из RGB получаешь z-координату x, y получаешь умножением на chunkSize позиции пикселя Как всё сложно. Но логично, что только z хранится в картинке. Позже разберусь. Потому что сейчас столкнулся с такой вещью, что мне надо бы два независимых экземпляра питона в одной программе. Есть константа component, которая может быть 'sell' (когда в бою) или 'base' (когда в ангаре). И грузится, в зависимости от значения константы, немного разная информация из xml. Сейчас попытался разобраться с моделью коллизии, но путь до неё не грузится при парсинге xml, когда component == 'base'. Сейчас пока что поставлю хук на _readHitTester, чтобы грузилась клиентская коллизия. А может и не надо будет, оставлю так, как есть. Проверил, хук работает, путь до коллизии есть. Оставлю до лучших времён так. Но узнать, как сделать независимые экземпляры в одной программе было бы неплохо. Пытался по статье на хабре сделать, но не получилось, было что-от типа deadlock. 16 часов назад, SkepticalFox сказал: она всегда o (outside?) Видимо так. @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 12, 2018 Share Posted August 12, 2018 (edited) 2 hours ago, Dragon armor said: Но узнать, как сделать независимые экземпляры в одной программе было бы неплохо. ты про multiprocessing? так его в клиенте WoT и быть не может а вообще непонятно, что ты имеешь в виду Edited August 12, 2018 by SkepticalFox @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted August 12, 2018 Share Posted August 12, 2018 Только что, SkepticalFox сказал: ты про multiprocessing? так его в клиенте WoT и быть не может а вообще непонятно, что ты имеешь в виду Он скорее всего ведет речь о конфигурациях клиента. Там же несколько конфигураций, задаваемых базовыми константами. В зависимости от них питоновская часть по разному работает и грузится, включая и ресурсы.... Но в реальности я хз чего он делает и как )))))) @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted August 12, 2018 Author Share Posted August 12, 2018 43 минуты назад, StranikS_Scan сказал: Он скорее всего ведет речь о конфигурациях клиента. Там же несколько конфигураций, задаваемых базовыми константами. В зависимости от них питоновская часть по разному работает и грузится, включая и ресурсы Да, именно это. GIL. Чтобы в разных потоках был свой собственный контекст питона. На хабре в статье очень просто было, повторял по шагам, а в итоге не получилось. Инициализация проходила нормально, но при вызове PyGILState_Ensure() происходила блокировка, которая не снималась. В итоге в своё время отбросил эту идею. И сейчас это не очень и нужно. 46 минут назад, StranikS_Scan сказал: Но в реальности я хз чего он делает и как Ну да. @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted August 15, 2018 Share Posted August 15, 2018 (edited) С setNested_PROPERTY / setSlice_PROPERTY ещё не сталкивался? Edited August 15, 2018 by Monstrofil @ Quote Link to comment Short link Share on other sites More sharing options...
DWG Posted August 17, 2018 Share Posted August 17, 2018 (edited) В 06.08.2018 в 00:47, Dragon armor сказал: @Serfer_78 Благодарю. Максимальная дальность видимости 565 метров, говорили они, это максимальная дистанция, на которой в принципе можно увидеть технику, говорили они. It was a lie, Morpheus. The prophecy was a lie. В снайперском прицеле за кустами немного видно, но силуэт не обводится. То что ты видишь на картинке это летает танк наблюдателя. Какой то модер следит за игрой.. Боевые танки невидно.. А ещё есть инфа что дальность до 760 метров без глюков игры если поснимать ограничения и сервер игры не контролит.. А так пропадают они на 548 метрах... Edited August 18, 2018 by DWG 3 @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted August 20, 2018 Author Share Posted August 20, 2018 @Monstrofil С setNested_PROPERTY нет, а с setSlice_PROPERTY в сообщении sliceEntityProperty, но так и не смог разобраться, как упаковываются значения. В 17.08.2018 в 21:36, DWG сказал: Какой то модер следит за игрой Точно! Подняли сервер специально для меня и присоединились к локальному серверу, минуя фаервол и NAT провайдера. В 17.08.2018 в 21:36, DWG сказал: А так пропадают они на 548 метрах В том то и дело, что не пропали за пределом круга отрисовки. В 17.08.2018 в 21:36, DWG сказал: А ещё есть инфа что дальность до 760 метров без глюков игры Позже проверю. Тут уже графический движок отвечает за это. Местность видно далеко за пределами круга отрисовки, модели тоже должно бы рисовать так же далеко. Что-то дело не идёт совсем. Сегодня несколько часов промучился с питоном и его невнятным логом "float expected" (или что-то подобное). Уже везде расставил print, чтобы найти место, где ошибка. Не печатает. Всё время показывает на "print 'Load_Collision {}'.format(path)" с "float expected". Когда уже по-отдельности функции разделил, вдруг заработало. Что с этим питоном не так? Почему конструкция Func1(Func2(some_param)) выдавала такую дичь? Когда разделил, сразу же заработали print во всех расставленных местах. Оказалось, что d.turrets[0][0].guns[0].hitTester == None. Поставил assert в хуке на загрузку hitTester. Не срабатывает, т.е. всё загружается, но в guns всё равно hitTester == None. В файле G98_Waffentrager_E100_P.xml параметр hitTester есть, путь валиден, файл существует. Что ему надо? Почему не загружается? Или находится в другом месте? d получил из vehicles.VehicleDescr(compactDescr = '\x11\xbe\xe0\x00\x90\x00\xcd\x00"\x00\xc2\x00\x80\x00\x00'). Для всех остальных компонентов hitTester есть, для орудия нет. Откуда его брать? Как-нибудь отладчик для питона можно прикрутить? Чтобы VisualStudio отдельно, отладчик питона отдельно. Надоело print'ами смотреть, что не так. @ Quote Link to comment Short link Share on other sites More sharing options...
SkepticalFox Posted August 20, 2018 Share Posted August 20, 2018 (edited) @Dragon armor так откуда у орудия коллижн?) что там хиттестить? @Dragon armor в visual studio плохо с питоном , посмотри pycharm @spoterписал про отладку в нем, вроде Edited August 20, 2018 by SkepticalFox @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted August 20, 2018 Author Share Posted August 20, 2018 4 минуты назад, SkepticalFox сказал: так откуда у орудия коллижн?) что там хиттестить? Хотя бы попадание в орудие. Ведь в xml файле есть секция hitTester, в collision_client есть соответствующая модель. 6 минут назад, SkepticalFox сказал: посмотри pycharm У меня он есть. В нём так и не разобрался, как добавить свои модули, которые на C написаны. Поэтому даже до отладки дело не дошло. Гуглил что-то невразумительное, но ничего не нашёл. Не знаю, по каким ключевым словам вести поиск. @ Quote Link to comment Short link Share on other sites More sharing options...
spoter Posted August 20, 2018 Share Posted August 20, 2018 15 минут назад, Dragon armor сказал: Хотя бы попадание в орудие. Ведь в xml файле есть секция hitTester, в collision_client есть соответствующая модель. У меня он есть. В нём так и не разобрался, как добавить свои модули, которые на C написаны. Поэтому даже до отладки дело не дошло. Гуглил что-то невразумительное, но ничего не нашёл. Не знаю, по каким ключевым словам вести поиск. Так-то и к VisualStudio его можно подключать. Если не ошибаюсь это что-то типа такого: https://github.com/Microsoft/PTVS а гуглить: "pydevd visualStudio" @ Quote Link to comment Short link Share on other sites More sharing options...
StranikS_Scan Posted August 20, 2018 Share Posted August 20, 2018 Только что, Dragon armor сказал: Оказалось, что d.turrets[0][0].guns[0].hitTester == None. Дело в том, что орудие как элемент коллижена пробития на клиенте не требуется и потому везде в коде стоят затычки аля: if not isAttached or compDescr.itemTypeName == 'vehicleGun': continue А вот на сервере коллижен имеется и используется ибо у орудия есть внешний "броневой" слой. @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted August 20, 2018 Author Share Posted August 20, 2018 Оказалось, что не expected, а request. print 'Load_Collision {}'.format(path) TypeError: a float is required Очень информативное сообщение. Опять вылезло. Ни номера строки, ни типа ошибки. Явно не из-за print'а. Меня сегодня питон решил добить? @StranikS_Scan Ясно. Были смутные подозрения, но файл коллижена на клиенте существует и его даже можно загрузить в Blender. @spoter Как всё сложно. Эту статью видел, но только ознакомился в своё время. 16 минут назад, spoter сказал: Если не ошибаюсь это что-то типа такого: https://github.com/Microsoft/PTVS Цитата Python support for Visual Studio 2017 is developed and managed here Цитата Prior to Visual Studio 2017, Python support was released as a standalone extension. We are no longer actively developing these versions, but if you are unable to upgrade to Visual Studio 2017 yet, you can use these older installers to get Python support. Для меня мимо. Пока в блокноте продолжу print'ами отлаживать. @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted August 20, 2018 Share Posted August 20, 2018 (edited) Цитата С setNested_PROPERTY нет, а с setSlice_PROPERTY в сообщении sliceEntityProperty, но так и не смог разобраться, как упаковываются значения. @Dragon armor, короче разобрался с этим кошмаром, австралийские(?) разрабы решили там зачем-то экономить каждый бит(!). Определить setNested/setSlice можно по флагу в пакете, он сразу после entityId лежит. Потом лежит размер, 3 байта 0x00 и, собственно, данные (по крайней мере в реплее). Что setNested что setSlice начинаются с упакованного пути к изменяемому элементу, читать приходится побитово. Псевдокодом будет примерно так. pOwner = entity while bits.pop(0) == 1 && pOwner length = obj.childLength() // длина массива || кол-во элементов в словаре || для entity - кол-во свойств bits = bitsRequires(length) // смотрим сколько бит нужно дабы уместить индекс для контейнера выше => ceil(log(length, 2)) propertyId = readBits(bitsArray, bits) // читаем нужное кол-во бит, недостающее добиваем нулями до "целого" байта, переводим в int32 pOwner = pOwner.getPropertyByIndex(propertyId) // для массива - берем по индексу элемент, для словаря - по порядковому номеру свойство в .def файлике, для entity - по exposedId Потом (уже вне цикла while) начинаются отличия, для setNested читаем индекс изменяемого свойства как обычно: maxBits = bitsRequires(pOwner.childLenght()) propertyId = readBits(bits, maxBits) Всё, остаток информации можно распаковать используя тип данных из def/alias. Для setSlice чуть иначе maxBits = bitsRequires(pOwner.childLenght() + 1) index1 = readBits(bits, maxBits) index2 = readBits(bits, maxBits) // если индекс превышает кол-во элементов в pOwner -> добавляем новый // если index2 > index1 && payload == None -> удаляем из массива // замены, похоже, выполняются через setNested В общем-то ничего особо сложного когда разобрался, но мозг мне этот пакет выносил долго... Edited August 20, 2018 by Monstrofil @ Quote Link to comment Short link Share on other sites More sharing options...
Dragon armor Posted August 20, 2018 Author Share Posted August 20, 2018 @Monstrofil Там не всё так "просто". Первый бит вроде как флаг - упаковано или нет, что меня радует, мне-то байты экономить не надо. Ибо эти упакованные значения утомили. И если распаковать ещё можно, то написать алгоритм упаковки у меня выходит плохо. 8 минут назад, Monstrofil сказал: Потом лежит размер, 3 байта 0x00 и, собственно, данные (по крайней мере в реплее). По памяти пишу, без проверки. Наверно, 3 бита, а не байта. Там завязано на количество свойств в энтити (bitsRequires видимо у тебя), а размер определяется исходя из максимального количества бит, которым можно задать индекс свойства. Для 4 свойств требуется 3 бита. Но у меня всё-равно не получалось, не хватало бита для количества свойств, когда пытался прикинуть на глазок. Потом попытаюсь осознать твой алгоритм. @ Quote Link to comment Short link Share on other sites More sharing options...
Monstrofil Posted August 20, 2018 Share Posted August 20, 2018 3 минуты назад, Dragon armor сказал: Наверно, 3 бита, а не байта. Именно что 3 байта, не знаю их предназначение но они всегда по нулям.. Цитата Там завязано на количество свойств в энтити (bitsRequires видимо у тебя), а размер определяется исходя из максимального количества бит, которым можно задать индекс свойства. Да, это оно, а obj.childLength() - как раз текущее кол-во свойств (размер массива / кол-во ключей в словаре / кол-во свойств в entity). @ Quote Link to comment Short link Share on other sites More sharing options...
Recommended Posts
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.