Portal SAMP
[Tutorial] OTIMIZAÇÕES DE LOOPINGS - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Guias e Tutoriais (https://portalsamp.com/forumdisplay.php?fid=7)
+--- Tópico: [Tutorial] OTIMIZAÇÕES DE LOOPINGS (/showthread.php?tid=1308)



OTIMIZAÇÕES DE LOOPINGS - nilat - 23/06/2021

Recentemente percebi que não existem bons tópicos de dicas para otimizações na linguagem Pawn.
Decidi criar esse tópico, para que quem souber, possa responder aqui com a sua contribuição.


Bom, lá vai a minha: Otimização de Loop's

Código:
// A INCLUDE a_samp.inc NATURALMENTE DEFINE QUE O MAXIMO DE JOGADORES QUE O SAMP SUPORTA É 1000(MIL) SLOTS
// E SE VOCÊ NÃO REDEFINIR O MAXIMO DE PLAYERS OU USAR OUTRA FORMA DE LOOP, EM GRANDE ESCALA O SERVIDOR IRÁ LAGAR E DAR RT.

//VAMOS LÁ
#include <a_samp> //include base
#include <foreach> //include para loops/listas


//INICIALMENTE, PARA CRIAR UM LOOP PARA TODOS OS JORADORES, FAZEMOS DESSA FORMA:
for(new i; i < MAX_PLAYERS; i++) //Esse loop é executado 1000 vezes, em todos os slots(Mesmo que o slot não tenha ninguém conectado)
{
    SetPlayerHealth(i, 100.0); //Essa função seta para todos os jogadores a vida para 100(Máximo).
}

//A INCLUDE FOREACH FAZ ATÉ QUE MELHOR, ELA APENAS EXECUTA EM JOGADORES CONECTADOS:
foreach(new i: Player)//Se tiver 100 slots, mas 30 jogadores conectados, ele só ira executar 30x(Nos Conectados)
{
    SetPlayerHealth(i, 100.0);//Essa função seta para todos os jogadores a vida para 100(Máximo).
}


[color=#333333][size=small][font=Monaco, Consolas, Courier, monospace]//Créditos: nilat_[/font][/size][/color]


Considerações Importantes:
- O Foreach usa a include YSI do Y_Less, caso não tenha: Link
- Include Foreach: Link


RE: OTIMIZAÇÕES DE LOOPINGS - xbruno1000x - 23/06/2021

Bom tópico! É básico para muita gente, mas tenho certeza que existem pessoas que não sabem isso.

É possível também utilizar a foreach standalone(foreach que só necessita ela mesma).
Link abaixo:
https://github.com/karimcambridge/samp-foreach

(Movi o tópico para guias e tutoriais pois estava em área incorreta)


RE: OTIMIZAÇÕES DE LOOPINGS - LeleziiN - 23/06/2021

(23/06/2021 11:56)nilat Escreveu: Recentemente percebi que não existem bons tópicos de dicas para otimizações na linguagem Pawn.
Decidi criar esse tópico, para que quem souber, possa responder aqui com a sua contribuição.


Bom, lá vai a minha: Otimização de Loop's

Código:
// A INCLUDE a_samp.inc NATURALMENTE DEFINE QUE O MAXIMO DE JOGADORES QUE O SAMP SUPORTA É 1000(MIL) SLOTS
// E SE VOCÊ NÃO REDEFINIR O MAXIMO DE PLAYERS OU USAR OUTRA FORMA DE LOOP, EM GRANDE ESCALA O SERVIDOR IRÁ LAGAR E DAR RT.

//VAMOS LÁ
#include <a_samp> //include base
#include <foreach> //include para loops/listas


//INICIALMENTE, PARA CRIAR UM LOOP PARA TODOS OS JORADORES, FAZEMOS DESSA FORMA:
for(new i; i < MAX_PLAYERS; i++) //Esse loop é executado 1000 vezes, em todos os slots(Mesmo que o slot não tenha ninguém conectado)
{
    SetPlayerHealth(i, 100.0); //Essa função seta para todos os jogadores a vida para 100(Máximo).
}

//A INCLUDE FOREACH FAZ ATÉ QUE MELHOR, ELA APENAS EXECUTA EM JOGADORES CONECTADOS:
foreach(new i: Players)//Se tiver 100 slots, mas 30 jogadores conectados, ele só ira executar 30x(Nos Conectados)
{
    SetPlayerHealth(i, 100.0);//Essa função seta para todos os jogadores a vida para 100(Máximo).
}


[color=#333333][size=small][font=Monaco, Consolas, Courier, monospace]//Créditos: nilat_[/font][/size][/color]


Considerações Importantes:
- O Foreach usa a include YSI do Y_Less, caso não tenha: Link
- Include Foreach: Link

Muito bom tutorial mano


RE: OTIMIZAÇÕES DE LOOPINGS - Sysner - 30/09/2021

Muito bom


RE: OTIMIZAÇÕES DE LOOPINGS - Jean_Rocha - 29/05/2024

Você está utilizando Foreach.inc de forma errada, desta forma o compilador irá encontrar erros na compilação por não encontrar Player

Erros provavel:
Citar:error 017: undefined symbol "Players@YSII_Ag"; did you mean "Player@YSII_Ag"?
error 017: undefined symbol "Players@YSII_Ag"; did you mean "Player@YSII_Ag"?
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line


Troque Players:
Código:
foreach(new i: Players)
{
    SetPlayerHealth(i, 100.0);
}

Para Player:
Código:
foreach(new i: Player)
{
    SetPlayerHealth(i, 100.0);
}

Se ajudei a comunidade, eu me ajudei também Smile


RE: OTIMIZAÇÕES DE LOOPINGS - PT_Player - 29/05/2024

A ideia que vc teve é boa mas na minha opiniao vc explicou pouco o verdadeiro funcionamento de foreach a.k.a y_iterate..

Ela vai mais alem de so loop de players, vc pode utilizar pra fazer seus proprios loops de grupos, veiculos, objetos etc..

tbm ha uns tempos atras falei dela en um tutorial meu ( https://portalsamp.com/showthread.php?tid=4030) porem nao falei muita coisa dela porque sei que faz falta um tutorial grande para poder explicar bem como ela funciona.

De igual forma obrigado por trazer este tipo de conteudo positivo para o forum.

vlw