Sabe aquele gamemode de Team Deathmatch que você criou, e sempre tinha que dar punições administrativas para certos jogadores que não respeitavam a regra de não matar companheiros de equipe? Existe uma função nativa do SAMP para que você consiga impedir o famoso team kill.
[Ver tutorial]
A utilização é bem simples, temos duas funções básicas SetPlayerTeam e GetPlayerTeam.
Playerid = ID do jogador no qual o time será definido.
Teamid = ID do time.
Playerid = ID do jogador no qual o time será definido.
A função irá retornar a id do atual time do player, se não houver, irá retornar NO_TEAM ou 255.
Você deve começar setando o time do jogador depois do último momento em que o time é setado, provavelmente será no OnPlayerSpawn, exemplo:
Lembrando que não irei criar as classes abaixo, é apenas um exemplo do uso básico da função.
Se ainda houver algum problema com team kills, pode ser que os jogadores estejam desincronizados com o time, então na callback OnPlayerStreamIn defina novamente os times, que tudo funcionará normalmente.
Obrigado ao CyNic pela informação.
Nota: Não é recomendado que se utilize SetPlayerTeam na callback OnPlayerRequestClass, considerando que o player irá passar entre os times para escolher o desejado.
Creditos: Linow
Utilização
Se você já possui um sistema de times em seu gamemode, ficará mais fácil o uso da função, caso ainda não tenha um, o tutorial do nosso amigo arakuta poderá lhe ajudar.[Ver tutorial]
A utilização é bem simples, temos duas funções básicas SetPlayerTeam e GetPlayerTeam.
Code:
SetPlayerTeam(playerid, teamid)
Teamid = ID do time.
Code:
GetPlayerTeam(playerid)
A função irá retornar a id do atual time do player, se não houver, irá retornar NO_TEAM ou 255.
Você deve começar setando o time do jogador depois do último momento em que o time é setado, provavelmente será no OnPlayerSpawn, exemplo:
Lembrando que não irei criar as classes abaixo, é apenas um exemplo do uso básico da função.
Code:
// Topo do GM
#define TEAM_GROVE 0
#define TEAM_BALLAS 1
enum pInfo
{
Kills,
Deaths,
pTeam
}
new PlayerInfo[MAX_PLAYERS][pInfo];
// OnPlayerRequestClass
public OnPlayerRequestClass(playerid, classid)
{
if(classid == 0) PlayerInfo[playerid][pTeam] = TEAM_GROVE;
else if(classid == 1) PlayerInfo[playerid][pTeam] = TEAM_BALLAS;
}
// OnPlayerSpawn
public OnPlayerSpawn(playerid)
{
if(PlayerInfo[playerid][pTeam] == TEAM_GROVE) SetPlayerTeam(playerid, TEAM_GROVE);
else if(PlayerInfo[playerid][pTeam] == TEAM_BALLAS) SetPlayerTeam(playerid, TEAM_BALLAS);
}
pawn Code:
public OnPlayerStreamIn(playerid, forplayerid) { SetPlayerTeam(playerid, PlayerInfo[playerid][pTeam]); SetPlayerTeam(forplayerid, PlayerInfo[forplayerid][pTeam]); return 1; }
Nota: Não é recomendado que se utilize SetPlayerTeam na callback OnPlayerRequestClass, considerando que o player irá passar entre os times para escolher o desejado.
Creditos: Linow
0 comentários:
Postar um comentário