101Level - Foro

[Guia] Scripting: Bases e Inicios

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Celsius

  • *
  • *
  • 6.600
  • 166
  • Actividad:
    0%
  • Sexo: Femenino
  • Cold as Fire(?) and Hot as Ice(?)
[Guia] Scripting: Bases e Inicios
« en: 16 de Julio de 2012, 05:14 »
[Guia] Scripting: Bases e Inicios
Realizada por: Celsius
Basada en la Guia de: Sergio[Guia] para npc shops y tipos quest

Conocer las bases del Scripting, les abrira las puertas a todo un Nuevo mundo en el RO.

[:::INICIOS:::]

Que es un script?  Como funcionan los NPC's?  Como se Invocan los mobs?  Como se crean los Warps?

Bueno todo eso esta manejado a travez de los Scripts. Y ahora se preguntaran... Que es un Script?

Usando la definicion dada por Wikipedia encontraremos que un Script es:

Cita de: Wikipedia.com
En informática un guión, archivo de órdenes o archivo de procesamiento por lotes, vulgarmente referidos con el barbarismo script, es un programa usualmente simple, que por lo regular se almacena en un archivo de texto plano. Los guiones son casi siempre interpretados, pero no todo programa interpretado es considerado un guión. El uso habitual de los guiones es realizar diversas tareas como combinar componentes, interactuar con el sistema operativo o con el usuario. Por este uso es frecuente que los shells sean a la vez intérpretes de este tipo de programas.

En pocas palabras, un Script dentro del Ragnarok Online es la forma como Interactuamos con el programa para que realiza sus funciones. Todas estas son muy Variadas, ya sea desde Invocar a los Mobs en sus areas especificas, hasta darle todos sus efectos a cada Item del juego.

Todos los Scripts tienen la misma Sintaxis: Header(Cabezera), Body(Cuerpo) y Final.

Ahora Destrozaremos unos Script del RO para poder explicarlos: 2-2shop.txt, kahohorn.txt y heal.txt

Estos se encuentran en la carpeta npc/custom/2-2shop.txt, npc/custom/quests/kahohorn.txt y en npc/custom/healers/heal.txt


[:::Bases de un Script NPC:::]


Para Comenzar Veremos lo que es el Header(Cabezera) el cual es la parte principal del script.

[:::HEADER:::]

Código: [Seleccionar]
MAPA,X,Y,Z<TAB>TYPE<TAB>SCRIPT_NAME#HIDDEN_NAME::UNIQUE_NAME<TAB>SPRITE_ID,TriggerX,TriggerY,{
En este caso no estan definidos los campos TriggerX,TriggerY asi que no los tomaremos en cuenta por lo pronto.

El primer Elemento es el MAPA, el cual debemos escribirlo tal cual este definido en nuestro RO, en este caso es prontera. Anteriormente era necesario especificar la extencion del mapa y ponerle (usando este ejemplo) prontera.gat lo cual ya no es necesario pero no afecta nada, esto por si llegan a ver algun script que diga xxxxxxxx.gat no se sorprendan.

Los siguientes 3 numeros son los que definen la UBICACION del NPC's en el mapa designado. Como muchos podran deducir por los nombre de estos campos, Son la manera en la que se situaran en el plano X , Y (Latitud y Longitud) del mapa. En pocas palabras las coordenadas del mapa donde aparecera, en este caso son 155,211. En el Caso de Z, creo que soy de las pocas que lo nombran asi y no, no es para Referirse al Eje Z  de un mapa (recuerden que no es un juego en 3D) si no para definir hacia donde estara Orientado el NPC. Hay que recordar que los NPC's tienen 8 vistas N, NE, E, SE, S, SW, W, NW; pero eso ya es cuestion de Spriting.

Despues Sigue la definicion del Tipo del Script, en este caso es Shop el cual es para definir una Tienda en el RO. Hay varios tipos mas de Script los cuales son script, cash, function por nombrar algunos y los cuales despues hablaremos un poco mas a fondo.

El campo de NOMBRE puede ser cualquier nombre que a ustedes se les ocurra, desde A hasta Tengo un nombre muy raro y bastante extraño que ninguno de ustedes podra jamas nombrarlo asi que mejor me pongo solo este nombre... Ok, ok... quizas exagere un poco, pero si pueden nombrarlo como ustedes deseen, siempre y cuando no exceda de 24 caracteres.

Cabe destacar que el nombre tambien pueden ponerle un Hidden Name o Nombre Oculto, lo cual Nos servira para identificar distintos NPC's que deseamos que tengan el mismo nombre, pero obviamente el Emulador no nos lo permite.

Para ocultar parte del Nombre solamente es necesario anteponer un signo de numeral ( # ).
Ejemplo:

Healer#00, Healer#01, Healer#02, Healer#03, Healer#04 y Healer#05

Con eso podemos tener 5 NPC's que tendran el nombre de Healer visible en el Juego, pero el emulador los detecta como nombres distintos con la parte del nombre Oculto.

Adicional a Esto podemos darle un Nombre Unico (Unique Name), el cual solo el emulador l reconocera y no sera Mostrado en ninguna parte de ningun modo, cabe destacar que el Nomre oculto se puede accesar o pedirle a algun script que lo lea y accese a esa informacion, mientras que el unico no es posible.

Para asignarlo solo es necesario poner DESPUES del nombre y nombre oculto un par de signos de dos puntos ( :: ) con lo cual quedaria de la sigiente manera:

Healer#00::La_Unica_Healer1

De esta manera en el juego se detectara solo el nombre de Healer, por medio de script se puede detectar como Healer#00 y el emulador lo lea como La_Unica_Healer1.

Y el ultimo campo utilizado en este header es el SPRITE ID, es la parte visual que veremos y la cual ustedes pueden elegir de entre todos los que vienen en la data. Para una referencia de estos pueden consultar este LINK. Alternativamente, tambien se puede utilizar los Sprites de los MOBS del juego como NPC's, solo es cuestion de poner el ID del Mob.

Y con esto concluye la observacion del Header, Lo siguiente en el caso de una Shop(Tienda) es el BODY(Cuerpo).

[:::BODY:::]

BODY traducido del Ingles, CUERPO.

El cuerpo del Script es donde definiremos todo lo que sera capaz de realizar desde los mensajes que nos muestra, mandarnos a algun mapa, invocar mobs, activar el pvp/woe, en fin, virtualmente todo es posible de realizarse a travez de Scripts.

Para todo esto es necesario utilizar los comandos indicados para cada accion, como referencia pueden usar el archivo que viene en el emulador con Todos o al menos casi todos (ya que no vienen los custom que se pueden crear) los comandos a utilizarse. Este archivo se encuentra en la carpeta doc y se llama script_commands.txt.

A continuacion les Nombrare algunos de los comandos utilizados mas comunmente.

Comando
Descripcion
mes "Tu texto va aqui";Sirve para abrir una ventana de Dialogo mostrando el texto que nosotros indicamos.
next;Sirve para desplegar el boton Next, y asi poder desplegar una nueva "hoja"/"pantalla" de dialogo.
close;Sirve para desplegar el boton Close, y con el poder cerrar el dialogo con el NPC.
Si no se utiliza este comando, jamas se cerrara el dialogo y por ende el personaje se quedaria
"trabado" con el hasta que relogee o se warpee.
end;Sirve para indicarle al Script que es el final de la instruccion.
Despues explicare mas a fondo el beneficio de usarlo o no.
percentheal %HP,%SP;Con este comando se puede usar ya sea para sanar a un personaje o "dañarlo".
Esto porque se puede utilizar tambien numeros negativos para disminuir su HP.
warp "mapa",X,Y;Como dice el nombre, funciona para hacer "warp" (teletransportar) al personaje que activo el script
al mapa especificado en las coordenadas X,Y proporcionadas.
if ( CONDICION ) {
Resultado si se cumple
} si NO prosigue aqui...
Sirve para Montar una verificacion de la condicion dada,
siendo que SI se cumple la condicion se efectuara lo que este dentro de las llaves,
de otra manera seguira normalmente sin tomarlo en cuenta.

Cabe resaltar que por cada comando que pongamos dentro del script, este mismo debe de terminar con ; (punto y coma), ya que mientras el script no encuentre uno seguira tomando todo como una sola linea, pero al romperse la sintaxis del comando causara  error.

Ejemplo:

Cita de: Sintaxys Incorrecta
mes "Hola, como te va amigo, veo que mal ahora te sanare"
percentheal 100,100
close;

Ese ejemplo seria lo mismo que si nosotros le dijieramos al emulador esto:

mes "Hola, como te va amigo, veo que mal ahora te sanare" percentheal 100,100 close;

Como resultado el emulador nos enviaria el siguiente error:



Mientras que Siguiendo la forma correcta:

Cita de: Sintaxis Correcta
mes "Hola, como te va amigo, veo que mal ahora te sanare";
percentheal 100,100;
close;

Como veran un simple signo de puntuacion hace la gran diferencia, ya que al hacerlo de esa manera ya no debera de darnos ningun error.

[:::Final:::]

En la mayoria de los Scripts lo unico que hay que realizar en el final del Script es solamente cerrar la llave del script ( } ) ya que si recuerdan en la mayoria de ellos se abre desde el header.

