Página 1 de 1

NoExp Mejorado

NotaPublicado: 08 Mar 2007 18:15
por Seldaiendil
Bien, esta vez escribo para aclarar un trigger de los que traen mas de cabeza a los remorts según tengo entendido: Noexp.
(Nota: al final del texto está el código completo de la clase.)
El mayor problema es que al leer la experiencia el zMud también lee las comas (que deberian ser puntos) que separan cada tres cifras.
En caso que solo esté una coma lo interpretará como decimal, pero si tienes millares en el numero habrán dos comas y lo interpretará como simple texto.
Asi que lo que hace este es unir cada tres digitos de forma que sigan siendo numeros y se puedan comparar con 50000.

Siguiendo el ejemplo de mi prompt seria así:


Código: Seleccionar todo
#trigger {*mv &milexp,&{unidadexp}exp} {
   #math milexp @milexp*1000
   #math totalexp @milexp+@unidadexp
   if(@totalexp<50000){
      config +noexp
      #t- ""*mv &milexp,&{unidadexp}exp""
   }
}


Si tu prompt contiene millar este trigger no se ejecuta hasta que la experiencia faltante sea menor o igual a 999.999.
Si aún así quieres otro trigger aparte que al anterior que analize tu exp cuando aun sea más de un millon sería:


Código: Seleccionar todo
#trigger {*mv &millonexp,&milexp,&{unidadexp}exp} {
   #math millonexp @millonexp*1000000
   #math milexp @milexp*1000
   #math totalexp @millonexp+@milexp+@unidadexp
   if(@totalexp<5000000){
      config +noexp
      #t- ""*mv &milexp,&{unidadexp}exp""
   }
}


Como se ve, en este caso se compara con 5.000.000, no lo podemos comparar con 50.000 porque si fuese menor de 1.000.000 este trigger nisiquiera se ejecutaria.

Incluso podemos ir más lejos, este es parte del trigger que uso, que guarda en la memoria la exp que ya tienes adquirida.
La primera es para los que aún no tienen millar aunque no está de mas poner las dos.


Código: Seleccionar todo
#TRIGGER {^|| EXP : &sumaexpm,&sumaexpu(*)Pract} {
   #var sumaexpu %number( @sumaexpu)
   #math a @sumaexpm*1000
   #math sumaexp @sumaexpu+@a
   #math porexp @sumaexp/@totalexp*5
   #wait 150
   #if (@porexp < 80) {config -noexp} {config +noexp}
}

#TRIGGER {^|| EXP : &sumaexpmll,&sumaexpm,&sumaexpu(*)Pract} {
   #math sumaexpmll @sumaexpmll*1000
   #math sumaexpm @sumaexpm+@sumaexpmll
   #var sumaexpu %number( @sumaexpu)
   #math a @sumaexpm*1000
   #math sumaexp @sumaexpu+@a
   #math porexp @sumaexp/@totalexp*5
   #wait 150
   #if (@porexp < 80) {config -noexp} {config +noexp}
}


Según tengo entendido, al subir de nivel la experiencia faltante es un 20% de la experiencia adquirida, por eso el valor totalexp se multiplica por 5 (5 x 20 = 100%

Y puesto que cuando la exp más cambia es al matar no está de más tener esto:


Código: Seleccionar todo
#TRIGGER {ha muerto!&} {
   #math porexp @sumaexp/@totalexp*5
   #wait 150
   #if (@porexp < 80) {config -noexp} {config +noexp}
}


Al llegar al 10% de la experiencia que necesitabamos al entrar al nivel se bloquea.

En fin, aqui dejo el codigo completo, solo hay que pegarlo tal cual en tu zMud y para eliminaro hay que ir al botón "Classes" y borrar la carpeta llamada "Exp"
Por supuesto están incluidos los Triggers que anulan la clase cuando no puedes hacer más quests y la que lo reactiva al subir.
IMPORTANTE: reemplaza el texto "<<<|||ATENCIÓN, AQUÍ PON TU NOMBRE!!!|||>>>" por tu nombre, para evitar que se desactive cuando el questman le dice eso a otro jugador.

---

#CLASS {exp}
#ALIAS calculaExp {
#math a @sumaexpm*1000
#math sumaexp @sumaexpu+@a
#math porexp @sumaexp/@totalexp
#wait 1000
#if (@porexp < 80) {config -noexp} {config +noexp}
}
#TRIGGER {ha muerto!&} {calculaExp}
#TRIGGER {^El Questman dice 'Lo siento
<<<|||ATENCIÓN, AQUÍ PON TU NOMBRE!!!|||>>>, llevas demasiado tiempo en ese nivel para seguir haciendo quests'$} {
#T- exp
config -noexp
}
#TRIGGER {^|| EXP : &sumaexpm,&sumaexpu(*)Pract} {
#if (%number( @sumaexpm) = 0) {} {calculaExp}
}
#TRIGGER {^|| EXP : &sumaexpmll,&sumaexpm,&sumaexpu(*)Pract} {
#math sumaexpmll @sumaexpmll*1000
#math sumaexpm @sumaexpm+@sumaexpmll
#var sumaexpu %number( @sumaexpu)
calculaExp
}
#TRIGGER {*mv &milexp,&{unidadexp}exp} {
#if (%number( @milexp) = 0) {} {
#math milexp @milexp*1000
#math totalexp @milexp+@unidadexp
}
}
#TRIGGER {*mv &millexp,&milexp,&{unidadexp}exp} {
#math millexp @millexp*1000000
#math milexp @milexp*1000
#math totalexp @millexp+@milexp+@unidadexp
}
#CLASS 0
#TRIGGER {^HAS SUBIDO A NIVEL (*)} {#T+ exp}


---
Sel

NotaPublicado: 08 Mar 2007 21:30
por Kavian
manso webeo xD
pero gracias!

NotaPublicado: 09 Mar 2007 04:09
por Soulsurf
:shock:

NotaPublicado: 09 Mar 2007 05:41
por viruta
LoL :shock:

Todo eso para kedarte pegadito de exp antes de subir de nivel?Me fio mas manualmente xDDDD

Pero algunos te lo agradeceran

NotaPublicado: 13 Mar 2007 05:40
por Seldaiendil
Si xDD
Siempre sera mas fiable bloquearlo al subir, pero es q me aburria xD
---
Sel

NotaPublicado: 10 Sep 2007 00:33
por vardamir
#ALIAS subir {#t+ subir;config -noexp}
#TRIGGER {~) (%1)xp ~[} {exp=%concat( %1);#if (@exp<300000) {config +noexp;#t- experiencia}} {experiencia}
#TRIGGER {HAS SUBIDO A NIVEL (%*)!!!!!! :)} {#t+ experiencia} {subir}