Pawno-SAMP
Главная
Вход
Регистрация
Среда, 16.07.2025, 00:52Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[Урок] учимся оптимизировать коды мода
UlkiorraJeezyДата: Суббота, 14.07.2012, 15:05 | Сообщение # 1
Лейтенант
Группа: Администраторы
Сообщений: 71
Репутация: 0
Статус: Offline
Во - первых, самая распространённая проблема это размер string'ов, очень часто начинающие скриптёры используют размер стринг
256 и более. Максимальная длинна строчки в самп 128 или 144 не помню, вроде 128, да зачем брать такой размер стрингов.
Если вы используете MySQL или выводите диалоговое окно, то уже можно брать большой размер желательно примерно подсчитать, при написание системы /myskill мне понадобилось, ~600 ячеек. Теперь при использовании MySQl бывает, что запросто может достигать 1024 символов, так писал Trecker в своём уроке.
Пример правильного использования string
Code
new ammount = 19;
new string[8]
format(string,12,"Число: %d",ammount);  

Тут я использую 7 ячеек для вывода текста. Спросите почему в переменной string 8 ячеек? - Потому что последняя ячейка остаётся пустой, она завершает строку.

Ну теперь не много про переменные и Pvar'ы
Ну собственно видел в уроке у Trckaerа, там он писал, что по тестам PVar работает быстрее чем обычная переменная.
Ну честно говоря, я и сам в этом убедился. Да работает быстрее, да и мне самому как то легче стало.
Сейчас постепенно заменяю переменные на Право.
Code
SetPVarFloat(playerid, varname[], Float:float_value)

Это аналог любой переменной созданной для игрока и записи дробного числа.
playerid - Ид игрока
varname[] - Название(Имя) ПиВара
Float:float_value - Ну это уже само значения..
Пример
Code
new Float:Pos[3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
SetPVarFloat(playerid, "PosX", pos[0]);
SetPVarFloat(playerid, "PosY", pos[1]);
SetPVarFloat(playerid, "PosZ", pos[2]);
Ну и тпешнем игрока
  SetPlayerPos(playerid,GetPVarFloat(playerid,"PosX"),GetPVarFloat(playerid,"PosY"),GetPVarFloat(playerid,"PosZ"));  

Это мы записали в ПиВар координаты игрока.
Ну теперь тоже самое только с обычной переменной.
Code
new Float:pos[3];
new Float:PlayerPos[MAX_PLAYERS][3];
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
PlayerPos[playerid][0] = pos[1];
PlayerPos[playerid][1] = pos[2];
PlayerPos[playerid][2] = pos[3];  

Тут нам пришлось создавать переменную PlayerPos с которая содержит в себе 503 ячейки: 500 - кол -во игроков, 3 - кол - во места для записи координат.

Остальные виды PVar:
Code
SetPVarInt(playerid, varname[], int_value)  

playerid - ид игрока для которого установлен пивар
varname[] - Название Пивара
int_value - Целое число каторое будет хранится в Пиваре
Code
SetPVarString(playerid, varname[], string_value[])  

playerid - id игрока
varname[] название Пивара
string_value[] - Текст, каторые будет хранится в Pvar'e
Ну и извелчение значений из Пивара
Code
GetPVarString(playerid, varname[], string_return[], len)  

Извлекаем рание записанный текст.
playerid - id игркоа
varname[] - название Пивара в каторый записывали текст
string_return[] - переменная каторая запишет текст каторый был в Пиваре
len - Количество ячеек выделенное для записи текста в переменную.
Пример с sa-mp.com:
Code
public OnPlayerConnect(playerid)
{
     new pmsg[128];
     GetPVarString(playerid, "msg", pmsg, 128);// Get the msg string from the PVar
     printf("Player Message: %s", pmsg);// will print 'Player Message: *message*'
     return 1;
}  

Code
GetPVarInt(playerid, varname[])  

playerid - id игркоа
varname[] - название Пивара
пример с sa-mp.com
Code
public OnPlayerConnect(playerid)
{
     printf("money: %d", GetPVarInt(playerid, "money")); // get the saved value ('money')
     return 1;
}

Если public'и не вызываются таймером, то замените их на стоки и уберите forward
Пример был public
Code
forward Test();
public Test()
{
  return true;
}  

Заменили на stock:
Code
stock Test()
{
return true;
}


Пока все, дальше буду рассказывать в следующих постах
 
  • Страница 1 из 1
  • 1
Поиск:


Пожертвования на развитие сайта. Yandex: 410011459268530 © 2025
Создать бесплатный сайт с uCoz