[Tutorial] Que tal isso? (Programaзгo Genйrica)
#1

Isso vai ser mais uma liзгo de moral para todos os scripters de gamemodes aqui do que um tutorial.
Eu espero abrir os olhos de muitas pessoas (atй de editores de GF) e retransmitir a minha 'filosofia' de programaзгo, que nгo й minha, mas faz parte de um conjunto de regras que definem 'etiquetas de programaзгo'.
Se vocк olhar de longe, isso simplesmente vai soar como uma complicaзгo e enrolaзгo e batidas de teclas disperdiзadas, mas se vocк jб tб fudido, nгo custa nada ler um pouco.

Enquanto muitas pessoas se preoucupam em como colocar dialogs coloridos, ou textdraws gigantes (que eu, particularmente, acho ridнculas) na tela de login, algumas se preoucupam mais em fazer sistemas, criar mйtodos e estruturas para gerenciar os dados para um certo objeivo, fazendo o cуdigo mais legнvel e mais fбcil a implementaзгo de derivativos/extensхes.

Mas que porra й programaзгo genйrica?
Templates no C++ nгo й questгo agora. Usem essa mentalidade como um template para o que eu vou descrever agora.

Neste caso, programaзгo genйrica se baseia em eliminar dados constantes e criar um sistema e uma fonte desses dados para facilitar a entrada de novos dados no futuro.

Como assim?

Dando um exemplo bбsico, que irrita a todos e que й um pй no saco e que todo mundo, todo dia me enche o saco por causa desse caralho voante. Os sistemas de veнculos.
Eu nгo tenho certeza se todos os scripters desta board sгo burros, mas nгo й um pouco role ter que reescrever IsACopCar, IsASexCar a todo veнculo novo que vocк for adicionar?
Vocк nunca pensou que vocк poderia fazer a merda de um enum e criar a porra de uma funзгo prуpria para criar os veнculos?

Ao invйs de fazer a checagem de veнculos por ids e ter 200 carros bugados, por que nгo fazer isso?
pawn Код:
enum VEHICLE_INFO
{
    vehicle_Tipo,
    vehicle_Dono,
    vehicle_Org,
    vehicle_CargoMinimo
}

new gVehicleInfo[MAX_VEHICLES][VEHICLE_INFO];

enum
{
    TIPO_VEICULO_PLAYER,
    TIPO_VEICULO_ORG
}

Veiculo_IsSpawned(vid)
{
    return GetVehicleModel(vid) > 0;
}

Veiculo_Criar(modelo, x, y, z, tipo, dono)
{
    // encher variaveis
    // criar carro
    // retornar id
}

OnGameModeInit()
{
    Veiculo_Criar(CARRO_POLICIA, x, y, z, TIPO_VEICULO_ORG, GANG_LSPD);
    Veiculo_Criar(CARRO_POLICIA, x, y, z, TIPO_VEICULO_ORG, GANG_LSPD);
    Veiculo_Criar(CARRO_POLICIA, x, y, z, TIPO_VEICULO_ORG, GANG_LSPD);
    Veiculo_Criar(CARRO_POLICIA, x, y, z, TIPO_VEICULO_ORG, GANG_LSPD);
    ...
}

OnPlayerEnterVehicle(veiculo)
{
    if(gVehicleInfo[veiculo][vehicle_Tipo] == TIPO_VEICULO_ORG)
    {
        if(PlayerInfo[playerid][Player_Org] != gVehicleInfo[veiculo][vehicle_Org])
            return Retirar_Player_Do_Veiculo();
        if(PlayerInfo[playerid][Player_CargoOrg] < gVehicleInfo[veiculo][vehicle_CargoMinimo])
            return Retirar_blablbalba();
    }
}
Й уbvio que isto й sу um exemplo, mas isso nгo parece muito menos sujeito a falhas?
E ainda dб pra fazer melhor, como carregar tudo de um banco de dados. Jб pensou em adicionar veiculos de org apenas inserindo uma linha em uma tabela? Agora vocк estб em dia com a evoluзгo mental!

Й claro que dб pra fazer muito mais com isso com apenas alguns pensamentos:
  • Onde vocк pode usar dados diretos, pense como ficaria isso em um sistema.
  • Tente manter um padrгo em cada sistema que vocк escreve, fazendo com que o codigo pareзa bunito.
  • Muitas condicionais geralmente podem ser reduzidas a apenas um tratamento melhor dos dados, evite as gambiarras!
Enfim, espero ter aberto a mente de alguem.
Senгo, foda-se.
:3
Reply
#2

A triste realidade й que a maioria (pessoas que pegam qualquer gm ai na net, troca o nome e abre) nгo liga para isso, porйm creio eu que aqueles que tem um pouco mais de censo possa passar a pensar de forma diferente sobre essas gambiarras rsrs
Reply
#3

