Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 13
  1. #1
    Аватар для addvans
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.10.2019
    Сообщений
    7
    Репутация:
    0 ±

    Стример не держит >50 000 объектов

    В моде используется очень много динамик-объектов - счётчик Streamer_GetUpperBond доходит до 50000. Проблема в том, что достигая этих 50к, объекты перестают вести себя нормально - если спавнить/удалять ещё, то код просто останавливается и не идёт до конца функции, пока количество объектов не станет <50к. Предела в стримере не установлено (Streamer_SetMaxItems=-1), облазил все видимые настройки/форумы, подобных проблем не нашёл, не могу найти решение, запрашиваю помощи.



    Не исключаю, что сам где-то недоглядел, но где - уже голову сломал. Тестил на разном железе - везде упирается в 50 000.

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Спокойно и один миллион создаётся
    1. main()
    2. {
    3. for(new i; i < 1_000_000; i++)
    4. {
    5. CreateDynamicObject(2587, float(random(2000)), float(random(2000)), float(random(2000)), 0.0, 0.0, 0.0);
    6. }
    7.  
    8. printf("%d", CreateDynamicObject(2587, float(random(2000)), float(random(2000)), float(random(2000)), 0.0, 0.0, 0.0));
    9. printf("%d", Streamer_GetUpperBound(STREAMER_TYPE_OBJECT));
    10. }

    Как я писал на другом форуме, ограничение есть только одно - оперативная память, выделяемая для работы ВМ. При заполнении оперативки сервер крашнет. И crashdetect, скорее всего, ругнётся на CreateDynamicObject, как на последнюю функцию, которая была вызвана до краша.

    crashdetect какие-либо ошибки выдаёт?
    Последний раз редактировалось DeimoS; 23.10.2019 в 15:46.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для addvans
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.10.2019
    Сообщений
    7
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    crashdetect какие-либо ошибки выдаёт?
    Проблема в том, что сервер не крашится, но код перестаёт выполняться. Для примера:

    у меня в цикле создаётся ряд объектов (карта, заполняется по линиям). После каждой линии выдаёт "Линия n/50 создана". Неважно, сколько объектов заполняется за одну линию (пробовал разные значения), всегда замирает на той линии, где отметка достаёт до 50 000 объектов – будь это 16-ая, 24-ая, 48-ая, 1-ая, неважно.

    При этом если суммарно на сервере не доходит до 50к, то работает всё прекрасно, даже если за один цикл я спавню 49999 объектов.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    ограничение есть только одно - оперативная память
    Об этом можно поподробнее? На пк с 3, 4 и 8 ГБ результат всегда одинаковый

  4. #4
    Аватар для addvans
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.10.2019
    Сообщений
    7
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Спокойно и один миллион создаётся
    1. main()
    2. {
    3. for(new i; i < 1_000_000; i++)
    4. {
    5. CreateDynamicObject(2587, float(random(2000)), float(random(2000)), float(random(2000)), 0.0, 0.0, 0.0);
    6. }
    7.  
    8. printf("%d", CreateDynamicObject(2587, float(random(2000)), float(random(2000)), float(random(2000)), 0.0, 0.0, 0.0));
    9. printf("%d", Streamer_GetUpperBound(STREAMER_TYPE_OBJECT));
    10. }
    У меня и в этом коде застревает на 50к

  5. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    crashtedect не только при краше информацию выдаёт, но и при других ошибках.
    Поставь его, доведи количество объектов до 50к+ и после того, как код прервётся, скинь логи.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #6
    Аватар для addvans
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.10.2019
    Сообщений
    7
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    crashtedect не только при краше информацию выдаёт, но и при других ошибках.
    Поставь его, доведи количество объектов до 50к+ и после того, как код прервётся, скинь логи.
    Наткнулся: когда доходит до 50000, выдаёт "Array index out of bounds", и "Attempted to read/write element at index 50000 in array size of 50000".

    Двоякое ощущение своей глупости и непонимания одновременно – я задавал лимит в -1 предварительно. Сейчас пробую через функции управления данными в стримере, отпишу позже о результатах.
    Последний раз редактировалось addvans; 24.10.2019 в 14:12.

  7. #7
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от addvans Посмотреть сообщение
    Наткнулся: когда доходит до 50000, выдаёт "Array index out of bounds", и "Attempted to read/write element at index 50000 in array size of 50000".

    Двоякое ощущение своей глупости и непонимания одновременно – я задавал лимит в -1 предварительно. Сейчас пробую через функции управления данными в стримере, отпишу позже о результатах.
    Да господи, функция Streamer_SetMaxItems задаёт ИСКУССТВЕННЫЙ лимит на количество сохраняемых типов данных (объектов/3d текстов и т.п.). Как я выше писал - реальные ограничения есть лишь по количеству оперативной памяти и не более. И в случае заполнения этого лимита любыми способами сервер просто крашнет.


    Повторяю ещё раз - скинь полный лог при возникновении ошибки. Не тот кусок, который тебе покажется важным, а полный лог. От начала и до конца.
    Либо разбирайся в проблеме сам, если не готов случать что от тебя просят.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. #8
    Аватар для addvans
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.10.2019
    Сообщений
    7
    Репутация:
    0 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Да господи, функция Streamer_SetMaxItems задаёт ИСКУССТВЕННЫЙ лимит на количество сохраняемых типов данных (объектов/3d текстов и т.п.). Как я выше писал - реальные ограничения есть лишь по количеству оперативной памяти и не более. И в случае заполнения этого лимита любыми способами сервер просто крашнет.


    Повторяю ещё раз - скинь полный лог при возникновении ошибки. Не тот кусок, который тебе покажется важным, а полный лог. От начала и до конца.
    Либо разбирайся в проблеме сам, если не готов случать что от тебя просят.
    Вот конец лога (в моде - только цикл, скинутый тобой, где я миллион поменял на 51 000, и добавил вывод i для Object и вывод Streamer_GetUpperBound для Upperbound соответственно. Выводится каждый объект)

    Код HTML:
    [17:09:41] Upperbound 49983
    [17:09:41] Object 49984
    [17:09:41] Upperbound 49985
    [17:09:41] Object 49986
    [17:09:41] Upperbound 49987
    [17:09:41] Object 49988
    [17:09:41] Upperbound 49989
    [17:09:41] Object 49990
    [17:09:41] Upperbound 49991
    [17:09:41] Object 49992
    [17:09:41] Upperbound 49993
    [17:09:41] Object 49994
    [17:09:41] Upperbound 49995
    [17:09:41] Object 49996
    [17:09:41] Upperbound 49997
    [17:09:41] Object 49998
    [17:09:41] Upperbound 49999
    [17:09:41] [debug] Run time error 4: "Array index out of bounds"
    [17:09:41] [debug]  Attempted to read/write array element at index 50000 in array of size 50000
    [17:09:41] [debug] AMX backtrace:
    [17:09:41] [debug] #0 00030184 in ?? (2587, 1104150528, 1147207680, 1146306560, 0, 0, 0, -1, -1, -1, ... <4 arguments>) from Untitled.amx
    [17:09:41] [debug] #1 0003fb50 in public cmd_test (0, 2043024) from Untitled.amx
    [17:09:41] [debug] #2 native CallLocalFunction () from samp-server.exe
    [17:09:41] [debug] #3 00030478 in public ac_OnPlayerCommandText (0, 2043000) from Untitled.amx
    [17:09:41] [debug] #4 0001ba10 in public OnPlayerCommandText (0, 2043000) from Untitled.amx

  9. #9
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    В папке с Pawno создай файл pawn.cfg и пропиши в нём "-d3". После перекпомпилируй мод, ещё раз запусти и доведи до этой же ошибки. После этого опять скинь логи.
    А заодно и код команды "test"
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. #10
    Аватар для addvans
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.10.2019
    Сообщений
    7
    Репутация:
    0 ±
    Код команды test:

    Код HTML:
    CMD:test(playerid,params[])
    {
        for(new i; i < 51000; i++)
        {
        CreateDynamicObject(2587, float(random(2000)), float(random(2000)), float(random(2000)), 0.0, 0.0, 0.0);
        printf("Object %d", CreateDynamicObject(2587, float(random(2000)), float(random(2000)), float(random(2000)), 0.0, 0.0, 0.0));
        printf("Upperbound %d", Streamer_GetUpperBound(STREAMER_TYPE_OBJECT));
        }
    
        printf("FINAL OBJECT %d", CreateDynamicObject(2587, float(random(2000)), float(random(2000)), float(random(2000)), 0.0, 0.0, 0.0));
        printf("FINAL BOUND%d", Streamer_GetUpperBound(STREAMER_TYPE_OBJECT));
    return 1;
    }
    Лог:

    Код HTML:
    [17:44:11] Upperbound 49991
    [17:44:11] Object 49992
    [17:44:11] Upperbound 49993
    [17:44:11] Object 49994
    [17:44:11] Upperbound 49995
    [17:44:11] Object 49996
    [17:44:11] Upperbound 49997
    [17:44:11] Object 49998
    [17:44:11] Upperbound 49999
    [17:44:11] [debug] Run time error 4: "Array index out of bounds"
    [17:44:11] [debug]  Attempted to read/write array element at index 50000 in array of size 50000
    [17:44:11] [debug] AMX backtrace:
    [17:44:11] [debug] #0 00040ee0 in CA_CreateDynamicObject (modelid=2587, Float:x=1574.00000, Float:y=1759.00000, Float:z=246.00000, Float:rx=0.00000, Float:ry=0.00000, Float:rz=0.00000, vw=-1, interior=-1, playerid=-1, Float:streamdistance=300.00000, Float:drawdistance=0.00000, areaid=-1, priority=0) at E:\Online\pawno\include\colandreas.inc:81
    [17:44:11] [debug] #1 00053cac in public cmd_test (playerid=0, params[]=@001f2c90 "") at E:\Online\gamemodes\Untitled.pwn:105
    [17:44:11] [debug] #2 native CallLocalFunction () from samp-server.exe
    [17:44:11] [debug] #3 000412dc in public ac_OnPlayerCommandText (playerid=0, cmdtext[]=@001f2c78 "/test") at E:\Online\pawno\include\izcmd.inc:120
    [17:44:11] [debug] #4 000258b4 in public OnPlayerCommandText (playerid=0, cmdtext[]=@001f2c78 "/test") at E:\Online\pawno\include\nex-ac.inc:5127
    Ещё добавлю: всегда, когда возникает ошибка и код прекращается, в чат выводит SERVER: Unknown Command.

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •