[Off] O que eu posso melhorar neste comando?
#1

Boa noite galera, bom eu vim perguntar para vocкs se hб uma maneira de deixar este meu comando mais optimizado ou no que eu possa melhorar.
Aceito criticas construtivas.

Este comando й do meu Gamemode criado do zero, Porйm nele nгo contйm tudo pois ainda estou finalizando estб parte.

Desde jб agradeзo a colaboraзгo de todos!

PHP код:
CMD:casa(playeridparams[])
{
    new 
aname[MAX_PLAYER_NAME], string[4][300], file[255], opcao[50], funcao[50], Float:PosCasa[3];
    
GetPlayerName(playeridanamesizeof(aname));
    if(
sscanf(params"s[50]"funcao)) return SendClientMessage(playerid, -1"[ ERRO ] {FF0000}use: /casa [comprar, vender, moradia, veiculo]");
    if(!
IsPlayerConnected(playerid)) return SendClientMessage(playerid, -1"[ ERRO ] {FF0000}Vocк nгo estб conectado no servidor!");
    
format(filesizeof(file), PASTA_CONTASaname);
    if(
strfind(funcao"vender"true) != -1)
    {
        for( new 
0MAX_CASASc++ )
        {
            
formatstring[0], 300string[0] , "/Casas/casa%d.ini") ;
            if( 
dini_Existsstring[0] ) )
            {
                if( 
IsPlayerInRangeOfPointplayerid2.0dini_Floatstring[0], "PosX" ) , dini_Floatstring[0], "PosY" ) , dini_Floatstring[0], "PosZ" ) ) )
                {
                    if( 
dini_Intstring[0], "TDono" )  != ) return SendClientMessageplayerid, -1"[ x ] {FF0000}Estб casa jб estб a venda." ) ;
                    if( 
strcmpdini_Getstring[0], "Dono" ) , anamefalse )  == 0) return SendClientMessageplayerid, -1"[ x ] {FF0000}Vocк nгo й dono destб casa." ) ;
                    for( new 
0MAX_PLAYERS i++ ) { RemovePlayerMapIcon(imapiconcasaid ] ); }
                    
dini_IntSetstring[0], "TDono") ;
                    
dini_Setstring[0], "Dono""Ninguem" ) ;
                    
dini_IntSetfile"TemCasa") ;
                    
GivePlayerMoneyplayeriddini_Intstring[0], "Preco" ) ) ;
                    
DestroyPickupdini_Intstring[0], "Id" ) ) ;
                    
pickupcasaid ] = CreatePickup12731dini_Floatstring[0], "PosX" ) , dini_Floatstring[0], "PosY" ) , dini_Floatstring[0], "PosZ" ) , -) ;
                    
dini_IntSetstring[0], "Id"pickupcasaid ] ) ;
                    
Delete3DTextLabellabelcasaid ] );
                    
formatstring[1], 300string[1] ," {FFFFFF}[ Casa ID: %d - {00FF00}Б Venda {FFFFFF}]\n{FF4500}Dono: {FFFFFF}Ninguйm\n{FF4500}Morador: {FFFFFF}Ninguйm\n{FF4500}Preзo: {FFFFFF}%d\n{FFFF00}use: {FFFFFF}/casa comprar"cdini_Intstring[0], "Preco" ) ) ;
                    
labelcasaid ] = Create3DTextLabelstring[1], 0x008080FFdini_Floatstring[0], "PosX" ) , dini_Floatstring[0], "PosY" ) , dini_Floatstring[0], "PosZ" ), 40.00) ;
                    
mapiconcasaid ] = CreateDynamicMapIcon(dini_Floatstring[0], "PosX" ) , dini_Floatstring[0], "PosY" ) , dini_Floatstring[0], "PosZ" ), 31, -1, -1, -1, -160.0);
                    
formatstring[3], 300string[3] ,"{FF4500}•{FFFFFF}» {FF4500}O( a )  player {FFFFFF}%s {FF4500}vendeu a casa ID {FFFFFF}%d {FF4500}localizada em: {FFFFFF}%s",anamecGetPlayerAreaplayerid ) ) ;
                    
SendClientMessageToAll( -1string[3] ) ;
                    return 
