PDA

Просмотр полной версии : [Вопрос] Оптимизация



codeo
30.05.2014, 15:33
Подскажите пожалуйста можно ли оптимизировал этот таймер?



public scriptSync(playerid)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerNPC(i))
{
if(IsPlayerInAnyVehicle(i) && NoNeed(GetPlayerVehicleID(i)))
{
new Float:MaxZ;
GetVehicleVelocity(GetPlayerVehicleID(i),FP_Speed_Car_C[i][0],FP_Speed_Car_C[i][1],FP_Speed_Car_C[i][2]);
FP_Speed_Car[i]=floatround(floatsqroot(FP_Speed_Car_C[i][0]*FP_Speed_Car_C[i][0]+FP_Speed_Car_C[i][1]*FP_Speed_Car_C[i][1]+FP_Speed_Car_C[i][2]*FP_Speed_Car_C[i][2])*200.0);
if(FP_Speed_Car_C[i][2] > MaxZ +0.10 || FP_Speed_Car_C[i][2] < MaxZ -0.10) return 0;

if((FP_Speed_Car[i]-FP_Speed_Car_1[i])>100)
{
if(GetPlayerState(i)!=PLAYER_STATE_SPECTATING)
{
new string[256];
format(string, sizeof(string), "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[Спидхак]",playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
}
}
else FP_Speed_Car_1[i]=FP_Speed_Car[i];
}
}
}

for(new i=0; i<MAX_PLAYERS; i++)
{

new AnimLib[30], AnimName[30];
GetAnimationName(GetPlayerAnimationIndex(i), AnimLib, sizeof(AnimLib), AnimName, sizeof(AnimName));
if(GetPlayerSpeed(i) > 60 && strcmp(AnimLib, "SWIM", true) == 0 && strcmp(AnimName, "SWIM_crawl", true) == 0)
{
new string[256];
format(string, sizeof(string), "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[FLY HACK]",playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
}
}

for(new i; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i) && countpos[i] != 0)
{
countpos[i]++;
if(countpos[i] == 4)
{
countpos[i] = 0;
DestroyObject(Flame[i][0]);
DestroyObject(Flame[i][1]);
}
}
}
return true;
}

Salvacore
30.05.2014, 15:40
Юзай форич

DeimoS
30.05.2014, 15:46
Можно. Объединить весь код в один цикл + использовать foreach + убрать лишние массивы, используя для хранения текста 1 (при том число ячеек так же следует выделять адекватное, а не 256 и т.п.)

codeo
30.05.2014, 16:06
DeimoS, я не могу понять как сделать все под один цикл, подскажи пожалуйста
и еще вопрос цвет, например {ffffff} влияет на кол-во ячеек?

