[Off] Criaзгo de Sistema de Ranking em DOF2
#1

Olб galera bom dia a todos, bom estou aqui com um pensamento diferente em que podemos ajudar bastante pessoas.
Deixei todos os meus projetos SA-MP de lado nгo pretendo mais participar de projetos.

Porйm eu estava tentando criar um sistema de Ranking em DOF2 para postar aqui na Fуrum SA-MP para o pessoal pois muitas pessoas pedem e nгo achei nenhum sistema que funcione!

Entгo estou aqui atravйs desta publicaзгo mostrando a base que eu criei e eu queria a ajuda de todos para deixar o sistema funcional e quando a finalizaзгo do sistema e a constataзгo de 100% funcional eu irei pegar o nome de todos que ajudaram e colocar na publicaзгo principal.

Bom jб vou deixar bem claro que eu nгo quero reputaзгo nem nada do tipo pois isto pra mim nгo passa de status de internet.
Tenho 20 anos jб tenho meu carro, minha casa jб sou casado a 4 anos e nгo ligo para isto, estou apenas com o intuito de ajudar o pessoal.
Bom quem estiver interessado em ajudar abaixo tem o cуdigo base que eu fiz porйm ele possui uns bugs entгo ao invйs de eu explicar pegue o cуdigo copie e execute ele que vocк que entende se souber de uma soluзгo poste aqui para nos ajudar e assim agradeзo a colaboraзгo de todos!

Atenciosamente Leonardo Bradoks.