Código: [Seleccionar]
prontera,155,175,5 script test 410,{

mes "Hola, como te va amigo, veo que mal ahora te sanare"
percentheal 100,100;
close;

}

En algunos Scripts se puede observar que varios Scripters declaramos los mapflags que necesitaria el script.

Igualmente Despues del final del Script tambien se deben de declarar los duplicados que se deseen que se tenga del NPC.

Código: [Seleccionar]
prontera,155,175,5 script test 410,{

mes "Hola, como te va amigo, veo que mal ahora te sanare"
percentheal 100,100;
close;

}

prontera mapflag noexp
prontera mapflag nojobexp
prontera mapflag noloot

En este caso solo son de muestra ya que en si ese script de ejemplo no necesita de ningun mapflag para que funcione correctamente.

Para declarar un duplicado del npc es muuy sencillo. Solamente se debe de declarar de la siguiente manera:

Código: [Seleccionar]
MAPA,X,Y,Z<TAB>duplicate(NPC_NAME)<TAB>Display_Name#Hidden_Name<TAB>Sprite_ID
morocc,159,96,5 duplicate(Healer) Healer#h1-2 742

En el caso de las Tiendas (ya sean Shop regulares o de Cash) NO necesitan cerrarse con la llave ( } ), ya que ese tipo de Scripts jamas abren ninguna.


[ : : : : : "Descuartizando" un Script : : : : : ]

Bien ahora como comente anteriormente, comenzaremos a "Descuartizar" los scripts que comente para ir viendo como es que funcionan dentro del juego y asi mismo puedan con esas bases realizar sus propios Scripts de "Quest" y de Shops.

Recordandoles, los Scripts que veremos son :2-2shop.txt, kahohorn.txt y heal.txt

2-2shop.txt

Comenzaremos primeramente con los Scripts tipo Tienda ( Shop y Cash Shop ):

Código: [Seleccionar]
prontera,155,211,5 shop 2-2 Class Shop 86,1950:-1,1952:-1,1954:-1,1956:-1,1958:-1,1960:-1,1801:-1,1803:-1,1805:-1,1811:-1,1809:-1,1901:-1,1903:-1,1905:-1,1909:-1,1911:-1,1907:-1,1550:-1,1551:-1,1552:-1,1553:-1,1554:-1,1555:-1,1556:-1,1557:-1,1558:-1,2341:-1,2343:-1
prontera,160,175,5   cashshop   test   410,512:10,12263:100,2202:10,513:10[/code]

