[Ajuda] Como criar um sistema com interaзгo entre jogadores?
#1

Olб,

Vou exemplificar: No servidor do Fulanox existe o trabalho de mйdico que quando algum jogador й morto o mesmo pode solicitar um serviзo mйdico onde todos mйdicos em trabalho sгo notificados, entгo o jogador necessita esperar pelo mйdico para reanimб-lo e, apуs a reanimaзгo o mesmo entra como passageiro na ambulвncia e o mйdico encaminha-o atй o hospital mais prуximo.

Como й feita essa interaзгo entre o mйdico e o jogador morto?

Tenho essa dъvida desde quando fiquei motivado a criar um servidor SA-MP e acredito que muitos tem a mesma dъvida que a minha. Agradeзo a todos por qualquer resposta neste tуpico.
Reply
#2

Usa isso como base, estou fazendo com pressa entao nao pensa que vai sair grande coisa!

PHP код:
#include <a_samp>
#include <zcmd>
#include <sscanf>
new PedindoAjuda[MAX_PLAYERS];
new 
Medico[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
PedindoAjuda[playerid] = 0;
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    
PedindoAjuda[playerid] = 0;
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    new 
Float:Pos[4], string[110], aname[MAX_PLAYER_NAME];
    
GetPlayerPos(playeridPos[1], Pos[2], Pos[3]); // pega a posiзгo dele!
    
SetPlayerPos(playeridPos[1], Pos[2], Pos[3]); // seta a posiзгo dele
    
ApplyAnimation(playerid"PED""WALK_DRUNK"4.1111111); // aqui vc coloca a animaзгo que vc quer!
    
PedindoAjuda[playerid] = 1// seta que ele esta pedindo ajuda!
    
GetPlayerName(playeridanamesizeof(aname));
    
format(stringsizeof(string), "[ x ]O player %s esta pedindo ajuda pois esta morto!"aname); // formata a mensagem para o player!
    
for(new iGetPlayerPoolSize(); i++)  // loop para ver os player on!
    
{
        if(
Medico[i] == 1// se o player for medico
        
{
            
SendClientMessage(i, -1string); // manda a string pra quem e medico
            
SetPlayerCheckpoint(i3.0Pos[1], Pos[2], Pos[3]);
        }
    }
    return 
1;
}
CMD:ajudaplayer(playeridparams[])
{
    new 
idFloat:Pos2[4];
    if(
Medico[playerid] == 1// checa se ele e medico!
    
{
        if(
sscanf(params"u"id)) return SendClientMessage(playerid, -1"ERRO. Use: /ajudaplayer [ id ]!"); // ve se os parametros do comando ta ok
        
if(!IsPlayerConnected(id)) return SendClientMessage(playerid0xFF0000AA"[ erro ]Esse player nao ta on!");  // se ele n ta on retorna erro
        
if(PedindoAjuda[id] == 0) return SendClientMessage(playerid0xFF00000AA"[ ERRO ]esse player nao ta pedindo ajuda!"); // checa se ele quer ajuda
        
GetPlayerPos(idPos2[1], Pos2[2], Pos2[3]); //pega a posiзгo do id!
        
if(IsPlayerInRangeOfPoint(playerid3.0Pos2[1], Pos2[2], Pos2[3])) // se o medico ta a 3 metros de distancia dele!
        
{
            if(
GetPlayerMoney(id) > 100// checa se o player tem money!
            
{
                
GivePlayerMoney(id, -100);  // tira a money dele
                
SetPlayerHealth(id100);  // seta vida nele
                
PedindoAjuda[id] = 0;      // seta que ele nao quer mais ajuda!
                
ClearAnimations(id);
            }
            else
            {
                
SendClientMessage(playerid0xFF0000AA"[ ERRO ]Esse player nao tem dinheiro o suficiente!"); // se ele n tiver dinheiro
            
}
        }
        else
        {
            
SendClientMessage(playerid0xFF0000AA"[ ERRO ]Vocк nгo ta perto desse player!");
        }
    }
    return 
1;

fiz com pressa ai, desculpa se tem algum erro, mas use esse como base!

Ajudei? ++ rep
Reply
#3

Quote:
Originally Posted by vitinhosamp
Посмотреть сообщение
Usa isso como base, estou fazendo com pressa entao nao pensa que vai sair grande coisa!

PHP код:
#include <a_samp>
#include <zcmd>
#include <sscanf>
new PedindoAjuda[MAX_PLAYERS];
new 
Medico[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
PedindoAjuda[playerid] = 0;
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    
PedindoAjuda[playerid] = 0;
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    new 
Float:Pos[4], string[110], aname[MAX_PLAYER_NAME];
    
GetPlayerPos(playeridPos[1], Pos[2], Pos[3]); // pega a posiзгo dele!
    
SetPlayerPos(playeridPos[1], Pos[2], Pos[3]); // seta a posiзгo dele
    
ApplyAnimation(playerid"PED""WALK_DRUNK"4.1111111); // aqui vc coloca a animaзгo que vc quer!
    
PedindoAjuda[playerid] = 1// seta que ele esta pedindo ajuda!
    
GetPlayerName(playeridanamesizeof(aname));
    
format(stringsizeof(string), "[ x ]O player %s esta pedindo ajuda pois esta morto!"aname); // formata a mensagem para o player!
    
for(new iGetPlayerPoolSize(); i++)  // loop para ver os player on!
    
{
        if(
Medico[i] == 1// se o player for medico
        
{
            
SendClientMessage(i, -1string); // manda a string pra quem e medico
            
SetPlayerCheckpoint(i3.0Pos[1], Pos[2], Pos[3]);
        }
    }
    return 
1;
}
CMD:ajudaplayer(playeridparams[])
{
    new 
idFloat:Pos2[4];
    if(
Medico[playerid] == 1// checa se ele e medico!
    
{
        if(
sscanf(params"u"id)) return SendClientMessage(playerid, -1"ERRO. Use: /ajudaplayer [ id ]!"); // ve se os parametros do comando ta ok
        
if(!IsPlayerConnected(id)) return SendClientMessage(playerid0xFF0000AA"[ erro ]Esse player nao ta on!");  // se ele n ta on retorna erro
        
if(PedindoAjuda[id] == 0) return SendClientMessage(playerid0xFF00000AA"[ ERRO ]esse player nao ta pedindo ajuda!"); // checa se ele quer ajuda
        
GetPlayerPos(idPos2[1], Pos2[2], Pos2[3]); //pega a posiзгo do id!
        
if(IsPlayerInRangeOfPoint(playerid3.0Pos2[1], Pos2[2], Pos2[3])) // se o medico ta a 3 metros de distancia dele!
        
{
            if(
GetPlayerMoney(id) > 100// checa se o player tem money!
            
{
                
GivePlayerMoney(id, -100);  // tira a money dele
                
SetPlayerHealth(id100);  // seta vida nele
                
PedindoAjuda[id] = 0;      // seta que ele nao quer mais ajuda!
                
ClearAnimations(id);
            }
            else
            {
                
SendClientMessage(playerid0xFF0000AA"[ ERRO ]Esse player nao tem dinheiro o suficiente!"); // se ele n tiver dinheiro
            
}
        }
        else
        {
            
SendClientMessage(playerid0xFF0000AA"[ ERRO ]Vocк nгo ta perto desse player!");
        }
    }
    return 
1;

fiz com pressa ai, desculpa se tem algum erro, mas use esse como base!

Ajudei? ++ rep
Agradeзo pela base amigo, me deu uma noзгo boa sobre como criar esse tipo de interaзгo.
Como vocк mesmo disse que fez na pressa, tem sim alguns errinhos bбsicos mas foi importante pra me dar uma boa noзгo!

Agradeзo muito!
Reply
#4

Quote:
Originally Posted by vitinhosamp
Посмотреть сообщение
Usa isso como base, estou fazendo com pressa entao nao pensa que vai sair grande coisa!

PHP код:
#include <a_samp>
#include <zcmd>
#include <sscanf>
new PedindoAjuda[MAX_PLAYERS];
new 
Medico[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
PedindoAjuda[playerid] = 0;
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    
PedindoAjuda[playerid] = 0;
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    new 
Float:Pos[4], string[110], aname[MAX_PLAYER_NAME];
    
GetPlayerPos(playeridPos[1], Pos[2], Pos[3]); // pega a posiзгo dele!
    
SetPlayerPos(playeridPos[1], Pos[2], Pos[3]); // seta a posiзгo dele
    
ApplyAnimation(playerid"PED""WALK_DRUNK"4.1111111); // aqui vc coloca a animaзгo que vc quer!
    
PedindoAjuda[playerid] = 1// seta que ele esta pedindo ajuda!
    
GetPlayerName(playeridanamesizeof(aname));
    
format(stringsizeof(string), "[ x ]O player %s esta pedindo ajuda pois esta morto!"aname); // formata a mensagem para o player!
    
for(new iGetPlayerPoolSize(); i++)  // loop para ver os player on!
    
{
        if(
Medico[i] == 1// se o player for medico
        
{
            
SendClientMessage(i, -1string); // manda a string pra quem e medico
            
SetPlayerCheckpoint(i3.0Pos[1], Pos[2], Pos[3]);
        }
    }
    return 
1;
}
CMD:ajudaplayer(playeridparams[])
{
    new 
idFloat:Pos2[4];
    if(
Medico[playerid] == 1// checa se ele e medico!
    
{
        if(
sscanf(params"u"id)) return SendClientMessage(playerid, -1"ERRO. Use: /ajudaplayer [ id ]!"); // ve se os parametros do comando ta ok
        
if(!IsPlayerConnected(id)) return SendClientMessage(playerid0xFF0000AA"[ erro ]Esse player nao ta on!");  // se ele n ta on retorna erro
        
if(PedindoAjuda[id] == 0) return SendClientMessage(playerid0xFF00000AA"[ ERRO ]esse player nao ta pedindo ajuda!"); // checa se ele quer ajuda
        
GetPlayerPos(idPos2[1], Pos2[2], Pos2[3]); //pega a posiзгo do id!
        
if(IsPlayerInRangeOfPoint(playerid3.0Pos2[1], Pos2[2], Pos2[3])) // se o medico ta a 3 metros de distancia dele!
        
{
            if(
GetPlayerMoney(id) > 100// checa se o player tem money!
            
{
                
GivePlayerMoney(id, -100);  // tira a money dele
                
SetPlayerHealth(id100);  // seta vida nele
                
PedindoAjuda[id] = 0;      // seta que ele nao quer mais ajuda!
                
ClearAnimations(id);
            }
            else
            {
                
SendClientMessage(playerid0xFF0000AA"[ ERRO ]Esse player nao tem dinheiro o suficiente!"); // se ele n tiver dinheiro
            
}
        }
        else
        {
            
SendClientMessage(playerid0xFF0000AA"[ ERRO ]Vocк nгo ta perto desse player!");
        }
    }
    return 
1;

fiz com pressa ai, desculpa se tem algum erro, mas use esse como base!

Ajudei? ++ rep
Hб alguns erros no cуdigo.

-> Vocк criou a Float:Pos2[4], mas deveria ser 3.
Pos2[0], Pos2[1], Pos2[2].

-> Vocк poderia usar bool no cуdigo.
Reply
#5

Quote:
Originally Posted by ipsLuan
Посмотреть сообщение
Hб alguns erros no cуdigo.

-> Vocк criou a Float:Pos2[4], mas deveria ser 3.
Pos2[0], Pos2[1], Pos2[2].

-> Vocк poderia usar bool no cуdigo.
PHP код:
#include <a_samp>
#include <zcmd>
#include <sscanf>
new bool:PedindoAjuda[MAX_PLAYERS];
new 
Medico[MAX_PLAYERS];
public 
OnPlayerConnect(playerid)
{
    
PedindoAjuda[playerid] = 0;
    return 
1;
}
public 
OnPlayerDisconnect(playeridreason)
{
    
PedindoAjuda[playerid] = 0;
    return 
1;
}
public 
OnPlayerDeath(playeridkilleridreason)
{
    new 
FloatPos[3], string[110], aname[MAX_PLAYER_NAME];
    
    
GetPlayerPos(playeridPos[0], Pos[1], Pos[2]); // pega a posiзгo dele!
    
SetPlayerPos(playeridPos[0], Pos[1], Pos[2]); // seta a posiзгo dele
    
    
ApplyAnimation(playerid"PED""WALK_DRUNK"4.1111111); // aqui vc coloca a animaзгo que vc quer!
    
    
PedindoAjuda[playerid] = 1// seta que ele esta pedindo ajuda!
    
    
GetPlayerName(playeridanamesizeof(aname));
    
format(stringsizeof(string), "[ x ]O player %s esta pedindo ajuda pois esta morto!"aname); // formata a mensagem para o player!
    
    
for(new iGetPlayerPoolSize(); i++)  // loop para ver os player on!
    
{
        if(
Medico[i] == 1// se o player for medico
        
{
            
SendClientMessage(i, -1string); // manda a string pra quem e medico
            
SetPlayerCheckpoint(i3.0Pos[0], Pos[1], Pos[2]);
        }
    }
    return 
1;
}
CMD:ajudaplayer(playeridparams[])
{
    new 
idFloat:Pos2[3];
    if(
Medico[playerid] == 1// checa se ele e medico!
    
{
        if(
sscanf(params"u"id))
            return 
SendClientMessage(playerid, -1"ERRO. Use: /ajudaplayer [ id ]!"); // ve se os parametros do comando ta ok
        
if(!IsPlayerConnected(id))
            return 
SendClientMessage(playerid0xFF0000AA"[ erro ]Esse player nao ta on!");  // se ele n ta on retorna erro
        
if(PedindoAjuda[id] == 0)
            return 
SendClientMessage(playerid0xFF00000AA"[ ERRO ]esse player nao ta pedindo ajuda!"); // checa se ele quer ajuda
        
GetPlayerPos(idPos2[0], Pos2[1], Pos2[2]); //pega a posiзгo do id!
        
if(IsPlayerInRangeOfPoint(playerid3.0Pos2[0], Pos2[1], Pos2[2])) // se o medico ta a 3 metros de distancia dele!
        
{
            if(
GetPlayerMoney(id) > 100// checa se o player tem money!
            
{
                
GivePlayerMoney(id, -100);  // tira a money dele
                
SetPlayerHealth(id100);  // seta vida nele
                
PedindoAjuda[id] = 0;      // seta que ele nao quer mais ajuda!
                
ClearAnimations(id);
            }
            else
            {
                
SendClientMessage(playerid0xFF0000AA"[ ERRO ]Esse player nao tem dinheiro o suficiente!"); // se ele n tiver dinheiro
            
}
        }
        else
        {
            
SendClientMessage(playerid0xFF0000AA"[ ERRO ]Vocк nгo ta perto desse player!");
        }
    }
    return 
1;
}
CMD:ajudarplayers(playerid)
{
    if(
Variavel Admin// Variavel para chegar se o player й admin.
    
return SendClientMessage(playerid, -1"[ERRO]: Vocк nгo й administrador para usar esse comando!"); // caso nгo for retorna ao erro.
        
    
if(PedindoAjuda[playerid] == false)
    {
        
PedindoAjuda[playerid] = true;
        
SendClientMessage(playerid, -1"Vocк ativou o modo 'Ajuda Player'. Para desativar digite o comando novamente!");
     }
     else
     {
         
PedindoAjuda[playerid] = false;
         
SendClientMessage(playerid, -1"Vocк desativou o modo 'Ajuda Player'. Para ativar digite o comando novamente!");
     }
     return 
1;

Corrigi os "erros" e adicionei o comando "AjudarPlayers" assim, vocк pode desativar e ativar quando quiser.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)