Sashadisa
Ученик
Всех приветствую!
Сегодня мы поговорим о том как правильно использовать глобальный стринг и не будет ли он путатся при большом онлайне.
Для чего это нужно:
Это нужно для того чтобы не создавать постоянно переменные тем самым загружать стэк, чтобы не создавать большие стринги в одном стоке
Сегодня мы поговорим о том как правильно использовать глобальный стринг и не будет ли он путатся при большом онлайне.
Для чего это нужно:
Это нужно для того чтобы не создавать постоянно переменные тем самым загружать стэк, чтобы не создавать большие стринги в одном стоке
1 - Для начала создаем глобальный стринг в начале мода:
new string_global[4096];
(4096 так как это ограничение сампа, больше ставить нет смысла)
2 - Используем стринг, пример:
3 - Может ли путаться стринг при одновременном использовании нескольких человек/функций:
Нет, он не может путаться так как Pawn однопоточный, он не выполняет второй функции пока используется первая, даже если вы будете использовать цикл на 1000 изменений string_global, он все равно не будет путаться если игрок использует глобальный стринг во время выполнения цикла.
new string_global[4096];
(4096 так как это ограничение сампа, больше ставить нет смысла)
2 - Используем стринг, пример:
//Пример 1 где НЕ нужно очищать стринг, так как format сам переписывает стринг (В некоторых случаях нужно очищать, показано в примере 2 - 3)
Код:
CMD:test(playerid)
{
format(string_global, 144, "Тестовый вывод | Ваш ID:", PlayerInfo[playerid][pID]); //144 Так как в чат не отправляется больше чем 144 символа, нет смысла ставить больше.
SendClientMessage(playerid, -1, string_global);
return 1;
}
//Пример 2 где нужно очищать стринг
CMD:test(playerid)
{
new string[144]; //Не нужно мне писать что я не высчитывал строки и так далее, 144 размер это для примера.
format(string, sizeof(string), "Nick: %s",Nick(playerid))
string_global[0] = EOS; //Обнуляем стринг
strcat(string_global, "Ник игрока"); //strcat дополняет стринг
strcat(string_global, string);
ShowPlayerDialog(playerid, 0, 0, "Ник", string_global, "Выход", "");
return 1;
}
//Пример 3 где так же нужно очищать стринг
CMD:test(playerid)
{
string_global[0] = EOS;
for(new i; i < 12; i++)//Тестовый цикл
{
format(string_global, 244, "%sПовтор цикла: %d\n", string_global, i);
}
ShowPlayerDialog(playerid, 0, 0, "Повтор", string_global, "Выход", "");
}
Нет, он не может путаться так как Pawn однопоточный, он не выполняет второй функции пока используется первая, даже если вы будете использовать цикл на 1000 изменений string_global, он все равно не будет путаться если игрок использует глобальный стринг во время выполнения цикла.
Подробнее об этом вы можете узнать в видео:
Так же потом будет отдельная тема насчет static.
Автор темы: - Sanya -
При копировании на другие источники указать автора!
Автор темы: - Sanya -
При копировании на другие источники указать автора!
Последнее редактирование:
