MAC's NPCs v1.2 Documentation (ESP)

image5.png

Configuración básica

1. Para instalar este complemento en su servidor simplemente descomprímalo en su carpeta garrysmod / addons

2. Dentro de "mc_simple_npcs/lua/mcs_npcs" abra sh_config.lua y configure el complemento

Config:

MCS.Config.UseDelay = 2			// Задержка между нажатиями кнопки "Использовать" на NPC
MCS.Config.TextSpeed = 3			// Скорость анимации набора текста (1 - самая быстрая, 10 - самая медленная)
MCS.Config.DebugMode = false             // DebugMode включает кнопки закрытия меню диалога в правом верхнем углу
MCS.Config.NPCTextColor = Color(255,255,255)		// Цвет текста NPC's
MCS.Config.TextColor = Color(255,255,255)		// Цвет текста ответа и кнопки пропуска
MCS.Config.HighlightColor = Color(217,170,0)		// Цвет текста ответа при выборе
MCS.Config.LinesColor = Color(155,155,155)		// Цвет контура интерфейса
MCS.Config.HLLinesColor = Color(255,255,255)		// Цвет углов интерфейса
MCS.Config.EnableBlur = true				// Эффект размытия интерфейса		
		
MCS.Config.SkipButton = "Press LMB to skip"	// Текст кнопки пропуска
MCS.Config.AnswersFont = "MCS_Arial32"		// Шрифт строк ответа
MCS.Config.NPCFont = "MCS_Arial24"		// Шрифт строк NPC
MCS.Config.AnswersAlign = TEXT_ALIGN_LEFT	// Направление текста ответа - TEXT_ALIGN_LEFT TEXT_ALIGN_RIGHT TEXT_ALIGN_CENTER

3. Para comenzar a configurar un NPC, ingrese al servidor. Abra la consola de juegos y escriba el comando mcs_setup para abrir el menú de configuración.

Nota: para abrir debe tener privilegio superadmin en su servidor

Este menú presentará algunas cosas como, guardar automáticamente al cerrar y cargar automáticamente el último NPC editado y una barra de menú con opciones para cargar y guardar el NPC actual como plantilla

image12.png

También puede comenzar una nueva configuración seleccionando New opción

image13.png

Configuración de NPC

Nombre único

image9.png

En este cuadro de texto, debe ingresar el nombre único para el NPC. Solo lo usa el servidor y debe ser único para cada NPC que cree. También se usará como nombre para guardar el archivo.

Nombre de NPC

image2.png

El nombre del NPC se mostrará encima y dentro del cuadro de diálogo. Ejemplo:

image17.png

Posición del nombre del NPC

image18.png

Este control deslizante ajustará la altura del nombre del NPC que se muestra sobre su cabeza. Esto puede ser útil si usa modelos más grandes o más pequeños. Lea más sobre esto en la configuración avanzada

Limitación de uso

image6.png

Al marcar esta opción, solo un jugador podrá usar el npc. Esta opción es necesaria si desea utilizar la reproducción de animación en el cuadro de diálogo. Ver más en 4.8 La configuración de Diálogo

Tema de diálogo

image19.png

Aquí puede cambiar el tema de la interfaz de usuario del diálogo de la lista de temas compatibles. Esto afectará solo el npc que está editando. Nota: Temas soportados actualmente - Predeterminado, Retro, Hollow Knight

Configuración de modelo y animación

Para establecer un modelo para su NPC, copie y pegue la ruta al modelo dentro del cuadro de texto. 

image8.png

Puede obtener una vista previa del modelo en el panel lateral, rotarlo y hacer zoom haciendo doble clic en él. Si su modelo admite grupos de

image3.png

image21.png

Para animar su NPC, ingrese el nombre de la animación dentro del cuadro de texto "Animación". Al presionar Get Anim. verá una lista de todas las animaciones para el modelo que usa. Al presionar uno de ellos, podrá obtener una vista previa y se configurará automáticamente

image7.png

Para obtener más información sobre cómo obtener las animaciones, puede mirar dentro del

Posición de desove

Para agregar la posición de generación para cada mapa que desee, haga clic en el botón Add Map.

image1.png

La posición de generación para el mapa actual se creará automáticamente si no hay nadie.

Dentro del cuadro de texto puede ingresar o modificar el nombre del mapa. Si desea generar el NPC en mapas que no están en la lista, use "todos" en lugar del nombre del mapa.

Para editar la posición de generación, presione el botón Editar:

En el menú abierto, puede escribir el vector de generación y el ángulo o presionar el botón Player Pos para copiar su propia posición y el botón Ent Pos para obtener la posición de la entidad que está mirando. Para las correcciones manuales posteriores, ver configuración avanzada

image15.png

La configuración del diálogo

Para una nueva línea de diálogo, presione el botón "Agregar línea". Esto agregará un nuevo panel a la lista a continuación.

