Saltar al contenido
Callandor

Referencia de progs

Tipos de prog, variables, condiciones y comandos. Para aprender a programar, empieza por la guía de progs.

Esta es la página de consulta. Para aprender cómo se crea un prog y cómo se escribe, ve primero a la guía de progs.

Tipos de prog

Se escribe el tipo en el editor y se fija el argumento con trigger <argumento>. En los tipos con porcentaje, el prog salta si un número al azar de 1 a 100 es menor que el argumento.

Cuando entra o sale alguien

  • greet_prog <porcentaje>: alguien entra en la habitación del mob y el mob lo ve. Salta también si quien entra es otro mob, por eso se suele empezar con if isnpc($n).
  • all_greet_prog <porcentaje>: lo mismo, aunque el mob no lo vea (oscuridad, invisibilidad).
  • exit_prog <porcentaje>: alguien se va de la habitación y el mob lo ve.
  • all_exit_prog <porcentaje>: lo mismo, aunque no lo vea.
  • exit_dir_prog <dirección>: un jugador se va por esa salida. La dirección es un número: 0 norte, 1 este, 2 sur, 3 oeste, 4 arriba y 5 abajo.
  • leave_prog <dirección>: un jugador intenta irse por esa dirección. El movimiento se cancela: si quieres que pase, el prog tiene que moverlo con mpforce.
  • flee_prog <dirección>: igual que leave_prog, y también cancela el movimiento, pero no salta para los miembros de la asociación a la que pertenece el guardián ni para los invitados. Es el de los guardias de asociación.
  • marcharse_prog <dirección>: igual que leave_prog, pero el jugador sigue su camino a menos que el prog use mpregreso con él. Casi no se usa.
  • entry_prog <porcentaje>: el propio mob acaba de entrar en una habitación porque se ha movido.
  • portal_prog <porcentaje>: alguien usa un portal en la habitación del mob.
  • montar_prog: un jugador monta al mob.

Cuando alguien habla

  • speech_prog <palabras>: alguien dice algo con decir, susurrar, preguntar, cantar o gritar, y el mob está en la habitación. Salta si lo dicho contiene cualquiera de las palabras del argumento, como palabra entera y sin distinguir mayúsculas. Si el argumento empieza por p , hace falta la frase completa: p dadme un chal gris.
  • act_prog <palabras>: igual, pero sobre el texto de cualquier acción que el mob presencie, con los colores quitados. Por ejemplo, un mensaje de «te da» o «abre». Funciona con el mismo método de palabras que speech_prog.
  • act2_prog <expresión regular>: lo mismo con una expresión regular en lugar de palabras sueltas.

Cuando pasa algo con el mob

  • give_prog <nombre del objeto> o all: alguien le da un objeto. El argumento tiene que ser exactamente el campo nombre del objeto, con todas sus palabras y en el mismo orden, o empezar por all para que salte con cualquiera. $o es el objeto.
  • bribe_prog <cantidad>: alguien le da dinero. La cantidad se da en peniques de cobre, y salta si le dan al menos eso. El mob se queda con la cantidad pedida y devuelve el resto.
  • barquero_prog <precio>: alguien le paga como a un barquero. A los personajes de nivel menor que 10 se les cobra una décima parte.
  • dice_prog <monedas>: se usa en los mobs jugadores de dados, cuando el mob tiene justo esa cantidad.
  • fallo_abrir_prog <vnum del objeto>: alguien no consigue abrir un objeto con ese vnum.
  • load_prog: el mob acaba de crearse por un reset. Sin argumento.

En combate

  • fight_prog <porcentaje>: en cada ronda de combate del mob.
  • hitprcnt_prog <porcentaje>: en cada ronda, mientras la vida del mob esté por debajo de ese porcentaje.
  • attack_prog <porcentaje>: un jugador empieza un combate con el mob.
  • death_prog <porcentaje>: el mob muere a manos de un jugador. $n es quien lo mató. No salta si lo mata otro mob.
  • enemyd_prog: el mob mata a un jugador. $n es el jugador muerto.

