beasty-visual-novel / scripting / generated-accessors.md
Accesores generados: VNVars y VNChars
VNVars y VNChars son archivos C# que el editor genera a partir de las variables y personajes de tu
proyecto. Convierten un error de tipeo en una clave de una respuesta silenciosamente equivocada en un error
de compilación.
El problema que resuelven
El almacén de variables se indexa por string. VN.GetBool("met_maya") sobre una clave que en realidad
escribiste como met_Maya no lanza excepción ni advierte: devuelve el valor de respaldo, false. La
condición nunca se dispara, la rama nunca se ejecuta, y buscas el bug en el grafo.
VN.SetInt("money", 100); // compila sin importar lo que escribas
int m = VN.GetInt("mony"); // 0. Sin error. Sin advertencia.
Con los accesores generados, el mismo error no compila:
VNVars.Money = 100;
int m = VNVars.Mony; // CS0117: 'VNVars' does not contain a definition for 'Mony'
Cómo se ven
VNVars es una clase estática plana, una propiedad por variable, tipada según el tipo de valor declarado de
la variable:
public static class VNVars
{
/// <summary>Variable [money] (Fixed/Int).</summary>
public static int Money { get => VN.GetInt("money"); set => VN.SetInt("money", value); }
}
VNChars es una clase estática por personaje, una propiedad por variable de personaje:
public static class VNChars
{
public static class Maya
{
public static int Affection { get => VN.GetCharInt("maya", "affection");
set => VN.SetCharInt("maya", "affection", value); }
}
}
Los miembros exactos dependen de tu proyecto. Las claves se convierten en propiedades PascalCase; el id del personaje se convierte en el nombre de la clase anidada.
Regenerar
| Menú | Regenera |
|---|---|
Tools > Beasty VN > Codegen > Regenerate VNVars Accessors | VNVars — una propiedad por variable |
Tools > Beasty VN > Codegen > Regenerate VNChars Accessors | VNChars — una clase anidada por personaje |
Regenera después de añadir, renombrar o eliminar una variable, una variable de personaje o un personaje. Nada más los cambia, y nada te avisa que están desactualizados — una variable renombrada deja un accesor apuntando a una clave que ya no existe, que lee el valor de respaldo exactamente igual que lo haría un error de tipeo.
Ambos archivos llevan un encabezado <auto-generated>. No los edites a mano: la próxima regeneración los
sobrescribe. Ambos viven en el ensamblado y namespace Beasty.VN.Runtime, así que tus scripts de juego los
ven sin ninguna referencia extra.
Usarlos junto a la API de strings
Son una comodidad sobre el mismo almacén, no un sistema separado. VNVars.Money compila a
VN.GetInt("money"). Ambos caminos llegan al mismo VariableStore, así que puedes mezclarlos libremente:
using Beasty.VN.Runtime;
public static class Shop
{
public static bool Buy(int price)
{
if (VNVars.Money < price) return false;
VNVars.Money -= price; // tipado
VN.SetBool("bought_something", true); // con clave de string, sin accesor necesario
VNChars.Maya.Affection += 1; // tipado, variable de personaje
return true;
}
}
Todo lo que dice la API de VN aplica sin cambios, incluyendo la parte
importante: estos leen la SESIÓN ACTIVA. Fuera de una historia en ejecución, cada getter devuelve su valor de
respaldo y cada setter advierte y no hace nada. Para leer el estado del juego desde FreeRoam, el menú
principal o tu propio modo, usa VNGameController.Instance.SharedVariables, o una de las
APIs de gameplay, que ya lo hacen.
Una clave que nunca declaraste en el editor no tiene accesor. Escríbela con la API de strings, o declárala — declararla es lo que la hace visible para el selector de condiciones, el validador y el guardado.
ItemIds
La pestaña Items genera el mismo tipo de archivo para los ids de inventario: una clase ItemIds de
constantes de string, pensada para pasarse a Inventory.Item(...). Las mismas reglas — regenera cuando tus
ids cambien, no la edites a mano. Ver APIs de gameplay.