27.02.2010, 08:21
ї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:
2. Definimos los equipos:
Pueden ser tantos equipos como quieras, en este caso solo pondrй 2.
Ya tenemos todo definido, ahora pasemos a otra cosa.
3. Aсadimos los personajes:
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.
5. Ponemos los colores de los quipos:
6. Modificamos el score del jugador cuando mata a alguien:
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ъ.
» Comandos ъtiles:
●Radio de equipo.
●Mensajes personales.
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 ^^
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
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;
}
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 ^^