|
| | Como scriptear, en 3 niveles | |
| | Autor | Mensaje |
---|
Luisko Admin
Cantidad de envíos : 1907 Edad : 30 Localización : Donde haya rock, sexo y minas Fecha de inscripción : 16/12/2007
| Tema: Como scriptear, en 3 niveles Lun Mar 03, 2008 1:45 pm | |
| Nivel 1Nueva guia acerca del scripting, la recomiendo para el que ya este avanzando en lo que es el scripting en general. En esta guia explicare que son las funciones propias y como crearlas, espero que os guste! Tengan en cuenta que usarle el "lenguaje de scripts" que use en Los primeros pasos del scripter, y para el que no sepa nada de scripts todavia, le recomiendo leer esa guia. Primero, para aclarar dudas, una especie de FAQ =P Que es una funcion propia?Llamare funciones propias a las funciones de efectos que no estan programadas en el codigo fuente del servidor. Podemos encontrar diversos ejemplos en el arhivo global.lua, en la carpeta data de muchos servidores, al final del todo. Estas funciones pueden ser creadas por uno mismo como le guste a cada uno. Para que sirven las funciones propias?Personalmente, le veo muchos usos a estas funciones. Por ejemplo, pueden usarlas para simplificar scripts, traducir las funciones al español u otro idioma, etc. Con simplificar scripts, me refiero a por ejemplo, resumir algo de scripts que usamos muy seguido. Como crear una funcion propia.Bien, aqui empieza la guia. Teniendo en cuenta lo que dije anteriormente, las funciones propias podrian usarme como una especie de "libreria de programacion", muy basica, pero libreria al fin. Para crear una funcion propia debemos dirigirnos a la libreria del area para la que nos interese crear una funcion. Si la funcion la queremos destinar a mas de un area podemos dejarla en el global.lua. Con area me refiero a actions, npcs, talkactions, movements, etc. Bien, para crear nuestra funcion, abrimos el archivo de libreria que hayamos elegido, se encuentra en la carpeta "lib" de cada area. Supongamos que elegimos al area "actions". Vamos a la carpeta actions -> lib. Encontraremos un archivo, el actions.lua. Lo abrimos y nos dirigimos al final de todo. Ahora debemos decidir que queremos que haga nuestra funcion. Yo optare por crear una funcion llamada "questStatus(cid,value)". Quiero que esta funcion me ayude a simplificar las conocidas lineas por muchos de "if queststatus == -1 then". Este ejemplo es bastante tontito, ya que solo hara que no tenga que declarar la variable queststatus al principio del script como "queststatus = getPlayerStorageValue(cid, xxx)". Bien, empezare por escribir una linea en el actions.lua: - Código:
-
function questStatus(cid, value) Siempre debem escribir "function" seguido del nombre de su funcion, y entre parentesis las distintas variables que tendra la funcion. Por ejemplo, en este caso, mi funcion se llama questStatus por lo que escribi eso. Entre parentesis puse (cid, value). Cid se refiere al objeto del script, en este caso del jugador que realiza la accion, y value es el storage value que quiero chequear. Luego de eso indico que quiero que haga la funcion, y tengan en cuenta que los return van a jugar un gran papel a veces. Aqui deberan aplicar sus conocimientos de scripts, queda en ustedes. Les doy el ejemplo de mi funcion: - Código:
-
function questStatus(cid, value) s = getPlayerStorageValue(cid, value)
if s == -1 or s == 0 then return 0 else return 1 end end Tengan en cuenta ahora que return quiere decir "retornar" o "devolver", por lo tanto el return implica el valor que devuelve una funcion, o sea su resultado. Mi funcion obtiene un storage value (getPlayerStorageValue(cid,value)) y si el valor es -1 o 0 devuelve el valor 0 (return 0). Se daran cuenta tambien de que yo al obtener el valor del storage value, no indique que storage. Esto es porque cuando haga uso de la funcion, y solo ahi, es cuando debo indicar que storage value quiero chequear. Por ejemplo, usando la funcion en un script, por ejemplo en el quest.lua, es asi: - Código:
-
function onUse(cid, item, frompos, item2, topos) prize = item.uid actionid = item.actionid
if prize > 0 and prize < 7000 then
if questStatus(cid,item.uid) == 0 then doPlayerSendTextMessage(cid,22,'You have found a ' .. getItemName(prize) .. '.') doPlayerAddItem(cid,prize,1) setPlayerStorageValue(cid,prize,1) else doPlayerSendTextMessage(cid,22,"It is empty.") end return 1 else return 0 end end Vean que puse: - Código:
-
if questStatus(cid,item.uid) == 0 then Esto quiere decir "si la funcion questStatus que chequea el storage value del jugador que usa el cofre, y el storage value que chequea es igual a la uniqueID del item, si hubiese sido quest de DSM hubiese chequeado el valor 2492, es 0 entonces...". Creo que con esto dejo bastante clarito todo =PP Igualmente les dejo una funcion de doHeal, tal vez se les aclaren un poco mas las dudas si es que las tienen aun =P Y para el que sabe un poquito, se podra dar cuenta que la funcion "exhaust" es simplemente una funcion propia =P - Código:
-
function doHeal(cid, health) doPlayerAddHealth(cid, health) end Cuando use la funcion doHeal(cid,health) en un script, tendra la misma funcion que el doPlayerAddHealth(cid, health), era nada mas para mostrarles un poco mas el funcionamiento de estas funciones. Créditos: Falcon
Última edición por Luisko el Lun Mar 03, 2008 2:02 pm, editado 1 vez | |
| | | Luisko Admin
Cantidad de envíos : 1907 Edad : 30 Localización : Donde haya rock, sexo y minas Fecha de inscripción : 16/12/2007
| Tema: Re: Como scriptear, en 3 niveles Lun Mar 03, 2008 1:51 pm | |
| Nivel 2Script de Lugar->Cogeremos un script normal y corriente, de que si el player esta encima del tesoro y usa el objeto, lo consigue. - Guia escribió:
function onUse(cid,item,frompos,item2,topos)
player = getPlayerPosition(cid) tesoro = {x=xxxx, y=yyyy, z=z)
if player.x == tesoro.x and player.y == tesoro.y and player.z == tesoro.z then doPlayerAddItem(cid,item) ...
player = getPlayerPosition(cid). Es la posición del jugador, para compararla con la posición del tesoro. tesoro = {x=xxxx, y=yyyy, z=z). Posición del tesoro. if player.x == tesoro.x and player.y = tesoro.y and player.z = tesoro.z Comparaciones entre distintos lugares, siempre se pone una posición mas .x si es al coordenada x la que se compara o la .y o la .z, por ejemplo player.z para saber si está en el mismo piso que el tesoro.zSi habeis leido la guia de Falcon, aqui se condiciona que si player.x, player.y y player.z son iguales que tesoro.x, tesoro.y y tesoro.z el script tomará lugar, por supuesto si usas el item que has seleccionado en "actions.xml". Para cualquier scripter que se precie, esto es muy sencillo, sencillisimo. Así que ahora, pondremos que al no usar el objeto sobre el tesoro, ocurra algo. - Guia escribió:
function onUse(cid,item,frompos,item2,topos)
player = getPlayerPosition(cid) tesoro = {x=xxxx, y=yyyy, z=z)
if player.x == tesoro.x and player.y == tesoro.y and player.z == tesoro.z then doPlayerAddItem(cid,item)
elseif player.x < tesoro.x and player.y == tesoro.y and player.z == tesoro.z then doPlayerSay(cid,'Parece que el tesoro se encuentra al oeste')
Se puede apreciar que es lo mismo, ya que sólo han cambiado las condiciones. Podeis seguir este script y usarlo como mapa del tesoro si os interesa, porque ahora haremos algo diferente. Script de Tiempo-> - Guia escribió:
function a(params) local startpos = params.startpos local spawnDelay = params.spawnDelay local speed = 300 local pos = params.pos local cid = params.cid local groundpos = {x=pos.x, y=pos.y, z=pos.z, stackpos=0} local ground = getThingfromPos(groundpos) -- Continua Script --
function onStepIn(cid, item, pos) if isPlayer(cid) == 1 then isMoving = getPlayerStorageValue(cid,9500) if item.itemid == 5582 and isMoving == -1 then params = {cid = cid, pos = pos, startpos = pos, spawnDelay = 10} addEvent(a, 100, params) setPlayerStorageValue(cid,9500,1) end end end
Aqui se puede ver que... addEvent sirve para hacer una función en un tiempo determinado con sus parametros (antes señalados) Es muy sencillo de utilizar y sus efectos son muy completos. Script de AzarAzar ya sabeis todos para que sirve, pero como funciona? Un script sin azar - Guia escribió:
function onUse(cid,item,frompos,item2,topos)
doPlayerAddItem(cid,item)
end
Ahora le añadiremos azar - Guia escribió:
function onUse(cid,item,frompos,item2,topos)
azar = math.random(numerominimo,numeromaximo)
if azar = (numero entre numerominimo y maximo) then
doPlayerAddItem(cid,item)
else
end end
azar = math.random( numerominimo,numeromaximo) El numero mínimo suele ser 1 y el máximo, es aconsejable no ponerlo muy alto, dependiendo de el aazar que quieras ponerle, para un script de loteria recomiendo un 50.000.[/quote] | |
| | | Luisko Admin
Cantidad de envíos : 1907 Edad : 30 Localización : Donde haya rock, sexo y minas Fecha de inscripción : 16/12/2007
| Tema: Re: Como scriptear, en 3 niveles Lun Mar 03, 2008 1:58 pm | |
| Nivel 3Con esta guia aprenderemos a hacer pocas cosas, pero muy útiles. Empiezo ya con mi guia. Las Funciones propiasMe refiero a crear funciones, que realmente no existen en LUA, por ejemplo esta función. - Código:
-
function popUp(params) Y me direis, para que sirve esto? Pues fácil, para poder usar AddEvent de una manera sencilla que nos hará el trabajo de los scripters, diez veces mas fácil y mas ordenado! ¿Como hacer una función propia?Pues sencillamente le ponemos el nombre que queramos - Código:
-
function popUp(params) Y despues le ponemos los párametros (params) - Código:
-
function popUp(params)
local pos = params.pos local cid = params.cid
----- continua el script -------
params = {cid = cid, pos = pos,} addEvent(popUp, 200, params) end
Es fácil al principio, pero cuando son ya mas de seis parámetros, se complica la cosa, ya que te tienes que acordar de todos, por eso recomiendo apuntar todas las funciones propias y sus parámetros en un folio sucio. Las Variables de Lugar IIEn la guia de nivel dos, yo ya expliqué básicamente como usar una función de lugar, pero no expliqué todo, porque hasta a mi, que controlo mas o menos LUA me cuesta usar estas cosas. local pos = params.posDireis, OH QUE TIENE DIFERENTE A UN getPlayerPosition? Que local, funciona cada vez que el jugador se mueve, y eso? Me explico, si un jugador esta en la posición 1000x 1000y 7z, y se mueve a la izquierda, params.pos será este, 999x 1000y 7z, para que sirve esto? Pues para el script de la alfombra básicamente, sólo sirve para eso :). Lo usamos como local pos = params.pos y cada vez que nos movamos, la alfombra se podrá mover con nosotros, y la razón, es porque gracias al local pos, sabemos en que posición está el player siempre. Todo depende de la imaginación del player, a ver si tenemos algun futuro scripter de LUA que haga algun script nuevo ;). | |
| | | Kbzaaa Admin
Cantidad de envíos : 2653 Edad : 32 Localización : en camboya Fecha de inscripción : 26/12/2007
| Tema: Re: Como scriptear, en 3 niveles Lun Mar 03, 2008 2:20 pm | |
| esa wea me sirve =D | |
| | | Luisko Admin
Cantidad de envíos : 1907 Edad : 30 Localización : Donde haya rock, sexo y minas Fecha de inscripción : 16/12/2007
| Tema: Re: Como scriptear, en 3 niveles Lun Mar 03, 2008 2:24 pm | |
| | |
| | | Contenido patrocinado
| Tema: Re: Como scriptear, en 3 niveles | |
| |
| | | | Como scriptear, en 3 niveles | |
|
| Permisos de este foro: | No puedes responder a temas en este foro.
| |
| |
| |
|