image4.png

Cada línea tendrá su propia ID que se mostrará en la esquina superior izquierda. La línea con ID 1 se abrirá primero cada vez que el jugador hable con el NPC.

En el primer cuadro de texto, puede ingresar el discurso de NPC, es compatible con el operador de nueva línea (\ n).

Dentro del cuadro de texto "Sonido:" puede ingresar opcionalmente la ruta al sonido que se reproducirá automáticamente cuando el jugador abra esta línea de diálogo. Ejemplo en el video

Para agregar más respuestas que el jugador pueda elegir, presione el botón "Agregar respuesta". Para eliminar la respuesta, presione el botón "Del". Si no hay ninguna respuesta, la respuesta "..." con opción de cierre se agregará automáticamente.

Cada respuesta que cree puede hacer dos cosas básicas, cerrar el diálogo o abrir la línea con la ID que elegirá en el menú desplegable (presionando el botón Cerrar).

Si su servidor utiliza complementos compatibles con "NPC simples", verá el nombre del complemento en la lista. Al seleccionar un complemento de la lista, la respuesta abrirá el menú del complemento que elija.

Para agregar una animación de reproducción, cuando elige una respuesta (como en este video) puede ingresar el nombre de la animación en el cuadro de texto después del botón Supr. Para explorar rápidamente todas las animaciones disponibles para el modelo, presione Obtener. Anim. botón, que abrirá una lista de todas las animaciones. Nota: La casilla de verificación de limitación de uso debe estar activada (consulte el paso 4.4).

Consejo: para diálogos grandes y complicados, recomiendo crear un archivo doc con estructura de diálogo antes de comenzar a configurar los NPC

Puede probar rápidamente el diálogo presionando el botón "Probar los diálogos". Útil para diálogos grandes y complicados.

Guardar NPC

Para guardar el NPC presione el botón "Copiar al portapapeles y cerrar" en la parte inferior o seleccione la opción "Copiar código lua" en el menú Editar en la barra de menú.

image10.png                       image20.png

Luego abra sh_npcspawn.lua dentro de "MC Simple NPCs / lua / mcs_npcs" y pegue el código de NPC en la parte inferior de los archivos.

Para reemplazar o eliminar un NPC existente, simplemente seleccione la tabla NPC completa y elimínela.

Los NPC se generarán automáticamente al iniciar el servidor, o puede reaparecerlos escribiendo el comando mcs_npcrespawn en la consola.

cuerpo o máscaras, verá los controles deslizantes para el ajuste.

Configuración avanzada

Nota. En la configuración avanzada, trabajaremos principalmente con una tabla NPC existente y necesitará conocimientos de lua para hacerlo correctamente.

Estructura de la tabla de NPC:
MCS.Spawns["uid"] = { // uid - the unique id for an NPC
    name = "Name",  // NPC's name will be shown to players above the NPC and via the dialogue.
    model = "models/path/npc.mdl", // Path to the model
    uselimit = false, // Allow only one player to speak to the npc at the same time
    theme = "Theme Name",  // Dialogue theme. Currently supported themes - Default, Retro, Hollow Knight
    pos = {
         ["map_name"] = {Vector(0,0,0), Angle(0,0,0)}, // spawn position filter by maps
         ["all"] = {Vector(0,0,0), Angle(0,0,0)}, // use 'all' to spawn npc any way, even if there is no map in this table
    },
    bgr = {
        [1] = 2,
        [2] = 0,
    }, // Table of bodygroups [The id of the bodygroup you're setting. Starts from 0] = The value you're setting the bodygroup to. Starts from 0
    skin = 1, // Sets the skin of the entity
    namepos = 30, // Use this field to set up the hight position of NPC's name above his head
    random_dialog = {dialogue id, dialogue id}, // Use this table to start dialogue form a random position (ex.: {1, 3} will randomly start from 1 or 3 dialogue line)
    sequence = "name of the animation", // id for sequence animation, use table (ex.: {"id1", "id2"}) to play random animation
    dialogs = {
        [dialogue id, start from 1] = {
        ["Line"] = "Text that NPC tells you",
        ["Sound"] = "Path to sound, keep it empty or nil value if you do not want use any sfx",
        ["Answers"] = {
                {"Answer text", id for next line, "close" to close the dialogue, or { id, id } for random line, callback function , check function, "playback animation"},
            },
        }
    }
}

Personalización de posición de NPC

Para generar su NPC en múltiples mapas en diferentes ubicaciones, debe agregar un nuevo valor, para cada mapa que necesite, dentro de la tabla de pos. La clave para el valor es el nombre del mapa, el valor en sí es una tabla con la posición y el ángulo del NPC. Si desea generar el NPC en mapas que no están en la lista, use "todos" en lugar del nombre del mapa.

