[Off] Funзхes "Lagger's"
#1

Gostaria muito de saber exatamente quais as funзхes que provocam Lag ao servidor.

Jб ouvi falar do OnPlayerUpdate ser usado de forma incorreta, mais de que forma estavam se referindo ??

E quais outros tipos de
CallBack's
Public's
Stocks
Variбveis
Enum's

E atй Timer's que podem provocar Lag ao servidor ?
Reply
#2

Pawn й single-thread.

O que causa LAG, й o que atrasa o processamento dos cуdigos.

Pois se o jogador A digita um comando e o jogador B digita tambйm, um vai ter que esperar o comando do outro processar completamente.

Entгo o que causa LAG, basicamente й o processamento demorado de dados.

Faзa alguns loops para testar...

pawn Код:
stock Teste()
{
    new teste = GetTickCount();
    for(new i; i < 1000; i++)
    {
        new varteste = 5;
        if(varteste == 5)
            print("A var teste й 5");
        else
            printf("A var teste й 6"); // isso nunca seria printado.
    }
}

//

stock Teste2()
{
    new teste = GetTickCount();
    for(new a; a < 1000; i++)
    {
        print("Olб, isto й um teste.");
        print("Olб, isto й um teste.");
        print("Olб, isto й um teste.");
        print("Olб, isto й um teste.");
        print("Olб, isto й um teste.");
    }
    printf("5000 prints em %d milissegundos.",GetTickCount() - teste);
}
Sobre timers, ele funciona como explicado acima, quando ele executar, durante a execuзгo dele, nada poderб ser executado junto. O tempo antes da execuзгo, aquele que vocк define quando criar um timer, nгo й processado pelo pawn.
Reply
#3

Quote:
Originally Posted by Gleisson_.
Посмотреть сообщение
CallBack's
Public's
CallBack"s e Public's sгo a mesma coisa, porem o nome correto й CallBack.

@topic

Qual script feito de maneira incorreta pode acarretar em lag.
Reply
#4

Eu nгo penso em uma maneira incorreta que cause LAG, mas sim vбrios erros acumulados.


Por exemplo, obter o nome do veнculo pelo modelo, dб pra fazer assim:

pawn Код:
public OnPlayerStateChange(playerid,newstate,oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
        new model[25];
        switch(GetVehicleModel(GetPlayerVehicleID(playerid)))
        {
            case 400: model = "Landstalker";
            case 401: model = "Landstalker";
            case 402: model = "Landstalker";           
            case 403: model = "Landstalker";
            case 404: model = "Landstalker";
            case 405: model = "Landstalker";
            // assim vai
        }
    }
    return 1;
}
Mas caso o player pegasse uma NRG-500, seriam feitas mais de 100 condiзхes, pois o id da NRG й 522.

Entгo da pra otimizar assim:

pawn Код:
// primeiro criamos uma array com o nomes de todos o veнculos.

