Tutorial de PAWN ES

From SA-MP Wiki

Jump to: navigation, search

Contents

Realización de un Deathmatch

Hacer un deatchmatch en PAWN no puede ser más simple. Basta con abrir Pawno (véase Scripting Editors) y haga clic en nuevo. Allí tiene usted, su primer guión. Para ejecutar primero guardarlo (la mayoría de la gente guardarlo en "< San Andreas Instalar Directorio> / muestras / gamemodes / src /" pero es más fácil (para los locales de ensayo) para salvarlo A "< SA> / muestras / gamemodes /"), continuación, haga clic en el botón de la barra de herramientas a la izquierda inmediata del botón de la flecha azul. Esto compilar el. Propia a un archivo. Amx, en la misma carpeta, sin embargo para el juego para ver lo que necesita para estar en "< SA> / muestras / gamemodes /" ( Ver por qué hay más fácil de ahorro, que ya existe hace después de compilar). Ahora para probar tu mapa tendrás que configurar un servidor local y el cambio en su modalidad (tipo " changemode <your name>" en modo de servidor de la ventana) .

Si todos los que trabajaron, cuando usted se conecta a su servidor a través de la sa-mp cliente y comienza el juego debe aparecer fuera de un casino en Las Venturas. Lamentablemente usted no será capaz de ver el carácter que se están seleccionando (en la actualidad hay sólo uno), pero podemos cambiar fácilmente de que más tarde. Tampoco es muy interesante como deathmatch sólo tiene que luchar con los puños y no adversarios, pero como se trata de un servidor local que actualmente no hay mucho que podemos hacer sobre el segundo problema.

Ahora, la primera cosa que es probable que desee añadir a su modo de las armas, éstas son controladas en un "por clase". Cada jugador tiene que elegir entre al comienzo de un juego (o más si cambia) se llama un jugador " clase". Es posible que todos tienen las mismas armas o todos diferentes, o una combinación. Haya establecido en cada uno de las clases de armas por separado, de modo que sean todos tienen las mismas armas que usted simplemente copiar los datos de armas y la añado a cada clase, esto garantizará un equilibrado partido, pero no es demasiado interesante, sin embargo, depende de usted. En la búsqueda de editor esta línea:

AddPlayerClass (0, 1958,3783, 1343,1572, 15,3746, 269,1425, 0, 0, 0, 0, 0, 0);

Esta es una definición de clase, los parámetros son los siguientes:

AddPlayerClass (Jugador modelo, X, Y, Z, A, 0 Armas, Munición 0, armas 1, Munición 1, de armas 2, Munición 2);

Jugador modelo puede recibí de " peds.ide", " X Y", " y" " Z" son las coordenadas de donde el jugador se generan cuando se seleccionan y " A" enfrenta es su punto de vista, hay un punto de desovar Por clase, sin embargo esta puede ser encontrado el código con el que se cubrirá después. Las armas se pueden encontrar los números aquí y la munición son simplemente números de la cantidad de munición que desea darle al jugador por armas (munición de armas de cuerpo a cuerpo es siempre 0).

Ahora copia esta línea:

AddPlayerClass (102, 1958,3783, 1343,1572, 15,3746, 269,1425, 5, 0, 22, 100, 32, 50);

Y enmarcarlo en la línea que se encuentra en su guión. Ahora, tendrá una elección entre ingame CJ sin nada y un Balla con un bate de béisbol, pistola y Tec9, si quieres probar esto incluso añadir sus propias armas a CJ o añadiendo más jugador bajo estas clases con otras armas.

'Nota: las armas que aparecen en la página vinculada a decir que por encima de accidentes de "( si intenta )" fuego o " ' (No utilizable )" no funcionan con cualquiera de SA-MP.

Obtención de coordenadas, ángulos y las identificaciones del modelo

Probablemente desee mover algunos de sus puntos acerca de desove para que todo el mundo no desovar en el mismo lugar, lo que haría más bien aburrido deathmatch y camping increíblemente fácil. Este es el modo de depuración cuando entra en escena Run " samp_debug.exe" San Andreas en su directorio raíz y cada vez que desee guardar una coordinación de tipo "/ salvar " En el juego (prensa " t" o bajo la clave de escape para que aparezca el texto / chat rápida). De esta forma, guardará su posición actual, el ángulo y playerid a un archivo llamado " savedpositions.txt" SA en su directorio raíz.

Introducción a las funciones y callbacks

Antes de que podamos seguir tendrá que ser introducido a callbacks. Estos son los trozos de código que ya están en su gamemode que mirar algo como esto:

OnPlayerDisconnect público (playerid)
(
     Printf ( "OnPlayerDisconnect (% d)", playerid);
     Retorno 1;
)

