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
Foto

¡A compartir! Sistema de tesoros


18 respuestas al tema

#1 Setaka

Setaka

    Ancillae

  • Miembro
  • PipPipPip
  • 366 posts

Posteado 16 February 2017 - 09:23 PM

Bla bla bla, citar a Setaka si lo usáis, bla bla bla. No digo más porque esto va a ser un tochaco xD

 

Sistema en fase BETA: Necesita testeo. Lo he hecho en una tarde y unas pocas birras. Es cosa vuestra, yo si no me decís nada no me enteraré y así se va a quedar, que tampoco lo voy a usar jajaja. 

 

Link: https://www.dropbox....cofres.rar?dl=0

 

 

Son dos scripts que crean un sistema de tesoros bastante personalizable. Aquí he dejado un mod con muchos cofres para que testees.

 

 

+ Configuración:

 

- Primero arranca el módulo cómo jugador y explora un poco los cofres que he dejado, y verás la gracia del sistema. Por defecto y para testear, el tiempo de regeneración es solo 1 minuto, suficiente para volver al primer cofre después de haber testeado los otros.

 

- En el área DM (o aparte para que tus buenos DMs no metan zarpa y cambien por error el sistema de tesoros) pones los cofres referencia. Etiqueta st_"número", ej: st_1, st_2, etc. A cuanto mayor el número, más oro podrán dar. Los objetos que pongas dentro serán los que tendrán probabilidad de salir en los cofres de los jugadores (que tendrán etiqueta stcofre1, stcofre2, etc). El sistema relaciona el cofre 1 con el 1, 2, con 2 y así. No hay límite en el número de cofres referencia que puedes pintar, pero sí lo hay en el número de items que puedes entrar en cada uno (hay límite en las pestañas). Es preferible crear muchos cofres que pocos e hipersaturados. Puedes aprovechar para hacer cofres específicos (uno de pergaminos level bajo, otro de armas de asta nivel alta, algún cofre genérico...). En el OnOpen de estos cofres tienes que poner el script st_setakacontar. Cuando hayas puesto todos los objetos dentro (aunque mejor léete toda esta guía antes), ve al juego y al abrirlos te hará un recuento. El número que te dé cada cofre tendrás que apuntarlo, ir a variables de cada cofre, y añadir la variable int de nombre iTotal, y valor que te ha dado. Esto sirve para indicarle cuantos objetos hay dentro del cofre para saber entre cuantos tiene que elegir. Esto podría haberlo puesto yo en el script principal, pero así tienes un control del número de objetos del cofre (y evito tener que hacer dos ciclos seguidos en un cofre). Si añades un item y ves que no ha subido el contador, es que ya has sobrepasado el límite de objetos (en el inventario del aurora se ven, pero en el juego no).

 

- Los cofres de los jugadores tienen que etiquetarse como stcofre"numero". Ej: stcofre1, stcofre2, etc. Aparte de lo típico de usable, trama y demás, en el OnOpen tienes que poner el script st_setaka. Y en inventario que esté vacío claro.

 

 

+ Configurar el sistema:

 

- Variables por defecto, están en el script st_setaka. Estos son los parámetros que quieres para la mayoría de tus cofres. Solo con pintar los cofres ya te funcionarán con estas probabilidades que configures aquí. Aquí las explico:

int TIEMPO_MINUTOS = 1; ////POR DEFECTO: minutos de regeneracion
int PROB_ORO = 30; //probabilidad de que salga oro
int PROB_ORIT = 50; //y si sale oro, probabilidad de dar acceso a también un item
int PROB_IT = 100; //probabilidad de que salga un item (depende de si ha salido oro o no)
int PROB_NIVEL = 10; //probabilidad de que el cofre suba o baje un nivel
int PROB_REPETIMOS = 10; //repetimos? ;D probabilidad de que salga mas de un objeto 

Además puedes configurar que los PJs no puedan abrir el mismo cofre en el mismo reinicio:

DelayCommand(TurnsToSeconds(TIEMPO_MINUTOS), DeleteLocalInt(oSelf, "st"+sID));//<-- QUITAR SI EL PJ SOLO ABRE EL COFRE 1 VEZ/REINICIO
 

También la fórmula del oro que se otorga:

 

int iOro = (Random(50)+iNum)*iNum; //<-- FORMULA CANTIDAD DE ORO

