Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 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
    Адрес
    Восточный Мордор
    Сообщений
    4,310
    Репутация:
    1612 ±
    PHP код:
    for(new GetPlayerPoolSize(); GetPlayerPoolSize() != -1i--) 


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

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

    Steve Pavlina

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

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

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

  5. #4
    Аватар для VVWVV
    Проверенный

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

    Но лучше сделать так (ибо ещё есть люди, у которых 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
    Адрес
    Восточный Мордор
    Сообщений
    4,310
    Репутация:
    1612 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    В фориче вполне может быть выход за пределы массива при invalid_player_id, т.к. он рассчитан на 0..999, а 65535 уже за рамками.
    (c) Великий OkStyle
    А он не сказал при каких обстоятельствах в foreach может попасть INVALID_PLAYER_ID?
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 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,467
    Репутация:
    265 ±
    А он больше ничего не рассказывал?. Яб тут назвал кто он, но это будет слишком не прилично (опять пред от Стаса.)
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А он не сказал при каких обстоятельствах в foreach может попасть INVALID_PLAYER_ID?
    Цитата Сообщение от Kazoox Посмотреть сообщение
    В фориче вполне может быть выход за пределы массива при invalid_player_id, т.к. он рассчитан на 0..999, а 65535 уже за рамками.
    (c) Великий OkStyle

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

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

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,310
    Репутация:
    1612 ±
    Цитата Сообщение от 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 
    И уже когда ты объявляешь цикл, ты, по сути, пробегаешь по этому массиву, смотря записанные в него значения. И тут чисто физически не может получится выход за пределы массива. Как бы ты не старался.

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

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

    Steve Pavlina

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

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

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

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

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

Ваши права

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