Re: Скриптинг курилка -
GameMan - 20.03.2013
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
|
Re: Скриптинг курилка -
GameMan - 20.03.2013
Делаю поиск онлайн и оффлайн игроков в диалоге, и думаю... А как будет быстрее?
Сохранять ID и ники найденных игроков в массив и при нажатии вытаскивать из массива.
Или же сохранять данные с поиска в базу данных, а при нажатии вытаскивать их оттуда?
Re: Скриптинг курилка -
eakwarp - 20.03.2013
Quote:
Originally Posted by GameMan
Делаю поиск онлайн и оффлайн игроков в диалоге, и думаю... А как будет быстрее?
Сохранять ID и ники найденных игроков в массив и при нажатии вытаскивать из массива.
Или же сохранять данные с поиска в базу данных, а при нажатии вытаскивать их оттуда?
|
В массив конечно будет быстрее.
Re: Скриптинг курилка -
OKStyle - 20.03.2013
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 отсутствует, то ник не вставляется в сабж (так задумано). Ну и нестабильно работает при длинных строках. Где мы дно?
Re: Скриптинг курилка -
kamilot73 - 20.03.2013
Quote:
Originally Posted by eakwarp
В массив конечно будет быстрее.
|
Но ресурсов "ай-ай" как будет много уходить

Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.)
Re: Скриптинг курилка -
Alexander_Petrov - 20.03.2013
Quote:
Originally Posted by kamilot73
Но ресурсов "ай-ай" как будет много уходить  Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.)
|
Смотря что является приоритетом.
Re: Скриптинг курилка -
eakwarp - 20.03.2013
Quote:
Originally Posted by kamilot73
Но ресурсов "ай-ай" как будет много уходить  Мне кажется, лучше чуточку подождать ответа от БД и вывести клиенту.)
|
А бд у нас видимо никаких ресурсов не потребляет, отлично...
Re: Скриптинг курилка -
kamilot73 - 20.03.2013
Quote:
Originally Posted by eakwarp
А бд у нас видимо никаких ресурсов не потребляет, отлично...
|
Ну если зарегистрированных аккаунтов свыше 10к, массив держать?
Re: Скриптинг курилка -
White_116 - 20.03.2013
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(PlayerName, MAX_PLAYER_NAME + 20, "{%06x}%s{FFFFFF}", GetPlayerColor(strval(tmp)) >>> 8, PlayerName);
Re: Скриптинг курилка -
Mutha_X - 20.03.2013
Quote:
Originally Posted by kamilot73
Ну если зарегистрированных аккаунтов свыше 10к, массив держать?
|
Ой, как будто свыше 6к Байт на ОЗУ жалко и прироста времени компиляции на приличное значение xD
Re: Скриптинг курилка -
Evansive - 28.03.2013
Всем привет.
Как можно узнать 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();
}
Узнаю, например, при входе в транспортное средство.
Re: Скриптинг курилка -
Alexander_Petrov - 28.03.2013
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();
}
Узнаю, например, при входе в транспортное средство.
|
Восстанавливать порядок ключей при удалении, как вариант.
Re: Скриптинг курилка -
Stepashka - 28.03.2013
Quote:
Originally Posted by Alexander_Petrov
Восстанавливать порядок ключей при удалении, как вариант.
|
Вы с такими предложениями лучше сразу форум покиньте и программированием больше не занимайтесь!
Evansive, тебе нужно во время загрузки машин из БД сохранять их ключи в массиве и работать с ними.
Re: Скриптинг курилка -
Evansive - 28.03.2013
Quote:
Originally Posted by Stepashka
Evansive, тебе нужно во время загрузки машин из БД сохранять их ключи в массиве и работать с ними.
|
О, блин, заработало. Хотя, делал тоже самое часа 2 назад - не работало.
В любом случае спасибо, Stepashka.
Re: Скриптинг курилка -
Gameyer - 28.03.2013
Quote:
Originally Posted by Alexander_Petrov
objects[] изменяется еще раз после создания объектов, возможно.
|
У меня как бы функция:
PHP код:
stock createobjects(destroy = 0)
new objects[10];
objects[0] = CreateObject....
итак далее до 9
a если destroy = 1 то циклом, как я писал, я их удаляю, но не получается
Re: Скриптинг курилка -
Alexander_Petrov - 28.03.2013
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)
{
...
}
}
Re: Скриптинг курилка -
ope - 28.03.2013
При использовании mailer.inc процесс samp-server.exe выключается. Ничего в лог не записывает.
Использую SendMail(Player[playerid][pEmail], "support@email.ru", "SAMP", "Pass", "текст письма");
Первое письмо отправляется отлично и приходит. А при отправлении второго оно отправляется, НО сразу после этого сервер выключается. Не знаете в чем может быть дело? Заранее спасибо.
Re: Скриптинг курилка -
stabker - 28.03.2013
На данный момент у меня сервер хранит все в файловом режиме, если я вдруг захочу перевести его на mySQL, то вижу только один вариант перехода с сохранностью всей инфы - параллельно с сохранением файлов, сохранять инфу в БД, а потом, когда все будет перенесено, уже грузить данные с БД. Насколько сильно будет заметна нагрузка на сервер сразу от двух сохранений и будет ли она заметна вообще?
Хотелось бы получить ответ от опытных пользователей.
Re: Скриптинг курилка -
OKStyle - 29.03.2013
Quote:
Originally Posted by ope
При использовании mailer.inc процесс samp-server.exe выключается. Ничего в лог не записывает.
Использую SendMail(Player[playerid][pEmail], "support@email.ru", "SAMP", "Pass", "текст письма");
Первое письмо отправляется отлично и приходит. А при отправлении второго оно отправляется, НО сразу после этого сервер выключается. Не знаете в чем может быть дело? Заранее спасибо.
|
Я думаю, лучше обратиться к автору сего творения.
Re: Скриптинг курилка -
Jon_De - 29.03.2013
Quote:
Originally Posted by ope
При использовании mailer.inc процесс samp-server.exe выключается. Ничего в лог не записывает.
Использую SendMail(Player[playerid][pEmail], "support@email.ru", "SAMP", "Pass", "текст письма");
Первое письмо отправляется отлично и приходит. А при отправлении второго оно отправляется, НО сразу после этого сервер выключается. Не знаете в чем может быть дело? Заранее спасибо.
|
бывает когда длинный ответ от сервера в print Лог выводится