O foda й que a maioria dos membros dessa бrea do fуrum tem a faixa etбria de 13 - 14 anos.
Ou seja, nгo estгo nem ai para otimizaзгo, a filosofia deles й assim:
"Se estб funcionando, estб bom".
Reply
#4

Muito bom Luнs, certamente isso certamente vai ajudar pessoas que gostam de ter os seus cуdigos organizados e bonitos, como vocк disse:

Quote:
Originally Posted by Stewie`
Enquanto muitas pessoas se preoucupam em como colocar dialogs coloridos, ou textdraws gigantes (que eu, particularmente, acho ridнculas) na tela de login, algumas se preoucupam mais em fazer sistemas, criar mйtodos e estruturas para gerenciar os dados para um certo objeivo, fazendo o cуdigo mais legнvel e mais fбcil a implementaзгo de derivativos/extensхes.
Existem pessoas que dizem que isso й perda de tempo, mas nгo acho, penso que й mais fбcil encontrar um bug com um cуdigo limpo e organizado do que com um cуdigo feio e sem estar organizado.
Reply
#5

Realmente, muitos daqui, nгo querem aprender, quem quer, basta 1 exemplo, pra que tudo corra bem, mas tem aqueles que ganham 1 cуdigo, e querem um GM.
Reply
#6

Muito bom aviso.

E nгo й sу por causa do cуdigo limpo, mesmo para nуs (hospedadores de servidores) й mais fбcil sustentar-mos um servidor bem limpinho e sem grandes lidas nos scriptfiles que tem 100 jogadores simultвneos do que um mal scriptado com 10 jogadores.


Espero que isto abra os olhos a muitos.
Reply
#7

Venho falando algo similar a 2 anos. Nгo se limitem apenas a fazer um sistema para o jogo, pensem na lуgica da programaзгo e nгo no projeto depois de feito, pensem como o computador executaria isto e nгo como deve ficar apуs pronto ..

Pensem assim e abrirб a mente de vocкs, nгo й atoa que eu, assim como muitos que conheзo, pegam uma linguagem de programaзгo jб sabendo programar - a lуgica й normalmente a mesma, sу muda a funзгo e o modo como a usa.

Aй, em relaзгo ao tutorial, nunca gostei de usar funзхes, mas quando algo й grande, eu uso. Caso for checar um veнculo ou outro, eu costumo reescrever toda funзгo pois jб sei que cуdigo estou implementado - e desta maneira torna o cуdigo mais rбpido, nгo que seja errado usar funзхes, mas deixar o cуdigo todo baseado nelas as vezes pode torna-lo mais confuso do que propriamente melhor.

Complemento para o tutorial:
Nгo adianta criar funзхes com nome HUSAUHSUHAHUSA que nгo ajuda em nada. Tem que criar nomes que ajudem a organizar o cуdigo e recordar qual funзгo (literalmente) da funзгo (programaзгo) (tenso)

Exemplo.
Create Vehicle - Nome coerente
ueuaueaccar - Nome ruim de gravar
Reply
#8

Se sу vocк entende o seu cуdigo, jб й um passo
Reply
#9

Outra dica, й criar funзхes de um sistema de veнculos em uma include. Criar funзхes de banco em outra include. Criar funзхeses de registro em outra include.

E depois criar uma main.inc que #include todas elas.

E CLARO. Se for PUBLICAR seu projeto, lembre-se de criar um arquivo de texto para explicar a funзгo (literalmente) funзгo (programaзгo)

Um exemplo que uso bastante й este estilo de explicaзгo:
http://pastebin.com/gyQVwv3q

Com explicaзгo do que faz, e um exemplo de uso (ou explicaзгo dos parвmetros de como usar)

__)

Outro mйtodo й usar o mйtodo f(x) - matematica

Digamos:
pawn Код:
function bla(x) return x + 1;
Logo a funзгo й

PHP код:
f(x) = 1
Exemplo:
http://pastebin.com/YV5jGwes

Atй os caras que moram na china, entendem isto.
Reply
#10

Concordo plenamente!

Nesta board infelizmente sempre tem pessoas que nгo entendem nada da бrea e querem fazer seu prуprio gamemode(PLAGIADO dos outros) sem ter o minimo conhecimento em pawn ou similar.

Muitos pensam que й so da ctrl+c em um codigo e ctrl+v no gamemode e jб й um scripter! Isso й lamentavel para o SA-MP pois existem varios servidores 0/100 que nem os prуprios donos nгo se dedicam a ajudar o servidor a crescer, pensa que й so por no ar e vai lotar do nada, feito um passe de magica!
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)