[Guia] Como crear un servidor TDM

Aprende lo que no sabes de este lenguaje y encuentra herramientas y códigos útiles.

Moderador: Ayudantes

Reglas del Foro
  • Si tu código es corto, no crees un tema nuevo para liberarlo, publica un mensaje en el tema [Funciones] ¡Publica tu código aquí!.
  • Si creas una guía, debes explicar el código claramente. Evita poner la explicación en forma de comentarios dentro del mismo y no olvides utilizar el BBCode correspondiente: [Pawn]Código aquí[/Pawn].
  • No postear códigos sin probar. Publicar códigos con errores (que impidan compilar el script para el cual está destinado) en este apartado es motivo de sanción.
  • Si tu código necesita plugins, includes u otros códigos adicionales para funcionar, debes mencionarlo en el mensaje.
  • Si has utilizado códigos de otros autores, recuerda colocar los créditos correspondientes. (El plagio es motivo de sanción).
  • Si tu aporte es para un GameMode en específico, debes publicar el tema en el apartado "Guías y Aportes para GameModes específicos".
Responder
Smoke123
Aprendiz
Aprendiz
Mensajes: 17
Registrado: 26 Jul 2014 14:56
Ubicación: Uruguay
Reputación: 0

26 Jul 2014 21:27

Bueno,en este tutorial enseñare a crear un servidor TDM desde 0.

Que es TDM?
Team Deaht Match , consiste en lo mismo que un dm/fr pero esto se hace en equipos.Ej:
Equipo groove vs Equipo Balla.

Comenzando el tutorial

[/b]

Requisitos:
  • Compilador Pawno
    Conocimientos Basicos sobres Pawn
Comenzemos definiendo los includes y las id de los teams.En este caso seran 2,polis y grooves
 Codigo Pawno:
1
2
3
4
5
6
7
8

#include <a_samp>
#include <zcmd>
#include <sscanf2>
new gTeam[MAX_PLAYERS];//Esta variable llamara los equipos
new gPlayerClass[MAX_PLAYERS];
//teams
#define TEAM_POLICIA 0
#define TEAM_GROOVE 1//GROOVE ,nombre del equipo,1 id del equipo.
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 8
Bien,con eso ya tenemos una parte de nuestro GM hecha,procederemos a darle las armas y el spawn a los equipos.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

public OnPlayerSpawn(playerid)
{
if(gTeam[playerid] == TEAM_POLICIA)//si el jugador es policia...
{
SetPlayerArmour(playerid,100);
SetPlayerPos(playerid,1545.34,-1675.66,13.56);//marcamos su zona de spawn,en este caso LSPD
SetPlayerColor(playerid, 0x0080C0FF);//le damos un color
GivePlayerWeapon(playerid, 23,2000);//silenciada pistola
GivePlayerWeapon(playerid, 27,2000);//esco de combate
GivePlayerWeapon(playerid, 29,2000);//mp5
GivePlayerWeapon(playerid, 31,2000);//m4
GivePlayerWeapon(playerid, 34,500);//sniper
GivePlayerWeapon(playerid, 39,5);//c4
GivePlayerWeapon(playerid, 3,1);//palo policia
SetPlayerFightingStyle(playerid, FIGHT_STYLE_BOXING);//le damos un estilo de pelea
}
if(gTeam[playerid] == TEAM_GROOVE)
{
SetPlayerArmour(playerid,100);
SetPlayerColor(playerid, 0x33AA33AA);//le damos un color
SetPlayerPos(playerid, 2526.5264,-1667.4340,15.1687);//le damos un spawn a groove
GivePlayerWeapon(playerid, 4,1);//cuchillo
GivePlayerWeapon(playerid, 18,5);//molotov
GivePlayerWeapon(playerid, 22,2000);//9mm
GivePlayerWeapon(playerid, 25,500);//escopeta
GivePlayerWeapon(playerid, 30,2500);//ak47
GivePlayerWeapon(playerid, 33,500);//rifle
GivePlayerWeapon(playerid, 41,1000);//lata de gas
GivePlayerWeapon(playerid, 28,2000);//uzi
GivePlayerWeapon(playerid,1,1);
SetPlayerFightingStyle(playerid, FIGHT_STYLE_KUNGFU);
}
SetPlayerTeam(playerid, gTeam[playerid]);//Importante,esto hace que los de un mismo equipo no se puedan matar
return 1;
}
  Cantidad de llaves: Abiertas(3)-Cerradas(3) | Lineas Totales: 35
