UlkiorraJeezy | Дата: Суббота, 14.07.2012, 15:05 | Сообщение # 1 |
 Лейтенант
Группа: Администраторы
Сообщений: 71
Статус: 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; }
Пока все, дальше буду рассказывать в следующих постах
|
|
| |