Este es el OnPlayerDisconnect de llamada, significa que esta sección del código se ejecuta por el servidor cada vez que un jugador se desconecta, por lo que si deseamos mostrar un gran mensaje en la pantalla cuando un jugador se le deja poner el código para que aquí. Todos los callbacks el juego utiliza (salvo 2, pero son utilizados por filterscripts, no gamemodes y no están incluidos aquí) están en su archivo, no se puede construir tu propio. La mayoría de ellos parece que la anterior hace, pero algunos (por ejemplo, " OnPlayerCommandText", " OnPlayerRequestClass", " OnGameModeInit ' '" Y " principal" (que no es estrictamente una llamada y nunca se ha más que su juego el título)) tienen ya en otros bits, ya sea para hacer el juego o al trabajo Mostrarle lo que hay que hacer allí. También puede utilizar otros similares bloques (como estamos a punto de), que tienen el mismo aspecto, pero las funciones se llaman, estos tienen que ser llamado por usted mismo. Aquí tenemos una función llamada " IMadeThis" (nota la falta de espacios).

IMadeThis ()
(
     / / Este es un comentario y es ignorado por el juego / compilador
     / * Por lo tanto,
         Es
         Este * /
     Print ( "Esto se imprime al servidor de la ventana");
     Return 0;
)

Usted puede haber notado también una muy rápida introducción a los comentarios, sobre todo después de una línea "//" será ignorado, al igual que cualquier cosa en cualquier lugar entre "/*' '" Y "*/". Como la función no es llamado por el juego tenemos que llamar nosotros mismos de una llamada, se trata de muertos fácil ya que la mayoría de los comandos que con el uso de código son, de hecho, premade funciones (comandos son, en realidad, es diferente), por lo que si coloca :

IMadeThis ();

