@jjlmoya/utils-creative 1.7.0 → 1.8.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 (100) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +9 -0
  3. package/src/category/i18n/id.ts +9 -0
  4. package/src/category/i18n/it.ts +9 -0
  5. package/src/category/i18n/ja.ts +9 -0
  6. package/src/category/i18n/ko.ts +9 -0
  7. package/src/category/i18n/nl.ts +9 -0
  8. package/src/category/i18n/pl.ts +9 -0
  9. package/src/category/i18n/pt.ts +9 -0
  10. package/src/category/i18n/ru.ts +9 -0
  11. package/src/category/i18n/sv.ts +9 -0
  12. package/src/category/i18n/tr.ts +9 -0
  13. package/src/category/i18n/zh.ts +9 -0
  14. package/src/category/index.ts +12 -0
  15. package/src/tests/faq_count.test.ts +1 -1
  16. package/src/tests/i18n_coverage.test.ts +36 -0
  17. package/src/tests/locale_completeness.test.ts +2 -2
  18. package/src/tests/title_quality.test.ts +3 -3
  19. package/src/tool/bead-pattern-generator/i18n/de.ts +115 -0
  20. package/src/tool/bead-pattern-generator/i18n/en.ts +1 -1
  21. package/src/tool/bead-pattern-generator/i18n/es.ts +1 -1
  22. package/src/tool/bead-pattern-generator/i18n/fr.ts +1 -1
  23. package/src/tool/bead-pattern-generator/i18n/id.ts +115 -0
  24. package/src/tool/bead-pattern-generator/i18n/it.ts +115 -0
  25. package/src/tool/bead-pattern-generator/i18n/ja.ts +115 -0
  26. package/src/tool/bead-pattern-generator/i18n/ko.ts +115 -0
  27. package/src/tool/bead-pattern-generator/i18n/nl.ts +115 -0
  28. package/src/tool/bead-pattern-generator/i18n/pl.ts +115 -0
  29. package/src/tool/bead-pattern-generator/i18n/pt.ts +115 -0
  30. package/src/tool/bead-pattern-generator/i18n/ru.ts +115 -0
  31. package/src/tool/bead-pattern-generator/i18n/sv.ts +115 -0
  32. package/src/tool/bead-pattern-generator/i18n/tr.ts +115 -0
  33. package/src/tool/bead-pattern-generator/i18n/zh.ts +115 -0
  34. package/src/tool/bead-pattern-generator/index.ts +12 -0
  35. package/src/tool/dice-roller/i18n/de.ts +138 -0
  36. package/src/tool/dice-roller/i18n/id.ts +138 -0
  37. package/src/tool/dice-roller/i18n/it.ts +138 -0
  38. package/src/tool/dice-roller/i18n/ja.ts +138 -0
  39. package/src/tool/dice-roller/i18n/ko.ts +138 -0
  40. package/src/tool/dice-roller/i18n/nl.ts +138 -0
  41. package/src/tool/dice-roller/i18n/pl.ts +138 -0
  42. package/src/tool/dice-roller/i18n/pt.ts +138 -0
  43. package/src/tool/dice-roller/i18n/ru.ts +138 -0
  44. package/src/tool/dice-roller/i18n/sv.ts +138 -0
  45. package/src/tool/dice-roller/i18n/tr.ts +138 -0
  46. package/src/tool/dice-roller/i18n/zh.ts +138 -0
  47. package/src/tool/dice-roller/index.ts +12 -0
  48. package/src/tool/excuse-generator/i18n/de.ts +122 -0
  49. package/src/tool/excuse-generator/i18n/id.ts +122 -0
  50. package/src/tool/excuse-generator/i18n/it.ts +122 -0
  51. package/src/tool/excuse-generator/i18n/ja.ts +122 -0
  52. package/src/tool/excuse-generator/i18n/ko.ts +122 -0
  53. package/src/tool/excuse-generator/i18n/nl.ts +122 -0
  54. package/src/tool/excuse-generator/i18n/pl.ts +122 -0
  55. package/src/tool/excuse-generator/i18n/pt.ts +122 -0
  56. package/src/tool/excuse-generator/i18n/ru.ts +122 -0
  57. package/src/tool/excuse-generator/i18n/sv.ts +122 -0
  58. package/src/tool/excuse-generator/i18n/tr.ts +122 -0
  59. package/src/tool/excuse-generator/i18n/zh.ts +122 -0
  60. package/src/tool/excuse-generator/index.ts +12 -0
  61. package/src/tool/fortune-cookie/i18n/de.ts +127 -0
  62. package/src/tool/fortune-cookie/i18n/id.ts +127 -0
  63. package/src/tool/fortune-cookie/i18n/it.ts +127 -0
  64. package/src/tool/fortune-cookie/i18n/ja.ts +127 -0
  65. package/src/tool/fortune-cookie/i18n/ko.ts +127 -0
  66. package/src/tool/fortune-cookie/i18n/nl.ts +127 -0
  67. package/src/tool/fortune-cookie/i18n/pl.ts +127 -0
  68. package/src/tool/fortune-cookie/i18n/pt.ts +127 -0
  69. package/src/tool/fortune-cookie/i18n/ru.ts +127 -0
  70. package/src/tool/fortune-cookie/i18n/sv.ts +127 -0
  71. package/src/tool/fortune-cookie/i18n/tr.ts +127 -0
  72. package/src/tool/fortune-cookie/i18n/zh.ts +127 -0
  73. package/src/tool/fortune-cookie/index.ts +12 -0
  74. package/src/tool/synesthesia-painter/i18n/de.ts +122 -0
  75. package/src/tool/synesthesia-painter/i18n/fr.ts +2 -2
  76. package/src/tool/synesthesia-painter/i18n/id.ts +122 -0
  77. package/src/tool/synesthesia-painter/i18n/it.ts +122 -0
  78. package/src/tool/synesthesia-painter/i18n/ja.ts +122 -0
  79. package/src/tool/synesthesia-painter/i18n/ko.ts +122 -0
  80. package/src/tool/synesthesia-painter/i18n/nl.ts +122 -0
  81. package/src/tool/synesthesia-painter/i18n/pl.ts +122 -0
  82. package/src/tool/synesthesia-painter/i18n/pt.ts +122 -0
  83. package/src/tool/synesthesia-painter/i18n/ru.ts +122 -0
  84. package/src/tool/synesthesia-painter/i18n/sv.ts +122 -0
  85. package/src/tool/synesthesia-painter/i18n/tr.ts +122 -0
  86. package/src/tool/synesthesia-painter/i18n/zh.ts +122 -0
  87. package/src/tool/synesthesia-painter/index.ts +12 -0
  88. package/src/tool/zalgo-generator/i18n/de.ts +113 -0
  89. package/src/tool/zalgo-generator/i18n/id.ts +113 -0
  90. package/src/tool/zalgo-generator/i18n/it.ts +113 -0
  91. package/src/tool/zalgo-generator/i18n/ja.ts +113 -0
  92. package/src/tool/zalgo-generator/i18n/ko.ts +113 -0
  93. package/src/tool/zalgo-generator/i18n/nl.ts +113 -0
  94. package/src/tool/zalgo-generator/i18n/pl.ts +113 -0
  95. package/src/tool/zalgo-generator/i18n/pt.ts +113 -0
  96. package/src/tool/zalgo-generator/i18n/ru.ts +113 -0
  97. package/src/tool/zalgo-generator/i18n/sv.ts +113 -0
  98. package/src/tool/zalgo-generator/i18n/tr.ts +113 -0
  99. package/src/tool/zalgo-generator/i18n/zh.ts +113 -0
  100. package/src/tool/zalgo-generator/index.ts +12 -0
