Closed Reiquard closed 9 months ago
Убрал в пяти строках того же файла вхождения "(p=2)" и подобные, ибо они указывают не вес (вероятность), а приоритет, что приводит к тому, что все остальные строки просто не участвуют в генерации.
Это не совсем так. При парсинге строки выполнятся код, который воспринимает p
всё-таки как вес. А для приоритета - в строке должно быть priority
public Rule_String(string rawString)
{
Match match = pattern.Match(rawString);
if (!match.Success)
{
Log.Error($"Bad string pass when reading rule {rawString}");
return;
}
keyword = match.Groups["keyword"].Value;
output = match.Groups["output"].Value;
for (int i = 0; i < match.Groups["paramname"].Captures.Count; i++)
{
string value = match.Groups["paramname"].Captures[i].Value;
string value2 = match.Groups["paramoperator"].Captures[i].Value;
string value3 = match.Groups["paramvalue"].Captures[i].Value;
switch (value)
{
case "p":
if (value2 != "=")
{
Log.Error($"Attempt to compare p instead of assigning in rule {rawString}");
}
weight = float.Parse(value3);
continue;
case "priority":
if (value2 != "=")
{
Log.Error($"Attempt to compare priority instead of assigning in rule {rawString}");
}
priority = float.Parse(value3);
continue;
...
https://github.com/Ludeon/RimWorld-ru/pull/1586#issuecomment-1784136211
Это не совсем так. При парсинге строки выполнятся код, который воспринимает
p
всё-таки как вес. А для приоритета - в строке должно бытьpriority
Тем не менее мне не удалось по результатам многочисленных генераций увидеть ни одной иной строки, даже если поставить p=1.1
, что и привело меня к такому выводу.
Ошибочен этот вывод или нет, но если оставить эти параметры как в оригинале, то в генерации будет участвовать лишь эта строка:
https://github.com/Ludeon/RimWorld-ru/blob/e7b5bf981efa537925122b70e1e6c0b4778a8355/Ideology/DefInjected/IdeoStoryPatternDef/RulePacks_Ideo_Description.xml#L182
Это не совсем так. При парсинге строки выполнятся код, который воспринимает
p
всё-таки как вес. А для приоритета - в строке должно бытьpriority
Тем не менее мне не удалось по результатам многочисленных генераций увидеть ни одной иной строки, даже если поставить
p=1.1
, что и привело меня к такому выводу. Ошибочен этот вывод или нет, но если оставить эти параметры как в оригинале, то в генерации будет участвовать лишь эта строка:
Надо разобраться в этом поведении. Насколько я смог увидеть, для грамматик описания идеолигий выполняется код, отличный от остальных грамматик:
IComparer<RuleEntry> comparer = Comparer<RuleEntry>.Create((RuleEntry a, RuleEntry b) => customComparer.Compare(a.rule, b.rule)).ThenBy(Comparer<RuleEntry>.Create((RuleEntry a, RuleEntry b) => a.SelectionWeight.CompareTo(b.SelectionWeight)).Descending());
tmpSortedRuleList.Clear();
foreach (RuleEntry item in list)
{
if (ValidateRule(constants, extraTags, resolvedTags, item, customizer) && item.Priority == maxPriority)
{
tmpSortedRuleList.Add(item);
}
}
tmpSortedRuleList.Shuffle();
tmpSortedRuleList.TryMinBy((RuleEntry x) => x, comparer, out var value);
return value;
В нём, если упростить, список правил сортируется (в том числе) по весу и берётся правило, первое по списку. А другие при прочих равных - игнорируются. Это похоже на баг. Сообщу разрабам
Вынеси, пожалуйста, удаление констрейнтов вида (p=2)
в отдельный реквест. Ибо оно не имеет отношения к облагораживанию описаний, а является временным средством для исправления последствий бага, допущенного разрабами
Третья часть исправлений, направленных на облагораживание генерируемых описаний идеолигий. Основной упор на структуры Ideological (Светская идеология) и Buddhist origin.
Изменил названия локальных переменных в файле
IdeoStoryPatternDef/RulePacks_Ideo_Description.xml
во избежание неправильной интерпретации их значений, которые могут быть взяты из одноимённых переменных соответствующих черт идеолигий (and vice versa) при генерации описания.Убрал в пяти строках того же файла вхождения "(p=2)" и подобные, ибо они указывают не вес (вероятность), а приоритет, что приводит к тому, что все остальные строки просто не участвуют в генерации.
Для целостности восприятия текста, составленного из предложений разных черт идеолигий, в категориях lesson* все обращения представлены местоимением
ты
и его производными.