




![]() |
Автор → N0N1
в новости → Отзывы о сайте |
![]() |
Автор → BloodyRevenge
в новости → Отзывы о сайте |
![]() |
Автор → CoNQSTaDoR
в новости → AK-47 | WarZilla Red Rage для сервера css |
![]() |
Автор → CoNQSTaDoR
в новости → AK47 | Elemental для сервера css |
![]() |
Автор → Raydik
в новости → Шаблон Ingame (Fix от CSGOLIFE) для GameCMS |



Автор: VASILKOV от 22-02-2021, 10:05

Очень простенький расшр.
Чтобы понять зачем он нужен, достаточно запустить такой плг:
public void OnPluginStart()
{
int x = 2147483650 / 2; // Должно быть 1073741825
PrintToServer("%%u = %u\n%%d = %d\n%u > 1000 = %s", x, x, x, x > 1000 ? "yes" : "no");
}
И увидеть:
C-подобный:
%u = 3221225473
%d = -1073741823
3221225473 > 1000 = no
Все значения неверные + сравнение не работает.
Всё ломается, когда значение превышает int лимит (2147483647).
Несколько нативов/стоков для борьбы с этими глюками:
Если передаёте в натив отрицательное число, то учитывайте что оно конвертнётся в unsigned int. Т.е. если нужно отнять 5 от числа, то не пишите так: uint(10, '+', -5), т.к. -5 будет преобразовано в 4294967291, а пишите uint(10, '-', 5). Если число превысило int, то оно отрицательное, т.к. в SourcePawn 2147483650 выглядит как -2147483646.
Чтобы скачать файл пройдите пожалуйста регистрацию, или войдите под своим логином!