1;
                }
                if(
== MAX_CASAS) return SendClientMessage(playerid, -1"[INFO] {FF0000}Vocк nгo estб em uma casa!");
            }
        }
    }
    if(
strfind(funcao"comprar"true) != -1)
    {
        if(
LiberadoCC playerid ] != 1) return SendClientMessage(playerid, -1,"[x] {FF0000}Vocк nгo estб liberado para comprar uma casa, peзa a um(a) administrador(a) a permissгo.");
        for( new 
0MAX_CASASc++ )
        {
            
formatstring[0], 300string[0] , "/Casas/casa%d.ini") ;
            if(
dini_Existsstring[0] ) )
            {
                if(
IsPlayerInRangeOfPointplayerid2.0dini_Floatstring[0], "PosX" ) , dini_Floatstring[0], "PosY" ) , dini_Floatstring[0], "PosZ" )))
                {
                    if(
dini_Intstring[0], "TDono" ) != ) return SendClientMessageplayerid, -1"[ x ] {FF0000}Estб casa nгo estб a venda." ) ;
                    if(
GetPlayerMoneyplayerid )  < dini_Intstring[0], "Preco" ) ) return SendClientMessageplayerid, -1"[ x ] {FF0000}Vocк nгo tem dinheiro suficiente." ) ;
                    if(
GetCasasplayerid )  != ) return SendClientMessageplayerid, -1"[ x ] {FF0000}Vocк sу pode possuir uma casa." ) ;
                    for( new 
0<MAX_PLAYERS i++ ) { RemovePlayerMapIcon(imapiconcasaid ] ); }
                    
dini_IntSetstring[0], "TDono") ;
                    
dini_Setstring[0], "Dono"aname ) ;
                    
GivePlayerMoneyplayerid, -dini_Intstring[0], "Preco" ) ) ;
                    
DestroyPickupdini_Intstring[0], "Id" ) ) ;
                    
pickupcasaid ] = CreatePickup12721dini_Floatstring[0], "PosX" ) , dini_Floatstring[0], "PosY" ) , dini_Floatstring[0], "PosZ" ) , -) ;
                    
dini_IntSetstring[0], "Id"pickupcasaid ] ) ;
                    
GetPlayerPosplayeridPosCasa[0], PosCasa[1], PosCasa[2] ) ;
                    
dini_FloatSetfile,"CasaX",Float:PosCasa[0] ) ;
                    
dini_FloatSetfile,"CasaY",Float:PosCasa[1] ) ;
                    
dini_FloatSetfile,"CasaZ",Float:PosCasa[2] ) ;
                    
dini_IntSetfile"TemCasa",) ;
                    
LiberadoCC playerid ] = 0;
                    
Delete3DTextLabel(labelcasaid ] );
                    
formatstring[1], 300string[1] ," {FFFFFF}[ Casa ID: %d - {FF0000}Possui dono(a) {FFFFFF}]\n{FF4500}Dono: {FFFFFF}%s\n{FF4500}Morador: {FFFFFF}%s\n{FF4500}Preзo: {FFFFFF}%d\n{FFFF00}aperte {FFFFFF}'F'{FFFF00} para entrar",,dini_Getstring[0], "Dono" ), dini_Getstring[0], "Morador" ),dini_Intstring[0], "Preco" ) ) ;
                    
labelcasaid ] = Create3DTextLabelstring[1], 0x008080FFdini_Floatstring[0], "PosX" ) , dini_Floatstring[0], "PosY" ) , dini_Floatstring[0], "PosZ" ), 40.00) ;
                    
mapiconcasaid ] = CreateDynamicMapIcon(dini_Floatstring[0], "PosX" ) , dini_Floatstring[0], "PosY" ) , dini_Floatstring[0], "PosZ" ), 32, -1, -1, -1, -160.0);
                    
formatstring[3], 300string[3] ,"{00FF7F}•{FFFFFF}» {00FF7F}O( a )  player {FFFFFF}%s {00FF7F}comprou a casa ID {FFFFFF}%d {00FF7F}localizada em: {FFFFFF}%s",anamecGetPlayerAreaplayerid ) ) ;
                    
SendClientMessageToAll( -1string[3] ) ;
                    return 
1;
                }
                if(
== MAX_CASAS) return SendClientMessage(playerid, -1"[INFO] {FF0000}Vocк nгo estб em uma casa!");
            }
        }
    }
    if(
strfind(funcao"moradia"true) != -1)
    {
        if(
sscanf(params"s[50]s[50]"funcaoopcao)) return SendClientMessage(playerid, -1"[ ERRO ] {FF0000}use: /casa moradia [aceitar/recusar]");
        if(
strfind(opcao"aceitar"true) != -1)
        {
            for( new 
0MAX_CASASc++ )
            {
                
formatstring[0], 300string[0] , "/Casas/casa%d.ini") ;
                if( 
dini_Intstring[0], "TMorador" )  == )
                {
                    if( 
strcmpdini_Getstring[0], "Morador" ) , anametrue )  == )
                    {
                        
dini_IntSetstring[0], "TMorador");
                        