//iNum es el "nivel" de cofre 

 

 - Variables propias de cada cofre, añadiendo las mismas variables pero en cada cofre modificarás las probabilidades de forma individual (en el de referencia no, en el de los jugadores!). Paso de explicarlo, ya se ve en los cofres que me he currado :). Solo ve a variables del cofre y mira lo que he añadido. El -1 marca probabilidad que el script se ahorrará, y solo trabajará con las variables de 1-100 que le añadas.

 

 

 

Un consejo final: No hace falta que todos los cofres de referencia vayan seguidos, fíjate en lo que he hecho en los cofres que pueden tener libros pero a veces también pergaminos. Al haber probabilidad de que suban/bajen de nivel, quedaría raro si por ejemplo dentro de una librería encontraran un virote por el hecho de haber bajado un nivel. Lo ideal es que vayan seguidos los de la misma temática, y a más número mejores items. Y dejar un cofre sin pintar para dejar espacio, que aún puedes utilizar para pintar cofres de jugadores que solo tengan oro (usando la variable oro en los pintados al 100%), cómo el cofre 99 que he pintado.

 

Ale a disfrutarlo :)


Editado por Setaka, 20 October 2017 - 04:23 PM.

Tutorial NWN Scripting: Click aquí


#2 Khan51

Khan51

    Neonato

  • Miembro
  • PipPip
  • 137 posts

Posteado 20 February 2017 - 10:24 AM

Justamente pregunté por algo así hace 4-5 días tío. Nos solucionas la vida a pasos agigantados, mil gracias! :D


"La ignoracia convencida, no tiene remedio. . ."

 


#3 Zoraga

Zoraga

    Neonato

  • Miembro
  • PipPip
  • 192 posts

Posteado 20 February 2017 - 12:17 PM

Si esta bastante bueno, yo lo estube testeando anoche, hasta el momento funciona bien, luego lo probaré con mas pjs y en dungeons. Se agradece Setaka.


Colaborando en:



Nombre servidor: ES) Reinos del Caos
Tipo de servidor: rol/acción
Jugadores: 1-25
Niveles: 1-30
Base literaria: Inventada.
IP (conectar directamente): 74.208.227.175:5121
Foro: http://reinosdelcaos.gratisforos.com/

 


#4 Setaka

Setaka

    Ancillae

  • Miembro
  • PipPipPip
  • 366 posts

Posteado 20 February 2017 - 10:58 PM

Justamente pregunté por algo así hace 4-5 días tío. Nos solucionas la vida a pasos agigantados, mil gracias! :D

 

No es casualidad, que lo scripteé a partir de tu tema  :thumb:


Tutorial NWN Scripting: Click aquí


#5 Zoraga

Zoraga

    Neonato

  • Miembro
  • PipPip
  • 192 posts

Posteado 21 February 2017 - 08:53 AM

int PROB_ORIT = 50; //y si sale oro, probabilidad de dar acceso a también un item
int PROB_IT = 100; //probabilidad de que salga un item (depende de si ha salido oro o no)

 
Unas preguntas para no liarme xD:
 
¿Variable ORIT sería oro + item y variable IT sería solo item?, ¿si pongo ambas no funcionaría la segunda?. (mirando variables individuales).

 

int TIEMPO_MINUTOS = 1; ////POR DEFECTO: minutos de regeneracion

 

¿Se puede usar como variable individual?.


Editado por Zoraga, 21 February 2017 - 09:40 AM.

Colaborando en:



Nombre servidor: ES) Reinos del Caos
Tipo de servidor: rol/acción
Jugadores: 1-25
Niveles: 1-30
Base literaria: Inventada.
IP (conectar directamente): 74.208.227.175:5121
Foro: http://reinosdelcaos.gratisforos.com/

 


#6 Setaka

Setaka

    Ancillae

  • Miembro
  • PipPipPip
  • 366 posts

Posteado 21 February 2017 - 03:30 PM

No bien bien. PROB_ORIT determina si se accede a la probabilidad PROB_IT cuando se ha cumplido PROB_OR. Es para añadir más variabilidad y que el dar oro no esté impidiendo automáticamente el acceso a objetos. Después PROB_IT está al 100 porque siempre que no salga oro dará un ítem, pero lo dejé configurable por si se quiere hacer cofres que a veces no den nada de nada (como el cofre papelera que puse, o por ejemplo "cofres" plantas que solo quieres que de su ingrediente un 10% de las veces).

 

La lógica del script en el sistema por defecto (sin configurar variables individuales) es:

 