Para empezar, la primera diferencia que se puede apreciar es dentro del Header, que en estos casos despues del Sprite_ID no lleva la tipica llave que llevan los demas scripts ( { ).

Las tiendas son las mas faciles de Crear, para esto solo basta con poner despues del Sprite_ID la ID del Item que deseas que se venda y su precio.

Código: [Seleccionar]

Shop 86,1950:-1,1952:-1

En el caso de la Shop Regular vemos que tiene el Item ID 1950 Rope [3] y el Item ID 1952 Rope [4] , ambos seguidos de dos puntos (:) y un -1, en caso el -1 es el lugar del precio del item, En este caso no quiere decir que el item cueste -1 Zeny, al ponerle -1 le decimos al emulador que busque su precio de compra directamente en las item_db e item_db2, de otra forma utilizara el precio que le asignemos.

En el caso de las Cash Shops si debemos de especificar siempre el precio del item, el cual sera en CashPoint o KafraPoints.

Estos tipos de Scripts no necesitan nada mas al final del mismo para marcar su fin.

Es recomendable que al hacer una shop no la hagan muy extensa para evitar problemas con el emulador.


heal.txt


Código: [Seleccionar]
prontera,150,184,5 script Healer#h1-1::Healer 742,{
mes "[Healer]";
mes "I have amazing healing powers!!";
mes "You look like a person who needs them";
mes "Want some?";
next;
if (select("Heal:No thanks") == 2) {
mes "[Healer]";
mes "Allright, come back if you need a heal.";
close;
}
percentheal 100,100;
mes "[Healer]";
mes "Wonderfull, You are now healed!.";
mes "Have fun adventuring!!";
close;
}

// --------- NPC Clones ---------
morocc,159,96,5 duplicate(Healer) Healer#h1-2 742
ayothaya,155,111,5 duplicate(Healer) Healer#h1-3 742
geffen,121,61,5 duplicate(Healer) Healer#h1-4 742
umbala,94,162,5 duplicate(Healer) Healer#h1-5 742
payon,180,105,5 duplicate(Healer) Healer#h1-6 742
alberta,185,144,5 duplicate(Healer) Healer#h1-7 742
aldebaran,134,123,5 duplicate(Healer) Healer#h1-8 742
izlude,125,118,5 duplicate(Healer) Healer#h1-9 742
xmas,149,136,5 duplicate(Healer) Healer#h1-10 742
comodo,188,162,5 duplicate(Healer) Healer#h1-11 742
amatsu,200,80,5 duplicate(Healer) Healer#h1-12 742
gonryun,164,130,5 duplicate(Healer) Healer#h1-13 742
yuno,152,186,5 duplicate(Healer) Healer#h1-14 742
niflheim,188,180,5 duplicate(Healer) Healer#h1-15 742
louyang,225,103,5 duplicate(Healer) Healer#h1-16 742

Este es uno de los healers que vienen dentro de los emuladores. Como podran ver este Script tra los elementos que se Explicaron mas arriba, tanto en el Header como en el Final del Script.

Citar
prontera,150,184,5   script   Healer#h1-1::Healer   742,{

Tenemos el Mapa que es Prontera en las coordenadas 150,184,5 (Poco abajo a la Izquierda del centro de prontera), El nombre Visible es Healer que es el que vemos al pasar el puntero sobre el, con el nombre Oculto #h1-1 y el nombre unico Healer.

Como veran este Script no tiene muchas intrucciones, pero es de los mas Usados en la mayoria de los servidores privados de RO.

En este caso solo vemos la Instruccion mes, next, if, select y close

Como ya se menciono, usar mes es para desplegar una ventana de dialogo con el texto otorgado, next para hacer el cambio de "pagina" de la ventana de dialogo y close para cerrar el dialogo.

Podremos ver que aqui se esta aplicando la orden if la cual es para realizar alguna comparacion, que en el caso de este Script, es para comparar la seleccion del menu generado con la instruccion select.

select nos permite crear un Menu con las opciones que le asignemos y el emulador recordara el numero de opcion que se elije del menu que se crea, comenzando desde 1.