Periódicos y diferidos

  • rand_prog <porcentaje>: cada vez que el mud actualiza a los mobs.
  • wait_prog <número>: lo dispara mpwait. Salta cuando termina una espera con ese número.

Comandos

  • comando_prog <palabras>: un jugador escribe un comando cuya primera palabra empieza por alguna de las del argumento, con el mob o el objeto en su habitación (o el objeto en su inventario). El prog se ejecuta después del comando. En el prog, #0 es todo lo que se escribió detrás del comando.
  • sub_com_prog <palabras>: igual, pero el prog sustituye al comando, que no llega a ejecutarse.

Otros

  • in_file_prog: antiguo, para progs que vivían en archivos aparte. No se usa.

Variables

Se escriben dentro de las órdenes del prog y se sustituyen al ejecutarlas.

Las personas

  • $n es quien ha disparado el prog, con la primera letra en mayúscula si es un jugador.
  • $N es su descripción corta si es un mob, o su nombre si es un jugador.
  • $e es «él» o «ella» según su sexo, $m es «a él» o «a ella», y $s es la terminación o o a, para frases como chic$s → chico o chica.
  • $b es su nivel.
  • $i es la primera palabra del nombre del propio mob, y $I su descripción corta.
  • $j, $k y $l son «él», «a él» y la terminación o o a del propio mob.
  • $f es el nombre de a quien está atacando el mob.
  • $r y $R son el nombre y la descripción de un jugador al azar de la habitación, que el mob pueda ver. $J, $K y $L son sus pronombres. Si no hay nadie, salen vacíos.
  • $t y $T son el nombre y la descripción de un segundo personaje, el objetivo de la acción, y $E, $M y $S son sus pronombres. Solo son fiables en act_prog.

Los objetos

  • $o y $O son el nombre y la descripción corta del objeto del prog, como el que se da con give_prog.
  • $p y $P son los de un segundo objeto.
  • $v es el vnum del objeto.
  • $a y $A son el artículo un.

Los argumentos

  • #0 es todo lo que se escribió detrás del comando, y #1 a #9 son la primera a la novena palabra. Solo existen en comando_prog y sub_com_prog.
  • $$ es un signo de dólar.

Estructuras de control

  • if <condición>, ifnot <condición>, or <condición>, else y endif. Hasta 20 niveles de anidamiento.
  • exit y break terminan el prog.
  • mpsleep <pulsos> pausa el prog. Cada pulso es una quinta parte de segundo.
  • silent <comando> ejecuta el comando sin sus mensajes. No se usa en las áreas actuales.

Condiciones

Una condición es nombre(argumento), con el argumento entre paréntesis y sin espacios. Si compara números, sigue un operador y un valor: level($n) >= 10. Los operadores son ==, !=, >, <, >= y <=. Para texto, == y !=.

El argumento es, según la condición:

  • una persona ($n, $i, $t, $r o $f),
  • un objeto ($o o $p),
  • un número o nombre, o
  • un # y una cifra, para mirar una palabra de lo que escribió el jugador.

Sobre la persona

  • ispc($n) y isnpc($n): es jugador o es mob. isimmort($n): es inmortal.
  • isgood, isneutral e isevil: su alineamiento.
  • isfight($n) e isnfight($n): está o no está peleando.
  • ischarmed, isfollow, ismounted, isholding, isnholding, isdead e isstealth.
  • cansee($n) y cannotsee($n): puede o no puede ver (ciego, o a oscuras sin infravisión).
  • hat($n): lleva algo en la cabeza o un velo.
  • encauza($n) y notencauza($n): puede o no puede encauzar.
  • isaffected(<bit>), isaffected2 e isaffected3: tiene ese efecto. El argumento es el número del bit.
  • isvisionario($n) e isincarav($n): es visionario, o está con su caravana en la habitación.

