Приветствую форумчане и тех кто хочет научиться PAWN скриптингу.
Рекомендую ознакомиться с данным учебником (*клик*).
И после этого приступать к ознакомлению написания различных команд.
Так-же рекомендую не копировать готовую команду, а писать самому(подсматривая), никто не запрещает вам подсматривать, пишите, запоминайте, и у вас все получится.
Я решил написать данный урок, так как почти в каждом моде вижу одно и тоже, к примеру создам обычную команду для видимости ошибок оптимизаторов так скажем:
CMD:mystats(playerid, params[])
{
if(logged[playerid] == 1)
{
new string[255];
format(string, sizeof(string),
"{FFFF00}Статистика игрока: %s",
GN(playerid),
SPD(playerid, 25, MSGBOX,
"Статистика персонажа",
string,
"ОК","");
}
else
{
SCM(playerid, -1, "[X]Вы не авторизованы!");
}
return 1;
}
Теперь давайте его оптимизируем. Делаем это так. Смотрим для начала на строку:
format(string, sizeof(string),
"{FFFF00}Статистика игрока: %s", ... );
Считаем количество символов в " " (кавычках). В данном случае у нас их 29. Отсюда пишем такую простенькую формулу:
new string[29 + MAX_PLAYER_NAME - 2];
В итоге у нас получиться:
CMD:mystats(playerid, params[])
{
if(logged[playerid] == 1)
{
new string[29 + MAX_PLAYER_NAME - 2];
format(string, sizeof(string),
"{FFFF00}Статистика игрока: %s",
GN(playerid),
SPD(playerid, 25, MSGBOX,
"Статистика персонажа",
string,
"ОК","");
}
else
{
SCM(playerid, -1, "[X]Вы не авторизованы!");
}
return 1;
}
Да, и еще момент. Я знаю что есть те, кто думает: "Если я напишу в string[MAX_PLAYER_NAME], то стринг возьмет столько ячеек, сколько символов в нике." - это мнение ошибочно!
MAX_PLAYER_NAME - это #define инклюда a_samp. Выглядит он вот так:
#define MAX_PLAYER_NAME (24)
Да, мы могли написать даже вот так эту формулу:
new string[29 + 24 - 2];
Но согласитесь, удобнее вот так:
new string[29 + MAX_PLAYER_NAME - 2];
Теперь, вопрос-ответ:
Вопрос: зачем тебе в этой формуле "-2" ?
Ответ: "-2" - это мы откидываем из нашего формата вот эти символы "%s" и тому подобное, если бы там было написано следующее:
format(string, sizeof(string),
"{FFFF00}Статистика игрока: %s[ID:%d]", ...);
То мы бы писали формулу таким образом:
new string[29 + MAX_PLAYER_NAME - 4]; // ну думаю теперь понятно =)
Да и еще, вот пока писал, придумал наглядную схему для вас:
new string[кол-во символов в формате + MAX_PLAYER_NAME - число формативных помощников];
Не помню как точно называются эти символы: %s %d %i. Назову их формативными помощниками. Если Вы помните, напишите в комменты =)
Рекомендую ознакомиться с данным учебником (*клик*).
И после этого приступать к ознакомлению написания различных команд.
Так-же рекомендую не копировать готовую команду, а писать самому(подсматривая), никто не запрещает вам подсматривать, пишите, запоминайте, и у вас все получится.
Я решил написать данный урок, так как почти в каждом моде вижу одно и тоже, к примеру создам обычную команду для видимости ошибок оптимизаторов так скажем:
CMD:mystats(playerid, params[])
{
if(logged[playerid] == 1)
{
new string[255];
format(string, sizeof(string),
"{FFFF00}Статистика игрока: %s",
GN(playerid),
SPD(playerid, 25, MSGBOX,
"Статистика персонажа",
string,
"ОК","");
}
else
{
SCM(playerid, -1, "[X]Вы не авторизованы!");
}
return 1;
}
Теперь давайте его оптимизируем. Делаем это так. Смотрим для начала на строку:
format(string, sizeof(string),
"{FFFF00}Статистика игрока: %s", ... );
Считаем количество символов в " " (кавычках). В данном случае у нас их 29. Отсюда пишем такую простенькую формулу:
new string[29 + MAX_PLAYER_NAME - 2];
В итоге у нас получиться:
CMD:mystats(playerid, params[])
{
if(logged[playerid] == 1)
{
new string[29 + MAX_PLAYER_NAME - 2];
format(string, sizeof(string),
"{FFFF00}Статистика игрока: %s",
GN(playerid),
SPD(playerid, 25, MSGBOX,
"Статистика персонажа",
string,
"ОК","");
}
else
{
SCM(playerid, -1, "[X]Вы не авторизованы!");
}
return 1;
}
Да, и еще момент. Я знаю что есть те, кто думает: "Если я напишу в string[MAX_PLAYER_NAME], то стринг возьмет столько ячеек, сколько символов в нике." - это мнение ошибочно!
MAX_PLAYER_NAME - это #define инклюда a_samp. Выглядит он вот так:
#define MAX_PLAYER_NAME (24)
Да, мы могли написать даже вот так эту формулу:
new string[29 + 24 - 2];
Но согласитесь, удобнее вот так:
new string[29 + MAX_PLAYER_NAME - 2];
Теперь, вопрос-ответ:
Вопрос: зачем тебе в этой формуле "-2" ?
Ответ: "-2" - это мы откидываем из нашего формата вот эти символы "%s" и тому подобное, если бы там было написано следующее:
format(string, sizeof(string),
"{FFFF00}Статистика игрока: %s[ID:%d]", ...);
То мы бы писали формулу таким образом:
new string[29 + MAX_PLAYER_NAME - 4]; // ну думаю теперь понятно =)
Да и еще, вот пока писал, придумал наглядную схему для вас:
new string[кол-во символов в формате + MAX_PLAYER_NAME - число формативных помощников];
Не помню как точно называются эти символы: %s %d %i. Назову их формативными помощниками. Если Вы помните, напишите в комменты =)
Спасибо за внимание друзья. Надеюсь я Вам чем то помог.
Автор: я, Mike_World.
Последнее редактирование модератором: