[Ajuda] Bloqueio de Classe
#1

Olб pessoas,
Queria pedir ajuda em um GameMode que estou fazendo, sou principiante em scriptaзгo.
Bom,
Tenho 2 classes, eu queria que uma dessas classes, ficasse disponнvel para escolha durante um certo tempo, apуs o inicio da GM dai quando acabasse o tempo, ela seria bloqueada, apуs ela ser bloqueada eu queria que um dos participantes da classe que foi bloqueada, fosse forзado aleatoriamente para a outra classe.

ex: (Loguei no servidor, tem a classe humano e zumbi, dai eu sу posso escolher humanos durante um certo tempo apуs o inicio da GM, ao acabar o tempo a classe zumbi fosse liberada e a humanos bloqueada, e 1 dos players humanos fosse 'Infectado' aleatoriamente, ou seja, forзado para a classe zumbi)

Nгo acho que isso seja muito difнcil de realizar, nгo preciso exatamente de um cуdigo (que seria util mesmo assim), mas sim de uma sugestгo de como proceder.
Reply
#2

coloque no topo
PHP код:
#define Team_Humanos    1    //definindo que os humanos sгo o 1
#define Team_Zumbi        2    //definindo que os zumbi sгo 2
new vefique;                //isso irб guardar o tempo de que irб bloquear o spawn dos humandos
new Teams[MAX_PLAYERS];        //isso irб guarda o id do seu time 
Procure pela callback OnPlayerConnect, nela iremos ativar um tempo de 30 segundos, e deixaremos
PVarInt como 1 ou seja ativo para dar spawn no time dos humanos.
Код:
public OnPlayerConnect(playerid)
{
    SetPVarInt(playerid,"SpawnHumanos", 1);//setando que que ele pode spawnar nos humanos
    vefique = SetTimerEx("VerHumanos", 30000, false, "i", playerid);//criando um timer de 30 segundos para bloquear o spawn humanos
    return 1;
}
public criada para verificar o tempo, caso passe os 30 segundos irб chamar a funзгo abaixo
ou seja deixaremos PVarInt como 0.

Код:
forward VerHumanos(playerid);
public VerHumanos(playerid)
{
	SetPVarInt(playerid,"SpawnHumanos", 0)//caso o tempo chegar aqui o spawn humanos serб igual a 0 serб bloqueado
        return 1;
}
isso setara os times de acordo com a classe de seleзгo
Код:
public OnPlayerRequestClass(playerid, classid)
{
	if(classid == 1)
	{
    	Team[playerid] = Team_Humanos;//na classe serб time dos humanos
	}
    if(classid == 2)
	{
    	Team[playerid] = Team_Zumbi;//na classe serб time dos zumbis
	}
	return 1;
}
irб verificar quando player apertar em 'spawn' PVarInt como 0, ele serб bloqueado na classe de selelзгo
caso seje do time humandos e caso estiver

Код:
public OnPlayerRequestSpawn(playerid)//verificar o spawn
{
    if(Team[playerid] == Team_Humanos)
    {
        //caso ele estiver igual a 0 serб bloqueado
        if(GetPVarInt(playerid,"SpawnHumanos") == 0)
        //mensagem de erro
        return 0;//iremos parar s funзгo e bloquear o spawn
    }
    return 1;
}
caso ele conseguir dar spawn antes dos 30 segundos iremos matar o tempo de verificaзгo
Код:
public OnPlayerSpawn(playerid)
{
    if(Team[playerid] == Team_Humanos){//caso seje do time humanos
    if(GetPVarInt(playerid,"SpawnHumanos") == 1)//caso ele nгo estiver bloqueado
    {
        KillTimer(vefique);
    }}
    return 1;
}
sei que minha explicaзгo tб uma merda mas taн o code
OBS:troque Teams pelo seu sistema de times.
Reply
#3

Fiz algumas adaptaзхes e atй resultou,
porem eu queria que o player sу pudesse escolher a classe humanos 1 vez a cada GMX, se eu tiro SetPVarInt(playerid,"SpawnHumanos",1); de OnPlayerConnect dai jб fica setado como 0 e o player nгo consegue escolher a classe humanos.
Coloquei SetTimerEx("VerHumanos", 30000, false, "i"); em OnGameModeInit para quando a GM iniciar o timer ser iniciado tambйm, mas eu quero que apуs o timer acabar, os player que forem logar, a classe jб esteja bloqueada, ou sejб, teria que por em OnPlayerConnect algo que verifique o timer, caso ja tenha acabo, a classe fosse bloqueada, caso nгo, liberada..., como proceder?
Reply
#4

@UP!
Reply
#5

Nгo entendi muito, VC quer bloquear a classe de seleзгo apуs o GM iniciar?
Reply
#6

Quando o GM iniciar, seja criado um timer, apos o timer acabar dai a classe seja bloqueada, impedindo que os prуximos players que logarem no servidor, possam escolher esta classe tendeu ?
Seu cуdigo chego quase la, porem, quando os players logam todos conseguem acessar a classe 1. Eu queria que sу conseguia entrar na classe quem conseguiu logar dentro do timer executado ao ligar a GM.
Reply
#7

@UP!
Reply
#8

Por favor up o codigo da sua GM e as variavel HUMANO e ZUMBI para facilitar pra nos neh...
Reply
#9

Код:
#define Team_Humanos 0
#define Team_Zumbis 1

//OnGameModeinit
SetTimer("Humanos", 30000, false);

forward Humanos(playerid);
public Humanos(playerid)
{
	SetPVarInt(playerid,"SpawnHumanos",0);
 	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, 1885.1719, -1361.9524, 19.2964);
	SetPlayerCameraPos(playerid, 1880.6277, -1357.0547, 20.2604);
	SetPlayerCameraLookAt(playerid, 1881.3735, -1357.7219, 20.2407);
	SetPlayerFacingAngle(playerid, 90);
 	SetPlayerWeather(playerid, 20);
	if(classid == 0)
	{
		GameTextForPlayer(playerid,"~b~Humanos",3000,6);
		gTeam[playerid] = Team_Humanos;
	}
	if(classid == 1)
	{
		GameTextForPlayer(playerid,"~r~Zumbis",3000,6);
		gTeam[playerid] = Team_Zumbis;
	}
	return 1;
}

public OnPlayerConnect(playerid)
{
       SetPVarInt(playerid,"SpawnHumanos",1);
	return 1;
}

public OnPlayerSpawn(playerid)
{
    SetPlayerWeather(playerid, 22);
    new str[286];
	if(gTeam[playerid] == Team_Humanos){
    if(GetPVarInt(playerid,"SpawnHumanos") == 1){
	    InHumanos++;
	    SetPlayerTeam(playerid,Team_Humanos);
	    SetPlayerColor(playerid,0x00BFFFFF);
        GivePlayerWeapon(playerid, 24, 80000);
        GivePlayerWeapon(playerid, 26, 80000);
        GivePlayerWeapon(playerid, 30, 80000);
        GivePlayerWeapon(playerid, 33, 80000);
		new mSpawn = random(sizeof(HumanosSpawn));
		SetPlayerPosEx(playerid,HumanosSpawn[mSpawn][0],HumanosSpawn[mSpawn][1],HumanosSpawn[mSpawn][2],HumanosSpawn[mSpawn][3],10,0);
		SetCameraBehindPlayer(playerid);
		format(str,sizeof(str),"Humanos: ~w~%d",InHumanos);
	    TextDrawSetString(Score[0],str);
 		}
    }
  	if(gTeam[playerid] == Team_Zumbis)
	{
		InZumbis++;
	    SetPlayerTeam(playerid,Team_Zumbis);
	    SetPlayerColor(playerid,0xCD5C5CFF);
	    SetPlayerArmour(playerid,100);
	    SetPlayerSkin(playerid, 162);
	    GivePlayerWeapon(playerid, 9, 1);
	    new aSpawn = random(sizeof(ZumbisSpawn));
		SetPlayerPosEx(playerid,ZumbisSpawn[aSpawn][0],ZumbisSpawn[aSpawn][1],ZumbisSpawn[aSpawn][2],ZumbisSpawn[aSpawn][3],10,0);
		SetCameraBehindPlayer(playerid);
		format(str,sizeof(str),"Zumbis: ~w~%d",InZumbis);
	    TextDrawSetString(Score[1],str);
 	}

	return 1;
}

public OnPlayerRequestSpawn(playerid)
{
   if(gTeam[playerid] == Team_Humanos){
   if(GetPVarInt(playerid,"SpawnHumanos") == 0){
   SendClientMessage(playerid, VERMELHO, "Vocк nгo pode mais ser humano");
   return 0;
   }
   }
   return 1;
}
Creio que o problema esta em OnPlayerConnect pois estб setando a permissгo de logar na classe humanos, precisa ser feito algo que verifique se o timer iniciado em ongamemodeinit acabou ou nгo, caso tenha acabo, dai sim fosse executada a aзгo de bloquear para os prуximos players que logarem no servidor, nгo terem acesso a classe humanos. entendeu?
Reply
#10

up...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)