Salvacore
30.05.2014, 16:57
public scriptSync(playerid){
foreach(Player, i){
if(!IsPlayerNPC(i)){
if(IsPlayerInAnyVehicle(i) && NoNeed(GetPlayerVehicleID(i))){
new
Float:MaxZ
;
GetVehicleVelocity(GetPlayerVehicleID(i),FP_Speed_Car_C[i][0],FP_Speed_Car_C[i][1],FP_Speed_Car_C[i][2]);
FP_Speed_Car[i]=floatround(floatsqroot(FP_Speed_Car_C[i][0]*FP_Speed_Car_C[i][0]+FP_Speed_Car_C[i][1]*FP_Speed_Car_C[i][1]+FP_Speed_Car_C[i][2]*FP_Speed_Car_C[i][2])*200.0);
if(FP_Speed_Car_C[i][2] > MaxZ +0.10 || FP_Speed_Car_C[i][2] < MaxZ -0.10) return 0;
if((FP_Speed_Car[i]-FP_Speed_Car_1[i])>100){
if(GetPlayerState(i)!=PLAYER_STATE_SPECTATING){
static const
fmt_str[] = "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[Спидхак]"
;
const
fmt_size = sizeof(fmt_str)-2+MAX_PLAYER_NAME-2+4
;
new
string[fmt_size]
;
format(string, sizeof(string),fmt_str,playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
}
}
else FP_Speed_Car_1[i]=FP_Speed_Car[i];
}
}
}
foreach(Player, i){
new
AnimLib[30],
AnimName[30]
;
GetAnimationName(GetPlayerAnimationIndex(i), AnimLib, sizeof(AnimLib), AnimName, sizeof(AnimName));
if(GetPlayerSpeed(i) > 60 && strcmp(AnimLib, "SWIM", true) == 0 && strcmp(AnimName, "SWIM_crawl", true) == 0){
static const
fmt_str0[] = "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[FLY HACK]"
;
const
fmt_size0 = sizeof(fmt_str0)-2+MAX_PLAYER_NAME-2+4
;
new
string[fmt_size0]
;
format(string, sizeof(string),fmt_str0,playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
}
}
foreach(Player, i){
if(IsPlayerConnected(i) && countpos[i] != 0){
countpos[i]++;
if(countpos[i] == 4){
countpos[i] = 0;
DestroyObject(Flame[i][0]);
DestroyObject(Flame[i][1]);
}
}
}
return 1;
}


Компилятор сам считает ячейки.

- - - Добавлено - - -

Проверь.

DeimoS
30.05.2014, 20:34
DeimoS, я не могу понять как сделать все под один цикл, подскажи пожалуйста
и еще вопрос цвет, например {ffffff} влияет на кол-во ячеек?

Ну так все 3 цикла прогоняют игроков же. В общем, вот:

public scriptSync()
{
new string[98+MAX_PLAYER_NAME+3], AnimLib[32], AnimName[32];
foreach(new i: Player)
{
if(IsPlayerNPC(i)) continue;
if(IsPlayerInAnyVehicle(i) && NoNeed(GetPlayerVehicleID(i)))
{
new Float:MaxZ;
GetVehicleVelocity(GetPlayerVehicleID(i), FP_Speed_Car_C[i][0], FP_Speed_Car_C[i][1], FP_Speed_Car_C[i][2]);
FP_Speed_Car[i] = floatround(floatsqroot(FP_Speed_Car_C[i][0] * FP_Speed_Car_C[i][0] + FP_Speed_Car_C[i][1] * FP_Speed_Car_C[i][1] + FP_Speed_Car_C[i][2] * FP_Speed_Car_C[i][2]) * 200.0);
if(FP_Speed_Car_C[i][2] > MaxZ + 0.10 || FP_Speed_Car_C[i][2] < MaxZ - 0.10){}
else
{
if((FP_Speed_Car[i] - FP_Speed_Car_1[i]) > 100)
{
if(GetPlayerState(i) != PLAYER_STATE_SPECTATING)
{
format(string, sizeof(string), "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[Спидхак]", playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
}
}
else FP_Speed_Car_1[i] = FP_Speed_Car[i];
}
}
GetAnimationName(GetPlayerAnimationIndex(i), AnimLib, sizeof(AnimLib), AnimName, sizeof(AnimName));
if(GetPlayerSpeed(i) > 60 && strcmp(AnimLib, "SWIM", true) == 0 && strcmp(AnimName, "SWIM_crawl", true) == 0)
{
format(string, sizeof(string), "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[FLY HACK]", playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
}
if(countpos[i])
{
countpos[i]++;
if(countpos[i] == 4)
{
countpos[i] = 0;
DestroyObject(Flame[i][0]);
DestroyObject(Flame[i][1]);
}
}
}
return true;
}
playerid там совсем не к месту

codeo
30.05.2014, 21:09
DeimoS,Salvador Спасибо вам, а что изменится если я в паблик добавлю playerid ? ( scriptSync(playerid) )

Salvacore
30.05.2014, 21:16
DeimoS,Salvador Спасибо вам, а что изменится если я в паблик добавлю playerid ? ( scriptSync(playerid) )
ничего.

А зачем?

codeo
30.05.2014, 21:37
Пришлось заменить античит на спидхак, но теперь проблема, работает только античит на спидхак, а все что ниже не работает..





public scriptSync()
{
new string[98+MAX_PLAYER_NAME+3], AnimLib[32], AnimName[32];
foreach(new i: Player)
{
if(IsPlayerNPC(i)) continue;
if(IsPlayerConnected(i) && (GetPlayerState(i) == PLAYER_STATE_DRIVER) && NoNeed(GetPlayerVehicleID(i)) && (GetSpeedKM(i) > 250))
{
format(string, sizeof(string), "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[Спидхак]",playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
//--------------------------------------------------------------
GetAnimationName(GetPlayerAnimationIndex(i), AnimLib, sizeof(AnimLib), AnimName, sizeof(AnimName));
if(GetPlayerSpeed(i) > 60 && strcmp(AnimLib, "SWIM", true) == 0 && strcmp(AnimName, "SWIM_crawl", true) == 0)
{
format(string, sizeof(string), "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[FLY HACK]", playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
}
//--------------------------------------------------------------
if(countpos[i])
{
countpos[i]++;
if(countpos[i] == 4)
{
countpos[i] = 0;
DestroyObject(Flame[i][0]);
DestroyObject(Flame[i][1]);
}
}
}
}
return true;
}

DeimoS
30.05.2014, 21:39
DeimoS,Salvador Спасибо вам, а что изменится если я в паблик добавлю playerid ? ( scriptSync(playerid) )

На параметр будет выделяться 4 байта и всё. При том впустую
И кстати, по поводу

и еще вопрос цвет, например {ffffff} влияет на кол-во ячеек?
Да, влиять будет. Любые символы, кроме символов-заполнителей, должны где-то храниться, ведь так? Символы-заполнители заменяются данными, поэтому их учитывать не обязательно, а вот остальное... Даже для пробелов нужны ячейки

- - - Добавлено - - -


Заменил античит на спидхак, но теперь проблема, работает только античит на спидхак, а все что ниже не работает..





public scriptSync()
{
new string[98+MAX_PLAYER_NAME+3], AnimLib[32], AnimName[32];
foreach(new i: Player)
{
if(IsPlayerNPC(i)) continue;
if(IsPlayerConnected(i) && (GetPlayerState(i) == PLAYER_STATE_DRIVER) && NoNeed(GetPlayerVehicleID(i)) && (GetSpeedKM(i) > 250))
{
format(string, sizeof(string), "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[Спидхак]",playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
//--------------------------------------------------------------
GetAnimationName(GetPlayerAnimationIndex(i), AnimLib, sizeof(AnimLib), AnimName, sizeof(AnimName));
if(GetPlayerSpeed(i) > 60 && strcmp(AnimLib, "SWIM", true) == 0 && strcmp(AnimName, "SWIM_crawl", true) == 0)
{
format(string, sizeof(string), "{FFFF00}Игрок {FF0000}%s{00FFFF}[%d]{FFFF00}: - Подозревается в использовании - {00FF00}[FLY HACK]", playerName(i), i);
SendMessageToAdmins(red, string);
SendClientMessage(i, red, "На сервере запрещены читы!");
}
//--------------------------------------------------------------
if(countpos[i])
{
countpos[i]++;
if(countpos[i] == 4)
{
countpos[i] = 0;
DestroyObject(Flame[i][0]);
DestroyObject(Flame[i][1]);
}
}
}
}
return true;
}

Естественно работать не будет. Вы совсем не так вставили... Я же дал готовый код

codeo
30.05.2014, 21:42
Дак я все сделал по твоему примеру, заменил лишь античит на спидхак, т.к тот выдавал ложные срабатывания.
.....
Кажется я понял свою ошибку

DeimoS
30.05.2014, 22:15
1) Проверку на онлайн стоит вообще убрать. В foreach она не требуется.
2) Вы вставили все античиты в античитн на спидхак. Точнее в условие античита на спидхак (нахождение игрока в авто). Потому они будут срабатывать только когда игрок в авто