Jump to content
Korean Random

StranikS_Scan

Premium Member
  • Content Count

    7,769
  • Joined

  • Last visited

  • Days Won

    236

Everything posted by StranikS_Scan

  1. @MoD а для чего парсишь, что ты с этими моделями потом делаешь?
  2. В файле damage_stickers.xml нашел corroding_hit_start и corroding_hit_end. Что за выстрелы, где используются/встречаются?
  3. Да, нужно суммировать показатели по всем танкам. И считать сумму ожидаемых значений этих показателей по всем танкам с учетом имеющегося числа боев на каждом. После чего находить отношение их и дальше уже подставлять в формулы нормализации и итоговую формулу - тыц.
  4. Так вы у себя смотрите? Я подумал у противников смотреть. У себя конечно лычки.
  5. Наоборот, у двух игроков может быть три отметки, однако один может быть по WN8 зеленый, а другой фиолет. Однако у фиолета процент по отметкам будет очевидно выше чем у зеленого, так что % лучше отражает дифференциацию игроков чем просто лычки.
  6. Обновление 1.3.3 Список изменений: Добавлена опция "Запоминать выбор компонентов", включена по умолчанию Добавлено отображение суммарного объема файлов, выбранных к удалению
  7. Все, кто много лет играет, особенно с 2011 года - обязательно попадал в бои, которые прерывались зависанием и перезагрузкой серверов. Очень высока вероятность, что статистика по таким боям кривая и дает не совпадение данных в БД.
  8. import BigWorld, Keys from gui import InputHandler def onKeyDown(event): if event.isKeyDown() and BigWorld.isKeyDown(Keys.KEY_TAB): <твой код> InputHandler.g_instance.onKeyDown += onKeyDown
  9. Просто так не заработает. Но подробностей никаких не помню.
  10. Надо хукать функцию, которая вызывается, когда игрок входит в бой. Например startGUI вот так: from Avatar import PlayerAvatar old_startGUI = PlayerAvatar._PlayerAvatar__startGUI def new_startGUI(*args): old_startGUI(*args) <свой код размещаешь тут .... ....> PlayerAvatar._PlayerAvatar__startGUI = new_startGUI
  11. Да там не получится их избегать. Потому временные изменения в код игры вносятся по тем же самым принципам, что мододелы моды пишут, но с одним нюансом - мододелы хукают код, а разрабы впиливают/выпиливают. Ну и для всяких эвентов и другой временной чепухи часто привлекают сторонних кодеров - им выдают клиент какой-то версии, они его модифицируют и готова подверсия игры с ивентом. Её релизят, а когда ивент закончился она идёт в мусорку. @Kurzdor но ты прав в том, что для мододелов это доп. геморрой.
  12. Это всякие дурацкие ивенты и режимы. Их внедряют временно, потом вычищают.
  13. Для своей машины - он бесполезен.
  14. def calcShotParams(entity): angles = entity.gunAnglesPacked #Закодированные данные об текущем значении угла поворота башни и угла возвыщения орудия, присланные на клиент игры сервером turretYaw, gunPitch = decodeGunAngles(angles if type(angles) == int else angles[0], entity.typeDescriptor.gun.pitchLimits['absolute']) #Декодирование этих углов с учетом ограничений по наводки орудия из ТТХ танка turretOffs = entity.typeDescriptor.hull.turretPositions[0] + entity.typeDescriptor.chassis.hullPosition #Опорная точка башни в локальных координатах корпуса танка, т.е. относительно опорной точки корупуса, которая является опорной точкой всей модели в целом turretWorldMatrix = Matrix() turretWorldMatrix.setRotateY(turretYaw) turretWorldMatrix.translation = turretOffs #Матрица ориентации башни в локальном пространстве turretWorldMatrix.postMultiply(Matrix(entity.matrix)) #Переход из локального пространства в глобальное gunWorldMatrix = Matrix() gunWorldMatrix.setRotateX(gunPitch) gunWorldMatrix.postMultiply(turretWorldMatrix) #Матрица ориентации пушки в глобальном пространстве if BigWorld.new_Vehicles: vInfo = BigWorld.new_Vehicles.Info[entity.id] shellID = vInfo['vehicleType'].activeGunShotIndex return turretWorldMatrix.applyPoint(entity.typeDescriptor.turret.gunPosition), #Положение опорной точки орудия танка в глобальных координатах (из этой точки строится и вычисляется баллист. траектория полета снаряда) gunWorldMatrix.applyVector(Vector3(0, 0, vInfo['shells']['speed'][shellID]/0.8)), #Вектор начальной скорости снаряда в опорной точке орудия Vector3(0.0, -vInfo['shells']['gravity'][shellID]/0.64, 0.0) #Гравитация в векторной форме
  15. Да, локальные. Точка отсчета - опорная точка всей модели танка - это vType.chassis.hullPosition Переход из локальных в глобальные координаты и наоборот я в своих модах осуществляю так: def __worldToVehMatrix(self, point, matrix=None): #Из глобального в локальное пространство worldMatrix = Matrix(self.__entity.matrix if matrix is None else matrix) worldMatrix.invert() return worldMatrix.applyPoint(point) def __vehToWorldMatrix(self, point, matrix=None): #Из локального в глобальное пространство return Matrix(self.__entity.matrix if matrix is None else matrix).applyPoint(point) Всё крутиться вокруг матрицы модели танка, например BigWorld.entity(BigWorld.player().playerVehicleID).matrix Может вот этот пример тебе поможет: def calcShotParams(entity): #Расчёт точки выстрела, величины и направления вектора скорости снаряда видимого танка angles = entity.gunAnglesPacked turretYaw, gunPitch = decodeGunAngles(angles if type(angles) == int else angles[0], entity.typeDescriptor.gun.pitchLimits['absolute']) turretOffs = entity.typeDescriptor.hull.turretPositions[0] + entity.typeDescriptor.chassis.hullPosition turretWorldMatrix = Matrix() turretWorldMatrix.setRotateY(turretYaw) turretWorldMatrix.translation = turretOffs turretWorldMatrix.postMultiply(Matrix(entity.matrix)) gunWorldMatrix = Matrix() gunWorldMatrix.setRotateX(gunPitch) gunWorldMatrix.postMultiply(turretWorldMatrix) if BigWorld.new_Vehicles: vInfo = BigWorld.new_Vehicles.Info[entity.id] shellID = vInfo['vehicleType'].activeGunShotIndex return turretWorldMatrix.applyPoint(entity.typeDescriptor.turret.gunPosition), gunWorldMatrix.applyVector(Vector3(0, 0, vInfo['shells']['speed'][shellID]/0.8)), Vector3(0.0, -vInfo['shells']['gravity'][shellID]/0.64, 0.0) В примере на выходе точка выстрела, вектор направления умноженный на скорость и вектор гравитации.
  16. Лучший будет тот, который купишь вторым, поюзав первый.
  17. Может есть, а может и нет. Серверу виднее. К прицелу отношения не имеет. Это же опорная точка орудия. Это к модели танка имеет прямое отношение и к баллистике снаряда.
  18. Вот так нужно, если модель видна: startPoint = BigWorld.entity(BigWorld.player().playerVehicleID).appearance.compoundModel.node(GUN).position и вот так, если модель игрока не видна: startPoint = BigWorld.player().getOwnVehiclePosition() startPoint += BigWorld.player().vehicleTypeDescriptor.hull.turretPositions[0] + BigWorld.player().vehicleTypeDescriptor.turret.gunPosition
  19. shotPos - координаты точки крепления пушки (опорной точки орудия) в глобальном пространстве на сервере игры (именно эта точка считается началом баллистической траектории снаряда) shotVec - вектор начальной скорости на сервере игры в точке shotPos (это типа вот так shotDir*ShotSpeed) Вот тут можно немного почитать о коде прицела в игре - тыц.
×
×
  • Create New...