Перейти к основному содержимому
The project's repository is archived as part of the GitHub Archive Program. RogueLibs' code and the documentation will no longer be updated.

Провайдеры кастомных имён

Если у вас какая-то сложная система наименований, то вам может пригодиться INameProvider. Таким образом вы можете контролировать, какие строки возвращаются методом NameDB.GetName в более обобщённом виде. Просто создайте класс реализующий INameProvider и добавьте его в RogueFramework.

MyNameProvider.cs
public class MyNameProvider : INameProvider
{
public void GetName(string name, string type, ref string? result)
{
if (name.StartsWith("fake_"))
{
string sub = name.Substring("fake_".Length);
result = LanguageService.NameDB.GetName(sub, type);
}
}
}
примечание

Если оригинальный NameDB.GetName вернул строку с ошибкой (начинающуюся с E_), result выставляется на null.

RogueFramework.NameProviders.Add(new MyNameProvider());

Вот более практичный и полезный пример, он, кстати, уже реализован в RogueLibs:

public class DialogueNameProvider : INameProvider
{
public void GetName(string name, string type, ref string? result)
{
if (result is null && type == "Dialogue" && name.StartsWith("NA_"))
{
string sub = name.Substring("NA_".Length);
string newResult = LanguageService.NameDB.GetName(sub, type);
if (!newResult.StartsWith("E_")) result = newResult;
}
}
}

Обычно, игра ищет диалоги в следующем формате: <НазваниеПерсонажа>_<НазваниеДиалога>. Если такого имени не существует, тогда NA_<Название диалога> (NA - No Agent - без персонажа) используется вместо него. Этот провайдер имён также ищет кастомное имя просто с названием диалога. Это позволяет разработчикам писать имена диалогов без этого надоедливого NA_ в начале.

The project's repository is archived as part of the GitHub Archive Program. RogueLibs' code and the documentation will no longer be updated.