15.07.2010, 01:51
Оптимизация кода
15.07.2010, 19:53
Считается ли за оптимизацию замена всех переменных integer принимающих значение 0 или 1 на bool?
15.07.2010, 21:09
16.07.2010, 13:28
В любом случае, использование правильных и подходящих типов можно считать оптимизацией.
17.07.2010, 05:12
1. Считается ли за оптимизацию сохранение данных не в текстовые файлы, а в базы данных?
2. Замена двух TextDraw, одним с использованием ~n~?
3. Уничтожение Delete3DTextLabel, DestroyObject, DestroyPlayerObject, DestroyPickup, GangZoneDestroy, DestroyMenu, KillTimer в ф-ии OnGameModeExit?
4. Считается ли за оптимизацию сохранения в файлы только динамически меняющейся информации, а постоянную информацию хранить в массивах самого гейммода, т.е. тем самым уменьшить объём сохраняемых данных?
Нужно ли убивать разовые таймеры или вообще их убивать не то что не нужно, а даже нельзя?
2. Замена двух TextDraw, одним с использованием ~n~?
3. Уничтожение Delete3DTextLabel, DestroyObject, DestroyPlayerObject, DestroyPickup, GangZoneDestroy, DestroyMenu, KillTimer в ф-ии OnGameModeExit?
4. Считается ли за оптимизацию сохранения в файлы только динамически меняющейся информации, а постоянную информацию хранить в массивах самого гейммода, т.е. тем самым уменьшить объём сохраняемых данных?
Нужно ли убивать разовые таймеры или вообще их убивать не то что не нужно, а даже нельзя?
17.07.2010, 06:19
1. да (скорее всего это не оптимизация а ускорение работы т.к.это база даннных)
2. конечно же
3. лучше да
4. нет. динамическую лучше хранить в оперативной памяти а то постоянно записывать/читать из файла тоже много времени уходит
2. конечно же
3. лучше да
4. нет. динамическую лучше хранить в оперативной памяти а то постоянно записывать/читать из файла тоже много времени уходит
17.07.2010, 07:11
Вообще сохранять данные нужно только тогда когда ты знаешь что к ним долгое время не будет никакого обращения или сервер отключается.
Например сохранение игроков нужно производить только при дисконекте.
А таких вещей как бизнесы дома и им подобные только в OnGameModeExit
Например сохранение игроков нужно производить только при дисконекте.
А таких вещей как бизнесы дома и им подобные только в OnGameModeExit
17.07.2010, 08:10
17.07.2010, 09:13
17.07.2010, 09:44
сохранять данные на диске нужно не только "по выходу игрока/по завершению мода", а периодически в асинхронные интервалы времени. асинхронные, значит, не все в одно и то же время, а часть в одно время, часть в другое и так далее - можно отрегулировать таймерами.
сами данные в массивах-то у вас могут очень часто меняться, зато сохранение на диск с этих массивов будет происходит редко, например раз в пол часа.
можно делать интервалы сохранения чаще/реже в зависимости от загруженности сервера, зная кол-во онлайн игроков.
дайте волю воображению в оптимизации и вы только выиграете от этого.
сами данные в массивах-то у вас могут очень часто меняться, зато сохранение на диск с этих массивов будет происходит редко, например раз в пол часа.
можно делать интервалы сохранения чаще/реже в зависимости от загруженности сервера, зная кол-во онлайн игроков.
дайте волю воображению в оптимизации и вы только выиграете от этого.
10.08.2010, 11:33
Можно ли по этим данным как-нибудь сделать анализ на сколько отпимизирован мод. Если можно, то как?
Где можно почитать значения всех этих параметров при нажатии в игре F5?
Последние 2 параметра означают: чем выше значение, тем хуже или наоборот?
Про отптимизацию длины строковых переменных не видел, чтобы в этой теме обсуждалось хотя ******
в этой теме https://sampforum.blast.hk/showthread.php?tid=55261 целый мемуар написал . То, что длина строковой переменной 256 - это слишком много и это кощунство. Достаточно, как говорит ******, 128, хотя это не прокатит для переменных info диалогов. У меня в диалогах юзается строковые переменные длиной до 3100.
Ещё вопросик немного не по теме, хотя внешняя оптимизация, тоже оптимизация, как я понял из постов выше.
Кто-нибудь писал ф-ию по правильной табуляции при различных символах в строке одной и той же длинны
Например, чтобы ровно выставить строки после имен игроков, допустим как на этом скрине.
10.08.2010, 12:15
Шрифт, который используется в диалогах не является моноширным. Поэтому кол-во пробелов или табуляций в такой таблице правильно выставить весьма сложно. По-моему легче всего заюзать табуляции. Но чтобы достигнуть максимально лучшего результата, нужно знать величину табуляции в окне диалога, а также знать ширину каждого столбца и еще высчитывать длину каждого значения в этом столбце, чтобы не было неверных сдвигов.
Можно найти какое-то решение только тестами. Задача как минимум имеет рейтинг "геморой", но выполнима. Однако времени надо много на эту оптимизацию.
Кстати, показан слишком длинный список, который желательно разбить на неск страниц ( "OK", "Next >" ) или сделать действительно списком.
---
Есть простое правило - использовать ту длину строки/массива, которая реально будет использоваться + небольшой запасик. Например, если в чате не может быть строки длинней 128, а вы хотите в чате написать только " * Привет, имя_игрока", то длина строки не должна превышать 40. В диалогах действительно используются длинные строки и ничего страшного, главное, используйте почти всю длину или сократите ее.
Можно найти какое-то решение только тестами. Задача как минимум имеет рейтинг "геморой", но выполнима. Однако времени надо много на эту оптимизацию.
Кстати, показан слишком длинный список, который желательно разбить на неск страниц ( "OK", "Next >" ) или сделать действительно списком.
---
Есть простое правило - использовать ту длину строки/массива, которая реально будет использоваться + небольшой запасик. Например, если в чате не может быть строки длинней 128, а вы хотите в чате написать только " * Привет, имя_игрока", то длина строки не должна превышать 40. В диалогах действительно используются длинные строки и ничего страшного, главное, используйте почти всю длину или сократите ее.
13.08.2010, 11:26
Можно ли как-то по другому оптимизировать или написать данный код?
pawn Код:
new list_questions[MAX_PLAYERS][10];//список случайных неодинаковых 10 вопросов
new index;
while(index < 10)
{
list_questions[playerid][index] = random( 19 );
new Found;
for(new i=0; i<10; i++)
{
if( list_questions[playerid][index] == list_questions[playerid][i] && index != i)
{
Found = 1; break;
}
}
if(!Found) index++;
}
13.08.2010, 11:42
Можно так сделать:
pawn Код:
new index;
while(index < 10)
{
list_questions[playerid][index] = random( 19 );
new Found;
for(new i=0; i<index; i++)
{
if( list_questions[playerid][index] == list_questions[playerid][i])
{
Found = 1; break;
}
}
if(!Found) index++;
}
15.08.2010, 12:22
Вот занялся конкретной оптимизацией своего мода,но столкнулся с замутками,как будет лучше и быстрее работать?..так:
или так:
for_pl(i) - это макрос цикла,думаю сразу понятно)))...
pawn Код:
for_pl(i)
{
if(!IsPlayerConnected(i))continue;
if(TaxiAccepted[i] == 999)continue;
if(TaxiAccepted[i] != playerid)continue;
TaxiAccepted[i] = 999;
GameTextForPlayer(i, "~w~Taxi Caller~n~~r~Left the game", 5000, 1);
TaxiCallTime[i] = 0;
DisablePlayerCheckpoint(i);
}
pawn Код:
for_pl(i)
{
if(!IsPlayerConnected(i) || TaxiAccepted[i] == 999 || TaxiAccepted[i] != playerid)continue;
TaxiAccepted[i] = 999;
GameTextForPlayer(i, "~w~Taxi Caller~n~~r~Left the game", 5000, 1);
TaxiCallTime[i] = 0;
DisablePlayerCheckpoint(i);
}
15.08.2010, 12:44
второе канеш правильней, если строка недлинная. Если получается длинная, придется переносить все так, чтобы смотрелось читабельно
еще совет заменить все ТАБЫ на пробелы, если у тебя используются ТАБЫ, а также сделать в коде правильные отступы
еще совет заменить все ТАБЫ на пробелы, если у тебя используются ТАБЫ, а также сделать в коде правильные отступы
15.08.2010, 12:56
всмысле ТАБЫ?...и правильные отступы я понимаю для читабельности?....или чтобы варнингов не вылезало что код не правильно построен?
p.s. Спасибо)
p.s. Спасибо)
15.08.2010, 13:12
PHP код:
for_pl(i)
{
if ( !IsPlayerConnected(i)
|| TaxiAccepted[i] == 999
|| TaxiAccepted[i] != playerid ) continue;
TaxiAccepted[i] = 999;
TaxiCallTime[i] = 0;
DisablePlayerCheckpoint(i);
GameTextForPlayer(i, "~w~Taxi Caller~n~~r~Left the game", 5000, 1);
}
16.08.2010, 07:53
помогите с кодом, за лето пробухал все что можно.
вообщем пишу такую вещь - что при смене анимации показывает новую анимацию игрока.
очень нужно для античита, а то ужасно неудобно когда тебе через OnPlayerUpdate флудит 20 раз в секунду.
но чо-то не работает.
кстати КЭП, почему в браузерах табуляция не работает?
Quote:
public OnPlayerUpdate(playerid) { new msg[128], animlib[32]; if(GetPlayerAnimationIndex(playerid) && IsPlayerAdmin(playerid)) { GetAnimationName(GetPlayerAnimationIndex(playerid) ,animlib,32,animNew[playerid],32); printf("Anim New - %s, Anim Old - %s",animNew[playerid],animOld[playerid]); if(!strcmp(animOld[playerid],animNew[playerid], true)) { format(msg, 128, "Running anim: %s - %s", animlib, animOld[playerid]); SendClientMessage(playerid, COLOR_WHITE, msg); format(animOld[playerid], 32, "%s", animNew[playerid]); SetPlayerHealth(playerid,1000); } } return 1; } |
очень нужно для античита, а то ужасно неудобно когда тебе через OnPlayerUpdate флудит 20 раз в секунду.
но чо-то не работает.
кстати КЭП, почему в браузерах табуляция не работает?
16.08.2010, 08:00
выводи в секундный таймер твой код,будет флудить 1 раз в секунду
« Next Oldest | Next Newest »
Users browsing this thread: 5 Guest(s)