[Ajuda] Sistema de cofre
#1

Alguйm poderia me ajudar ou me dar uma base de como fazer. Eu tф querendo fazer um sistema de cofre, que neles os players da gang possam colocar dinheiro para guardar nele, й que outras gangs ou player tambйm possam roubar do cofre, da gang rival. Serб que algum de vocкs poderiam me explicar como fazer o comando ?
Reply
#2

Cara nгo й algo simples pra quem й novato.

Da uma lida nesse tutorial, tenta entender matrizes, funзхes e loops:
https://sampforum.blast.hk/showthread.php?tid=388940
https://sampforum.blast.hk/showthread.php?tid=341545
https://sampforum.blast.hk/showthread.php?tid=290735

Se vocк entender isso, vocк tб feito. Basta criar uma matriz para salvar todos os dados dos cofres das organizaзхes. Nesses dados, vocк salvarб o dinheiro, a qual organizaзгo pertence e etc. Tambйm salvarб o id do objeto cofre que foi criado, assim vocк consegue a partir de um loop verificar a qual cofre o jogador que estб tentando roubar estб prуximo. As funзхes vocк utilizarб para fazer toda a aзгo de criar cofres, roubar e etc.

Segue um exemplo:

PHP код:
#define MAX_GANGS 100//essa seria a definiзгo do mбximo de gangs do seu GM
enum E_GANG_SAFE_BOX
{
    
E_GANG_MONEY,//o dinheiro da gang
    
E_GANG_SAFE_BOX_ID//o objeto do cofre da gang
}
new 
gangSafeBox[MAX_GANS][E_GANG_SAFE_BOX],
   
playerGang[MAX_PLAYERS];//variбvel fictнcia para indicar qual o id da minha gang
public OnGameModeInit()
{
    
LoadGangsSafeBox();//essa seria uma funзгo para carregar os cofres das gangs
    
return 1;
}
public 
OnPlayerConnect(playerid)
{
    
playerGang[playerid] = 0;//seto a minha gang como id 0
    
return 1;
}
LoadGangsSafeBox()
{
    for(new 
iMAX_GANGSi++)
    {
        
gangSafeBox[i][E_GANG_MONEY] = 1000;
        
//seto o valor do dinheiro da gang que estб rodando no loop, no caso o нndice 'i'.
        
gangSafeBox[i][E_GANG_SAFE_BOX_ID] = CreateObject(23320.00.00.00.00.00.0);
        
//crio e salvo o id do objeto cofre da gang que estб rodando no loop
       //OBS: Й claro que isso й apenas um exemplo, vocк deveria criar uma matriz com todas as posiзхes dos cofres e a partir de um loop criar todos objetos com as informaзхes da posiзгo desse cofre que a matriz contйm
    
}
}
StealGangSafeBox(playerid)
{
    new 
gangFound = -1Float:pos[3], i;
    
//gangFound armazenarб o id da gang do cofre que o jogador estiver prуximo
    //pos armazenarб a posiзгo do cofre de cada gang que rodar no loop
    
for(0MAX_GANGSi++)
    {
        
//aqui armazeno na variбvel pos a posiзгo X Y e Z do objeto cofre da gang que estб rodando no loop
        //valido se o jogador estб prуximo a essa posiзгo, se estiver, armazeno em gangFound o нndice da gang que foi encontrada e paro o loop
        
GetObjectPos(gangSafeBox[i][E_GANG_SAFE_BOX_ID], pos[0], pos[1], pos[2]);
        if(
IsPlayerInRangeOfPoint(playerid2.0pos[0], pos[1], pos[2]))
        {
            
gangFound i;
            break;
        }
    }
    if(
gangFound == -1)//caso nada for encontrado, e no caso a gangFound estiver com o valor que foi setado a ela na sua declaraзгo, entгo manda mensagem e retorna o cуdigo aqui
    
{
        
SendClientMessage(playerid, -1"Vocк nгo estб prуximo de nenhum cofre de uma gang!");
        return;
    }
    
//caso a gang do jogador seja a mesma que o loop encontrou mando a mensagem e aviso e retorno o cуdigo aqui
    
if(gangFound == playerGang[playerid])
    {
        
SendClientMessage(playerid, -1"Vocк nгo pode roubar o cofre da prуpria gang porra!");
        return;
    }
    
//Caso contrбrio dб o dinheiro ao jogador que contйm no cofre, dinheiro esse armazenado pela matriz gangSafeBox
    //Observe que estou informando que o нndice da gang й gangFound, o qual foi setado quando o loop encontrou que eu estava prуximo de algum cofre
    
GivePlayerMoney(playeridgangSafeBox[gangFound][E_GANG_MONEY]);
    
//reseto o valor que armazena a quantidade de dinheiro no cofre da gang
    
gangSafeBox[gangFound][E_GANG_MONEY] = 0;
    
SendClientMessage(playerid, -1"Cofre roubado com sucesso!");
}
CMD:roubar(playerid)
{
    
StealGangSafeBox(playerid);//chamo a funзгo acima para o jogador
    
return 1;

Essa й uma base para se ter ideia do que seria necessбrio, se vocк nгo estudar e se puxar por si, creio que o tempo gasto foi em vгo.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)