Bien,hemos creado ya los equipos.
Que falta?
Pues nos falta,darles skins a los teams,y ponerlos en OnPlayerRequestSpawn.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10

public OnGameModeInit()
{
AddPlayerClass(280,2161.5742,1905.0181,10.8203,35.7537,0,0,0,0,0,0); // poli
AddPlayerClass(281,2496.5444,-1670.4746,13.3359,84.2291,0,0,0,0,0,0); // poli
AddPlayerClass(284,2496.5444,-1670.4746,13.3359,84.2291,0,0,0,0,0,0); // poli
AddPlayerClass(106,800.7412,-1394.9552,13.4432,336.0926,0,0,0,0,0,0); // groove
AddPlayerClass(107,2485.0122,-1677.2888,13.3373,110.6219,0,0,0,0,0,0); // groove
AddPlayerClass(105,800.7412,-1394.9552,13.4432,336.0926,0,0,0,0,0,0); // groove
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 10
Bien,ya tenemos los skins y equipos ahora la parte,un poquito más complicada.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

public OnPlayerRequestClass(playerid, classid)
{
gPlayerClass[playerid] = classid;//Le daremos una "Class" a los skins,estas "Class" seran los teams

switch (classid)
{
case 0:
{
 gTeam[playerid] = TEAM_POLICIA;
 GameTextForPlayer(playerid, "~b~Policia", 1000, 6);// 
}
case 1: 
{
 gTeam[playerid] = TEAM_POLICIA;
 GameTextForPlayer(playerid, "~b~Policia", 1000, 6);// 
}
case 2: 
{
 gTeam[playerid] = TEAM_POLICIA;
 GameTextForPlayer(playerid, "~b~Policia", 1000, 6);//
}


case 3: 
{
 gTeam[playerid] = TEAM_GROOVE;
 GameTextForPlayer(playerid, "~g~Groove", 1000, 6);// 
}
case 4: 
{
 gTeam[playerid] = TEAM_GROOVE;
 GameTextForPlayer(playerid, "~g~Groove", 1000, 6);//
}
case 5: 
{
 gTeam[playerid] = TEAM_GROOVE;
 GameTextForPlayer(playerid, "~g~Groove", 1000, 6);//
}
}//cerramos el switch
SetPlayerPos(playerid, 489.8416,-72.4437,999.2266);//esto sera la posicion que ve el player cuando esta elijiendo equipo.
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;
}
  Cantidad de llaves: Abiertas(8)-Cerradas(8) | Lineas Totales: 46
Y listo Terminamos la base de un TDM

Ahora,deben ir agregando comandos,equipos ,mapeos,sistema de registro etc.
Les dejo algunas cosas opcionales ,por si quieren agregarle:
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

public OnPlayerDeath(playerid, killerid, reason)
{
SendDeathMessage(killerid, playerid, reason); //Los iconos de muerte en la pantalla
SetPlayerScore(killerid,(GetPlayerScore(killerid))+1); //Esto da al asesino 1 punto de score.
GivePlayerMoney(killerid, 1000);
GivePlayerMoney(playerid, -1000);
GameTextForPlayer(killerid, "~r~Score +1", 1000, 5);
GameTextForPlayer(playerid, "~b~Muerto", 1000, 0);
return 1;
}


/*Sistema de radios por equipos /r
*/

 CMD:r(playerid, params[])
{
new text[128], names[60];
if(sscanf(params, "s", text)) SendClientMessage(playerid, 0xFFFF00FF, "USA: /R <texto>");
else
{
 new string[322];
 GetPlayerName(playerid, names, 60);
 format(string, 322, "(%s) (Radio): %s", names, text);
 for(new i=0;i<MAX_PLAYER;i++)
 {
if(IsPlayerConnected(i))
{
if(gTeam[i] == gTeam[playerid])
{
SendClientMessage(i, 0xFF0080FF, string);
 }
}
}
}
return 1;
}
  Cantidad de llaves: Abiertas(6)-Cerradas(6) | Lineas Totales: 37
Dudas,recomendaciones,etc,comentenlas. -nosweat
Última edición por Smoke123 el 28 Jul 2014 20:15, editado 2 veces en total.
Lista de las cosas que odio
  • -ZC
    -Gente que se cree superior a otra
    -FZ
    -Fifa
Trabajando en 3 includes y un server TDM :D
[/color]
andres-lokillo
Baneado
Baneado
Mensajes: 225
Registrado: 14 Jul 2014 15:21
Reputación: -1

28 Jul 2014 17:49

ESTÁ BUENO PERO AL INGRESAR AL SERVIDOR PODRIAS HACERLO CON DIALOGOS ASI SE LE GUARDA SU PASS PERO SIN HASH PORQUE ASI NO SIRVE :c
Mis Aportes
Sistema de GPS Como FenixZone Mi servidor un nuevo proyecto que es GM base desde 0 pueden verlo desde aca
[pawn]IP: 198.100.144.190:2519[/pawn]
[G]hetto
Baneado
Baneado
Mensajes: 163
Registrado: 07 Jul 2014 17:40
Reputación: -4

28 Jul 2014 18:34

No sé, me huele a Copy & Paste.
* Podría usar AddPlayerClassEx.
* Y el CommandText?
¿Por que tanta obsesión de crear un GM "parecido" a FZ?

Smoke123
Aprendiz
Aprendiz
Mensajes: 17
Registrado: 26 Jul 2014 14:56
Ubicación: Uruguay
Reputación: 0

28 Jul 2014 20:07

[G]hetto escribió:No sé, me huele a Copy & Paste.
* Podría usar AddPlayerClassEx.
* Y el CommandText?
No use ningun copy paste.Saque los codigos de mi GM,y fui explicando como hacerlo.
Use AddPlayerClass porque se me hace mas comodo.Sobre CommandText,no se si te refieres a OnPlayerCommandText,si es eso,no lo use porque use ZCMD.
Si piensas que es copy paste,tampoco me importa porque no lo es.

Saludos
andres-lokillo escribió:ESTÁ BUENO PERO AL INGRESAR AL SERVIDOR PODRIAS HACERLO CON DIALOGOS ASI SE LE GUARDA SU PASS PERO SIN HASH PORQUE ASI NO SIRVE :c
Despues le agrego un sistema de registro con Djson o Dini xD
Lista de las cosas que odio
  • -ZC
    -Gente que se cree superior a otra
    -FZ
    -Fifa
Trabajando en 3 includes y un server TDM :D
[/color]
Avatar de Usuario
Trevor_Taylor
Aprendiz
Aprendiz
Mensajes: 19
Registrado: 17 Abr 2014 18:02
Reputación: 0

28 Jul 2014 23:30

Muy Bueno la verdad pronto posteare una Gamemode TDM con varios sistemas y mapeos pero me diste la idea , Buen Aporte...

Suzuki
Aprendiz
Aprendiz
Mensajes: 31
Registrado: 20 Jul 2014 21:26
Reputación: 1

02 Ago 2014 16:21

Agregale como poner zonas para conquistar y estaria super completo.. 8/10
CarlosJCN
Aprendiz
Aprendiz
Mensajes: 3
Registrado: 27 Dic 2014 20:04
Reputación: 0

31 Dic 2014 13:04

HOLA ME GUSTA TU GM PERO PERO LE PUEDES QUITAR EL SISTEMA DE CUENTAS TE LO AGRADECIERA BASTANTE Y ME DICES COMO PONER MAS EQUIPOS POR FAVOR
Smoke12345
Junior
Junior
Mensajes: 227
Registrado: 30 Dic 2014 12:40
Ubicación: Uruguay
Contactar:
Reputación: 13

31 Dic 2014 14:21

Para añadir nuevos equipos ; se hace esto

Vamos a los define
 Codigo Pawno:
1
2
3
4

#define TEAM_POLICIA 0
#define TEAM_GROOVE 1
//agregaremos un nuevo define
#define TEAM_Nombre del team 2 
  Cantidad de llaves: Abiertas(0)-Cerradas(0) | Lineas Totales: 4
Ahi ya tenemos una parte agregada.
Ahora ve a http://wiki.sa-mp.com/wiki/Skins:All y elije las id de los skins,hare un ejemplo con el equipo "Ballas"
Vamos a OnGameModeInit
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13

public OnGameModeInit()
{
AddPlayerClass(280,2161.5742,1905.0181,10.8203,35.7537,0,0,0,0,0,0); // poli
AddPlayerClass(281,2496.5444,-1670.4746,13.3359,84.2291,0,0,0,0,0,0); // poli
AddPlayerClass(284,2496.5444,-1670.4746,13.3359,84.2291,0,0,0,0,0,0); // poli
AddPlayerClass(106,800.7412,-1394.9552,13.4432,336.0926,0,0,0,0,0,0); // groove
AddPlayerClass(107,2485.0122,-1677.2888,13.3373,110.6219,0,0,0,0,0,0); // groove
AddPlayerClass(105,800.7412,-1394.9552,13.4432,336.0926,0,0,0,0,0,0); // groove
AddPlayerClass(102,800.7412,-1394.9552,13.4432,336.0926,0,0,0,0,0,0);//ballas
AddPlayerClass(103,800.7412,-1394.9552,13.4432,336.0926,0,0,0,0,0,0);//ballas
AddPlayerClass(104,800.7412,-1394.9552,13.4432,336.0926,0,0,0,0,0,0);//ballas
return 1;
}
  Cantidad de llaves: Abiertas(1)-Cerradas(1) | Lineas Totales: 13
//Ahora vamos a OnPlayerRequestSpawn e iremos agregando Case:,recuerda situarte donde esta el switch de OnPlayerRequestClass.

case 6:
{
gTeam[playerid] = TEAM_BALLAS;//ojo aqui escribiras el nombre de TU equipo,esto es un ejemplo
GameTextForPlayer(playerid, "~g~ballas", 1000, 6);//lo mismo aqui aca pondras el nombre de tu equipo
}
case 7:
{
gTeam[playerid] = TEAM_BALLAS;//ojo aqui escribiras el nombre de TU equipo,esto es un ejemplo
GameTextForPlayer(playerid, "~g~ballas", 1000, 6);//lo mismo aqui aca pondras el nombre de tu equipo
}
case 8:
{
gTeam[playerid] = TEAM_BALLAS;//ojo aqui escribiras el nombre de TU equipo,esto es un ejemplo
GameTextForPlayer(playerid, "~g~ballas", 1000, 6);//lo mismo aqui aca pondras el nombre de tu equipo
}
[/pawn]
Stanley_Crip
Aprendiz
Aprendiz
Mensajes: 18
Registrado: 02 Nov 2014 14:47
Reputación: 0

03 Feb 2015 23:00

Cuando entro al servidor no me pone a escoger equipo (skin), Se queda donde inicia samp y nada, debo agragar algun codigo o algo?
Smoke12345
Junior
Junior
Mensajes: 227
Registrado: 30 Dic 2014 12:40
Ubicación: Uruguay
Contactar:
Reputación: 13

03 Feb 2015 23:05

Stanley_Crip escribió:Cuando entro al servidor no me pone a escoger equipo (skin), Se queda donde inicia samp y nada, debo agragar algun codigo o algo?
No te olvides de agregar esta callback y si creastes nuevos equipos asegurate de colocarlos dentro del switch.
 Codigo Pawno:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

public OnPlayerRequestClass(playerid, classid)
{
gPlayerClass[playerid] = classid;//Le daremos una "Class" a los skins,estas "Class" seran los teams

switch (classid)
{
case 0:
{
 gTeam[playerid] = TEAM_POLICIA;
 GameTextForPlayer(playerid, "~b~Policia", 1000, 6);// 
}
case 1: 
{
 gTeam[playerid] = TEAM_POLICIA;
 GameTextForPlayer(playerid, "~b~Policia", 1000, 6);// 
}
case 2: 
{
 gTeam[playerid] = TEAM_POLICIA;
 GameTextForPlayer(playerid, "~b~Policia", 1000, 6);//
}


case 3: 
{
 gTeam[playerid] = TEAM_GROOVE;
 GameTextForPlayer(playerid, "~g~Groove", 1000, 6);// 
}
case 4: 
{
 gTeam[playerid] = TEAM_GROOVE;
 GameTextForPlayer(playerid, "~g~Groove", 1000, 6);//
}
case 5: 
{
 gTeam[playerid] = TEAM_GROOVE;
 GameTextForPlayer(playerid, "~g~Groove", 1000, 6);//
}
}//cerramos el switch
SetPlayerPos(playerid, 489.8416,-72.4437,999.2266);//esto sera la posicion que ve el player cuando esta elijiendo equipo.
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;
}
  Cantidad de llaves: Abiertas(8)-Cerradas(8) | Lineas Totales: 46
JuanS
Avanzado
Avanzado
Mensajes: 821
Registrado: 05 Sep 2014 08:14
Reputación: 37

11 Feb 2015 03:42

Esto está mal.
Smoke123 escribió:public OnPlayerDeath(playerid, killerid, reason)
{
SendDeathMessage(killerid, playerid, reason); //Los iconos de muerte en la pantalla
SetPlayerScore(killerid,(GetPlayerScore(killerid))+1); //Esto da al asesino 1 punto de score.
GivePlayerMoney(killerid, 1000);
GivePlayerMoney(playerid, -1000);
GameTextForPlayer(killerid, "~r~Score +1", 1000, 5);
GameTextForPlayer(playerid, "~b~Muerto", 1000, 0);
return 1;
}
Servicio de scriping Pawn profesional.

Beneficios:

• Código estructurado y bien escrito.
• Variables y funciones debidamente nombrados.
• Código optimo y eficiente.
• Uso adecuado de la lengua inglés.
• Servicio rápido.


Importante:

Al comprar el código es completamente suyo.
No hay créditos necesarios y la edición/liberación es completamente su problema.


Enviame un pm aquí, con información y el propósito de tu script y yo voy a responder con la información requerida en tu mensaje.
cloudx
Aprendiz
Aprendiz
Mensajes: 28
Registrado: 06 Feb 2015 23:39
Reputación: 0

22 Mar 2015 21:55

Muy bueno.
[pawn]
HostName: [!] Absolute Zone RolePlay v2.0 [*I*]
Address: 162.248.95.154:6000
Players: 100 / 100
Ping: 141
Mode: AZ:RP v2.0
Map: LS / SF / LV[/pawn]
cloudx
Aprendiz
Aprendiz
Mensajes: 28
Registrado: 06 Feb 2015 23:39
Reputación: 0

11 Abr 2015 19:34

/*Sistema de radios por equipos /r
*/


CMD:r(playerid, params[])
{
new text[128], names[60];
if(sscanf(params, "s", text)) SendClientMessage(playerid, 0xFFFF00FF, "USA: /R <texto>");
else
{
new string[322];
GetPlayerName(playerid, names, 60);
format(string, 322, "(%s) (Radio): %s", names, text);
for(new i=0;i<MAX_PLAYER;i++)
{
if(IsPlayerConnected(i))
{
if(gTeam == gTeam[playerid])
{
SendClientMessage(i, 0xFF0080FF, string);
}
}
}
}
return 1;
}
En ese cmd lo que da error es esto
for(new i=0;i<MAX_PLAYER;i++)
[pawn]
HostName: [!] Absolute Zone RolePlay v2.0 [*I*]
Address: 162.248.95.154:6000
Players: 100 / 100
Ping: 141
Mode: AZ:RP v2.0
Map: LS / SF / LV[/pawn]
Responder