Solo da oro: PROB_OR? Se cumple -> damos oro. PROB_ORIT? No se cumple, paramos script.

 

Sale oro + item(s): PROB_OR? Se cumple -> damos oro. PROB_ORIT? Se cumple-> PROB_IT? Se cumple (por defecto está a 100), damos también un item. PROB_REPETIMOS? Se cumple, volvemos a dar item y repetimos tirada PROB_REPETIMOS hasta que salga de la probabilidad.

 

Solo da item(s): PROB_OR? No se cumple. PROB_IT? Se cumple (al 100, siempre se cumple), damos item. PROB_REPETIMOS? Se cumple, volvemos a dar item y repetimos tirada PROB_REPETIMOS hasta que salga de la probabilidad

 

 

Esto por ejemplo te permite hacer cofres estilo bolsa de monedas, pero que a veces pueda salir alguna gema. Por ejemplo pondría PROB_OR=100 (siempre da oro), PROB_ORIT=20 (20% de las veces saldrá con el oro una gema que hayas puesto en el cofre). Sería lo mismo poner PROB_ORO=100, PROB_ORIT=100, PROB_IT=20... pero mal optimizado porque accedes al sistema de entrega de objetos cuando no tienes porque.

 

 

 

Y la variable TIEMPO_MINUTOS también se puede usar de forma individual, sí. Aunque no lo he testeado xD Solo testeé en el cofre que pinté que si la pones a -1 lo convierte en cofre sin regeneración.

  


Tutorial NWN Scripting: Click aquí


#7 lavafuego

lavafuego

    Ancillae

  • Miembro
  • PipPipPip
  • 378 posts

Posteado 21 February 2017 - 09:04 PM

tenia un sistema (bastante arcaico ) de la creación de objetos...en uno de mis primeros modulos. en vez de generar tesoros aleatorios, creaba un cofre y le metía manualmente lo que quería...100 monedas un arco y un escudo....por ejemplo. y en el onopen mediante un script almacenaba lo que tenia el cofre. (script genérico para todos los cofres que se quiera)

marcaba al pj que abría el cofre para que no generara mas veces el tesoro, y también dejaba un tiempo de regeneración. si pasaba ese tiempo y abría otro pj generaba el tesoro inicial que tenia almacenado en el propio cofre (limpiando el posible inventario para no duplicar etc)

lo pongo por si a alguien le interesa

 

 

 

