[Tutorial] Impedir Friendly Fire
#1

O que й?

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.

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.
Код:
SetPlayerTeam(playerid, teamid)
Playerid = ID do jogador no qual o time serб definido.
Teamid = ID do time.
Код:
GetPlayerTeam(playerid)
Playerid = ID do jogador a retornar seu time.
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.

Код:
// 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);
}
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.
pawn Код:
public OnPlayerStreamIn(playerid, forplayerid)
{
    SetPlayerTeam(playerid, PlayerInfo[playerid][pTeam]);
    SetPlayerTeam(forplayerid, PlayerInfo[forplayerid][pTeam]);
    return 1;
}
Adicionais

Fix para desincronizaзгo do player com o team - CyNic
Sugestгo para explanaзгo das funзхes - DiReCt hIt

Obrigado a todos os contribuidores.

Nota: Nгo й recomendado que se utilize SetPlayerTeam na callback OnPlayerRequestClass, considerando que o player irб passar entre os times para escolher o desejado.
Reply
#2

Faltou o AddPlayerClassEx.
Reply
#3

Quote:
Originally Posted by Linow
Посмотреть сообщение
Simples assim, e vocк nгo terб mais problemas.
Por experiкncia prуpria digo que sу haverб um problema, por algum motivo os jogadores, mesmo que o cуdigo esteja corretamente escrito, ficam desincronizados com seu time e podem matar seus aliados, й um bug antigo que pode ser resolvido usando a callback abaixo:

Exemplo usando seu cуdigo:
pawn Код:
public OnPlayerStreamIn(playerid, forplayerid)
{
    SetPlayerTeam(playerid, PlayerInfo[playerid][pTeam]);
    SetPlayerTeam(forplayerid, PlayerInfo[forplayerid][pTeam]);
    return 1;
}
Reply
#4

Bem pequeno o tutorial, funзхes bбsicas mesmo assim ficou bem explicado
Reply
#5

Quote:
Originally Posted by CyNiC
Посмотреть сообщение
Por experiкncia prуpria digo que sу haverб um problema, por algum motivo os jogadores, mesmo que o cуdigo esteja corretamente escrito, ficam desincronizados com seu time e podem matar seus aliados, й um bug antigo que pode ser resolvido usando a callback abaixo:

Exemplo usando seu cуdigo:
pawn Код:
public OnPlayerStreamIn(playerid, forplayerid)
{
    SetPlayerTeam(playerid, PlayerInfo[playerid][pTeam]);
    SetPlayerTeam(forplayerid, PlayerInfo[forplayerid][pTeam]);
    return 1;
}
Bem, eu nunca tive problemas relacionado a isso, mas irei adicionar lб encima. Obrigado.

Quote:
Originally Posted by Murilo_sousa
Посмотреть сообщение
Bem pequeno o tutorial, funзхes bбsicas mesmo assim ficou bem explicado
Era a minha intenзгo, explicar de um jeito fбcil e rбpido
Muito obrigado pela sua avaliaзгo.
Reply
#6

bem legal!
Reply
#7

Bem legal, vai ser ъtil para alguns... Bem explicado!
Reply
#8

Faltou explicar as funзхes, mais gostei do tutorial .
Reply
#9

Quote:
Originally Posted by DiReCt hIt
Посмотреть сообщение
Faltou explicar as funзхes, mais gostei do tutorial .
Adicionado, obrigado pela sugestгo
Reply
#10

Por Nada .

~valeu pelos crйditos, mesmo que seja simples a sugestгo .
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)