Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 3 из 133 ПерваяПервая 1 2 3 4 5 13 53 103 ... ПоследняяПоследняя
Показано с 21 по 30 из 1325
  1. #21
    Аватар для Profyan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2013
    Адрес
    Омск
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    zZz..
    В общем как быть примерно в таких случаях:
      Открыть/закрыть
    PHP код:
    //Например одна проверка для людишек раз в 10 сек
    if(gettime() % 10 == 0)
    {
        foreach(
    Player,n)
        {
            
    Test1(n);
        }
    }
    //И другая пусть будет раз в 25 сек
    if(gettime() % 25 == 0)
    {
        foreach(
    Player,n)
        {
            
    Test2(n);
        }
    }
    //Или же можно в одном переборе сделать вот так?
    foreach(Player,n)
    {
        if(
    gettime() % 10 == 0)
        {
            
    Test1(n);
        }
        if(
    gettime() % 25 == 0)
        {
            
    Test2(n);
        }

    1-ый вариант. И,если у тебя много gettime() - создай для нее переменную,куда будешь записывать значение.



    Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человеку
    Мартин Фаулер


    Skype
    profan99
    VK
    click




  2. #22
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Profyan Посмотреть сообщение
    создай для нее переменную,куда будешь записывать значение.
    Зачем? Вроде и так всё неплохо работает, или я что то недопонимаю.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  3. #23
    Аватар для Alexey_Nikiforov
    Уровень знаний 1

    Статус
    Оффлайн
    Регистрация
    12.02.2016
    Сообщений
    61
    Репутация:
    1 ±
    Почему не может прочитать файл?
    Кодировка совпадает файл на месте.
    C:\pawno\include\hud.inc(52) : fatal error 100: невозможно прочесть файл: "YSI\y_hooks"

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

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

    1 вариант, муторный, если признаться, особенно, когда строка длиною равная кабелю от наушников(2 метра :) ):
    PHP код:
    static const f[] = "Твой ник: %s";
    new 
    f_size[sizeof(f)+(MAX_PLAYER_NAME-2)];
    format(f_sizesizeof(f_size), fpInfo[playerid][pName]);
    SendClientMessage(playerid, -1f_size); 
    2 вариант, я думаю, что тут тут намного проще + есть штука одна, которая считает автоматом символы в строке:
    PHP код:
    new str[12+MAX_PLAYER_NAME];//12 кол-во символов + максимальная длина никнэйма
    format(strsizeof str"Твой ник: %s"pInfo[playerid][pName]);
    SendClientMessage(playerid, -1str); 
    Скажите пожалуйста, какой из двух вариантов качественнее? Почему? И правильно ли сделал подсчет символов во втором варианте?

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

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


    Цитата Сообщение от Alexey_Nikiforov Посмотреть сообщение
    Почему не может прочитать файл?
    Кодировка совпадает файл на месте.
    C:\pawno\include\hud.inc(52) : fatal error 100: невозможно прочесть файл: "YSI\y_hooks"
    Таки скрин папки с инклюдами в студию


    Цитата Сообщение от BadPawn Посмотреть сообщение
    всем привет. вопрос о подсчете кол-ва символов.

    1 вариант, муторный, если признаться, особенно, когда строка длиною равная кабелю от наушников(2 метра :) ):
    PHP код:
    static const f[] = "Твой ник: %s";
    new 
    f_size[sizeof(f)+(MAX_PLAYER_NAME-2)];
    format(f_sizesizeof(f_size), fpInfo[playerid][pName]);
    SendClientMessage(playerid, -1f_size); 
    2 вариант, я думаю, что тут тут намного проще + есть штука одна, которая считает автоматом символы в строке:
    PHP код:
    new str[12+MAX_PLAYER_NAME];//12 кол-во символов + максимальная длина никнэйма
    format(strsizeof str"Твой ник: %s"pInfo[playerid][pName]);
    SendClientMessage(playerid, -1str); 
    Скажите пожалуйста, какой из двух вариантов качественнее? Почему?
    Качественнее? В данном случае такой критерий оценки, как я думаю, не совсем уместен.

    Первый случай направлен на то, что тебе не требуется самостоятельно подсчитывать длину строки: нужно лишь составить правильно формулу, убрав все заполнители и учтя длину каждого из членов заполнения.
    Во втором случае ты делаешь практически то же самое, только длину ты рассчитываешь сам, при этом не создавая никаких констант.

    Что первый, что второй вариант на сервере будут работать одинаково. Вся "работа" происходит на этапе компиляции.


    Что для тебя лучше - знаешь только ты. Если ты хорошо разобрался в первом варианте и тебе удобнее составлять громоздкие формулы ради того, чтоб более автоматизировать форматирование строки - используй его (хотя лично я считаю, что такой подход хорош довольно редко: в очень крупных строках, которые постоянно редактируются. А вот каждую строку так форматировать, как по мне - бред, ибо при наличии софта для подсчёта длины строки, и создания гибкой формулы при объявлении массива... (строку мысленно разделить на блоки, которые в будущем будут редактироваться, и выделить эти блоки в виде отдельной формулы в массиве (ну что-то типа "new string[(30+MAX_PLAYER_NAME-4-2)+(12+11-2)...];", где каждая пара скобок отделяет число символов в блоке для редактирования). Я что-то типа такого подхода использовал в своём уроке о создании регистрации, в функции с сохранением, хоть и немного криво) ...и создания гибкой формулы при объявлении массива, код будет выглядеть и опрятнее, и будет не менее удобным в редактировании, что в первом случае). Лично я, в основном, использую второй вариант, редко прибегая к первому. Кому-то удобно использовать только первый вариант.
    В данном случае работает правило p-i: "Как удобнее, так и делай", ибо производительности, как таковой, ты тут и не теряешь, и не получаешь, а этим ты лишь только делаешь работу над кодом более удобнее для себя. И если первый вариант создаёт для тебя трудности при составлении формул, такой метод может создать только проблемы и затормаживать тебя :)

    Цитата Сообщение от BadPawn Посмотреть сообщение
    И правильно ли сделал подсчет символов во втором варианте?
    Не совсем.
    1. Там должно быть не 12, а 10, ибо заполнители (%s, %d, %i, %f, %0.2f и т.п.) учитывать не нужно, ведь на их место вставляется строка (в данном случае на месте "%s" появится ник игрока)
    2. Забыл про нуль-символ для своей строки

    Вот как-то так я бы сделал:
    PHP код:
    new str[10+MAX_PLAYER_NAME+1];
    //10 - "Твой ник: "
    //MAX_PLAYER_NAME - Для ника игрока
    //1 - для нуль-символа
    format(strsizeof str"Твой ник: %s"pInfo[playerid][pName]);
    SendClientMessage(playerid, -1str); 
    Или же так, если у тебя нет никаких систем, в которых ты приписываешь к нику игрока какие-то теги или делаешь что-либо ещё с ником, позволяя превысить клиентское ограничение в 20 символов на длину.
    PHP код:
    new str[10+MAX_PLAYER_NAME-4+1];
    //10 - "Твой ник: "
    //MAX_PLAYER_NAME - Для ника игрока
    //-4 - Самостоятельно игрок не может сделать ник больше 20 символов, поэтому и те 4 символа, что даны для сервера, нам не пригодятся
    //1 - для нуль-символа
    format(strsizeof str"Твой ник: %s"pInfo[playerid][pName]);
    SendClientMessage(playerid, -1str); 

     И о MAX_PLAYER_NAME на будущее:
    Если ты создаёшь массив для извлечения ника и в этот массив может записаться ник после изменения его со стороны сервера (например, если у тебя есть АФК система, в которой к нику игрока приписывается тег "AFK"), при создании массива к макросу MAX_PLAYER_NAME нужно прибавить единицу, ибо если игроку сделать ник максимальной длины, получится, что последний символ в нике затеряется, так как, видимо, макрос создавался не с целью создания массивов, а для создания различных проверок на кол-во символов в нике и в нём не учтено, что каждая строка имеет нуль-символ (в клиенте ограничение в 20 символов, но со стороны сервера можно ник сделать длиной в 24 символа).
    В твоём случае этого не нужно, ибо ник тут будет вставлен в другую строку и нуль-символ у ника будет удалён

    Если же наоборот в этот массив будет записываться именно тот ник, что игрок ввёл самостоятельно в клиент, то от макроса можно отнять 3, оставив одну ячейку под нуль символ.
    Последний раз редактировалось DeimoS; 23.02.2016 в 11:14.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  6. 3 пользователя(ей) сказали cпасибо:
    $continue$ (23.02.2016) BadPawn (23.02.2016) iWors (28.03.2016)
  7. #26
    Аватар для Kazoox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Есть секундный таймер для каждого игрока, запускается при коннекте. Так вот, лучше этот таймер сделать циклическим (параметр true) или не циклическим и запускать его по новой каждый раз после выполнения кода таймера?

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

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Kazoox Посмотреть сообщение
    Есть секундный таймер для каждого игрока, запускается при коннекте. Так вот, лучше этот таймер сделать циклическим (параметр true) или не циклическим и запускать его по новой каждый раз после выполнения кода таймера?
    Пункт #2
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. 2 пользователя(ей) сказали cпасибо:
    iWors (28.03.2016) Kazoox (25.02.2016)
  10. #28
    Аватар для _lizard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    11.02.2016
    Адрес
    Геленджик
    Сообщений
    193
    Репутация:
    26 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Зачем? Вроде и так всё неплохо работает, или я что то недопонимаю.
    Установи profiler и посмотри какой из вариантов будет более быстрее

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от _lizard Посмотреть сообщение
    Установи profiler и посмотри какой из вариантов будет более быстрее
    Открой последнее сообщение в той теме
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

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

    Статус
    Оффлайн
    Регистрация
    25.04.2014
    Сообщений
    121
    Репутация:
    3 ±
    Прочитал что: "Воздержитесь от создания функций на PAWN, если есть нативные функции (или используйте в комбинации с нативными).". Хорошо, а если использовать нативные функции но только с помощью макроса, разницы ведь никакой, никакого негативного влияния? Пример:
    PHP код:
    #define f(%0,                            format(%0, sizeof(%0), 

 

 
Страница 3 из 133 ПерваяПервая 1 2 3 4 5 13 53 103 ... ПоследняяПоследняя

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

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

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

Ваши права

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