Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 3 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 21 по 30 из 31
  1. #21
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    ...
    Костыль

    Думаю, можно это сделать в виде нового инклюда-дополнения для foreach, чтобы не запоминать алгоритм.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Костыль
    Костыль, который позволяет сэкономить и память, и процессорное время в ситуациях, похожих на пример из статьи

    Цитата Сообщение от VVWVV Посмотреть сообщение
    Думаю, можно это сделать в виде нового инклюда-дополнения для foreach, чтобы не запоминать алгоритм.
    Я думал об этом написать, но, в итоге, забыл
    Как по мне, можно этот алгоритм и в основной инклуд записать, добавив дополнительный тэг, через который всё будет работать. А для тех, кто боится лишний код тащить за собой из библиотек, можно сообразить макрос, что позволит включать/отключать этот алгоритм.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. #23
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Я думал об этом написать, но, в итоге, забыл
    Как по мне, можно этот алгоритм и в основной инклуд записать, добавив дополнительный тэг, через который всё будет работать. А для тех, кто боится лишний код тащить за собой из библиотек, можно сообразить макрос, что позволит включать/отключать этот алгоритм.
    Наверное, стоит добавить это в форк с автономной версией. Я, наверное, подготовлю PR и отправлю его к ziggi. Хотя, если у тебя есть время, ты можешь сам это сделать.

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

    Статус
    Оффлайн
    Регистрация
    11.03.2017
    Адрес
    Новосибирск
    Сообщений
    49
    Репутация:
    4 ±
    PHP код:
    foreach(Playera)
        {
            if(
    player_info[a][ADMIN] > 0)
            {
                       
    Iter_Random(a
    C:\Users\User\Documents\GTA San Andreas User Files\SAMP\server\gamemodes\typicalrp.pwn(9698) : error 017: undefined symbol "a@YSII_Cg"
    C:\Users\User\Documents\GTA San Andreas User Files\SAMP\server\gamemodes\typicalrp.pwn(9698) : error 017: undefined symbol "a@YSII_Ag"

  5. #25
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от koberman Посмотреть сообщение
    PHP код:
    foreach(Playera)
        {
            if(
    player_info[a][ADMIN] > 0)
            {
                       
    Iter_Random(a
    C:\Users\User\Documents\GTA San Andreas User Files\SAMP\server\gamemodes\typicalrp.pwn(9698) : error 017: undefined symbol "a@YSII_Cg"
    C:\Users\User\Documents\GTA San Andreas User Files\SAMP\server\gamemodes\typicalrp.pwn(9698) : error 017: undefined symbol "a@YSII_Ag"
    Создайте итератор:
    PHP код:
    new Iterator:aa<MAX_PLAYERS>; 

  6. Пользователь сказал cпасибо:
    koberman (08.06.2017)
  7. #26
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Вообще мне кажется, что стоит сделать упор на том, как устроены функции библиотеки, дабы не обмануть себя.

    В пример такого обмана можно привести итератор для игроков в зоне стрима. Казалось бы, добавили функцию добавления игрока в итератор при входе в зону стрима, удаления при выходе и при тестах получили приличный прирост к скорости, но есть одно "но": что функция добавления итератора, что функция удаления - обе содержат в себе цикл и некоторые другие вычисления, которые будут вызываться 2 раза при входе/выходе каждого игрока из/в зону стрима.
    В итоге получается, что в момент вызова цикла у нас получился прирост к скорости, но взамен мы получили постоянную нагрузку, которая, при хорошем онлайне, может стать гораздо вреднее, нежели цикл с проверкой координат
    Последний раз редактировалось DeimoS; 22.11.2017 в 01:16.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  8. 2 пользователя(ей) сказали cпасибо:
    Alexey Melnik (21.11.2017) Daniel_Cortez (22.11.2017)
  9. #27
    Аватар для seriu
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.11.2013
    Сообщений
    69
    Репутация:
    6 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Вообще мне кажется, что стоит сделать упор на том, как устроены функции библиотеки, дабы не обмануть себя.

    В пример такого обмана можно привести итератор для игроков в зоне стрима. Казалось бы, добавили функцию добавления игрока в итератор при входе в зону стрима, удаления при выходе и при тестах получили приличный прирост к скорости, но есть одно "но": что функция добавления итератора, что функция удаления - обе содержат в себе цикл и некоторые другие вычисления, которые будут вызываться 2 раза при входе/выходе каждого игрока из/в зону стрима.
    В итоге получается, что в момент вызова цикла у нас получился прирост к скорости, но в замен мы получили постоянную нагрузку, которая, при хорошем онлайне, может стать гораздо вреднее, нежели цикл с проверкой координат
    эт еще ничего)
    есть такой вариант :D
    PHP код:
    #if FOREACH_I_PlayerVehiclesStream || FOREACH_I_VehiclePlayersStream

        /*
            Iter_OnVehicleStreamIn
        */

        
    public OnVehicleStreamIn(vehicleidforplayerid)
        {
            
    #if FOREACH_I_PlayerVehiclesStream
                
    Iter_Add(PlayerVehiclesStream[forplayerid], vehicleid);
            
    #endif

            #if FOREACH_I_VehiclePlayersStream
                
    Iter_Add(VehiclePlayersStream[vehicleid], forplayerid);
            
    #endif

            #if defined Iter_OnVehicleStreamIn
                
    return Iter_OnVehicleStreamIn(vehicleidforplayerid);
            
    #else
                
    return 1;
            
    #endif
        
    }
        
    #if defined _ALS_OnVehicleStreamIn
            #undef OnVehicleStreamIn
        #else
            #define _ALS_OnVehicleStreamIn
        #endif

        #define OnVehicleStreamIn Iter_OnVehicleStreamIn
        #if defined Iter_OnVehicleStreamIn
            
    forward Iter_OnVehicleStreamIn(vehicleidforplayerid);
        
    #endif

        /*
            Iter_OnVehicleStreamOut
        */

        
    public OnVehicleStreamOut(vehicleidforplayerid)
        {
            
    #if FOREACH_I_PlayerVehiclesStream
                
    Iter_Remove(PlayerVehiclesStream[forplayerid], vehicleid);
            
    #endif

            #if FOREACH_I_VehiclePlayersStream
                
    Iter_Remove(VehiclePlayersStream[vehicleid], forplayerid);
            
    #endif

            #if defined Iter_OnVehicleStreamOut
                
    return Iter_OnVehicleStreamOut(vehicleidforplayerid);
            
    #else
                
    return 1;
            
    #endif
        
    }
        
    #if defined _ALS_OnVehicleStreamOut
            #undef OnVehicleStreamOut
        #else
            #define _ALS_OnVehicleStreamOut
        #endif

        #define OnVehicleStreamOut Iter_OnVehicleStreamOut
        #if defined Iter_OnVehicleStreamOut
            
    forward Iter_OnVehicleStreamOut(vehicleidforplayerid);
        
    #endif

    #endif 

  10. #28
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от seriu Посмотреть сообщение
    эт еще ничего)
    есть такой вариант :D
    PHP код:
    #if FOREACH_I_PlayerVehiclesStream || FOREACH_I_VehiclePlayersStream

        /*
            Iter_OnVehicleStreamIn
        */

        
    public OnVehicleStreamIn(vehicleidforplayerid)
        {
            
    #if FOREACH_I_PlayerVehiclesStream
                
    Iter_Add(PlayerVehiclesStream[forplayerid], vehicleid);
            
    #endif

            #if FOREACH_I_VehiclePlayersStream
                
    Iter_Add(VehiclePlayersStream[vehicleid], forplayerid);
            
    #endif

            #if defined Iter_OnVehicleStreamIn
                
    return Iter_OnVehicleStreamIn(vehicleidforplayerid);
            
    #else
                
    return 1;
            
    #endif
        
    }
        
    #if defined _ALS_OnVehicleStreamIn
            #undef OnVehicleStreamIn
        #else
            #define _ALS_OnVehicleStreamIn
        #endif

        #define OnVehicleStreamIn Iter_OnVehicleStreamIn
        #if defined Iter_OnVehicleStreamIn
            
    forward Iter_OnVehicleStreamIn(vehicleidforplayerid);
        
    #endif

        /*
            Iter_OnVehicleStreamOut
        */

        
    public OnVehicleStreamOut(vehicleidforplayerid)
        {
            
    #if FOREACH_I_PlayerVehiclesStream
                
    Iter_Remove(PlayerVehiclesStream[forplayerid], vehicleid);
            
    #endif

            #if FOREACH_I_VehiclePlayersStream
                
    Iter_Remove(VehiclePlayersStream[vehicleid], forplayerid);
            
    #endif

            #if defined Iter_OnVehicleStreamOut
                
    return Iter_OnVehicleStreamOut(vehicleidforplayerid);
            
    #else
                
    return 1;
            
    #endif
        
    }
        
    #if defined _ALS_OnVehicleStreamOut
            #undef OnVehicleStreamOut
        #else
            #define _ALS_OnVehicleStreamOut
        #endif

        #define OnVehicleStreamOut Iter_OnVehicleStreamOut
        #if defined Iter_OnVehicleStreamOut
            
    forward Iter_OnVehicleStreamOut(vehicleidforplayerid);
        
    #endif

    #endif 
    Только они выключены по умолчанию.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от seriu Посмотреть сообщение
    эт еще ничего)
    есть такой вариант :D
      Открыть/закрыть
    PHP код:
    #if FOREACH_I_PlayerVehiclesStream || FOREACH_I_VehiclePlayersStream

        /*
            Iter_OnVehicleStreamIn
        */

        
    public OnVehicleStreamIn(vehicleidforplayerid)
        {
            
    #if FOREACH_I_PlayerVehiclesStream
                
    Iter_Add(PlayerVehiclesStream[forplayerid], vehicleid);
            
    #endif

            #if FOREACH_I_VehiclePlayersStream
                
    Iter_Add(VehiclePlayersStream[vehicleid], forplayerid);
            
    #endif

            #if defined Iter_OnVehicleStreamIn
                
    return Iter_OnVehicleStreamIn(vehicleidforplayerid);
            
    #else
                
    return 1;
            
    #endif
        
    }
        
    #if defined _ALS_OnVehicleStreamIn
            #undef OnVehicleStreamIn
        #else
            #define _ALS_OnVehicleStreamIn
        #endif

        #define OnVehicleStreamIn Iter_OnVehicleStreamIn
        #if defined Iter_OnVehicleStreamIn
            
    forward Iter_OnVehicleStreamIn(vehicleidforplayerid);
        
    #endif

        /*
            Iter_OnVehicleStreamOut
        */

        
    public OnVehicleStreamOut(vehicleidforplayerid)
        {
            
    #if FOREACH_I_PlayerVehiclesStream
                
    Iter_Remove(PlayerVehiclesStream[forplayerid], vehicleid);
            
    #endif

            #if FOREACH_I_VehiclePlayersStream
                
    Iter_Remove(VehiclePlayersStream[vehicleid], forplayerid);
            
    #endif

            #if defined Iter_OnVehicleStreamOut
                
    return Iter_OnVehicleStreamOut(vehicleidforplayerid);
            
    #else
                
    return 1;
            
    #endif
        
    }
        
    #if defined _ALS_OnVehicleStreamOut
            #undef OnVehicleStreamOut
        #else
            #define _ALS_OnVehicleStreamOut
        #endif

        #define OnVehicleStreamOut Iter_OnVehicleStreamOut
        #if defined Iter_OnVehicleStreamOut
            
    forward Iter_OnVehicleStreamOut(vehicleidforplayerid);
        
    #endif

    #endif 
    Я думаю, далеко не во всех случаях они будут бесполезны (Какой-нибудь античит, например, где нужно в радиусе проверку делать. Хотя тут нужно проводить замеры нагрузки, по хорошему, ибо может быть разная картина при маленьком и большом онлайне).
    Вообще речь ведь о том, что нужно использовать всё сознательно (чувствую себя Капитаном Очевидность, хотя почему-то не все этой истины понимают). Тогда и проблем не будет
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  12. #30
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    И не хватает примера с трехмерными массивами (взято отсюда, ибо я ленивый):
    PHP код:
    new
        
    Iterator:Iter3[5][8]<10>;
    for (new 
    0!= Iter_InternalSize(Iter3); ++i)
    {
        
    Iter_Init(Iter3[i]);
    }
    Iter_Add(Iter3[3][6], 7); 
    Лишней такая информация не будет
    При создании трёхмерного итератора, компилятор (zeex) жалуется:
    ошибка 001: ожидался токен ";", но найден "-identifier-"

    1. const
    2. MAX_FRACTION = 5,
    3. MAX_DIVISION = 10;
    4.  
    5. new
    6. Iterator:iDivisionPlayers[MAX_FRACTION][MAX_DIVISION]<MAX_PLAYERS>;


    Пробовал форк от Ziggi - аналогично

 

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

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

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

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

Ваши права

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