Nota. Si va a crear dos o más posiciones de generación diferentes para un mapa, solo una funcionará. No puede generar el mismo npc más de una vez en el mismo mapa.

Ejemplo:

pos = {
   ["gm_atomic"] = {Vector(570.41230,760.10539,-3123), Angle(0,90,0)}, // spawn npc on gm_atomic map
   ["rp_evocity2_v2p"] = {Vector(4213,5345,621), Angle(0,180,0)}, // spawn npc on rp_evocity2_v2p map
   ["all"] = {Vector(0,0,0), Angle(0,0,0)}, // spawn npc on all other maps
},

Configuración de skin y bodygroup

Para establecer la piel, si el modelo que usa presenta varias piel, simplemente agregue skin = skin_id, línea a la tabla NPC, donde skin_id es el número de ID de su máscara.

Para los grupos del cuerpo: agregue la tabla bgr = {[1] = 2, [2] = 0,}, Estructura de la tabla:

[La identificación del grupo del cuerpo que está configurando. Comienza desde 0] = El valor en el que está configurando el grupo de cuerpo. Comienza desde 0

Propina. Recomiendo usar Easy Bodygroup Tool para esto

Example:

Démosle el portapapeles al Dr. Kleiner

  model = "models/kleiner.mdl",
  bgr = {[1] = 1},
  sequence = "lineidle03",

image14.png

Animación al azar

Para hacer que tu NPC reproduzca una animación aleatoria cada vez que se genera, simplemente crea una tabla para la línea de secuencia.

Example:

El NPC aparecerá con una de estas 3 animaciones.

 sequence = {"scaredidle","lineidle02","lineidle01"},

image11.png

Ajuste de nombre de NPC

Para ajustar la altura del nombre del NPC después de que se realizó la configuración principal, edite namepos = number, línea dentro de la tabla NPC. Esto puede ser útil si usa modelos más grandes o más pequeños.

Ejemplo:

El NPC usa animación agachada y deslizamos el nombre un poco hacia abajo

 namepos = 30,

image16.png

Inicio de diálogo aleatorio

Para iniciar el diálogo desde una línea aleatoria, puede agregar este parámetro random_dialog = {number id, number id, number id}, a la tabla npc, después de realizar la configuración principal. Cuando el jugador inicia un diálogo con el npc, uno de los identificadores de línea de diálogo se elegirá aleatoriamente para comenzar como primera línea, en lugar de abrir el primero.

Esto puede ser útil para hacer que los diálogos con npcs de uso frecuente sean menos aburridos.

Ejemplo: 

Esto abrirá aleatoriamente el primer, segundo o quinto diálogo como el primero

 random_dialog = {1, 2, 5},

Diálogo aleatorio sobre respuesta

Para iniciar un diálogo aleatorio sobre cierta respuesta al azar, puede crear una tabla en lugar de una identificación para la siguiente línea. Cuando el jugador elige esta respuesta, uno de los identificadores de la línea de diálogo se elegirá aleatoriamente como la siguiente respuesta.

Ejemplo:

Esto abrirá aleatoriamente el 4º, 5º, 6º o 7º diálogo tan aleatoriamente como una respuesta

["Answers"] = {
   {"Tell me a joke!", {4, 5, 6, 7} },
},

Funciones adicionales para la tabla de respuestas:

Función de respaldo

Descripción: Esta función se llama el cliente cuando el jugador elige la respuesta, manténgala nula para ignorarla.

Ejemplo 1:

Envía un mensaje neto al servidor

["Answers"] = {
   {"Show me what you got", "close", function() net.Start(“Open_some_menu”) net.SendToServer() end},
},

Ejemplo 2

Ignora la función de devolución de llamada mientras usa la función de verificación

["Answers"] = {
   {"I’m fine", "close", nil ,function() return LocalPlayer():Health() >= 100 end},
},
Función de verificación (Entidad npc)

Descripción: función del lado del cliente que controla si se agrega la respuesta a la lista o no. Debe devolver boolean

Argumentos: entidad desde donde se llamó esta función

Ejemplo 1:

Envía un mensaje neto al servidor

["Answers"] = {
   {"I’m fine", "close", nil ,function() return LocalPlayer():Health() >= 100 end},
   {"I’m injured", "close", function() net.Start(“Buy_Health”) net.SendToServer() end, function() return LocalPlayer():Health() < 100 end},
},

Plantilla para elegir trabajo a través de NPC:

Cambiar de trabajo a Protección Civil a través del diálogo.

Nota: Si desea comenzar a votar para cambiar de trabajo, agregue "votar" antes del comando de trabajo (consulte la línea 3)

["Answers"] = {
   {"I want to become a CP", "close", function() RunConsoleCommand("darkrp", "cp" ) end},
   {"I want to be a mayor", "close", function() RunConsoleCommand("darkrp", "votemayor" ) end},
},