En este caso al hacer el if (select("Heal:No thanks") == 2) { le estamos diciendo al emulador lo siguiente:

if --> Si
select --> Seleccionamos
"Heal:No thanks" == 2 -->de las opciones Heal y No Thanks la segunda opcion (No thanks), efectuara la accion que esta entre los corchetes.

De otra manera sigue con lo que esta despues de esos corchetes.


Por ultimo pero no menos importante en este script, son los duplicados que se generan al final del script, haciendo asi que con 1 solo script tengamos al NPC Healer en todos los mapas que declaremos, en este caso generalmente se usa solamente en las Ciudades.

kahohorn.txt

Código: [Seleccionar]
//This quest is custom. Don't use it.

geffen,115,107,5 script Lord Kaho's Servant 61,{
mes "[Lord Kaho's Servant]";
mes "I worked myself to death trying to fulfill Lord Kaho's ridiculous expectations for a headgear!";
mes "Now that I've finally found the formula for the perfect headgear, I'm willing to share my time and talents";
next;
mes "You need the following to get the Kaho horns!";
mes "3 emperiums";
mes "Oh yea... i also forgot to mention these X_X";
next;
mes "1 Skull - From Dark Lord";
mes "1 Heroic Emblem - From Orc Hero";
mes "1 Evil Horn - From Baphomet";
mes "1 Red Frame - From Doppelganger";
mes "1 Smoking Pipe - From Eddga";
mes "1 Fang of Garm - From Garm";
mes "1 Mother's Nightmare - From Maya";
mes "1 Sphynx Hat - from Osiris";
mes "1 Diamond Ring - from Mistress";
next;
mes "Were' not done yet sweety...";
mes "Im a big fan of dolls, so you need to bring me these cuties";
mes "1 Poring Doll - a Poring drop";
mes "1 Chonchon Doll - a Chonchon Drop";
mes "1 Baphomet Doll - a Baphomet drop";
mes "1 Osiris Doll - an Osiris drop";
mes "1 Rocker Doll - a Rocker drop";
mes "1 Apez Fanitem Doll - a Yoyo drop";
mes "1 Racoon Doll - a Smokie drop";
mes "1 Spore Doll - a Spore drop";
next;
mes "Finally, i worked hard to make these horns for my master with all the mentioned items above...";
mes "Please include 5 million zeny for my efforts.";
next;
mes "[Lord Kaho's Servant]";
mes ". . . . . .";
mes "Are you ready for me to make this special item?";
next;
menu "Sure am!",-,"These requirements are unfathomable!",LUnfathomable;

mes "[Lord Kaho's Servant]";
if(countitem(754) < 1 || countitem(753) < 1 || countitem(752) < 1 || countitem(751) < 1 || countitem(750) < 1
|| countitem(743) < 1 || countitem(742) < 1 || countitem(741) < 1 || countitem(2613) < 1
|| countitem(5053) < 1 || countitem(7020) < 1 || countitem(7036) < 1 || countitem(2268) < 1
|| countitem(734) < 1 || countitem(923) < 1 || countitem(968) < 1 || countitem(7005) < 1
|| countitem(714) < 3 || Zeny < 5000000) goto LNotEnough;
delitem 754,1;
delitem 753,1;
delitem 752,1;
delitem 751,1;
delitem 750,1;
delitem 743,1;
delitem 742,1;
delitem 741,1;
delitem 2613,1;
delitem 5053,1;
delitem 7020,1;
delitem 7036,1;
delitem 2268,1;
delitem 734,1;
delitem 923,1;
delitem 968,1;
delitem 7005,1;
delitem 714,3;
set Zeny,Zeny-5000000;
mes "Wow!  You are brave indeed!";
getitem 5013,1;
mes ". . . . .";
mes "Enjoy being God of Rune Midgard!";
close;

LNotEnough:
mes ". . . . .";
mes ". . .I'm sorry .. You don't have enough money and items ..";
mes "I can't afford to make this if you don't bring all materials needed.  Please understand this is to benefit heroes such as yourself!";
close;

LUnfathomable:
mes ". . . . .";
mes "What I had to go through was more unfathomable..";
mes "If you succeed in getting these items, you will have incredible strength!";
close;
}