@@ -0,0 +1,138 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { DiceRollerLocaleContent } from '../index';
3
+
4
+ const slug = 'dice-roller-ko';
5
+ const title = '주사위 굴리기';
6
+ const description = 'RPG 및 보드게임을 위한 완벽한 주사위 시뮬레이터입니다. 수정치 및 기록 기능과 함께 d4, d6, d8, d10, d12, d20, d100을 굴려보세요.';
7
+
8
+ const faq: DiceRollerLocaleContent['faq'] = [
9
+ {
10
+ question: '유리함(Advantage) 판정(D&D)은 어떻게 시뮬레이션 하나요?',
11
+ answer: 'd20 버튼을 두 번 클릭하여 주사위 주머니에 d20 두 개를 추가하세요. 주사위를 굴린 후, 두 개의 개별 결과 중 더 높은 값을 취하면 됩니다. 표시되는 합계는 두 주사위의 합이지만, 결과 상세 내역을 통해 각 주사위의 눈을 개별적으로 확인할 수 있습니다.',
12
+ },
13
+ {
14
+ question: '결과값에 표시되는 초록색과 빨간색은 무엇을 의미하나요?',
15
+ answer: '초록색 결과는 주사위에서 나올 수 있는 최댓값이 나왔음("크리티컬")을 나타냅니다. 빨간색 결과는 최솟값("1", 즉 펌블)이 나왔음을 의미합니다. 이를 통해 크리티컬 성공과 대실패를 한눈에 파악할 수 있습니다.',
16
+ },
17
+ {
18
+ question: '같은 종류의 주사위를 여러 개 추가할 수 있나요?',
19
+ answer: '네. 주사위 버튼을 클릭할 때마다 주머니에 추가됩니다. d6을 세 번 클릭하면 주머니에 "3d6"이라고 표시됩니다. 개수를 줄이려면 주머니의 각 주사위 그룹 옆에 나타나는 "−" 버튼을 클릭하세요.',
20
+ },
21
+ {
22
+ question: '디지털 주사위가 실제 주사위만큼 무작위한가요?',
23
+ answer: '통계적으로 그렇습니다. 현대의 자바스크립트 엔진은 매우 높은 품질의 균등 분포를 가진 의사 난수 알고리즘(xorshift128+)을 사용합니다. 실제 주사위는 제조상의 미세한 결함으로 인해 결과가 편향될 수 있지만, 디지털 주사위는 그런 문제가 없습니다.',
24
+ },
25
+ {
26
+ question: 'd100은 무엇이며 어떻게 사용되나요?',
27
+ answer: 'd100(또는 d%)은 1부터 100까지의 숫자를 생성하며, ‘크툴루의 부름’이나 ‘워해머 판타지 RPG’와 같은 퍼센트 기반 게임 시스템에서 사용됩니다. 이는 "직접 확률"을 나타냅니다. 예를 들어, 은신 기술 수치가 65%라면 성공하려면 굴림 결과가 65 이하여야 합니다.',
28
+ },
29
+ ];
30
+
31
+ const howTo: DiceRollerLocaleContent['howTo'] = [
32
+ { name: '주사위 풀 구성', text: '주사위 버튼(d4, d6, d8...)을 클릭하여 풀에 추가하세요. 클릭할 때마다 해당 유형의 주사위가 하나씩 추가됩니다. 한 번의 굴림에 여러 유형을 섞어서 사용할 수 있습니다.' },
33
+ { name: '수정치 조정', text: '수정치 옆의 "+" 및 "−" 버튼을 사용하여 보너스 또는 페널티(D&D의 능력치 수정치 등)를 적용하세요. 수정치는 합계에 자동으로 반영됩니다.' },
34
+ { name: '주사위 굴리기', text: '"주사위 굴리기" 버튼을 누르세요. 오른쪽 패널에 최종 합계와 각 주사위의 개별 결과가 표시되며, 크리티컬(최댓값)은 초록색으로, 펌블(최솟값)은 빨간색으로 표시됩니다.' },
35
+ { name: '기록 확인', text: '모든 굴림은 사용된 주사위 표현식, 총 결과, 정확한 시간과 함께 기록에 남습니다. 기록은 해당 버튼으로 초기화할 수 있습니다.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faq.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowTo> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howTo.map((step) => ({
54
+ '@type': 'HowToStep',
55
+ name: step.name,
56
+ text: step.text,
57
+ })),
58
+ };
59
+
60
+ const appSchema: WithContext<SoftwareApplication> = {
61
+ '@context': 'https://schema.org',
62
+ '@type': 'SoftwareApplication',
63
+ name: title,
64
+ description,
65
+ applicationCategory: 'UtilitiesApplication',
66
+ operatingSystem: 'Web',
67
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
68
+ inLanguage: 'ko',
69
+ };
70
+
71
+ export const content: DiceRollerLocaleContent = {
72
+ slug,
73
+ title,
74
+ description,
75
+ faqTitle: '자주 묻는 질문',
76
+ bibliographyTitle: '확률 참고 자료',
77
+ ui: {
78
+ title: '주사위 굴리기',
79
+ description: '행운이 당신과 함께하기를.',
80
+ rollBtn: '주사위 굴리기',
81
+ totalLabel: '합계',
82
+ historyLabel: '기록',
83
+ clearHistoryBtn: '기록 삭제',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: '참고 문헌',
86
+ addDiceLabel: '주머니에 주사위 추가',
87
+ bagLabel: '주사위 주머니',
88
+ emptyBagBtn: '비우기',
89
+ emptyBagText: '주사위를 클릭하여 추가하세요',
90
+ modifierLabel: '수정치',
91
+ rollManyLabel: '주사위 $COUNT개 굴리기',
92
+ rollOneLabel: '주사위 $COUNT개 굴리기',
93
+ preRollText: '주사위를 추가하고 굴리세요',
94
+ emptyHistoryText: '주사위 기록이 여기에 표시됩니다'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: '무작위의 예술: 주사위의 역사와 수학', level: 2 },
98
+ { type: 'paragraph', html: '주사위는 인류가 가진 가장 오래된 무작위 생성기 중 하나입니다. 양과 염소의 발목뼈인 <strong>아스트라갈리(Astragali)</strong>는 기원전 5000년경 메소포타미아와 이집트에서 원시적인 4면체 주사위로 사용되었습니다. 깎아 만든 뼈에서 현대의 에폭시 수지 정이십면체에 이르기까지의 진화는 단순히 미적인 것뿐만 아니라, 확률 이론과 게임 메커니즘 설계의 여정이기도 합니다.' },
99
+ { type: 'title', text: '표준 주사위 세트', level: 3 },
100
+ { type: 'paragraph', html: '1974년 <strong>Dungeons &amp; Dragons</strong>에 의해 대중화된 롤플레잉 게임용 주사위 세트는 5개의 플라톤 다면체와 2개의 추가 형태로 구성됩니다: d4(정사면체), d6(정육면체), d8(정팔면체), d10(오각 트라페조헤드론), d12(정십이면체), d20(정이십면체) 및 d100(백분율 주사위). 각 다면체는 모든 면이 나올 확률이 정확히 동일한 균등 분포를 보장합니다.' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 – 정사면체:</strong> 맨발로 밟았을 때 가장 위험합니다. 4개의 삼각형 면을 가지며, 면당 확률은 25%입니다. 주로 단검 피해량이나 저레벨 주문에 사용됩니다.',
103
+ '<strong>d6 – 정육면체:</strong> 가장 보편적인 주사위입니다. 이집트의 세네트 이후 모든 보드게임에 등장합니다. 정육면체 기하학은 완벽한 균등 배분을 보장합니다.',
104
+ '<strong>d8 – 정팔면체:</strong> 창이나 배틀액스의 주사위입니다. 8개의 정삼각형 면을 가지며, 면당 확률은 12.5%입니다.',
105
+ '<strong>d10 – 오각 트라페조헤드론:</strong> 표준 세트 중 유일하게 플라톤 다면체가 아닌 형태입니다. 각 "정점"당 두 개의 마주보는 면이 있습니다. d100(두 개의 d10 결합)에 필수적입니다.',
106
+ '<strong>d12 – 정십이면체:</strong> 바바리안의 주사위입니다. 12개의 오각형 면을 가집니다. 많은 시스템에서 저평가되기도 하지만, D&D 5판 바바리안의 주역입니다.',
107
+ '<strong>d20 – 정이십면체:</strong> RPG의 왕입니다. 20개의 삼각형 면을 가집니다. d20 시스템의 주역으로, 거의 모든 행동의 성패를 결정합니다.',
108
+ '<strong>d100 – 백분율:</strong> 두 개의 d10을 결합(십의 자리 + 일의 자리)한 것입니다. ‘크툴루의 부름’이나 ‘워해머 판타지’와 같은 시스템에서 세밀한 확률을 정의합니다.',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '기원전 5000년', label: '최초의 주사위 (아스트라갈리)', icon: 'mdi:history' },
112
+ { value: '1974년', label: 'D&D를 통한 세트의 대중화', icon: 'mdi:sword' },
113
+ { value: '7가지 종류', label: '표준 RPG 주사위', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: '자바스크립트 난수 주기', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: '확률과 분포 곡선', level: 3 },
117
+ { type: 'paragraph', html: '주사위 한 개를 굴리면 <strong>이산 균등 분포</strong>를 얻게 됩니다. 즉, 모든 결과의 확률이 정확히 동일(1/n)합니다. 하지만 여러 개의 주사위를 결합하면 수학적인 마법이 일어나 평평했던 곡선을 <strong>정규 분포에 근접</strong>하게 변형시킵니다. 이것이 2d6이 1d12와 다른 이유입니다. 두 개의 6면 주사위로 7을 굴릴 확률은 6/36 ≈ 16.7%인 반면, 양 끝값(2와 12)이 나올 확률은 2.8%에 불과합니다.' },
118
+ { type: 'tip', title: '유리함과 불리함 (D&D 5e)', html: '<strong>유리함(Advantage)</strong> 메커니즘은 2d20을 굴려 더 높은 결과를 취하는 것입니다. 통계적으로 이는 평균값을 10.5에서 약 13.8로 높여줍니다. <strong>불리함(Disadvantage)</strong>은 반대로 더 낮은 결과를 취하여 평균을 약 7.2로 떨어뜨립니다. 본 시뮬레이터에서는 주머니에 두 개의 d20을 추가하고 결과를 비교함으로써 이를 시뮬레이션할 수 있습니다.' },
119
+ { type: 'title', text: '수정치: 주사위와 캐릭터 사이의 가교', level: 3 },
120
+ { type: 'paragraph', html: '대부분의 RPG 시스템에서 주사위는 단독으로 작동하지 않으며, 캐릭터의 능력을 나타내는 <strong>수정치(Modifier)</strong>가 더해지거나 빼집니다. D&D 5판에서 근력 수정치가 +5라면 1d20을 굴려 5를 더한 뒤 적의 방어력(AC)과 비교합니다. 본 시뮬레이터는 이러한 메커니즘을 충실히 반영하기 위해 수정치 제어 기능을 포함하고 있습니다.' },
121
+ { type: 'tip', title: '주사위 표기 표준', html: '<strong>XdY+Z</strong> 표기법은 롤플레잉 게임의 표준입니다. Y면체 주사위 X개를 굴리고 수정치 Z를 더한다는 의미입니다. "3d6+2"는 6면체 주사위 3개를 굴리고 합계에 2를 더하라는 뜻입니다. 저희 도구는 기록 기능에 이 표기법을 사용하여 굴림 결과를 쉽게 공유하거나 기록할 수 있게 합니다.' },
122
+ { type: 'glossary', items: [
123
+ { term: '크리티컬 히트', definition: '주사위 눈의 최댓값이 나오는 것(예: d20에서 20이 나오는 것). 대부분의 RPG 시스템에서 특별 보너스 효과를 발생시킵니다.' },
124
+ { term: '펌블 / 1 자연수 (Nat 1)', definition: '주사위의 최솟값(1)이 나오는 것. 종종 극적인 실패나 부정적인 결과를 초래합니다.' },
125
+ { term: '주사위 풀', definition: '동시에 굴려지는 주사위들의 모음입니다. 본 도구의 풀에서는 각 주사위 유형이 개수별로 그룹화되어 표시됩니다(예: 3d6 + 2d8).' },
126
+ { term: '수정치 (Modifier)', definition: '캐릭터의 숙련도, 능력치 보너스 또는 상황적 페널티를 나타내며 주사위 결과에 더하거나 빼는 고정된 숫자입니다.' },
127
+ { term: '백분율 굴림', definition: '두 개의 d10을 사용하여 1부터 100까지의 결과를 내는 것으로, 능력치가 백분율로 측정되는 기술 기반 시스템에서 사용됩니다.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography: [
132
+ { name: 'D&D Beyond – 주사위 메커니즘 규칙', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
+ { name: 'Roll20 – 가상 테이블탑 및 주사위 시스템', url: 'https://roll20.net/' },
134
+ { name: 'Pathfinder – d20 시스템 참조', url: 'https://paizo.com/pathfinder' },
135
+ ],
136
+ howTo,
137
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
138
+ };
@@ -0,0 +1,138 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { DiceRollerLocaleContent } from '../index';
3
+
4
+ const slug = 'dobbelsteen-roller';
5
+ const title = 'Dobbelsteen Roller';
6
+ const description = 'Een complete dobbelsteensimulator voor je RPG- en bordspellen. Rol d4, d6, d8, d10, d12, d20 en d100 met modifiers en geschiedenis.';
7
+
8
+ const faq: DiceRollerLocaleContent['faq'] = [
9
+ {
10
+ question: 'Hoe kan ik een worp met voordeel (advantage) simuleren (D&D)?',
11
+ answer: 'Voeg twee d20 dobbelstenen toe aan de zak door twee keer op de d20-knop te klikken. Let bij het rollen op de twee individuele resultaten en houd de hoogste aan. De getoonde totaalwaarde is de som, maar je kunt elke dobbelsteen afzonderlijk zien in de uitsplitsing van het resultaat.',
12
+ },
13
+ {
14
+ question: 'Wat betekent de groene of rode kleur bij de resultaten?',
15
+ answer: 'Groene resultaten geven aan dat de dobbelsteen de maximaal mogelijke waarde heeft gerold (een "critical"). Rode resultaten geven de minimumwaarde aan (een "1", het slechtst mogelijke resultaat). Dit maakt het gemakkelijk om crits en fumbles in één oogopslag te herkennen.',
16
+ },
17
+ {
18
+ question: 'Kan ik meerdere dobbelstenen van hetzelfde type toevoegen?',
19
+ answer: 'Ja. Elke klik op een dobbelsteen voegt deze toe aan de zak. Als je drie keer op d6 klikt, zie je "3d6" in de zak. Om het aantal te verminderen, klik je op de "−" knop die naast elke dobbelsteengroep in de zak verschijnt.',
20
+ },
21
+ {
22
+ question: 'Zijn digitale dobbelstenen net zo willekeurig als fysieke?',
23
+ answer: 'Statistisch gezien, ja. Moderne JavaScript-engines gebruiken pseudorandom algoritmen (xorshift128+) met een zeer hoogwaardige uniforme verdeling. Een echte fysieke dobbelsteen kan kleine fabricagefoutjes hebben die de resultaten beïnvloeden; de digitale dobbelsteen heeft dat probleem niet.',
24
+ },
25
+ {
26
+ question: 'Wat is de d100 en hoe wordt deze gebruikt?',
27
+ answer: 'De d100 (of d%) genereert een getal van 1 tot 100 en wordt gebruikt in percentage-gebaseerde spelsystemen, zoals Call of Cthulhu of Warhammer Fantasy Roleplay. Het vertegenwoordigt "directe waarschijnlijkheid": als je Stealthvaardigheid 65% is, moet je 65 of lager rollen om te slagen.',
28
+ },
29
+ ];
30
+
31
+ const howTo: DiceRollerLocaleContent['howTo'] = [
32
+ { name: 'Bouw de dobbelsteenpool op', text: 'Klik op de dobbelsteenknoppen (d4, d6, d8...) om ze aan je pool toe te voegen. Elke klik voegt één dobbelsteen van het geselecteerde type toe. Je kunt verschillende types in dezelfde worp mengen.' },
33
+ { name: 'Pas de modifier aan', text: 'Gebruik de "+" en "−" knoppen naast de modifier om bonussen of straffen toe te passen (zoals de ability modifier in D&D). De modifier wordt automatisch bij het totaal opgeteld.' },
34
+ { name: 'Rol de dobbelstenen', text: 'Druk op de knop "Gooi Dobbelstenen". Het rechterpaneel toont het uiteindelijke totaal en de uitsplitsing van elke individuele dobbelsteen, met crits (maximum) in het groen en fumbles (minimum) in het rood.' },
35
+ { name: 'Bekijk de geschiedenis', text: 'Elke worp wordt in de geschiedenis opgenomen met de gebruikte dobbelsteennotatie, het totaalresultaat en de exacte tijd. Je kunt de geschiedenis wissen met de bijbehorende knop.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faq.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowTo> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howTo.map((step) => ({
54
+ '@type': 'HowToStep',
55
+ name: step.name,
56
+ text: step.text,
57
+ })),
58
+ };
59
+
60
+ const appSchema: WithContext<SoftwareApplication> = {
61
+ '@context': 'https://schema.org',
62
+ '@type': 'SoftwareApplication',
63
+ name: title,
64
+ description,
65
+ applicationCategory: 'UtilitiesApplication',
66
+ operatingSystem: 'Web',
67
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
68
+ inLanguage: 'nl',
69
+ };
70
+
71
+ export const content: DiceRollerLocaleContent = {
72
+ slug,
73
+ title,
74
+ description,
75
+ faqTitle: 'Veelgestelde Vragen',
76
+ bibliographyTitle: 'Waarschijnlijkheidsbibliografie',
77
+ ui: {
78
+ title: 'Dobbelsteen Roller',
79
+ description: 'Moge het geluk aan jouw zijde staan.',
80
+ rollBtn: 'Gooi Dobbelstenen',
81
+ totalLabel: 'Totaal',
82
+ historyLabel: 'Geschiedenis',
83
+ clearHistoryBtn: 'Wis Geschiedenis',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: 'Referenties',
86
+ addDiceLabel: 'Voeg dobbelstenen toe aan de zak',
87
+ bagLabel: 'Dobbelsteenzak',
88
+ emptyBagBtn: 'Leegmaken',
89
+ emptyBagText: 'Klik op de dobbelstenen om ze toe te voegen',
90
+ modifierLabel: 'Modifier',
91
+ rollManyLabel: 'Gooi $COUNT dobbelstenen',
92
+ rollOneLabel: 'Gooi $COUNT dobbelsteen',
93
+ preRollText: 'Voeg dobbelstenen toe en gooi',
94
+ emptyHistoryText: 'De geschiedenis van de worpen verschijnt hier'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: 'De Kunst van de Willekeur: Geschiedenis en Wiskunde van Dobbelstenen', level: 2 },
98
+ { type: 'paragraph', html: 'Dobbelstenen behoren tot de oudste toevalsgeneratoren van de mensheid. <strong>Astragali</strong> — enkelbotjes van schapen en geiten — werden al in 5000 v.Chr. in Mesopotamië en Egypte als primitieve vierzijdige dobbelstenen gebruikt. De evolutie van gesneden bot naar moderne epoxyhars-icosaëders is niet alleen esthetisch: het is een reis door de kansrekening en het ontwerpen van spelmechanieken.' },
99
+ { type: 'title', text: 'De Standaard Dobbelsteenfamilie', level: 3 },
100
+ { type: 'paragraph', html: 'De meest verspreide set dobbelstenen in rollenspellen — gepopulariseerd door <strong>Dungeons &amp; Dragons</strong> in 1974 — bestaat uit de vijf Platonische lichamen plus twee extra vormen: d4 (tetraëder), d6 (kubus), d8 (octaëder), d10 (pentagonale trapezoëder), d12 (dodecaëder), d20 (icosaëder) en d100 (procentuele dobbelsteen). Elk veelvlak garandeert een uniforme verdeling: alle vlakken hebben precies dezelfde kans om boven te komen.' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 – Tetraëder:</strong> Het gevaarlijkst als je er met blote voeten op stapt. Vier driehoekige vlakken, 25% kans per vlak. Veelgebruikt voor dolkschade of spreuken van laag niveau.',
103
+ '<strong>d6 – Kubus:</strong> De meest universele dobbelsteen. Aanwezig in alle bordspellen sinds het Egyptische Senet. Zijn kubusvormige geometrie garandeert perfecte gelijke verdeling.',
104
+ '<strong>d8 – Octaëder:</strong> De dobbelsteen van de speer of strijdbijl. Acht gelijkzijdige driehoekige vlakken. 12,5% kans per vlak.',
105
+ '<strong>d10 – Pentagonale trapezoëder:</strong> Het enige niet-Platonische lichaam in de standaardset. Twee tegenover elkaar liggende vlakken per "hoekpunt". Onmisbaar voor de d100 (twee gecombineerde d10\'s).',
106
+ '<strong>d12 – Dodecaëder:</strong> De dobbelsteen van de barbaar. Twaalf vijfhoekige vlakken. Ondergewaardeerd in veel systemen, hoofdrolspeler voor de D&D 5e Barbarian.',
107
+ '<strong>d20 – Icosaëder:</strong> De koning van de RPG. Twintig driehoekige vlakken. Hoofdrolspeler van het d20-systeem: bepaalt succes of falen van bijna alle acties.',
108
+ '<strong>d100 – Percentiel:</strong> Twee gecombineerde d10\'s (tientallen + eenheden). Definieert nauwkeurige waarschijnlijkheden in systemen zoals Call of Cthulhu of Warhammer Fantasy.',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '5000 v.Chr.', label: 'Eerste dobbelstenen (astragali)', icon: 'mdi:history' },
112
+ { value: '1974', label: 'D&D populariseerde de set', icon: 'mdi:sword' },
113
+ { value: '7 types', label: 'Standaard RPG-dobbelstenen', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: 'JS willekeurige periode', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: 'Kansrekening en Verdelingscurven', level: 3 },
117
+ { type: 'paragraph', html: 'Wanneer je een enkele dobbelsteen gooit, krijg je een <strong>discrete uniforme verdeling</strong>: elk resultaat heeft precies dezelfde kans (1/n). Maar zodra je meerdere dobbelstenen combineert, transformeert de wiskundige magie die vlakke curve in een <strong>benaderende normale verdeling</strong>. Daarom is 2d6 niet hetzelfde als 1d12: met twee zeszijdige dobbelstenen is de kans op een 7 gelijk aan 6/36 ≈ 16,7%, terwijl de uitersten (2 en 12) slechts 2,8% van de tijd voorkomen.' },
118
+ { type: 'tip', title: 'Voordeel en Nadeel (D&D 5e)', html: 'De <strong>Voordeel</strong>-mechaniek bestaat uit het gooien van 2d20 en het behouden van het hoogste resultaat. Wiskundig gezien verhoogt dit het gemiddelde van 10,5 naar ongeveer 13,8. <strong>Nadeel</strong> doet het tegenovergestelde: neem de laagste, waardoor het gemiddelde daalt naar ongeveer 7,2. Met onze roller kun je dit simuleren door twee d20\'s aan de zak toe te voegen en de individuele resultaten te vergelijken.' },
119
+ { type: 'title', text: 'Modifiers: De Brug tussen Dobbelsteen en Personage', level: 3 },
120
+ { type: 'paragraph', html: 'In de meeste RPG-systemen werkt de dobbelsteen niet alleen: een <strong>modifier</strong> die de vaardigheden van het personage vertegenwoordigt, wordt opgeteld of afgetrokken. In D&D 5e betekent een Strength-modifier van +5 dat je 1d20 gooit, er 5 bij optelt en het resultaat vergelijkt met de Armor Class van de vijand. Onze roller bevat een modifier-regelaar om deze mechanieken natuurgetrouw weer te geven.' },
121
+ { type: 'tip', title: 'Standaard Dobbelsteennotatie', html: 'De <strong>XdY+Z</strong> notatie is de feitelijke standaard in rollenspellen: X dobbelstenen van Y vlakken met modifier Z. "3d6+2" betekent gooi drie zeszijdige dobbelstenen en tel 2 op bij het totaal. Onze tool gebruikt deze notatie in de geschiedenis, zodat je je worpen gemakkelijk kunt delen of vastleggen.' },
122
+ { type: 'glossary', items: [
123
+ { term: 'Critical Hit', definition: 'Een worp met de maximale waarde op een dobbelsteen (bijv. een 20 op een d20). Activeert meestal speciale bonus-effecten in de meeste RPG-systemen.' },
124
+ { term: 'Fumble / Nat 1', definition: 'Het gooien van de minimumwaarde (1) op een dobbelsteen. Resulteert vaak in een dramatische mislukking of negatieve consequentie.' },
125
+ { term: 'Dice Pool', definition: 'Een verzameling dobbelstenen die tegelijkertijd worden gegooid. De pool in onze tool toont elk dobbelsteentype gegroepeerd naar aantal (bijv. 3d6 + 2d8).' },
126
+ { term: 'Modifier', definition: 'Een vast getal dat wordt opgeteld of afgetrokken van een resultaat van een worp, en dat de vaardigheid, attribuutbonus of situationele straf van een personage vertegenwoordigt.' },
127
+ { term: 'Percentielworp', definition: 'Een worp met twee d10\'s om een resultaat van 1–100 te produceren, gebruikt in op vaardigheden gebaseerde systemen waarbij vermogens als percentages worden gemeten.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography: [
132
+ { name: 'D&D Beyond – Dobbelsteenmechanica regels', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
+ { name: 'Roll20 – Virtuele tafel en dobbelsteensystemen', url: 'https://roll20.net/' },
134
+ { name: 'Pathfinder – d20 System Reference', url: 'https://paizo.com/pathfinder' },
135
+ ],
136
+ howTo,
137
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
138
+ };
@@ -0,0 +1,138 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { DiceRollerLocaleContent } from '../index';
3
+
4
+ const slug = 'kostka-do-gry';
5
+ const title = 'Kostka do Gry';
6
+ const description = 'Kompletny symulator kości do Twoich gier RPG i planszówek. Rzucaj k4, k6, k8, k10, k12, k20 oraz k100 z modyfikatorami i historią.';
7
+
8
+ const faq: DiceRollerLocaleContent['faq'] = [
9
+ {
10
+ question: 'Jak symulować rzut z ułatwieniem (advantage - D&D)?',
11
+ answer: 'Dodaj dwie kości k20 do worka, klikając dwukrotnie przycisk k20. Podczas rzutu obserwuj dwa indywidualne wyniki i zachowaj ten wyższy. Wyświetlona suma będzie ich dodatkiem, ale możesz zobaczyć każdą kość z osobna w zestawieniu wyników.',
12
+ },
13
+ {
14
+ question: 'Co oznacza zielony lub czerwony kolor wyników?',
15
+ answer: 'Zielone wyniki wskazują, że na kości wypał jej maksymalny możliwy wynik ("krytyk"). Czerwone wyniki oznaczają wartość minimalną ("1", najgorszy możliwy wynik). Dzięki temu można błyskawicznie dostrzec krytyczne sukcesy i pechowe rzuty.',
16
+ },
17
+ {
18
+ question: 'Czy mogę dodać kilka kości tego samego typu?',
19
+ answer: 'Tak. Każde kliknięcie na kość dodaje ją do worka. Jeśli klikniesz k6 trzy razy, worek pokaże "3k6". Aby zmniejszyć liczbę kości, kliknij przycisk "−", który pojawia się obok każdej grupy kości w worku.',
20
+ },
21
+ {
22
+ question: 'Czy kości cyfrowe są tak samo losowe jak fizyczne?',
23
+ answer: 'Statystycznie tak. Nowoczesne silniki JavaScript używają algorytmów pseudolosowych (xorshift128+) o bardzo wysokiej jakości rozkładu jednostajnego. Prawdziwa fizyczna kość może mieć drobne niedoskonałości produkcyjne, które wpływają na wyniki; cyfrowa kość jest wolna od tego problemu.',
24
+ },
25
+ {
26
+ question: 'Czym jest k100 i jak się go używa?',
27
+ answer: 'k100 (lub k%) generuje liczbę od 1 do 100 i jest używany w systemach gier opartych na procentach, takich jak Zew Cthulhu czy Warhammer Fantasy Roleplay. Reprezentuje "bezpośrednie prawdopodobieństwo": jeśli Twoja umiejętność Skradania wynosi 65%, musisz wyrzucić 65 lub mniej, aby odnieść sukces.',
28
+ },
29
+ ];
30
+
31
+ const howTo: DiceRollerLocaleContent['howTo'] = [
32
+ { name: 'Stwórz pulę kości', text: 'Klikaj przyciski kości (k4, k6, k8...), aby dodać je do swojej puli. Każde kliknięcie dodaje jedną kość wybranego typu. Możesz mieszać różne typy w jednym rzucie.' },
33
+ { name: 'Dostosuj modyfikator', text: 'Użyj przycisków "+" i "−" obok modyfikatora, aby zastosować premie lub kary (jak modyfikator atrybutu w D&D). Modyfikator jest automatycznie dodawany do sumy.' },
34
+ { name: 'Rzuć kośćmi', text: 'Naciśnij przycisk "Rzuć Kośćmi". Prawy panel pokazuje ostateczną sumę oraz rozbicie na każdą pojedynczą kość, z krytykami (maksimum) na zielono i pechami (minimum) na czerwono.' },
35
+ { name: 'Sprawdź historię', text: 'Każdy rzut jest zapisywany w historii wraz z użytym wyrażeniem kości, całkowitym wynikiem i dokładnym czasem. Możesz wyczyścić historię za pomocą odpowiedniego przycisku.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faq.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowTo> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howTo.map((step) => ({
54
+ '@type': 'HowToStep',
55
+ name: step.name,
56
+ text: step.text,
57
+ })),
58
+ };
59
+
60
+ const appSchema: WithContext<SoftwareApplication> = {
61
+ '@context': 'https://schema.org',
62
+ '@type': 'SoftwareApplication',
63
+ name: title,
64
+ description,
65
+ applicationCategory: 'UtilitiesApplication',
66
+ operatingSystem: 'Web',
67
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
68
+ inLanguage: 'pl',
69
+ };
70
+
71
+ export const content: DiceRollerLocaleContent = {
72
+ slug,
73
+ title,
74
+ description,
75
+ faqTitle: 'Najczęściej Zadawane Pytania',
76
+ bibliographyTitle: 'Bibliografia Losowości',
77
+ ui: {
78
+ title: 'Kostka do Gry',
79
+ description: 'Niech szczęście ci sprzyja.',
80
+ rollBtn: 'Rzuć Kośćmi',
81
+ totalLabel: 'Suma',
82
+ historyLabel: 'Historia',
83
+ clearHistoryBtn: 'Wyczyść Historię',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: 'Źródła',
86
+ addDiceLabel: 'Dodaj kości do worka',
87
+ bagLabel: 'Worek na kości',
88
+ emptyBagBtn: 'Opróżnij',
89
+ emptyBagText: 'Kliknij kości, aby je dodać',
90
+ modifierLabel: 'Modyfikator',
91
+ rollManyLabel: 'Rzuć kośćmi ($COUNT)',
92
+ rollOneLabel: 'Rzuć kością ($COUNT)',
93
+ preRollText: 'Dodaj kości i rzuć',
94
+ emptyHistoryText: 'Tutaj pojawi się historia rzutów'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: 'Sztuka Losowości: Historia i Matematyka Kości', level: 2 },
98
+ { type: 'paragraph', html: 'Kości to jedne z najstarszych generatorów losowości ludzkości. <strong>Astragali</strong> — kości skokowe owiec i kóz — były używane jako prymitywne czterościenne kości już 5000 lat p.n.e. w Mezopotamii i Egipcie. Ewolucja od rzeźbionej kości do nowoczesnych dwudziestościanów z żywicy epoksydowej to nie tylko kwestia estetyki: to podróż przez teorię prawdopodobieństwa i projektowanie mechanik gier.' },
99
+ { type: 'title', text: 'Standardowa Rodzina Kości', level: 3 },
100
+ { type: 'paragraph', html: 'Najbardziej rozpowszechniony zestaw kości w grach fabularnych — spopularyzowany przez grupę <strong>Dungeons &amp; Dragons</strong> w 1974 roku — składa się z pięciu brył platońskich oraz dwóch dodatkowych kształtów: k4 (czworościan), k6 (sześcian), k8 (ośmiościan), k10 (dwudziestościan deltoidalny), k12 (dwunastościan), k20 (dwudziestościan) oraz k100 (kość procentowa). Każdy wielościan gwarantuje rozkład jednostajny: wszystkie ścianki mają dokładnie takie samo prawdopodobieństwo wypadnięcia.' },
101
+ { type: 'list', items: [
102
+ '<strong>k4 – Czworościan:</strong> Najbardziej niebezpieczna, gdy nadepnie się na nią boso. Cztery trójkątne ścianki, 25% prawdopodobieństwa na ściankę. Powszechnie używana do obrażeń od sztyletów lub zaklęć niskiego poziomu.',
103
+ '<strong>k6 – Sześcian:</strong> Najbardziej uniwersalna kość. Obecna we wszystkich grach planszowych od czasu egipskiego senet. Jej sześcienna geometria gwarantuje doskonałą równomierność rozkładu.',
104
+ '<strong>k8 – Ośmiościan:</strong> Kość włóczni lub topora bojowego. Osiem ścianek będących trójkątami równobocznymi. 12,5% prawdopodobieństwa na ściankę.',
105
+ '<strong>k10 – Dwudziestościan deltoidalny:</strong> Jedyna bryła w standardowym zestawie, która nie jest bryłą platońską. Dwie przeciwległe ścianki na "wierzchołek". Niezbędna do k100 (dwie połączone k10).',
106
+ '<strong>k12 – Dwunastościan:</strong> Kość barbarzyńcy. Dwanaście pięciokątnych ścianek. Niedoceniana w wielu systemach, główna bohaterka barbarzyńcy w D&D 5e.',
107
+ '<strong>k20 – Dwudziestościan:</strong> Królowa gier RPG. Dwadzieścia trójkątnych ścianek. Protagonistka systemu d20: decyduje o sukcesie lub porażce niemal wszystkich działań.',
108
+ '<strong>k100 – Kość procentowa:</strong> Dwie połączone k10 (dziesiątki + jedności). Definiuje precyzyjne prawdopodobieństwo w systemach takich jak Zew Cthulhu czy Warhammer Fantasy.',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '5000 p.n.e.', label: 'Pierwsze kości (astragali)', icon: 'mdi:history' },
112
+ { value: '1974', label: 'D&D spopularyzowało zestaw', icon: 'mdi:sword' },
113
+ { value: '7 typów', label: 'Standardowe kości RPG', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: 'Okres losowości JS', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: 'Prawdopodobieństwo i Krzywe Rozkładu', level: 3 },
117
+ { type: 'paragraph', html: 'Rzucając pojedynczą kością, otrzymujesz <strong>dyskretny rozkład jednostajny</strong>: każdy wynik ma dokładnie takie samo prawdopodobieństwo (1/n). Jednak gdy tylko połączysz wiele kości, matematyczna magia przekształca tę płaską krzywą w <strong>przybliżony rozkład normalny</strong>. Dlatego 2k6 to nie to samo co 1k12: przy dwóch kostkach sześciościennych prawdopodobieństwo wyrzucenia 7 wynosi 6/36 ≈ 16,7%, podczas gdy skrajne wyniki (2 i 12) zdarzają się tylko w 2,8% przypadków.' },
118
+ { type: 'tip', title: 'Ułatwienie i Utrudnienie (D&D 5e)', html: 'Mechanika <strong>Ułatwienia</strong> polega na rzucie 2k20 i zachowaniu wyższego wyniku. Matematycznie podnosi to średnią z 10,5 do około 13,8. <strong>Utrudnienie</strong> robi coś przeciwnego: wybiera niższy wynik, obniżając średnią do około 7,2. Nasz symulator pozwala to zasymulować, dodając dwie k20 do worka i porównując indywidualne wyniki.' },
119
+ { type: 'title', text: 'Modyfikatory: Most Między Kością a Postacią', level: 3 },
120
+ { type: 'paragraph', html: 'W większości systemów RPG kość nie działa sama: dodaje się lub odejmuje <strong>modyfikator</strong> reprezentujący umiejętności postaci. W D&D 5e modyfikator Siły +5 oznacza, że rzucasz 1k20, dodajesz 5 i sprawdzasz wynik względem Klasy Pancerza przeciwnika. Nasz symulator zawiera kontrolkę modyfikatora, aby wiernie odzwierciedlać te mechaniki.' },
121
+ { type: 'tip', title: 'Standard Notacji Kości', html: 'Notacja <strong>XkY+Z</strong> jest de facto standardem w grach fabularnych: X kości o Y ściankach z modyfikatorem Z. "3k6+2" oznacza rzut trzema kośćmi sześciościennymi i dodanie 2 do sumy. Nasze narzędzie używa tej notacji w historii, dzięki czemu możesz łatwo dzielić się swoimi rzutami lub je zapisywać.' },
122
+ { type: 'glossary', items: [
123
+ { term: 'Trafienie krytyczne', definition: 'Wyrzucenie maksymalnej wartości na kości (np. 20 na k20). Zazwyczaj wyzwala specjalne efekty dodatkowe w większości systemów RPG.' },
124
+ { term: 'Pech / Naturalne 1', definition: 'Wyrzucenie minimalnej wartości (1) na kości. Często skutkuje dramatyczną porażką lub negatywnymi konsekwencjami.' },
125
+ { term: 'Pula kości', definition: 'Zbiór kości rzucanych jednocześnie. Pula w naszym narzędziu pokazuje każdy typ kości pogrupowany według liczby (np. 3k6 + 2k8).' },
126
+ { term: 'Modyfikator', definition: 'Stała liczba dodawana lub odejmowana od wyniku rzutu, reprezentująca umiejętność postaci, premię do atrybutu lub karę sytuacyjną.' },
127
+ { term: 'Rzut procentowy', definition: 'Rzut z użyciem dwóch k10 w celu uzyskania wyniku od 1 do 100, stosowany w systemach opartych na umiejętnościach, gdzie zdolności mierzone są w procentach.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography: [
132
+ { name: 'D&D Beyond – Zasady mechaniki kości', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
+ { name: 'Roll20 – Wirtualny stół i systemy kości', url: 'https://roll20.net/' },
134
+ { name: 'Pathfinder – Referencja systemu d20', url: 'https://paizo.com/pathfinder' },
135
+ ],
136
+ howTo,
137
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
138
+ };
@@ -0,0 +1,138 @@
1
+ import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
2
+ import type { DiceRollerLocaleContent } from '../index';
3
+
4
+ const slug = 'lancador-de-dados';
5
+ const title = 'Lançador de Dados';
6
+ const description = 'Um simulador de dados completo para os seus jogos de RPG e de tabuleiro. Lance d4, d6, d8, d10, d12, d20 e d100 com modificadores e histórico.';
7
+
8
+ const faq: DiceRollerLocaleContent['faq'] = [
9
+ {
10
+ question: 'Como posso simular um lançamento com vantagem (D&D)?',
11
+ answer: 'Adicione dois dados d20 ao saco clicando duas vezes no botão d20. Ao lançar, observe os dois resultados individuais e fique com o mais alto. O total apresentado será a soma, mas pode ver cada dado separadamente no detalhe do resultado.',
12
+ },
13
+ {
14
+ question: 'O que significa a cor verde ou vermelha nos resultados?',
15
+ answer: 'Resultados verdes indicam que o dado obteve o seu valor máximo possível (um "crítico"). Resultados vermelhos indicam o valor mínimo (um "1", o pior resultado possível). Isto torna fácil detetar críticos e falhas críticas num relance.',
16
+ },
17
+ {
18
+ question: 'Posso adicionar vários dados do mesmo tipo?',
19
+ answer: 'Sim. Cada clique num dado adiciona-o ao saco. Se clicar no d6 três vezes, o saco mostrará "3d6". Para reduzir a contagem, clique no botão "−" que aparece ao lado de cada grupo de dados no saco.',
20
+ },
21
+ {
22
+ question: 'Os dados digitais são tão aleatórios como os físicos?',
23
+ answer: 'Estatisticamente, sim. Os motores de JavaScript modernos utilizam algoritmos pseudorandom (xorshift128+) com uma distribuição uniforme de altíssima qualidade. Um dado físico real pode ter pequenas imperfeições de fabrico que influenciam os resultados; o dado digital não tem esse problema.',
24
+ },
25
+ {
26
+ question: 'O que é o d100 e como é utilizado?',
27
+ answer: 'O d100 (ou d%) gera um número de 1 a 100 e é utilizado em sistemas de jogo baseados em percentagens, como Call of Cthulhu ou Warhammer Fantasy Roleplay. Representa a "probabilidade direta": se a sua perícia de Stealth for 65%, precisa de lançar 65 ou menos para ter sucesso.',
28
+ },
29
+ ];
30
+
31
+ const howTo: DiceRollerLocaleContent['howTo'] = [
32
+ { name: 'Construa o conjunto de dados', text: 'Clique nos botões dos dados (d4, d6, d8...) para os adicionar ao seu conjunto. Cada clique adiciona um dado do tipo selecionado. Pode misturar diferentes tipos no mesmo lançamento.' },
33
+ { name: 'Ajuste o modificador', text: 'Utilize os botões "+" e "−" ao lado do modificador para aplicar bónus ou penalizações (como o modificador de habilidade em D&D). O modificador é automaticamente adicionado ao total.' },
34
+ { name: 'Lance os dados', text: 'Pressione o botão "Lançar Dados". O painel direito mostra o total final e o detalhe de cada dado individual, com críticos (máximo) em verde e falhas (mínimo) em vermelho.' },
35
+ { name: 'Verifique o histórico', text: 'Cada lançamento é registado no histórico com a expressão de dados utilizada, o resultado total e a hora exata. Pode limpar o histórico com o botão correspondente.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faq.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowTo> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howTo.map((step) => ({
54
+ '@type': 'HowToStep',
55
+ name: step.name,
56
+ text: step.text,
57
+ })),
58
+ };
59
+
60
+ const appSchema: WithContext<SoftwareApplication> = {
61
+ '@context': 'https://schema.org',
62
+ '@type': 'SoftwareApplication',
63
+ name: title,
64
+ description,
65
+ applicationCategory: 'UtilitiesApplication',
66
+ operatingSystem: 'Web',
67
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
68
+ inLanguage: 'pt',
69
+ };
70
+
71
+ export const content: DiceRollerLocaleContent = {
72
+ slug,
73
+ title,
74
+ description,
75
+ faqTitle: 'Perguntas Frequentes',
76
+ bibliographyTitle: 'Bibliografia da Sorte',
77
+ ui: {
78
+ title: 'Lançador de Dados',
79
+ description: 'Que a sorte esteja contigo.',
80
+ rollBtn: 'Lançar Dados',
81
+ totalLabel: 'Total',
82
+ historyLabel: 'Histórico',
83
+ clearHistoryBtn: 'Limpar Histórico',
84
+ faqTitle: 'FAQ',
85
+ bibliographyTitle: 'Referências',
86
+ addDiceLabel: 'Adicione dados ao saco',
87
+ bagLabel: 'Saco de dados',
88
+ emptyBagBtn: 'Esvaziar',
89
+ emptyBagText: 'Clique nos dados para adicionar',
90
+ modifierLabel: 'Modificador',
91
+ rollManyLabel: 'Lançar $COUNT dados',
92
+ rollOneLabel: 'Lançar $COUNT dado',
93
+ preRollText: 'Adicione os dados e lance',
94
+ emptyHistoryText: 'O histórico de lançamentos aparecerá aqui'
95
+ },
96
+ seo: [
97
+ { type: 'title', text: 'A Arte da Aleatoriedade: História e Matemática dos Dados', level: 2 },
98
+ { type: 'paragraph', html: 'Os dados são um dos geradores de aleatoriedade mais antigos da humanidade. Os <strong>astrágalos</strong> — ossos do tornozelo de ovelhas e cabras — eram utilizados como dados primitivos de quatro faces já em 5000 a.C. na Mesopotâmia e no Egito. A evolução do osso entalhado para os modernos icosaedros de resina epóxi não é apenas estética: é uma viagem através da teoria da probabilidade e do design de mecânicas de jogo.' },
99
+ { type: 'title', text: 'A Família Padrão de Dados', level: 3 },
100
+ { type: 'paragraph', html: 'O conjunto de dados mais difundido em jogos de interpretação (RPG) — popularizado por <strong>Dungeons &amp; Dragons</strong> em 1974 — consiste nos cinco sólidos platónicos mais duas formas adicionais: d4 (tetraedro), d6 (cubo), d8 (octaedro), d10 (trapezoedro pentagonal), d12 (dodecaedro), d20 (icosaedro) e d100 (dado percentil). Cada poliedro garante uma distribuição uniforme: todas as faces têm exatamente a mesma probabilidade de sair.' },
101
+ { type: 'list', items: [
102
+ '<strong>d4 – Tetraedro:</strong> O mais perigoso se for pisado descalço. Quatro faces triangulares, 25% de probabilidade por face. Comumente utilizado para dano de adagas ou feitiços de nível baixo.',
103
+ '<strong>d6 – Cubo:</strong> O dado mais universal. Presente em todos os jogos de tabuleiro desde o senet egípcio. A sua geometria cúbica garante uma equidistribuição perfeita.',
104
+ '<strong>d8 – Octaedro:</strong> O dado da lança ou do machado de batalha. Oito faces triangulares equiláteras. 12,5% de probabilidade por face.',
105
+ '<strong>d10 – Trapezoedro Pentagonal:</strong> O único sólido não platónico no conjunto padrão. Duas faces opostas por "vértice". Essencial para o d100 (dois d10 combinados).',
106
+ '<strong>d12 – Dodecaedro:</strong> O dado do bárbaro. Doze faces pentagonais. Subvalorizado em muitos sistemas, protagonista no Bárbaro de D&D 5e.',
107
+ '<strong>d20 – Icosaedro:</strong> O rei do RPG. Vinte faces triangulares. Protagonista do sistema d20: determina o sucesso ou falha de quase todas as ações.',
108
+ '<strong>d100 – Percentil:</strong> Dois d10 combinados (dezenas + unidades). Define probabilidades precisas em sistemas como Call of Cthulhu ou Warhammer Fantasy.',
109
+ ]},
110
+ { type: 'stats', items: [
111
+ { value: '5000 a.C.', label: 'Primeiros dados (astrágalos)', icon: 'mdi:history' },
112
+ { value: '1974', label: 'D&D popularizou o conjunto', icon: 'mdi:sword' },
113
+ { value: '7 tipos', label: 'Dados padrão de RPG', icon: 'mdi:dice-multiple' },
114
+ { value: '2¹²⁸', label: 'Período aleatório de JS', icon: 'mdi:function-variant' },
115
+ ], columns: 4 },
116
+ { type: 'title', text: 'Probabilidades e Curvas de Distribuição', level: 3 },
117
+ { type: 'paragraph', html: 'Quando lança um único dado, obtém uma <strong>distribuição uniforme discreta</strong>: cada resultado tem exatamente a mesma probabilidade (1/n). Mas assim que combina vários dados, a magia matemática transforma essa curva plana numa <strong>distribuição normal aproximada</strong>. É por isso que 2d6 não é o mesmo que 1d12: com dois dados de seis faces a probabilability de lançar um 7 é 6/36 ≈ 16,7%, enquanto os extremos (2 e 12) ocorrem apenas 2,8% das vezes.' },
118
+ { type: 'tip', title: 'Vantagem e Desvantagem (D&D 5e)', html: 'A mecânica de <strong>Vantagem</strong> consiste em lançar 2d20 e ficar com o resultado mais alto. Matematicamente, isto eleva a média de 10,5 para aproximadamente 13,8. A <strong>Desvantagem</strong> faz o oposto: escolha o mais baixo, baixando a média para cerca de 7,2. O nosso lançador permite simular isto adicionando dois d20 ao saco e comparando os resultados individuais.' },
119
+ { type: 'title', text: 'Modificadores: A Ponte entre o Dado e a Personagem', level: 3 },
120
+ { type: 'paragraph', html: 'Na maioria dos sistemas de RPG, o dado não atua sozinho: um <strong>modificador</strong> representativo das habilidades da personagem é adicionado ou subtraído. No D&D 5e, um modificador de Força de +5 significa que lança 1d20, adiciona 5 e verifica o resultado contra a Classe de Armadura do inimigo. O nosso lançador inclui um controlo de modificador para refletir fielmente estas mecânicas.' },
121
+ { type: 'tip', title: 'Padrão de Notação de Dados', html: 'A notação <strong>XdY+Z</strong> é o padrão de facto em jogos de RPG: X dados de Y faces com modificador Z. "3d6+2" significa lançar três dados de seis faces e somar 2 ao total. A nossa ferramenta utiliza esta notazione no histórico para que possa facilmente partilhar ou registar os seus lançamentos.' },
122
+ { type: 'glossary', items: [
123
+ { term: 'Ataque Crítico', definition: 'Um lançamento do valor máximo num dado (ex., lançar 20 num d20). Geralmente ativa efeitos de bónus especiais na maioria dos sistemas de RPG.' },
124
+ { term: 'Falha Crítica / 1 Natural', definition: 'Lançar o valor mínimo (1) num dado. Frequentemente resulta numa falha dramática ou consequência negativa.' },
125
+ { term: 'Dice Pool', definition: 'Uma coleção de dados lançados simultaneamente. O conjunto na nossa ferramenta mostra cada tipo de dado agrupado por contagem (ex., 3d6 + 2d8).' },
126
+ { term: 'Modificador', definition: 'Um número fixo somado ou subtraído do resultado de um lançamento, representando a habilidade da personagem, bónus de atributo ou penalização situacional.' },
127
+ { term: 'Lançamento Percentil', definition: 'Um lançamento que utiliza dois d10 para produzir um resultado de 1–100, utilizado em sistemas baseados em perícias onde as habilidades são medidas em percentagens.' },
128
+ ]},
129
+ ],
130
+ faq,
131
+ bibliography: [
132
+ { name: 'D&D Beyond – Regras de mecânicas de dados', url: 'https://www.dndbeyond.com/sources/basic-rules/using-ability-scores' },
133
+ { name: 'Roll20 – Mesa virtual e sistemas de dados', url: 'https://roll20.net/' },
134
+ { name: 'Pathfinder – Referência de Sistema d20', url: 'https://paizo.com/pathfinder' },
135
+ ],
136
+ howTo,
137
+ schemas: [faqSchema as any, howToSchema as any, appSchema],
138
+ };