|
ЗЫ а можно узнать размер вашего someArray, а то у меня при его размере в 5 строк, результаты скорости смехотворны.
![]() |
new someArray[35][2][16];
// Не знаю как присвоить текст этому массиву по другому :(
for(new i; i < sizeof(someArray); i++) {
strcat(someArray[i][0], "SomeText");
strcat(someArray[i][1], "SomeText2");
}
new str[64], msg[1024];
new tick_count = GetTickCount();
for(new j; j < 10000; j++) {
for(new i; i < sizeof(someArray); i++) {
format(str, sizeof(str), "%s {77ff00}%s\n", someArray[i][0], someArray[i][1]);
strcat(msg, str);
}
strdel(msg, 0, sizeof(msg));
}
printf("1 variant - %d ticks", GetTickCount()-tick_count);
tick_count = GetTickCount();
for(new j; j < 10000; j++) {
for(new i; i < sizeof(someArray); i++) {
format(msg, sizeof(msg), "%s%s {77ff00}%s\n", msg, someArray[i][0], someArray[i][1]);
}
strdel(msg, 0, sizeof(msg));
}
printf("2 variant - %d ticks", GetTickCount()-tick_count);
tick_count = GetTickCount();
for(new j; j < 10000; j++) {
for(new i; i < sizeof(someArray); i++) {
strcat(msg, someArray[i][0]);
strcat(msg, " {77ff00}");
strcat(msg, someArray[i][1]);
strcat(msg, "\n");
}
strdel(msg, 0, sizeof(msg));
}
printf("ZiGGi variant - %d ticks", GetTickCount()-tick_count);
|
1 variant - 244 ticks 2 variant - 449 ticks ZiGGi variant - 359 ticks |
|
Делаю поиск онлайн и оффлайн игроков в диалоге, и думаю... А как будет быстрее?
Сохранять ID и ники найденных игроков в массив и при нажатии вытаскивать из массива. Или же сохранять данные с поиска в базу данных, а при нажатии вытаскивать их оттуда? |
public OnPlayerText(playerid, text[])
{
new PlayerName[MAX_PLAYER_NAME], string[144];
strcat(string, text);
for(new i = strfind(string, "@", true), a = 0, tmp[4]; i != -1; i = strfind(string, "@", true, i))
{
++i, a = 0;
while(48 <= string[i] <= 57 && a != 4) tmp[a++] = string[i++];
if(tmp[0] == EOS) continue;
GetPlayerName(strval(tmp), PlayerName, sizeof(PlayerName));
format(PlayerName, MAX_PLAYER_NAME + 20, "{%06x}%s{FFFFFF}", GetPlayerColor(strval(tmp)) >>> 8, PlayerName);
strdel(string, i - a - 1, i);
strins(string, PlayerName, i - a - 1);
}
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
format(string, sizeof(string), "%s: {FFFFFF}%s", PlayerName, string);
SendClientMessageToAll(GetPlayerColor(playerid), string);
return 0;
}
Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.)
|
Но ресурсов "ай-ай" как будет много уходить
Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.) |
|
Но ресурсов "ай-ай" как будет много уходить
Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.) |
|
pawn Код:
|
format(PlayerName, MAX_PLAYER_NAME + 20, "{%06x}%s{FFFFFF}", GetPlayerColor(strval(tmp)) >>> 8, PlayerName);
|
Ну если зарегистрированных аккаунтов свыше 10к, массив держать?
|
stock loadVehicles() {
new
string[ 600 ];
mysql_query( "SELECT * FROM `cars`" );
mysql_store_result();
if( mysql_num_rows() > 0 ) {
for( new idx = 1; idx <= mysql_num_rows(); idx++ ) {
mysql_fetch_row_format( string, "|" );
sscanf( string, "e<p<|>iiffffiiis[24]iiii>", car[ idx ] );
new carid = CreateVehicle( car[ idx ][ model ], car[ idx ][ vehX ], car[ idx ][ vehY ], car[ idx ][ vehZ ], car[ idx ][ vehA ], car[ idx ][ vehColor1 ], car[ idx ][ vehColor2 ], 50000 );
createdVehicle[ carid ] = car[ idx ][ vehId ];
vehCount++;
}
}
mysql_free_result();
}
|
Всем привет.
Как можно узнать ID транспортного средства из БД? У айди - автоинкремент. Если удалить 1 транспортное средство (например, 4 по счету), получится такой вид: 1, 2, 3, 5. Так вот, 1, 2 и 3 айди он узнает, а 5 - не видит, как исправить? Код подгрузки машин: Код:
stock loadVehicles() {
new
string[ 600 ];
mysql_query( "SELECT * FROM `cars`" );
mysql_store_result();
if( mysql_num_rows() > 0 ) {
for( new idx = 1; idx <= mysql_num_rows(); idx++ ) {
mysql_fetch_row_format( string, "|" );
sscanf( string, "e<p<|>iiffffiiis[24]iiii>", car[ idx ] );
new carid = CreateVehicle( car[ idx ][ model ], car[ idx ][ vehX ], car[ idx ][ vehY ], car[ idx ][ vehZ ], car[ idx ][ vehA ], car[ idx ][ vehColor1 ], car[ idx ][ vehColor2 ], 50000 );
createdVehicle[ carid ] = car[ idx ][ vehId ];
vehCount++;
}
}
mysql_free_result();
}
|
|
Восстанавливать порядок ключей при удалении, как вариант.
|
|
Evansive, тебе нужно во время загрузки машин из БД сохранять их ключи в массиве и работать с ними.
|
|
objects[] изменяется еще раз после создания объектов, возможно.
|
stock createobjects(destroy = 0)
new objects[10];
objects[0] = CreateObject....
итак далее до 9
a если destroy = 1 то циклом, как я писал, я их удаляю, но не получается
|
У меня как бы функция:
PHP код:
|
stock createobjects(destroy = 0)
{
static objects[10];
objects[0] = CreateObject(...);
...
objects[9] = CreateObject(...);
if(destroy == 1)
{
...
}
}
|
При использовании mailer.inc процесс samp-server.exe выключается. Ничего в лог не записывает.
Использую SendMail(Player[playerid][pEmail], "support@email.ru", "SAMP", "Pass", "текст письма"); Первое письмо отправляется отлично и приходит. А при отправлении второго оно отправляется, НО сразу после этого сервер выключается. Не знаете в чем может быть дело? Заранее спасибо. |
|
При использовании mailer.inc процесс samp-server.exe выключается. Ничего в лог не записывает.
Использую SendMail(Player[playerid][pEmail], "support@email.ru", "SAMP", "Pass", "текст письма"); Первое письмо отправляется отлично и приходит. А при отправлении второго оно отправляется, НО сразу после этого сервер выключается. Не знаете в чем может быть дело? Заранее спасибо. |