Jump to content
Korean Random

spoter

User
  • Posts

    849
  • Joined

  • Last visited

  • Days Won

    96

Posts posted by spoter

  1. Я с вас умиляюсь. Мод блокирует тупо вызов одной библиотеки urllib.

    В питоне ещё тонны сетевых средств, и ничто не мешает свою библиотеку в мод засунуть и вызывать её столько, сколько хочешь.

    Этот мод глупая, неудачная попытка навести панику и поднять волну вайна между неопытными и паникующими юзерами и мододелами, которые в принципе, работают по общественному договору, по правилам ВГ, которые документированы и вменяемыми мододелами приняты и выполняются.

    Ссылку на правила я постил в этой теме ранее.

     

    Хватит уже.

     

    Если вас так напрягает сбор аналитики, не используйте моды. DIXI

    • Upvote 9
    • Downvote 2
  2. Для нечитателей: https://ru.wargaming.net/developers/documentation/rules/rules/

    Это правила для разработчиков модов танков.

    I Функциональность продуктов и сервисов участников WG DPP

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

    4. Если для работы продукта или сервиса участника WG DPP требуется предоставление приватной пользовательской информации (имя пользователя, адрес электронной почты, пароль и т.д.), то не допускается использование данной информации в коммерческих целях, сбор, хранение и передача её третьим лицам. Данная информация может быть использована только конечными пользователями в личных целях.

    5. Допускается авторизация пользователя только с использованием Wargaming.net ID.

     

    Правила создания производных работ

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

     

     

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

     

    В моих модах есть запрос к гугл аналитике, отправляется WG_ID, название мода, который отправил статистику, его версия, текущий язык и кластер, где играет игрок (NA, RU, EU и т.д.)

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

     

    Так что не позорься, удали мод и уползай пастись на свои поля, овёс подвезли.

    • Upvote 13
    • Downvote 10
  3. >есть вопрос по вн8 и РЭ

    Как Андрюха считает EFF - хз.

     

     

    В 9.9 было так:

    def calcRatings(self, personal, vehicle, battle):
                    result = {}
                    winrate = 100.0 if battle['result'] == 1 else 0.0
                    vehicleID = int(vehicle['baseID'])
                    vehicleLevel = float(vehicle['level'])
                    if vehicleID not in self.expBase:
                        result['expWinRate'] = 53.784756447
                        result['expFrag'] = 1.15578796562
                        result['expDamage'] = 890.273724928
                        result['expSpot'] = 1.20659025788
                        result['expDef'] = 1.17670487106
                        expval = result
                    else:
                        expval = self.expBase[vehicleID]
                    rWIN = winrate / expval['expWinRate']
                    rFrag = personal['kills'] / expval['expFrag']
                    rDamage = personal['damageDealt'] / expval['expDamage']
                    rSpot = personal['spotted'] / expval['expSpot']
                    rDef = personal['droppedCapturePoints'] / expval['expDef']
                    rWINc = max(0, (rWIN - 0.71) / (1 - 0.71))
                    rDAMAGEc = max(0, (rDamage - 0.22) / (1 - 0.22))
                    rFRAGc = max(0, min(rDAMAGEc + 0.2, (rFrag - 0.12) / (1 - 0.12)))
                    rSPOTc = max(0, min(rDAMAGEc + 0.1, (rSpot - 0.38) / (1 - 0.38)))
                    rDEFc = max(0, min(rDAMAGEc + 0.1, (rDef - 0.1) / (1 - 0.1)))
                    wn8 = int(980 * rDAMAGEc + 210 * rDAMAGEc * rFRAGc + 155 * rFRAGc * rSPOTc + 75 * rDEFc * rFRAGc + 145 * min(1.8, rWINc))
                    wn6 = int((1240 - 1040 / math.pow(min(vehicleLevel, 6), 0.164)) * personal['kills'] + personal['damageDealt'] * 530 / (184 * math.exp(0.24 * vehicleLevel) + 130) + personal['spotted'] * 125 + min(personal['droppedCapturePoints'], 2.2) * 100 + (185 / (0.17 + math.exp((winrate - 35) * -0.134)) - 500) * 0.45 + (6 - min(vehicleLevel, 6)) * -60)
                    wn7 = int((1240 - 1040 / math.pow(min(vehicleLevel, 6), 0.164)) * personal['kills'] + personal['damageDealt'] * 530 / (184 * math.exp(0.24 * vehicleLevel) + 130) + personal['spotted'] * 125 * min(vehicleLevel, 3) / 3 + min(personal['droppedCapturePoints'], 2.2) * 100 + (185 / (0.17 + math.exp((winrate - 35) * -0.134)) - 500) * 0.45 - (5 - min(vehicleLevel, 5)) * 125 / (1 + math.exp((vehicleLevel - math.pow(1.0 / 220, 3 / vehicleLevel)) * 1.5)))
                    eff = int(float(personal['damageDealt']) * 10 / (float(vehicleLevel) + 2) * (0.23 + 2 * float(vehicleLevel) / 100) + float(personal['kills']) * 250 + float(personal['spotted']) * 150 + math.log(float(personal['capturePoints']) + 1, 1.732) * 150 + personal['droppedCapturePoints'] * 150)
                    xeff = 0 if eff < 350 else int(max(min(eff * (eff * (eff * (eff * (eff * (3.388e-17 * eff - 2.469e-13) + 6.9335e-10) - 9.5342e-07) + 0.0006656) - 0.1485) - 0.85, 100), 0))
                    xwn6 = 100 if wn6 > 2300 else int(max(min(wn6 * (wn6 * (wn6 * (wn6 * (wn6 * (4.66e-18 * wn6 - 3.2413e-14) + 7.524e-11) - 6.516e-08) + 1.307e-05) + 0.05153) - 3.9, 100), 0))
                    xwn7 = 100 if wn7 > 2315 else int(max(min(wn7 * (wn7 * (wn7 * (wn7 * (wn7 * (4.359e-18 * wn7 - 3.262e-14) + 8.6287e-11) - 1.0299e-07) + 6.373e-05) + 0.02439) - 0.58, 100), 0))
                    xwn8 = 100 if wn8 > 3400 else int(max(min(wn8 * (wn8 * (wn8 * (wn8 * (wn8 * (9.553e-20 * wn8 - 1.644e-16) - 4.26e-12) + 1.97e-08) - 3.192e-05) + 0.056265) - 0, 157, 100), 0))
                    if xeff > 100:
                        xeff = 100
                    result['wn6'] = wn6
                    result['xwn6'] = xwn6
                    result['wn7'] = wn7
                    result['xwn7'] = xwn7
                    result['wn8'] = wn8
                    result['xwn8'] = xwn8
                    result['eff'] = eff
                    result['xeff'] = xeff
                    return result
    

    Мало вероятно что что-то менял

  4. Пока только такое решение нашёл:

    from gui.battle_control import g_sessionProvider
    from gui.doc_loaders import messages_panel_reader
    
    def newReadMessages(ctx, root):
        data = oldReadMessages(ctx, root)
        data['CUSTOM_MESSAGE'] = ('%(message)s', ('purple', 'purple'))
        return data
    
    def newReadSettings(ctx, root):
        data = oldReadSettings(ctx, root)
        data['useHtml'] = True
        return data
    
    oldReadMessages = messages_panel_reader._readMessages
    oldReadSettings = messages_panel_reader._readSettings
    
    messages_panel_reader._readMessages = newReadMessages
    messages_panel_reader._readSettings = newReadSettings
    
    def showMessage(message, color='#FFD700', type=0):
        ctrl = p__g_sessionProvider.shared.messages
        if ctrl is not None:
            if type ==1:
                return ctrl.onShowVehicleMessageByKey('CUSTOM_MESSAGE', {'message': '<font color="%s">%s</font>' % (color, message)})
            if type == 2:
                return ctrl.onShowVehicleErrorByKey('CUSTOM_MESSAGE', {'message': '<font color="%s">%s</font>' % (color, message)})
            return ctrl.onShowPlayerMessageByKey('CUSTOM_MESSAGE', {'message': '<font color="%s">%s</font>' % (color, message)})
    
    showMessage('Тестовое сообщение над мини картой')
    showMessage('Тестовое сообщение над панелью снарядов', type=1)
    showMessage('Тестовое сообщение в центре над прицелом, зелёного цвета', color='#80D639', type=2)
    

    Но так-то не искал особо.

     

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

    • Upvote 2
  5. некоторые разрабы пишут код обфусцированным изначально))

    True story.

    А некоторые ещё и занимаются взломом и восстановлением обфусцированого кода. Жизнь ключом бьёт. :)

  6. спс, ждем, и если можно настройки добавь mods_gui, modsSettingsApi

    Попробую модам новое ядро подключить, оно за сохранение настроек в 2 видах, json и gui отвечает и за языковую поддержку.

    Но исходники этого выкладывать не планирую.

    • Upvote 1
  7. Я так понимаю это реализовано как сравнение обзора засвеченых врагов, и расстояние между ними и игроком, возможно с учетом маскировки игрока? Или читеры могут со 100% вероятностью узнать в засвете они или нет, в любой момент, не зависимо есть ли лампочка, даже если никто из врагов не светится?

     

    Кстати в списке запрещенных модов вроде ничего такого нет.

     

    upd: Немного погуглил по теме: офигел до чего читеры дошли.

     

    Про то как там оно реализовано, подсказать не могу, увы, насколько я знаю, этот b4it доступен для "попробовать" каждый понедельник и пятницу.

    Нубо твинк и пробовать :)))

    • Upvote 1
    • Downvote 1
  8. Всё давно придумано за нас :)

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

     

    10.jpg

    • Upvote 1
    • Downvote 1
  9. def distance_to_vehicle(vehicle):
        if vehicle is not None and BigWorld.player().vehicle is not None:
            return (vehicle.position - BigWorld.player().getOwnVehiclePosition()).length
        return 10000
    

    и всё. на вход подаёте танк противника, к примеру.

    на выходе получаете дистанцию до него, либо 10000, дескать дистанция не определена.

    • Upvote 1
  10. Я удалил исходники мода пол года назад. Именно Ангела нет и не будет. Возможно вам понадобится аналогичный мод из пака просранков.

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

    • Upvote 1
    • Downvote 1
  11. Мне больше интересно для какой цели debug_utils.pyc вообще появился в клиенте? И сервера в нем прописаны, что то куда то слать :) особенно заинтересовал один из них, имеющий DNS имя :)

    борьба со всплывшим трояном.

×
×
  • Create New...