En su OnPlayerDisconnect de llamada (que debe estar entre los "{" y "}" y también antes de la "' «Retorno 1 ;" se enfrentaría esa función e imprimir un mensaje en el servidor de la ventana cuando se desconecta (recordemos las otras cosas allí se ignoran). Nosotros por lo general no desea imprimir las cosas en el servidor de ventanas Y todos los " imprimir" y " printf" funciones ya están en el archivo general, destituido por el codificador. Sólo las cosas entre los tirantes están en el Función / de llamada (a partir de ahora se refiere a la función de llamadas, así como que son un caso especial de la función), la línea anterior es el nombre de la función. " Público" significa que la función puede Ser ejecutado por cualquier otro segmento de código, se trata esencialmente de su código puede ejecutarse cuando te llaman, no estamos preocupados por funciones privadas ya que no se suelen utilizar en los SA-MP (en su caso). Los corchetes después de la Función de adjuntar el nombre de la lista de parámetros, que no han cubierto estos, pero aún se puede ver un ejemplo de su uso en algunas de las llamadas en su archivo en blanco, tenga en cuenta que los parámetros son automáticamente cuando transcurrido el juego llama a la función, si queremos Utilizando una costumbre funciones (es decir, no una llamada) y queremos utilizar algunos parámetros que tendrá que pasar por nosotros mismos. Un diminuto otra cosa que cabe mencionar es que todas las líneas además de las líneas de frenos con (e incluso en ciertas circunstancias , Pero estas serán explicadas más adelante) y las líneas directamente ante un corsé (llaves pueden estar en la final de la línea o que, tal y como se muestra aquí, en una nueva línea), termina con un punto y coma para indicar el final de un proceso.

Hacer un Deathmatch por equipos

Bien, ahora ya sabes cómo hacer clases y colocarlos sobre le mostraremos como configurar los equipos, este será el primer bit de codificación real, pero es bastante fácil. Solo voy a estar utilizando las dos clases se describe en esta página de modo que si tiene más de eliminarlos ahora o empezar un nuevo modo de transporte y asegúrese de que sólo estas dos clases se encuentran están numerados en el orden de 0, por lo que la primera clase en su archivo Es 0, el segundo es el 1 y así sucesivamente (las computadoras y los programas casi siempre empezar de 0 en el conteo (se dará cuenta de que su playerid en juego es una prueba 0)). Queremos fijar el equipo sobre la base de que la clase que elijan (ya sea Grove o Balla), puede ver los callbacks y creo que esto iría en la OnPlayerRequestClass función, y que sería el correcto. Cuando seleccione la de su clase que se va a configurar el equipo sobre la base de que, no podemos hacerlo en el OnPlayerSpawn funcionar como en ese momento no sabemos la clase que hayan seleccionado (que es un parámetro y sólo los parámetros que se pasan O que son mundiales en su guión (que abarcará más tarde) puede ser utilizado en cualquier función). Primero tenemos que definir nuestros equipos, en virtud de la "# incluir" línea (s) en la parte superior de su archivo añadir estas líneas:

# Define TEAM_GROVE 1
# Define TEAM_BALLA 2
# Define TEAM_GROVE_COLOR 0x00FF00AA / / Bright Green (en formato RGBA)
# Define TEAM_BALLA_COLOR 0xFF00FFAA / / Bright Purple

Si desea alterar los colores, está bien, basta recordar que los dos últimos dígitos son el alfa y la más baja es la que menos se puede ver el color. Define son exclusivamente reemplazos, ahora si alguna vez desea utilizar el número 1 en su secuencia de comandos que puede utilizar en lugar TEAM_GROVE, esta no es una buena idea que los normales, ya que los cálculos los hace más difíciles de leer, pero para la utilización de equipos para denotar, que se Sólo denota por un número, que hace que sea mucho más clara lo que está pasando (y lo hace muy fácil de cambiar los equipos de emergencia en todo o modificar más tarde como sólo tiene que cambiar el 1 en el lugar de definir todos los casos de que en todo el código. Cuando el código es compilado, todos los " TEAM_GROVE" s se sustituirá por la de 1, no es como una variable, es una constante, no cambia. Ahora, en virtud de esas líneas Añadir:

New gTeam [MAX_PLAYERS];

Esto se llama una matriz. Es básicamente un conjunto de muchas variables (lugares en los que almacenar los datos a leer y escribir) y agrupadas juntas para almacenar gran cantidad de datos a la vez. El " MAX_PLAYERS" es una constante predefinida (hace exactamente de la misma manera como lo hicimos nuestra define. MAX_PLAYERS es, en realidad, en conjunto, a 200 SA-MP 0,2, de modo que esto significa que nuestro Array puede almacenar hasta 200 piezas de los datos. G El nombre significa en el mundo, pero no por ello es mundial (simplemente hace más fácil decir qué hacer lo que las variables, la definición de una función que fuera de los medios es mundial y puede Ser utilizado por todas nuestras funciones. Cualquier variable definida en una función es local a esa función y no puede tener el mismo nombre que otra variable en la misma función o una variable global (que es también la razón por la g es útil), Sin embargo puede tener el mismo nombre que otra variable en función de otro. Todos los " playerid" variables en su secuencia de comandos en blanco son, de hecho, todas las variables independientes, cada local a una función diferente, sin embargo son Transcurrido el mismo todos los datos, pero recuerde que las funciones que realice no tienen de que los datos automáticamente. Ahora que hemos establecido podemos establecer los equipos:

SetPlayerTeamFromClass (playerid, classid)
(
If (classid == 0)
(
GTeam [playerid] = TEAM_GROVE;
)
Más
(
GTeam [playerid] = TEAM_BALLA;
)
)

El lugar que el código EXTERIORES una función en su código (como se trata de una nueva función) y poner estas líneas como las primeras cosas que después de la apertura llaves en su OnPlayerRequestClass de llamada (aviso de la forma en que la variables no son globales, así que tienen que pasar ellos Fuera demasiado a la función):

SetPlayerTeamFromClass (playerid, classid);

De esta forma, guardará los jugadores del equipo a un arreglo a través de nuestra nueva función. En un conjunto de datos es referenciado por un número, por lo array [0] es el primer tema de los datos, matriz [1] es el segundo y así sucesivamente, como estamos usando gTeam [playerid], en función de que estamos playerid pasado se Definir donde en la matriz para almacenar los datos, de modo que durante 5 jugador sus datos serán almacenados en la posición 5 array (recuerde, esta es la 6 ª pieza de información). Ahora copia esta función:

SetPlayerToTeamColor (playerid)
(
If (gTeam [playerid] == TEAM_GROVE)
(
SetPlayerColor (playerid, TEAM_GROVE_COLOR);
)
Si otra persona (gTeam [playerid] == TEAM_BALLA)
(
SetPlayerColor (playerid, TEAM_BALLA_COLOR);
)
)

Y añada la siguiente línea a OnPlayerSpawn:

SetPlayerToTeamColor (playerid);

Ahora tenemos nuestros equipos, pero ¿qué hemos hecho?

 si (classid == 0)
(
GTeam [playerid] = TEAM_GROVE;
)

En nuestra primera función, comprobamos que la clase eligieron (recuerde que dice que la primera clase se define en su archivo es clase 0?) "==" Significa "es igual a", un Único signo igual se limita a establecer la variable con el número dado (como se ve en la línea siguiente, pero uno). Las llaves separar las funciones entre ellos del resto del código, en bits sólo hay ejecutado si la clase seleccionada es 0 (cj), si no lo es, el otro comando entra en juego y ejecuta lugar (este se ejecuta cada vez que " El comando" si es falsa (es decir, la clase no es 0)), ya que sólo disponemos de dos clases de elegir entre esto debe significar que estamos Balla:

 otra persona
(
GTeam [playerid] = TEAM_BALLA;
)

No necesitamos una vuelta aquí, ya que no hay datos para el regreso.

En la segunda mitad el conjunto de los jugadores de color cuando desovan, así que usted puede decir que en el equipo que. A medida que salvó a su equipo de una serie, todavía podemos acceder a los datos a pesar de que está en una función aparte.

 si (gTeam [playerid] == TEAM_GROVE)
(
SetPlayerColor (playerid, TEAM_GROVE_COLOR);
)

Esperemos que se puede ver lo que esta haciendo ahora es, si el jugador que acaba generado (como referencia por playerid) es en TEAM_GROVE, nos ponemos a su color TEAM_GROVEs color.

 si otra persona (gTeam [playerid] == TEAM_BALLA)
(
SetPlayerColor (playerid, TEAM_BALLA_COLOR);
)

Esta próxima sección es un poco diferente, podría easilly se han realizado de este modo:

 otra persona
(
SetPlayerColor (playerid, TEAM_BALLA_COLOR);
)

Pero la forma en que se realiza le permite definir su color a color TEAM_BALLAs sólo si la primera parte es falsa (como ordenados por el ELSE) Y si se encuentran en TEAM_BALLA, esto le permite añadir más opciones añadiendo más " ' Si otra persona()" bloques a la final como uno sólo será ejecutada si todos los bloques que antes no lo eran.

Vehículos

OK, si tiene capítulos anteriores, debería tener un muy básico deathmatch o deathmatch con equipo de desove colocado siempre que lo desee, de modo permite añadir algunos vehículos. La mayoría de los comandos en PAWN hacer casi exactamente como son el nombre, queremos añadir un vehículo que permite buscar de manera vehículo comandos:

CreateVehicle ();
 
AddStaticVehicle ();

Si hace clic en cualquiera de estos y busque en la barra de estado (la barra en la parte inferior del editor) verá su sintaxis (lo que la información y los parámetros que necesita para dar trabajo a ellos):

 [A_samp.inc] nativos CreateVehicle (vehicletype, Float: x, Float: y, Float: z, Float: rotación, color1, color2, respawn_time);

 [A_samp.inc] nativos AddStaticVehicle (modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float: z_angle, color1, color2);

Ahora que ambos se busca igualmente como buenos, pero aquí es donde entra en el conocimiento previo, sólo lugares CreateVehicle un coche ingame, AddStaticVehicle crea un vehículo desovar, por lo que cuando el coche es destruido o desynched que reaparecerá de nuevo cuando se haya colocado el desove. Estos tienen que ser creados al comienzo del juego, por lo que tendría esto en su lugar " OnGameModeInit ()" de llamada.

pulgar | la derecha | 300px | Lista de coche colores La modelid / vehicletype números se pueden encontrar en su archivo vehicles.ide, la Flota no son sólo números enteros, fundamentalmente coordina y ángulos , Y el color de los números se pueden encontrar en su archivo carcols.dat, busque el número de referencia para el color que desea, de manera " negro" es " 0 ", " Taxi amarillo" es " 6", " currant azul poli es" " 32" etc, "- 1" medios azar (de la que los colores por defecto del coche, que se encuentra más baja en el carcols.dat archivo). Si se desea obtener la posición de un vehículo, entrar en modo de depuración, seleccione su vehículo, y obtener en el tipo "/ salvar" entonces abrir " savedpositions.txt " Y copia de la línea. Si desea un vehículo para desovar en modo de depuración, el tipo "/ v <vehicleid>" ingame y de los vehículos que se generan (vehicleid se toma de nuevo de vehicles.ide), o de tipo "" '/ Vsel" para que aparezca la pantalla de vehículo de mando.

Tengo estas coordenadas:

 2040,2279, 1344,4127, el 11,0, 3,5436

Nota: Estos se llaman carrozas, el 11,0 es un flotador a pesar de ser en su conjunto, cualquier número entero está utilizando como una carroza debe tener un rastrero ". 0" para denotar como un flotador. Estos números están en el formato de Inglés en el uso de un punto decimal ("."), comas se utilizan para separar los parámetros. Asimismo, recuerda el 4 º número es el ángulo, de modo que si ahora añade la siguiente línea en el modo de juego en OnGameModeInit, recompilar y probar, vamos a obtener un rosa infernus fuera del casino, que es el valor por defecto para desovar posición CJ. Nota: en un coche que utiliza el color secundario (como un coche cop (id 596)), esto sería un coche de color rosa y azul, como que es el color secundario.

AddStaticVehicle (411, 2040,2279, 1344,4127, 10,6719, 3,5436, 126, 54);

Ahora podrá ir sobre el ahorro y la creación de puestos de tantos coches como quiera (hasta un límite definido un motor de 700 automóviles individuales, 70 diferentes tipos (modelos) de los coches). El desove guardado en el archivo se han "- 1, -1" como los colores por defecto.