[TUTORIAL] Crear un servidor TDM
#1

їQuй es un servidor TDM?

Un servidor TDM "Team Death Match", traducido al castellano como "Combate por equipos" (a mi manera, mбs fбcil de entender), son servidores, como dice su nombre, de combates por equipos.

їCуmo lo creo?

Si quieres hacer uno y no sabes como, en este tutorial lo aprenderбs paso por paso.

1. Definimos lo que nos va a hacer posible poner equipos:

pawn Код:
new gPlayerClass[MAX_PLAYERS];
new gTeam[MAX_PLAYERS];

2. Definimos los equipos:

Pueden ser tantos equipos como quieras, en este caso solo pondrй 2.

pawn Код:
#define TEAM_POLICIAS 0
#define TEAM_LADRONEs 1
Ya tenemos todo definido, ahora pasemos a otra cosa.


3. Aсadimos los personajes:

pawn Код:
public OnGameModeInit()
{
  //Todas las cosas que hayan...

  AddPlayerClass(skin, coordenadas, arma1, muiniciуn1, arma2, mui2, arma3, mui3); //POLICIA
  AddPlayerClass(skin, coordenadas, arma1, muiniciуn1, arma2, mui2, arma3, mui3); //LADRУN
  return 1;
}

4. Hacemos que el jugador que haga spawn sea de un equipo u otro:

Esto hace que cuando hagas spawn del jugador Policнa o Ladrуn, sea un equipo u otro.

pawn Код:
public OnPlayerRequestClass(playerid, classid)
{
  gPlayerClass[playerid] = classid;

  switch (classid)
  {
    case 0:    
    {
      gTeam[playerid] = TEAM_POLICIA;            //Esto comprueba de que equipo es el personaje de antes. En este caso el primer pesonaje es policнa.
      GameTextForPlayer(playerid, "~g~Policia", 1000, 6);  //Esto es el texto que aparece. "~g~" es el color (Green - Verde).

    }
    case 1: //Case 1 es el personaje que pusimos antes, el segundo.
    {
      gTeam[playerid] = TEAM_LADRON;            
      GameTextForPlayer(playerid, "~r~Ladron", 1000, 6);   // "~r~" (Red - Rojo)
    }
  }
  //Posiciones en la que se ven los jugadores para hacer spawn.
  SetPlayerPos(playerid, 489.8416,-72.4437,999.2266);
  SetPlayerFacingAngle( playerid, 2.3616 );
  SetPlayerCameraPos(playerid, 491.6849,-72.3607,999.2117);
  SetPlayerCameraLookAt(playerid, 489.8416,-72.4437,999.2266);
  SetPlayerInterior(playerid ,11);
  return 1;
}

5. Ponemos los colores de los quipos:

pawn Код:
public OnPlayerSpawn(playerid)
{
  if(gTeam[playerid] == TEAM_POLICIA)
  {
    SetPlayerColor(playerid, color);
  }
  if(gTeam[playerid] == TEAM_LADRON)
  {
         SetPlayerColor(playerid, color);
  }

  //Tambiйn podemos aсadir un mensaje que informe de que un jugador ha entrado.
 
  new string[64], pName[MAX_PLAYER_NAME];
  if(gTeam[playerid] == gTeam[playerid])
  {
    GetPlayerName(playerid,pNombre,MAX_PLAYER_NAME);
    format(string,sizeof string,"%s se ha unido a la batalla.",pNombre); //Mensaje. Si lo vais a modificar no cambies %s (es el nombre del jugador).
    SendClientMessageToAll(color, string);
  }

6. Modificamos el score del jugador cuando mata a alguien:

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
  SendDeathMessage(killerid, playerid, reason); //Este es el mensaje que sale a la derecha de la pantalla de este modo: Asesino - Arma - Muerto
  SetPlayerScore(killerid,(GetPlayerScore(killerid))+1); //Esto da al asesino 1 punto de score.
  SetPlayerScore(playerid,(GetPlayerScore(playerid))-1); //Esto quita al muerto 1 punto de score.
 
  //Si el jugador de un equipo mata al mismo miembro de este:
  if(gTeam[playerid] == 1 && gTeam[killerid] == 1)
  {
    SetPlayerScore(killerid,(GetPlayerScore(killerid))-1); //Se le baja -1 al score.
    new string[50];
    format(string, sizeof(string), "~r~No mates a tus aliados"); //Texo, podeis cambiarlo pero no aсadais 'с' porque no lo lee.
    GameTextForPlayer(killerid, string, 3000, 4);
    PlayerPlaySound(killerid, 1002, 0.0, 0.0, 0.0); //Sonido.
    SetPlayerHealth(killerid, 0.0); //Mata al asesino.
    return true; //Fin.
  }

  //Tambiйn podemos aсadir el mensaje que aparece en el juego GTA San Andreas de "Eliminado".

  new string[50];
  format(string, sizeof(string), "~w~Eliminado");
  GameTextForPlayer(playerid, string, 3000, 2);
  return 1;
}

Y ya asн tenemos lo bбsico para hacer nuestro servidor.


__________________________________________________ ____________________________________

Otras cosas de interйs.

» Crear un comando solo para un equipo.

Con esto harнamos un comando en el que un equipo pudiera leerlo y el otro no.
Lo que crearemos serб un "Dialog" o menъ.



pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
  if(!strcmp(cmdtext, "/policia", true))
  {
    if (gTeam[playerid] == TEAM_POLICIA) //Esto comprueba que el jugador sea de un equipo u otro.
    {
      ShowPlayerDialog(playerid,1,DIALOG_STYLE_MSGBOX,"Policнas", "Todo lo que querais\n Esta n con el palito hace que cambiemos de renglуn.","Aceptar","Cancelar");
    } else {   //Si el jugador es Policнa, se muestra el menъ, sino:
    SendClientMessage(playerid, 0xFF0000FFF, "Tъ no eres Policнa.");
  }
  return 0; /* O tambiйn podemos poner: return SendClientMessage(playerid, 0xffffffff, "Ese comando no existe."); */
}

» Comandos ъtiles:

●Radio de equipo.

pawn Код:
//Como es un comando dcmd hay que definir primero dcmd:
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

//Ahora vamos con el comando:

public OnPlayerCommandText(playerid, cmdtext[])
{
  //Todo lo que tengamos...

  dcmd(r, 1, cmdtext);  //Esto define el comando.
  dcmd(radio, 5, cmdtext); //Este es el segundo comando, mбs largo.
  return 0; /* Como dije antes se puede sustituir por un mensaje. */
}
dcmd_r(playerid, params[])
{
    new text[256], name[60];
    if(sscanf(params, "s", text)) SendClientMessage(playerid, 0xFFFF00FF, "USA: /R <texto>");
    else
    {
      new string[322];
      GetPlayerName(playerid, name, 60);
      format(string, 322, "(%s) (Radio): %s", name, text);
      for(new i=0;i<MAX_PLAYER;i++)
      {
        if(IsPlayerConnected(i))
        {
            if(gTeam[i] == gTeam[playerid])
            {
              SendClientMessage(i, 0xFF0080FF, string);
                }
            }
        }
    }
    return 1;
}
●Mensajes personales.

pawn Код:
//Esto lo podemos poner debajo de dcmd(r, 1, cmdtext);
  dcmd(mp, 2, cmdtext);
  return 0; /* Y sigo diciendo lo mismo sobre esto.*/

dcmd_mp(playerid, params[])
{
    new ID, text[256];
    if(sscanf(params, "is", ID, text)) SendClientMessage(playerid, 0xFFFF00FF, "USA: /MP <id> <texto>");
    else if(IsPlayerConnected(ID) == 0)
    {
      new string[100];
      format(string, 100, "%d no estб jugando.", ID);
      SendClientMessage(playerid, 0xFF0000FF, string);
    }
    else
    {
      new string[300], name[60], name2[60];
      GetPlayerName(playerid, name, 60);
      GetPlayerName(ID, name2, 60);
      format(string, 300, "(%s[%d]) (MP): %s", name, playerid, text);
      SendClientMessage(ID, 0xFF8000FF, string);
      format(string, 300, "Has enviado a %s[%d] un mensaje privado: %s", name2, ID, text);
      SendClientMessage(playerid, 0xFF8000FF, string);
    }
    return 1;
}

Espero que os haya servido mucho. NOTA: Seguramente habrб cosas des ordenadas, ordenadlas vosotros porque yo ya no puedo hacer mбs

Seguid colaborando, comed sano, haced deporte y jugad mucho a Sa-mp ^^



Reply
#2

Util para los nuevos. Buen aporte
Reply
#3

Quote:
Originally Posted by MrDeath
Util para los nuevos. Buen aporte
Reply
#4

esta muy bueno el tuto xDD lo sacastes de tu gm jejeje xD
Reply
#5

Quote:
Originally Posted by xenowort
esta muy bueno el tuto xDD lo sacastes de tu gm jejeje xD
Sн, mi Gm, y NO me lo bajй, lo hice yo solo
Reply
#6

Quote:
Originally Posted by CristianTdj
Quote:
Originally Posted by xenowort
esta muy bueno el tuto xDD lo sacastes de tu gm jejeje xD
Sн, mi Gm, y NO me lo bajй, lo hice yo solo
XDDDD esta bien
Reply
#7

Buen aporte, Bastante util para aquellos que estan comenzando a crear un GM.
Reply
#8

Quote:
Originally Posted by SenseiRD
Buen aporte, Bastante util para aquellos que estan comenzando a crear un GM.
Gracias, lo hice especialmente para esas personas
Reply
#9

Tengo una duda

Como pongo las cordenadas XDesq soy nuevo mira por ejemplo quiero q de los ladrones la posision sea
x 1998 z 22 y 1668 a 97 namas ocupo q me digan asi por ejemplo

aki es x,aki es z,aki es y,aki es a

asi segun el orden
Reply
#10

Quote:
Originally Posted by Nruluis
Tengo una duda

Como pongo las cordenadas XDesq soy nuevo mira por ejemplo quiero q de los ladrones la posision sea
x 1998 z 22 y 1668 a 97 namas ocupo q me digan asi por ejemplo

aki es x,aki es z,aki es y,aki es a

asi segun el orden
Entra en un servidor y ve a la posiciуn donde quieres que salgan, entonces escribe /Save <comentario>.
Ej: /Save SpawnLadrones

Ademбs te falta la posiciуn A.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)