@jjlmoya/utils-tabletop 1.25.0 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +2 -0
  3. package/src/entries.ts +2 -0
  4. package/src/tests/locale_completeness.test.ts +1 -1
  5. package/src/tests/tool_validation.test.ts +1 -1
  6. package/src/tool/encounter-difficulty-calculator/bibliography.astro +6 -0
  7. package/src/tool/encounter-difficulty-calculator/bibliography.ts +12 -0
  8. package/src/tool/encounter-difficulty-calculator/component.astro +53 -0
  9. package/src/tool/encounter-difficulty-calculator/controller.ts +133 -0
  10. package/src/tool/encounter-difficulty-calculator/dnd-5e-encounter-difficulty-calculator.css +389 -0
  11. package/src/tool/encounter-difficulty-calculator/dom-views.ts +54 -0
  12. package/src/tool/encounter-difficulty-calculator/entry.ts +27 -0
  13. package/src/tool/encounter-difficulty-calculator/evaluator.ts +12 -0
  14. package/src/tool/encounter-difficulty-calculator/i18n/de.ts +155 -0
  15. package/src/tool/encounter-difficulty-calculator/i18n/en.ts +155 -0
  16. package/src/tool/encounter-difficulty-calculator/i18n/es.ts +155 -0
  17. package/src/tool/encounter-difficulty-calculator/i18n/fr.ts +155 -0
  18. package/src/tool/encounter-difficulty-calculator/i18n/id.ts +155 -0
  19. package/src/tool/encounter-difficulty-calculator/i18n/it.ts +155 -0
  20. package/src/tool/encounter-difficulty-calculator/i18n/ja.ts +155 -0
  21. package/src/tool/encounter-difficulty-calculator/i18n/ko.ts +155 -0
  22. package/src/tool/encounter-difficulty-calculator/i18n/nl.ts +155 -0
  23. package/src/tool/encounter-difficulty-calculator/i18n/pl.ts +155 -0
  24. package/src/tool/encounter-difficulty-calculator/i18n/pt.ts +155 -0
  25. package/src/tool/encounter-difficulty-calculator/i18n/ru.ts +155 -0
  26. package/src/tool/encounter-difficulty-calculator/i18n/sv.ts +155 -0
  27. package/src/tool/encounter-difficulty-calculator/i18n/tr.ts +155 -0
  28. package/src/tool/encounter-difficulty-calculator/i18n/zh.ts +155 -0
  29. package/src/tool/encounter-difficulty-calculator/index.ts +11 -0
  30. package/src/tool/encounter-difficulty-calculator/logic.test.ts +37 -0
  31. package/src/tool/encounter-difficulty-calculator/logic.ts +174 -0
  32. package/src/tool/encounter-difficulty-calculator/seo.astro +16 -0
  33. package/src/tool/encounter-difficulty-calculator/storage.ts +26 -0
  34. package/src/tool/encounter-difficulty-calculator/ui.ts +45 -0
  35. package/src/tools.ts +2 -0
