Привет. Есть такая тема - начиная с Финала, лимит адены на чаре вырос с 2.147ккк до 99.999ккк. Связано это было с переходом клиента на 64-битные переменные вместо 32-битных. Пришла в голову мысль потестить переполнение новых переменных - и они переполняются!
Это НЕ рабочий баг, который можно прямо сейчас юзать. Это просто мысли на тему, в надежде привлечь внимание коммьюнити. Ради этого я и зарегистрировался.
Суть. Максимальное значение, которое может хранить 64-битная переменная - 2^63 - 1, или 9223372036854775807 (9 квинтиллионов, 223 квадриллиона и т.д.). При покупке в любом шопе на сумму более этого значения оно уходит в минус и начинает отматываться обратно к нулю, после чего снова принимает положительное значение. Теперь пошагово:
1) Идём в гросери и покупаем (не нажимаем "купить"! просто перетаскиваем в окно покупки) пару триллионов спирит оров (в принципе неважно сколько, главное понять на какую сумму мы их закупили). Почему спириты? Потому что они невесомые. Триллионы штук можно купить путем копирования числа из текстового документа в окно покупки.
2) Внизу наводим мышку на предполагаемую сумму покупки и видим всплывающее окошко с буквенным обозначением суммы, типа "1 QT 563 QD 876 T... и т.д." (1 квинтиллион 563 квадриллиона 876 триллионов и т.д.). Наша цель - набрать спиритов на сумму в 9 с лишним квинтиллионов аден. Если в процессе нажать кнопку "купить" - клиент скажет, что не хватает аден.
3) Набрав сумму в 9.223 квинтиллиона аден, видим, что сумма стала отрицательной (типа -9,200,000...) и при последующем наборе спиритов устремилась к нулю. Продолжаем набирать спириты, пока сумма не дойдёт до нуля и вновь не примет положительное значение.
4) Теперь мы имеем относительно небольшую положительную сумму покупки (несколько квадриллионов аден, всего-то). Берём калькулятор и делим эту сумму на цену покупаемых спиритов, полученное число УБИРАЕМ из закупки обратно в магазин. Остаток суммы должен остаться совсем небольшой (несколько тысяч аден или около того). На чаре эта сумма должна иметься.
5) Теперь главный момент. У нас в закупке лежит очень много спирит оров на ничтожно малую сумму. Мы можем попробовать их купить, но тогда клиент дисконнектит с фразой в систем чате "you have exceeded the number of input items" (слишком много набрали, короче). Но! Проверку на сумму покупки мы уже прошли! Так как окно "not enough adena" не появляется и окно трейда закрывается, как будто он прошёл успешно.
6) То есть ситуация такая. При покупке проходит несколько проверок:
- СУММА. Эта проверка пройдена, т.к. окно о нехватке адены не появляется.
- Возможно, ВЕС. В более ранних хрониках можно было закупиться в магазине и получить перевес в 100 и более процентов. Да, ходить было нельзя, но это в подобных ситуациях обычно и не требовалось
Здесь хороши невесомые спирит оры.
- И самая главная проблема, КОЛИЧЕСТВО купленных предметов или же количество предметов в инвентаре. Хотя скорее первый вариант, потому что слово "input" явно говорит о количестве введённого количества товара в окне трейда, а не о инвентаре. Хотя когда речь идёт о триллионах и квадриллионах предметов, может быть что угодно...
7) Мои попытки. Я пробовал делать по-разному:
- То, что описано выше. Покупка астрономического количества предметов после двух циклов переполнения переменной итоговой суммы (сначала до +9.223 квинтиллиона, потом от -9.223 квинтиллиона до нуля). Трейд происходит, окно закрывается, но вылетает описанная выше ошибка о слишком большом введённом числе и клиент дисконнектит.
- Покупка в тот момент, когда сумма отрицательна. Ничего не происходит, окно трейда остаётся висеть.
- Попытка переполнить переменную, отвечающую за КОЛИЧЕСТВО покупаемых предметов. При таком подходе начинается дичь - да, количество спиритов в окне покупки относительно адекватно (1, 2, и т.д.), но в окне суммы происходит непонятно что - то числа с одним минусом, то с двумя, то положительные. То есть при переполнении переменной количества переменная суммы переполняется многократно и начинает вести себя неадекватно. Можно покопать и в этом направлении.
8) Теоретические выкладки. В идеале, нужно выяснить, каков этот самый "input" (количество покупаемых предметов) и подстраиваться уже под него. Также можно найти ДОРОГИЕ СТОПКОВЫЕ предметы, покупаемые в магазине, которых, теоретически, можно набрать столько, сколько нужно для переполнения переменной суммы, но недостаточно для появления ошибки "инпута" (хотя это вряд ли, всё равно речь будет идти о триллионах штук, да и таких предметов в магазинах я не видел).
Такие дела. Жду ваших мыслей по данному поводу. Спасибо за внимание, кто осилил