https://wiki.multitheftauto.com/api.php?action=feedcontributions&user=Rockeromx&feedformat=atomMulti Theft Auto: Wiki - User contributions [en]2024-03-29T02:32:46ZUser contributionsMediaWiki 1.39.3https://wiki.multitheftauto.com/index.php?title=ES/P%C3%A1gina_Principal&diff=39274ES/Página Principal2014-04-07T20:55:24Z<p>Rockeromx: </p>
<hr />
<div>__NOTOC__<br />
__NOEDITSECTION__<br />
<br />
{| width="100%" cellspacing="0" cellpadding="0"<br />
| colspan="2" |<br />
<div style="border: 1px solid #D8D8D8; padding: 10px; height: 140px;"><br />
[[File:Mtalogo.png|left|100px]]'''<br />
Bienvenid@ a la Wiki de Multi Theft Auto: San Andreas en español.''' Aquí puedes encontrar mucha información sobre el uso de Multi Theft Auto. <br />
<br />
Hay muchas [[ES/Cómo puedes ayudar|cosas que puedes hacer para ayudarnos]] a mejorar MTA - crea un mapa, un modo de juego, escribe códigos de ejemplo, tutoriales, traduce páginas del inglés al español, o simplemente juega y reporta los bugs que encuentres.<br />
<br />
</div><br />
|}<br />
{| width="100%" cellspacing="0" cellpadding="0"<br />
| colspan="2" |<br />
|-<br />
|width="50%" style="vertical-align:top;" |<div style="border: 1px solid #D8D8D8; padding:10px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Input-gaming.png]]</div><br />
=== El Juego ===<br />
<div style="background: #FFEEAA;"><br />
[[File:Go-down.png|link=http://mtasa.com/]] ''' [http://mtasa.com/ Descargar Multi Theft Auto: San Andreas {{Current Version|full}}]'''</div><br />
* [[ES/Manual del Cliente|Manual del Cliente]] [[Image:flag_es.png|En Español|20px]]<br />
* [[ES/Cambios en la versión 1.3|Cambios de la versión 1.3]] [[Image:flag_es.png|En Español|20px]] (Traducción 80%)<br />
* [[ES/Problemas_Conocidos_-_FAQ|Problemas Conocidos]] [[Image:flag_es.png|En Español|20px]] (Traducción: 10%)<br />
* [[Upgrading_from_MTA:Race|Cambiando MTA:Race a MTA:SA 1.0.x]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Manual del Servidor|Manual del Servidor]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Map_manager|El Resource "Map Manager"]] [[Image:flag_us.png|En Inglés|20px]]<br />
<br />
====Editor de Mapas====<br />
*[[ES/Resource:Editor|Manual del Editor]] [[Image:flag_es.png|En Español|20px]]<br />
*[[Resource:Editor/EDF|EDF: Formato de Definiciones del Editor]] [[Image:flag_us.png|En Inglés|20px]]<br />
*[[Resource:Editor/Plugins|Plugins para el Editor]] [[Image:flag_us.png|En Inglés|20px]]<br />
*[[ES/Resource:Editor#Preguntas_Frecuentes|Preguntas Frecuentes]] [[Image:flag_es.png|En Español|20px]]<br />
<br />
====Bases de Datos====<br />
* [[:Category:Resource|Catálogo de Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Scripts de Cliente|Scripts de Cliente]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Modules| Módulos]] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Applications-development.png]]</div><br />
====Desarrollando Multi Theft Auto====<br />
[[File:Go-down.png|link=http://nightly.mtasa.com/]] [http://nightly.mtasa.com/ Nightly builds]<br />
* [[Compiling_MTASA|Compilando MTA:SA en Windows]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Building_MTASA_Server_on_Mac_OS_X|Compilando MTA:SA en Mac OS X]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Building_MTASA_Server_on_GNU_Linux|Compilando MTA:SA en GNU/Linux]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Coding guidelines|Guías de Codificación]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://code.google.com/p/mtasa-blue Google Code SVN] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://bugs.mtasa.com/roadmap_page.php Seguimiento de Versiones] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://bugs.mtasa.com/ Central de Reportes de Bugs] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Applications-office.png]]</div><br />
===Wiki - Cómo puedes ayudar===<br />
* Termina la documentación para [[:Category:Incomplete|funciones incompletas]].<br />
* [[:Category:Needs_Example|Crea ejemplos para eventos y funciones]].<br />
* Revisa y verifica [[:Category:Needs Checking|páginas que necesitan revisión]].<br />
* Escribe tutoriales para ayudar a la gente.<br />
* Traduce las páginas del wiki.<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Internet-group-chat.png]]</div><br />
=== Comunidad ===<br />
* [http://forum.multitheftauto.com/ Foro] [[Image:flag_us.png|En Inglés|20px]]<br />
** [http://forum.multitheftauto.com/viewforum.php?f=122&sid=72be1c29dd00c4442f8112cc09818283 Sección en español] [[Image:flag_es.png|En Español|20px]]<br />
* [irc://irc.multitheftauto.com/mta Canal IRC] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://community.mtasa.com/ Comunidad MTA] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://www.youtube.com/user/MTAQA Canal de YouTube oficial] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<div style="padding:4px 8px 8px 8px; margin:10px; text-align:center"><br />
[[File:Osi symbol.png|75px|link=http://opensource.org/]]<br />
'''Multi Theft Auto''' es un '''Proyecto de Código Abierto'''. <br />
¡Todos podemos contribuir a mejorar Multi Theft Auto!<br />
</div><br />
<br />
| width="50%" style="vertical-align:top;" |<br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Accessories-text-editor.png]]</div><br />
=== Scripting ===<br />
* [[ES/Resources|Introducción a los Resources]] [[Image:flag_es.png|En Español|20px]]<br />
** [[Resource Web Access|Acceso Web con Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[Meta.xml|Sobre el archivo "meta.xml"]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[:Category:Resource|Catálogo de Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[ES/ACL|Lista de Control del Acceso (ACL)]] [[Image:flag_es.png|En Español|20px]]<br />
* [[ES/Introducción a Lua|Introducción a Lua]] [[Image:flag_es.png|En Español|20px]]<br />
** [[ES/Introducción a la Programación de GUI|Introducción al GUI]] [[Image:flag_es.png|En Español|20px]]<br />
** [[Debugging|Tutorial de Depuración]] [[Image:flag_us.png|En Inglés|20px]] - Encontrar errores en scripts.<br />
** [http://forum.mtasa.com/viewtopic.php?f=145&t=70852 Tutoriales]<br />
* [[ES/Useful_Functions| Funciones útiles]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Writing_Gamemodes|Escribiendo Modos de Juego]] [[Image:flag_us.png|En Inglés|20px]]<br />
====Ayuda General de Lua====<br />
*[http://www.lua.org/manual/5.1/es/manual.html Manual de Referencia de Lua 5.1] [[Image:flag_es.png|En Español|20px]]<br />
*[http://www.lua.org/pil/index.html Manual Programando en Lua] [[Image:flag_us.png|En Inglés|20px]]<br />
*[http://lua-users.org/wiki/TutorialDirectory Lua Wiki] [[Image:flag_us.png|En Inglés|20px]]<br />
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Guía general de Lua de Nixstaller] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;"><br />
====Referencia====<br />
* [[Client Scripting Functions|Funciones de Cliente]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Client Scripting Events|Eventos de Cliente]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Funciones de Servidor|Funciones de Servidor]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Server Scripting Events|Eventos de Servidor]] [[Image:flag_us.png|En Inglés|20px]]<br />
<!-- Incomplete * [[Module functions|Lista de funciones de módulos externos de servidor]] [[Image:flag_us.png|En Inglés]] --><br />
* [[ES/Clases MTA| Clases de MTA]] [[Image:flag_es.png|En Español|20px]]<br />
**[[Element tree| Árbol de Elementos]] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:System-file-manager.png]]</div><br />
====[[Id|Lista de ID's]]====<br />
*[[Animations|Animaciones]]<br />
*[[ES/Skins de Personajes|Skins]]<br />
*[[CJ_Clothes|Ropa]]<br />
*[[Garage|Garajes]]<br />
*[[Interior IDs|Interiores]]<br />
*[[Projectiles|Proyectiles]]<br />
*[[Radar Blips|Iconos de Radar]]<br />
*[[Sounds|Sonidos]]<br />
*[[Vehicle IDs|ID's de Vehículos]]<br />
*[[Vehicle Colors|Colores de Vehículos]]<br />
*[[Vehicle Upgrades|Mejoras de Vehículos]]<br />
*[[Weapons|Armas]]<br />
*[[ES/Climas|Climas]]<br />
</div><br />
<br />
<div style="border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;"><br />
<br />
====Equipo de Traducción====<br />
* [mailto:zorrigas@gtagamingchile.com zorrigas@gtagamingchile.com]<br><br />
* [mailto:Brijido_XD@hotmail.com Brijido_XD@hotmail.com]<br><br />
* Benxamix2/The Kid<br />
* [mailto:matiuno@gmail.com matiuno@gmail.com]<br><br />
* [mailto:cesarcastillo4@gmail.com cesarcastillo4@gmail.com]<br><br />
* [mailto:alex_firexx@hotmail.com alex_firexx@hotmail.com]<br><br />
* [mailto:carlos_olivo@msn.com carlos_olivo@msn.com]<br><br />
* AlexD<br />
* Alexs_Steel[mailto:alexTO123@hotmail.com]<br><br />
* Rockero [mailto:ac_dcrocker@hotmail.com ac_dcrocker@hotmail.com]<br><br />
<br><br />
'''¡NO ELIMINES CONTENIDO SIN AUTORIZACIÓN!'''<br> Tampoco uses modismos, usa el Castellano (Internacional), y trata de que al traducir todo quede tan claro como puedas, y la ortografía sea la mejor posible.<br />
</div><br />
|-<br />
| colspan="2" |<br />
|}<br />
{{Languages list|es}}</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/P%C3%A1gina_Principal&diff=39273ES/Página Principal2014-04-07T20:54:34Z<p>Rockeromx: </p>
<hr />
<div>__NOTOC__<br />
__NOEDITSECTION__<br />
<br />
{| width="100%" cellspacing="0" cellpadding="0"<br />
| colspan="2" |<br />
<div style="border: 1px solid #D8D8D8; padding: 10px; height: 140px;"><br />
[[File:Mtalogo.png|left|100px]]'''<br />
Bienvenid@ a la Wiki de Multi Theft Auto: San Andreas en español.''' Aquí puedes encontrar mucha información sobre el uso de Multi Theft Auto. <br />
<br />
Hay muchas [[ES/Cómo puedes ayudar|cosas que puedes hacer para ayudarnos]] a mejorar MTA - crea un mapa, un modo de juego, escribe códigos de ejemplo, tutoriales, traduce páginas del inglés al español, o simplemente juega y reporta los bugs que encuentres.<br />
<br />
</div><br />
|}<br />
{| width="100%" cellspacing="0" cellpadding="0"<br />
| colspan="2" |<br />
|-<br />
|width="50%" style="vertical-align:top;" |<div style="border: 1px solid #D8D8D8; padding:10px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Input-gaming.png]]</div><br />
=== El Juego ===<br />
<div style="background: #FFEEAA;"><br />
[[File:Go-down.png|link=http://mtasa.com/]] ''' [http://mtasa.com/ Descargar Multi Theft Auto: San Andreas {{Current Version|full}}]'''</div><br />
* [[ES/Manual del Cliente|Manual del Cliente]] [[Image:flag_es.png|En Español|20px]]<br />
* [[ES/Cambios en la versión 1.3|Cambios de la versión 1.3]] [[Image:flag_es.png|En Español|20px]] (Traducción 80%)<br />
* [[ES/Problemas_Conocidos_-_FAQ|Problemas Conocidos]] [[Image:flag_es.png|En Español|20px]] (Traducción: 10%)<br />
* [[Upgrading_from_MTA:Race|Cambiando MTA:Race a MTA:SA 1.0.x]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Manual del Servidor|Manual del Servidor]] [[Image:flag_es.png|En Español|20px]] (Traducción: 90%)<br />
* [[Map_manager|El Resource "Map Manager"]] [[Image:flag_us.png|En Inglés|20px]]<br />
<br />
====Editor de Mapas====<br />
*[[ES/Resource:Editor|Manual del Editor]] [[Image:flag_es.png|En Español|20px]]<br />
*[[Resource:Editor/EDF|EDF: Formato de Definiciones del Editor]] [[Image:flag_us.png|En Inglés|20px]]<br />
*[[Resource:Editor/Plugins|Plugins para el Editor]] [[Image:flag_us.png|En Inglés|20px]]<br />
*[[ES/Resource:Editor#Preguntas_Frecuentes|Preguntas Frecuentes]] [[Image:flag_es.png|En Español|20px]]<br />
<br />
====Bases de Datos====<br />
* [[:Category:Resource|Catálogo de Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Scripts de Cliente|Scripts de Cliente]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Modules| Módulos]] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Applications-development.png]]</div><br />
====Desarrollando Multi Theft Auto====<br />
[[File:Go-down.png|link=http://nightly.mtasa.com/]] [http://nightly.mtasa.com/ Nightly builds]<br />
* [[Compiling_MTASA|Compilando MTA:SA en Windows]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Building_MTASA_Server_on_Mac_OS_X|Compilando MTA:SA en Mac OS X]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Building_MTASA_Server_on_GNU_Linux|Compilando MTA:SA en GNU/Linux]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Coding guidelines|Guías de Codificación]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://code.google.com/p/mtasa-blue Google Code SVN] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://bugs.mtasa.com/roadmap_page.php Seguimiento de Versiones] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://bugs.mtasa.com/ Central de Reportes de Bugs] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Applications-office.png]]</div><br />
===Wiki - Cómo puedes ayudar===<br />
* Termina la documentación para [[:Category:Incomplete|funciones incompletas]].<br />
* [[:Category:Needs_Example|Crea ejemplos para eventos y funciones]].<br />
* Revisa y verifica [[:Category:Needs Checking|páginas que necesitan revisión]].<br />
* Escribe tutoriales para ayudar a la gente.<br />
* Traduce las páginas del wiki.<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Internet-group-chat.png]]</div><br />
=== Comunidad ===<br />
* [http://forum.multitheftauto.com/ Foro] [[Image:flag_us.png|En Inglés|20px]]<br />
** [http://forum.multitheftauto.com/viewforum.php?f=122&sid=72be1c29dd00c4442f8112cc09818283 Sección en español] [[Image:flag_es.png|En Español|20px]]<br />
* [irc://irc.multitheftauto.com/mta Canal IRC] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://community.mtasa.com/ Comunidad MTA] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://www.youtube.com/user/MTAQA Canal de YouTube oficial] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<div style="padding:4px 8px 8px 8px; margin:10px; text-align:center"><br />
[[File:Osi symbol.png|75px|link=http://opensource.org/]]<br />
'''Multi Theft Auto''' es un '''Proyecto de Código Abierto'''. <br />
¡Todos podemos contribuir a mejorar Multi Theft Auto!<br />
</div><br />
<br />
| width="50%" style="vertical-align:top;" |<br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Accessories-text-editor.png]]</div><br />
=== Scripting ===<br />
* [[ES/Resources|Introducción a los Resources]] [[Image:flag_es.png|En Español|20px]]<br />
** [[Resource Web Access|Acceso Web con Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[Meta.xml|Sobre el archivo "meta.xml"]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[:Category:Resource|Catálogo de Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[ES/ACL|Lista de Control del Acceso (ACL)]] [[Image:flag_es.png|En Español|20px]]<br />
* [[ES/Introducción a Lua|Introducción a Lua]] [[Image:flag_es.png|En Español|20px]]<br />
** [[ES/Introducción a la Programación de GUI|Introducción al GUI]] [[Image:flag_es.png|En Español|20px]]<br />
** [[Debugging|Tutorial de Depuración]] [[Image:flag_us.png|En Inglés|20px]] - Encontrar errores en scripts.<br />
** [http://forum.mtasa.com/viewtopic.php?f=145&t=70852 Tutoriales]<br />
* [[ES/Useful_Functions| Funciones útiles]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Writing_Gamemodes|Escribiendo Modos de Juego]] [[Image:flag_us.png|En Inglés|20px]]<br />
====Ayuda General de Lua====<br />
*[http://www.lua.org/manual/5.1/es/manual.html Manual de Referencia de Lua 5.1] [[Image:flag_es.png|En Español|20px]]<br />
*[http://www.lua.org/pil/index.html Manual Programando en Lua] [[Image:flag_us.png|En Inglés|20px]]<br />
*[http://lua-users.org/wiki/TutorialDirectory Lua Wiki] [[Image:flag_us.png|En Inglés|20px]]<br />
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Guía general de Lua de Nixstaller] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;"><br />
====Referencia====<br />
* [[Client Scripting Functions|Funciones de Cliente]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Client Scripting Events|Eventos de Cliente]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Funciones de Servidor|Funciones de Servidor]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Server Scripting Events|Eventos de Servidor]] [[Image:flag_us.png|En Inglés|20px]]<br />
<!-- Incomplete * [[Module functions|Lista de funciones de módulos externos de servidor]] [[Image:flag_us.png|En Inglés]] --><br />
* [[ES/Clases MTA| Clases de MTA]] [[Image:flag_es.png|En Español|20px]]<br />
**[[Element tree| Árbol de Elementos]] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:System-file-manager.png]]</div><br />
====[[Id|Lista de ID's]]====<br />
*[[Animations|Animaciones]]<br />
*[[ES/Skins de Personajes|Skins]]<br />
*[[CJ_Clothes|Ropa]]<br />
*[[Garage|Garajes]]<br />
*[[Interior IDs|Interiores]]<br />
*[[Projectiles|Proyectiles]]<br />
*[[Radar Blips|Iconos de Radar]]<br />
*[[Sounds|Sonidos]]<br />
*[[Vehicle IDs|ID's de Vehículos]]<br />
*[[Vehicle Colors|Colores de Vehículos]]<br />
*[[Vehicle Upgrades|Mejoras de Vehículos]]<br />
*[[Weapons|Armas]]<br />
*[[ES/Climas|Climas]]<br />
</div><br />
<br />
<div style="border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;"><br />
<br />
====Equipo de Traducción====<br />
* [mailto:zorrigas@gtagamingchile.com zorrigas@gtagamingchile.com]<br><br />
* [mailto:Brijido_XD@hotmail.com Brijido_XD@hotmail.com]<br><br />
* Benxamix2/The Kid<br />
* [mailto:matiuno@gmail.com matiuno@gmail.com]<br><br />
* [mailto:cesarcastillo4@gmail.com cesarcastillo4@gmail.com]<br><br />
* [mailto:alex_firexx@hotmail.com alex_firexx@hotmail.com]<br><br />
* [mailto:carlos_olivo@msn.com carlos_olivo@msn.com]<br><br />
* AlexD<br />
* Alexs_Steel[mailto:alexTO123@hotmail.com]<br><br />
* Rockero [mailto:ac_dcrocker@hotmail.com ac_dcrocker@hotmail.com]<br><br />
<br><br />
'''¡NO ELIMINES CONTENIDO SIN AUTORIZACIÓN!'''<br> Tampoco uses modismos, usa el Castellano (Internacional), y trata de que al traducir todo quede tan claro como puedas, y la ortografía sea la mejor posible.<br />
</div><br />
|-<br />
| colspan="2" |<br />
|}<br />
{{Languages list|es}}</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/Introducci%C3%B3n_a_la_Programaci%C3%B3n_de_GUI&diff=39272ES/Introducción a la Programación de GUI2014-04-07T20:41:12Z<p>Rockeromx: </p>
<hr />
<div><!-- place holder --><br />
Una importante caracteristica de MTA:SA es la posibilidad de programar GUIs propias (Graphics User Interface que traducido seria, Interfaz Grafica del Usuario). Una GUI consiste en ventanas, botones, cajas de edición, entre otras cosas.... Estos pueden ser mostrados mientras el jugador esta en el juego, y es usado para tener interacción con el usuario en lugar de los típicos comandos.<br />
<br />
[[Image:AdminGUI.png|thumb|Consola de Administración]]<br />
<br />
==Un tutorial para hacer una ventana de ingreso==<br />
En este tutorial nosotros haremos una simple ventana de ingreso, con dos cajas de edición y un botón. La ventana aparecerá cuando el jugador ingrese al juego, y cuando el botón sea apretado, el jugador aparecerá. El tutorial continuara el modo que hicimos en [[ES/Introducción_a_Lua|Introducción a LUA]] ''(Si tu continuaste de la pagina anterior, tendrás que remover o comentar la linea donde se encuentra la función [[spawnPlayer]], porque estaremos reemplazando eso con una GUI alternativa en este tutorial)''. También daremos una mirada a lo que es la programación en el cliente.<br />
<br />
===Dibujando la ventana===<br />
Toda GUI se debe hacer en el cliente. Esto tambien es una buena practica para tener todos los archivos de cliente en carpetas separadas.<br />
<br />
Busca el directorio /Tu servidor MTA/mods/deathmatch/resources/myserver/, y crea una carpeta llamada "cliente". En la carpeta cliente, crea un archivo de texto y llamalo "gui.lua". <br />
<br />
En este archivo escribiremos una función que dibuje la ventana. Para crear la ventana usaremos [[guiCreateWindow]]:<br />
<syntaxhighlight lang="lua"><br />
function createLoginWindow()<br />
-- definimos las coordenadas X,Y donde se creara la ventana<br />
local X = 0.375<br />
local Y = 0.375<br />
-- definimos el tamaño de la ventana (El ancho y el alto)<br />
local Width = 0.25<br />
local Height = 0.25<br />
-- Creamos la ventana y la grabamos su valor de elemento en la variable 'wdwLogin'<br />
-- Apreta en el nombre de la función para leer su definición<br />
wdwLogin = guiCreateWindow(X, Y, Width, Height, "Porfavor ingrese", true)<br />
end<br />
</syntaxhighlight><br />
<br />
===Relativo y absoluto===<br />
Notese que el argumento final pasado a la función [[guiCreateWindow]] en el ejemplo de arriba es ''true''. Esto indica que las coordenadas y las dimensiones de la ventana son '''relativas''', queriendo decir que son un ''porcentaje'' del tamaño total de la pantalla. Queriendo decir que el lado izquierdo de la pantalla es 0 y el lado derecho es 1. Una posición X de 0.5, representaría el centro de la pantalla. Similarmente, si la parte de arriba de la pantalla es 0 y la de abajo es 1, entonces una posición en Y de 0.2 seria un 20% abajo de la pantalla. Este mismo principio se aplica al ancho y alto también. (Con un ancho de 0.5, quiere decir que la ventana tendrá un ancho de la mitad de la pantalla) <br />
<br />
La alternativa a usar valores relativos es usar '''absolutos''' (Pasando ''false'' en vez de true a [[guiCreateWindow]])). Los valores absolutos son calculados como el numero total de pixeles de la esquina superior-izquierda de su padre (Si no se especifica un elemento padre, entonces el padre seria la pantalla en si). Si asumimos una resolución de 1920x1200, El lado izquierdo empezaría con 0 pixeles y el lado derecho tendría 1920 pixeles, una posición X de 960 representaría el centro de la pantalla. Similarmente, si el lado superior de la pantalla empieza 0 pixeles y el lado inferior termina con 1920 pixeles, una posición Y de 20 seria 20 pixeles bajo el lado superior de la pantalla. El mismo principio se aplica al ancho y al alto. ''Tu puedes usar [[guiGetScreenSize]] y un poco de matemáticas para calcular algunas posiciones absolutas.''<br />
<br />
Las diferencias entre usar valores relativos y absolutos es un poco simple; Una GUI creada con valores absolutos siempre tendrá el mismo tamaño y posición, mientras que una GUI creada usando valores relativos siempre sera un porcentaje del tamaño de su padre.<br />
<br />
El valor absoluto es generalmente mas fácil de mantener cuando se edita un código a mano, aunque tu opción del tipo depende de la situación para que lo estas usando.<br />
<br />
Para propósitos de esta introducción usaremos valores relativos. (Aunque recomiendo usar absolutos)<br />
<br />
===Añadiendo los componentes===<br />
Ahora agregaremos las etiquetas de texto (Diciendo "Usuario:" y "Contraseña:", Cajas de edición (Para ingresar los datos) y un botón para ingresar.<br />
<br />
Para crear el botón usaremos [[guiCreateButton]], y para crear las cajas de edición usaremos [[guiCreateEdit]]:<br />
<br />
'''Nota que estamos escribiendo mas codigo de nuestra existente función 'createLoginWindow'. Esto no es una nueva función y esta pensada a reemplazar la que tu ya tenias.''' <br />
<syntaxhighlight lang="lua"><br />
function createLoginWindow()<br />
local X = 0.375<br />
local Y = 0.375<br />
local Width = 0.25<br />
local Height = 0.25<br />
wdwLogin = guiCreateWindow(X, Y, Width, Height, "Porfavor Ingrese", true)<br />
<br />
-- definimos las coordenadas X,Y de nuestra primera etiqueta<br />
X = 0.0825<br />
Y = 0.2<br />
-- definimos el ancho y el alto de nuestra primera etiqueta<br />
Width = 0.25<br />
Height = 0.25<br />
-- Creamos la primera etiqueta, nota que el argumento final es 'wdwLogin' significando la ventana que creamos arriba es el padre de<br />
-- esta etiqueta (asique todos los valores de posición y tamaño son relativos a la posición de esa ventana)<br />
guiCreateLabel(X, Y, Width, Height, "Usuario", true, wdwLogin)<br />
-- alteramos el valor Y, para que la segunda etiqueta este un poco mas abajo de la primera<br />
Y = 0.5<br />
guiCreateLabel(X, Y, Width, Height, "Contraseña", true, wdwLogin)<br />
<br />
<br />
X = 0.415<br />
Y = 0.2<br />
Width = 0.5<br />
Height = 0.15<br />
edtUser = guiCreateEdit(X, Y, Width, Height, "", true, wdwLogin)<br />
Y = 0.5<br />
edtPass = guiCreateEdit(X, Y, Width, Height, "", true, wdwLogin)<br />
-- Ponemos el maximo de caracteres que se pueden escribir en las cajas a 50<br />
guiEditSetMaxLength(edtUser, 50)<br />
guiEditSetMaxLength(edtPass, 50)<br />
<br />
X = 0.415<br />
Y = 0.7<br />
Width = 0.25<br />
Height = 0.2<br />
btnLogin = guiCreateButton(X, Y, Width, Height, "Ingresar", true, wdwLogin)<br />
<br />
-- Hacer la ventana invisible<br />
guiSetVisible(wdwLogin, false)<br />
end<br />
</syntaxhighlight><br />
Nota que todo componente GUI creado es un hijo de la ventana, esto se hace espeficicando el elemento padre (wdwLogin, en este caso) cuando se crea el componente.<br />
<br />
Esto es muy util porque no solo hace pensar que todos sus componentes estan unidos a la ventana y que se van a mover con ella, sino que ademas todo cambio hecho a la ventana padre seran aplicados arbol abajo a todos sus elementos hijos. Por ejemplo, ahora podemos esconder todos los elementos GUI que creamos con solo esconder la ventana:<br />
<syntaxhighlight lang="lua"><br />
guiSetVisible(wdwLogin, false) --esconde todos los elementos GUI que hicimos para poderlos mostrar al jugador en el momento apropiado<br />
</syntaxhighlight><br />
<br />
===Uso de la función anterior===<br />
La función createLoginWindow ha sido completada, pero no hará nada hasta procesarlo. Es recomendable hacer todo el GUI cuando el resource del cliente se inicie, ocultarlo, y mostrarle al jugador cuando sea necesario. Por lo tanto, vamos a escribir un "event handler" para "[[onClientResourceStart]]" para crear la ventana:<br />
<syntaxhighlight lang="lua"><br />
-- esto significa que se iniciará cuando el propio resource se inicie<br />
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), <br />
function ()<br />
createLoginWindow()<br />
end<br />
) <br />
</syntaxhighlight><br />
<br />
Como en la ventana han de registrarse, la ventana se mostrará cuando el jugador entre al juego. <br />
Para esto, se puede usar el mismo evento, "[[onClientResourceStart]]", con lo que podemos modificar el código anterior para mostrar la ventana:<br />
<br />
'''Tenga en cuenta que ahora estamos escribiendo más código para nuestro actual 'onClientResourceStart'.Este no es un nuevo evento, está destinado a reemplazar el qué ya tienes.''' <br />
<syntaxhighlight lang="lua"><br />
addEventHandler("onClientResourceStart", getResourceRootElement(getThisResource()), <br />
function ()<br />
-- crear el registro con sus componentes dentro de la ventana<br />
createLoginWindow()<br />
<br />
-- emitir un mensaje de bienvenida al jugador<br />
outputChatBox("Welcome to My MTA:SA Server, please log in.")<br />
<br />
-- si la interfaz gráfica de usuario se creó correctamente, a continuación, mostrar la interfaz gráfica de usuario para el jugador<br />
if (wdwLogin ~= nil) then<br />
guiSetVisible(wdwLogin, true)<br />
else<br />
-- si la interfaz gráfica no se ha creado correctamente, se lo dirá al jugador<br />
outputChatBox("An unexpected error has occurred and the log in GUI has not been created.")<br />
end <br />
<br />
-- mostrar el cursor al jugador ( para que pueda seleccionar y pulsar los botones )<br />
showCursor(true)<br />
-- establecer el foco de entrada en la interfaz gráfica de usuario, permitiendo a los jugadores (por ejemplo) al pulsar 'T' sin que salga la apertura en el chat<br />
guiSetInputEnabled(true)<br />
end<br />
) <br />
</syntaxhighlight><br />
<br />
Tenga en cuenta que tenemos un sencillo "control de seguridad" antes de hacer la ventana visible, por lo que en el caso improbable de que la ventana no se haya creado, es decir wdwLogin no es un elemento válido, no se obtiene un error y simplemente se informa al jugador de lo que ha sucedido .<br />
En el siguiente paso, vamos a crear la funcionalidad del botón para el botón "Iniciar sesión".<br />
<br />
==Scripteando el boton==<br />
Ahora que tenemos creado nuestro GUI and se lo hemos mostrado a un jugador, nesecitamos hacerlo funcionar.<br />
<br />
===Detectando el click===<br />
Cuando un jugador clickea en alguna parte del GUI, el evento "[[onClientGUIClick]]" sera triggeado para el componente GUI que tu clickeaste. Esto nos permite detectar facilmente cualquier click en los elemento GUI que nosotros quisimos usar. <br />
Por ejemplo, podemos adjuntar el evento con el boton "btnLogin" para agarrar algun click en el:<br />
<syntaxhighlight lang="lua"><br />
-- adjunta el evento onClientGUIClick a btnLogin y activa la funcion 'clientSubmitLogin'.<br />
addEventHandler("onClientGUIClick", btnLogin, clientSubmitLogin, false)<br />
</syntaxhighlight><br />
'''Que quede claro que el argumento final es pasado a "false". Esto indica que el evento solo se va a activar directamente en btnLogin, sino el evento se tiene que propagarse por todo los elementos. Ajusta esto a true mientras adjunta a los elementos GUI querra decir que algun click en cualquier elemento en el mismo se activara este evento.'''<br />
<br />
Esta linea del codigo podra ahora ser añadida dentro de la funcion createLoginWindow. Esto es un error comun al intentar y adjuntar los eventos a algun elemento GUI inexistente, por lo tanto hacer que siempre el evento se adjunte '''despues''' the crear los elementos GUI (en este caso, el boton) ha sido creado:<br />
<br />
'''Nota que ahora estamos escribiendo mas codigo para la existencia de la funcion 'createLoginWindow'<br />
<syntaxhighlight lang="lua"><br />
function createLoginWindow()<br />
-- crea todos los elementos GUI<br />
...<br />
<br />
-- Ahora añadimos nuevo evento onClientGUIClick al evento luego de ser creado.<br />
addEventHandler("onClientGUIClick", btnLogin, clientSubmitLogin, false)<br />
</syntaxhighlight><br />
<br />
===Administrar el clic===<br />
Ahora para detectar cuando le damos clic al boton, tenemos que escribir código para manejar lo que suceda cuando lo pulsen.<br />
En nuestro controlador de evento [[onClientGUIClick]], le dijimos que llamara a la función clientSubmitLogin cada vez que se hace clic en btnLogin. Por lo tanto, ahora podemos utilizar la función clientSubmitLogin para controlar lo que ocurre cuando se hace clic en el botón:<br />
<syntaxhighlight lang="lua"><br />
-- Crea la función y definir los parámetros 'Botón' y 'Estado'.<br />
-- (éstos pasan automáticamente por OnClientClick)<br />
function clientSubmitLogin(button,state)<br />
-- si nuestro botón "login" es clickeado con el botón izquierdo del ratón, y soltado el botón izquierdo.<br />
if button == "left" and state == "up" then<br />
-- move the input focus back onto the game (allowing players to move around, open the chatbox, etc)<br />
guiSetInputEnabled(false)<br />
-- esconde la ventana y todos sus componentes<br />
guiSetVisible(wdwLogin, false)<br />
-- esconde el cursor del ratón<br />
showCursor(false)<br />
end<br />
end<br />
</syntaxhighlight><br />
Ahora, cuando al botón le den clic, la ventana se debera esconder y todos los controles volveran. Despues, deberemos decirle al servidor que permita spawnear al jugador.<br />
<br />
===Triggering el server===<br />
La activación del server se puede hacer usando [[triggerServerEvent]]. Esto le permite activar un evento especificado en el servidor desde el cliente. El mismo se puede hacer a la inversa usando [[triggerClientEvent]]. Aquí, nosotros usamos la función [[triggerServerEvent]] para llamar a nuestro serverEvent personalizado, denominado "submitLogin", que a su vez controla el desove del jugador serverside.<br />
<br />
'''Tenga en cuenta que ahora estamos escribiendo más código para nuestra función 'clientSubmitLogin' existente. Esto no es una nueva función y está destinado a reemplazar lo que ya tienes. '''<br />
<syntaxhighlight lang="lua"><br />
function clientSubmitLogin(button,state)<br />
if button == "left" and state == "up" then<br />
-- tomar el texto introducido en el campo 'username'<br />
local username = guiGetText(edtUser)<br />
-- tomar el texto introducido en el campo 'password'<br />
local password = guiGetText(edtPass)<br />
<br />
-- si el nombre de usuario y contraseña ambos existen<br />
if username and password then<br />
-- activar el server 'submitLogin' y pasar el nombre de usuario y contraseña a la misma.<br />
triggerServerEvent("submitLogin", getRootElement(), username, password)<br />
<br />
-- ocultar la gui, ocultar el cursor y devolver el control al player<br />
guiSetInputEnabled(false)<br />
guiSetVisible(wdwLogin, false)<br />
showCursor(false)<br />
else<br />
-- de otro modo, presentar un mensaje para el jugador, no activar el server<br />
-- y no ocultar la gui<br />
outputChatBox("Please enter a username and password.")<br />
end<br />
end<br />
end<br />
</syntaxhighlight><br />
<br />
===Crear el evento serverside===<br />
En este punto, ahora tenemos todo el código necesario en el clienteside, por lo que abrimos el archivo 'script.lua' serverside (desde el [[Scripting Introduction|Introduction to Scripting]]) u otro archivo serverside adecuado para trabajar.<br />
<br />
En el lado del servidor, recordamos que estamos spawneando al jugador tan pronto como se loguea.<br />
Así que, en primer lugar, tendremos que definir el evento personalizado que se utilizó antes en el cliente. Esto se puede hacer usando [[addEvent]] y [[AddEventHandler]].<br />
<syntaxhighlight lang="lua"><br />
-- create our loginHandler function, with username and password parameters (passed from the client gui)<br />
function loginHandler(username,password)<br />
<br />
end<br />
<br />
-- define our custom event, and allow it to be triggered from the client ('true')<br />
addEvent("submitLogin",true)<br />
-- add an event handler so that when submitLogin is triggered, the function loginHandler is called<br />
addEventHandler("submitLogin",root,loginHandler)<br />
</syntaxhighlight><br />
<br />
===Logging in===<br />
Ahora tenemos una función que es llama a través del evento personalizado 'submitLogin', podemos empezar a trabajar en el on logging y el spawning del jugador, haciendo uso de nuestra funcion 'loginHandler':<br />
<syntaxhighlight lang="lua"><br />
function loginHandler(username,password)<br />
-- compruebe que el nombre de usuario y la contraseña son correctos<br />
if username == "user" and password == "apple" then<br />
-- el jugador se ah logueado satisfactoriamente, asi que debe spawnearlo<br />
if (client) then<br />
spawnPlayer(client, 1959.55, -1714.46, 10)<br />
fadeCamera(client, true)<br />
setCameraTarget(client, client)<br />
outputChatBox("Welcome to My Server.", client)<br />
end<br />
else<br />
-- si el nombre de usuario o contraseña no es correcta, enviar un mensaje al player<br />
outputChatBox("Invalid username and password. Please re-connect and try again.",client)<br />
end <br />
end<br />
<br />
addEvent("submitLogin",true)<br />
addEventHandler("submitLogin",root,loginHandler)<br />
</syntaxhighlight><br />
'''Para los fines de este tutorial, se muestra un sistema de nombre de usuario y una contraseña muy básico. Por una alternativa más completa, se puede utilizar el Sistema de cuentas o una base de datos MySQL.'''<br />
<br />
También tenga en cuenta el uso dela variable "client", es una variable interna que utiliza MTA para identificar al jugador que provocó el evento.<br />
<br />
Por último, no se olvide de incluir el nuevo archivo gui.lua en el meta.xml del recurso principal, y etiquetarlo como un script de cliente:<br />
<syntaxhighlight lang="xml"><br />
<script src="client/gui.lua" type="client" /><br />
</syntaxhighlight><br />
<br />
En este punto, ahora tenemos una ventana de base de inicio de sesión que comprueba el nombre de usuario y la contraseña del jugador cuando se hace clic en el botón de inicio de sesión. Si son correctos, el jugador se spawneara de forma automática.<br />
<br />
Para obtener más ayuda con la GUI, consulte la [[:Category:GUI_Tutorials|GUI tutorials]].<br />
<br />
[[Category:GUI_Tutorials]]<br />
[[it:Introduzione_allo_scripting_della_GUI]]<br />
[[ru:Introduction to Scripting the GUI]]<br />
[[en:Introduction to Scripting the GUI]]</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/P%C3%A1gina_Principal&diff=39271ES/Página Principal2014-04-07T19:50:11Z<p>Rockeromx: </p>
<hr />
<div>__NOTOC__<br />
__NOEDITSECTION__<br />
<br />
{| width="100%" cellspacing="0" cellpadding="0"<br />
| colspan="2" |<br />
<div style="border: 1px solid #D8D8D8; padding: 10px; height: 140px;"><br />
[[File:Mtalogo.png|left|100px]]'''<br />
Bienvenid@ a la Wiki de Multi Theft Auto: San Andreas en español.''' Aquí puedes encontrar mucha información sobre el uso de Multi Theft Auto. <br />
<br />
Hay muchas [[ES/Cómo puedes ayudar|cosas que puedes hacer para ayudarnos]] a mejorar MTA - crea un mapa, un modo de juego, escribe códigos de ejemplo, tutoriales, traduce páginas del inglés al español, o simplemente juega y reporta los bugs que encuentres.<br />
<br />
</div><br />
|}<br />
{| width="100%" cellspacing="0" cellpadding="0"<br />
| colspan="2" |<br />
|-<br />
|width="50%" style="vertical-align:top;" |<div style="border: 1px solid #D8D8D8; padding:10px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Input-gaming.png]]</div><br />
=== El Juego ===<br />
<div style="background: #FFEEAA;"><br />
[[File:Go-down.png|link=http://mtasa.com/]] ''' [http://mtasa.com/ Descargar Multi Theft Auto: San Andreas {{Current Version|full}}]'''</div><br />
* [[ES/Manual del Cliente|Manual del Cliente]] [[Image:flag_es.png|En Español|20px]]<br />
* [[ES/Cambios en la versión 1.3|Cambios de la versión 1.3]] [[Image:flag_es.png|En Español|20px]] (Traducción 80%)<br />
* [[ES/Problemas_Conocidos_-_FAQ|Problemas Conocidos]] [[Image:flag_es.png|En Español|20px]] (Traducción: 10%)<br />
* [[Upgrading_from_MTA:Race|Cambiando MTA:Race a MTA:SA 1.0.x]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Manual del Servidor|Manual del Servidor]] [[Image:flag_es.png|En Español|20px]] (Traducción: 90%)<br />
* [[Map_manager|El Resource "Map Manager"]] [[Image:flag_us.png|En Inglés|20px]]<br />
<br />
====Editor de Mapas====<br />
*[[ES/Resource:Editor|Manual del Editor]] [[Image:flag_es.png|En Español|20px]]<br />
*[[Resource:Editor/EDF|EDF: Formato de Definiciones del Editor]] [[Image:flag_us.png|En Inglés|20px]]<br />
*[[Resource:Editor/Plugins|Plugins para el Editor]] [[Image:flag_us.png|En Inglés|20px]]<br />
*[[ES/Resource:Editor#Preguntas_Frecuentes|Preguntas Frecuentes]] [[Image:flag_es.png|En Español|20px]]<br />
<br />
====Bases de Datos====<br />
* [[:Category:Resource|Catálogo de Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Scripts de Cliente|Scripts de Cliente]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Modules| Módulos]] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Applications-development.png]]</div><br />
====Desarrollando Multi Theft Auto====<br />
[[File:Go-down.png|link=http://nightly.mtasa.com/]] [http://nightly.mtasa.com/ Nightly builds]<br />
* [[Compiling_MTASA|Compilando MTA:SA en Windows]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Building_MTASA_Server_on_Mac_OS_X|Compilando MTA:SA en Mac OS X]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Building_MTASA_Server_on_GNU_Linux|Compilando MTA:SA en GNU/Linux]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Coding guidelines|Guías de Codificación]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://code.google.com/p/mtasa-blue Google Code SVN] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://bugs.mtasa.com/roadmap_page.php Seguimiento de Versiones] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://bugs.mtasa.com/ Central de Reportes de Bugs] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Applications-office.png]]</div><br />
===Wiki - Cómo puedes ayudar===<br />
* Termina la documentación para [[:Category:Incomplete|funciones incompletas]].<br />
* [[:Category:Needs_Example|Crea ejemplos para eventos y funciones]].<br />
* Revisa y verifica [[:Category:Needs Checking|páginas que necesitan revisión]].<br />
* Escribe tutoriales para ayudar a la gente.<br />
* Traduce las páginas del wiki.<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Internet-group-chat.png]]</div><br />
=== Comunidad ===<br />
* [http://forum.multitheftauto.com/ Foro] [[Image:flag_us.png|En Inglés|20px]]<br />
** [http://forum.multitheftauto.com/viewforum.php?f=122&sid=72be1c29dd00c4442f8112cc09818283 Sección en español] [[Image:flag_es.png|En Español|20px]]<br />
* [irc://irc.multitheftauto.com/mta Canal IRC] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://community.mtasa.com/ Comunidad MTA] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://www.youtube.com/user/MTAQA Canal de YouTube oficial] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<div style="padding:4px 8px 8px 8px; margin:10px; text-align:center"><br />
[[File:Osi symbol.png|75px|link=http://opensource.org/]]<br />
'''Multi Theft Auto''' es un '''Proyecto de Código Abierto'''. <br />
¡Todos podemos contribuir a mejorar Multi Theft Auto!<br />
</div><br />
<br />
| width="50%" style="vertical-align:top;" |<br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Accessories-text-editor.png]]</div><br />
=== Scripting ===<br />
* [[ES/Resources|Introducción a los Resources]] [[Image:flag_es.png|En Español|20px]]<br />
** [[Resource Web Access|Acceso Web con Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[Meta.xml|Sobre el archivo "meta.xml"]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[:Category:Resource|Catálogo de Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[ES/ACL|Lista de Control del Acceso (ACL)]] [[Image:flag_es.png|En Español|20px]]<br />
* [[ES/Introducción a Lua|Introducción a Lua]] [[Image:flag_es.png|En Español|20px]]<br />
** [[ES/Introducción a la Programación de GUI|Introducción al GUI]] [[Image:flag_es.png|En Español|20px]] (Traducción: 40%)<br />
** [[Debugging|Tutorial de Depuración]] [[Image:flag_us.png|En Inglés|20px]] - Encontrar errores en scripts.<br />
** [http://forum.mtasa.com/viewtopic.php?f=145&t=70852 Tutoriales]<br />
* [[ES/Useful_Functions| Funciones útiles]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Writing_Gamemodes|Escribiendo Modos de Juego]] [[Image:flag_us.png|En Inglés|20px]]<br />
====Ayuda General de Lua====<br />
*[http://www.lua.org/manual/5.1/es/manual.html Manual de Referencia de Lua 5.1] [[Image:flag_es.png|En Español|20px]]<br />
*[http://www.lua.org/pil/index.html Manual Programando en Lua] [[Image:flag_us.png|En Inglés|20px]]<br />
*[http://lua-users.org/wiki/TutorialDirectory Lua Wiki] [[Image:flag_us.png|En Inglés|20px]]<br />
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Guía general de Lua de Nixstaller] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;"><br />
====Referencia====<br />
* [[Client Scripting Functions|Funciones de Cliente]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Client Scripting Events|Eventos de Cliente]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Funciones de Servidor|Funciones de Servidor]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Server Scripting Events|Eventos de Servidor]] [[Image:flag_us.png|En Inglés|20px]]<br />
<!-- Incomplete * [[Module functions|Lista de funciones de módulos externos de servidor]] [[Image:flag_us.png|En Inglés]] --><br />
* [[ES/Clases MTA| Clases de MTA]] [[Image:flag_es.png|En Español|20px]]<br />
**[[Element tree| Árbol de Elementos]] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:System-file-manager.png]]</div><br />
====[[Id|Lista de ID's]]====<br />
*[[Animations|Animaciones]]<br />
*[[ES/Skins de Personajes|Skins]]<br />
*[[CJ_Clothes|Ropa]]<br />
*[[Garage|Garajes]]<br />
*[[Interior IDs|Interiores]]<br />
*[[Projectiles|Proyectiles]]<br />
*[[Radar Blips|Iconos de Radar]]<br />
*[[Sounds|Sonidos]]<br />
*[[Vehicle IDs|ID's de Vehículos]]<br />
*[[Vehicle Colors|Colores de Vehículos]]<br />
*[[Vehicle Upgrades|Mejoras de Vehículos]]<br />
*[[Weapons|Armas]]<br />
*[[ES/Climas|Climas]]<br />
</div><br />
<br />
<div style="border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;"><br />
<br />
====Equipo de Traducción====<br />
* [mailto:zorrigas@gtagamingchile.com zorrigas@gtagamingchile.com]<br><br />
* [mailto:Brijido_XD@hotmail.com Brijido_XD@hotmail.com]<br><br />
* Benxamix2/The Kid<br />
* [mailto:matiuno@gmail.com matiuno@gmail.com]<br><br />
* [mailto:cesarcastillo4@gmail.com cesarcastillo4@gmail.com]<br><br />
* [mailto:alex_firexx@hotmail.com alex_firexx@hotmail.com]<br><br />
* [mailto:carlos_olivo@msn.com carlos_olivo@msn.com]<br><br />
* AlexD<br />
* Alexs_Steel[mailto:alexTO123@hotmail.com]<br><br />
* Rockero [mailto:ac_dcrocker@hotmail.com ac_dcrocker@hotmail.com]<br><br />
<br><br />
'''¡NO ELIMINES CONTENIDO SIN AUTORIZACIÓN!'''<br> Tampoco uses modismos, usa el Castellano (Internacional), y trata de que al traducir todo quede tan claro como puedas, y la ortografía sea la mejor posible.<br />
</div><br />
|-<br />
| colspan="2" |<br />
|}<br />
{{Languages list|es}}</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/ACL&diff=39270ES/ACL2014-04-07T19:47:07Z<p>Rockeromx: </p>
<hr />
<div>''Multi Theft Auto'' incluye una completa y útil Lista de Control de Acceso (''ACL'') la que te permite asegurar y limitar el acceso a distintas funciones, recursos del servidor de múltiples maneras.<br />
<br />
El concepto en ''Multi Theft Auto'' de ''ACL'' es el de dar a un objeto especifico una serie de derechos. En el caso de ''Multi Theft Auto'', los objetos son una de dos cosas - recursos o usuarios. Hay numerosos derechos disponibles en ''Multi Theft Auto'' - estos están enfocados principalmente en las funciones del lado del servidor.<br />
<br />
Lo que esto significa, esencialmente es que el ''ACL'' te permite escoger con exactitud a que funciones (un recurso o un usuario) pueden acceder. Esto, por ejemplo, puede prevenir que los jugadores de tu servidor sean capaces de ''banearse'' mutuamente o prevenir que errores en recursos aun no probados causen daños y problemas en tu servidor.<br />
<br />
Por supuesto ''un gran poder conlleva una gran responsabilidad'' y es muy sencillo causar graves problemas con los recursos, por ejemplo, deshabilitar la función [[spawnPlayer]] para cada recurso causaría que los jugadores ya no puedan ''spawnear''. Por supuesto, existen situaciones en las que se busca hacer esto. (Si deseas hacer que un solo recurso se encargue de ''spawnear'' a los jugadores, por ejemplo.)<br />
<br />
==Entiendido el funcionamiento==<br />
Existen dos grandes componentes en el ''ACL'': grupos y listas ''ACL''. Estos aparecen como '''<group name="">''' y '''<acl name="" />'''.<br />
Cuyo propósito es:<br \><br />
'''1.''' Garantizar a los usuarios el permiso de controlar el servidor y utilizar comandos. Ejemplos:''<br \><br />
*Permitir solo a los administradores utilizar la función [[giveWeapon]] en ''freeroam''.<br />
*Permitir a todos los jugadores iniciar un recurso.<br />
'''2.''' Garantizar a los recursos el permiso de utilizar una función o funciones de otros recursos. Ejemplos:<br \><br />
*Permitir a un recurso utilizar la funcion [[restartResource]].<br />
*Permitir a un recurso llamar funciones exportadas desde otro recurso.<br />
<br />
===Grupos por defecto===<br />
''Multi Theft Auto'' trae por defecto algunos grupos con ciertos permisos. Estos son:<br />
*'''Everyone''' - Toda cuenta registrada, por defecto, es añadida a este grupo.<br />
*'''Moderator'''<br />
*'''SuperModerator'''<br />
*'''Admin'''<br />
*'''Console''' - Este grupo controla los permisos del usuario de la Consola '''<object name="user.Console" />'''<br />
*'''RPC''' - Procedimientos Remotos (En ingles, ''Remote Procedure Call''). Garantiza el acceso a [[callRemote]], para mas información revisa la información de la función.<br />
<br \><br />
<br />
A modo de ejemplo, utilizare el grupo ''Everyone''. Por defecto, este luce así:<br />
<syntaxhighlight lang="lua"> <group name="Everyone"><br />
<acl name="Default" /><br />
<object name="user.*" /><br />
<object name="resource.*" /><br />
</group><br />
</syntaxhighlight><br />
<br \><br />
<br />
Lo primero que deberías notar es el nombre ''ACL'' (''acl name'') asignado dentro del grupo. Esto define que permisos tiene el grupo en cuestión, usuarios y recursos en este grupo pueden acceder a los permisos especificados dentro de la lista ''ACL'' llamada "Default".<br />
''*Nota: Como notaras, este grupo en especial incluye a todos los usuarios y recursos gracias al uso del '''*'''.''<br />
<br />
Ahora, desplácese al final de el ACL y verá la lista '''<acl name="Default" />'''. Tenga en cuenta que he recortado drásticamente esta lista debido a su longitud.<br />
<br />
<syntaxhighlight lang="lua"> <acl name="Default"><br />
<right name="command.start" access="false" /><br />
<right name="command.stop" access="false" /><br />
<right name="command.stopall" access="false" /><br />
...etc etc...<br />
<right name="function.executeCommandHandler" access="false" /><br />
<right name="function.setPlayerMuted" access="false" /><br />
<right name="function.restartResource" access="false" /><br />
...etc etc...<br />
<right name="general.adminpanel" access="false" /><br />
<right name="general.tab_players" access="false" /><br />
<right name="general.tab_resources" access="false" /><br />
...etc etc...<br />
<right name="command.freeze" access="false" /><br />
<right name="command.shout" access="false" /><br />
<right name="command.spectate" access="false" /><br />
...etc etc...<br />
</acl><br />
</syntaxhighlight><br />
<br \><br />
*'''Entradas de funcion''' son funciones de scripting de MTA. Por ejemplo, si un recurso necesita utilizar restartResource y fue se encuentra en el grupo 'Everyone' (con la lista 'Default'), se le negaría el acceso a restartResource y no funcionar correctamente.<br />
*'''Comandos''' se crean cuando un recurso utiliza [[addCommandHandler]]. Un ejemplo sería escribiendo '''/ createvehicle [vehículo]''' en la ventana de chat para el recurso Freeroam. Esto si los usuarios del grupo utilizando este ACL pueden utilizar el comando. ''Nota: los comandos no tienen ningún efecto sobre los recursos dentro del grupo. Los comandos sólo están relacionados con los usuarios''.<br />
**''General es un grupo con derechos modificados creado por el recurso de administración pero trabaja en los mismos principios. El script funciona con ellos mediante el uso de [[hasObjectPermissionTo]]''<br />
<br\><br />
<br />
Te darás cuenta que algunos grupos, como ''admin'' tienen múltiples nodos de '''<acl name="" />''' . Un ejemplo es el grupo de ''administracion o Admin'':<br />
<syntaxhighlight lang="lua"><br />
<group name="Admin"><br />
<acl name="Moderator" /><br />
<acl name="SuperModerator" /><br />
<acl name="Admin" /><br />
<acl name="RPC" /><br />
<object name="resource.admin" /><br />
<object name="resource.webadmin" /><br />
<object name="user.Ransom" /><br />
</group><br />
</syntaxhighlight><br />
<br\><br />
<br />
Esto le da a todos los permisos definidos en cada nodo '''<acl name="" />''' por orden de lista. Así, por ejemplo, el grupo de administración asegura que todos los permisos se otorgan a los administradores mediante el uso de toda la lista. Si hay algún conflicto, la entrada más baja gana. Por ejemplo, pretenda que estos 2 ACL estaban en un grupo en el siguiente orden:<br />
<br\><br />
'''1.''' '''<acl name="Default">''' sets <right name="general.ModifyOtherObjects" access="false" /> <br\><br />
'''2.''' '''<acl name="Admin">''' sets <right name="general.ModifyOtherObjects" access="true" /> <br\><br />
'''3.''' Para todos los usuarios y recursos en el grupo administrador "''Admin''": <right name="general.ModifyOtherObjects" access="true" /><br\><br />
<br\><br />
<br />
=== Grupos de recursos y ACLs ===<br />
Usted se dará cuenta que hay algunos otros grupos que vienen con MTA. Estos fueron definidos por los recursos que vienen con MTA. Si un recurso quiere designar algunos derechos de ACL específicos no previstos por los grupos de MTA por defecto, puede crear su propio nombre y grupo en la ACL para usarlo. Voy a mostrar la entrada de AMX como ejemplo. AMX está diseñado para emular scripts de SA-MP y necesita un cierto conjunto de permisos que no se ajusta bien a los grupos predeterminados. Este se muestra a continuación:<br />
<br />
<syntaxhighlight lang="lua"><br />
<group name="AMX"><br />
<acl name="AMX" /><br />
<object name="resource.amx" /><br />
</group><br />
<br />
<acl name="AMX"><br />
<right name="general.ModifyOtherObjects" access="true" /><br />
<right name="function.startResource" access="true" /><br />
<right name="function.stopResource" access="true" /><br />
<right name="general.adminpanel" access="false" /><br />
...etc etc...<br />
<right name="command.kick" access="false" /><br />
<right name="command.freeze" access="false" /><br />
<right name="command.mute" access="false" /><br />
...etc etc...<br />
</acl><br />
</syntaxhighlight><br />
<br />
==Modificación de la ACL==<br />
Hay tres formas de modificar la ACL - La forma de hacerlo depende de quién eres. <br />
<br />
===Interfaz HTTP===<br />
Usted puede utilizar la interfaz http [[Resource/webadmin|webadmin]] para modificar la ACL en su navegador web. Esta es por lejos la forma más fácil de hacerlo. Sólo asegúrese de que el recurso ''webadmin'' se encuentra iniciado en el servidor y visite ''<nowiki>http://ServerIP:HttpPort/</nowiki>''. Usted puede utilizar las dos secciones - ACL y Grupos o "''Group''". ACL le permite crear sus listas de control de acceso - listas de derechos. Grupos o "''Group''" les permiten agrupar colecciones de usuarios y asignar las ACLs para ellos. Por ejemplo, la seccion ACLs le permite especificar que la ACL de administración o "''Admin''" tiene acceso a el comando ''start'' en la consola. Usted puede ir a la sección de Grupos y crear un ''Group'' de administración que tiene acceso a la administración de su ''acl''. Entonces usted podrá añadir usuarios a su ''Group'' de Administración.<br />
<br />
===Archivo XML===<br />
Usted puede modificar el archivo ACL.xml manualmente. Este tiene una sintaxis bastante sencilla, pero puede ser un poco confuso a veces. Si lo hace mientras el servidor está en ejecución, no se olvide de llamar a la función [[aclReload]] ("start runcode", "run aclReload()") así el nuevo ACL será cargado, o de lo contrario detener el servidor antes de realizar las modificaciones. Esto también evita que los cambios sean sobrescritos accidentalmente por el servidor.<br />
<br />
===Funciones de Scripting===<br />
Usted puede utilizar un gran número de funciones de script de ACL para modificar la ACL en la marcha. Por supuesto, usted puede (y de verdad Debe!) limitar el acceso a las funciones de ACL con la ACL. Tenga en cuenta que el '''admin resource''' que viene con MTA se puede utilizar para administrar la ACL en la ficha recursos. Usted debe ser configurado como administrador para utilizar el panel de administración. [http://wiki.multitheftauto.com/wiki/Admin Haga clic aquí para obtener instrucciones de configuración de administración].<br />
<br />
==Vea también==<br />
{{ACL functions}}<br />
[[Category:Scripting Concepts]]<br />
[[ru:Access Control List]]<br />
<br />
<br />
==Traductores==<br />
<br />
*<br />
[[en:Scripting Introduction]]<br />
<br />
*Rockero<br />
[[en:Scripting Introduction]]</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/Introducci%C3%B3n_a_Lua&diff=39269ES/Introducción a Lua2014-04-07T19:45:23Z<p>Rockeromx: </p>
<hr />
<div>Los llamados "resources" son fundamentales en MTA. Básicamente consisten en una carpeta o archivo ZIP que contiene una colección archivos, además de un archivo '''meta.xml''' que define qué archivos pertenecen al resource, algunas configuraciones, y otras cosas. Como los programas en un sistema operativo, los resources pueden ser iniciados, detenidos, y reiniciados, y varios pueden funcionar al mismo tiempo.<br />
<br />
Todo lo que es la programación ocurre dentro de los resources. Lo que éste haga define si se trata de un modo de juego, un mapa, un script sencillo, u otra cosa. MTA, por defecto, trae ciertos resources que puedes usar opcionalmente en tus modos de juego.<br />
<br />
'''Lo primero que debes tener en cuenta al iniciarte en la programacion en LUA, es conseguir un editor que funcione para ello. Esto hace mucho más facil tu trabajo, permitiéndote corregir el sintaxis de las matemáticas, por ejemplo. El equipo de MTA recomienda [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] y [http://luaedit.sourceforge.net/ LuaEdit].'''<br />
<br />
'''También en cuanto a Tutoriales, puedes guiarte de estos: [http://forum.mtasa.com/viewtopic.php?f=145&t=70852 Scripteando Cosas Básicas] .'''<br />
<br />
==Creando un script funcional==<br />
Primero, aprenderemos a hacer un script que permita al jugador caminar libremente por la ciudad. Esto lo explicaremos paso a paso.<br />
<br />
===Estructura de un script y ubicación del mismo===<br />
Dirijámonos a la carpeta raíz de tu servidor para MTA (por defecto es ''C:\Archivos de Programa\Multi Theft Auto\server''). Después vamos a la siguiente ubicación:<br />
<br />
\server\mods\deathmatch\resources\<br />
<br />
Verás muchos archivos ZIP. Como mencioné antes, estos ZIP son los resources, que vienen por defecto con MTA. Para crear tu propio resource, añade una carpeta a esta ubicación, y dale un nombre. Recomiendo que, al ser tu primer script, sigas las instrucciones al pie de la letra, y a esta carpeta la llames "myserver".<br />
<br />
Ahora, entremos a la ubicación: <br />
<br />
\resources\myserver\<br />
<br />
===Identificando tu resource===<br />
Como mencioné antes, todo resource tiene un archivo que define el tipo, los archivos, y las configuraciones del resource, es el ''meta.xml''. Siempre debe estar dentro de cada resource, de otra forma éste no funciona. Así que creemos un archivo de texto, y llamémoslo "meta.xml" (sin las comillas). Luego abrámoslo con el Bloc de Notas, o con Microsoft Wordpad.<br />
<br />
Una vez dentro de este archivo, agregaremos el siguiente código:<br />
<br />
<br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="TuNombre" type="gamemode" name="Mi Servidor" description="Mi primer servidor de MTA DM" /><br />
<script src="script.lua" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
<br />
En la etiqueta ''<info />'' hay un campo "type". Éste indica el tipo de resource, que siendo "gamemode" en este caso, define que es un modo de juego. Nótese que cuando es otro tipo de resource, el valor "type" cambia. Pero eso lo veremos luego. Por ahora, un modo de juego es lo que necesitas para comenzar un servidor.<br />
<br />
La etiqueta ''<script />'' indica el script que tendrá nuestro modo de juego. A continuación, cómo crearlo.<br />
<br />
===Creando un script simple===<br />
Nótese que en la etiqueta ''<script />'', el archivo Lua no está en otro directorio, como por ejemplo ''myserver\script.lua''. Esto es porque el archivo LUA del que hablamos será creado en el mismo lugar en el que el archivo ''meta.xml''. Bueno, ahora creamos en "myserver", otro archivo de texto, y lo llamamos "script.lua". Abrámoslo y agreguemos estas líneas:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function manejadorDeInicio()<br />
local x = 1959.55<br />
local y = -1714.46<br />
local z = 10<br />
spawnPlayer(source, x, y, z)<br />
fadeCamera(source, true)<br />
setCameraTarget(source, source)<br />
outputChatBox("Bienvenido a Mi Servidor", source)<br />
end<br />
addEventHandler("onPlayerJoin", getRootElement(), manejadorDeInicio)<br />
</syntaxhighlight><br />
<br />
<br />
Este script inicia a tu jugador en las coordenadas "x", "y" y "z" (spawnPlayer) cuando entras al servidor. OJO: ¡La función ''fadeCamera'' siempre debe ser usada cuando inicias al jugador, de otra forma, la pantalla quedará en negro!. Lo mismo pasa con la función ''setCameraTarget''; si no la usas, el jugador no podrá verse a sí mismo, si no que mirará al cielo infinito.<br />
<br />
La variable '''source''' indica qué fue lo que ocasionó al evento. Como el evento ''onPlayerJoin'' significa ''alIniciarJugador'', lógico que lo que ocasione a este evento sea el jugador. Así, evitaremos iniciar a cualquier jugador.<br />
<br />
Ahora, dirigiéndonos a [[addEventHandler]], podrás ver que posee 3 cosas: ''onPlayerJoin'' (el nombre del evento), ''getRootElement()'' (que indica por qué o quién será iniciado el evento, ya que ''getRootElement()'' significa "todo"), y ''joinHandler'', que es el nombre de la función a ejecutar cuando el evento sea activado.<br />
<br />
Con esto, deberías poder comenzar a jugar. Pero faltan algunos detalles... ¡Sigamos!<br />
<br />
===Corriendo el script===<br />
Para que tu servidor local sea iniciado, debes ir a la carpeta raíz de tu servidor (recuerda cuando fuimos a los resources, 2 puestos encima). Una vez que lo inicies, aparecerá una consola con una serie de datos; recuerda el número del puerto, porque lo necesitarás para jugar. Cuando aparezca un mensaje que diga "Server started and is ready to accept connections!", sabrás que ya está listo.<br />
<br />
Pero antes de jugar, debes iniciar el modo de juego. Escribe "gamemode myserver" en la consola del servidor, y presiona Enter. El servidor emitirá algunos mensajes, e iniciará tu modo de juego, y si algún error surge, nos lo dirá. Bueno, ahora es tiempo de probar el modo de juego. Inicia MTA, y en el menú principal escoge "Quick Connect". Apareceren 3 campos. En el primero, escribe "localhost", en el segundo, el número del puerto de tu servidor, y en el tercero, nada, después de todo es la contraseña,y tú no pusiste ninguna. Si todo funciona bien, deberías poder comenzar a jugar en Los Santos.<br />
<br />
A continuación, te enseñaremos a crear un comando que permita crear un vehículo a tu lado. Si quieres, puedes saltarte este paso y seguir la programación avanzada con [[Map manager|Map Manager]], que continúa este tutorial. También puedes revisar [[Introduction to Scripting GUI| Introducción a la Programación del GUI]], en el que te enseñaremos a diseñar la Interfaz Gráfica de Usuario (GUI en inglés, por ''Graphical User Interface'').<br />
<br />
==Creando un Comando==<br />
Volvamos a ''script.lua''. Como dije hace un momento, crearemos un comando que permita crear un vehículo a tu lado. Primero, necesitaremos crear una función a la que llamar, y un manejador de comandos que cree el comando buscado.<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
-- Aquí creamos la función que llama el manejador, con los argumentos "elJugador", "nombreDelComando", "modeloDeVehiculo":<br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
-- Crear el vehículo y otros.<br />
end<br />
<br />
-- Aquí creamos el manejador de comandos:<br />
addCommandHandler("crearvehiculo", crearVehículoParaJugador)<br />
</syntaxhighlight><br />
<br />
<br />
'''Nota:''' ''Los nombres de las funciones tienen enlaces que te llevan a la '''documentación''' de ellas.''<br />
<br />
====Acerca de los manejadores de comandos====<br />
El primer argumento de ''addCommandHandler'' es el nombre del comando que el jugador podrá ingresar, y el segundo es la función que ejecutará en el momento de ingreso del comando (en este caso ''crearVehiculoParaJugador''). <br />
<br />
Si tienes alguna experiencia con la programación en C o algún lenguaje parecido, sabrás que las funciones se ejecutan de la forma:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
nombreDeFunción(argumento1, argumento2, argumento3, ..)<br />
</syntaxhighlight><br />
<syntaxhighlight lang="lua"><br />
nombreDeFunción(elJugador, nombreDelComando, argumento3, ..)<br />
</syntaxhighlight><br />
<br />
<br />
Fijémonos bien en esto. Vemos que ''argumento1'' es ''elJugador'' y ''argumento2'' es ''nombreDelComando''. ''elJugador'' representa al jugador que haya ingresado el comando, por lo que de la forma que lo llames, esta variable será el jugador. ''nombreDelComando'' es simplemente el nombre del comando (sin la barra "/"), no hay ningún misterio en ello, por lo que si el jugador escribió "/crearvehiculo" entonces esta variable sería "crearvehiculo". Por último, ''argumento3'' representa una variable más, que estudiaremos más adelante. Nunca olvides que los 2 primeros argumentos son obligatorios y están predefinidos (y debes tenerlos en el orden que se indican), pero puedes llamarlos como sea.<br />
<br />
''addCommandHandler'' permite llamar fácilmente a funciones como ''crearVehículoParaJugador'', de forma interna.<br />
<br />
Por ejemplo: Alguien entra el comando "/crearvehiculo 468". El servidor creará el vehículo 468, es decir, la moto Sánchez. Dentro del código, ''addCommandHandler'' llama a la función ''crearVehículoParaJugador'' como si hubiera sido escrito así:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
crearVehículoParaJugador(elJugador,"crearvehiculo","468") -- Recuerda que "elJugador" es el elemento jugador que entró el comando.<br />
</syntaxhighlight><br />
<br />
<br />
Como podemos ver, esto prevée ciertos argumentos que ya hemos mencionado. Pero el más importante es "468", que es el "argumento3" del que hablábamos más arriba. Éste se refiere al modelo del vehículo. Recuerda que siempre debes definir los primeros 2 parámetros ("elJugador" y "nombreDelComando"), porque de otra forma el comando no funcionará.<br />
<br />
'''Nota:''' ''Tienes que poner el manejador de comandos DEBAJO de la función a llamar por el comando. ¡El orden de las ejecuciones es fundamental!''<br />
<br />
====Escribiendo la función====<br />
Para llenar la función que hemos creado, primero hay que plantearse qué se debe hacer:<br />
* Conseguir la posición del jugador, así sabremos dónde crear el vehículo (queremos que aparezca al lado del jugador).<br />
* Calcular la posición donde crearemos el vehículo (no queremos que aparezca en el jugador).<br />
* Crear el vehículo.<br />
* Revisar si fue creado. Si no, mostrar alguna advertencia o algún mensaje de error.<br />
<br />
Para conseguir estos objetivos, debemos usar ciertas funciones, las cuales se pueden ver visitando la [[Scripting Functions| Lista de Funciones de Servidor]]. Primero, una función para conseguir la posición del jugador. Si visitaste la [[ES/Clases MTA| Lista de Clases de MTA]], sabrás que un jugador es un elemento, lo que nos lleva a buscar una '''Función de Elemento''', la cual es ''[[getElementPosition]]''. Haciendo click en ella, visitarás la documentación de ella, que contiene una descripción, el sintaxis (los argumentos necesarios en la función), y, generalmente, un ejemplo de cómo usarla.<br />
<br />
Para la función [[getElementPosition]], el sintaxis sería:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
float, float, float getElementPosition ( elemento elElemento )<br />
</syntaxhighlight><br />
<br />
<br />
Los 3 ''float'' que aparecen, son los valores que regresa la función. Estos valores, en español, se llaman '''Número de punto flotante''', y son números que pueden o no, poseer decimales (véase la [[ES/Tipos de Valores| Lista de tipos de valores]]). Como "x", "y" y "z" son coordenadas, por defecto siempre serán números de punto flotante. Ahora, fijándonos en los paréntesis, notaremos que sólo aparece "elElemento" como argumento de la función. Pues, aplicando la función a un jugador, tendríamos algo como esto:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
--[[Aquí conseguiremos la posición del jugador, y la almacenaremos en 3 valores: "x", "y" y "z". Nota: "local" significa que las variables indicadas sólo pueden ser usadas en la función actual.]]--<br />
local x,y,z = getElementPosition(elJugador)<br />
end<br />
</syntaxhighlight><br />
<br />
<br />
Ahora, para crear el vehículo al lado del jugador, debemos modificar alguna coordenada, en este caso, "x".<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5 --Agregamos 5 a la posición "X" (¡esto no altera la posición del jugador!)<br />
end<br />
</syntaxhighlight><br />
<br />
<br />
Nuevamente, necesitamos otra función para crear el vehículo. Buscándola en la [[Scripting Functions| Lista de Funciones de Servidor]], la encontraremos. Ya que hablamos de vehículo, vamos a la subcategoría tal, en la que encontramos [[createVehicle]]. En esta función, el valor que regresa la función consta de 1 solo argumento (esto es lo más común en las funciones), y es el vehículo creado, o un valor "boolean" ("lógico" en inglés) de tipo "false", si el vehículo no fue creado.<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5<br />
local vehículoCreado = createVehicle(tonumber(modeloDeVehículo),x,y,z)<br />
end<br />
</syntaxhighlight><br />
<br />
Nótese que usamos "tonumber(modeloDeVehículo)" en vez de usar directamente "modeloDeVehículo". Esto es porque cuando entramos un comando, todos los argumentos salen en forma de "string" ("arreglo" en inglés), que es un tipo de valor textual. Por ello, no puede ser usado como número, y la función "tonumber()" nos permite dejarlo como un número.<br />
<br />
Bueno, tenemos todo lo necesario para que nuestro script funcione, pero eso no indica que esté listo. Ya tenemos la función para conseguir la posición del jugador, modificarla, y crear el vehículo. Pero nos falta el mensaje. La función para esto se llama ''outputChatBox''. Como dije antes, si el vehículo no fue creado, entonces regresa un valor "false". Así que creamos nuestra primera condición, en la que si el valor regresado es falso, entonces aparece un mensaje.<br />
<br />
Veamos cómo luce el script final:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5<br />
local vehículoCreado = createVehicle(tonumber(modeloDeVehículo),x,y,z)<br />
if (vehículoCreado == false) then --"if" es la condición, siempre debe ir acompañado de la condición y un "then".<br />
outputChatBox("Error al crear vehículo.",elJugador) --Crea un mensaje de error simple en el chat.<br />
end<br />
end<br />
addCommandHandler("crearvehiculo", crearVehículoParaJugador) --Y aquí creamos el manejador de comandos.<br />
</syntaxhighlight><br />
<br />
<br />
Nada mal, ¿no? Ya te hemos introducido en la creación de 2 scripts sencillos. Si quieres más programación avanzada, entonces visita el [[Map Manager| Mánager de Mapas]].<br />
<br />
<br />
==Lo que necesitas saber==<br />
Ya has leído un poco sobre resources, manejadores de comandos y funciones de búsqueda en la documentación (en el primer párrafo), pero aún queda mucho por aprender. En esta sección te daremos una vista rápida sobre esto, y si se puede, enlazar a otras páginas útiles.<br />
<br />
===Scripts de cliente y servidor===<br />
Quizás ya has notado los términos Server (o Servidor) y Client (o Cliente) en algún lado, mayormente en conjunción con las funciones. MTA no sólo soporta scripts que funcionan en el servidor y prevén comandos (como el que escribimos arriba) u otras características; también scripts que corren en el cliente (MTA en sí, el software que usas para conectarte a los servidores). Esto se debe a que algunas funciones tienen que estar del lado cliente (como el GUI; Graphical User Interface, Interfaz de Usuario Gráfica), si bien funcionan mejor o porque no se pueden hacer en el servidor.<br />
<br />
La mayoría de los scripts que harás (modos de juego y/o mapas) probablemente serán de tipo servidor, como el que escribimos en la primera sección. Si tratas de hacer funcionar algo que no se puede hacer en el servidor, probablemente tendrá que ser de cliente. para un script de cliente, por ejemplo, podrías crear un archivo de Lua ordinario (como ''client.lua'') y especificarlo en el archivo meta.xml, así:<br />
<syntaxhighlight lang="xml"><br />
<script src="client.lua" type="client" /><br />
</syntaxhighlight><br />
El atributo ''type'' por defecto es 'server' (servidor), por lo que no es necesario escribirlo cuando se trata de scripts de servidor. Si quieres, puedes leer más sobre [[ES/Scripts de Cliente|scripts de cliente]].<br />
<br />
===Resources más complejos===<br />
<br />
<br />
La seccion previa es de como poner scripts de modo clientside, pero hay cosas mas posibles. Como se menciona al principio de este texto, los resources pueden hacer casi cualquier cosa. Su proposito es definido de porque hacen. Veamos unos resources teoricamente, por ver los archivos que tienen, el''meta.xml'' y que podrian hacer:<br />
<br />
====Primer Ejemplo - Un script util====<br />
<syntaxhighlight lang="xml"><br />
/admin_commands<br />
/meta.xml<br />
/commands.lua<br />
/client.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="AlexD" description="Comandos de Admin" /><br />
<script src="commands.lua" /><br />
<script src="client.lua" type="client" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''commands.lua'' tiene comandos de administrador, como banear a un jugador, mutearlo o cualquier cosa que pueda usar un administrador<br />
* El ''client.lua'' tiene el GUI para poder ejecutar los comandos sencillamente.<br />
<br />
<br />
Este ejemplo estaria corriendo todo el tiempo (talvez auto-empezado cuando el servidor empieza) Y es util durante toda la experiencia en el juego y tambien no interfiere con el Juego en general, al menos que un administrador decide de ejecutar algun acto, por supuesto.<br />
<br />
====Segundo Ejemplo - Un modo de Juego====<br />
<syntaxhighlight lang="xml"><br />
/counterstrike<br />
/meta.xml<br />
/counterstrike.lua<br />
/buymenu.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="AlexD" description="Recreacion de CounterStrike" type="gamemode" /><br />
<script src="counterstrike.lua" /><br />
<script src="buymenu.lua" type="client" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''counterstrike.lua'' contiene lo similar a las siguientes caracteristicas:<br />
** Dejar que los jugadores elijan su equipo y aparezcan en el<br />
** Darles armas, objectivos e instrucciones (talvez leer de un Mapa, vease mas adelante)<br />
** Definir las reglas del juego, ejemplo: cuando la partida acabe, que pasa cuando un jugador muere<br />
** .. y talvez algo mas<br />
* El ''buymenu.lua'' es un script Clientside y crea un menu para comprar armas<br />
<br />
Este ejemplo puede ser llamado modo de juego, porque no solo interviene con el juego en general, pero actualmente define las reglas de el. El atributo ''type'' indica que este ejemplo sirve con el [[Map manager]], si otro resource que fue escrito por el Equipo QA para gestionar modos de juego y carga de mapas. Es altamente recomendado que tu base tus modos de juego en las tecnicas que proporciona.<br />
<br />
Esto tambien significa que el modo de juego no cargara sin el mapa. Los modos de juego tienen que ser tan genericos posibles. Un ejemplo de un mapa es mostrado en el siguiente ejemplo.<br />
<br />
====Tercer ejemplo - Un mapa====<br />
<syntaxhighlight lang="xml"><br />
/cs-airport<br />
/meta.xml<br />
/airport.map<br />
/airport.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="Someguy" description="Counterstrike airport map" type="map" gamemodes="counterstrike" /><br />
<map src="airport.map" /><br />
<script src="airport.lua" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''airport.map'' es un archivo XML que proporciona información sobre el mapa para el modo de juego, estos pueden incluir:<br />
** Donde deben spawnear los jugadores, con que armas, que equipos hay<br />
** Cuales son los objetivos<br />
** Clima, tiempo, tiempo limite<br />
** Proporcionar vehículos<br />
* El ''airport.lua'' puede contener funciones del mapa específicas, que pueden incluir:<br />
** Apertura de alguna puerta / hacer que algo explote cuando suceda algo específico<br />
** Crear o mover algunos objetos personalizados, o manipular los objetos que se crean a través del archivo de mapa.<br />
** .. cualquier cosa mapa-específicas que se pueda imaginar<br />
Como puede ver, el atributo ''type'' cambió a 'map', diciéndole al [[Map manager]] que este recurso es un mapa, mientras que el atributo ''gamemodes'' indica para que tipos de juego o gamemode este mapa es válido, en este caso el modo de juego en el ejemplo anterior. Lo que puede venir como una sorpresa es que también hay script en el recurso de mapa. Por supuesto, esto no es necesario en un mapa, pero abre un amplio abanico de posibilidades para los creadores de mapas para crear su propio mundo dentro de las reglas del modo de juego que para el que crean.<br />
<br />
El archivo ''airport.map'' debe tener un aspecto similar a este:<br />
<syntaxhighlight lang="xml"><br />
<map mode="deathmatch" version="1.0"><br />
<terrorists><br />
<spawnpoint posX="2332.23" posY="-12232.33" posZ="4.42223" skins="23-40" /><br />
</terrorists><br />
<counterterrorists><br />
<spawnpoint posX="2334.23443" posY="-12300.233" posZ="10.2344" skins="40-50" /><br />
</counterterrorists><br />
<br />
<bomb posX="23342.23" posY="" posZ="" /><br />
<br />
<vehicle posX="" posY="" posZ="" model="602" /> <br />
<vehicle posX="" posY="" posZ="" model="603" /> <br />
</map><br />
</syntaxhighlight><br />
<br />
Cuando se inicia un modo de juego con un mapa, los resources del mapa se inicia automáticamente por el mapmanager y la información que contiene puede ser leída por el recursos del modo de juego. Cuando el mapa cambia, el recurso de mapa actual se detiene y se inicia el siguiente recurso de mapa. Para una explicación más detallada y ejemplos de cómo se utilizan los recursos del mapa en el main script, por favor visite la pagina [[Writing Gamemodes]].<br />
<br />
===Eventos===<br />
Los eventos son la manera en la cual MTA le informa a los scripts cuando las cosas estan ocurriendo. Por ejemplo cuando un jugador muere, el evento [[onPlayerWasted]] es llamado. De manera de realizar cualquier accion cuando un jugador muere, tienes que prepararlo tu mismo, de manera similar a como cuando añades un command handler en[[#Writing_the_script|el primer capitulo]].<br />
<br />
Este ejemplo mostrara un mensaje con el nombre del jugador que murió.<br />
<syntaxhighlight lang="lua"><br />
function playerDied(totalAmmo, killer, killerWeapon, bodypart)<br />
outputChatBox(getPlayerName(source).." died!")<br />
end<br />
addEventHandler("onPlayerWasted",getRootElement(),playerDied)<br />
</syntaxhighlight><br />
<br />
Instead of showing what arguments are needed, the documentation page for Events shows what parameters are passed to the handler function, similiar to the way a [[#About_command_handlers|command handler]] does, just that it is different from event to event. Another important point is the ''source'' variable, that exists in handler functions. It doesn't have to be added to the parameter list of the function, but it still exists. It has a different value from event to event, for player events (as in the example above) it is the player element. As another example, you can take a look at the basic spawning player script in the first section to get an idea how ''source'' is used.<br />
<br />
==¿Y ahora qué?==<br />
Deberías ya estar familiarizado con los aspectos básicos de los scripts de MTA, así como con la documentación. La [[ES/Pagina Principal|Página Principal]] te provee de enlaces con mayor información, así como tutoriales y Referencias que permiten una vista más profunda a los temas que te interesan.<br />
<br />
Recomendamos que leas el tutorial de [[debugging|debug]] (encuentro de errores). Es necesaria una buena habilidad con el "debug" cuando haces scripts. ¡Suerte en MTA!<br />
<br />
==Traductores==<br />
<br />
*Benxamix2/The Kid<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]<br />
<br />
*AlexD<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]<br />
<br />
*Rockero<br />
[[en:Scripting Introduction]]</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/Introducci%C3%B3n_a_Lua&diff=39268ES/Introducción a Lua2014-04-07T19:44:48Z<p>Rockeromx: </p>
<hr />
<div>Los llamados "resources" son fundamentales en MTA. Básicamente consisten en una carpeta o archivo ZIP que contiene una colección archivos, además de un archivo '''meta.xml''' que define qué archivos pertenecen al resource, algunas configuraciones, y otras cosas. Como los programas en un sistema operativo, los resources pueden ser iniciados, detenidos, y reiniciados, y varios pueden funcionar al mismo tiempo.<br />
<br />
Todo lo que es la programación ocurre dentro de los resources. Lo que éste haga define si se trata de un modo de juego, un mapa, un script sencillo, u otra cosa. MTA, por defecto, trae ciertos resources que puedes usar opcionalmente en tus modos de juego.<br />
<br />
'''Lo primero que debes tener en cuenta al iniciarte en la programacion en LUA, es conseguir un editor que funcione para ello. Esto hace mucho más facil tu trabajo, permitiéndote corregir el sintaxis de las matemáticas, por ejemplo. El equipo de MTA recomienda [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] y [http://luaedit.sourceforge.net/ LuaEdit].'''<br />
<br />
'''También en cuanto a Tutoriales, puedes guiarte de estos: [http://forum.mtasa.com/viewtopic.php?f=145&t=70852 Scripteando Cosas Básicas] .'''<br />
<br />
==Creando un script funcional==<br />
Primero, aprenderemos a hacer un script que permita al jugador caminar libremente por la ciudad. Esto lo explicaremos paso a paso.<br />
<br />
===Estructura de un script y ubicación del mismo===<br />
Dirijámonos a la carpeta raíz de tu servidor para MTA (por defecto es ''C:\Archivos de Programa\Multi Theft Auto\server''). Después vamos a la siguiente ubicación:<br />
<br />
\server\mods\deathmatch\resources\<br />
<br />
Verás muchos archivos ZIP. Como mencioné antes, estos ZIP son los resources, que vienen por defecto con MTA. Para crear tu propio resource, añade una carpeta a esta ubicación, y dale un nombre. Recomiendo que, al ser tu primer script, sigas las instrucciones al pie de la letra, y a esta carpeta la llames "myserver".<br />
<br />
Ahora, entremos a la ubicación: <br />
<br />
\resources\myserver\<br />
<br />
===Identificando tu resource===<br />
Como mencioné antes, todo resource tiene un archivo que define el tipo, los archivos, y las configuraciones del resource, es el ''meta.xml''. Siempre debe estar dentro de cada resource, de otra forma éste no funciona. Así que creemos un archivo de texto, y llamémoslo "meta.xml" (sin las comillas). Luego abrámoslo con el Bloc de Notas, o con Microsoft Wordpad.<br />
<br />
Una vez dentro de este archivo, agregaremos el siguiente código:<br />
<br />
<br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="TuNombre" type="gamemode" name="Mi Servidor" description="Mi primer servidor de MTA DM" /><br />
<script src="script.lua" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
<br />
En la etiqueta ''<info />'' hay un campo "type". Éste indica el tipo de resource, que siendo "gamemode" en este caso, define que es un modo de juego. Nótese que cuando es otro tipo de resource, el valor "type" cambia. Pero eso lo veremos luego. Por ahora, un modo de juego es lo que necesitas para comenzar un servidor.<br />
<br />
La etiqueta ''<script />'' indica el script que tendrá nuestro modo de juego. A continuación, cómo crearlo.<br />
<br />
===Creando un script simple===<br />
Nótese que en la etiqueta ''<script />'', el archivo Lua no está en otro directorio, como por ejemplo ''myserver\script.lua''. Esto es porque el archivo LUA del que hablamos será creado en el mismo lugar en el que el archivo ''meta.xml''. Bueno, ahora creamos en "myserver", otro archivo de texto, y lo llamamos "script.lua". Abrámoslo y agreguemos estas líneas:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function manejadorDeInicio()<br />
local x = 1959.55<br />
local y = -1714.46<br />
local z = 10<br />
spawnPlayer(source, x, y, z)<br />
fadeCamera(source, true)<br />
setCameraTarget(source, source)<br />
outputChatBox("Bienvenido a Mi Servidor", source)<br />
end<br />
addEventHandler("onPlayerJoin", getRootElement(), manejadorDeInicio)<br />
</syntaxhighlight><br />
<br />
<br />
Este script inicia a tu jugador en las coordenadas "x", "y" y "z" (spawnPlayer) cuando entras al servidor. OJO: ¡La función ''fadeCamera'' siempre debe ser usada cuando inicias al jugador, de otra forma, la pantalla quedará en negro!. Lo mismo pasa con la función ''setCameraTarget''; si no la usas, el jugador no podrá verse a sí mismo, si no que mirará al cielo infinito.<br />
<br />
La variable '''source''' indica qué fue lo que ocasionó al evento. Como el evento ''onPlayerJoin'' significa ''alIniciarJugador'', lógico que lo que ocasione a este evento sea el jugador. Así, evitaremos iniciar a cualquier jugador.<br />
<br />
Ahora, dirigiéndonos a [[addEventHandler]], podrás ver que posee 3 cosas: ''onPlayerJoin'' (el nombre del evento), ''getRootElement()'' (que indica por qué o quién será iniciado el evento, ya que ''getRootElement()'' significa "todo"), y ''joinHandler'', que es el nombre de la función a ejecutar cuando el evento sea activado.<br />
<br />
Con esto, deberías poder comenzar a jugar. Pero faltan algunos detalles... ¡Sigamos!<br />
<br />
===Corriendo el script===<br />
Para que tu servidor local sea iniciado, debes ir a la carpeta raíz de tu servidor (recuerda cuando fuimos a los resources, 2 puestos encima). Una vez que lo inicies, aparecerá una consola con una serie de datos; recuerda el número del puerto, porque lo necesitarás para jugar. Cuando aparezca un mensaje que diga "Server started and is ready to accept connections!", sabrás que ya está listo.<br />
<br />
Pero antes de jugar, debes iniciar el modo de juego. Escribe "gamemode myserver" en la consola del servidor, y presiona Enter. El servidor emitirá algunos mensajes, e iniciará tu modo de juego, y si algún error surge, nos lo dirá. Bueno, ahora es tiempo de probar el modo de juego. Inicia MTA, y en el menú principal escoge "Quick Connect". Apareceren 3 campos. En el primero, escribe "localhost", en el segundo, el número del puerto de tu servidor, y en el tercero, nada, después de todo es la contraseña,y tú no pusiste ninguna. Si todo funciona bien, deberías poder comenzar a jugar en Los Santos.<br />
<br />
A continuación, te enseñaremos a crear un comando que permita crear un vehículo a tu lado. Si quieres, puedes saltarte este paso y seguir la programación avanzada con [[Map manager|Map Manager]], que continúa este tutorial. También puedes revisar [[Introduction to Scripting GUI| Introducción a la Programación del GUI]], en el que te enseñaremos a diseñar la Interfaz Gráfica de Usuario (GUI en inglés, por ''Graphical User Interface'').<br />
<br />
==Creando un Comando==<br />
Volvamos a ''script.lua''. Como dije hace un momento, crearemos un comando que permita crear un vehículo a tu lado. Primero, necesitaremos crear una función a la que llamar, y un manejador de comandos que cree el comando buscado.<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
-- Aquí creamos la función que llama el manejador, con los argumentos "elJugador", "nombreDelComando", "modeloDeVehiculo":<br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
-- Crear el vehículo y otros.<br />
end<br />
<br />
-- Aquí creamos el manejador de comandos:<br />
addCommandHandler("crearvehiculo", crearVehículoParaJugador)<br />
</syntaxhighlight><br />
<br />
<br />
'''Nota:''' ''Los nombres de las funciones tienen enlaces que te llevan a la '''documentación''' de ellas.''<br />
<br />
====Acerca de los manejadores de comandos====<br />
El primer argumento de ''addCommandHandler'' es el nombre del comando que el jugador podrá ingresar, y el segundo es la función que ejecutará en el momento de ingreso del comando (en este caso ''crearVehiculoParaJugador''). <br />
<br />
Si tienes alguna experiencia con la programación en C o algún lenguaje parecido, sabrás que las funciones se ejecutan de la forma:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
nombreDeFunción(argumento1, argumento2, argumento3, ..)<br />
</syntaxhighlight><br />
<syntaxhighlight lang="lua"><br />
nombreDeFunción(elJugador, nombreDelComando, argumento3, ..)<br />
</syntaxhighlight><br />
<br />
<br />
Fijémonos bien en esto. Vemos que ''argumento1'' es ''elJugador'' y ''argumento2'' es ''nombreDelComando''. ''elJugador'' representa al jugador que haya ingresado el comando, por lo que de la forma que lo llames, esta variable será el jugador. ''nombreDelComando'' es simplemente el nombre del comando (sin la barra "/"), no hay ningún misterio en ello, por lo que si el jugador escribió "/crearvehiculo" entonces esta variable sería "crearvehiculo". Por último, ''argumento3'' representa una variable más, que estudiaremos más adelante. Nunca olvides que los 2 primeros argumentos son obligatorios y están predefinidos (y debes tenerlos en el orden que se indican), pero puedes llamarlos como sea.<br />
<br />
''addCommandHandler'' permite llamar fácilmente a funciones como ''crearVehículoParaJugador'', de forma interna.<br />
<br />
Por ejemplo: Alguien entra el comando "/crearvehiculo 468". El servidor creará el vehículo 468, es decir, la moto Sánchez. Dentro del código, ''addCommandHandler'' llama a la función ''crearVehículoParaJugador'' como si hubiera sido escrito así:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
crearVehículoParaJugador(elJugador,"crearvehiculo","468") -- Recuerda que "elJugador" es el elemento jugador que entró el comando.<br />
</syntaxhighlight><br />
<br />
<br />
Como podemos ver, esto prevée ciertos argumentos que ya hemos mencionado. Pero el más importante es "468", que es el "argumento3" del que hablábamos más arriba. Éste se refiere al modelo del vehículo. Recuerda que siempre debes definir los primeros 2 parámetros ("elJugador" y "nombreDelComando"), porque de otra forma el comando no funcionará.<br />
<br />
'''Nota:''' ''Tienes que poner el manejador de comandos DEBAJO de la función a llamar por el comando. ¡El orden de las ejecuciones es fundamental!''<br />
<br />
====Escribiendo la función====<br />
Para llenar la función que hemos creado, primero hay que plantearse qué se debe hacer:<br />
* Conseguir la posición del jugador, así sabremos dónde crear el vehículo (queremos que aparezca al lado del jugador).<br />
* Calcular la posición donde crearemos el vehículo (no queremos que aparezca en el jugador).<br />
* Crear el vehículo.<br />
* Revisar si fue creado. Si no, mostrar alguna advertencia o algún mensaje de error.<br />
<br />
Para conseguir estos objetivos, debemos usar ciertas funciones, las cuales se pueden ver visitando la [[Scripting Functions| Lista de Funciones de Servidor]]. Primero, una función para conseguir la posición del jugador. Si visitaste la [[ES/Clases MTA| Lista de Clases de MTA]], sabrás que un jugador es un elemento, lo que nos lleva a buscar una '''Función de Elemento''', la cual es ''[[getElementPosition]]''. Haciendo click en ella, visitarás la documentación de ella, que contiene una descripción, el sintaxis (los argumentos necesarios en la función), y, generalmente, un ejemplo de cómo usarla.<br />
<br />
Para la función [[getElementPosition]], el sintaxis sería:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
float, float, float getElementPosition ( elemento elElemento )<br />
</syntaxhighlight><br />
<br />
<br />
Los 3 ''float'' que aparecen, son los valores que regresa la función. Estos valores, en español, se llaman '''Número de punto flotante''', y son números que pueden o no, poseer decimales (véase la [[ES/Tipos de Valores| Lista de tipos de valores]]). Como "x", "y" y "z" son coordenadas, por defecto siempre serán números de punto flotante. Ahora, fijándonos en los paréntesis, notaremos que sólo aparece "elElemento" como argumento de la función. Pues, aplicando la función a un jugador, tendríamos algo como esto:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
--[[Aquí conseguiremos la posición del jugador, y la almacenaremos en 3 valores: "x", "y" y "z". Nota: "local" significa que las variables indicadas sólo pueden ser usadas en la función actual.]]--<br />
local x,y,z = getElementPosition(elJugador)<br />
end<br />
</syntaxhighlight><br />
<br />
<br />
Ahora, para crear el vehículo al lado del jugador, debemos modificar alguna coordenada, en este caso, "x".<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5 --Agregamos 5 a la posición "X" (¡esto no altera la posición del jugador!)<br />
end<br />
</syntaxhighlight><br />
<br />
<br />
Nuevamente, necesitamos otra función para crear el vehículo. Buscándola en la [[Scripting Functions| Lista de Funciones de Servidor]], la encontraremos. Ya que hablamos de vehículo, vamos a la subcategoría tal, en la que encontramos [[createVehicle]]. En esta función, el valor que regresa la función consta de 1 solo argumento (esto es lo más común en las funciones), y es el vehículo creado, o un valor "boolean" ("lógico" en inglés) de tipo "false", si el vehículo no fue creado.<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5<br />
local vehículoCreado = createVehicle(tonumber(modeloDeVehículo),x,y,z)<br />
end<br />
</syntaxhighlight><br />
<br />
Nótese que usamos "tonumber(modeloDeVehículo)" en vez de usar directamente "modeloDeVehículo". Esto es porque cuando entramos un comando, todos los argumentos salen en forma de "string" ("arreglo" en inglés), que es un tipo de valor textual. Por ello, no puede ser usado como número, y la función "tonumber()" nos permite dejarlo como un número.<br />
<br />
Bueno, tenemos todo lo necesario para que nuestro script funcione, pero eso no indica que esté listo. Ya tenemos la función para conseguir la posición del jugador, modificarla, y crear el vehículo. Pero nos falta el mensaje. La función para esto se llama ''outputChatBox''. Como dije antes, si el vehículo no fue creado, entonces regresa un valor "false". Así que creamos nuestra primera condición, en la que si el valor regresado es falso, entonces aparece un mensaje.<br />
<br />
Veamos cómo luce el script final:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5<br />
local vehículoCreado = createVehicle(tonumber(modeloDeVehículo),x,y,z)<br />
if (vehículoCreado == false) then --"if" es la condición, siempre debe ir acompañado de la condición y un "then".<br />
outputChatBox("Error al crear vehículo.",elJugador) --Crea un mensaje de error simple en el chat.<br />
end<br />
end<br />
addCommandHandler("crearvehiculo", crearVehículoParaJugador) --Y aquí creamos el manejador de comandos.<br />
</syntaxhighlight><br />
<br />
<br />
Nada mal, ¿no? Ya te hemos introducido en la creación de 2 scripts sencillos. Si quieres más programación avanzada, entonces visita el [[Map Manager| Mánager de Mapas]].<br />
<br />
<br />
==Lo que necesitas saber==<br />
Ya has leído un poco sobre resources, manejadores de comandos y funciones de búsqueda en la documentación (en el primer párrafo), pero aún queda mucho por aprender. En esta sección te daremos una vista rápida sobre esto, y si se puede, enlazar a otras páginas útiles.<br />
<br />
===Scripts de cliente y servidor===<br />
Quizás ya has notado los términos Server (o Servidor) y Client (o Cliente) en algún lado, mayormente en conjunción con las funciones. MTA no sólo soporta scripts que funcionan en el servidor y prevén comandos (como el que escribimos arriba) u otras características; también scripts que corren en el cliente (MTA en sí, el software que usas para conectarte a los servidores). Esto se debe a que algunas funciones tienen que estar del lado cliente (como el GUI; Graphical User Interface, Interfaz de Usuario Gráfica), si bien funcionan mejor o porque no se pueden hacer en el servidor.<br />
<br />
La mayoría de los scripts que harás (modos de juego y/o mapas) probablemente serán de tipo servidor, como el que escribimos en la primera sección. Si tratas de hacer funcionar algo que no se puede hacer en el servidor, probablemente tendrá que ser de cliente. para un script de cliente, por ejemplo, podrías crear un archivo de Lua ordinario (como ''client.lua'') y especificarlo en el archivo meta.xml, así:<br />
<syntaxhighlight lang="xml"><br />
<script src="client.lua" type="client" /><br />
</syntaxhighlight><br />
El atributo ''type'' por defecto es 'server' (servidor), por lo que no es necesario escribirlo cuando se trata de scripts de servidor. Si quieres, puedes leer más sobre [[ES/Scripts de Cliente|scripts de cliente]].<br />
<br />
===Resources más complejos===<br />
<br />
<br />
La seccion previa es de como poner scripts de modo clientside, pero hay cosas mas posibles. Como se menciona al principio de este texto, los resources pueden hacer casi cualquier cosa. Su proposito es definido de porque hacen. Veamos unos resources teoricamente, por ver los archivos que tienen, el''meta.xml'' y que podrian hacer:<br />
<br />
====Primer Ejemplo - Un script util====<br />
<syntaxhighlight lang="xml"><br />
/admin_commands<br />
/meta.xml<br />
/commands.lua<br />
/client.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="AlexD" description="Comandos de Admin" /><br />
<script src="commands.lua" /><br />
<script src="client.lua" type="client" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''commands.lua'' tiene comandos de administrador, como banear a un jugador, mutearlo o cualquier cosa que pueda usar un administrador<br />
* El ''client.lua'' tiene el GUI para poder ejecutar los comandos sencillamente.<br />
<br />
<br />
Este ejemplo estaria corriendo todo el tiempo (talvez auto-empezado cuando el servidor empieza) Y es util durante toda la experiencia en el juego y tambien no interfiere con el Juego en general, al menos que un administrador decide de ejecutar algun acto, por supuesto.<br />
<br />
====Segundo Ejemplo - Un modo de Juego====<br />
<syntaxhighlight lang="xml"><br />
/counterstrike<br />
/meta.xml<br />
/counterstrike.lua<br />
/buymenu.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="AlexD" description="Recreacion de CounterStrike" type="gamemode" /><br />
<script src="counterstrike.lua" /><br />
<script src="buymenu.lua" type="client" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''counterstrike.lua'' contiene lo similar a las siguientes caracteristicas:<br />
** Dejar que los jugadores elijan su equipo y aparezcan en el<br />
** Darles armas, objectivos e instrucciones (talvez leer de un Mapa, vease mas adelante)<br />
** Definir las reglas del juego, ejemplo: cuando la partida acabe, que pasa cuando un jugador muere<br />
** .. y talvez algo mas<br />
* El ''buymenu.lua'' es un script Clientside y crea un menu para comprar armas<br />
<br />
Este ejemplo puede ser llamado modo de juego, porque no solo interviene con el juego en general, pero actualmente define las reglas de el. El atributo ''type'' indica que este ejemplo sirve con el [[Map manager]], si otro resource que fue escrito por el Equipo QA para gestionar modos de juego y carga de mapas. Es altamente recomendado que tu base tus modos de juego en las tecnicas que proporciona.<br />
<br />
Esto tambien significa que el modo de juego no cargara sin el mapa. Los modos de juego tienen que ser tan genericos posibles. Un ejemplo de un mapa es mostrado en el siguiente ejemplo.<br />
<br />
====Tercer ejemplo - Un mapa====<br />
<syntaxhighlight lang="xml"><br />
/cs-airport<br />
/meta.xml<br />
/airport.map<br />
/airport.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="Someguy" description="Counterstrike airport map" type="map" gamemodes="counterstrike" /><br />
<map src="airport.map" /><br />
<script src="airport.lua" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''airport.map'' es un archivo XML que proporciona información sobre el mapa para el modo de juego, estos pueden incluir:<br />
** Donde deben spawnear los jugadores, con que armas, que equipos hay<br />
** Cuales son los objetivos<br />
** Clima, tiempo, tiempo limite<br />
** Proporcionar vehículos<br />
* El ''airport.lua'' puede contener funciones del mapa específicas, que pueden incluir:<br />
** Apertura de alguna puerta / hacer que algo explote cuando suceda algo específico<br />
** Crear o mover algunos objetos personalizados, o manipular los objetos que se crean a través del archivo de mapa.<br />
** .. cualquier cosa mapa-específicas que se pueda imaginar<br />
Como puede ver, el atributo ''type'' cambió a 'map', diciéndole al [[Map manager]] que este recurso es un mapa, mientras que el atributo ''gamemodes'' indica para que tipos de juego o gamemode este mapa es válido, en este caso el modo de juego en el ejemplo anterior. Lo que puede venir como una sorpresa es que también hay script en el recurso de mapa. Por supuesto, esto no es necesario en un mapa, pero abre un amplio abanico de posibilidades para los creadores de mapas para crear su propio mundo dentro de las reglas del modo de juego que para el que crean.<br />
<br />
El archivo ''airport.map'' debe tener un aspecto similar a este:<br />
<syntaxhighlight lang="xml"><br />
<map mode="deathmatch" version="1.0"><br />
<terrorists><br />
<spawnpoint posX="2332.23" posY="-12232.33" posZ="4.42223" skins="23-40" /><br />
</terrorists><br />
<counterterrorists><br />
<spawnpoint posX="2334.23443" posY="-12300.233" posZ="10.2344" skins="40-50" /><br />
</counterterrorists><br />
<br />
<bomb posX="23342.23" posY="" posZ="" /><br />
<br />
<vehicle posX="" posY="" posZ="" model="602" /> <br />
<vehicle posX="" posY="" posZ="" model="603" /> <br />
</map><br />
</syntaxhighlight><br />
<br />
Cuando se inicia un modo de juego con un mapa, los resources del mapa se inicia automáticamente por el mapmanager y la información que contiene puede ser leída por el recursos del modo de juego. Cuando el mapa cambia, el recurso de mapa actual se detiene y se inicia el siguiente recurso de mapa. Para una explicación más detallada y ejemplos de cómo se utilizan los recursos del mapa en el main script, por favor visite la pagina [[Writing Gamemodes]].<br />
<br />
===Eventos===<br />
Los eventos son la manera en la cual MTA le informa a los scripts cuando las cosas estan ocurriendo. Por ejemplo cuando un jugador muere, el evento [[onPlayerWasted]] es llamado. De manera de realizar cualquier accion cuando un jugador muere, tienes que prepararlo tu mismo, de manera similar a como cuando añades un command handler en[[#Writing_the_script|el primer capitulo]].<br />
<br />
Este ejemplo mostrara un mensaje con el nombre del jugador que murió.<br />
<syntaxhighlight lang="lua"><br />
function playerDied(totalAmmo, killer, killerWeapon, bodypart)<br />
outputChatBox(getPlayerName(source).." died!")<br />
end<br />
addEventHandler("onPlayerWasted",getRootElement(),playerDied)<br />
</syntaxhighlight><br />
<br />
Instead of showing what arguments are needed, the documentation page for Events shows what parameters are passed to the handler function, similiar to the way a [[#About_command_handlers|command handler]] does, just that it is different from event to event. Another important point is the ''source'' variable, that exists in handler functions. It doesn't have to be added to the parameter list of the function, but it still exists. It has a different value from event to event, for player events (as in the example above) it is the player element. As another example, you can take a look at the basic spawning player script in the first section to get an idea how ''source'' is used.<br />
<br />
==¿Y ahora qué?==<br />
Deberías ya estar familiarizado con los aspectos básicos de los scripts de MTA, así como con la documentación. La [[ES/Pagina Principal|Página Principal]] te provee de enlaces con mayor información, así como tutoriales y Referencias que permiten una vista más profunda a los temas que te interesan.<br />
<br />
Recomendamos que leas el tutorial de [[debugging|debug]] (encuentro de errores). Es necesaria una buena habilidad con el "debug" cuando haces scripts. ¡Suerte en MTA!<br />
<br />
==Traductores==<br />
<br />
*Benxamix2/The Kid<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]<br />
<br />
*AlexD<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]<br />
<br />
<br />
*Rockero<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/Introducci%C3%B3n_a_Lua&diff=39267ES/Introducción a Lua2014-04-07T19:43:27Z<p>Rockeromx: </p>
<hr />
<div>Los llamados "resources" son fundamentales en MTA. Básicamente consisten en una carpeta o archivo ZIP que contiene una colección archivos, además de un archivo '''meta.xml''' que define qué archivos pertenecen al resource, algunas configuraciones, y otras cosas. Como los programas en un sistema operativo, los resources pueden ser iniciados, detenidos, y reiniciados, y varios pueden funcionar al mismo tiempo.<br />
<br />
Todo lo que es la programación ocurre dentro de los resources. Lo que éste haga define si se trata de un modo de juego, un mapa, un script sencillo, u otra cosa. MTA, por defecto, trae ciertos resources que puedes usar opcionalmente en tus modos de juego.<br />
<br />
'''Lo primero que debes tener en cuenta al iniciarte en la programacion en LUA, es conseguir un editor que funcione para ello. Esto hace mucho más facil tu trabajo, permitiéndote corregir el sintaxis de las matemáticas, por ejemplo. El equipo de MTA recomienda [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] y [http://luaedit.sourceforge.net/ LuaEdit].'''<br />
<br />
'''También en cuanto a Tutoriales, puedes guiarte de estos: [http://forum.mtasa.com/viewtopic.php?f=145&t=70852 Scripteando Cosas Básicas] .'''<br />
<br />
==Creando un script funcional==<br />
Primero, aprenderemos a hacer un script que permita al jugador caminar libremente por la ciudad. Esto lo explicaremos paso a paso.<br />
<br />
===Estructura de un script y ubicación del mismo===<br />
Dirijámonos a la carpeta raíz de tu servidor para MTA (por defecto es ''C:\Archivos de Programa\Multi Theft Auto\server''). Después vamos a la siguiente ubicación:<br />
<br />
\server\mods\deathmatch\resources\<br />
<br />
Verás muchos archivos ZIP. Como mencioné antes, estos ZIP son los resources, que vienen por defecto con MTA. Para crear tu propio resource, añade una carpeta a esta ubicación, y dale un nombre. Recomiendo que, al ser tu primer script, sigas las instrucciones al pie de la letra, y a esta carpeta la llames "myserver".<br />
<br />
Ahora, entremos a la ubicación: <br />
<br />
\resources\myserver\<br />
<br />
===Identificando tu resource===<br />
Como mencioné antes, todo resource tiene un archivo que define el tipo, los archivos, y las configuraciones del resource, es el ''meta.xml''. Siempre debe estar dentro de cada resource, de otra forma éste no funciona. Así que creemos un archivo de texto, y llamémoslo "meta.xml" (sin las comillas). Luego abrámoslo con el Bloc de Notas, o con Microsoft Wordpad.<br />
<br />
Una vez dentro de este archivo, agregaremos el siguiente código:<br />
<br />
<br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="TuNombre" type="gamemode" name="Mi Servidor" description="Mi primer servidor de MTA DM" /><br />
<script src="script.lua" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
<br />
En la etiqueta ''<info />'' hay un campo "type". Éste indica el tipo de resource, que siendo "gamemode" en este caso, define que es un modo de juego. Nótese que cuando es otro tipo de resource, el valor "type" cambia. Pero eso lo veremos luego. Por ahora, un modo de juego es lo que necesitas para comenzar un servidor.<br />
<br />
La etiqueta ''<script />'' indica el script que tendrá nuestro modo de juego. A continuación, cómo crearlo.<br />
<br />
===Creando un script simple===<br />
Nótese que en la etiqueta ''<script />'', el archivo Lua no está en otro directorio, como por ejemplo ''myserver\script.lua''. Esto es porque el archivo LUA del que hablamos será creado en el mismo lugar en el que el archivo ''meta.xml''. Bueno, ahora creamos en "myserver", otro archivo de texto, y lo llamamos "script.lua". Abrámoslo y agreguemos estas líneas:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function manejadorDeInicio()<br />
local x = 1959.55<br />
local y = -1714.46<br />
local z = 10<br />
spawnPlayer(source, x, y, z)<br />
fadeCamera(source, true)<br />
setCameraTarget(source, source)<br />
outputChatBox("Bienvenido a Mi Servidor", source)<br />
end<br />
addEventHandler("onPlayerJoin", getRootElement(), manejadorDeInicio)<br />
</syntaxhighlight><br />
<br />
<br />
Este script inicia a tu jugador en las coordenadas "x", "y" y "z" (spawnPlayer) cuando entras al servidor. OJO: ¡La función ''fadeCamera'' siempre debe ser usada cuando inicias al jugador, de otra forma, la pantalla quedará en negro!. Lo mismo pasa con la función ''setCameraTarget''; si no la usas, el jugador no podrá verse a sí mismo, si no que mirará al cielo infinito.<br />
<br />
La variable '''source''' indica qué fue lo que ocasionó al evento. Como el evento ''onPlayerJoin'' significa ''alIniciarJugador'', lógico que lo que ocasione a este evento sea el jugador. Así, evitaremos iniciar a cualquier jugador.<br />
<br />
Ahora, dirigiéndonos a [[addEventHandler]], podrás ver que posee 3 cosas: ''onPlayerJoin'' (el nombre del evento), ''getRootElement()'' (que indica por qué o quién será iniciado el evento, ya que ''getRootElement()'' significa "todo"), y ''joinHandler'', que es el nombre de la función a ejecutar cuando el evento sea activado.<br />
<br />
Con esto, deberías poder comenzar a jugar. Pero faltan algunos detalles... ¡Sigamos!<br />
<br />
===Corriendo el script===<br />
Para que tu servidor local sea iniciado, debes ir a la carpeta raíz de tu servidor (recuerda cuando fuimos a los resources, 2 puestos encima). Una vez que lo inicies, aparecerá una consola con una serie de datos; recuerda el número del puerto, porque lo necesitarás para jugar. Cuando aparezca un mensaje que diga "Server started and is ready to accept connections!", sabrás que ya está listo.<br />
<br />
Pero antes de jugar, debes iniciar el modo de juego. Escribe "gamemode myserver" en la consola del servidor, y presiona Enter. El servidor emitirá algunos mensajes, e iniciará tu modo de juego, y si algún error surge, nos lo dirá. Bueno, ahora es tiempo de probar el modo de juego. Inicia MTA, y en el menú principal escoge "Quick Connect". Apareceren 3 campos. En el primero, escribe "localhost", en el segundo, el número del puerto de tu servidor, y en el tercero, nada, después de todo es la contraseña,y tú no pusiste ninguna. Si todo funciona bien, deberías poder comenzar a jugar en Los Santos.<br />
<br />
A continuación, te enseñaremos a crear un comando que permita crear un vehículo a tu lado. Si quieres, puedes saltarte este paso y seguir la programación avanzada con [[Map manager|Map Manager]], que continúa este tutorial. También puedes revisar [[Introduction to Scripting GUI| Introducción a la Programación del GUI]], en el que te enseñaremos a diseñar la Interfaz Gráfica de Usuario (GUI en inglés, por ''Graphical User Interface'').<br />
<br />
==Creando un Comando==<br />
Volvamos a ''script.lua''. Como dije hace un momento, crearemos un comando que permita crear un vehículo a tu lado. Primero, necesitaremos crear una función a la que llamar, y un manejador de comandos que cree el comando buscado.<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
-- Aquí creamos la función que llama el manejador, con los argumentos "elJugador", "nombreDelComando", "modeloDeVehiculo":<br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
-- Crear el vehículo y otros.<br />
end<br />
<br />
-- Aquí creamos el manejador de comandos:<br />
addCommandHandler("crearvehiculo", crearVehículoParaJugador)<br />
</syntaxhighlight><br />
<br />
<br />
'''Nota:''' ''Los nombres de las funciones tienen enlaces que te llevan a la '''documentación''' de ellas.''<br />
<br />
====Acerca de los manejadores de comandos====<br />
El primer argumento de ''addCommandHandler'' es el nombre del comando que el jugador podrá ingresar, y el segundo es la función que ejecutará en el momento de ingreso del comando (en este caso ''crearVehiculoParaJugador''). <br />
<br />
Si tienes alguna experiencia con la programación en C o algún lenguaje parecido, sabrás que las funciones se ejecutan de la forma:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
nombreDeFunción(argumento1, argumento2, argumento3, ..)<br />
</syntaxhighlight><br />
<syntaxhighlight lang="lua"><br />
nombreDeFunción(elJugador, nombreDelComando, argumento3, ..)<br />
</syntaxhighlight><br />
<br />
<br />
Fijémonos bien en esto. Vemos que ''argumento1'' es ''elJugador'' y ''argumento2'' es ''nombreDelComando''. ''elJugador'' representa al jugador que haya ingresado el comando, por lo que de la forma que lo llames, esta variable será el jugador. ''nombreDelComando'' es simplemente el nombre del comando (sin la barra "/"), no hay ningún misterio en ello, por lo que si el jugador escribió "/crearvehiculo" entonces esta variable sería "crearvehiculo". Por último, ''argumento3'' representa una variable más, que estudiaremos más adelante. Nunca olvides que los 2 primeros argumentos son obligatorios y están predefinidos (y debes tenerlos en el orden que se indican), pero puedes llamarlos como sea.<br />
<br />
''addCommandHandler'' permite llamar fácilmente a funciones como ''crearVehículoParaJugador'', de forma interna.<br />
<br />
Por ejemplo: Alguien entra el comando "/crearvehiculo 468". El servidor creará el vehículo 468, es decir, la moto Sánchez. Dentro del código, ''addCommandHandler'' llama a la función ''crearVehículoParaJugador'' como si hubiera sido escrito así:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
crearVehículoParaJugador(elJugador,"crearvehiculo","468") -- Recuerda que "elJugador" es el elemento jugador que entró el comando.<br />
</syntaxhighlight><br />
<br />
<br />
Como podemos ver, esto prevée ciertos argumentos que ya hemos mencionado. Pero el más importante es "468", que es el "argumento3" del que hablábamos más arriba. Éste se refiere al modelo del vehículo. Recuerda que siempre debes definir los primeros 2 parámetros ("elJugador" y "nombreDelComando"), porque de otra forma el comando no funcionará.<br />
<br />
'''Nota:''' ''Tienes que poner el manejador de comandos DEBAJO de la función a llamar por el comando. ¡El orden de las ejecuciones es fundamental!''<br />
<br />
====Escribiendo la función====<br />
Para llenar la función que hemos creado, primero hay que plantearse qué se debe hacer:<br />
* Conseguir la posición del jugador, así sabremos dónde crear el vehículo (queremos que aparezca al lado del jugador).<br />
* Calcular la posición donde crearemos el vehículo (no queremos que aparezca en el jugador).<br />
* Crear el vehículo.<br />
* Revisar si fue creado. Si no, mostrar alguna advertencia o algún mensaje de error.<br />
<br />
Para conseguir estos objetivos, debemos usar ciertas funciones, las cuales se pueden ver visitando la [[Scripting Functions| Lista de Funciones de Servidor]]. Primero, una función para conseguir la posición del jugador. Si visitaste la [[ES/Clases MTA| Lista de Clases de MTA]], sabrás que un jugador es un elemento, lo que nos lleva a buscar una '''Función de Elemento''', la cual es ''[[getElementPosition]]''. Haciendo click en ella, visitarás la documentación de ella, que contiene una descripción, el sintaxis (los argumentos necesarios en la función), y, generalmente, un ejemplo de cómo usarla.<br />
<br />
Para la función [[getElementPosition]], el sintaxis sería:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
float, float, float getElementPosition ( elemento elElemento )<br />
</syntaxhighlight><br />
<br />
<br />
Los 3 ''float'' que aparecen, son los valores que regresa la función. Estos valores, en español, se llaman '''Número de punto flotante''', y son números que pueden o no, poseer decimales (véase la [[ES/Tipos de Valores| Lista de tipos de valores]]). Como "x", "y" y "z" son coordenadas, por defecto siempre serán números de punto flotante. Ahora, fijándonos en los paréntesis, notaremos que sólo aparece "elElemento" como argumento de la función. Pues, aplicando la función a un jugador, tendríamos algo como esto:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
--[[Aquí conseguiremos la posición del jugador, y la almacenaremos en 3 valores: "x", "y" y "z". Nota: "local" significa que las variables indicadas sólo pueden ser usadas en la función actual.]]--<br />
local x,y,z = getElementPosition(elJugador)<br />
end<br />
</syntaxhighlight><br />
<br />
<br />
Ahora, para crear el vehículo al lado del jugador, debemos modificar alguna coordenada, en este caso, "x".<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5 --Agregamos 5 a la posición "X" (¡esto no altera la posición del jugador!)<br />
end<br />
</syntaxhighlight><br />
<br />
<br />
Nuevamente, necesitamos otra función para crear el vehículo. Buscándola en la [[Scripting Functions| Lista de Funciones de Servidor]], la encontraremos. Ya que hablamos de vehículo, vamos a la subcategoría tal, en la que encontramos [[createVehicle]]. En esta función, el valor que regresa la función consta de 1 solo argumento (esto es lo más común en las funciones), y es el vehículo creado, o un valor "boolean" ("lógico" en inglés) de tipo "false", si el vehículo no fue creado.<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5<br />
local vehículoCreado = createVehicle(tonumber(modeloDeVehículo),x,y,z)<br />
end<br />
</syntaxhighlight><br />
<br />
Nótese que usamos "tonumber(modeloDeVehículo)" en vez de usar directamente "modeloDeVehículo". Esto es porque cuando entramos un comando, todos los argumentos salen en forma de "string" ("arreglo" en inglés), que es un tipo de valor textual. Por ello, no puede ser usado como número, y la función "tonumber()" nos permite dejarlo como un número.<br />
<br />
Bueno, tenemos todo lo necesario para que nuestro script funcione, pero eso no indica que esté listo. Ya tenemos la función para conseguir la posición del jugador, modificarla, y crear el vehículo. Pero nos falta el mensaje. La función para esto se llama ''outputChatBox''. Como dije antes, si el vehículo no fue creado, entonces regresa un valor "false". Así que creamos nuestra primera condición, en la que si el valor regresado es falso, entonces aparece un mensaje.<br />
<br />
Veamos cómo luce el script final:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5<br />
local vehículoCreado = createVehicle(tonumber(modeloDeVehículo),x,y,z)<br />
if (vehículoCreado == false) then --"if" es la condición, siempre debe ir acompañado de la condición y un "then".<br />
outputChatBox("Error al crear vehículo.",elJugador) --Crea un mensaje de error simple en el chat.<br />
end<br />
end<br />
addCommandHandler("crearvehiculo", crearVehículoParaJugador) --Y aquí creamos el manejador de comandos.<br />
</syntaxhighlight><br />
<br />
<br />
Nada mal, ¿no? Ya te hemos introducido en la creación de 2 scripts sencillos. Si quieres más programación avanzada, entonces visita el [[Map Manager| Mánager de Mapas]].<br />
<br />
<br />
==Lo que necesitas saber==<br />
Ya has leído un poco sobre resources, manejadores de comandos y funciones de búsqueda en la documentación (en el primer párrafo), pero aún queda mucho por aprender. En esta sección te daremos una vista rápida sobre esto, y si se puede, enlazar a otras páginas útiles.<br />
<br />
===Scripts de cliente y servidor===<br />
Quizás ya has notado los términos Server (o Servidor) y Client (o Cliente) en algún lado, mayormente en conjunción con las funciones. MTA no sólo soporta scripts que funcionan en el servidor y prevén comandos (como el que escribimos arriba) u otras características; también scripts que corren en el cliente (MTA en sí, el software que usas para conectarte a los servidores). Esto se debe a que algunas funciones tienen que estar del lado cliente (como el GUI; Graphical User Interface, Interfaz de Usuario Gráfica), si bien funcionan mejor o porque no se pueden hacer en el servidor.<br />
<br />
La mayoría de los scripts que harás (modos de juego y/o mapas) probablemente serán de tipo servidor, como el que escribimos en la primera sección. Si tratas de hacer funcionar algo que no se puede hacer en el servidor, probablemente tendrá que ser de cliente. para un script de cliente, por ejemplo, podrías crear un archivo de Lua ordinario (como ''client.lua'') y especificarlo en el archivo meta.xml, así:<br />
<syntaxhighlight lang="xml"><br />
<script src="client.lua" type="client" /><br />
</syntaxhighlight><br />
El atributo ''type'' por defecto es 'server' (servidor), por lo que no es necesario escribirlo cuando se trata de scripts de servidor. Si quieres, puedes leer más sobre [[ES/Scripts de Cliente|scripts de cliente]].<br />
<br />
===Resources más complejos===<br />
<br />
<br />
La seccion previa es de como poner scripts de modo clientside, pero hay cosas mas posibles. Como se menciona al principio de este texto, los resources pueden hacer casi cualquier cosa. Su proposito es definido de porque hacen. Veamos unos resources teoricamente, por ver los archivos que tienen, el''meta.xml'' y que podrian hacer:<br />
<br />
====Primer Ejemplo - Un script util====<br />
<syntaxhighlight lang="xml"><br />
/admin_commands<br />
/meta.xml<br />
/commands.lua<br />
/client.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="AlexD" description="Comandos de Admin" /><br />
<script src="commands.lua" /><br />
<script src="client.lua" type="client" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''commands.lua'' tiene comandos de administrador, como banear a un jugador, mutearlo o cualquier cosa que pueda usar un administrador<br />
* El ''client.lua'' tiene el GUI para poder ejecutar los comandos sencillamente.<br />
<br />
<br />
Este ejemplo estaria corriendo todo el tiempo (talvez auto-empezado cuando el servidor empieza) Y es util durante toda la experiencia en el juego y tambien no interfiere con el Juego en general, al menos que un administrador decide de ejecutar algun acto, por supuesto.<br />
<br />
====Segundo Ejemplo - Un modo de Juego====<br />
<syntaxhighlight lang="xml"><br />
/counterstrike<br />
/meta.xml<br />
/counterstrike.lua<br />
/buymenu.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="AlexD" description="Recreacion de CounterStrike" type="gamemode" /><br />
<script src="counterstrike.lua" /><br />
<script src="buymenu.lua" type="client" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''counterstrike.lua'' contiene lo similar a las siguientes caracteristicas:<br />
** Dejar que los jugadores elijan su equipo y aparezcan en el<br />
** Darles armas, objectivos e instrucciones (talvez leer de un Mapa, vease mas adelante)<br />
** Definir las reglas del juego, ejemplo: cuando la partida acabe, que pasa cuando un jugador muere<br />
** .. y talvez algo mas<br />
* El ''buymenu.lua'' es un script Clientside y crea un menu para comprar armas<br />
<br />
Este ejemplo puede ser llamado modo de juego, porque no solo interviene con el juego en general, pero actualmente define las reglas de el. El atributo ''type'' indica que este ejemplo sirve con el [[Map manager]], si otro resource que fue escrito por el Equipo QA para gestionar modos de juego y carga de mapas. Es altamente recomendado que tu base tus modos de juego en las tecnicas que proporciona.<br />
<br />
Esto tambien significa que el modo de juego no cargara sin el mapa. Los modos de juego tienen que ser tan genericos posibles. Un ejemplo de un mapa es mostrado en el siguiente ejemplo.<br />
<br />
====Tercer ejemplo - Un mapa====<br />
<syntaxhighlight lang="xml"><br />
/cs-airport<br />
/meta.xml<br />
/airport.map<br />
/airport.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="Someguy" description="Counterstrike airport map" type="map" gamemodes="counterstrike" /><br />
<map src="airport.map" /><br />
<script src="airport.lua" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''airport.map'' es un archivo XML que proporciona información sobre el mapa para el modo de juego, estos pueden incluir:<br />
** Donde deben spawnear los jugadores, con que armas, que equipos hay<br />
** Cuales son los objetivos<br />
** Clima, tiempo, tiempo limite<br />
** Proporcionar vehículos<br />
* El ''airport.lua'' puede contener funciones del mapa específicas, que pueden incluir:<br />
** Apertura de alguna puerta / hacer que algo explote cuando suceda algo específico<br />
** Crear o mover algunos objetos personalizados, o manipular los objetos que se crean a través del archivo de mapa.<br />
** .. cualquier cosa mapa-específicas que se pueda imaginar<br />
Como puede ver, el atributo ''type'' cambió a 'map', diciéndole al [[Map manager]] que este recurso es un mapa, mientras que el atributo ''gamemodes'' indica para que tipos de juego o gamemode este mapa es válido, en este caso el modo de juego en el ejemplo anterior. Lo que puede venir como una sorpresa es que también hay script en el recurso de mapa. Por supuesto, esto no es necesario en un mapa, pero abre un amplio abanico de posibilidades para los creadores de mapas para crear su propio mundo dentro de las reglas del modo de juego que para el que crean.<br />
<br />
El archivo''airport.map'' debe tener un aspecto similar a este:<br />
<syntaxhighlight lang="xml"><br />
<map mode="deathmatch" version="1.0"><br />
<terrorists><br />
<spawnpoint posX="2332.23" posY="-12232.33" posZ="4.42223" skins="23-40" /><br />
</terrorists><br />
<counterterrorists><br />
<spawnpoint posX="2334.23443" posY="-12300.233" posZ="10.2344" skins="40-50" /><br />
</counterterrorists><br />
<br />
<bomb posX="23342.23" posY="" posZ="" /><br />
<br />
<vehicle posX="" posY="" posZ="" model="602" /> <br />
<vehicle posX="" posY="" posZ="" model="603" /> <br />
</map><br />
</syntaxhighlight><br />
<br />
Cuando se inicia un modo de juego con un mapa, los resources del mapa se inicia automáticamente por el mapmanager y la información que contiene puede ser leída por el recursos del modo de juego. Cuando el mapa cambia, el recurso de mapa actual se detiene y se inicia el siguiente recurso de mapa. Para una explicación más detallada y ejemplos de cómo se utilizan los recursos del mapa en el main script, por favor visite la pagina [[Writing Gamemodes]].<br />
<br />
===Eventos===<br />
Los eventos son la manera en la cual MTA le informa a los scripts cuando las cosas estan ocurriendo. Por ejemplo cuando un jugador muere, el evento [[onPlayerWasted]] es llamado. De manera de realizar cualquier accion cuando un jugador muere, tienes que prepararlo tu mismo, de manera similar a como cuando añades un command handler en[[#Writing_the_script|el primer capitulo]].<br />
<br />
Este ejemplo mostrara un mensaje con el nombre del jugador que murió.<br />
<syntaxhighlight lang="lua"><br />
function playerDied(totalAmmo, killer, killerWeapon, bodypart)<br />
outputChatBox(getPlayerName(source).." died!")<br />
end<br />
addEventHandler("onPlayerWasted",getRootElement(),playerDied)<br />
</syntaxhighlight><br />
<br />
Instead of showing what arguments are needed, the documentation page for Events shows what parameters are passed to the handler function, similiar to the way a [[#About_command_handlers|command handler]] does, just that it is different from event to event. Another important point is the ''source'' variable, that exists in handler functions. It doesn't have to be added to the parameter list of the function, but it still exists. It has a different value from event to event, for player events (as in the example above) it is the player element. As another example, you can take a look at the basic spawning player script in the first section to get an idea how ''source'' is used.<br />
<br />
==¿Y ahora qué?==<br />
Deberías ya estar familiarizado con los aspectos básicos de los scripts de MTA, así como con la documentación. La [[ES/Pagina Principal|Página Principal]] te provee de enlaces con mayor información, así como tutoriales y Referencias que permiten una vista más profunda a los temas que te interesan.<br />
<br />
Recomendamos que leas el tutorial de [[debugging|debug]] (encuentro de errores). Es necesaria una buena habilidad con el "debug" cuando haces scripts. ¡Suerte en MTA!<br />
<br />
==Traductores==<br />
<br />
*Benxamix2/The Kid<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]<br />
<br />
*AlexD<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/Introducci%C3%B3n_a_Lua&diff=39266ES/Introducción a Lua2014-04-07T19:41:33Z<p>Rockeromx: </p>
<hr />
<div>Los llamados "resources" son fundamentales en MTA. Básicamente consisten en una carpeta o archivo ZIP que contiene una colección archivos, además de un archivo '''meta.xml''' que define qué archivos pertenecen al resource, algunas configuraciones, y otras cosas. Como los programas en un sistema operativo, los resources pueden ser iniciados, detenidos, y reiniciados, y varios pueden funcionar al mismo tiempo.<br />
<br />
Todo lo que es la programación ocurre dentro de los resources. Lo que éste haga define si se trata de un modo de juego, un mapa, un script sencillo, u otra cosa. MTA, por defecto, trae ciertos resources que puedes usar opcionalmente en tus modos de juego.<br />
<br />
'''Lo primero que debes tener en cuenta al iniciarte en la programacion en LUA, es conseguir un editor que funcione para ello. Esto hace mucho más facil tu trabajo, permitiéndote corregir el sintaxis de las matemáticas, por ejemplo. El equipo de MTA recomienda [http://notepad-plus.sourceforge.net/uk/site.htm Notepad++] y [http://luaedit.sourceforge.net/ LuaEdit].'''<br />
<br />
'''También en cuanto a Tutoriales, puedes guiarte de estos: [http://forum.mtasa.com/viewtopic.php?f=145&t=70852 Scripteando Cosas Básicas] .'''<br />
<br />
==Creando un script funcional==<br />
Primero, aprenderemos a hacer un script que permita al jugador caminar libremente por la ciudad. Esto lo explicaremos paso a paso.<br />
<br />
===Estructura de un script y ubicación del mismo===<br />
Dirijámonos a la carpeta raíz de tu servidor para MTA (por defecto es ''C:\Archivos de Programa\Multi Theft Auto\server''). Después vamos a la siguiente ubicación:<br />
<br />
\server\mods\deathmatch\resources\<br />
<br />
Verás muchos archivos ZIP. Como mencioné antes, estos ZIP son los resources, que vienen por defecto con MTA. Para crear tu propio resource, añade una carpeta a esta ubicación, y dale un nombre. Recomiendo que, al ser tu primer script, sigas las instrucciones al pie de la letra, y a esta carpeta la llames "myserver".<br />
<br />
Ahora, entremos a la ubicación: <br />
<br />
\resources\myserver\<br />
<br />
===Identificando tu resource===<br />
Como mencioné antes, todo resource tiene un archivo que define el tipo, los archivos, y las configuraciones del resource, es el ''meta.xml''. Siempre debe estar dentro de cada resource, de otra forma éste no funciona. Así que creemos un archivo de texto, y llamémoslo "meta.xml" (sin las comillas). Luego abrámoslo con el Bloc de Notas, o con Microsoft Wordpad.<br />
<br />
Una vez dentro de este archivo, agregaremos el siguiente código:<br />
<br />
<br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="TuNombre" type="gamemode" name="Mi Servidor" description="Mi primer servidor de MTA DM" /><br />
<script src="script.lua" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
<br />
En la etiqueta ''<info />'' hay un campo "type". Éste indica el tipo de resource, que siendo "gamemode" en este caso, define que es un modo de juego. Nótese que cuando es otro tipo de resource, el valor "type" cambia. Pero eso lo veremos luego. Por ahora, un modo de juego es lo que necesitas para comenzar un servidor.<br />
<br />
La etiqueta ''<script />'' indica el script que tendrá nuestro modo de juego. A continuación, cómo crearlo.<br />
<br />
===Creando un script simple===<br />
Nótese que en la etiqueta ''<script />'', el archivo Lua no está en otro directorio, como por ejemplo ''myserver\script.lua''. Esto es porque el archivo LUA del que hablamos será creado en el mismo lugar en el que el archivo ''meta.xml''. Bueno, ahora creamos en "myserver", otro archivo de texto, y lo llamamos "script.lua". Abrámoslo y agreguemos estas líneas:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function manejadorDeInicio()<br />
local x = 1959.55<br />
local y = -1714.46<br />
local z = 10<br />
spawnPlayer(source, x, y, z)<br />
fadeCamera(source, true)<br />
setCameraTarget(source, source)<br />
outputChatBox("Bienvenido a Mi Servidor", source)<br />
end<br />
addEventHandler("onPlayerJoin", getRootElement(), manejadorDeInicio)<br />
</syntaxhighlight><br />
<br />
<br />
Este script inicia a tu jugador en las coordenadas "x", "y" y "z" (spawnPlayer) cuando entras al servidor. OJO: ¡La función ''fadeCamera'' siempre debe ser usada cuando inicias al jugador, de otra forma, la pantalla quedará en negro!. Lo mismo pasa con la función ''setCameraTarget''; si no la usas, el jugador no podrá verse a sí mismo, si no que mirará al cielo infinito.<br />
<br />
La variable '''source''' indica qué fue lo que ocasionó al evento. Como el evento ''onPlayerJoin'' significa ''alIniciarJugador'', lógico que lo que ocasione a este evento sea el jugador. Así, evitaremos iniciar a cualquier jugador.<br />
<br />
Ahora, dirigiéndonos a [[addEventHandler]], podrás ver que posee 3 cosas: ''onPlayerJoin'' (el nombre del evento), ''getRootElement()'' (que indica por qué o quién será iniciado el evento, ya que ''getRootElement()'' significa "todo"), y ''joinHandler'', que es el nombre de la función a ejecutar cuando el evento sea activado.<br />
<br />
Con esto, deberías poder comenzar a jugar. Pero faltan algunos detalles... ¡Sigamos!<br />
<br />
===Corriendo el script===<br />
Para que tu servidor local sea iniciado, debes ir a la carpeta raíz de tu servidor (recuerda cuando fuimos a los resources, 2 puestos encima). Una vez que lo inicies, aparecerá una consola con una serie de datos; recuerda el número del puerto, porque lo necesitarás para jugar. Cuando aparezca un mensaje que diga "Server started and is ready to accept connections!", sabrás que ya está listo.<br />
<br />
Pero antes de jugar, debes iniciar el modo de juego. Escribe "gamemode myserver" en la consola del servidor, y presiona Enter. El servidor emitirá algunos mensajes, e iniciará tu modo de juego, y si algún error surge, nos lo dirá. Bueno, ahora es tiempo de probar el modo de juego. Inicia MTA, y en el menú principal escoge "Quick Connect". Apareceren 3 campos. En el primero, escribe "localhost", en el segundo, el número del puerto de tu servidor, y en el tercero, nada, después de todo es la contraseña,y tú no pusiste ninguna. Si todo funciona bien, deberías poder comenzar a jugar en Los Santos.<br />
<br />
A continuación, te enseñaremos a crear un comando que permita crear un vehículo a tu lado. Si quieres, puedes saltarte este paso y seguir la programación avanzada con [[Map manager|Map Manager]], que continúa este tutorial. También puedes revisar [[Introduction to Scripting GUI| Introducción a la Programación del GUI]], en el que te enseñaremos a diseñar la Interfaz Gráfica de Usuario (GUI en inglés, por ''Graphical User Interface'').<br />
<br />
==Creando un Comando==<br />
Volvamos a ''script.lua''. Como dije hace un momento, crearemos un comando que permita crear un vehículo a tu lado. Primero, necesitaremos crear una función a la que llamar, y un manejador de comandos que cree el comando buscado.<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
-- Aquí creamos la función que llama el manejador, con los argumentos "elJugador", "nombreDelComando", "modeloDeVehiculo":<br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
-- Crear el vehículo y otros.<br />
end<br />
<br />
-- Aquí creamos el manejador de comandos:<br />
addCommandHandler("crearvehiculo", crearVehículoParaJugador)<br />
</syntaxhighlight><br />
<br />
<br />
'''Nota:''' ''Los nombres de las funciones tienen enlaces que te llevan a la '''documentación''' de ellas.''<br />
<br />
====Acerca de los manejadores de comandos====<br />
El primer argumento de ''addCommandHandler'' es el nombre del comando que el jugador podrá ingresar, y el segundo es la función que ejecutará en el momento de ingreso del comando (en este caso ''crearVehiculoParaJugador''). <br />
<br />
Si tienes alguna experiencia con la programación en C o algún lenguaje parecido, sabrás que las funciones se ejecutan de la forma:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
nombreDeFunción(argumento1, argumento2, argumento3, ..)<br />
</syntaxhighlight><br />
<syntaxhighlight lang="lua"><br />
nombreDeFunción(elJugador, nombreDelComando, argumento3, ..)<br />
</syntaxhighlight><br />
<br />
<br />
Fijémonos bien en esto. Vemos que ''argumento1'' es ''elJugador'' y ''argumento2'' es ''nombreDelComando''. ''elJugador'' representa al jugador que haya ingresado el comando, por lo que de la forma que lo llames, esta variable será el jugador. ''nombreDelComando'' es simplemente el nombre del comando (sin la barra "/"), no hay ningún misterio en ello, por lo que si el jugador escribió "/crearvehiculo" entonces esta variable sería "crearvehiculo". Por último, ''argumento3'' representa una variable más, que estudiaremos más adelante. Nunca olvides que los 2 primeros argumentos son obligatorios y están predefinidos (y debes tenerlos en el orden que se indican), pero puedes llamarlos como sea.<br />
<br />
''addCommandHandler'' permite llamar fácilmente a funciones como ''crearVehículoParaJugador'', de forma interna.<br />
<br />
Por ejemplo: Alguien entra el comando "/crearvehiculo 468". El servidor creará el vehículo 468, es decir, la moto Sánchez. Dentro del código, ''addCommandHandler'' llama a la función ''crearVehículoParaJugador'' como si hubiera sido escrito así:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
crearVehículoParaJugador(elJugador,"crearvehiculo","468") -- Recuerda que "elJugador" es el elemento jugador que entró el comando.<br />
</syntaxhighlight><br />
<br />
<br />
Como podemos ver, esto prevée ciertos argumentos que ya hemos mencionado. Pero el más importante es "468", que es el "argumento3" del que hablábamos más arriba. Éste se refiere al modelo del vehículo. Recuerda que siempre debes definir los primeros 2 parámetros ("elJugador" y "nombreDelComando"), porque de otra forma el comando no funcionará.<br />
<br />
'''Nota:''' ''Tienes que poner el manejador de comandos DEBAJO de la función a llamar por el comando. ¡El orden de las ejecuciones es fundamental!''<br />
<br />
====Escribiendo la función====<br />
Para llenar la función que hemos creado, primero hay que plantearse qué se debe hacer:<br />
* Conseguir la posición del jugador, así sabremos dónde crear el vehículo (queremos que aparezca al lado del jugador).<br />
* Calcular la posición donde crearemos el vehículo (no queremos que aparezca en el jugador).<br />
* Crear el vehículo.<br />
* Revisar si fue creado. Si no, mostrar alguna advertencia o algún mensaje de error.<br />
<br />
Para conseguir estos objetivos, debemos usar ciertas funciones, las cuales se pueden ver visitando la [[Scripting Functions| Lista de Funciones de Servidor]]. Primero, una función para conseguir la posición del jugador. Si visitaste la [[ES/Clases MTA| Lista de Clases de MTA]], sabrás que un jugador es un elemento, lo que nos lleva a buscar una '''Función de Elemento''', la cual es ''[[getElementPosition]]''. Haciendo click en ella, visitarás la documentación de ella, que contiene una descripción, el sintaxis (los argumentos necesarios en la función), y, generalmente, un ejemplo de cómo usarla.<br />
<br />
Para la función [[getElementPosition]], el sintaxis sería:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
float, float, float getElementPosition ( elemento elElemento )<br />
</syntaxhighlight><br />
<br />
<br />
Los 3 ''float'' que aparecen, son los valores que regresa la función. Estos valores, en español, se llaman '''Número de punto flotante''', y son números que pueden o no, poseer decimales (véase la [[ES/Tipos de Valores| Lista de tipos de valores]]). Como "x", "y" y "z" son coordenadas, por defecto siempre serán números de punto flotante. Ahora, fijándonos en los paréntesis, notaremos que sólo aparece "elElemento" como argumento de la función. Pues, aplicando la función a un jugador, tendríamos algo como esto:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
--[[Aquí conseguiremos la posición del jugador, y la almacenaremos en 3 valores: "x", "y" y "z". Nota: "local" significa que las variables indicadas sólo pueden ser usadas en la función actual.]]--<br />
local x,y,z = getElementPosition(elJugador)<br />
end<br />
</syntaxhighlight><br />
<br />
<br />
Ahora, para crear el vehículo al lado del jugador, debemos modificar alguna coordenada, en este caso, "x".<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5 --Agregamos 5 a la posición "X" (¡esto no altera la posición del jugador!)<br />
end<br />
</syntaxhighlight><br />
<br />
<br />
Nuevamente, necesitamos otra función para crear el vehículo. Buscándola en la [[Scripting Functions| Lista de Funciones de Servidor]], la encontraremos. Ya que hablamos de vehículo, vamos a la subcategoría tal, en la que encontramos [[createVehicle]]. En esta función, el valor que regresa la función consta de 1 solo argumento (esto es lo más común en las funciones), y es el vehículo creado, o un valor "boolean" ("lógico" en inglés) de tipo "false", si el vehículo no fue creado.<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5<br />
local vehículoCreado = createVehicle(tonumber(modeloDeVehículo),x,y,z)<br />
end<br />
</syntaxhighlight><br />
<br />
Nótese que usamos "tonumber(modeloDeVehículo)" en vez de usar directamente "modeloDeVehículo". Esto es porque cuando entramos un comando, todos los argumentos salen en forma de "string" ("arreglo" en inglés), que es un tipo de valor textual. Por ello, no puede ser usado como número, y la función "tonumber()" nos permite dejarlo como un número.<br />
<br />
Bueno, tenemos todo lo necesario para que nuestro script funcione, pero eso no indica que esté listo. Ya tenemos la función para conseguir la posición del jugador, modificarla, y crear el vehículo. Pero nos falta el mensaje. La función para esto se llama ''outputChatBox''. Como dije antes, si el vehículo no fue creado, entonces regresa un valor "false". Así que creamos nuestra primera condición, en la que si el valor regresado es falso, entonces aparece un mensaje.<br />
<br />
Veamos cómo luce el script final:<br />
<br />
<br />
<syntaxhighlight lang="lua"><br />
function crearVehículoParaJugador(elJugador, nombreDelComando, modeloDeVehículo)<br />
local x,y,z = getElementPosition(elJugador)<br />
x = x + 5<br />
local vehículoCreado = createVehicle(tonumber(modeloDeVehículo),x,y,z)<br />
if (vehículoCreado == false) then --"if" es la condición, siempre debe ir acompañado de la condición y un "then".<br />
outputChatBox("Error al crear vehículo.",elJugador) --Crea un mensaje de error simple en el chat.<br />
end<br />
end<br />
addCommandHandler("crearvehiculo", crearVehículoParaJugador) --Y aquí creamos el manejador de comandos.<br />
</syntaxhighlight><br />
<br />
<br />
Nada mal, ¿no? Ya te hemos introducido en la creación de 2 scripts sencillos. Si quieres más programación avanzada, entonces visita el [[Map Manager| Mánager de Mapas]].<br />
<br />
<br />
==Lo que necesitas saber==<br />
Ya has leído un poco sobre resources, manejadores de comandos y funciones de búsqueda en la documentación (en el primer párrafo), pero aún queda mucho por aprender. En esta sección te daremos una vista rápida sobre esto, y si se puede, enlazar a otras páginas útiles.<br />
<br />
===Scripts de cliente y servidor===<br />
Quizás ya has notado los términos Server (o Servidor) y Client (o Cliente) en algún lado, mayormente en conjunción con las funciones. MTA no sólo soporta scripts que funcionan en el servidor y prevén comandos (como el que escribimos arriba) u otras características; también scripts que corren en el cliente (MTA en sí, el software que usas para conectarte a los servidores). Esto se debe a que algunas funciones tienen que estar del lado cliente (como el GUI; Graphical User Interface, Interfaz de Usuario Gráfica), si bien funcionan mejor o porque no se pueden hacer en el servidor.<br />
<br />
La mayoría de los scripts que harás (modos de juego y/o mapas) probablemente serán de tipo servidor, como el que escribimos en la primera sección. Si tratas de hacer funcionar algo que no se puede hacer en el servidor, probablemente tendrá que ser de cliente. para un script de cliente, por ejemplo, podrías crear un archivo de Lua ordinario (como ''client.lua'') y especificarlo en el archivo meta.xml, así:<br />
<syntaxhighlight lang="xml"><br />
<script src="client.lua" type="client" /><br />
</syntaxhighlight><br />
El atributo ''type'' por defecto es 'server' (servidor), por lo que no es necesario escribirlo cuando se trata de scripts de servidor. Si quieres, puedes leer más sobre [[ES/Scripts de Cliente|scripts de cliente]].<br />
<br />
===Resources más complejos===<br />
<br />
<br />
La seccion previa es de como poner scripts de modo clientside, pero hay cosas mas posibles. Como se menciona al principio de este texto, los resources pueden hacer casi cualquier cosa. Su proposito es definido de porque hacen. Veamos unos resources teoricamente, por ver los archivos que tienen, el''meta.xml'' y que podrian hacer:<br />
<br />
====Primer Ejemplo - Un script util====<br />
<syntaxhighlight lang="xml"><br />
/admin_commands<br />
/meta.xml<br />
/commands.lua<br />
/client.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="AlexD" description="Comandos de Admin" /><br />
<script src="commands.lua" /><br />
<script src="client.lua" type="client" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''commands.lua'' tiene comandos de administrador, como banear a un jugador, mutearlo o cualquier cosa que pueda usar un administrador<br />
* El ''client.lua'' tiene el GUI para poder ejecutar los comandos sencillamente.<br />
<br />
<br />
Este ejemplo estaria corriendo todo el tiempo (talvez auto-empezado cuando el servidor empieza) Y es util durante toda la experiencia en el juego y tambien no interfiere con el Juego en general, al menos que un administrador decide de ejecutar algun acto, por supuesto.<br />
<br />
====Segundo Ejemplo - Un modo de Juego====<br />
<syntaxhighlight lang="xml"><br />
/counterstrike<br />
/meta.xml<br />
/counterstrike.lua<br />
/buymenu.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="AlexD" description="Recreacion de CounterStrike" type="gamemode" /><br />
<script src="counterstrike.lua" /><br />
<script src="buymenu.lua" type="client" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''counterstrike.lua'' contiene lo similar a las siguientes caracteristicas:<br />
** Dejar que los jugadores elijan su equipo y aparezcan en el<br />
** Darles armas, objectivos e instrucciones (talvez leer de un Mapa, vease mas adelante)<br />
** Definir las reglas del juego, ejemplo: cuando la partida acabe, que pasa cuando un jugador muere<br />
** .. y talvez algo mas<br />
* El ''buymenu.lua'' es un script Clientside y crea un menu para comprar armas<br />
<br />
Este ejemplo puede ser llamado modo de juego, porque no solo interviene con el juego en general, pero actualmente define las reglas de el. El atributo ''type'' indica que este ejemplo sirve con el [[Map manager]], si otro resource que fue escrito por el Equipo QA para gestionar modos de juego y carga de mapas. Es altamente recomendado que tu base tus modos de juego en las tecnicas que proporciona.<br />
<br />
Esto tambien significa que el modo de juego no cargara sin el mapa. Los modos de juego tienen que ser tan genericos posibles. Un ejemplo de un mapa es mostrado en el siguiente ejemplo.<br />
<br />
====Tercer ejemplo - Un mapa====<br />
<syntaxhighlight lang="xml"><br />
/cs-airport<br />
/meta.xml<br />
/airport.map<br />
/airport.lua<br />
</syntaxhighlight><br />
<syntaxhighlight lang="xml"><br />
<meta><br />
<info author="Someguy" description="Counterstrike airport map" type="map" gamemodes="counterstrike" /><br />
<map src="airport.map" /><br />
<script src="airport.lua" /><br />
</meta><br />
</syntaxhighlight><br />
<br />
* El ''airport.map'' es un archivo XML que proporciona información sobre el mapa para el modo de juego, estos pueden incluir:<br />
** Donde deben spawnear los jugadores, con que armas, que equipos hay<br />
** Cuales son los objetivos<br />
** Clima, tiempo, tiempo limite<br />
** Proporcionar vehículos<br />
* El ''airport.lua'' puede contener funciones del mapa específicas, que pueden incluir:<br />
** Apertura de alguna puerta / hacer que algo explote cuando suceda algo específico<br />
** Crear o mover algunos objetos personalizados, o manipular los objetos que se crean a través del archivo de mapa.<br />
** .. cualquier cosa mapa-específicas que se pueda imaginar<br />
Como puede ver, el atributo ''type'' cambió a 'map', diciéndole al [[Map manager]] que este recurso es un mapa, mientras que el atributo ''gamemodes'' indica para que tipos de juego o gamemode este mapa es válido, en este caso el modo de juego en el ejemplo anterior. Lo que puede venir como una sorpresa es que también hay script en el recurso de mapa. Por supuesto, esto no es necesario en un mapa, pero abre un amplio abanico de posibilidades para los creadores de mapas para crear su propio mundo dentro de las reglas del modo de juego que para el que crean.<br />
<br />
The ''airport.map'' file might look similiar to this:<br />
<syntaxhighlight lang="xml"><br />
<map mode="deathmatch" version="1.0"><br />
<terrorists><br />
<spawnpoint posX="2332.23" posY="-12232.33" posZ="4.42223" skins="23-40" /><br />
</terrorists><br />
<counterterrorists><br />
<spawnpoint posX="2334.23443" posY="-12300.233" posZ="10.2344" skins="40-50" /><br />
</counterterrorists><br />
<br />
<bomb posX="23342.23" posY="" posZ="" /><br />
<br />
<vehicle posX="" posY="" posZ="" model="602" /> <br />
<vehicle posX="" posY="" posZ="" model="603" /> <br />
</map><br />
</syntaxhighlight><br />
<br />
Cuando se inicia un modo de juego con un mapa, los resources del mapa se inicia automáticamente por el mapmanager y la información que contiene puede ser leída por el recursos del modo de juego. Cuando el mapa cambia, el recurso de mapa actual se detiene y se inicia el siguiente recurso de mapa. Para una explicación más detallada y ejemplos de cómo se utilizan los recursos del mapa en el main script, por favor visite la pagina [[Writing Gamemodes]].<br />
<br />
===Eventos===<br />
Los eventos son la manera en la cual MTA le informa a los scripts cuando las cosas estan ocurriendo. Por ejemplo cuando un jugador muere, el evento [[onPlayerWasted]] es llamado. De manera de realizar cualquier accion cuando un jugador muere, tienes que prepararlo tu mismo, de manera similar a como cuando añades un command handler en[[#Writing_the_script|el primer capitulo]].<br />
<br />
Este ejemplo mostrara un mensaje con el nombre del jugador que murió.<br />
<syntaxhighlight lang="lua"><br />
function playerDied(totalAmmo, killer, killerWeapon, bodypart)<br />
outputChatBox(getPlayerName(source).." died!")<br />
end<br />
addEventHandler("onPlayerWasted",getRootElement(),playerDied)<br />
</syntaxhighlight><br />
<br />
Instead of showing what arguments are needed, the documentation page for Events shows what parameters are passed to the handler function, similiar to the way a [[#About_command_handlers|command handler]] does, just that it is different from event to event. Another important point is the ''source'' variable, that exists in handler functions. It doesn't have to be added to the parameter list of the function, but it still exists. It has a different value from event to event, for player events (as in the example above) it is the player element. As another example, you can take a look at the basic spawning player script in the first section to get an idea how ''source'' is used.<br />
<br />
==¿Y ahora qué?==<br />
Deberías ya estar familiarizado con los aspectos básicos de los scripts de MTA, así como con la documentación. La [[ES/Pagina Principal|Página Principal]] te provee de enlaces con mayor información, así como tutoriales y Referencias que permiten una vista más profunda a los temas que te interesan.<br />
<br />
Recomendamos que leas el tutorial de [[debugging|debug]] (encuentro de errores). Es necesaria una buena habilidad con el "debug" cuando haces scripts. ¡Suerte en MTA!<br />
<br />
==Traductores==<br />
<br />
*Benxamix2/The Kid<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]<br />
<br />
*AlexD<br />
[[en:Scripting Introduction]]<br />
[[it:Introduzione allo scripting]]<br />
[[nl:Scripting_introductie]]<br />
[[pt-br:Introdução ao Scripting]]<br />
[[ru:Scripting Introduction]]</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/P%C3%A1gina_Principal&diff=39265ES/Página Principal2014-04-07T19:23:08Z<p>Rockeromx: </p>
<hr />
<div>__NOTOC__<br />
__NOEDITSECTION__<br />
<br />
{| width="100%" cellspacing="0" cellpadding="0"<br />
| colspan="2" |<br />
<div style="border: 1px solid #D8D8D8; padding: 10px; height: 140px;"><br />
[[File:Mtalogo.png|left|100px]]'''<br />
Bienvenid@ a la Wiki de Multi Theft Auto: San Andreas en español.''' Aquí puedes encontrar mucha información sobre el uso de Multi Theft Auto. <br />
<br />
Hay muchas [[ES/Cómo puedes ayudar|cosas que puedes hacer para ayudarnos]] a mejorar MTA - crea un mapa, un modo de juego, escribe códigos de ejemplo, tutoriales, traduce páginas del inglés al español, o simplemente juega y reporta los bugs que encuentres.<br />
<br />
</div><br />
|}<br />
{| width="100%" cellspacing="0" cellpadding="0"<br />
| colspan="2" |<br />
|-<br />
|width="50%" style="vertical-align:top;" |<div style="border: 1px solid #D8D8D8; padding:10px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Input-gaming.png]]</div><br />
=== El Juego ===<br />
<div style="background: #FFEEAA;"><br />
[[File:Go-down.png|link=http://mtasa.com/]] ''' [http://mtasa.com/ Descargar Multi Theft Auto: San Andreas {{Current Version|full}}]'''</div><br />
* [[ES/Manual del Cliente|Manual del Cliente]] [[Image:flag_es.png|En Español|20px]]<br />
* [[ES/Cambios en la versión 1.3|Cambios de la versión 1.3]] [[Image:flag_es.png|En Español|20px]] (Traducción 80%)<br />
* [[ES/Problemas_Conocidos_-_FAQ|Problemas Conocidos]] [[Image:flag_es.png|En Español|20px]] (Traducción: 10%)<br />
* [[Upgrading_from_MTA:Race|Cambiando MTA:Race a MTA:SA 1.0.x]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Manual del Servidor|Manual del Servidor]] [[Image:flag_es.png|En Español|20px]] (Traducción: 90%)<br />
* [[Map_manager|El Resource "Map Manager"]] [[Image:flag_us.png|En Inglés|20px]]<br />
<br />
====Editor de Mapas====<br />
*[[ES/Resource:Editor|Manual del Editor]] [[Image:flag_es.png|En Español|20px]]<br />
*[[Resource:Editor/EDF|EDF: Formato de Definiciones del Editor]] [[Image:flag_us.png|En Inglés|20px]]<br />
*[[Resource:Editor/Plugins|Plugins para el Editor]] [[Image:flag_us.png|En Inglés|20px]]<br />
*[[ES/Resource:Editor#Preguntas_Frecuentes|Preguntas Frecuentes]] [[Image:flag_es.png|En Español|20px]]<br />
<br />
====Bases de Datos====<br />
* [[:Category:Resource|Catálogo de Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Scripts de Cliente|Scripts de Cliente]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Modules| Módulos]] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Applications-development.png]]</div><br />
====Desarrollando Multi Theft Auto====<br />
[[File:Go-down.png|link=http://nightly.mtasa.com/]] [http://nightly.mtasa.com/ Nightly builds]<br />
* [[Compiling_MTASA|Compilando MTA:SA en Windows]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Building_MTASA_Server_on_Mac_OS_X|Compilando MTA:SA en Mac OS X]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Building_MTASA_Server_on_GNU_Linux|Compilando MTA:SA en GNU/Linux]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Coding guidelines|Guías de Codificación]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://code.google.com/p/mtasa-blue Google Code SVN] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://bugs.mtasa.com/roadmap_page.php Seguimiento de Versiones] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://bugs.mtasa.com/ Central de Reportes de Bugs] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Applications-office.png]]</div><br />
===Wiki - Cómo puedes ayudar===<br />
* Termina la documentación para [[:Category:Incomplete|funciones incompletas]].<br />
* [[:Category:Needs_Example|Crea ejemplos para eventos y funciones]].<br />
* Revisa y verifica [[:Category:Needs Checking|páginas que necesitan revisión]].<br />
* Escribe tutoriales para ayudar a la gente.<br />
* Traduce las páginas del wiki.<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Internet-group-chat.png]]</div><br />
=== Comunidad ===<br />
* [http://forum.multitheftauto.com/ Foro] [[Image:flag_us.png|En Inglés|20px]]<br />
** [http://forum.multitheftauto.com/viewforum.php?f=122&sid=72be1c29dd00c4442f8112cc09818283 Sección en español] [[Image:flag_es.png|En Español|20px]]<br />
* [irc://irc.multitheftauto.com/mta Canal IRC] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://community.mtasa.com/ Comunidad MTA] [[Image:flag_us.png|En Inglés|20px]]<br />
* [http://www.youtube.com/user/MTAQA Canal de YouTube oficial] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<div style="padding:4px 8px 8px 8px; margin:10px; text-align:center"><br />
[[File:Osi symbol.png|75px|link=http://opensource.org/]]<br />
'''Multi Theft Auto''' es un '''Proyecto de Código Abierto'''. <br />
¡Todos podemos contribuir a mejorar Multi Theft Auto!<br />
</div><br />
<br />
| width="50%" style="vertical-align:top;" |<br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:Accessories-text-editor.png]]</div><br />
=== Scripting ===<br />
* [[ES/Resources|Introducción a los Resources]] [[Image:flag_es.png|En Español|20px]]<br />
** [[Resource Web Access|Acceso Web con Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[Meta.xml|Sobre el archivo "meta.xml"]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[:Category:Resource|Catálogo de Resources]] [[Image:flag_us.png|En Inglés|20px]]<br />
** [[ES/ACL|Lista de Control del Acceso (ACL)]] [[Image:flag_es.png|En Español|20px]] (Traducción: 90%)<br />
* [[ES/Introducción a Lua|Introducción a Lua]] [[Image:flag_es.png|En Español|20px]] (Traducción: 85%)<br />
** [[ES/Introducción a la Programación de GUI|Introducción al GUI]] [[Image:flag_es.png|En Español|20px]] (Traducción: 40%)<br />
** [[Debugging|Tutorial de Depuración]] [[Image:flag_us.png|En Inglés|20px]] - Encontrar errores en scripts.<br />
** [http://forum.mtasa.com/viewtopic.php?f=145&t=70852 Tutoriales]<br />
* [[ES/Useful_Functions| Funciones útiles]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Writing_Gamemodes|Escribiendo Modos de Juego]] [[Image:flag_us.png|En Inglés|20px]]<br />
====Ayuda General de Lua====<br />
*[http://www.lua.org/manual/5.1/es/manual.html Manual de Referencia de Lua 5.1] [[Image:flag_es.png|En Español|20px]]<br />
*[http://www.lua.org/pil/index.html Manual Programando en Lua] [[Image:flag_us.png|En Inglés|20px]]<br />
*[http://lua-users.org/wiki/TutorialDirectory Lua Wiki] [[Image:flag_us.png|En Inglés|20px]]<br />
*[http://nixstaller.berlios.de/manual/0.2/nixstaller_9.html Guía general de Lua de Nixstaller] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;"><br />
====Referencia====<br />
* [[Client Scripting Functions|Funciones de Cliente]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[Client Scripting Events|Eventos de Cliente]] [[Image:flag_us.png|En Inglés|20px]]<br />
* [[ES/Funciones de Servidor|Funciones de Servidor]] [[Image:flag_es.png|En Español|20px]]<br />
* [[Server Scripting Events|Eventos de Servidor]] [[Image:flag_us.png|En Inglés|20px]]<br />
<!-- Incomplete * [[Module functions|Lista de funciones de módulos externos de servidor]] [[Image:flag_us.png|En Inglés]] --><br />
* [[ES/Clases MTA| Clases de MTA]] [[Image:flag_es.png|En Español|20px]]<br />
**[[Element tree| Árbol de Elementos]] [[Image:flag_us.png|En Inglés|20px]]<br />
</div><br />
<br />
<div style="border: 1px solid #D8D8D8; padding:4px 8px 8px 8px; margin:10px;"><br />
<div style="float:right; width: 32px;">[[File:System-file-manager.png]]</div><br />
====[[Id|Lista de ID's]]====<br />
*[[Animations|Animaciones]]<br />
*[[ES/Skins de Personajes|Skins]]<br />
*[[CJ_Clothes|Ropa]]<br />
*[[Garage|Garajes]]<br />
*[[Interior IDs|Interiores]]<br />
*[[Projectiles|Proyectiles]]<br />
*[[Radar Blips|Iconos de Radar]]<br />
*[[Sounds|Sonidos]]<br />
*[[Vehicle IDs|ID's de Vehículos]]<br />
*[[Vehicle Colors|Colores de Vehículos]]<br />
*[[Vehicle Upgrades|Mejoras de Vehículos]]<br />
*[[Weapons|Armas]]<br />
*[[ES/Climas|Climas]]<br />
</div><br />
<br />
<div style="border: 1px dotted #AAAAAA;padding:4px 8px 8px 8px;margin:10px;"><br />
<br />
====Equipo de Traducción====<br />
* [mailto:zorrigas@gtagamingchile.com zorrigas@gtagamingchile.com]<br><br />
* [mailto:Brijido_XD@hotmail.com Brijido_XD@hotmail.com]<br><br />
* Benxamix2/The Kid<br />
* [mailto:matiuno@gmail.com matiuno@gmail.com]<br><br />
* [mailto:cesarcastillo4@gmail.com cesarcastillo4@gmail.com]<br><br />
* [mailto:alex_firexx@hotmail.com alex_firexx@hotmail.com]<br><br />
* [mailto:carlos_olivo@msn.com carlos_olivo@msn.com]<br><br />
* AlexD<br />
* Alexs_Steel[mailto:alexTO123@hotmail.com]<br><br />
* Rockero [mailto:ac_dcrocker@hotmail.com ac_dcrocker@hotmail.com]<br><br />
<br><br />
'''¡NO ELIMINES CONTENIDO SIN AUTORIZACIÓN!'''<br> Tampoco uses modismos, usa el Castellano (Internacional), y trata de que al traducir todo quede tan claro como puedas, y la ortografía sea la mejor posible.<br />
</div><br />
|-<br />
| colspan="2" |<br />
|}<br />
{{Languages list|es}}</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/ACL&diff=39264ES/ACL2014-04-07T19:18:02Z<p>Rockeromx: </p>
<hr />
<div>''Multi Theft Auto'' incluye una completa y útil Lista de Control de Acceso (''ACL'') la que te permite asegurar y limitar el acceso a distintas funciones, recursos del servidor de múltiples maneras.<br />
<br />
El concepto en ''Multi Theft Auto'' de ''ACL'' es el de dar a un objeto especifico una serie de derechos. En el caso de ''Multi Theft Auto'', los objetos son una de dos cosas - recursos o usuarios. Hay numerosos derechos disponibles en ''Multi Theft Auto'' - estos están enfocados principalmente en las funciones del lado del servidor.<br />
<br />
Lo que esto significa, esencialmente es que el ''ACL'' te permite escoger con exactitud a que funciones (un recurso o un usuario) pueden acceder. Esto, por ejemplo, puede prevenir que los jugadores de tu servidor sean capaces de ''banearse'' mutuamente o prevenir que errores en recursos aun no probados causen daños y problemas en tu servidor.<br />
<br />
Por supuesto ''un gran poder conlleva una gran responsabilidad'' y es muy sencillo causar graves problemas con los recursos, por ejemplo, deshabilitar la función [[spawnPlayer]] para cada recurso causaría que los jugadores ya no puedan ''spawnear''. Por supuesto, existen situaciones en las que se busca hacer esto. (Si deseas hacer que un solo recurso se encargue de ''spawnear'' a los jugadores, por ejemplo.)<br />
<br />
==Entiendido el funcionamiento==<br />
Existen dos grandes componentes en el ''ACL'': grupos y listas ''ACL''. Estos aparecen como '''<group name="">''' y '''<acl name="" />'''.<br />
Cuyo propósito es:<br \><br />
'''1.''' Garantizar a los usuarios el permiso de controlar el servidor y utilizar comandos. Ejemplos:''<br \><br />
*Permitir solo a los administradores utilizar la función [[giveWeapon]] en ''freeroam''.<br />
*Permitir a todos los jugadores iniciar un recurso.<br />
'''2.''' Garantizar a los recursos el permiso de utilizar una función o funciones de otros recursos. Ejemplos:<br \><br />
*Permitir a un recurso utilizar la funcion [[restartResource]].<br />
*Permitir a un recurso llamar funciones exportadas desde otro recurso.<br />
<br />
===Grupos por defecto===<br />
''Multi Theft Auto'' trae por defecto algunos grupos con ciertos permisos. Estos son:<br />
*'''Everyone''' - Toda cuenta registrada, por defecto, es añadida a este grupo.<br />
*'''Moderator'''<br />
*'''SuperModerator'''<br />
*'''Admin'''<br />
*'''Console''' - Este grupo controla los permisos del usuario de la Consola '''<object name="user.Console" />'''<br />
*'''RPC''' - Procedimientos Remotos (En ingles, ''Remote Procedure Call''). Garantiza el acceso a [[callRemote]], para mas información revisa la información de la función.<br />
<br \><br />
<br />
A modo de ejemplo, utilizare el grupo ''Everyone''. Por defecto, este luce así:<br />
<syntaxhighlight lang="lua"> <group name="Everyone"><br />
<acl name="Default" /><br />
<object name="user.*" /><br />
<object name="resource.*" /><br />
</group><br />
</syntaxhighlight><br />
<br \><br />
<br />
Lo primero que deberías notar es el nombre ''ACL'' (''acl name'') asignado dentro del grupo. Esto define que permisos tiene el grupo en cuestión, usuarios y recursos en este grupo pueden acceder a los permisos especificados dentro de la lista ''ACL'' llamada "Default".<br />
''*Nota: Como notaras, este grupo en especial incluye a todos los usuarios y recursos gracias al uso del '''*'''.''<br />
<br />
Ahora, desplácese al final de el ACL y verá la lista '''<acl name="Default" />'''. Tenga en cuenta que he recortado drásticamente esta lista debido a su longitud.<br />
<br />
<syntaxhighlight lang="lua"> <acl name="Default"><br />
<right name="command.start" access="false" /><br />
<right name="command.stop" access="false" /><br />
<right name="command.stopall" access="false" /><br />
...etc etc...<br />
<right name="function.executeCommandHandler" access="false" /><br />
<right name="function.setPlayerMuted" access="false" /><br />
<right name="function.restartResource" access="false" /><br />
...etc etc...<br />
<right name="general.adminpanel" access="false" /><br />
<right name="general.tab_players" access="false" /><br />
<right name="general.tab_resources" access="false" /><br />
...etc etc...<br />
<right name="command.freeze" access="false" /><br />
<right name="command.shout" access="false" /><br />
<right name="command.spectate" access="false" /><br />
...etc etc...<br />
</acl><br />
</syntaxhighlight><br />
<br \><br />
*'''Entradas de funcion''' son funciones de scripting de MTA. Por ejemplo, si un recurso necesita utilizar restartResource y fue se encuentra en el grupo 'Everyone' (con la lista 'Default'), se le negaría el acceso a restartResource y no funcionar correctamente.<br />
*'''Comandos''' se crean cuando un recurso utiliza [[addCommandHandler]]. Un ejemplo sería escribiendo '''/ createvehicle [vehículo]''' en la ventana de chat para el recurso Freeroam. Esto si los usuarios del grupo utilizando este ACL pueden utilizar el comando. ''Nota: los comandos no tienen ningún efecto sobre los recursos dentro del grupo. Los comandos sólo están relacionados con los usuarios''.<br />
**''General es un grupo con derechos modificados creado por el recurso de administración pero trabaja en los mismos principios. El script funciona con ellos mediante el uso de [[hasObjectPermissionTo]]''<br />
<br\><br />
<br />
Te darás cuenta que algunos grupos, como ''admin'' tienen múltiples nodos de '''<acl name="" />''' . Un ejemplo es el grupo de ''administracion o Admin'':<br />
<syntaxhighlight lang="lua"><br />
<group name="Admin"><br />
<acl name="Moderator" /><br />
<acl name="SuperModerator" /><br />
<acl name="Admin" /><br />
<acl name="RPC" /><br />
<object name="resource.admin" /><br />
<object name="resource.webadmin" /><br />
<object name="user.Ransom" /><br />
</group><br />
</syntaxhighlight><br />
<br\><br />
<br />
Esto le da a todos los permisos definidos en cada nodo '''<acl name="" />''' por orden de lista. Así, por ejemplo, el grupo de administración asegura que todos los permisos se otorgan a los administradores mediante el uso de toda la lista. Si hay algún conflicto, la entrada más baja gana. Por ejemplo, pretenda que estos 2 ACL estaban en un grupo en el siguiente orden:<br />
<br\><br />
'''1.''' '''<acl name="Default">''' sets <right name="general.ModifyOtherObjects" access="false" /> <br\><br />
'''2.''' '''<acl name="Admin">''' sets <right name="general.ModifyOtherObjects" access="true" /> <br\><br />
'''3.''' Para todos los usuarios y recursos en el grupo administrador "''Admin''": <right name="general.ModifyOtherObjects" access="true" /><br\><br />
<br\><br />
<br />
=== Grupos de recursos y ACLs ===<br />
Usted se dará cuenta que hay algunos otros grupos que vienen con MTA. Estos fueron definidos por los recursos que vienen con MTA. Si un recurso quiere designar algunos derechos de ACL específicos no previstos por los grupos de MTA por defecto, puede crear su propio nombre y grupo en la ACL para usarlo. Voy a mostrar la entrada de AMX como ejemplo. AMX está diseñado para emular scripts de SA-MP y necesita un cierto conjunto de permisos que no se ajusta bien a los grupos predeterminados. Este se muestra a continuación:<br />
<br />
<syntaxhighlight lang="lua"><br />
<group name="AMX"><br />
<acl name="AMX" /><br />
<object name="resource.amx" /><br />
</group><br />
<br />
<acl name="AMX"><br />
<right name="general.ModifyOtherObjects" access="true" /><br />
<right name="function.startResource" access="true" /><br />
<right name="function.stopResource" access="true" /><br />
<right name="general.adminpanel" access="false" /><br />
...etc etc...<br />
<right name="command.kick" access="false" /><br />
<right name="command.freeze" access="false" /><br />
<right name="command.mute" access="false" /><br />
...etc etc...<br />
</acl><br />
</syntaxhighlight><br />
<br />
==Modificación de la ACL==<br />
Hay tres formas de modificar la ACL - La forma de hacerlo depende de quién eres. <br />
<br />
===Interfaz HTTP===<br />
Usted puede utilizar la interfaz http [[Resource/webadmin|webadmin]] para modificar la ACL en su navegador web. Esta es por lejos la forma más fácil de hacerlo. Sólo asegúrese de que el recurso ''webadmin'' se encuentra iniciado en el servidor y visite ''<nowiki>http://ServerIP:HttpPort/</nowiki>''. Usted puede utilizar las dos secciones - ACL y Grupos o "''Group''". ACL le permite crear sus listas de control de acceso - listas de derechos. Grupos o "''Group''" les permiten agrupar colecciones de usuarios y asignar las ACLs para ellos. Por ejemplo, la seccion ACLs le permite especificar que la ACL de administración o "''Admin''" tiene acceso a el comando ''start'' en la consola. Usted puede ir a la sección de Grupos y crear un ''Group'' de administración que tiene acceso a la administración de su ''acl''. Entonces usted podrá añadir usuarios a su ''Group'' de Administración.<br />
<br />
===Archivo XML===<br />
Usted puede modificar el archivo ACL.xml manualmente. Este tiene una sintaxis bastante sencilla, pero puede ser un poco confuso a veces. Si lo hace mientras el servidor está en ejecución, no se olvide de llamar a la función [[aclReload]] ("start runcode", "run aclReload()") así el nuevo ACL será cargado, o de lo contrario detener el servidor antes de realizar las modificaciones. Esto también evita que los cambios sean sobrescritos accidentalmente por el servidor.<br />
<br />
===Funciones de Scripting===<br />
Usted puede utilizar un gran número de funciones de script de ACL para modificar la ACL en la marcha. Por supuesto, usted puede (y de verdad Debe!) limitar el acceso a las funciones de ACL con la ACL. Tenga en cuenta que el '''admin resource''' que viene con MTA se puede utilizar para administrar la ACL en la ficha recursos. Usted debe ser configurado como administrador para utilizar el panel de administración. [http://wiki.multitheftauto.com/wiki/Admin Haga clic aquí para obtener instrucciones de configuración de administración].<br />
<br />
==Vea también==<br />
{{ACL functions}}<br />
[[Category:Scripting Concepts]]<br />
[[ru:Access Control List]]</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=ES/Cambios_en_la_versi%C3%B3n_1.3&diff=39248ES/Cambios en la versión 1.32014-04-04T23:17:53Z<p>Rockeromx: </p>
<hr />
<div>{{Note|For the upcoming version see [[Changes in 1.3.1]].}}<br />
==Principales Cambios==<br />
* Añadidas Sirenas para vehiculos<br />
* Arreglada descarga muy lenta de archivos map<br />
* Arreglados timeouts en cambios de mapa<br />
* Arreglados varios problemas, crashes y congelamientos<br />
* Actualizado la mayor cantidad de jugadores a 4096<br />
* Añadidos BASS efectos<br />
* Añadido Analog Control States<br />
* Añadido bullet sync<br />
* Arreglados muchos problemas al remplazar custom models<br />
* Soporte para Windows 8 (ambos 32-bits y 64-bits)<br />
* Abilidad de crear peds sin armas a travez de creacion de armas<br />
* Mejorada la estabilidad del map editor y añadidas nuevas caracteristicas<br />
* Instaladores para regular builds y nightlies estan ahora digitalmente registrados.<br />
<br />
==Cliente==<br />
=== Funciones ===<br />
* Añadido [[setObjectBreakable]]<br />
* Añadido [[isObjectBreakable]]<br />
* Añadido [[dxSetBlendMode]]<br />
* Añadido [[dxGetBlendMode]]<br />
* Añadido [[dxDrawMaterialLine3D]]<br />
* Añadido [[dxDrawMaterialSectionLine3D]]<br />
* Añadido [[getLatentEventHandles]]<br />
* Añadido [[getLatentEventStatus]]<br />
* Añadido [[cancelLatentEvent]]<br />
* Añadido [[triggerLatentServerEvent]]<br />
* Añadido [[getVehicleSirenParams]]<br />
* Añadido [[getVehicleSirens]]<br />
* Añadido [[setVehicleSirens]]<br />
* Añadido [[getSoundProperties]]<br />
* Añadido [[setSoundProperties]]<br />
* Añadido [[getSoundFFTData]]<br />
* Añadido [[setSoundPanningEnabled]]<br />
* Añadido [[isSoundPanningEnabled]]<br />
* Añadido [[setWorldSoundEnabled]]<br />
* Añadido [[isWorldSoundEnabled]] <br />
* Añadido [[resetWorldSounds]]<br />
* Añadido [[getSoundBPM]]<br />
* Añadido [[getSoundLevelData]]<br />
* Añadido [[getSoundWaveData]]<br />
* Añadido [[setPedAnalogControlState]]<br />
* Añadido [[getPedAnalogControlState]]<br />
* Añadido [[setAnalogControlState]]<br />
* Añadido [[getAnalogControlState]]<br />
* Añadido [[setPedTargetingMarkerEnabled]]<br />
* Añadido [[isPedTargetingMarkerEnabled]]<br />
* Añadido [[setElementMatrix]]<br />
* Añadido [[warpPedIntoVehicle]]<br />
* Añadido [[removePedFromVehicle]]<br />
* Añadido [[setProjectileCounter]]<br />
* Añadido [[createWeapon]]<br />
* Añadido [[fireWeapon]]<br />
* Añadido [[setWeaponProperty]]<br />
* Añadido [[setWeaponState]]<br />
* Añadido [[setWeaponTarget]]<br />
* Añadido [[getWeaponOwner]]<br />
* Añadido [[setWeaponOwner]]<br />
* Añadido [[setWeaponFlags]]<br />
* Añadido [[getWeaponFlags]]<br />
* Añadido [[setWeaponFiringRate]]<br />
* Añadido [[getWeaponFiringRate]]<br />
* Añadido [[resetWeaponFiringRate]]<br />
* Añadido [[getWeaponClipAmmo]]<br />
* Añadido [[setWeaponClipAmmo]]<br />
* Añadido [[getWeaponAmmo]]<br />
* Añadido [[setWeaponAmmo]]<br />
* Añadido [[getProjectileCounter]]<br />
* Añadido [[setWaterDrawnLast]]<br />
* Añadido [[isWaterDrawnLast]]<br />
* Añadido [[guiLabelGetColor]]<br />
<br />
===Eventos===<br />
* Añadido [[onClientPedHeliKilled]]<br />
* Añadido [[onClientPlayerHeliKilled]]<br />
* Añadido [[onClientPlayerHitByWaterCannon]]<br />
* Añadido [[onClientPedHitByWaterCannon]]<br />
* Añadido [[onClientPlayerPickupHit]]<br />
* Añadido [[onClientPlayerPickupLeave]]<br />
* Añadido [[onClientSoundBeat]]<br />
* Añadido [[onClientWeaponFire]]<br />
<br />
===Cambios/Arreglos (Traduccion 50%)===<br />
* Arreglado 'no estas permitido a ingresar al vehiculo' bug<br />
* Añadida prioridad de order a [[addEventHandler]]<br />
* Arreglada la variante 'engineless' a la NRG-500<br />
* Añadida la opcion para saltar la seleccion de Dual Monitor Resolution<br />
* Hecho [[playSound3D]] usar la posicion de la camara en lugar de la posicion del jugador cuando se determina la distancia<br />
* Añadidas opciones de color coding y sub-pixel positioning a [[dxDrawText]]<br />
* Añadida la habilidad de crear y modificar cubemaps y volume textures - Detalles: [[dxCreateTexture]]<br />
* Añadido un sistema de cache de modelos para reducir los retrasos de carga<br />
* Añadido un sistema de cache de ropa para CJ para reducir los congelamientos en el juego<br />
* Aumentada velocidad de los sistemas para llamar cliente y servidor<br />
* Añadida la opcion element a [[engineApplyShaderToWorldTexture]]<br />
* Añadido un bool opcional a [[getElementMatrix]] ( element, bool )<br />
* Añadido unrar para un procedimiento de actualizacion mas suave<br />
* Arreglado errores de sustitución de modelos personalizados, algunas veces con armas y pickups de armas.<br />
* Arreglado modelos personalizados de mejoras para vehículos no se muestran inmediatamente<br />
* Arreglado precisión de punto de golpe en [[onClientPlayerWeaponFire]] y añadido parámetro origen de tiro<br />
* Arreglado [[setPedAimTarget]] toda la dirección es incorrecta<br />
* Arreglado problema cuando las balas de los peds' se originan de una posición incorrecta <br />
* Arreglado modelos personalizados no se renderizan correctamente algunas veces parámetro<br />
* Arreglado distancia de un modelo LOD personalizado no se reinicia después de quitar<br />
* Añadido límite de tamaño para los archivos clientscript.log <br />
* Añadido la capacidad de disparar con cualquier arma con jetpack<br />
* Arreglado hacer temporizadores con menos errores<br />
* Arreglado algunos crashes de animaciones<br />
* Fixed [[getPedMoveState]] returns false when moving in crouch state<br />
* Fixed a bug when a resource that replace an object model (dff) and texture (txd) is stopped the object texture get white<br />
* Added ped pixel shaders<br />
* Added ability to layer multiple shaders on a world texture<br />
* Fixed Windows 8 missing dll error<br />
* Fixed [[setElementPosition]] for vehicles on a non streamed in position will make the vehicle spin very quickly<br />
* Added check for GTA file loading failures<br />
* Fixed map editor crash<br />
* Fixed floating vehicles when using [[setVehicleIdleRespawnDelay]]<br />
* Fixed [[Client_Commands#showhud|showhud]] not fully working before the player has spawned<br />
* Fixed connect problem when using a domain name that starts with a number<br />
* Fixed missing font error message<br />
* Fixed [[getSoundLength]] returns 0 for sound streams (not radio streams)<br />
* Fixed a crash when taking a screenshot and minimizing then restoring<br />
* Fixed setElementFrozen killing players from falls<br />
* Fixed textures disappearing and flickering at certain camera angles<br />
<br />
===Bugs Arreglados===<br />
* Se ha corregido colisiones de vehículos personalizados las cuales no cargaban<br />
* Se ha corregido que algunos modelos personalizados no cargaban<br />
* onVehicleExplode es triggeable para los coches RC tambien ahora.<br />
* Los proyectiles disparan a su distancia<br />
* Arreglada el tatuaje de araña de CJ<br />
* Speed up in entity collision detection client side<br />
* Fixed the glitchy GTASA animation when you block+sprint (where hands are repeatedly raised and lowered)<br />
* Fixed Objects scaled with setObjectScale aren't rendered when the unscaled bounding box goes off-screen<br />
* Fixed Always falling off bikes and motorbikes<br />
* Fixed Some vehicles become indestructible when a certain door is open<br />
* Possible fix for client freezing/crashing after playing a long while<br />
* Los marcadores en interiores ahora aparecen<br />
* Chineese/Japanese/Korean input fixed<br />
<br />
==Server==<br />
<br />
===Nuevas Funciones===<br />
* Añadido [[takePlayerScreenShot]]<br />
* Añadido [[setOcclusionsEnabled]]<br />
* Añadido [[removeWorldModel]] (Disponible en 1.2.0-3624)<br />
* Añadido [[restoreWorldModel]] (Disponible en 1.2.0-3624)<br />
* Añadido [[restoreAllWorldModels]] (Disponible en 1.2.0-3624)<br />
<br />
===Nuevos eventos===<br />
* Añadido [[onPlayerScreenShot]]<br />
<br />
===Cambios===<br />
* Ninguno todavía<br />
<br />
===Arreglo de bug's===<br />
* Arreglado el map downloader que aveces rompía el mapa en diferentes partes.<br />
<br />
==Resources==<br />
* Admin: añadido anti spam nick<br />
* Freeroam: añadido de chat y spam opción de mensaje de repetición<br />
* Freeroam: añadido libro de posicion<br />
<br />
==Editor==<br />
* Se agregó información LOD para ayudar a la eliminación de los LOD's<br />
<br />
==Traductores==<br />
* F4ST3R<br />
* Pekio123<br />
* Araa</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=Modules&diff=39247Modules2014-04-04T22:40:57Z<p>Rockeromx: </p>
<hr />
<div>Modules are extensions for Multi Theft Auto's Lua core, allowing the integration and use of custom Lua functions that have been written in C++, and compiled as a DLL or SO file. Modules are commonly used to create functions for such purposes that Multi Theft Auto lacks, such as sockets. All modules listed here are not distributed with Multi Theft Auto, and must be manually installed.<br />
<br />
==Modules list==<br />
You can view a list of all the documented modules in this wiki [[:Category:Modules|here]].<br />
<br />
==Modules SDK==<br />
To be able to create your own modules, you must use the Modules SDK. You can download it from one of the links below - choose a link in accordance with your server's operating system.<br />
<br />
* Linux<br />
** [http://files.mtasa.com/apps/1.0/dm/ml_devkit.tar.gz Official]<br />
*** (Delete the .d files, and add #include <cstring> to Common.h)<br />
**** (On 64bit add -m32 to CPPFLAGS and LDFLAGS lines in Makefile)<br />
* Microsoft Windows<br />
** [http://www.mediafire.com/?b8b3asgegn0xkm4 Mirror (Mediafire)]<br />
<br />
===SDK Functions===<br />
*Currently in there:<br />
**Base:<br />
***HelloWorld<br />
**MySQL<br />
***MySQLCreate<br />
***MySQLOpen<br />
***MySQLDestroy<br />
***MySQLQuery<br />
***MySQLSafeString<br />
<br />
<br />
<br />
[[Category:Scripting Concepts]]<br />
[[Category:Incomplete]]<br />
[[Category:Modules]]<br />
<br />
[[pt-br:Módulos]]<br />
[[ru:Modules]]</div>Rockeromxhttps://wiki.multitheftauto.com/index.php?title=Modules&diff=39246Modules2014-04-04T22:40:14Z<p>Rockeromx: </p>
<hr />
<div>Los módulos son extensiones de núcleo Lua de Multi Theft Auto, lo que permite la integración y el uso de funciones personalizadas de Lua que se han escrito en C++ y compilado como DLL o archivo SO. Los módulos se usan comúnmente para crear funciones de las cuales carece Multi Theft Auto, tales como los ''sockets''. Todos los módulos que figuran en esta lista no se distribuyen con Multi Theft Auto, y deben instalarse manualmente.<br />
<br />
==Lista de módulos==<br />
Puede ver una lista de todos los módulos documentados en esta wiki [[:Category:Modules|aquí]].<br />
<br />
==Módulos SDK==<br />
Para ser capaz de crear sus propios módulos, debe utilizar los módulos SDK . Puede descargarlos de uno de los enlaces siguientes - elija un enlace de acuerdo con el sistema operativo de su servidor.<br />
<br />
* Linux<br />
** [http://files.mtasa.com/apps/1.0/dm/ml_devkit.tar.gz Official]<br />
*** (Eliminar los archivos .d y agregue #include <cstring> a Common.h)<br />
**** (Para 64bit agregue -m32 a las lineas CPPFLAGS y LDFLAGS en Makefile)<br />
* Microsoft Windows<br />
** [http://www.mediafire.com/?b8b3asgegn0xkm4 Mirror (Mediafire)]<br />
<br />
===Funciones SDK===<br />
*Actualmente hay::<br />
**Base:<br />
***HelloWorld<br />
**MySQL<br />
***MySQLCreate<br />
***MySQLOpen<br />
***MySQLDestroy<br />
***MySQLQuery<br />
***MySQLSafeString<br />
<br />
<br />
<br />
[[Category:Scripting Concepts]]<br />
[[Category:Incomplete]]<br />
[[Category:Modules]]<br />
<br />
[[pt-br:Módulos]]<br />
[[ru:Modules]]</div>Rockeromx