dini_Setstring[0], "Morador""Ninguem" );
                        
format(string[2], 300string[2] , "[CASA] Vocк nгo mora mais na sua antiga casa ID: %d !"c);
                        
SendClientMessage(playerid0xFFFF00AAstring[2]);
                    }
                }
            }
            
formatstring[0], 300string[0] , "/Casas/casa%d.ini"moradia playerid ] ) ;
            if(!
dini_Existsstring[0] ) ) return SendClientMessage(playerid0xFF0000AA"[CASA] A casa que vocк foi convidado(a) para morar nгo existe!");
            if( 
morar playerid ] != ) return SendClientMessageplayerid, -1"[ x ] {FF0000}Vocк nгo foi convidado( a ) para morar em uma casa." ) ;
            
dini_IntSetstring[0], "TMorador") ;
            
dini_Setstring[0], "Morador"aname ) ;
            
dini_FloatSetfile,"CasaX"dini_Floatstring[0], "PosX" ) ) ;
            
dini_FloatSetfile,"CasaY"dini_Floatstring[0], "PosY" ) ) ;
            
dini_FloatSetfile,"CasaZ"dini_Floatstring[0], "PosZ" ) ) ;
            
SetSpawnInfoplayerid1dini_Intfile"Skin" ) , dini_Intfile"CasaX" ) , dini_Intfile"CasaY" ) , dini_Intfile"CasaZ" ) , 354.165700000) ;
            
format(string[2], 300string[2] ,"[CASA] Vocк aceitou morar na nova casa ID: %d!"moradia[playerid]) ;
            
SendClientMessage(playerid0xFFFF00AAstring[2]);
            
SendClientMessageconvitede playerid ], -1"{00FF7F}•{FFFFFF}» {00FF7F}O jogador aceitou morar em sua casa." ) ;
            
morar playerid ] = 0moradia playerid ] = 0convitede playerid ] = 0;
        }
        else if(
strfind(opcao"recusar"true) != -1)
        {
            if(
morar[playerid] != 1) return SendClientMessageplayerid, -1"[ x ] {FF0000}Vocк nгo foi convidado( a ) para morar em uma casa." ) ;
            
SendClientMessageplayerid, -1"•» {FFFF00}Vocк recusou o convite de moradia." ) ;
            
format(string[2], 300string[2] , "[CASA] O(A) player %s recusou o convite de moradia enviado por vocк!"aname);
            
SendClientMessageconvitede playerid ], 0xFFFF00AAstring[2]) ;
            
morar playerid ] = 0moradia playerid ] = 0convitede playerid ] = 0;
            return 
1;
        }
    }
    return 
1;

Reply
#2

Verificar se o player estб conectado antes da verificaзгo em sscanf
Use no minimo DOF2(Muito mais rapido que Dini e o uso e o mesmo)
Suas variaveis strings estao com um limite enorme de absurdo que nao sera usado
Nгo existe necessidade de usar "string[x]", pode apenas usar "string", pois em cada usto ela esta sendo destruida
Uma funзгo como Nome(playerid) para retornar o nome do player e bem mais viavel que toda vez fazer:
PHP код:
new Nome[MAX_PLAYER_NAME];
GetPlayerName(playeridNomesizeof(Nome)); 
Estб verificaзгo "if(c == MAX_CASAS)", nгo esta totalmente no local certo, aonde ela estpa tambem funcionaria porem creio nao ser o correto, pois economizaria varias verificaзхes antes dela.
Se a pessoa quer vender a casa por que precisa estar perto dela?
Foreach e uma boa
Se vocк usar um enum para guardar informaзхes das casas, ficaria mais rapido do que toda vez ter quer Obter de um arquivo
Reply
#3

Antes de tudo, tirar o Dini.

Vocк fica mexendo diretamente no arquivo da casa toda hora pra fazer alteraзхes e consultas, entгo, porque nao cria um enum para os dados da casa para que assim possa manipular os dados dentro do GM.

"TDono" eu acho desnecessбrio por que se o dono da casa nгo for 'Ninguem' qr dizer q a casa tem dono... sendo assim esse TDono й sу uma repetiзгo. Mesma coisa com "TMorador".


Foram alguns itens que eu observei em uma passada rбpida. Posso estar errado.

"Id" armazena o id do pickup, nгo tem necessidade tambйm visto que quem responde pelo id do pickup й a variavel pickupcasaid. Nгo precisa ser salvo no arquivo.