Raza y origen

isaiel, isseanchan, isoeste, isathan, isogier, isnym, istrolloc, ismyrddraal e isengendro (trolloc o myrddraal). Casi todas tienen su contraria con n delante: isnaiel, isnseanchan, isnoeste, isnathan, isnogier, isnnym, isntrolloc, isnmyrddraal e isnengendro.

Números

Se usan con operador y valor:

  • level($n): el nivel de confianza. hitprcnt($n): su porcentaje de vida.
  • sex($n): 0 neutro, 1 hombre y 2 mujer.
  • class($n) y pclass($n): su clase y su clase de prestigio, por número. Los personajes con remort tienen reglas propias, mira el código antes de fiarte de ellos.
  • position($n): su postura.
  • inroom($n): el vnum de su habitación. number($n): el vnum de un mob.
  • goldamt($n): el dinero que lleva, en peniques de cobre.
  • isweight($n): lo que pesa lo que lleva.
  • isfue, isdes, iscon, isint, issab e iscar: sus atributos.
  • isrank($n): su rango en la asociación. weavesight($n): su dominio de reconocer tejido.
  • name($n) == <nombre>: compara su nombre.

Lo que lleva

  • iscarrying($n) == <vnum> e isncarrying($n) == <vnum>: lleva o no lleva en el inventario un objeto con ese vnum.
  • iswearing($n) == <vnum> e isnwearing($n) == <vnum>: lo lleva puesto o no.
  • wields($n) y notwields($n): empuña o no algún arma.

Asociaciones

  • es_aso($n) == <nombre>: es de la asociación con ese nombre. isaso($n) == <vnum> e isnaso($n) == <vnum>: es o no es de la asociación cuyo guardián tiene ese vnum.

Misiones y marcas

  • wq_iniciado($n) <misión> y wq_finalizado($n) <misión>: ha empezado o ha terminado esa misión de mundo.
  • wq_paso1($n) <misión>, wq_paso2... : ha cumplido ese paso de la misión.
  • marcado($n) <número> y no_marcado($n) <número>: tiene o no una marca puesta con mpmarcar.
  • canlearn($n) y cannotlearn($n): puede o no aprender lo que enseña el mob.
  • hasoneskill($n): conoce al menos una habilidad de un grupo concreto de armas.

Los nombres de misión son: ninguno, cuarto-ataque, guarda-maestra, portal, pracs-encauzas, golpe-mortal, lucha-dos-perfecto, entrenamiento, heroismo, maestria, oro, dos-mil-exp, pracs-trota, pracs-guerrero, locura-anillo, cien-pqs, espada-luz, libro-ogier, instinto, gremio-asesinos, fundirse, reciclar-prac, fuego-compacto, auxiliar, wq-25, wq-26, wq-27, wq-28, wq-29, wq-30, wq-31, wq-32, wq-33, wq-34, wq-35, wq-36, max.

Sobre la habitación y el mundo

  • rand(<n>): cierta con un n % de probabilidad. Es la manera de dar azar a un prog. aleatorio(<n>) es cierta si el número que sacó mpaleatorio es n.
  • isday e isnight: es de día (entre las 6 y las 20) o de noche. timeofday(<hora>) compara con una hora concreta.
  • isexit(<dirección>): la habitación tiene salida en esa dirección (número).
  • isheremob(<vnum>) y isnheremob(<vnum>): hay o no hay un mob con ese vnum en la habitación. haymob y nohaymob son sinónimos.
  • ishereobj(<vnum>) y isnhereobj(<vnum>): hay o no hay en el suelo un objeto con ese vnum. hayobj y nohayobj son sinónimos.
  • herefight(<vnum>) y herenfight(<vnum>): ese mob está o no está peleando. luchando y noluchando son sinónimos.

Sobre un objeto

  • objtype($o) e istype($o): el tipo, por número. weight($o): el peso. number($o): el vnum.
  • objval0($o) a objval4($o): el valor v0 a v4.
  • isextra($o) <bit>, isnextra, isextra2 e isnextra2: tiene o no ese flag extra, por número del bit.