void Crear(object oContenedor,object oJugador) //creamos funcion para crear los objetos
{
 int iCantidadAsumar=GetLocalInt(oContenedor, "cantidadobjetos");//cantidad de objetos a crear
 
   int numero= iCantidadAsumar;
      while (numero>0) //mientras que vayamos restando y no sea cero creamos objeto almacenado
        {
         string sNombre="objeto";
         string snumero= IntToString(numero);
         string snumerofinal= sNombre+snumero;
         int iCantidad=GetLocalInt(oContenedor,snumerofinal);
         string sAcrear=GetLocalString(oContenedor,snumerofinal);
         CreateItemOnObject(sAcrear, oContenedor, iCantidad );
          numero--;
        }
     SetLocalInt(OBJECT_SELF,"iYaCogio"+ GetName(oJugador),1);//marcamos al pj que genera el tesoro para que no vuelva a generarlo
     SetLocalInt(OBJECT_SELF, "activo",TRUE);//cambiamos variable para no generar tesoro
     DelayCommand(1500.0, SetLocalInt(OBJECT_SELF, "activo",FALSE));///////tiempo reaparicion tesoro por pj no marcado
 
 
}
 
 
 
 
void main()
{
object oContenedor=OBJECT_SELF;//el contenedor de los objetos
object oJugador = GetLastOpenedBy();//quien abre el cofre
if( GetLocalInt(oContenedor, "primeravez")==0)
{
 
    SetLocalInt(OBJECT_SELF,"iYaCogio"+ GetName(oJugador),1);//marcamos al pj que genera el tesoro para que no vuelva a generarlo
    SetLocalInt(OBJECT_SELF, "activo",TRUE);//cambiamos variable para no generar tesoro
    DelayCommand(1500.0, SetLocalInt(OBJECT_SELF, "activo",FALSE));///////tiempo reaparicion tesoro por pj no marcado
    SetLocalInt(oContenedor, "cantidadobjetos", 0);//nos aseguramos de que la int tenga valor 0
 
   object oObjetoEnInventario=GetFirstItemInInventory(oContenedor); //miramos primer objeto del cofre
   while (GetIsObjectValid(oObjetoEnInventario)) //si el objeto es valido
     {
       int iCantidadAsumar=GetLocalInt(oContenedor, "cantidadobjetos");//obtenemos la cantidad de objetos que vamos contando
       SetLocalInt(oContenedor, "cantidadobjetos", iCantidadAsumar+1);//le sumamos uno
       string sNombre="objeto";
       int iNumero=GetLocalInt(oContenedor, "cantidadobjetos");
       string sNumero=IntToString(iNumero);
       string sFinal= sNombre+sNumero;//damos nombre a variable junto con el numero de objeto
       // FloatingTextStringOnCreature("string guardado: "+sFinal, oJugador,TRUE);////////////////////// test
       SetLocalString(oContenedor, sFinal, GetTag(oObjetoEnInventario));//guarmadmos en la variable el tag del objeto
       int icantidad=GetItemStackSize(oObjetoEnInventario);
       SetLocalInt(oContenedor,sFinal,icantidad);//guardamos en la variable la cantidad de apilamiento del objeto
       oObjetoEnInventario=GetNextItemInInventory(oContenedor);
     }
 
 
 
SetLocalInt(oContenedor, "primeravez",1);//marcamos como que ya se ha abierto una vez el contenedor
}//fin if primera vez
else //si no es la primera vez
{
 if(( GetLocalInt(OBJECT_SELF, "activo")==FALSE)&&  (GetLocalInt(OBJECT_SELF,"iYaCogio"+ GetName(oJugador))==0))//si ha pasado el tiempo de regeneracion y el pj que lo abre no lo habia echo antes
 
   {
 
     object oObjetoEnInventario=GetFirstItemInInventory(oContenedor);//limpiamos el inventario del cofre
      while (GetIsObjectValid(oObjetoEnInventario))
        {
         DestroyObject(oObjetoEnInventario,0.0);
         oObjetoEnInventario=GetNextItemInInventory(oContenedor);
        }
 
 
     DelayCommand(0.3,Crear(oContenedor,oJugador));//creamos los objetos originales
   }
 
}
}
 
 
 
 
si se quiere cambiar el tiempo de regeneracion cambiar el delay  (esta dos veces en el script) esta a 1500 segundos por lo que querais
 
--->DelayCommand(1500.0, SetLocalInt(OBJECT_SELF, "activo",FALSE));///////tiempo reaparicion tesoro por pj no marcado
 
si quereis que pueda generar el tesoro el mismo pj que lo abrió ya una vez suprimir esta linea (que esta en dos sitios)
 
---> SetLocalInt(OBJECT_SELF,"iYaCogio"+ GetName(oJugador),1);//marcamos al pj que genera el tesoro para que no vuelva a generarlo
        
 
 
Perdona por usar tu post setaka pero no quería abrir mil hilos sobre tesoros y sistemas, así reunidos en uno para buscar va mejor jeje

Editado por lavafuego, 21 February 2017 - 09:08 PM.

http://tierrasdenemar.mi-foro.es/  (abierto para test 79.109.30.79:5121 )


#8 Zoraga

Zoraga

    Neonato

  • Miembro
  • PipPip
  • 192 posts

Posteado 22 February 2017 - 02:08 AM

Gracias por la aclaración Setaka, ahi lo tengo mas claro. Gracias :D

 

PROB_REPETIMOS hasta que salga de la probabilidad.

 

Una duda aquí, si lo dejo en 100 no se forma bucle?

 

Y otra, ¿vi algunas variables en -1, si las dejo en 0 que diferencia hay?

 

 

 

 

Ese script Lava, se ve bueno para hacer drops rápidos en un area específica o en un cofre para algún evento DM, ahí lo miro también. Thx


Editado por Zoraga, 22 February 2017 - 10:04 AM.

Colaborando en:



Nombre servidor: ES) Reinos del Caos
Tipo de servidor: rol/acción
Jugadores: 1-25
Niveles: 1-30
Base literaria: Inventada.
IP (conectar directamente): 74.208.227.175:5121
Foro: http://reinosdelcaos.gratisforos.com/

 


#9 lavafuego

lavafuego

    Ancillae

  • Miembro
  • PipPipPip
  • 378 posts

Posteado 22 February 2017 - 10:22 AM

