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

    Статус
    Оффлайн
    Регистрация
    15.01.2016
    Адрес
    Приморье, Спасск-Дальний
    Сообщений
    165
    Репутация:
    7 ±

    Форич или цикл с GetPlayerPoolSize()?

    Какому варианту отдаете свое предпочтение? А главное, почему?




    PHP код:
            #if defined foreach 
                
    foreach(new Player
            
    #else 
                
    for(new GetPlayerPoolSize(); != -1i--) 
            
    #endif 
    PHP код:
        foreach(new iPlayer)
        {

        } 
    PHP код:
        for(new GetPlayerPoolSize(); != -1i--)
        {

        } 
    Ой, ошибся с 3 вариантом не много. :)))
    Последний раз редактировалось BadPawn; 15.03.2016 в 12:25.

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    PHP код:
    for(new GetPlayerPoolSize(); GetPlayerPoolSize() != -1i--) 


    Читай
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    BadPawn (15.03.2016)
  4. #3
    Аватар для StevenH
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.10.2015
    Сообщений
    516
    Репутация:
    21 ±
    Как по мне foreach. Почему? Потому что он берет только те айди игроков, которые на сервере. Что же в GetPlayerPoolSize? Он ищет самый большой айди (допустим 95) и начинает вниз перебирать игроков (95 и до 0).

    Лично мое мнение!

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

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Если пишешь библиотеку, то первый вариант.

    Но лучше сделать так (ибо ещё есть люди, у которых 0.3e версия):
    PHP код:
    #if defined foreach  
            
    foreach(new Player)
    #elseif defined GetPlayerPoolSize
        
    for(new GetPlayerPoolSize(); --!= -1;)
    #else
        
    for(new = -1; ++!= MAX_PLAYERS;)
    #endif 

  6. Пользователь сказал cпасибо:
    BadPawn (15.03.2016)
  7. #5
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    В фориче вполне может быть выход за пределы массива при invalid_player_id, т.к. он рассчитан на 0..999, а 65535 уже за рамками.
    (c) Великий OkStyle

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    В фориче вполне может быть выход за пределы массива при invalid_player_id, т.к. он рассчитан на 0..999, а 65535 уже за рамками.
    (c) Великий OkStyle
    А он не сказал при каких обстоятельствах в foreach может попасть INVALID_PLAYER_ID?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. #7
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А он не сказал при каких обстоятельствах в foreach может попасть INVALID_PLAYER_ID?
    Увы, чтобы получить ответ от него на какой-либо вопрос нужно прождать 3-4 дня. Могу спросить, если вы не спешите.

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

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    А он больше ничего не рассказывал?. Яб тут назвал кто он, но это будет слишком не прилично (опять пред от Стаса.)
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А он не сказал при каких обстоятельствах в foreach может попасть INVALID_PLAYER_ID?
    Цитата Сообщение от Kazoox Посмотреть сообщение
    В фориче вполне может быть выход за пределы массива при invalid_player_id, т.к. он рассчитан на 0..999, а 65535 уже за рамками.
    (c) Великий OkStyle
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  11. #9
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    Яб тут назвал кто он, но это будет слишком не прилично (опять пред от Стаса.)
    Я его не защищаю, скорее наоборот.
    Ну... это было 4 года назад, по молодости быть может сглупил)

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    Увы, чтобы получить ответ от него на какой-либо вопрос нужно прождать 3-4 дня. Могу спросить, если вы не спешите.
    Достаточно знать принципы работы foreach, дабы понять, что он несёт полную чушь.
    Новый ID игрока записывается в итератор "Player" только при подключении игрока к серверу и удаляется оттуда так же только при отключении. Весь цикл построен на принципе смещения всех ID к нулевой ячейке, то бишь:
    На сервере играет 5 человек, занимая ID следующим образом:
    PHP код:
    ID 0 свободно
    ID 1 
    свободно
    ID 2 
    занят
    ID 3 
    свободно
    ID 4 
    занят
    ID 5 
    занят
    ID 6 
    свободно
    ID 7 
    занят
    ID 8 
    свободно
    ID 9 
    свободно
    ID 10 
    занят 
    В foreach создаётся массив на MAX_PLAYERS ячеек, в который и записываются ID, которые уже заняты. Но записывается не так, что нулевая ячейка свободна, первая занята, вторая свободна, третья и четвёртая заняты и т.п., а записываются именно по порядку:
    PHP код:
    Ячейка 0 ID 2
    Ячейка 1 
    ID 4
    Ячейка 2 
    ID 5
    Ячейка 3 
    ID 7
    Ячейка 4 
    ID 10 
    И когда один из игроков выходит (например, ID 5), цикл прогоняет все ячейки массива с 0 по 4 и перезаписывает данные так, чтоб получилось следующее:
    PHP код:
    Ячейка 0 ID 2
    Ячейка 1 
    ID 4
    Ячейка 2 
    ID 7
    Ячейка 3 
    ID 10 
    Так же и в случае, когда на сервер подключается новый игрок: узнаём его ID и записываем его в ту ячейку, где он должен находится. Например, было так:
    PHP код:
    Ячейка 0 ID 0
    Ячейка 1 
    ID 1
    Ячейка 2 
    ID 2
    Ячейка 3 
    ID 3
    Ячейка 4 
    ID 6 
    И подключился новый игрок (соответственно, он будет с ID 4). Инклюд запустит цикл на 5 итераций, чтоб проверить каждую ячейку массива, и дойдя до 3-ей ячейки, "увидит", что это максимально близкий ID к ID подключившегося игрока, поэтому запишет новый ID в последующую ячейку, сместив все значения (в данном случае это ID 6 в ячейке 4) на одну ячейку вперёд. Получится следующее:
    PHP код:
    Ячейка 0 ID 0
    Ячейка 1 
    ID 1
    Ячейка 2 
    ID 2
    Ячейка 3 
    ID 3
    Ячейка 4 
    ID 4
    Ячейка 5 
    ID 6 
    И уже когда ты объявляешь цикл, ты, по сути, пробегаешь по этому массиву, смотря записанные в него значения. И тут чисто физически не может получится выход за пределы массива. Как бы ты не старался.

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

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

    Steve Pavlina

  13. 2 пользователя(ей) сказали cпасибо:
    BadPawn (15.03.2016) Kazoox (14.03.2016)
 

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

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

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

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

Ваши права

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