@@ -0,0 +1,155 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { EncounterDifficultyLocaleContent, EncounterDifficultyUI } from '../entry';
4
+
5
+ const ui: EncounterDifficultyUI = {
6
+ intro: 'Настройте группу и угрозу. Калькулятор сопоставляет столкновение с порогами D&D 5e 2014.',
7
+ partySection: 'Группа',
8
+ partyLevel: 'Уровень персонажей',
9
+ partyLevelHint: 'Используйте средний уровень для группы с близкими уровнями персонажей.',
10
+ partySize: 'Персонажи',
11
+ partySizeHint: 'Правила меняют множитель монстров для очень маленьких или больших групп.',
12
+ threatSection: 'Угроза',
13
+ monsterCr: 'Опасность монстра (CR)',
14
+ monsterCrHint: 'Выберите CR одного повторяющегося монстра. Для смешанных групп требуется отдельный расчет.',
15
+ moreCr: 'Показать высшие CR',
16
+ lessCr: 'Показать меньше CR',
17
+ monsterCount: 'Количество монстров',
18
+ monsterCountHint: 'Больше существ увеличивают давление действий даже при скромном базовом XP.',
19
+ presets: 'Начать со сцены',
20
+ presetClassic: 'Классический патруль',
21
+ presetBoss: 'Одиночный босс',
22
+ presetSwarm: 'Орда прислуги',
23
+ resultSection: 'Давление столкновения',
24
+ belowEasyHint: 'Легкая сцена для сохранения ресурсов перед будущими испытаниями.',
25
+ easyHint: 'Простая сцена с незначительным давлением на группу.',
26
+ mediumHint: 'Ощутимое испытание, которое может стоить хитов или ресурсов.',
27
+ hardHint: 'Опасная сцена, где важны тактика и выбор ресурсов.',
28
+ deadlyHint: 'Сигнал смертельной угрозы. Проверьте пути отхода и террейн.',
29
+ adjustedXp: 'Скорректированный XP',
30
+ baseXp: 'Базовый XP',
31
+ multiplier: 'Множитель группы',
32
+ partyThreshold: 'Средний порог',
33
+ belowEasy: 'Ниже легкой',
34
+ easy: 'Легкая',
35
+ medium: 'Средняя',
36
+ hard: 'Высокая',
37
+ deadly: 'Смертельная',
38
+ warning: 'Внимание',
39
+ partyAdjustment: 'Множитель скорректирован, так как в группе меньше трех или больше пяти персонажей.',
40
+ highCr: 'Монстр с CR выше уровня группы может быстро вывести персонажа из строя.',
41
+ manyMonsters: 'Одиннадцать и более монстров усложняют проведение боя.',
42
+ rulesNote: 'Оценка по правилам D&D 5e 2014. Не учитывает террейн и тактику.',
43
+ rulesLinkLabel: 'Читать исходные правила',
44
+ reset: 'Сбросить к примеру',
45
+ xpUnit: 'XP',
46
+ sceneLabel: 'Графическое отображение давления боя',
47
+ partyMarker: 'Группа',
48
+ threatMarker: 'Угроза',
49
+ };
50
+
51
+ const faq = [
52
+ {
53
+ question: 'Какие правила использует этот калькулятор сложности столкновений?',
54
+ answer: 'Он использует официальный метод D&D 5e 2014 из Базовых правил, сравнивая пороги группы со скорректированным XP монстров.',
55
+ },
56
+ {
57
+ question: 'Почему скорректированный XP отличается от наградного XP?',
58
+ answer: 'Правила умножают суммарный XP монстров, чтобы отразить опасность нескольких существ, действующих в одном раунде.',
59
+ },
60
+ {
61
+ question: 'Можно ли использовать его для смешанной группы монстров?',
62
+ answer: 'Используйте как быструю оценку для одинаковых монстров. Для смешанных групп сложите базовый XP всех существ и примените множитель.',
63
+ },
64
+ {
65
+ question: 'Означает ли смертельный результат гарантированную гибель группы?',
66
+ answer: 'Нет. Смертельный означает, что скорректированный XP достиг смертельного порога. Террейн, тактика и заклинания меняют реальный результат.',
67
+ },
68
+ {
69
+ question: 'Почему размер группы меняет множитель?',
70
+ answer: 'Базовые правила рекомендуют увеличивать множитель для групп менее трех персонажей и уменьшать для групп из шести и более.',
71
+ },
72
+ ];
73
+
74
+ const howTo = [
75
+ {
76
+ name: 'Установите уровень группы',
77
+ text: 'Выберите средний уровень персонажей группы.',
78
+ },
79
+ {
80
+ name: 'Укажите размер группы',
81
+ text: 'Введите количество персонажей, участвующих в бою.',
82
+ },
83
+ {
84
+ name: 'Опишите угрозу',
85
+ text: 'Выберите опасность (CR) и количество монстров.',
86
+ },
87
+ {
88
+ name: 'Оцените давление',
89
+ text: 'Сравните скорректированный XP с официальными порогами.',
90
+ },
91
+ ];
92
+
93
+ const faqSchema: WithContext<FAQPage> = {
94
+ '@context': 'https://schema.org',
95
+ '@type': 'FAQPage',
96
+ mainEntity: faq.map((item) => ({
97
+ '@type': 'Question',
98
+ name: item.question,
99
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
100
+ })),
101
+ };
102
+
103
+ const appSchema: WithContext<SoftwareApplication> = {
104
+ '@context': 'https://schema.org',
105
+ '@type': 'SoftwareApplication',
106
+ name: 'Калькулятор сложности столкновений D&D 5e',
107
+ operatingSystem: 'All',
108
+ applicationCategory: 'GameApplication',
109
+ description: 'Рассчитайте сложность столкновений D&D 5e 2014 на основе уровня, размера группы, CR монстров, количества и официальных порогов.',
110
+ };
111
+
112
+ const howToSchema: WithContext<HowTo> = {
113
+ '@context': 'https://schema.org',
114
+ '@type': 'HowTo',
115
+ name: 'Как рассчитать сложность столкновения в D&D 5e',
116
+ step: howTo.map((item) => ({
117
+ '@type': 'HowToStep',
118
+ name: item.name,
119
+ text: item.text,
120
+ })),
121
+ };
122
+
123
+ export const content: EncounterDifficultyLocaleContent = {
124
+ slug: 'kalkulyator-slozhnosti-stolknovenij-dnd-5e',
125
+ title: 'Калькулятор сложности столкновений D&D 5e',
126
+ description: 'Оцените давление боя в D&D 5e 2014 с помощью уровня группы, размера, CR монстров, скорректированного XP и официальных порогов.',
127
+ ui,
128
+ seo: [
129
+ { type: 'title', text: 'Оцените сложность боя до броска инициативы', level: 2 },
130
+ { type: 'paragraph', html: 'Бой в D&D - это больше, чем цифра рядом с монстром. Этот калькулятор переводит размер группы, уровень, CR и количество монстров в скорректированный XP по правилам D&D 5e 2014. Наглядный график покажет, где находится запланированное столкновение относительно порогов легкой, средней, высокой и смертельной сложности.' },
131
+ { type: 'title', text: 'Как работает формула столкновений D&D 5e', level: 2 },
132
+ { type: 'paragraph', html: 'Метод суммирует порог XP каждого персонажа для каждого уровня сложности, а затем применяет множитель к общему XP монстров. Группы менее трех персонажей используют следующий более высокий множитель, а группы из шести и более персонажей - более низкий.' },
133
+ {
134
+ type: 'table',
135
+ headers: ['Сигнал', 'Что проверить за столом'],
136
+ rows: [
137
+ ['Ниже легкой', 'Столкновение служит разминкой или небольшим расходом ресурсов.'],
138
+ ['Легкая', 'Группа обычно побеждает без серьезных трат ресурсов.'],
139
+ ['Средняя', 'Ожидайте умеренное давление и хотя бы одно важное решение о ресурсах.'],
140
+ ['Высокая', 'Планируйте потерю хитов и ячеек заклинаний.'],
141
+ ['Смертельная', 'Проверьте тактику, террейн и пути отхода.'],
142
+ ],
143
+ },
144
+ { type: 'title', text: 'Почему количество монстров имеет ключевое значение', level: 2 },
145
+ { type: 'paragraph', html: 'Несколько монстров создают большую опасность, чем показывает их базовый XP, так как они совершают больше атак и реакций за раунд. Поэтому пара существ использует более высокий множитель, чем одно существо с тем же суммарным XP.' },
146
+ { type: 'tip', title: 'Высокий CR как особый сигнал опасности', html: 'Монстр с CR выше уровня группы может вывести персонажа из строя за одно мощное действие. Проверяйте урон и способности контроля, а не только итоговую метку сложности.' },
147
+ { type: 'title', text: 'Используйте результат для подготовки', level: 2 },
148
+ { type: 'paragraph', html: 'Перед проведением сложного или смертельного боя оцените окружение, фактор внезапности и состояние группы. Тесное помещение, укрытия, ловушки и заклинания концентрации могут существенно изменить реальную угрозу за столом.' },
149
+ { type: 'tip', title: 'Смешанные группы монстров', html: 'Сложите базовый XP каждого существа и примените множитель к общему количеству монстров.' },
150
+ ],
151
+ faq,
152
+ bibliography,
153
+ howTo,
154
+ schemas: [faqSchema, appSchema, howToSchema] as unknown as Record<string, unknown>[],
155
+ };
@@ -0,0 +1,155 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { EncounterDifficultyLocaleContent, EncounterDifficultyUI } from '../entry';
4
+
5
+ const ui: EncounterDifficultyUI = {
6
+ intro: 'Ställ in gruppen och hotet. Kalkylatorn väger striden mot tröskelvärdena i D&D 5e 2014.',
7
+ partySection: 'Gruppen',
8
+ partyLevel: 'Karaktärsnivå',
9
+ partyLevelHint: 'Använd en genomsnittlig nivå för en grupp med liknande karaktärsnivåer.',
10
+ partySize: 'Karaktärer',
11
+ partySizeHint: 'Reglerna justerar monstermultiplikatorn för mycket små eller stora grupper.',
12
+ threatSection: 'Hotet',
13
+ monsterCr: 'Monstrets utmaningsgrad (CR)',
14
+ monsterCrHint: 'Välj CR för ett monster. Blanda monster kräver en separat beräkning.',
15
+ moreCr: 'Visa högre CR',
16
+ lessCr: 'Visa färre CR',
17
+ monsterCount: 'Antal monster',
18
+ monsterCountHint: 'Fler varelser ökar aktionstrycket även vid måttlig bas-XP.',
19
+ presets: 'Börja med en scen',
20
+ presetClassic: 'Klassisk patrull',
21
+ presetBoss: 'Ensam boss',
22
+ presetSwarm: 'Svärm av hejdukar',
23
+ resultSection: 'Stridstryck',
24
+ belowEasyHint: 'En lätt scen för att spara resurser inför kommande utmaningar.',
25
+ easyHint: 'En hanterbar scen med lågt tryck på gruppen.',
26
+ mediumHint: 'Ett meningsfullt test som kan kosta kroppspoäng eller resurser.',
27
+ hardHint: 'En farlig scen där taktik och resursval spelar roll.',
28
+ deadlyHint: 'Signal för dödligt tryck. Kontrollera reträttvägar och terräng.',
29
+ adjustedXp: 'Justerad XP',
30
+ baseXp: 'Bas-XP',
31
+ multiplier: 'Gruppmultiplikator',
32
+ partyThreshold: 'Medeltröskel',
33
+ belowEasy: 'Under lätt',
34
+ easy: 'Lätt',
35
+ medium: 'Medel',
36
+ hard: 'Svår',
37
+ deadly: 'Dödlig',
38
+ warning: 'Viktigt',
39
+ partyAdjustment: 'Multiplikatorn har justerats eftersom gruppen har färre än tre eller fler än fem karaktärer.',
40
+ highCr: 'Ett monster med högre CR än gruppens nivå kan slå ut en karaktär snabbt.',
41
+ manyMonsters: 'Elva eller fler monster gör striden svårstyrd och skapar ojämn aktionsekonomi.',
42
+ rulesNote: 'Uppskattning enligt D&D 5e 2014-reglerna. Tar inte hänsyn till terräng eller taktik.',
43
+ rulesLinkLabel: 'Läs källreglerna',
44
+ reset: 'Återställ till exempel',
45
+ xpUnit: 'XP',
46
+ sceneLabel: 'Grafisk visning av stridstryck',
47
+ partyMarker: 'Grupp',
48
+ threatMarker: 'Hot',
49
+ };
50
+
51
+ const faq = [
52
+ {
53
+ question: 'Vilka regler använder denna stridskalkylator?',
54
+ answer: 'Den använder den officiella D&D 5e 2014-metoden från Grundreglerna och jämför gruppens trösklar med monstrets justerade XP.',
55
+ },
56
+ {
57
+ question: 'Varför skiljer sig justerad XP från belönings-XP?',
58
+ answer: 'Reglerna multiplicerar den totala monster-XP:n för att återspegla faran med att flera varelser agerar i samma runda.',
59
+ },
60
+ {
61
+ question: 'Kan jag använda verktyget för en blandad grupp monster?',
62
+ answer: 'Använd det som en snabb uppskattning för identiska monster. För blandade grupper summeras bas-XP och multiplikatorn tillämpas.',
63
+ },
64
+ {
65
+ question: 'Betyder ett dödligt resultat att gruppen kommer att dö?',
66
+ answer: 'Nej. Dödligt innebär att justerad XP når den dödliga tröskeln. Terräng, taktik och beslut ändrar det faktiska resultatet.',
67
+ },
68
+ {
69
+ question: 'Varför ändrar gruppstorleken multiplikatorn?',
70
+ answer: 'Grundreglerna rekommenderar en högre multiplikator för grupper under tre karaktärer och en lägre för grupper på sex eller fler.',
71
+ },
72
+ ];
73
+
74
+ const howTo = [
75
+ {
76
+ name: 'Ställ in gruppnivå',
77
+ text: 'Välj den genomsnittliga nivån på karaktärerna i gruppen.',
78
+ },
79
+ {
80
+ name: 'Ange gruppstorlek',
81
+ text: 'Ange antalet karaktärer som deltar i striden.',
82
+ },
83
+ {
84
+ name: 'Beskriv hotet',
85
+ text: 'Välj utmaningsgrad (CR) och antal monster.',
86
+ },
87
+ {
88
+ name: 'Läs av trycket',
89
+ text: 'Jämför justerad XP med tröskelvärdena.',
90
+ },
91
+ ];
92
+
93
+ const faqSchema: WithContext<FAQPage> = {
94
+ '@context': 'https://schema.org',
95
+ '@type': 'FAQPage',
96
+ mainEntity: faq.map((item) => ({
97
+ '@type': 'Question',
98
+ name: item.question,
99
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
100
+ })),
101
+ };
102
+
103
+ const appSchema: WithContext<SoftwareApplication> = {
104
+ '@context': 'https://schema.org',
105
+ '@type': 'SoftwareApplication',
106
+ name: 'D&D 5e Stridssvårighetskalkylator',
107
+ operatingSystem: 'All',
108
+ applicationCategory: 'GameApplication',
109
+ description: 'Beräkna stridssvårighet för D&D 5e 2014 utifrån nivå, gruppstorlek, monster-CR, antal och officiella tröskelvärden.',
110
+ };
111
+
112
+ const howToSchema: WithContext<HowTo> = {
113
+ '@context': 'https://schema.org',
114
+ '@type': 'HowTo',
115
+ name: 'Hur du beräknar stridssvårighet i D&D 5e',
116
+ step: howTo.map((item) => ({
117
+ '@type': 'HowToStep',
118
+ name: item.name,
119
+ text: item.text,
120
+ })),
121
+ };
122
+
123
+ export const content: EncounterDifficultyLocaleContent = {
124
+ slug: 'dnd-5e-stridssvarighetskalkylator',
125
+ title: 'D&D 5e Stridssvårighetskalkylator',
126
+ description: 'Uppskatta stridstryck i D&D 5e 2014 med gruppnivå, storlek, monster-CR, justerad XP och officiella tröskelvärden.',
127
+ ui,
128
+ seo: [
129
+ { type: 'title', text: 'Utvärdera stridssvårighet innan initiativet rullas', level: 2 },
130
+ { type: 'paragraph', html: 'En D&D-strid är mer än bara siffran bredvid ett monster. Denna kalkylator omvandlar gruppstorlek, nivå, CR och antal monster till justerad XP enligt D&D 5e 2014-reglerna. Det visuella resultatet visar tydligt var striden hamnar i förhållande till trösklarna för lätt, medel, svår och dödlig.' },
131
+ { type: 'title', text: 'Hur formeln för D&D 5e-strider fungerar', level: 2 },
132
+ { type: 'paragraph', html: 'Metoden summerar XP-tröskeln för varje karaktär vid varje svårighetsgrad och tillämpar sedan multiplikatorn på monstrets totala XP. Grupper med färre än tre karaktärer använder nästa högre multiplikator, medan grupper på sex eller fler använder nästa lägre.' },
133
+ {
134
+ type: 'table',
135
+ headers: ['Signal', 'Vad du ska kontrollera vid bordet'],
136
+ rows: [
137
+ ['Under lätt', 'Striden fungerar som uppvärmning eller lätt resursförbrukning.'],
138
+ ['Lätt', 'Gruppen vinner vanligtvis utan stor resursinsats.'],
139
+ ['Medel', 'Räkna med måttligt tryck och minst ett viktigt resursval.'],
140
+ ['Svår', 'Planera för förlust av kroppspoäng och trollformelsplatser.'],
141
+ ['Dödlig', 'Kontrollera taktik, terräng och reträttvägar.'],
142
+ ],
143
+ },
144
+ { type: 'title', text: 'Varför antalet monster är avgörande', level: 2 },
145
+ { type: 'paragraph', html: 'Flera monster utgör en större fara än deras bas-XP visar eftersom de utför fler attacker och reaktioner i samma runda. Därför använder ett par varelser en högre multiplikator än en enskild varelse med samma kombinerade XP.' },
146
+ { type: 'tip', title: 'Betrakta hög CR som en specifik varning', html: 'Ett monster med högre CR än gruppens nivå kan slå ut en karaktär med en enda kraftfull handling. Kontrollera skada och effekter istället för att enbart lita på svårighetsetiketten.' },
147
+ { type: 'title', text: 'Använd resultatet som ett verktyg vid förberedelse', level: 2 },
148
+ { type: 'paragraph', html: 'Innan du planerar en svår eller dödlig strid bör du utvärdera rummets storlek, överraskning och gruppens tillstånd. Trånga utrymmen, skydd, fällor och koncentrationsformler kan förändra den faktiska faran vid bordet.' },
149
+ { type: 'tip', title: 'Blandade monstergrupper', html: 'Summera bas-XP för varje varelse och tillämpa multiplikatorn på det totala antalet monster.' },
150
+ ],
151
+ faq,
152
+ bibliography,
153
+ howTo,
154
+ schemas: [faqSchema, appSchema, howToSchema] as unknown as Record<string, unknown>[],
155
+ };
@@ -0,0 +1,155 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { EncounterDifficultyLocaleContent, EncounterDifficultyUI } from '../entry';
4
+
5
+ const ui: EncounterDifficultyUI = {
6
+ intro: 'Grubu ve tehdidi ayarlayın. Hesaplayıcı karşılaşmayı D&D 5e 2014 eşikleriyle karşılaştırır.',
7
+ partySection: 'Grup',
8
+ partyLevel: 'Karakter seviyesi',
9
+ partyLevelHint: 'Benzer seviyedeki bir grup için ortalama seviye kullanın.',
10
+ partySize: 'Karakterler',
11
+ partySizeHint: 'Kurallar çok küçük veya büyük gruplar için canavar çarpanını ayarlar.',
12
+ threatSection: 'Tehdit',
13
+ monsterCr: 'Canavar meydan okuma derecesi (CR)',
14
+ monsterCrHint: 'Aynı tür canavarlar için bir CR seçin. Karışık gruplar ayrı hesaplama gerektirir.',
15
+ moreCr: 'Daha yüksek CR göster',
16
+ lessCr: 'Daha az CR göster',
17
+ monsterCount: 'Canavar sayısı',
18
+ monsterCountHint: 'Daha fazla yaratık, temel XP mütevazı olsa bile eylem baskısını artırır.',
19
+ presets: 'Bir sahne ile başlayın',
20
+ presetClassic: 'Klasik devriye',
21
+ presetBoss: 'Yalnız patron',
22
+ presetSwarm: 'Minyon sürüsü',
23
+ resultSection: 'Karşılaşma baskısı',
24
+ belowEasyHint: 'Gelecek zorluklar için kaynakları koruyan hafif bir sahne.',
25
+ easyHint: 'Grup üzerinde az baskı oluşturan yönetilebilir bir sahne.',
26
+ mediumHint: 'Can puanı veya kaynak maliyeti çıkarabilecek anlamlı bir test.',
27
+ hardHint: 'Taktik ve kaynak seçimlerinin önem taşıdığı tehlikeli bir sahne.',
28
+ deadlyHint: 'Ölümcül baskı sinyali. Kaçış yollarını ve araziyi kontrol edin.',
29
+ adjustedXp: 'Ayarlanmış XP',
30
+ baseXp: 'Temel XP',
31
+ multiplier: 'Grup çarpanı',
32
+ partyThreshold: 'Orta eşik',
33
+ belowEasy: 'Kolay altı',
34
+ easy: 'Kolay',
35
+ medium: 'Orta',
36
+ hard: 'Zor',
37
+ deadly: 'Ölümcül',
38
+ warning: 'Dikkat',
39
+ partyAdjustment: 'Grup üçten az veya beşten fazla karakterden oluştuğu için çarpan ayarlandı.',
40
+ highCr: 'Grup seviyesinden yüksek CR değerine sahip bir canavar bir karakteri hızlıca düşürebilir.',
41
+ manyMonsters: 'On bir veya daha fazla canavar savaşı yönetmeyi zorlaştırır.',
42
+ rulesNote: 'D&D 5e 2014 kurallarına göre tahmindir. Arazi veya taktikleri hesaba katmaz.',
43
+ rulesLinkLabel: 'Kaynak kuralları oku',
44
+ reset: 'Örneğe sıfırla',
45
+ xpUnit: 'XP',
46
+ sceneLabel: 'Savaş baskısı görsel göstergesi',
47
+ partyMarker: 'Grup',
48
+ threatMarker: 'Tehdit',
49
+ };
50
+
51
+ const faq = [
52
+ {
53
+ question: 'Bu karşılaşma zorluğu hesaplayıcısı hangi kuralları kullanır?',
54
+ answer: 'Temel Kurallar daki resmi D&D 5e 2014 yöntemini kullanır. Kolay, orta, zor ve ölümcül eşikleri ayarlanmış XP ile karşılaştırır.',
55
+ },
56
+ {
57
+ question: 'Ayarlanmış XP neden canavarın ödül XP sinden farklıdır?',
58
+ answer: 'Kurallar, aynı turda hareket eden birden fazla yaratığın tehlikesini yansıtmak için toplam XP yi bir çarpanla çarpar.',
59
+ },
60
+ {
61
+ question: 'Bunu karışık canavar grupları için kullanabilir miyim?',
62
+ answer: 'Aynı tür canavarlar için hızlı bir tahmin olarak kullanın. Karışık gruplarda her yaratığın XP sini toplayıp çarpanı uygulayın.',
63
+ },
64
+ {
65
+ question: 'Ölümcül sonuç grubun öleceği anlamına mı gelir?',
66
+ answer: 'Hayır. Ölümcül, ayarlanmış XP nin ölümcül eşiğe ulaştığını gösterir. Arazi, taktikler ve büyüler sonucu değiştirebilir.',
67
+ },
68
+ {
69
+ question: 'Grup büyüklüğü çarpanı neden değiştirir?',
70
+ answer: 'Temel Kurallar, üçten az karaktere sahip gruplar için çarpanı artırmayı, altı veya daha fazla karakter için azaltmayı önerir.',
71
+ },
72
+ ];
73
+
74
+ const howTo = [
75
+ {
76
+ name: 'Grup seviyesini ayarlayın',
77
+ text: 'Gruptaki karakterlerin ortalama seviyesini seçin.',
78
+ },
79
+ {
80
+ name: 'Grup büyüklüğünü belirleyin',
81
+ text: 'Savaşa katılacak karakter sayısını girin.',
82
+ },
83
+ {
84
+ name: 'Tehdidi tanımlayın',
85
+ text: 'Meydan okuma derecesini (CR) ve canavar sayısını seçin.',
86
+ },
87
+ {
88
+ name: 'Baskıyı inceleyin',
89
+ text: 'Ayarlanmış XP yi resmi zorluk eşikleriyle karşılaştırın.',
90
+ },
91
+ ];
92
+
93
+ const faqSchema: WithContext<FAQPage> = {
94
+ '@context': 'https://schema.org',
95
+ '@type': 'FAQPage',
96
+ mainEntity: faq.map((item) => ({
97
+ '@type': 'Question',
98
+ name: item.question,
99
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
100
+ })),
101
+ };
102
+
103
+ const appSchema: WithContext<SoftwareApplication> = {
104
+ '@context': 'https://schema.org',
105
+ '@type': 'SoftwareApplication',
106
+ name: 'D&D 5e Karşılaşma Zorluğu Hesaplayıcı',
107
+ operatingSystem: 'All',
108
+ applicationCategory: 'GameApplication',
109
+ description: 'Seviye, grup büyüklüğü, canavar CR, sayı ve resmi eşiklere göre D&D 5e 2014 karşılaşma zorluğunu hesaplayın.',
110
+ };
111
+
112
+ const howToSchema: WithContext<HowTo> = {
113
+ '@context': 'https://schema.org',
114
+ '@type': 'HowTo',
115
+ name: 'D&D 5e karşılaşma zorluğu nasıl hesaplanır',
116
+ step: howTo.map((item) => ({
117
+ '@type': 'HowToStep',
118
+ name: item.name,
119
+ text: item.text,
120
+ })),
121
+ };
122
+
123
+ export const content: EncounterDifficultyLocaleContent = {
124
+ slug: 'dnd-5e-karsilasma-zorlugu-hesaplayici',
125
+ title: 'D&D 5e Karşılaşma Zorluğu Hesaplayıcı',
126
+ description: 'Grup seviyesi, büyüklük, canavar CR, ayarlanmış XP ve resmi eşikler ile D&D 5e 2014 karşılaşma baskısını tahmin edin.',
127
+ ui,
128
+ seo: [
129
+ { type: 'title', text: 'İnisiyatif zarı atılmadan önce savaş zorluğunu değerlendirin', level: 2 },
130
+ { type: 'paragraph', html: 'Bir D&D karşılaşması bir canavarın yanında yazan sayıdan ibaret değildir. Bu hesaplayıcı grup büyüklüğü, seviye, CR ve canavar sayısını D&D 5e 2014 kurallarındaki ayarlanmış XP değerine dönüştürür. Görsel sonuç, karşılaşmanın kolay, orta, zor ve ölümcül eşiklerine göre nerede durduğunu net bir şekilde gösterir.' },
131
+ { type: 'title', text: 'D&D 5e karşılaşma formülü nasıl çalışır', level: 2 },
132
+ { type: 'paragraph', html: 'Yöntem her zorluk seviyesi için her karakterin XP eşiğini toplar ve ardından toplam canavar XP sine çarpan uygular. Üçten az karaktere sahip gruplar bir üst çarpanı kullanırken, altı veya daha fazla karaktere sahip gruplar bir alt çarpanı kullanır.' },
133
+ {
134
+ type: 'table',
135
+ headers: ['Sinyal', 'Masada ne kontrol edilmeli'],
136
+ rows: [
137
+ ['Kolay altı', 'Karşılaşma bir ısınma veya hafif kaynak harcama sahnesidir.'],
138
+ ['Kolay', 'Grup genellikle fazla kaynak harcamadan kazanır.'],
139
+ ['Orta', 'Belirli bir baskı ve kaynak kullanımı konusunda anlamlı seçimler bekleyin.'],
140
+ ['Zor', 'Can puanı ve büyü yuvası kaybı planlayın.'],
141
+ ['Ölümcül', 'Taktikleri, araziyi ve kaçış yollarını kontrol edin.'],
142
+ ],
143
+ },
144
+ { type: 'title', text: 'Canavar sayısı neden önemlidir', level: 2 },
145
+ { type: 'paragraph', html: 'Birden fazla canavar aynı turda daha fazla saldırı ve reaksiyon yapabildiği için temel XP lerinin gösterdiğinden daha büyük tehlike yaratır. Bu nedenle bir çift yaratık, aynı birleşik XP ye sahip tek bir yaratıktan daha yüksek bir çarpan kullanır.' },
146
+ { type: 'tip', title: 'Yüksek CR değerini özel bir uyarı olarak görün', html: 'Grup seviyesinin üzerinde CR ye sahip bir canavar bir karakteri tek bir güçlü eylemle saf dışı bırakabilir. Yalnızca zorluk etiketine güvenmek yerine hasarı ve kontrol etkilerini doğrudan inceleyin.' },
147
+ { type: 'title', text: 'Sonucu bir hazırlık aracı olarak kullanın', level: 2 },
148
+ { type: 'paragraph', html: 'Zor veya ölümcül bir karşılaşma hazırlamadan önce ortamı, sürprizi ve grubun genel durumunu değerlendirin. Dar odalar, siperler, tuzaklar ve konsantrasyon büyüleri masadaki gerçek tehlikeyi önemli ölçüde değiştirebilir.' },
149
+ { type: 'tip', title: 'Karışık canavar grupları', html: 'Her yaratığın temel XP sini toplayın ve toplam canavar sayısına karşılık gelen çarpanı uygulayın.' },
150
+ ],
151
+ faq,
152
+ bibliography,
153
+ howTo,
154
+ schemas: [faqSchema, appSchema, howToSchema] as unknown as Record<string, unknown>[],
155
+ };
@@ -0,0 +1,155 @@
1
+ import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
2
+ import { bibliography } from '../bibliography';
3
+ import type { EncounterDifficultyLocaleContent, EncounterDifficultyUI } from '../entry';
4
+
5
+ const ui: EncounterDifficultyUI = {
6
+ intro: '设置队伍与威胁。计算器将根据 D&D 5e 2014 的官方阈值评估遭遇战的压力。',
7
+ partySection: '队伍设置',
8
+ partyLevel: '角色等级',
9
+ partyLevelHint: '对于等级相近的队伍,请使用平均等级。',
10
+ partySize: '角色人数',
11
+ partySizeHint: '规则会对过小或过大的队伍调整怪物乘数。',
12
+ threatSection: '威胁设置',
13
+ monsterCr: '怪物挑战等级 (CR)',
14
+ monsterCrHint: '选择同种怪物的 CR。混合怪物组合需要单独计算。',
15
+ moreCr: '显示更高 CR',
16
+ lessCr: '显示更少 CR',
17
+ monsterCount: '怪物数量',
18
+ monsterCountHint: '即便基础 XP 较低,较多的怪物也会显著增加行动经济压力。',
19
+ presets: '从预设场景开始',
20
+ presetClassic: '经典巡逻队',
21
+ presetBoss: '单体 Boss',
22
+ presetSwarm: '杂兵蜂拥',
23
+ resultSection: '遭遇战压力评估',
24
+ belowEasyHint: '轻松场景,可保留资源用于后续挑战。',
25
+ easyHint: '可控场景,对队伍压力较小。',
26
+ mediumHint: '有意义的考验,可能会消耗生命值或关键资源。',
27
+ hardHint: '危险场景,战术与资源选择至关重要。',
28
+ deadlyHint: '致命压力信号!请检查撤退路线、地形及失误成本。',
29
+ adjustedXp: '调整后 XP',
30
+ baseXp: '基础 XP',
31
+ multiplier: '队伍乘数',
32
+ partyThreshold: '中等阈值',
33
+ belowEasy: '低于简单',
34
+ easy: '简单',
35
+ medium: '中等',
36
+ hard: '困难',
37
+ deadly: '致命',
38
+ warning: '注意事项',
39
+ partyAdjustment: '由于队伍人数少于3人或多于5人,怪物乘数已作相应调整。',
40
+ highCr: 'CR 高于队伍等级的怪物可能在单次强力行动中击倒角色。',
41
+ manyMonsters: '11 个或更多怪物会让战斗主持变得复杂。',
42
+ rulesNote: '基于 D&D 5e 2014 规则的估算,未包含地形或战术因素。',
43
+ rulesLinkLabel: '阅读源规则',
44
+ reset: '重置为示例',
45
+ xpUnit: 'XP',
46
+ sceneLabel: '战斗压力可视化',
47
+ partyMarker: '队伍',
48
+ threatMarker: '威胁',
49
+ };
50
+
51
+ const faq = [
52
+ {
53
+ question: '本遭遇难度计算器使用什么规则?',
54
+ answer: '它使用基础规则中 D&D 5e 2014 的官方计算公式,将队伍阈值与怪物的调整后 XP 进行对比。',
55
+ },
56
+ {
57
+ question: '为什么调整后 XP 与怪物奖励 XP 不同?',
58
+ answer: '规则对怪物总 XP 进行乘数放大,以反映多个生物在同一轮行动带来的额外危险。',
59
+ },
60
+ {
61
+ question: '能否用于计算混合怪物组合?',
62
+ answer: '适合作为同种怪物的快速估算。对于混合组合,请累加每个生物的基础 XP 后再乘以对应乘数。',
63
+ },
64
+ {
65
+ question: '致命结果是否意味着队伍必然团灭?',
66
+ answer: '并非如此。致命代表调整后 XP 达到了致命阈值。地形、战术和法术使用都会改变实际结果。',
67
+ },
68
+ {
69
+ question: '为什么队伍人数会改变乘数?',
70
+ answer: '官方规则建议对少于 3 人的队伍提高乘数,对 6 人及以上的队伍降低乘数。',
71
+ },
72
+ ];
73
+
74
+ const howTo = [
75
+ {
76
+ name: '设置队伍等级',
77
+ text: '选择队伍中角色的平均等级。',
78
+ },
79
+ {
80
+ name: '设置队伍人数',
81
+ text: '输入参战角色的数量。',
82
+ },
83
+ {
84
+ name: '描述威胁',
85
+ text: '选择怪物的挑战等级 (CR) 和数量。',
86
+ },
87
+ {
88
+ name: '评估压力',
89
+ text: '对比调整后 XP 与官方难度阈值区间。',
90
+ },
91
+ ];
92
+
93
+ const faqSchema: WithContext<FAQPage> = {
94
+ '@context': 'https://schema.org',
95
+ '@type': 'FAQPage',
96
+ mainEntity: faq.map((item) => ({
97
+ '@type': 'Question',
98
+ name: item.question,
99
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
100
+ })),
101
+ };
102
+
103
+ const appSchema: WithContext<SoftwareApplication> = {
104
+ '@context': 'https://schema.org',
105
+ '@type': 'SoftwareApplication',
106
+ name: 'D&D 5e 遭遇难度计算器',
107
+ operatingSystem: 'All',
108
+ applicationCategory: 'GameApplication',
109
+ description: '根据等级、队伍人数、怪物 CR、数量及官方阈值计算 D&D 5e 2014 的遭遇战难度。',
110
+ };
111
+
112
+ const howToSchema: WithContext<HowTo> = {
113
+ '@context': 'https://schema.org',
114
+ '@type': 'HowTo',
115
+ name: '如何计算 D&D 5e 遭遇战难度',
116
+ step: howTo.map((item) => ({
117
+ '@type': 'HowToStep',
118
+ name: item.name,
119
+ text: item.text,
120
+ })),
121
+ };
122
+
123
+ export const content: EncounterDifficultyLocaleContent = {
124
+ slug: 'dnd-5e-encounter-difficulty-calculator',
125
+ title: 'D&D 5e 遭遇难度计算器',
126
+ description: '借助队伍等级、人数、怪物 CR、调整后 XP 与官方阈值估算 D&D 5e 2014 的战斗压力。',
127
+ ui,
128
+ seo: [
129
+ { type: 'title', text: '在投掷先攻前评估战斗难度', level: 2 },
130
+ { type: 'paragraph', html: 'D&D 遭遇战远不止怪物卡上的数值。本计算器将队伍人数、等级、CR 和怪物数量转化为 D&D 5e 2014 规则的调整后 XP。可视化展示可以清晰展现遭遇战相对于简单、中等、困难和致命阈值所处的位置与危险程度。' },
131
+ { type: 'title', text: 'D&D 5e 遭遇计算公式原理', level: 2 },
132
+ { type: 'paragraph', html: '该方法首先汇总各难度等级下的角色 XP 阈值,然后对怪物基础 XP 总和乘以相应的数量乘数。少于 3 人的队伍使用高一阶的乘数,而 6 人及以上的队伍则使用低一阶的乘数进行平衡调整。' },
133
+ {
134
+ type: 'table',
135
+ headers: ['信号', '案头检查要点'],
136
+ rows: [
137
+ ['低于简单', '遭遇战可作为热身或轻微资源消耗。'],
138
+ ['简单', '队伍通常无需消耗过多资源即可获胜。'],
139
+ ['中等', '预计会有适度压力以及至少一次关键资源决策。'],
140
+ ['困难', '请预估生命值与法术位的损失。'],
141
+ ['致命', '检查战术、地形及撤退路线。'],
142
+ ],
143
+ },
144
+ { type: 'title', text: '为什么怪物数量至关重要', level: 2 },
145
+ { type: 'paragraph', html: '多个怪物在同轮中拥有更多攻击与反应机会,因此带来的危险远超其基础 XP 所示。这就是为什么一对怪物使用的乘数要高于具有相同合并 XP 的单只怪物的原因所在。' },
146
+ { type: 'tip', title: '将高 CR 视作特定预警', html: 'CR 高于队伍等级的怪物可能凭借单次强力行动直接击倒角色。请仔细检查其伤害能力与控制效果,而不要仅仅依赖最终的难度标签或文字说明。' },
147
+ { type: 'title', text: '将计算结果作为备战辅助工具', level: 2 },
148
+ { type: 'paragraph', html: '在安排困难或致命遭遇前,请评估环境、突袭及队伍的整体状态。狭窄的空间、遮蔽物、环境伤害和专注法术都可能极大地改变桌面上的实际危险程度与战斗走向。' },
149
+ { type: 'tip', title: '混合怪物组合', html: '累加每个生物的基础 XP,并对怪物总数施加对应的乘数进行评估。' },
150
+ ],
151
+ faq,
152
+ bibliography,
153
+ howTo,
154
+ schemas: [faqSchema, appSchema, howToSchema] as unknown as Record<string, unknown>[],
155
+ };
@@ -0,0 +1,11 @@
1
+ import type { ToolDefinition } from '../../types';
2
+ import { encounterDifficultyCalculator } from './entry';
3
+
4
+ export * from './entry';
5
+
6
+ export const ENCOUNTER_DIFFICULTY_CALCULATOR_TOOL: ToolDefinition = {
7
+ entry: encounterDifficultyCalculator,
8
+ Component: () => import('./component.astro'),
9
+ SEOComponent: () => import('./seo.astro'),
10
+ BibliographyComponent: () => import('./bibliography.astro'),
11
+ };