Saltar al contenido

Más en DLAN: Nuestras Traducciones | Otras Traducciones | Mods y modding | Revisiones y Guías | Videojuegos | Arte | Literatura | Rol y Rol por foro e IRC | Mapa de la web

Guía Avanzada de creación de Scripts


No hay respuestas

#1

  • Invitado

Posteado 10 September 2003 - 08:11 AM

Guía Avanzada de creación de Scripts (guiones) de Po

(Traducido por Koldan)



Aclaraciones Generales.
Preparando las Variables Globales/ Locales y Los temporizadores (“Timers”).
Que significan esas malditas letras en los ficheros IDS.
Escribiendo un Script complejo.
Miscelánea --Recursos--


General Statement



Esta guía esta escrita para los que dominan toda la información escrita en el original Guía de Scripts de Po y han experimentado por su cuenta. Si tienes problemas, SIGUE INTENTANDOLO. Créeme, se vuelve más fácil después de un Tiempo.



Setting Global / Local Variables and Timers

Lo primero, tienes que saber que las variables globales activan flags. Estos flags son como indicadores invisibles que se activan cuando ocurre un evento. Hay 3 tipos diferentes de variables—GLOBAL(globales), LOCALS (locales), y Aryyyy (de área).

Triggers (disparadores) Globales/Locales

0x400F Global(S:Nombre*,S:Área*,I:Valor*)

0x4034 GlobalGT(S:Nombre*,S:Área*,I:Valor*)

0x4035 GlobalLT(S:Nombre*,S:Área*,I:Valor*)

0x4098 GlobalsEqual(S:Nombre1*,S:Nombre2*)

0x4099 GlobalsGT(S:Nombre1*,S:Nombre2*)

0x409A GlobalsLT(S:Nombre1*,S:Nombre2*)

0x409B LocalsEqual(S:Nombre1*,S:Nombre2*)

0x409C LocalsGT(S:Nombre1*,S:Nombre2*)

0x409D LocalsLT(S:Nombre1*,S:Nombre2*)



Temporizadores (“Timers”)

0x40B5 RealGlobalTimerExact(S:Nombre*,S:Área*)

0x40B6 RealGlobalTimerExpired(S:Nombre*,S:Área*)

0x40B7 RealGlobalTimerNotExpired(S:Nombre*,S:Área*)

Acciones Globales / Locales

30 SetGlobal(S:Nombre*,S:Área*,I:Valor*)

255 AddGlobals(S:Nombre*,S:Nombre2*)



Temporizadores (“Timers”)

SetGlobalTimer(S:Nombre*,S:Área*,I:Valor*)

RealSetGlobalTimer(S:Nombre*,S:Área*,I:Valor*)



Variables GLOBALES



Cuando las variables Globales cogen un valor, se mantienen durante todo el juego. Las variables Globales se marcan en todas las áreas y se aplican a todos los personajes, todas las criaturas, o cualquier otra cosa que haya. El formato de las variables Globales es algo tal que así...



