Скриптинг курилка

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
ЗЫ а можно узнать размер вашего someArray, а то у меня при его размере в 5 строк, результаты скорости смехотворны.
К сожалению, я уже удалил старый код.
Написал новый тест.
pawn Код:
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);
Результаты:
Quote:

1 variant - 244 ticks
2 variant - 449 ticks
ZiGGi variant - 359 ticks

Reply

Делаю поиск онлайн и оффлайн игроков в диалоге, и думаю... А как будет быстрее?
Сохранять ID и ники найденных игроков в массив и при нажатии вытаскивать из массива.
Или же сохранять данные с поиска в базу данных, а при нажатии вытаскивать их оттуда?
Reply

Quote:
Originally Posted by GameMan
Посмотреть сообщение
Делаю поиск онлайн и оффлайн игроков в диалоге, и думаю... А как будет быстрее?
Сохранять ID и ники найденных игроков в массив и при нажатии вытаскивать из массива.
Или же сохранять данные с поиска в базу данных, а при нажатии вытаскивать их оттуда?
В массив конечно будет быстрее.
Reply

pawn Код:
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;
}
Составили код замены идентификаторов на ники (например: привет, @0" меняется на "привет, [ACF]OKStyle"). Но не смотря на return 0, сообщение без замены выводится следом за сообщением, в котором ник вставлен (т.е. содержимое text[] посылается в чат). Если ID отсутствует, то ник не вставляется в сабж (так задумано). Ну и нестабильно работает при длинных строках. Где мы дно?

Reply

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
В массив конечно будет быстрее.
Но ресурсов "ай-ай" как будет много уходить Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.)
Reply

Quote:
Originally Posted by kamilot73
Посмотреть сообщение
Но ресурсов "ай-ай" как будет много уходить Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.)
Смотря что является приоритетом.
Reply

Quote:
Originally Posted by kamilot73
Посмотреть сообщение
Но ресурсов "ай-ай" как будет много уходить Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.)
А бд у нас видимо никаких ресурсов не потребляет, отлично...
Reply

Quote:
Originally Posted by eakwarp
Посмотреть сообщение
А бд у нас видимо никаких ресурсов не потребляет, отлично...
Ну если зарегистрированных аккаунтов свыше 10к, массив держать?
Reply

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
pawn Код:
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;
}
Составили код замены идентификаторов на ники (например: привет, @0" меняется на "привет, [ACF]OKStyle"). Но не смотря на return 0, сообщение без замены выводится следом за сообщением, в котором ник вставлен (т.е. содержимое text[] посылается в чат). Если ID отсутствует, то ник не вставляется в сабж (так задумано). Ну и нестабильно работает при длинных строках. Где мы дно?
Массив
new PlayerName[MAX_PLAYER_NAME];
а используете так:
PHP код:
format(PlayerNameMAX_PLAYER_NAME 20"{%06x}%s{FFFFFF}"GetPlayerColor(strval(tmp)) >>> 8PlayerName); 
Reply

Quote:
Originally Posted by kamilot73
Посмотреть сообщение
Ну если зарегистрированных аккаунтов свыше 10к, массив держать?
Ой, как будто свыше 6к Байт на ОЗУ жалко и прироста времени компиляции на приличное значение xD
Reply

Всем привет.

Как можно узнать 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();
}
Узнаю, например, при входе в транспортное средство.
Reply

Quote:
Originally Posted by Evansive
Посмотреть сообщение
Всем привет.

Как можно узнать 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();
}
Узнаю, например, при входе в транспортное средство.
Восстанавливать порядок ключей при удалении, как вариант.
Reply

Quote:
Originally Posted by Alexander_Petrov
Посмотреть сообщение
Восстанавливать порядок ключей при удалении, как вариант.
Вы с такими предложениями лучше сразу форум покиньте и программированием больше не занимайтесь!
Evansive, тебе нужно во время загрузки машин из БД сохранять их ключи в массиве и работать с ними.
Reply

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Evansive, тебе нужно во время загрузки машин из БД сохранять их ключи в массиве и работать с ними.
О, блин, заработало. Хотя, делал тоже самое часа 2 назад - не работало.

В любом случае спасибо, Stepashka.
Reply

Quote:
Originally Posted by Alexander_Petrov
Посмотреть сообщение
objects[] изменяется еще раз после создания объектов, возможно.
У меня как бы функция:
PHP код:
stock createobjects(destroy 0)
new 
objects[10];
objects[0] = CreateObject....
итак далее до 9
a если destroy 
1 то цикломкак я писаля их удаляюно не получается 
Reply

Quote:
Originally Posted by Gameyer
Посмотреть сообщение
У меня как бы функция:
PHP код:
stock createobjects(destroy 0)
new 
objects[10];
objects[0] = CreateObject....
итак далее до 9
a если destroy 
1 то цикломкак я писаля их удаляюно не получается 
Так ты objects прямо в функции объявляешь, что ли? Если нигде больше не используешь objects[], замени new на static, все будет работать.
Еще важно, чтобы функция не выглядела так:
pawn Код:
stock createobjects(destroy = 0)
{
    static objects[10];
    objects[0] = CreateObject(...);
    ...
    objects[9] = CreateObject(...);
    if(destroy == 1)
    {
        ...
    }
}
Reply

При использовании mailer.inc процесс samp-server.exe выключается. Ничего в лог не записывает.
Использую SendMail(Player[playerid][pEmail], "support@email.ru", "SAMP", "Pass", "текст письма");
Первое письмо отправляется отлично и приходит. А при отправлении второго оно отправляется, НО сразу после этого сервер выключается. Не знаете в чем может быть дело? Заранее спасибо.
Reply

На данный момент у меня сервер хранит все в файловом режиме, если я вдруг захочу перевести его на mySQL, то вижу только один вариант перехода с сохранностью всей инфы - параллельно с сохранением файлов, сохранять инфу в БД, а потом, когда все будет перенесено, уже грузить данные с БД. Насколько сильно будет заметна нагрузка на сервер сразу от двух сохранений и будет ли она заметна вообще?

Хотелось бы получить ответ от опытных пользователей.
Reply

Quote:
Originally Posted by ope
Посмотреть сообщение
При использовании mailer.inc процесс samp-server.exe выключается. Ничего в лог не записывает.
Использую SendMail(Player[playerid][pEmail], "support@email.ru", "SAMP", "Pass", "текст письма");
Первое письмо отправляется отлично и приходит. А при отправлении второго оно отправляется, НО сразу после этого сервер выключается. Не знаете в чем может быть дело? Заранее спасибо.
Я думаю, лучше обратиться к автору сего творения.
Reply

Quote:
Originally Posted by ope
Посмотреть сообщение
При использовании mailer.inc процесс samp-server.exe выключается. Ничего в лог не записывает.
Использую SendMail(Player[playerid][pEmail], "support@email.ru", "SAMP", "Pass", "текст письма");
Первое письмо отправляется отлично и приходит. А при отправлении второго оно отправляется, НО сразу после этого сервер выключается. Не знаете в чем может быть дело? Заранее спасибо.
бывает когда длинный ответ от сервера в print Лог выводится
Reply


Forum Jump:


Users browsing this thread: 24 Guest(s)