Lo hice pensando en generar en cofres siempre lo mismo...Tesoros de quest etc. Aquí tienes el de aleatorio y el fijo, en el mismo post para no poner mil hilos de lo mismo. Habría que actualizar la sección de script del foro y hacer link a todos sistemas que ha postrado setaka y minitutoriales que hay por aquí para hacer búsquedas rápidas

http://tierrasdenemar.mi-foro.es/  (abierto para test 79.109.30.79:5121 )


#10 Khan51

Khan51

    Neonato

  • Miembro
  • PipPip
  • 137 posts

Posteado 22 February 2017 - 12:31 PM

Lo hemos implementado en el servidor y por ahora funciona perfectamente Setaka, gracias mil otra vez :D 


"La ignoracia convencida, no tiene remedio. . ."

 


#11 Setaka

Setaka

    Ancillae

  • Miembro
  • PipPipPip
  • 366 posts

Posteado 22 February 2017 - 02:24 PM

Genial aportación Lava, así ya tenemos todo  :thumb:

 

Zoraga, es al revés, PROB_REPETIMOS a 100 le estás diciendo que el 100% de las veces que salga un objeto, también salga otro. A 100 creas un bucle infinito y petará ya que la probabilidad se aplica otra vez a cada objeto nuevo para no limitarlo a solo dos objetos. Si lo pones por ejemplo a 50, significa que si sale un objeto, hay 50% de que salga otro del cofre. Si no sale, se para el script. Si sale otro objeto, vuelve a aplicar 50% para que salga otro y así. No le puse ningún control de ciclos ni reducción de % a cada ciclo, pero es fácil ponerlo uno mismo (en las últimas línea de la función propia, donde se llama a sí misma, poner PROB_REPETIMOS-5 por ejemplo).

 

El -1 sirve para que ni haga tirada y se ahorre leer parte del script. También es porque tengo puesto que si no encuentra la variable (porque no está definida), lea la que hay por defecto definida en el script. Y cómo GetLocalInt si no encuentra la variable devuelve 0, es una forma de diferenciar si lo que quieres es que sea 0% de probabilidad (-1) o que lea las probabilidades por defecto (representado por el valor por defecto de la función, 0).


Tutorial NWN Scripting: Click aquí


#12 Setaka

Setaka

    Ancillae

  • Miembro
  • PipPipPip
  • 366 posts

Posteado 10 March 2017 - 01:06 PM

¿Entonces no se ha encontrado ningún bug? Sería una novedad la verdad :P


Tutorial NWN Scripting: Click aquí


#13 lavafuego

lavafuego

    Ancillae

  • Miembro
  • PipPipPip
  • 378 posts

Posteado 10 March 2017 - 01:35 PM

dale tiempo....los screep acechan jajaja y cuando menos te lo esperas zas¡¡¡¡

 

No he podido evitar lo del screep :( 


http://tierrasdenemar.mi-foro.es/  (abierto para test 79.109.30.79:5121 )


#14 Zoraga

Zoraga

    Neonato

  • Miembro
  • PipPip
  • 192 posts

Posteado 10 March 2017 - 06:55 PM

Hasta el momento anda bien, ningún fallo, he probado diversas circunstancias, con otros personajes igual, ahorra bastante tiempo editar variables en lugar de editar un tag, como lo hacía con otros sistemas que uso.

 

Se ha complementado muy bien con los otros sistemas igual quedando todo mas balanceado, como el de Txibi para drops comunes y compartidos, el de Lava para drops especiales improvisados, y el de Setaka para drops especiales permanentes.

 

 

 

Antes estaba usando otro sistema parecido al de Setaka para cofres permanentes, que habia bajado del vault, pero que me limitaba a 5 cofres base, estos se me saturaban y aveces fallaba el respawn, cosas que hasta el momento se han manejado bien.


Colaborando en:



Nombre servidor: ES) Reinos del Caos
Tipo de servidor: rol/acción
Jugadores: 1-25
Niveles: 1-30
Base literaria: Inventada.
IP (conectar directamente): 74.208.227.175:5121
Foro: http://reinosdelcaos.gratisforos.com/

 


#15 Khan51

Khan51

    Neonato

  • Miembro
  • PipPip
  • 137 posts

Posteado 13 March 2017 - 10:33 AM

Nosotros lo hemos implementado también y hasta ahora ningún bug ni nada por el estilo Setaka :P


"La ignoracia convencida, no tiene remedio. . ."

 




Responder



  


A Bragol. Tus amigos te echan de menos.