Любой дурак может написать код, понятный компьютеру. Хороший программист пишет код, понятный человекуМартин Фаулер
Skype profan99 VK click
[Anticheat]___Invisible Fly Hack
[Anticheat]____Weapon/Ammo Hack
[Function]______ResetPlayerWeaponSlot
[Function]_______FIX_SetPlayerAmmo
[ServerMod]______TDM | Zombie Apokalypse
Почему не может прочитать файл?
Кодировка совпадает файл на месте.
C:\pawno\include\hud.inc(52) : fatal error 100: невозможно прочесть файл: "YSI\y_hooks"
всем привет. вопрос о подсчете кол-ва символов.
1 вариант, муторный, если признаться, особенно, когда строка длиною равная кабелю от наушников(2 метра :) ):
2 вариант, я думаю, что тут тут намного проще + есть штука одна, которая считает автоматом символы в строке:PHP код:
static const f[] = "Твой ник: %s";
new f_size[sizeof(f)+(MAX_PLAYER_NAME-2)];
format(f_size, sizeof(f_size), f, pInfo[playerid][pName]);
SendClientMessage(playerid, -1, f_size);
Скажите пожалуйста, какой из двух вариантов качественнее? Почему? И правильно ли сделал подсчет символов во втором варианте?PHP код:
new str[12+MAX_PLAYER_NAME];//12 кол-во символов + максимальная длина никнэйма
format(str, sizeof str, "Твой ник: %s", pInfo[playerid][pName]);
SendClientMessage(playerid, -1, str);
Затем, что ты не обращаешься по 10 раз к серверной машине с целью узнать UNIX время, а делаешь это один раз? Ты и в магазин можешь ходить за 10-ю кг сахара, при этом делая 10 заходов и покупая по одному килограмму, но какой от этого профит, если ты сразу можешь купить 10кг и принести домой?
Таки скрин папки с инклюдами в студию
Качественнее? В данном случае такой критерий оценки, как я думаю, не совсем уместен.
Первый случай направлен на то, что тебе не требуется самостоятельно подсчитывать длину строки: нужно лишь составить правильно формулу, убрав все заполнители и учтя длину каждого из членов заполнения.
Во втором случае ты делаешь практически то же самое, только длину ты рассчитываешь сам, при этом не создавая никаких констант.
Что первый, что второй вариант на сервере будут работать одинаково. Вся "работа" происходит на этапе компиляции.
Что для тебя лучше - знаешь только ты. Если ты хорошо разобрался в первом варианте и тебе удобнее составлять громоздкие формулы ради того, чтоб более автоматизировать форматирование строки - используй его (хотя лично я считаю, что такой подход хорош довольно редко: в очень крупных строках, которые постоянно редактируются. А вот каждую строку так форматировать, как по мне - бред, ибо при наличии софта для подсчёта длины строки, и создания гибкой формулы при объявлении массива... (строку мысленно разделить на блоки, которые в будущем будут редактироваться, и выделить эти блоки в виде отдельной формулы в массиве (ну что-то типа "new string[(30+MAX_PLAYER_NAME-4-2)+(12+11-2)...];", где каждая пара скобок отделяет число символов в блоке для редактирования). Я что-то типа такого подхода использовал в своём уроке о создании регистрации, в функции с сохранением, хоть и немного криво) ...и создания гибкой формулы при объявлении массива, код будет выглядеть и опрятнее, и будет не менее удобным в редактировании, что в первом случае). Лично я, в основном, использую второй вариант, редко прибегая к первому. Кому-то удобно использовать только первый вариант.
В данном случае работает правило p-i: "Как удобнее, так и делай", ибо производительности, как таковой, ты тут и не теряешь, и не получаешь, а этим ты лишь только делаешь работу над кодом более удобнее для себя. И если первый вариант создаёт для тебя трудности при составлении формул, такой метод может создать только проблемы и затормаживать тебя :)
Не совсем.
- Там должно быть не 12, а 10, ибо заполнители (%s, %d, %i, %f, %0.2f и т.п.) учитывать не нужно, ведь на их место вставляется строка (в данном случае на месте "%s" появится ник игрока)
- Забыл про нуль-символ для своей строки
Вот как-то так я бы сделал:
Или же так, если у тебя нет никаких систем, в которых ты приписываешь к нику игрока какие-то теги или делаешь что-либо ещё с ником, позволяя превысить клиентское ограничение в 20 символов на длину.PHP код:
new str[10+MAX_PLAYER_NAME+1];
//10 - "Твой ник: "
//MAX_PLAYER_NAME - Для ника игрока
//1 - для нуль-символа
format(str, sizeof str, "Твой ник: %s", pInfo[playerid][pName]);
SendClientMessage(playerid, -1, str);
PHP код:
new str[10+MAX_PLAYER_NAME-4+1];
//10 - "Твой ник: "
//MAX_PLAYER_NAME - Для ника игрока
//-4 - Самостоятельно игрок не может сделать ник больше 20 символов, поэтому и те 4 символа, что даны для сервера, нам не пригодятся
//1 - для нуль-символа
format(str, sizeof str, "Твой ник: %s", pInfo[playerid][pName]);
SendClientMessage(playerid, -1, str);
Последний раз редактировалось DeimoS; 23.02.2016 в 11:14.
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
$continue$ (23.02.2016) BadPawn (23.02.2016) iWors (28.03.2016)
Есть секундный таймер для каждого игрока, запускается при коннекте. Так вот, лучше этот таймер сделать циклическим (параметр true) или не циклическим и запускать его по новой каждый раз после выполнения кода таймера?
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Установи profiler и посмотри какой из вариантов будет более быстрее
[Anticheat]___Invisible Fly Hack
[Anticheat]____Weapon/Ammo Hack
[Function]______ResetPlayerWeaponSlot
[Function]_______FIX_SetPlayerAmmo
[ServerMod]______TDM | Zombie Apokalypse
Прочитал что: "Воздержитесь от создания функций на PAWN, если есть нативные функции (или используйте в комбинации с нативными).". Хорошо, а если использовать нативные функции но только с помощью макроса, разницы ведь никакой, никакого негативного влияния? Пример:
PHP код:
#define f(%0, format(%0, sizeof(%0),
Эту тему просматривают: 13 (пользователей: 0 , гостей: 13)