Sobre texto

Sirven para validar lo que el jugador escribe en un comando_prog:

  • sin_texto(#0) y con_texto(#0): no ha escrito nada, o ha escrito algo.
  • comparar(#1) <palabra>: la primera palabra es exactamente esa.
  • prefijo(#1) <palabra>: la primera palabra es el principio de esa palabra.

La lista completa de condiciones que reconoce el mud, tal como la lee el código, es esta (115):

  • comparar
  • prefijo
  • con_texto
  • sin_texto
  • rand
  • timeofday
  • isexit
  • aleatorio
  • isheremob
  • haymob
  • isnheremob
  • nohaymob
  • ishereobj
  • hayobj
  • isnhereobj
  • nohayobj
  • herefight
  • luchando
  • herenfight
  • noluchando
  • ispc
  • isnpc
  • ismounted
  • isgood
  • isneutral
  • isevil
  • isfight
  • isnfight
  • isimmort
  • ischarmed
  • isfollow
  • isaffected
  • isaffected2
  • isaffected3
  • isholding
  • isnholding
  • hitprcnt
  • wq_iniciado
  • wq_finalizado
  • marcado
  • no_marcado
  • hasoneskill
  • weavesight
  • iscarrying
  • isncarrying
  • iswearing
  • isnwearing
  • wields
  • notwields
  • inroom
  • sex
  • position
  • level
  • class
  • pclass
  • sini
  • black
  • ajah
  • hat
  • encauza
  • notencauza
  • canlearn
  • cannotlearn
  • isvisionario
  • isincarav
  • isaiel
  • isnaiel
  • isseanchan
  • isnseanchan
  • isoeste
  • isnoeste
  • isathan
  • isnathan
  • isogier
  • isnogier
  • isnym
  • isnnym
  • istrolloc
  • isntrolloc
  • ismyrddraal
  • isnmyrddraal
  • isengendro
  • isnengendro
  • isdead
  • isfue
  • isdes
  • iscon
  • isint
  • issab
  • iscar
  • isweight
  • es_aso
  • isaso
  • isnaso
  • isrank
  • goldamt
  • number
  • name
  • isday
  • isnight
  • cansee
  • cannotsee
  • isstealth
  • objtype
  • weight
  • objval0
  • objval1
  • objval2
  • objval3
  • objval4
  • isextra
  • isnextra
  • isextra2
  • isnextra2
  • istype

Comandos de prog

Los comandos que empiezan por mp solo los usa un mob, desde un prog. Si un jugador los escribe, el mud contesta «Como?». Un mob encantado no los ejecuta. Los que se usan más son estos.

Mensajes

  • mpecho <texto>: lo ve todo el que esté en la habitación, menos el mob.
  • mpechoat <persona> <texto>: solo lo ve esa persona.
  • mpechoaround <persona> <texto>: lo ven todos menos esa persona y el mob.
  • mpasound <texto>: lo ven los de las habitaciones contiguas.
  • mpsonido <jugador> <tipo> <ámbito> <sonido>: pone un sonido. El tipo es aviso, sonido o musica, y el ámbito es ch, room, adyacentes, area, mundo o admins.

Objetos

  • mpoload <vnum> [nivel]: crea un objeto. Si se puede coger, se lo queda el mob. Si no, queda en el suelo.
  • mpgive <objeto> <persona>: le da un objeto del mob. Si la persona no puede cargarlo, lo deja en el suelo.
  • mpdrop <objeto> deja uno en el suelo, y mpget <objeto> coge uno del suelo.
  • mpjunk <objeto> destruye un objeto del mob, mpjunk todo destruye todo lo que lleva.
  • mppurge [objeto]: sin argumento, destruye todos los objetos del suelo, salvo los cadáveres de jugadores. Con un objeto, destruye ese.
  • mpmangar <jugador> <vnum>: le quita al jugador el objeto con ese vnum y se lo queda el mob.
  • mpobjainv <jugador> <vnum>: mete un objeto en el inventario del jugador.
  • mpuse <objeto>: el mob se pone o empuña un objeto de su inventario.

Mobs y combate

  • mpmload <vnum>: crea un mob en la habitación.
  • mpkill <persona>: el mob ataca. mpslay <mob>: elimina un mob de la habitación al instante. No funciona con jugadores.
  • mpdamage <persona|all> <mínimo> <máximo>: hace un daño al azar entre esos valores. all afecta a todos los jugadores de la habitación. mpdamonly es parecido.
  • mpheal <persona>: le quita maldición, ceguera, veneno y plaga, y le cura de 10 a 20 puntos.
  • mprestore <persona>: devuelve la vida al máximo. mprestore self cura al propio mob.
  • mppeace: detiene los combates de la habitación.
  • mpforce <persona|all> <comando>: obliga a alguien a hacer algo. all es todos los de menor nivel que el mob.
  • mpnothing: no hace nada. Sirve para tener algo que poner en una rama de un if.

Moverse y mover

  • mpgoto <lugar>: el mob se va a ese sitio. El lugar se escribe como en goto.
  • mpat <lugar> <comando>: el mob ejecuta un comando en otro sitio y vuelve.
  • mptransfer <persona|all> [lugar]: manda a alguien al lugar. Sin lugar, lo trae a la habitación del mob. all mueve a todos los jugadores de la habitación. No puede mandar a una habitación privada.
  • mpvis y mpinvis: el mob se hace visible o invisible. Un mob invisible solo se ve con holylight.

Estado y premios

  • mpset oro <cantidad>: pone dinero al mob. Hay más opciones, como hambre, sed, nivel, prac, pquest, instinto y locura, que cambian al jugador de la habitación.
  • mpbonus <jugador> <experiencia>: da de 1 a 1000 puntos de experiencia.
  • mppqs <jugador> <puntos>: da o quita puntos de quest, de -1000 a 1000.
  • mpmarcar <jugador> <marca> y mpdesmarcar <jugador> <marca>: pone y quita una marca, un número que luego se comprueba con marcado y no_marcado.
  • mpwquest <jugador> <iniciar|pasoN|finalizar> <misión>: avanza una misión de mundo.
  • mpaleatorio <mínimo> <máximo>: el mob saca un número al azar y lo recuerda, para comprobarlo con aleatorio(n).
  • mpwait <número> <tiempo> [jugador]: ver la guía de progs.

La lista completa

Los 52 comandos de prog que existen son:

  • mpadaptarse
  • mpaleatorio
  • mpan_entrar
  • mpan_pedir
  • mpasound
  • mpat
  • mpbonus
  • mpdamage
  • mpdamonly
  • mpdesmarcar
  • mpdesparasitar
  • mpdrop
  • mpecho
  • mpechoaround
  • mpechoat
  • mpenvainar
  • mpforce
  • mpforjamyr
  • mpget
  • mpgive
  • mpgoto
  • mpgusano
  • mpheal
  • mpinmune
  • mpinvis
  • mpjunk
  • mpkill
  • mpmangar
  • mpmarcar
  • mpmload
  • mpnothing
  • mpobjainv
  • mpoload
  • mposet
  • mppausar
  • mppeace
  • mpplay
  • mppqs
  • mppurge
  • mpreceta
  • mpregreso
  • mprestore
  • mpset
  • mpslay
  • mpsonido
  • mpsset
  • mptransfer
  • mpuse
  • mpvis
  • mpvulnerable
  • mpwait
  • mpwquest

Si necesitas uno que no está explicado aquí, busca su función en src/mob_comm.c: el comando mpecho, por ejemplo, es CMDF(do_mpecho).

Para ver qué progs tiene un mob o un objeto está mpstat <mob>, mpmostrar y opmostrar.