Global(" Nombre_Variable ","GLOBAL",#)



El Nombre_Variable Puede ser cualquier cosa que quieras (Simplemente no lo pongas muy largo). El # es el Valor de esa Variable Global. La Variables Globales, cuando se usan en una sentencia IF, por defecto es 0. Por lo tanto, si tienes algo como...

IF

Global("Va_a_Hacer_Algo ","GLOBAL",0)



...entonces la variable "Va_a_Hacer_Algo" se considerara cierta y tendrá un valor de 0. Sin embargo, si tienes una acción como...



RESPONSE#100

SetGlobal("Va_a_Hacer_Algo ","GLOBAL",1)



... Entonces la variable " Va_a_Hacer_Algo " con un valor de 0 se considerará False (“Falsa”) porque ahora " Va_a_Hacer_Algo " tiene un valor de 1.

La Variables globales se suelen usar para marcar algo que solo va a ocurrir una vez en el juego. Coge el script "KELDHOME" por ejemplo.

En él aparece qué sí las Variables Globales, "KeldornEstate" y "KeldornPassesHouse" tienen un valor a 0 y Keldorn está en el grupo, empieza un dialogo, Después la Variable Global "KeldornPassesHouse" pasa a tener un valor 1.



IF

IsOverMe("Keldorn") //Ignorar IsOverMe() de momento.

InParty("keldorn")

Global("KeldornEstate","GLOBAL",0)

Global("KeldornPassesHouse","GLOBAL",0)

THEN

RESPONSE #100

ActionOverride("Keldorn",StartDialogueNoSet(Player1))

SetGlobal("KeldornPassesHouse","GLOBAL",1)

END



Básicamente, lo que dice este script es... Si Keldorn está cerca de su casa por primera vez, qué empiece un dialogo contigo. Ese dialogo no sucederá otra vez a no ser que la Variable Global "KeldornPassesHouse" vuelva a coger el valor 0. Ya deberías entender como funciona esto.



LOCAL Variables



Cuando las Variables Locales cogen un valor, se mantienen en la criatura que les asignó el valor. De esta forma puede haber muchas variables iguales activadas al mismo tiempo, pero sin afectarse una a otra. Las Variables Locales tienen el formato...



IF

Global("Tengo_Que_Hacer_Algo","LOCALS",#)



La única diferencia entre las variables Locales y Globales es que las Locales pueden estar activadas simultáneamente sin afectarse unas a otras, y las Variables Locales sólo son útiles si toman valor de y son activadas por una criatura especifica.



AREA Variables



Las Variables de Área están asociadas al nombre de un área especifica. Una variable de área con el valor "AREA000" sólo será válida en "AREA000." El formato de las Variables de Área es algo como...



IF

Global("Hará_Algo","ARyyyy",#)



Qué Significan esas Malditas Letras en los Ficheros IDS.



Si has mirado en los ficheros IDS, habrás visto esas letras que tienen dos puntos y asteriscos cerca de ellas. Si tú eres como yo, te habrás preguntado.... "¿Para qué demonios es eso? "

O: significa Objeto. Puede ser cualquier cosa de Object.ids

P: Punto. Siempre es en el formato [x.y] .

S: Indica un resref o el nombre de algo.

I: Indica algo tomado desde un fichero IDS. También puede ser el número ID, un temporizador, o un valor.



Escribiendo un Script Complejo.



Aquí es donde está el tutorial actual... Este tendría que ser mucho más complicado que el que aparece en “La guía de Scripts de Po”.

Nuestro objetivo para este tutorial será hacer un script para in mago/clerigo que lanzará hechizos ofensivos o defensivos dependiendo de ciertas condiciones.



Tener en cuenta que este Script es general. Cualquier Script que hagas deberá ser personalizado para tu grupo. Tener en cuenta, todos los NPC's en el juego pueden ser objetivos simplemente usando su Nombre en comillas. Por ejemplo, Minsc sería "Minsc".

Abre el fichero tutorial.txt incluido con este documento. Si has leído y entendido “La guía de Scripts de Po”, deberías tener una idea aproximada de lo que el script hace.

La primera sección, marcada como TROLL muestra la prioridad para lanzar cierto tipo de hechizo cuando un troll está presente.

Dice...

1. Si ves un troll, él tiene menos de 20 HP( puntos de vida), y yo tengo el hechizo de Flecha de Fuego (Flame Arrow), lanzar Flecha de Fuego al troll.

2. Si esas condiciones son ciertas, pero no tengo Flecha de Fuego, pero TENGO Llamarada de Agannazar (Agannazer's Scorcher), lanzarle Llamarada de Agannazar.

3. Ahora, Si no tengo ninguno de esos hechizo, pero tengo el hechizo de Manos Ardientes (Burning Hands), moverme hacía el troll para poder lanzarle Manos Ardientes. Si estoy a menos de 8 pies del troll (Rango de Manos Ardiente), entonces lanzarle Manos Ardientes.

Darse cuenta que todas las sentencias IF-THEN usan ActionListEmpty(). Esto se usa para que el script no interrumpa ningún control manual que quieras tener sobre el personaje. ActionListEmpty() significa... "SI no estoy haciendo ninguna acción."

The targeting I used in this should look like [ENEMY.0.TROLL]. Para ver porqué hago esto, ver la referencia en “Referencia Rápida de Scripts” (Scripting Quick Reference) en la carpeta “Compilador de Scripts” (Script Compiler).

Lo próximo es la parte LEVEL DRAINERS (drenadores de niveles). Básicamente dice....

1. Si ves un miembro de la raza Vampiro (los drena-niveles), un miembro del grupo es un Guerrero (Fighter), Paladin, o Explorador (Ranger), y yo tengo el hechizo Protección contra el Plano Negativo (Negative Plain Protection)...

2. Entonces lanzar Protección contra el Plano Negativo en un guerrero, un paladín, y un explorador.

Normalmente los grupos constan solo de un miembro de estas clases, por lo que uso variables globales para marcar que he lanzado Protección contra el Plano Negativo para cada tipo de clase.

Fijarse en que la forma de apuntar debe estar personalizada para tu grupo. Si tienes a alguien que suele ser el Ataca Vampiros, entonces apuntale a él con este Script.



La parte UNDEAD (no muertos) usa el mismo método que la parte TROLL, pero con Falso Amanecer (False Dawn) y Rayo Solar (Sunray).

Lo único nuevo es el activador...

NumCreatureVsPartyGT([ENEMY.UNDEAD],3).

Uso este activador porque normalmente querrás lanzar estos hechizos con un grupo de no muertos.

Por último la parte DEFAULT. Implementer dice...

Si tengo munición y el enemigo esta a más de 8 pies, atacar con mi arma a distancia.

Si no tengo munición o el enemigo está a menos de 8 pies, atacarle con mi arma cuerpo a cuerpo.

AttackReevaluate se usa para reevaluar la situación cada 30 pasadas del script, o cada 2 segundos. Si esta acción no funciona con tu ordenador, cámbiala por AttackOneRound().



Miscelánea



Te recomiendo que busques tus métodos para hacer los scripts. Hay muchas posibilidades que puedes usar. Experimenta con diferentes acciones y activadores hasta que encuentres el script que quieres. Una buena idea sería unirse a bgscripts en egroups. Hay posibilidades, si te surge un problema, o quieres sugerencias de tu método de hacer scripts, que ya haya sido discutido hay.

Si quieres desarrollar scripts para una expansión, o quieres editar que pasa en las búsquedas, busca el nuevo tutorial de scripts, "Scripting the Infinity Engine," de pronta salida....



Recursos:

TeamBG-- <www.teambg.com> -- Utilidades como el TeamBG AI Scriptor, el Infinity Engine Editor, y el Biftool y Windows Front-End.

Grog's World-- http://www.crosswind...og12/index.html <http://www.crosswind...g12/index.html> --El tutorial de Grog (en ingles) para scripts de Clérigo y algunos consejos de Bioware.

PotenciusNet-- <www.angelfire.com/nj3/potenciusnet> -- Mi sitio! Post en mi message boards si quieres preguntar algo

JC's Baldur's Gate Scripting Center-- http://www.citilink.com/~jch/bg/ <http://www.citilink.com/%7Ejch/bg/> -- Tiene muchos links, así como un compilador mejorado.

BGscripts at Egroups-- <http://www.egroups.c...roup/bgscripts> --Un gran grupo para pertenecer. Si te unes, ten por seguro que conseguirás la mejor información y consejos para hacer scripts.

Infinity Explorer-- <www.infexp.sourceforge.net> --Utilidad que te deja ver scripts, ficheros IDS y otras cosas útiles para hacer scripts. Personalmente, creo que cualquiera que quiera hacer scripts debe tenerla.



Responder



  


A Bragol. Tus amigos te echan de menos.