Bom dia galera!
venho hoje com mais um tutorial simples, mais do coraзгo, e vai ajudar muito vocкs!
INTRODUЗГO:
Bom muito de vocкs ja foram fazer alguma logica, simples pode ser atй de um comando, mas ficou aquele cуdigo enorme e monstro que atй pode ser feio, alguns ainda nгo sabe diminuir e otimizar seu codigo, para ficar algo bonito organizado.
NOTAS:
venho hoje com mais um tutorial simples, mais do coraзгo, e vai ajudar muito vocкs!
INTRODUЗГO:
Bom muito de vocкs ja foram fazer alguma logica, simples pode ser atй de um comando, mas ficou aquele cуdigo enorme e monstro que atй pode ser feio, alguns ainda nгo sabe diminuir e otimizar seu codigo, para ficar algo bonito organizado.
NOTAS:
- eu recomendo que vocкs sabem pelo-menos o basico de ScanF, para eu nгo precisar explicar!
- por favor, se forem usar em outro lugar este tutorial, coloquem os crйditos!
- Se vocкs acharem coisa parecidas, por favor me perdoem, eu nгo copiei de ninguйm, fiz esta explicaзгo sozinho,deve ser alguйm que teve a ideia muito parecida!
- se forem mostrar para alguйm, me marque nos crйditos, eu ficarei muito feliz por isso!
- se vocкs melhorarem o cуdigo, nгo guarde para si! coloque aqui para compartilhar seu conhecimento! ^^
O QUE VAMOS APRENDER?
A deixar o seu codigo, grotescamente menor, organizado e otimizado, sem perder a funcionalidade, e talvez atй ganhar mais desempenho
PRATICAS & CODE:
Situaзгo 1:
Vocк fez um comando de teleporte para esta logado na rcon, porem este codigo ta muito grande e estranho,
dificil de entrepretar...
PHP код:A deixar o seu codigo, grotescamente menor, organizado e otimizado, sem perder a funcionalidade, e talvez atй ganhar mais desempenho
PRATICAS & CODE:
Situaзгo 1:
Vocк fez um comando de teleporte para esta logado na rcon, porem este codigo ta muito grande e estranho,
dificil de entrepretar...
- Código:
if(strcmp(cmd, "/ir", true) == 0)
{
if(pAdmin[playerid] > 0) //N1
{
new plid, Float:X, Float:Y, Float:Z;
if(sscanf(cmdtext, "s[4]d", cmd, plid))//N2
{
SendClientMessage(playerid, Vermelho, "Digite: /ir [id]");
return 1;
}
if(IsPlayerConnected(plid))//N3
{
GetPlayerPos(plid, X, Y, Z);
SetPlayerInterior(playerid, GetPlayerInterior(plid));
if(IsPlayerInAnyVehicle(playerid))//N4
{
SetVehiclePos(GetPlayerVehicleID(playerid), X+2, Y+2, Z);
PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
}
else
{
SetPlayerPos(playerid, X+2, Y+2, Z);//N5
}
format(string, sizeof(string), "O(A) ADM %s (%d) foi atй sua posiзгo para ajuda-lo(a)!", GetPlayerNameEx(playerid), playerid);
SendClientMessage(plid, tcadm, string);
}
else
{
SendClientMessage(playerid, Vermelho, "Jogador Nгo Conectado!");//N3
}
}
else
{
SendClientMessage(playerid, Vermelho, "sem permissгo!");//N1
}
return 1;
}
nуs podemos retirar algumas chaves e mover coisas de lugar!
PHP код:- Código:
if(strcmp(cmd, "/ir", true) == 0)
{
new plid, Float:X, Float:Y, Float:Z;
if(pAdmin[playerid] == 0) return SendClientMessage(playerid, Vermelho, "sem permissгo!");//N1
if(sscanf(cmdtext, "s[4]u", cmd, plid)) return SendClientMessage(playerid, Vermelho, "Digite: /ir [nick/id]");//N2
if(!IsPlayerConnected(plid)) return SendClientMessage(playerid, Vermelho, "Jogador Nгo Conectado!");//N3
GetPlayerPos(plid, X, Y, Z);
SetPlayerInterior(playerid, GetPlayerInterior(plid));
if(IsPlayerInAnyVehicle(playerid)) SetVehiclePlayerPos(playerid, X,Y,Z);//N4
else SetPlayerPos(playerid, X+2, Y+2, Z);//N5
format(string, sizeof(string), "O(A) ADM %s (%d) foi atй sua posiзгo para ajuda-lo(a)!", GetPlayerNameEx(playerid), playerid);
return SendClientMessage(plid, tcadm, string);
}
PHP код:
- Código:
SetVehiclePlayerPos(playerid, Float:X,Float:Y,Float:Z)
{
SetVehiclePos(GetPlayerVehicleID(playerid), X+2, Y+2, Z);
PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);//N4
}
Quote:
N1->Antes: sу executava a funзгo, se fosse admin, se nгo, aparecia uma mensagem sem permissгo! N1->Depois: agora se nгo for admin, mostra a mensagem e cancela o comando, caso for, roda diretamente o CODE! N1->Conclusгo: Pode melhorar um pouco do desempenho, e retirou uma parte inutil, e separada do codigo, alem de resumir 7 linhas para 1! N2->Antes: Consumia muitas linhas de codigo, e sу podia teleportar para determinado ID! (aceitava sу inteiros N2->Depois: Ficou mais compactado, alem de agora aceita NICK ou ID do jogador a se teleportado ("d"-> inteiros | "u"-> Inteiros ou nick que sera convertido para id inteiro) N2->Conclusгo: Melhorou a funcionalidade, alem de que agora o codigo foi resumido de 4 linhas para 1! N3->Antes: Sу executava a funзгo se o player estive-se Conectado, se nгo, aparecia uma mensagem sobre o jogador nгo estar online! N3->Depois: O codigo funicona normalmente, caso o player nгo estiver online, exibe a mensagem e cancela o comando! N3->Conclusгo: Pode melhorar um pouco do desempenho, e retirou muitas linhas desnecessarias, alem de resumir junto com N4 & N5 de 21 linhas para 5! N4->Antes: Consumia grande espaзo, mesmo sendo funзoes de nome pequeno e da mesma coisa! N4->Depois: Ficou tudo na mesma linha, entre { } para que ler as 3 funзхes na mesma linha, e assim o espaзo ficou bem mais aproveitado! N4->Conclusгo: com isso o codigo deu uma melhorada monstra, e pode reduzir 5 linhas para 1! N4->Motivo:As 3 funзхes sгo respectivas do teleporte, entгo desde que vocк tenha pequenas funзхes de mesmo objetivo, vocк pode unilas! N4->Alteraзгo:resolvi separar a funзгo, por que os bonzinhos, se sentirгo muito ofendido com 2 linhas em uma, e comeзaram a difamar o tutorial! N5->Antes: Um abrimento e fechamento de chaves desnecessarias, e um retorn do inteiro 1, com um grande disperdicio de espaзo! N5->Depois: Como existe uma funзгo sу vocк nгo precisa de { } em sua funзгo, vocк pode simplesmente colocar na frente, que vai ser intepetrado como funзгo de determinada condiзгo. NOFF-> SendClientMessage(...): Return Values: 1: The function executed successfully. Success is reported when the string is over 144 characters, but the message won't be sent. 0: The function failed to execute. The player is not connected. isto й como o player deu o comando entгo ele deve estбr online, e ira retornar 1, que no caso nгo mostra-ra a mensagem: "Server UNKNOWN Command" |
Situaзгo 2:
Vocк fez estб fazendo algo que precisa saber arma que o player estб segurando, pode ser um antixiter para kicka-lo talvez
mas tome cuidado com o jeito que for fazer.
PHP код:Vocк fez estб fazendo algo que precisa saber arma que o player estб segurando, pode ser um antixiter para kicka-lo talvez
mas tome cuidado com o jeito que for fazer.
- Código:
//jeito errado:
if(GetPlayerWeapon(playerid) == ... || GetPlayerWeapon(playerid) == ... || GetPlayerWeapon(playerid) == ...)
Bom, espero que vocк tenha percebido o erro, pode afetar muito no desempenho, e desperdicar muita banda & memoria nesta situaзгo
PHP код:- Código:
//jeito correto:
new arma = GetPlayerWeapon(playerid);
if(arma == ... || arma == ... || arma == ...)
Quote:
N->Antes: vocк estavб testando requesitando muitas vezes a mesma coisa em uma condiзгo, entгo recebia muitos pacotes duplicados. N->Depois: agora estб reduzido o consumo de banda, pуs й feito somente uma vez a captaзгo da arma do jogador |
Situaзгo 3:
String й algo delecidado, deve se ter cuidado com ela, й o principal viгo do server mal otimizado, onde um simples numero, pode causar um delay de quase 1 segundo, й imporante sempre estar tudo bem planejado e calculado, para desfrutar do melhor.
PHP код:String й algo delecidado, deve se ter cuidado com ela, й o principal viгo do server mal otimizado, onde um simples numero, pode causar um delay de quase 1 segundo, й imporante sempre estar tudo bem planejado e calculado, para desfrutar do melhor.
- Código:
//jeito ruim
stock GetPlayerNameEx(playerid)
{
new playerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, playerName, sizeof(playerName));
return playerName;
}
Bom, algo desnessario captar mais de 1 vez o nick do jogador, visto que ele nгo pode alterar nome pelo client, somente pelo servidor,
no caso fazer 1 requesiгo e armazenar o valor seria melhor, e vocк pode alterar o nome, em conjuto com o Sv....
PHP код:no caso fazer 1 requesiгo e armazenar o valor seria melhor, e vocк pode alterar o nome, em conjuto com o Sv....
- Código:
//corretamente
new nome[MAX_PLAYERS][MAX_PLAYER_NAME];
public OnPlayerConnect(playerid)
{
GetPlayerName(playerid,nome[playerid],24);
return 1;
}
Quote:
N->Antes: vocк estavб uma requisгo que iria sempre ser a mesma coisa, e perdendo muito memoria, pois string sгo vilгo nisso. N->Depois: agora vocк solicia somente uma vez o nick do jogador, e mantem armazendo captar quando precisar, com isso todo o GM agradece, por causa q o nome do jogador й muito utilizado em todo ele! |
Quote:
Originally Posted by RazorGuigo Se vocкs gostaram disso, me avisem que eu posso trazer mais situaзхes! |
CREDITOS:
RazorG: Situação 1
Jelly23: Situação 2 & 3
RazorG: Situação 1
Jelly23: Situação 2 & 3