new vehiclename[212][] = {
    "Landstalker","Bravura","Buffalo","Linerunner","Pereniel","Sentinel","Dumper","Firetruck","Trashmaster","Stretch","Manana","Infernus",
    "Voodoo","Pony","Mule","Cheetah","Ambulance","Leviathan","Moonbeam","Esperanto","Taxi","Washington","Bobcat","Mr Whoopee","BF Injection",
    "Hunter","Premier","Enforcer","Securicar","Banshee","Predator","Bus","Rhino","Barracks","Hotknife","Trailer","Previon","Coach","Cabbie",
    "Stallion","Rumpo","RC Bandit","Romero","Packer","Monster","Admiral","Squalo","Seasparrow","Pizzaboy","Tram","Trailer","Turismo","Speeder",
    "Reefer","Tropic","Flatbed","Yankee","Caddy","Solair","Berkley's RC Van","Skimmer","PCJ-600","Faggio","Freeway","RC Baron","RC Raider",
    "Glendale","Oceanic","Sanchez","Sparrow","Patriot","Quad","Coastguard","Dinghy","Hermes","Sabre","Rustler","ZR 350","Walton","Regina",
    "Comet","BMX","Burrito","Camper","Marquis","Baggage","Dozer","Maverick","News Chopper","Rancher","FBI Rancher","Virgo","Greenwood",
    "Jetmax","Hotring","Sandking","Blista Compact","Police Maverick","Boxville","Benson","Mesa","RC Goblin","Hotring Racer A","Hotring Racer B",
    "Bloodring Banger","Rancher","Super GT","Elegant","Journey","Bike","Mountain Bike","Beagle","Cropdust","Stunt","Tanker","RoadTrain",
    "Nebula","Majestic","Buccaneer","Shamal","Hydra","FCR-900","NRG-500","HPV-1000","Cement Truck","Tow Truck","Fortune","Cadrona","FBI Truck",
    "Willard","Forklift","Tractor","Combine","Feltzer","Remington","Slamvan","Blade","Freight","Streak","Vortex","Vincent","Bullet","Clover",
    "Sadler","Firetruck","Hustler","Intruder","Primo","Cargobob","Tampa","Sunrise","Merit","Utility","Nevada","Yosemite","Windsor","Monster A",
    "Monster B","Uranus","Jester","Sultan","Stratum","Elegy","Raindance","RC Tiger","Flash","Tahoma","Savanna","Bandito","Freight","Trailer",
    "Kart","Mower","Duneride","Sweeper","Broadway","Tornado","AT-400","DFT-30","Huntley","Stafford","BF-400","Newsvan","Tug","Trailer A","Emperor",
    "Wayfarer","Euros","Hotdog","Club","Trailer B","Trailer C","Andromada","Dodo","RC Cam","Launch","Police Car (LSPD)","Police Car (SFPD)",
    "Police Car (LVPD)","Police Ranger","Picador","S.W.A.T. Van","Alpha","Phoenix","Glendale","Sadler","Luggage Trailer A","Luggage Trailer B",
    "Stair Trailer","Boxville","Farm Plow","Utility Trailer"
};

// e entгo agora facilmente chegamos no nome do veнculo sem usar condiзхes:

public OnPlayerStateChange(playerid,newstate,oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
        GameTextForPlayer(playerid,vehiclename[GetVehicleModel(GetPlayerVehicleID(playerid)) - 400],3000,1);
    }
    return 1;
}
Esse mesmo truque pode ser ъtil com nome de jogadores.

й muito comum fazermos isto todas vez que queiramos pegar o nome de um player:

pawn Код:
stock GetName(playerid)
{
    new a[24];
    GetPlayerName(playerid,a,24);
    return a;
}

CMD:teste(playerid)
{
    new msg[50];
    format(msg,50,"Seu nome й %s",GetName(playerid));
    SendClientMessage(playerid,-1,msg);
    return 1;
}
Mas podemos economizar na criaзгo da varнavel e tambйm na obtenзгo do nome, toda vez que formos precisar desse nome desta forma:

pawn Код:
new pName[MAX_PLAYERS][24];

public OnPlayerConnect(playerid)
{
    GetPlayerName(playerid,pName[playerid],24);
    return 1;
}

CMD:teste(playerid)
{
    new msg[50];
    format(msg,50,"Seu nome й %s",pName[playerid]);
    SendClientMessage(playerid,-1,msg);
    return 1;
}
Espero que vocк aprenda algo com isso. Abraзos.
Reply
#5

@tonisaltolia:
Call Back's nгo sгo Publics criadas atravez de Forwards ?

@arakuta:
Muito obrigado estou tentando entender, e esse seu segundo Loop eu devo colocar no OnGameModeInit/OnFilterScriptInit correto ?

Isso se nгo me engano serve como Otimizaзгo!
Reply
#6

Quote:
Originally Posted by Gleisson_.
Посмотреть сообщение
@arakuta:
Muito obrigado estou tentando entender, e esse seu segundo Loop eu devo colocar no OnGameModeInit/OnFilterScriptInit correto ?

Isso se nгo me engano serve como Otimizaзгo!
Sim, sгo 'truques' de otimizaзгo.

Funзхes stocks sгo chamadas de alguma forma, portanto use-as em alguma callback ou comando...

Mas eu recomendo em OnGameMode/FilterScriptInit, pois desta forma vocк consegue ver o resultado sem precisar entrar no jogo.

pawn Код:
public OnFilterScriptInit()
{
    Teste2();
    return 1;
}
Reply
#7

Todas funзгo causam Lag se maus programadas, as mais perigosas sгo as que tem um atualizaзгo muito alta, como OnPlayerUpdate, OnUnoccupiedVehicleUpdate e etc.. Se vocк nгo souber programar seu GM vai dar um Lag do kralho..
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)