Quando um player compra a casa vocк seta as coordenadas no arquivo, por que? Se a coordenada nгo й alterada, nгo tem porque reescreve-la.
Reply
#4

Do zero й o meu ovo.

Esse comando e do GM da NWD.

Kkk -.-
Reply
#5

Quote:
Originally Posted by nember
Посмотреть сообщение
Do zero й o meu ovo.

Esse comando e do GM da NWD.

Kkk -.-
Nego copia e ainda.. diz que foi do 0 huehuehuehuehue.. que Gamemode й essa NWD" Jб ouvi falar muito.. mais ainda nгo sei que tag й essa '-
Reply
#6

Quote:
Originally Posted by Holl
Посмотреть сообщение
Nego copia e ainda.. diz que foi do 0 huehuehuehuehue.. que Gamemode й essa NWD" Jб ouvi falar muito.. mais ainda nгo sei que tag й essa '-
NWD = New World Disorder. Й um servidor RPG/RP fundado em 2010, mas que com a saнda do dono, mudou-se o nome e atualmente estб como Brasil Viva a Vida - World Wicked.
Joguei muito tempo lб. Saudades, pois infelizmente hoje jб nгo й a mesma coisa.
Reply
#7

Quote:
Originally Posted by Hardware
Посмотреть сообщение
NWD = New World Disorder. Й um servidor RPG/RP fundado em 2010, mas que com a saнda do dono, mudou-se o nome e atualmente estб como Brasil Viva a Vida - World Wicked.
Joguei muito tempo lб. Saudades, pois infelizmente hoje jб nгo й a mesma coisa.
Esse nгo cheguei a conheзer '- .. vlw pela Info..
Reply
#8

Trabalhando com mйtodos vocк pode deixar seu cуdigo mais limpo. Quando alguйm ou atй vocк for fazer manutenзгo nele, vai passar minutos para entender o que foi feito.

PHP код:
morar playerid ] = 0moradia playerid ] = 0convitede playerid ] = 0

// para:

morar playerid ] = moradia playerid ] = convitede playerid ] = 0
Reply
#9

Quote:
Originally Posted by Day_
Посмотреть сообщение
Verificar se o player estб conectado antes da verificaзгo em sscanf
Essa lуgica do godfather sem lуgica nenhuma. Um player nгo irб digitar um comando se nгo tiver conectado,

Quote:
Originally Posted by JonathanFeitosa
Посмотреть сообщение
Trabalhando com mйtodos vocк pode deixar seu cуdigo mais limpo. Quando alguйm ou atй vocк for fazer manutenзгo nele, vai passar minutos para entender o que foi feito.

PHP код:
morar playerid ] = 0moradia playerid ] = 0convitede playerid ] = 0
// para:
morar playerid ] = moradia playerid ] = convitede playerid ] = 0
Para ser sincero isso nгo irб mudar em nada vocк sу esta mostrando formas diferentes de atribuir valores iguais a mъltiplas variбveis.

-

O que vocк pode fazer й otimizar a forma como vc esta usado os loops e as strings principalmente contudo como jб disseram esse salvamento e muito mau.
Reply
#10

Quote:
Originally Posted by Day_
Посмотреть сообщение
Verificar se o player estб conectado antes da verificaзгo em sscanf
Use no minimo DOF2(Muito mais rapido que Dini e o uso e o mesmo)
Suas variaveis strings estao com um limite enorme de absurdo que nao sera usado
Nгo existe necessidade de usar "string[x]", pode apenas usar "string", pois em cada usto ela esta sendo destruida
Uma funзгo como Nome(playerid) para retornar o nome do player e bem mais viavel que toda vez fazer:
PHP код:
new Nome[MAX_PLAYER_NAME];
GetPlayerName(playeridNomesizeof(Nome)); 
Estб verificaзгo "if(c == MAX_CASAS)", nгo esta totalmente no local certo, aonde ela estpa tambem funcionaria porem creio nao ser o correto, pois economizaria varias verificaзхes antes dela.
Se a pessoa quer vender a casa por que precisa estar perto dela?
Foreach e uma boa
Se vocк usar um enum para guardar informaзхes das casas, ficaria mais rapido do que toda vez ter quer Obter de um arquivo
Muito obrigado pelas dicas, apliquei o DOF2 no GM inteiro, diminui as strings de acordo com a quantidade que ela iria usar.

Coloquei um GetName. Porйm a verificaзгo das casas teria uma dica mais relevante para dar?
E tambйm fiquei com dъvida na parte da enum, como assim?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)