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 conif 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 conmpforce. - flee_prog
<dirección>: igual queleave_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 queleave_prog, pero el jugador sigue su camino a menos que el prog usempregresocon é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 condecir,susurrar,preguntar,cantarogritar, 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 porp, 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 quespeech_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>oall: alguien le da un objeto. El argumento tiene que ser exactamente el camponombredel objeto, con todas sus palabras y en el mismo orden, o empezar porallpara que salte con cualquiera.$oes 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.$nes quien lo mató. No salta si lo mata otro mob. - enemyd_prog: el mob mata a un jugador.
$nes el jugador muerto.
Periódicos y diferidos
- rand_prog
<porcentaje>: cada vez que el mud actualiza a los mobs. - wait_prog
<número>: lo disparampwait. 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,#0es 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
$nes quien ha disparado el prog, con la primera letra en mayúscula si es un jugador.$Nes su descripción corta si es un mob, o su nombre si es un jugador.$ees «él» o «ella» según su sexo,$mes «a él» o «a ella», y$ses la terminaciónooa, para frases comochic$s→chicoochica.$bes su nivel.$ies la primera palabra del nombre del propio mob, y$Isu descripción corta.$j,$ky$lson «él», «a él» y la terminaciónooadel propio mob.$fes el nombre de a quien está atacando el mob.$ry$Rson el nombre y la descripción de un jugador al azar de la habitación, que el mob pueda ver.$J,$Ky$Lson sus pronombres. Si no hay nadie, salen vacíos.$ty$Tson el nombre y la descripción de un segundo personaje, el objetivo de la acción, y$E,$My$Sson sus pronombres. Solo son fiables enact_prog.
Los objetos
$oy$Oson el nombre y la descripción corta del objeto del prog, como el que se da congive_prog.$py$Pson los de un segundo objeto.$ves el vnum del objeto.$ay$Ason el artículoun.
Los argumentos
#0es todo lo que se escribió detrás del comando, y#1a#9son la primera a la novena palabra. Solo existen encomando_progysub_com_prog.$$es un signo de dólar.
Estructuras de control
if <condición>,ifnot <condición>,or <condición>,elseyendif. Hasta 20 niveles de anidamiento.exitybreakterminan 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,$ro$f), - un objeto (
$oo$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)yisnpc($n): es jugador o es mob.isimmort($n): es inmortal.isgood,isneutraleisevil: su alineamiento.isfight($n)eisnfight($n): está o no está peleando.ischarmed,isfollow,ismounted,isholding,isnholding,isdeadeisstealth.cansee($n)ycannotsee($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)ynotencauza($n): puede o no puede encauzar.isaffected(<bit>),isaffected2eisaffected3: tiene ese efecto. El argumento es el número del bit.isvisionario($n)eisincarav($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)ypclass($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,issabeiscar: 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>eisncarrying($n) == <vnum>: lleva o no lleva en el inventario un objeto con ese vnum.iswearing($n) == <vnum>eisnwearing($n) == <vnum>: lo lleva puesto o no.wields($n)ynotwields($n): empuña o no algún arma.
Asociaciones
es_aso($n) == <nombre>: es de la asociación con ese nombre.isaso($n) == <vnum>eisnaso($n) == <vnum>: es o no es de la asociación cuyo guardián tiene ese vnum.
Misiones y marcas
wq_iniciado($n) <misión>ywq_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>yno_marcado($n) <número>: tiene o no una marca puesta conmpmarcar.canlearn($n)ycannotlearn($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ómpaleatorioes n.isdayeisnight: 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>)yisnheremob(<vnum>): hay o no hay un mob con ese vnum en la habitación.haymobynohaymobson sinónimos.ishereobj(<vnum>)yisnhereobj(<vnum>): hay o no hay en el suelo un objeto con ese vnum.hayobjynohayobjson sinónimos.herefight(<vnum>)yherenfight(<vnum>): ese mob está o no está peleando.luchandoynoluchandoson sinónimos.
Sobre un objeto
objtype($o)eistype($o): el tipo, por número.weight($o): el peso.number($o): el vnum.objval0($o)aobjval4($o): el valor v0 a v4.isextra($o) <bit>,isnextra,isextra2eisnextra2: 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)ycon_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 esaviso,sonidoomusica, y el ámbito esch,room,adyacentes,area,mundooadmins.
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, ympget <objeto>coge uno del suelo.mpjunk <objeto>destruye un objeto del mob,mpjunk tododestruye 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.allafecta a todos los jugadores de la habitación.mpdamonlyes 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 selfcura al propio mob.mppeace: detiene los combates de la habitación.mpforce <persona|all> <comando>: obliga a alguien a hacer algo.alles todos los de menor nivel que el mob.mpnothing: no hace nada. Sirve para tener algo que poner en una rama de unif.
Moverse y mover
mpgoto <lugar>: el mob se va a ese sitio. El lugar se escribe como engoto.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.allmueve a todos los jugadores de la habitación. No puede mandar a una habitación privada.mpvisympinvis: el mob se hace visible o invisible. Un mob invisible solo se ve conholylight.
Estado y premios
mpset oro <cantidad>: pone dinero al mob. Hay más opciones, comohambre,sed,nivel,prac,pquest,instintoylocura, 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>ympdesmarcar <jugador> <marca>: pone y quita una marca, un número que luego se comprueba conmarcadoyno_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 conaleatorio(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.