PHP код:
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT
#include <a_samp>
#include <DOF2>
#include <sscanf2>
#define PASTA_CONTAS         "Contas/%s.ini"
#define PASTA_RANKING         "Ranking/%d.ini"
#define MAX_RANKING         500
#define INIT_RANKING         1
#define DIALOG_LOGIN         1
#define DIALOG_REGISTRO     2
forward RankingUpdate();
forward SalvarDados();
main()
{
    print(
"\n----------------------------------");
    print(
" Sistema de Ranking Ligado");
    print(
"----------------------------------\n");
}
public 
OnGameModeInit()
{
    
// Don't use these lines if it's a filterscript
    
SetGameModeText("Blank Script");
    
AddPlayerClass(01958.37831343.157215.3746269.1425000000);
    
SetTimer("RankingUpdate"10000true);
    return 
1;
}
public 
OnGameModeExit()
{
    
DOF2_Exit();
    return 
1;
}
public 
OnPlayerRequestClass(playeridclassid)
{
    
SetPlayerPos(playerid1958.37831343.157215.3746);
    
SetPlayerCameraPos(playerid1958.37831343.157215.3746);
    
SetPlayerCameraLookAt(playerid1958.37831343.157215.3746);
    if(
DOF2_FileExists(PlayerConta(playerid))) {
        new 
string[155];
        
format(stringsizeof(string), "%s bem vindo(a) novamente logue-se em sua conta !"PlayerName(playerid));
        
ShowPlayerDialog(playeridDIALOG_LOGINDIALOG_STYLE_PASSWORD"Faзa Login em sua Conta"string"Entrar""Sair");
    }
    else
    {
        new 
string[155];
        
format(stringsizeof(string), "%s bem vindo(a) registre-se em sua conta !"PlayerName(playerid));
        
ShowPlayerDialog(playeridDIALOG_REGISTRODIALOG_STYLE_INPUT"Registre a sua Conta para jogar !"string"Registrar""Sair");
    }
    return 
1;
}
public 
OnPlayerCommandText(playeridcmdtext[])
{
     if(
strcmp(cmdtext"/money"true) == 0) {
         
GivePlayerMoney(playerid500);
         
SendClientMessage(playerid, -1"500R$ setado!");
         return 
1;
     }
     if(
strcmp(cmdtext"/money2"true) == 0) {
         
GivePlayerMoney(playerid600);
         
SendClientMessage(playerid, -1"600R$ setado!");
         return 
1;
     }
     return 
0;
}
public 
SalvarDados() {
    new 
aname[MAX_PLAYER_NAME], file[50], file2[50], table[50];
    print(
"Entrei na salvar dados");
    for(new 
0MAX_PLAYERSi++) {
        if(
IsPlayerConnected(i)) {
            
GetPlayerName(ianamesizeof(aname));
            for(new 
INIT_RANKINGMAX_RANKINGa++) {
                
format(filesizeof(file), PASTA_RANKINGa);
                if(
DOF2_FileExists(file)) {
                    
printf("SVD - conectado pasta %s"file);
                    if(!
strcmp(anameDOF2_GetString(file"Nome"), false)) {
                        
printf("SVD - conectado pasta %s NOME NAO SAO IGUAIS"file);
                        if(
GetPlayerMoney(i) < DOF2_GetInt(file"Dinheiro") || GetPlayerMoney(i) > DOF2_GetInt(file"Dinheiro")) {
                            
DOF2_SetInt(file"Dinheiro"GetPlayerMoney(i));
                            
DOF2_SaveFile();
                            
printf("Dinheiro Atualizado");
                        }
                    }
                }
                else if(!
DOF2_FileExists(file) )
                {
                    
printf("SVD - entrei na pasta %s que nao existe"file);
                    
format(file2sizeof(file2), PASTA_RANKING, (a-1));
                    
printf("SVD - conectado na pasta %s que nao existe"file2);
                    if(!
strcmp(anameDOF2_GetString(file2"Nome"), false)) {
                        
printf("Diz que os nomes sao iguais");
                    }
                    else
                    {
                        
format(tablesizeof(table), PASTA_RANKING1);
                        if(!
DOF2_FileExists(table) || strcmp(DOF2_GetString(file"Nome"), DOF2_GetString(file2"Nome"), true)) {
                            
printf("diz que sao iguais e o nome e %s"aname);
                            
printf("na pasta esta salvo o nome %s"DOF2_GetString(file2"Nome"));
                            
DOF2_CreateFile(file);
                            
DOF2_SetString(file"Nome"aname);
                            
DOF2_SetInt(file"Dinheiro"GetPlayerMoney(i));
                            
DOF2_SaveFile();
                            
printf("Conta criada Dinheiro Atualizado");
                        }
                    }
                }    
            }
        }
    }
    return 
1;
}
public 
RankingUpdate() {
    new 
file[50], file2[50], string[155];
    for(new 
idranking INIT_RANKINGidranking MAX_RANKINGidranking++) {
        new 
valDinvalDin2strNome[24], strNome2[24];
        
format(filesizeof(file), PASTA_RANKINGidranking);
        
format(file2sizeof(file2), PASTA_RANKINGidranking+1);
        if(
DOF2_FileExists(file2) && DOF2_FileExists(file)) {
            
printf(file2);
            
printf(file);
            
valDin DOF2_GetInt(file"Dinheiro");
            
valDin2 DOF2_GetInt(file2"Dinheiro");
            
strcat(strNomeDOF2_GetString(file"Nome"));
            
strcat(strNome2DOF2_GetString(file2"Nome"));
            if(
valDin2 valDin) {
                
printf("%d"valDin);
                
printf("%d"valDin2);
                
                
DOF2_RemoveFile(file);
                
DOF2_RemoveFile(file2);
                
DOF2_CreateFile(file);
                
DOF2_SetString(file"Nome"strNome2);
                
DOF2_SetInt(file"Dinheiro"valDin2);
                
DOF2_SaveFile();
                
                
DOF2_CreateFile(file2);
                
DOF2_SetString(file2"Nome"strNome);
                
DOF2_SetInt(file2"Dinheiro"valDin);
                
DOF2_SaveFile();
                
format(stringsizeof(string), "[RANKING] %s subiu para a %d posiзгo e passou %s que caiu no ranking para a %d posiзгo!"DOF2_GetString(file2"Nome"), idrankingDOF2_GetString(file"Nome"), (idranking+1));
                
SendClientMessageToAll(-1string);            
            }
        }
    }
    print(
"Fim da Loop salvei os dados");
    
SalvarDados();
    return 
1;
}
public 
OnPlayerConnect(playerid)
{
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    return 
1;
}
public 
OnPlayerSpawn(playerid)
{
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    return 
1;
}
public 
OnVehicleSpawn(vehicleid)
{
    return 
1;
}
public 
OnVehicleDeath(vehicleidkillerid)
{
    return 
1;
}
public 
OnPlayerText(playeridtext[])
{
    return 
1;
}
public 
OnPlayerEnterVehicle(playeridvehicleidispassenger)
{
    return 
1;
}
public 
OnPlayerExitVehicle(playeridvehicleid)
{
    return 
1;
}
public 
OnPlayerStateChange(playeridnewstateoldstate)
{
    return 
1;
}
public 
OnPlayerEnterCheckpoint(playerid)
{
    return 
1;
}
public 
OnPlayerLeaveCheckpoint(playerid)
{
    return 
1;
}
public 
OnPlayerEnterRaceCheckpoint(playerid)
{
    return 
1;
}
public 
OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 
1;
}
public 
OnRconCommand(cmd[])
{
    return 
1;
}
public 
OnPlayerRequestSpawn(playerid)
{
    return 
1;
}
public 
OnObjectMoved(objectid)
{
    return 
1;
}
public 
OnPlayerObjectMoved(playeridobjectid)
{
    return 
1;
}
public 
OnPlayerPickUpPickup(playeridpickupid)
{
    return 
1;
}
public 
OnVehicleMod(playeridvehicleidcomponentid)
{
    return 
1;
}
public 
OnVehiclePaintjob(playeridvehicleidpaintjobid)
{
    return 
1;
}
public 
OnVehicleRespray(playeridvehicleidcolor1color2)
{
    return 
1;
}
public 
OnPlayerSelectedMenuRow(playeridrow)
{
    return 
1;
}
public 
OnPlayerExitedMenu(playerid)
{
    return 
1;
}
public 
OnPlayerInteriorChange(playeridnewinterioridoldinteriorid)
{
    return 
1;
}
public 
OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    return 
1;
}
public 
OnRconLoginAttempt(ip[], password[], success)
{
    return 
1;
}
public 
OnPlayerUpdate(playerid)
{
    return 
1;
}
public 
OnPlayerStreamIn(playeridforplayerid)
{
    return 
1;
}
public 
OnPlayerStreamOut(playeridforplayerid)
{
    return 
1;
}
public 
OnVehicleStreamIn(vehicleidforplayerid)
{
    return 
1;
}
public 
OnVehicleStreamOut(vehicleidforplayerid)
{
    return 
1;
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    return 
1;
}
public 
OnPlayerClickPlayer(playeridclickedplayeridsource)
{
    return 
1;
}
stock PlayerConta(playerid) {
    new 
arquivo[90];
    
format(arquivosizeof(arquivo), PASTA_CONTASPlayerName(playerid));
    return 
arquivo
}
stock PlayerName(playerid) {
    new 
aname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridanamesizeof(aname));
    return 
