PDA

Просмотр полной версии : [Вопрос] Работа с большими строками



InCorrect
05.01.2016, 00:09
Доброго дня.Вопрос следующий:

stock ShowDialogRegister(playerid)
{
static const text_box_register[] =
"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт %s не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов";
new string[sizeof(text_box_register) - 2 + MAX_PLAYER_NAME + 1];
format(string, sizeof(string), text_box_register, PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, !"{1976D2}Регистрация", string, !"Далее", !"Отмена");
}
как можно оптимизировать этот код?Да и в целом, как работать с большими строками?

$continue$
05.01.2016, 01:13
Никак. Что, Вы тут собрались оптимизировать?
Гонцы за макросекундами.

Если строка будет не вмешаться (Около 500 символов вмещает компилятор. Точного значение не скажу.)
Воспользуйтесь методом от Daniel Cortez (http://pro-pawn.ru/showthread.php?10012&p=47838&viewfull=1#post47838)

Desulaid
05.01.2016, 01:24
Если функция вызывается один раз, то лучше код напрямую брать (не stock)

InCorrect
05.01.2016, 01:44
Никак. Что, Вы тут собрались оптимизировать?
Гонцы за макросекундами.

Если строка будет не вмешаться (Около 500 символов вмещает компилятор. Точного значение не скажу.)
Воспользуйтесь методом от Daniel Cortez (http://pro-pawn.ru/showthread.php?10012&p=47838&viewfull=1#post47838)
А можно ли как-то сократить размер выделяемой памяти?На вызов функции выделяется порядком 740 байт, если учесть планку в 16384 байт, то значение весьма впечатляет.


Если функция вызывается один раз, то лучше код напрямую брать (не stock)
Функция вызывается порядком 5-ти раз

- - - Добавлено - - -

И следом вопрос
А, что будет если попытаться обойти баг формата (http://pro-pawn.ru/showthread.php?5249-Pawn-%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D1%81%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%B2%D0%B5%D1%82%D1%8B-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B&p=64394&viewfull=1#post64394) во время сжатия строчек?По результатам компиляции - памяти выделяется на треть меньше.Да и в игре вроде бы все работает на отлично


new string[55], two_string[MAX_PLAYER_NAME];
// размер был взят произвольно
string = !"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n";
strcat(string, "{ffffff}Ваш аккаунт {64dd17} ");
format(two_string, sizeof(two_string), "%s", PlayerInfo[playerid][Name]);
strcat(string, two_string);
strcat(string, "{ffffff} не найден в нашей базей данных\n\n");
strcat(string, "Пройдите процесс регистрации\n");
strcat(string, "Введите пароль\n\n");
strcat(string, "Максимальная длина пароля - 15 символов");
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, !"{1976D2}Авторизация", string, "Вход", "Отмена");


Функции format и printf не умеют правильно работать с упакованными строками (как в форматной строке, так и в форматируемых параметрах).
Что не так уж и удивительно, если учесть, что к этим функциям прикасался куй.

VVWVV
05.01.2016, 01:56
Более ваш код оптимизировать нельзя, но, однако можно «химичить» с ассемблером, но это вряд ли что-то изменит.
Второй предложенный вариант действительно меньше занимает памяти, ведь функция strcat превращает строку в «упакованный» вид, но, однако вы вызываете большое количество функций, что не очень рационально.

Вывод: Ваш первый вариант будет на много производительнее, чем второй.

InCorrect
05.01.2016, 02:06
Более ваш код оптимизировать нельзя, но, однако можно «химичить» с ассемблером, но это вряд ли что-то изменит.
Второй предложенный вариант действительно меньше занимает памяти, ведь функция strcat превращает строку в «упакованный» вид, но, однако вы вызываете большое количество функций, что не очень рационально.

Вывод: Ваш первый вариант будет на много производительнее, чем второй.

А как вообще подсчитывается размер стэка?
Заметил, что не всегда при создание нового массива изменяется размер стэка.
Вот например если создавать массив в отдельно выведенном стоке, то размер стэка увеличивается.А если же массив объявить в команде, (dc_cmd) то размер стэка остается не изменным (но опять таки: раз на раз не приходиться.Один раз изменяется, один раз нет:boredom:

- - - Добавлено - - -



Второй предложенный вариант действительно меньше занимает памяти, ведь функция strcat превращает строку в «упакованный» вид, но, однако вы вызываете большое количество функций, что не очень рационально.

Вывод: Ваш первый вариант будет на много производительнее, чем второй.

А если уменьшить кол-во вызовов функции strcat?


new string[55], two_string[MAX_PLAYER_NAME];
// размер был взят произвольно
string = !"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n";
strcat(string, "{ffffff}Ваш аккаунт {64dd17} ");
format(two_string, sizeof(two_string), "%s", PlayerInfo[playerid][Name]);
strcat(string, two_string);
strcat(string, "{ffffff} не найден в нашей базей данных\n\nПройдите процесс регистрации\nВведите пароль\n\nМаксимальная длина пароля - 15 символов");
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, !"{1976D2}Авторизация", string, "Вход", "Отмена");

Я так понимаю, что это ничего не изменит, и продуктивней все также будет первый вариант

VVWVV
05.01.2016, 02:14
Если вы создаёте сток и не пользуетесь им, то он не «определяется» компилятором (можно посмотреть в ассемблерном листинге), но, однако если вы создаёте паблик (командный процессор состоит из пабликов), то он все равно будет, даже если вы его не будете использовать (также вы можете посмотреть в ассемблерном листинге).

http://ihost.pro-pawn.ru/image.php?di=UEN8http://ihost.pro-pawn.ru/image.php?di=BFTG


Я так понимаю, что это ничего не изменит, и продуктивней все также будет первый вариант
Для того, чтобы ваш вариант был более производительнее вам необходимо «химичить» с ассемблером.

InCorrect
05.01.2016, 02:35
Если вы создаёте сток и не пользуетесь им, то он не «определяется» компилятором (можно посмотреть в ассемблерном листинге), но, однако если вы создаёте паблик (командный процессор состоит из пабликов), то он все равно будет, даже если вы его не будете использовать (также вы можете посмотреть в ассемблерном листинге).

http://ihost.pro-pawn.ru/image.php?di=UEN8http://ihost.pro-pawn.ru/image.php?di=BFTG

Большое спасибо.И заключающий вопросик (хоть и не совсем по этой теме), листая форум pro-pawn, частенько замечаю непонятные для себя аббревиатуры. (даже вот взять предыдущий пост с прикрепленным к нему скриншотом) для меня он был во все не понятен; набор буковок да циферок на картинке и таких примеров целая туча (особенно если начать вчитываться в ответы знающих людей).Так вот, собственно вопрос таков: какие бы Вы посоветовали языки программирования (может какую-то литературу для прочтения) что бы можно было элементарно понимать как работает тот же самый компилятор, как лучше реализовать ту или иную функцию, какой код будет более продуктивней и т.д (Проще говоря вывести свои знания на новый уровень)
P.S Pawn - мой первый язык программирования

- - - Добавлено - - -

Парочку таких примеров
Первый (http://pro-pawn.ru/showthread.php?5249-Pawn-%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D1%81%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%B2%D0%B5%D1%82%D1%8B-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B&p=62290&viewfull=1#post62290)
Второй (http://pro-pawn.ru/showthread.php?5249-Pawn-%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D1%81%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%B2%D0%B5%D1%82%D1%8B-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B&p=63483&viewfull=1#post63483)
Третий (http://pro-pawn.ru/showthread.php?5249-Pawn-%D0%98%D0%BD%D1%82%D0%B5%D1%80%D0%B5%D1%81%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%B2%D0%B5%D1%82%D1%8B-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B&p=63484&viewfull=1#post63484)
... и эту цепочку можно продолжать до бесконечности

VVWVV
05.01.2016, 02:49
Как минимум, большинство таких аббревиатур вы можете разгадать, используя поисковую систему Goggle. Для того, чтобы вывести свои знания на новый уровень требуется знания английского, ибо все нормальные учебники для pawn только на нём. Я бы посоветовал вам прочитать учебники: «Pawn_Implementer_Guide», «Pawn_Language_Guide». Также, посещать разные темы на официальном форуме сампа.

$continue$
05.01.2016, 03:40
Искал я себе книгу: "Чарльз Петцольд: Код. Тайный язык информатики (http://www.proklondike.com/books/thproch/petzold_code.html)" в бумажном варианте, так и не нашел.
Хорошая, книга. Но, вряд ли там есть описание работы компиляторов.

Так же я бы посоветовал: Совершенный код - Стив Макконнелл (http://rutracker.org/forum/viewtopic.php?t=3405589)
Книга, очень хорошая. Описано большинство алгоритмов. Работа циклов, операторов, etc...


Pawn - не лучший язык программирования. Изучая его Вы изучаете плохую практику программирования. В Pawn используется методы Си89 (около того).
Если ради увлечения - то можно изучать Pawn. Если Вы хотите продолжить свою жизнь с "компьютером" - то стоит выбрать, что то потяжелее. Я бы на этот случий посоветовал: Lua (https://ru.wikipedia.org/wiki/Lua), Squirrel (https://ru.wikipedia.org/wiki/Squirrel), Python (https://ru.wikipedia.org/wiki/Python), node.js (https://ru.wikipedia.org/wiki/Node.js)

И на всем этом можно программировать под SA-MP, конечно надо знать как работает Pawn Virtual Machine (PVM)

Lua in SA-MP [plugins] (http://forum.sa-mp.com/showthread.php?t=369919)

Squirrel in SA-MP [plugins] (http://forum.sa-mp.com/showthread.php?p=790201)
Жаль, то что под Linux поддержки нет.

Python in SA-MP [plugins] (http://forum.sa-mp.com/showthread.php?t=202987)

node.js in SA-MP [plugins] (http://forum.sa-mp.com/showthread.php?t=580064)


Но при это всем, надо понимать, что поддержку плагинов вряд ли введут. В случии обновлении серверной части (Обновление SA-MP от разработчиков), Вам придется самостоятельно добавлять функции, который были анонсированы.

На счёт скринов, циферок, букв: Это assembler (https://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80). На ранних стадиях разработки - Вам это будет не нужно. Сейчас мало кто пишет assembler, но листинг знать желательно. Почти, все программы переводятся в assembler

P.S: Читать будет трудно "многабукф"

VVWVV
05.01.2016, 05:01
Если говорить о языках программирования, то на просторах интернета существует сайт, так вот, на этом сайте есть список разных учебников (ссылок на учебники): сам сайт (http://tproger.ru/knowledge-base/books-and-articles/).

Про ассемблер скажу так: он нужен только для увеличения производительности.

P.S.: сейчас появляются новые языки программирования, например, то же Rust (https://ru.wikipedia.org/wiki/Rust_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29)

InCorrect
05.01.2016, 06:22
Искал я себе книгу: "Чарльз Петцольд: Код. Тайный язык информатики (http://www.proklondike.com/books/thproch/petzold_code.html)" в бумажном варианте, так и не нашел.
Хорошая, книга. Но, вряд ли там есть описание работы компиляторов.

Так же я бы посоветовал: Совершенный код - Стив Макконнелл (http://rutracker.org/forum/viewtopic.php?t=3405589)
Книга, очень хорошая. Описано большинство алгоритмов. Работа циклов, операторов, etc...


Pawn - не лучший язык программирования. Изучая его Вы изучаете плохую практику программирования. В Pawn используется методы Си89 (около того).
Если ради увлечения - то можно изучать Pawn. Если Вы хотите продолжить свою жизнь с "компьютером" - то стоит выбрать, что то потяжелее. Я бы на этот случий посоветовал: Lua (https://ru.wikipedia.org/wiki/Lua), Squirrel (https://ru.wikipedia.org/wiki/Squirrel), Python (https://ru.wikipedia.org/wiki/Python), node.js (https://ru.wikipedia.org/wiki/Node.js)

И на всем этом можно программировать под SA-MP, конечно надо знать как работает Pawn Virtual Machine (PVM)

Lua in SA-MP [plugins] (http://forum.sa-mp.com/showthread.php?t=369919)

Squirrel in SA-MP [plugins] (http://forum.sa-mp.com/showthread.php?p=790201)
Жаль, то что под Linux поддержки нет.

Python in SA-MP [plugins] (http://forum.sa-mp.com/showthread.php?t=202987)

node.js in SA-MP [plugins] (http://forum.sa-mp.com/showthread.php?t=580064)


Но при это всем, надо понимать, что поддержку плагинов вряд ли введут. В случии обновлении серверной части (Обновление SA-MP от разработчиков), Вам придется самостоятельно добавлять функции, который были анонсированы.

На счёт скринов, циферок, букв: Это assembler (https://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80). На ранних стадиях разработки - Вам это будет не нужно. Сейчас мало кто пишет assembler, но листинг знать желательно. Почти, все программы переводятся в assembler

P.S: Читать будет трудно "многабукф"

Большое спасибо.Обязательно прочитаю эти две книги.Из языков программирования выбор пал на Python.Начну изучать и постепенно переводить на него мод


Если говорить о языках программирования, то на просторах интернета существует сайт, так вот, на этом сайте есть список разных учебников (ссылок на учебники): сам сайт (http://tproger.ru/knowledge-base/books-and-articles/).

Про ассемблер скажу так: он нужен только для увеличения производительности.

P.S.: сейчас появляются новые языки программирования, например, то же Rust (https://ru.wikipedia.org/wiki/Rust_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29)

Весьма полезный сайт.Спасибо.Производительность - именно то, что меня интересует последнее время

Daniel_Cortez
05.01.2016, 12:21
Доброго дня.Вопрос следующий:

stock ShowDialogRegister(playerid)
{
static const text_box_register[] =
"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт %s не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов";
new string[sizeof(text_box_register) - 2 + MAX_PLAYER_NAME + 1];
format(string, sizeof(string), text_box_register, PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, !"{1976D2}Регистрация", string, !"Далее", !"Отмена");
}
как можно оптимизировать этот код?Да и в целом, как работать с большими строками?
Вместо format можно использовать strcat (3 вызова strcat таки эффективнее, чем 1 вызов format (http://pro-pawn.ru/showthread.php?12773)).


stock ShowDialogRegister(playerid)
{
static const str0[] =
!"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт ";
static const str1[] =
!" не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов";
const string_length =
(sizeof(str0) - 1) * cellbits / charbits +
MAX_PLAYER_NAME +
(sizeof(str1) - 1) * cellbits / charbits +
1;
new string[string_length char];
string = str0;
strcat(string, PlayerInfo[playerid][Name]);
strcat(string, str1);
return ShowPlayerDialog(
playerid, 1, DIALOG_STYLE_INPUT,
!"{1976D2}Регистрация", string, !"Далее", !"Отмена"
);
}


По поводу предложенных выше языков программирования - это всё скриптовые языки. На самом деле мало хорошего в использовании ещё одного интерпретатора (того, который нужен для нового скриптового ЯП) поверх другого (используемого в сервере SA:MP). Упростится только процесс разработки, но на производительность кода это если и повлияет, то только в отрицательном направлении. Если хотите убить двух зайцев одним выстрелом, советую начать изучать C++ и работать с SAMPGDK (https://github.com/Zeex/sampgdk). Получите сразу кучу языковых средств и уже готовых библиотек на С/C++ вкупе с приличной производительностью за счёт компиляции в нативный код.

Desulaid
05.01.2016, 13:43
Просто для информативности. Форматирование в данном случаи быстрее. Для теста я использовал метод профилирования DC (http://pro-pawn.ru/showthread.php?12585) (и его код :D)


Тестирование: <format> vs <strcat>
Режим: интерпретируемый, 10000x1000 итераций.
format: 7851
strcat: 12718

Тестирование: <format> vs <strcat>
Режим: с JIT-компиляцией, 10000x1000 итераций.
format: 6597
strcat: 13036



static const nickname[] = "Abcdef_Ghijklmn";

#define Prerequisites();\
new string[256];

#define CodeSnippet1();\
static const str0[] =\
!"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт ";\
static const str1[] =\
" не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов";\
string = str0;\
strcat(string, nickname);\
strcat(string, str1);

#define CodeSnippet2();\
format(string, sizeof(string),\
"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт %s не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов",\
nickname\
);

И как вам уже говорили, здесь мало что можно оптимизировать. Ваш вариант и так вполне хорош и годен для использования. Для кулмегаоптимизейшен юзайте GDK(ссылка верхнем посте), причина и плюсы даны. От себя лишь добавлю: можно выводить форматированный диалог только для первого раза, ибо все другие показы ничем не будут отличаться от первоначального результата. Для показа всех остальных сообщений можно брать Set (http://wiki.sa-mp.com/wiki/SetPVarString)/GetPVarString (http://wiki.sa-mp.com/wiki/GetPVarString) (тогда и этой почитайте (http://pro-pawn.ru/showthread.php?13007)). Но я не практикуюсь черной магией и просто показываю обычный диалог с выводом ошибки игрока (например, "слишком маленький пароль" и т.д.). Это просто мое предположение, я просто не могу придумать других 5 причин показа окна приветствия, назовет это так.

Daniel_Cortez
05.01.2016, 13:53
Просто для информативности. Форматирование в данном случаи быстрее. Для теста я использовал метод профилирования DC (http://pro-pawn.ru/showthread.php?12585) (и его код :D)


Тестирование: <format> vs <strcat>
Режим: интерпретируемый, 10000x1000 итераций.
format: 7851
strcat: 12718

Тестирование: <format> vs <strcat>
Режим: с JIT-компиляцией, 10000x1000 итераций.
format: 6597
strcat: 13036



static const nickname[] = "Abcdef_Ghijklmn";

#define Prerequisites();\
new string[256];

#define CodeSnippet1();\
static const str0[] =\
!"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт ";\
static const str1[] =\
" не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов";\
string = str0;\
strcat(string, nickname);\
strcat(string, str1);

#define CodeSnippet2();\
format(string, sizeof(string),\
"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт %s не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов",\
nickname\
);

И как вам уже говорили, здесь мало что можно оптимизировать. Ваш вариант и так вполне хорош и годен для использования. Для кулмегаоптимизейшен юзайте GDK(ссылка верхнем посте), причина и плюсы даны. От себя лишь добавлю: можно выводить форматированный диалог только для первого раза, ибо все другие показы ничем не будут отличаться от первоначального результата. Для показа всех остальных сообщений можно брать Set (http://wiki.sa-mp.com/wiki/SetPVarString)/GetPVarString (http://wiki.sa-mp.com/wiki/GetPVarString) (тогда и этой почитайте (http://pro-pawn.ru/showthread.php?13007)). Но я не практикуюсь черной магией и просто показываю обычный диалог с выводом ошибки игрока (например, "слишком маленький пароль" и т.д.). Это просто мое предположение, я просто не могу придумать других 5 причин показа окна приветствия, назовет это так.
Ты перепутал местами "format" и "strcat" в результатах.

Desulaid
05.01.2016, 14:15
Ты перепутал местами "format" и "strcat" в результатах.

https://cs7057.vk.me/c540108/v540108172/12efe/DCDbmsj3M_w.jpg

Точно же. Ну strcat one love!

Profyan
05.01.2016, 14:57
Вместо format можно использовать strcat (3 вызова strcat таки эффективнее, чем 1 вызов format (http://pro-pawn.ru/showthread.php?12773)).


stock ShowDialogRegister(playerid)
{
static const str0[] =
!"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт ";
static const str1[] =
!" не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов";
const string_length =
(sizeof(str0) - 1) * cellbits / charbits +
MAX_PLAYER_NAME +
(sizeof(str1) - 1) * cellbits / charbits +
1;
new string[string_length char];
string = str0;
strcat(string, PlayerInfo[playerid][Name]);
strcat(string, str1);
return ShowPlayerDialog(
playerid, 1, DIALOG_STYLE_INPUT,
!"{1976D2}Регистрация", string, !"Далее", !"Отмена"
);
}


По поводу предложенных выше языков программирования - это всё скриптовые языки. На самом деле мало хорошего в использовании ещё одного интерпретатора (того, который нужен для нового скриптового ЯП) поверх другого (используемого в сервере SA:MP). Упростится только процесс разработки, но на производительность кода это если и повлияет, то только в отрицательном направлении. Если хотите убить двух зайцев одним выстрелом, советую начать изучать C++ и работать с SAMPGDK (https://github.com/Zeex/sampgdk). Получите сразу кучу языковых средств и уже готовых библиотек на С/C++ вкупе с приличной производительностью за счёт компиляции в нативный код.

На русском языке почти нет уроков по SAMP GDK.Возможно, если кто-нибудь на этом портале его освоил, может сделать серию уроков, тем самым добавит уникальность форуму и для многих будет это интересно

InCorrect
05.01.2016, 15:52
Вместо format можно использовать strcat (3 вызова strcat таки эффективнее, чем 1 вызов format (http://pro-pawn.ru/showthread.php?12773)).


stock ShowDialogRegister(playerid)
{
static const str0[] =
!"{ffffff}Добро пожаловать на сервер Atlant Role Play!\n"\
"{ffffff}Ваш аккаунт ";
static const str1[] =
!" не найден в нашей базей данных\n\n"\
"Пройдите процесс регистрации\n"\
"Введите пароль\n\n"\
"Максимальная длина пароля - 15 символов";
const string_length =
(sizeof(str0) - 1) * cellbits / charbits +
MAX_PLAYER_NAME +
(sizeof(str1) - 1) * cellbits / charbits +
1;
new string[string_length char];
string = str0;
strcat(string, PlayerInfo[playerid][Name]);
strcat(string, str1);
return ShowPlayerDialog(
playerid, 1, DIALOG_STYLE_INPUT,
!"{1976D2}Регистрация", string, !"Далее", !"Отмена"
);
}


По поводу предложенных выше языков программирования - это всё скриптовые языки. На самом деле мало хорошего в использовании ещё одного интерпретатора (того, который нужен для нового скриптового ЯП) поверх другого (используемого в сервере SA:MP). Упростится только процесс разработки, но на производительность кода это если и повлияет, то только в отрицательном направлении. Если хотите убить двух зайцев одним выстрелом, советую начать изучать C++ и работать с SAMPGDK (https://github.com/Zeex/sampgdk). Получите сразу кучу языковых средств и уже готовых библиотек на С/C++ вкупе с приличной производительностью за счёт компиляции в нативный код.

Я правильно понял: написание игрового мода на С++ (SAMPGDK) будет эффективней чем на обычном Pawn?

Daniel_Cortez
05.01.2016, 16:30
Я правильно понял: написание игрового мода на С++ (SAMPGDK) будет эффективней чем на обычном Pawn?
В чём профит писать всё шрифтом Century Gothic? И нет, я не говорю, что лучше делать моды на C++. Если вы не знаете этот язык, то только потеряете кучу времени на его изучение. При желании можно и на Pawn написать высокопроизводительный код.

InCorrect
05.01.2016, 16:50
В чём профит писать всё шрифтом Century Gothic?

:dntknw:Даже не знаю

- - - Добавлено - - -




const string_length =
(sizeof(str0) - 1) * cellbits / charbits +
MAX_PLAYER_NAME +
(sizeof(str1) - 1) * cellbits / charbits +
1;


Что это означают?Можно пояснение?

* cellbits / charbits

InCorrect
05.01.2016, 17:04
return ShowPlayerDialog(
playerid, 1, DIALOG_STYLE_INPUT,
!"{1976D2}Регистрация", string, !"Далее", !"Отмена"
);
И зачем тут нужен оператор возврата?