Este Script es un script custom que viene en el emulador para uno de los items que "desbalancean" servidores, es recomendable que no se active si desean un server estable y sobre todo si no usan custom desbalanceadores.

Lo que hay que resaltar en este Script son pocas cosas, las cuales nos serviran para cualquier script de quest que deseen hacer.

Código: [Seleccionar]
if(countitem(754) < 1 || countitem(753) < 1 || countitem(752) < 1 || countitem(751) < 1 || countitem(750) < 1
|| countitem(743) < 1 || countitem(742) < 1 || countitem(741) < 1 || countitem(2613) < 1
|| countitem(5053) < 1 || countitem(7020) < 1 || countitem(7036) < 1 || countitem(2268) < 1
|| countitem(734) < 1 || countitem(923) < 1 || countitem(968) < 1 || countitem(7005) < 1
|| countitem(714) < 3 || Zeny < 5000000) goto LNotEnough;
..........................
delitem 754,1;
..........................
set Zeny,Zeny-5000000;
..........................
getitem 5013,1;

countitem(xxx) es la instruccion con la que podremos verificar que el usuario tenga consigo algun item para la quest, en este caso al usarse con la comparacion if hacemos el chequeo de si tiene mas o menos del item especificado.

en este caso esta simplificado con 2 barras horizontales (||), las cuales en el lenguaje de programacion del RO (y creo que tambien en Lenguaje C) significa ó.

Es decir le dice que si tenemos menos de X item ó tenemos menos de Y ó tenemos menos de Z etc etc etc, nos mandara a la Etiqueta (label) LNotEnough.

Esto igual podria ir de la siguiente manera, que al final de cuentas es lo mismo pero mas largo:

Código: [Seleccionar]
if(countitem(754) < 1) goto LNotEnough;
if(countitem(753) < 1) goto LNotEnough;
if(countitem(752) < 1) goto LNotEnough;
if(countitem(751) < 1) goto LNotEnough;
if(countitem(750) < 1) goto LNotEnough;
if(countitem(743) < 1) goto LNotEnough;
if(countitem(742) < 1) goto LNotEnough;
if(countitem(741) < 1) goto LNotEnough;
if(countitem(2613) < 1) goto LNotEnough;
if(countitem(5053) < 1) goto LNotEnough;
if(countitem(7020) < 1) goto LNotEnough;
if(countitem(7036) < 1) goto LNotEnough;
if(countitem(2268) < 1) goto LNotEnough;
if(countitem(734) < 1) goto LNotEnough;
if(countitem(923) < 1) goto LNotEnough;
if(countitem(968) < 1) goto LNotEnough;
if(countitem(7005) < 1) goto LNotEnough;
if(countitem(714) < 3) goto LNotEnough;
if(Zeny < 5000000) goto LNotEnough;

Hay otro operador que podemos usar en las comparaciones, el cual se podria decir que es el contrario del ó, el cual seria && (y), que seria para comparar que si tenemos X item Y tenemos tambien Y item pasaria lo que deseamos.

En este Script no se presenta el caso pero es bueno siempre tener este tipos de referencias.

El comando delitem, como muchos se lo imaginan por el nombre, es para borrar el item que nosotros definamos del jugador que activo el script en la cantidad que deseemos. No creo que esto requiera mas explicacion.

En este script se esta usando el comando set, el cual nos sirve para definir un valor a alguna variable (les recomiendo revisar el [FAQ] Sobre Variables para tener una idea mas amplia sobre el tipo de variables).

Hay muchas variables predefinidas por el RO que nosotros podemos llegar a modificar. Algunas no habra problemas, otras hay que tener cuidado y otras mas es preferible no meterse con ellas.

Estas son las que estan predefinidas:

Citar
StatusPoint - Puntos de Status Restantes. No se recomienda manejarse se no se sabe lo que se hace.
BaseLevel   - Nivel Actual. Hay que usarse con Cuidado
SkillPoint  - Puntos de Skill Restantes. Hay que usarse con Cuidado
Class       - Job Actual. Hay que usarse con Cuidado
Upper       - 0: Normal jobs, 1: Adv jobs. 2: Baby jobs, 4: Normal 3rd jobs. 5: Adv. 3rd jobs. 6: Baby 3rd jobs. NO MODIFICAR ESTO POR SCRIPT, puede causar muy severos Bugs, esta variable esta mas bien para usarse como referencia o comparacion.
Zeny        - Cantidad de Zeny Actual. Hay que usarse con Cuidado
Sex         - Sexo del Jugador, 0 = Mujer, 1 = Hombre. Hay que usarse con Cuidado
Weight      - Peso que actualmente trae el Jugador, preferible no modificar.
MaxWeight   - Peso Maximo que puede cargar el Jugador, preferible no modificar.
JobLevel    - Nivel de Job actual.
BaseExp     - Cantidad de Experiencia Base del Nivel Actual.
JobExp      - Cantidad de Experiencia de Job del Nivel Actual.
NextBaseExp - Cantidad de Experiencia para llegar al siguiente nivel Base.
NextJobExp  - Cantidad de Experiencia para llegar al siguiente nivel de Job.
Hp          - Cantidad de HP Actual.
MaxHp       - Cantidad Maxima de HP.
Sp          - Cantidad de SP Actual.
MaxSp       - Cantidad Maxima de SP.
BaseJob     - Esta variable nos dira siempre, como el nombre lo dice, el Job Base del Jugador, es decir, ya sea que el jugador sea Acolite, Priest, Monk, High Priest, Champion, Sura, Sura Trans o cualquiera de sus correspondientes Baby siempre nos dara como resultado Job_Acolite. Igualmente esta es para referencia y NO es recomendable modificarla por medio de Script
#CASHPOINTS - Cantidad Actual de Puntos de Cash. Es variable de Cuenta.
#KAFRAPOINTS- Cantidad Actual de Puntos de Kafra. Es variable de Cuenta.

en el caso de este Script se esta definiendo la cantidad de Zeny que "cobra" el Script para hacer su funcion.

En este caso se esta usando uno de los Operadores Matematicos dentro de esta opcion:

Código: [Seleccionar]
set Zeny,Zeny-5000000;
Es decir, Definimos (set) la variable Zeny, en Si misma menos 5,000,000.

Se pueden usar cualquiera de los 4 operadores basicos, Suma (+), Resta (-), Multiplicacion (*) y Division (/).

Cabe destacar que dentro del RO NINGUNA variable puede guardar numeros con decimales, es decir si efectuamos la operacion de 7 / 2 no nos dara el resultado que es 3.5, si no que nos lo redondeara al numero entero hacia abajo, en este caso a 3.

Existe otro operador, el cual nos servira para obtener el Diferencial o Remanente de una Division, en el caso del ejemplo de 7 % 2 el resultado seria 1.


Por Ultimo, aparece el comando getitem, que al igual que el nombre lo indica, Otorga al jugador el item que deseemos en la cantidad designada.



Con esto, podemos dar por terminada esta "Introduccion" a la creacion de Scripts, en este caso los mas Basicos que son los Healer, Shops y Tipo Quest de Conseguir items.

Creo haber cubierto los puntos basicos de creacion para que tengan en mente lo necesario para hacer sus propios Scripts e iniciar en este mundo de Scripting de RO.
« última modificación: 16 de Julio de 2012, 05:18 por Celsius »

La Clave del exito es la perseverancia, solo recuerda que todo lo bueno toma su debido tiempo. Si lo Aceleras siempre saldra mal.


 

[Guía] Manipulación de archivos (Scripting)

Iniciado por Miles

Respuestas: 0
Vistas: 2050
Último mensaje 19 de Julio de 2012, 04:40
por Miles
[Guía] Cómo agregar NPCs al servidor

Iniciado por Leeg

Respuestas: 0
Vistas: 5729
Último mensaje 10 de Julio de 2012, 22:10
por Leeg
[Guía] Funciones de extración de información (Parte 3 - Items y armamento)

Iniciado por Miles

Respuestas: 0
Vistas: 1273
Último mensaje 29 de Julio de 2012, 15:35
por Miles