Изменения

Перейти к навигации Перейти к поиску
Нет описания правки
Строка 1: Строка 1:  
← [[Модификации:Индекс|Индекс]]
 
← [[Модификации:Индекс|Индекс]]
{{Переведите}}
+
 
This page explains how the game calculates NPC gift tastes. This is an advanced guide for mod developers.
+
На этой странице объясняется, как игра вычисляет вкусы подарков NPC. Это расширенное руководство для разработчиков модов.
    
==Данные==
 
==Данные==
 
===Источник===
 
===Источник===
Вкусы подарков NPC хранятся в <tt>Content\Data\NPCGiftTastes.xnb</tt>, which can be [[Modding:Editing XNB files#unpacking|unpacked to edit]]. Here's the raw data as of {{version|1.5.1}} for reference:
+
Вкусы подарков NPC хранятся в <tt>Content\Data\Furniture.xnb</tt>, могут быть [[Модификации:Редактирование_XNB_файлов#Редактирование распакованных данных|извлечены для редактирования]]. Вот исходные данные по состоянию на {{version|1.5.1}} для примера:
   −
{{collapse|Data|content=<syntaxhighlight lang="json">
+
{{collapse|Данные|content=<syntaxhighlight lang="json">
 
{
 
{
 
   "Universal_Love": "74 446 797 373 279",
 
   "Universal_Love": "74 446 797 373 279",
Строка 51: Строка 51:  
</syntaxhighlight>}}
 
</syntaxhighlight>}}
   −
===Format===
+
===Формат===
The file contains two types of data:
+
Файл содержит два типа данных:
    
<ul>
 
<ul>
<li>''Universal tastes'' apply to all villagers. Their key is <tt>Universal_''Taste''</tt>, and their value is a space-delimited array of reference IDs ([[Modding:Object data|item ID]] if ≥0, category ID if <0). For example, consider this entry:
+
<li>''Универсальные вкусы'' применяется ко всем жителям. Их ключ - <tt>Universal_''Taste''</tt>, и их значение представляет собой массив ID, разделенных пробелами ([[Модификации:Объекты|ID объектов]] если ≥0, ID категории, если <0). Например, рассмотрим эту запись:
    
<syntaxhighlight lang="json">
 
<syntaxhighlight lang="json">
Строка 61: Строка 61:  
</syntaxhighlight>
 
</syntaxhighlight>
   −
This data means villagers should have a universal like for category -2, [[Modding:Object data|item 72]], etc.</li>
+
Эти данные означают, что жители должны иметь универсальную запись для категории -2, [[Модификации:Объекты|предмет 72]], и т.д.</li>
   −
<li>''Personal tastes'' apply to a specific villager. Their key is the villager's internal name (like <tt>Abigail</tt>), and their value alternates dialogue text with a list of reference IDs in this order: love, like, dislike, hate, and neutral. For example, consider Abigail's gift tastes:
+
<li>''Личные вкусы'' обратитесь к конкретному жителю. Их ключ - это внутреннее имя жителя(например, <tt>Abigail</tt>), и их значение чередует текст диалога со списком ID в следующем порядке: Любит, Нравится, Не нравится, Ненавидит и Равнодушна. Например, рассмотрим вкусы подарков Абигейл:
    
<syntaxhighlight lang="json">
 
<syntaxhighlight lang="json">
Строка 69: Строка 69:  
</syntaxhighlight>
 
</syntaxhighlight>
   −
By splitting the string with <tt>/</tt> as the delimiter, we can extract this data:
+
Разделив строку с помощью <tt>/</tt> в качестве разделителя вы можете извлечь эти данные:
    
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! index
+
! Индекс
! taste
+
! Вкус
! reaction dialogue
+
! Реакция
! reference IDs
+
! ID
 
|-
 
|-
 
| 0, 1
 
| 0, 1
| love
+
| Любит
 
| I seriously love this! You're the best, @!
 
| I seriously love this! You're the best, @!
 
| 66 128 220 226 276 611
 
| 66 128 220 226 276 611
 
|-
 
|-
 
| 2, 3
 
| 2, 3
| like
+
| Нравится
 
| Hey, how'd you know I was hungry? This looks delicious!
 
| Hey, how'd you know I was hungry? This looks delicious!
 
| ''none''
 
| ''none''
 
|-
 
|-
 
| 4, 5
 
| 4, 5
| dislike
+
| Не нравится
 
| What am I supposed to do with this?
 
| What am I supposed to do with this?
 
| -5 -75 -79 16 245 246
 
| -5 -75 -79 16 245 246
 
|-
 
|-
 
| 6, 7
 
| 6, 7
| hate
+
| Ненавидит
 
| What were you thinking? This is awful!
 
| What were you thinking? This is awful!
 
| 330
 
| 330
 
|-
 
|-
 
| 8, 9
 
| 8, 9
| neutral
+
| Равнодушна
 
| You brought me a present? Thanks.
 
| You brought me a present? Thanks.
 
| ''none''
 
| ''none''
 
|}
 
|}
   −
This data means she should personally love item 66 (Amethyst), dislike category -5 (eggs), etc.</li>
+
Эти данные означают, что она должна любить предмет 66 (Аметист), не любить категорию -5 (яйца), и т.д.</li>
 
</ul>
 
</ul>
   −
==How a gift taste is determined==
+
==Как определяется вкус подарка==
The data format allows tastes to conflict in multiple ways:
+
Формат данных позволяет вкусам конфликтовать несколькими способами:
   −
* between an [[Modding:Object data|item ID]] and category ID;
+
* между ID [[Модификации:Объекты|ID предмета]] и ID категории;
* between a universal taste and personal taste;
+
* между универсальным вкусом и личным вкусом;
* between conflicting values (''e.g.'', Jodi both loves and hates Daffodils (item ID 18) specifically);
+
* между конфликтующими ценностями (''например'', Джоди и любит, и ненавидит Нарциссы (ID предмета 18) в частности);
* and any combination of the above (''e.g.'', between a universal item ID and personal category ID).
+
* и любая комбинация из вышеперечисленного ("например", между универсальным ID предмета и ID категории).
   −
The game uses a rather complicated algorithm to determine how much an NPC likes an gift (see <tt>NPC::getGiftTasteForThisItem</tt>). Here's a cleaned up version of the algorithm in pseudocode:
+
В игре используется довольно сложный алгоритм для определения того, насколько NPC нравится подарок (смотри <tt>NPC::getGiftTasteForThisItem</tt>). Вот очищенная версия алгоритма в псевдокоде:
    
<pre>
 
<pre>
Строка 122: Строка 122:  
bool HAS_UNIVERSAL_NEUTRAL_ID = false
 
bool HAS_UNIVERSAL_NEUTRAL_ID = false
   −
// part I: universal taste by category
+
// часть I: универсальный вкус по категориям
 
if category is universally loved:
 
if category is universally loved:
 
   TASTE = love
 
   TASTE = love
Строка 132: Строка 132:  
   TASTE = dislike
 
   TASTE = dislike
   −
// part II: universal taste by item ID
+
// часть II: универсальный вкус по ID предмета
 
if itemID is universally loved:
 
if itemID is universally loved:
 
   TASTE = love
 
   TASTE = love
Строка 150: Строка 150:  
   HAS_UNIVERSAL_NEUTRAL_ID = true
 
   HAS_UNIVERSAL_NEUTRAL_ID = true
   −
// part III: override neutral if it's from universal category
+
// часть III: переопределите нейтральный, если он из универсальной категории
 
if TASTE is neutral and not HAS_UNIVERSAL_NEUTRAL_ID:
 
if TASTE is neutral and not HAS_UNIVERSAL_NEUTRAL_ID:
 
   if item is edible but tastes bad (-300 > edibility < 0):
 
   if item is edible but tastes bad (-300 > edibility < 0):
Строка 157: Строка 157:  
       TASTE = dislike
 
       TASTE = dislike
   −
// part IV: sometimes override with personal tastes
+
// часть IV: иногда преобладают личные вкусы
 
if ((npc loves itemID OR (item has a category AND npc loves category)) AND (item has no category OR npc doesn't personally love category OR no universal taste for itemID)
 
if ((npc loves itemID OR (item has a category AND npc loves category)) AND (item has no category OR npc doesn't personally love category OR no universal taste for itemID)
 
   return love
 
   return love
Строка 169: Строка 169:  
   return neutral
 
   return neutral
   −
// part V: return taste if not overridden
+
// часть V: верните вкус, если не отменено
 
return TASTE
 
return TASTE
 
</pre>
 
</pre>
602

правки

Навигация