aname;

Para funcionamento do mesmo й necessбrio criar as pastas abaixo:
Код:
Contas
Ranking
OBS: Existem alguns bugs no sistema de registro e login pois eu estava a muito tempo sem programar e sem internet no computador entгo desconsidere.
Reply
#2

Isso ai Leo!
Good
Reply
#3

Bom tуpico. Minhas recomendaзхes:

-Use foreach.
-Nгo use funзхes como PlayerName, salve o nome uma vez numa array na callback OnPlayerConnect. Toda vez que vocк chama a funзгo GetPlayerName, o servidor procura pela definiзгo, entгo ira procurar no samp-server.exe pela funзгo nativa com amx_function.

Mesmo assim, +rep.
Reply
#4

Tenho sugestхes muito melhores, por que movimentar arquivos todas as vezes que tivermos que verificar os TOPS?, bem, para isso pode ser feito uma Stock para organizar a cara 'alteraзгo que apareзa no rank'
Pois bem, se para todos os GivePlayerMoney fossem renomeados para outro nome, na qual utilizaria uma stock que atualizaria "em cache" atraves de um loop,e que, a partir dai atualizaria o rank
Ex:
PHP код:
stock Organizar_Ranks(type[])
{
      
Aqui movimenta arquivos em cache.    
}
stock GiveMoney(playerid,money)
{
    
GivePlayerMoney(playerid,money);
    
Organizar_Ranks("dinheiro");
    return 
1;

Reply
#5

Certo obrigado a todos pelas dicas e ajudas, assim que eu tiver um tempinho eu jб dou uma trabalhada no assunto que vocкs abordaram aqui comigo.

Esse modo em cache seria como? tipo pVars ?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)