@jjlmoya/utils-creative 1.26.0 → 1.28.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.
- package/package.json +2 -2
- package/src/category/i18n/de.ts +2 -2
- package/src/category/i18n/en.ts +2 -2
- package/src/category/i18n/es.ts +2 -2
- package/src/category/i18n/fr.ts +2 -2
- package/src/category/i18n/id.ts +2 -2
- package/src/category/i18n/it.ts +2 -2
- package/src/category/i18n/ja.ts +2 -2
- package/src/category/i18n/ko.ts +2 -2
- package/src/category/i18n/nl.ts +2 -2
- package/src/category/i18n/pl.ts +2 -2
- package/src/category/i18n/pt.ts +2 -2
- package/src/category/i18n/ru.ts +2 -2
- package/src/category/i18n/sv.ts +2 -2
- package/src/category/i18n/tr.ts +2 -2
- package/src/category/i18n/zh.ts +2 -2
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/env.d.ts +1 -1
- package/src/pages/index.astro +1 -1
- package/src/tests/bibliography_wellformed_export.test.ts +46 -0
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_translation_completeness.test.ts +75 -0
- package/src/tests/seo_wellformed_export.test.ts +65 -0
- package/src/tests/tool_validation.test.ts +17 -17
- package/src/tool/bead-pattern-generator/bibliography.astro +8 -8
- package/src/tool/bead-pattern-generator/i18n/de.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/en.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/es.ts +104 -104
- package/src/tool/bead-pattern-generator/i18n/fr.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/id.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/it.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ja.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ko.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/nl.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/pl.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/pt.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/ru.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/sv.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/tr.ts +111 -111
- package/src/tool/bead-pattern-generator/i18n/zh.ts +111 -111
- package/src/tool/bead-pattern-generator/seo.astro +19 -19
- package/src/tool/dice-roller/bibliography.astro +8 -8
- package/src/tool/dice-roller/i18n/de.ts +134 -134
- package/src/tool/dice-roller/i18n/en.ts +134 -134
- package/src/tool/dice-roller/i18n/es.ts +125 -125
- package/src/tool/dice-roller/i18n/fr.ts +134 -134
- package/src/tool/dice-roller/i18n/id.ts +134 -134
- package/src/tool/dice-roller/i18n/it.ts +134 -134
- package/src/tool/dice-roller/i18n/ja.ts +134 -134
- package/src/tool/dice-roller/i18n/ko.ts +134 -134
- package/src/tool/dice-roller/i18n/nl.ts +134 -134
- package/src/tool/dice-roller/i18n/pl.ts +134 -134
- package/src/tool/dice-roller/i18n/pt.ts +134 -134
- package/src/tool/dice-roller/i18n/ru.ts +134 -134
- package/src/tool/dice-roller/i18n/sv.ts +134 -134
- package/src/tool/dice-roller/i18n/tr.ts +134 -134
- package/src/tool/dice-roller/i18n/zh.ts +134 -134
- package/src/tool/dice-roller/seo.astro +15 -15
- package/src/tool/excuse-generator/bibliography.astro +8 -8
- package/src/tool/excuse-generator/i18n/de.ts +120 -120
- package/src/tool/excuse-generator/i18n/en.ts +120 -120
- package/src/tool/excuse-generator/i18n/es.ts +118 -118
- package/src/tool/excuse-generator/i18n/fr.ts +120 -120
- package/src/tool/excuse-generator/i18n/id.ts +120 -120
- package/src/tool/excuse-generator/i18n/it.ts +120 -120
- package/src/tool/excuse-generator/i18n/ja.ts +120 -120
- package/src/tool/excuse-generator/i18n/ko.ts +120 -120
- package/src/tool/excuse-generator/i18n/nl.ts +120 -120
- package/src/tool/excuse-generator/i18n/pl.ts +120 -120
- package/src/tool/excuse-generator/i18n/pt.ts +120 -120
- package/src/tool/excuse-generator/i18n/ru.ts +120 -120
- package/src/tool/excuse-generator/i18n/sv.ts +120 -120
- package/src/tool/excuse-generator/i18n/tr.ts +120 -120
- package/src/tool/excuse-generator/i18n/zh.ts +120 -120
- package/src/tool/excuse-generator/seo.astro +15 -15
- package/src/tool/fortune-cookie/bibliography.astro +8 -8
- package/src/tool/fortune-cookie/i18n/de.ts +124 -124
- package/src/tool/fortune-cookie/i18n/en.ts +124 -124
- package/src/tool/fortune-cookie/i18n/es.ts +125 -125
- package/src/tool/fortune-cookie/i18n/fr.ts +124 -124
- package/src/tool/fortune-cookie/i18n/id.ts +124 -124
- package/src/tool/fortune-cookie/i18n/it.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ja.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ko.ts +124 -124
- package/src/tool/fortune-cookie/i18n/nl.ts +124 -124
- package/src/tool/fortune-cookie/i18n/pl.ts +124 -124
- package/src/tool/fortune-cookie/i18n/pt.ts +124 -124
- package/src/tool/fortune-cookie/i18n/ru.ts +124 -124
- package/src/tool/fortune-cookie/i18n/sv.ts +124 -124
- package/src/tool/fortune-cookie/i18n/tr.ts +124 -124
- package/src/tool/fortune-cookie/i18n/zh.ts +124 -124
- package/src/tool/fortune-cookie/seo.astro +15 -15
- package/src/tool/synesthesia-painter/bibliography.astro +8 -8
- package/src/tool/synesthesia-painter/i18n/de.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/en.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/es.ts +110 -110
- package/src/tool/synesthesia-painter/i18n/fr.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/id.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/it.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ja.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ko.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/nl.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/pl.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/pt.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/ru.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/sv.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/tr.ts +118 -118
- package/src/tool/synesthesia-painter/i18n/zh.ts +118 -118
- package/src/tool/synesthesia-painter/seo.astro +15 -15
- package/src/tool/zalgo-generator/bibliography.astro +8 -8
- package/src/tool/zalgo-generator/i18n/de.ts +109 -109
- package/src/tool/zalgo-generator/i18n/en.ts +109 -109
- package/src/tool/zalgo-generator/i18n/es.ts +109 -109
- package/src/tool/zalgo-generator/i18n/fr.ts +109 -109
- package/src/tool/zalgo-generator/i18n/id.ts +109 -109
- package/src/tool/zalgo-generator/i18n/it.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ja.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ko.ts +109 -109
- package/src/tool/zalgo-generator/i18n/nl.ts +109 -109
- package/src/tool/zalgo-generator/i18n/pl.ts +109 -109
- package/src/tool/zalgo-generator/i18n/pt.ts +109 -109
- package/src/tool/zalgo-generator/i18n/ru.ts +109 -109
- package/src/tool/zalgo-generator/i18n/sv.ts +109 -109
- package/src/tool/zalgo-generator/i18n/tr.ts +109 -109
- package/src/tool/zalgo-generator/i18n/zh.ts +109 -109
- package/src/tool/zalgo-generator/seo.astro +15 -15
- package/src/types.ts +1 -1
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import { bibliography } from '../bibliography';
|
|
3
|
-
import type { DiceRollerLocaleContent } from '../index';
|
|
4
|
-
|
|
5
|
-
const slug = 'zar-atma';
|
|
6
|
-
const title = 'Zar Atma';
|
|
7
|
-
const description = 'RPG ve masaüstü oyunlarınız için eksiksiz bir zar simülatörü. Değiştiriciler ve geçmiş kaydı ile d4, d6, d8, d10, d12, d20 ve d100 atın.';
|
|
8
|
-
|
|
9
|
-
const faq: DiceRollerLocaleContent['faq'] = [
|
|
10
|
-
{
|
|
11
|
-
question: 'Avantajlı zar atma (D&D) nasıl simüle edilir?',
|
|
12
|
-
answer: 'd20 düğmesine iki kez tıklayarak torbaya iki adet d20 zarı ekleyin. Zar atıldığında, her iki bireysel sonucu gözlemleyin ve yüksek olanı tutun. Görüntülenen toplam, iki zarın toplamı olacaktır ancak sonuç dökümünde her zarı ayrı ayrı görebilirsiniz.',
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
question: 'Sonuçlardaki yeşil veya kırmızı rengin anlamı nedir?',
|
|
16
|
-
answer: 'Yeşil sonuçlar, o zarın mümkün olan en yüksek değerini attığını ("kritik başarı") gösterir. Kırmızı sonuçlar ise en düşük değeri ("1", yani en kötü olası sonuç) gösterir. Bu, kritik başarıları ve başarısızlıkları bir bakışta tespit etmeyi kolaylaştırır.',
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
question: 'Aynı tipten birden fazla zar ekleyebilir miyim?',
|
|
20
|
-
answer: 'Evet. Bir zara her tıklandığında torbaya eklenir. d6\'ya üç kez tıklarsanız, torba "3d6" gösterecektir. Sayıyı azaltmak için, torbadaki her zar grubunun yanında görünen "−" düğmesine tıklayın.',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
question: 'Dijital zarlar fiziksel olanlar kadar rastgele mi?',
|
|
24
|
-
answer: 'İstatistiksel olarak, evet. Modern JavaScript motorları, çok yüksek kalitede tekdüze dağılıma sahip yalancı rastgele (pseudorandom) algoritmalar (xorshift128+) kullanır. Gerçek bir fiziksel zar, sonuçları saptıran küçük üretim kusurlarına sahip olabilir; dijital zarlarda bu sorun yoktur.',
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
question: 'd100 nedir ve nasıl kullanılır?',
|
|
28
|
-
answer: 'd100 (veya d%), 1\'den 100\'e kadar bir sayı üretir ve Call of Cthulhu veya Warhammer Fantasy Roleplay gibi yüzde tabanlı oyun sistemlerinde kullanılır. "Doğrudan olasılığı" temsil eder: Gizlilik (Stealth) yeteneğiniz %65 ise, başarılı olmak için 65 veya daha düşük atmanız gerekir.',
|
|
29
|
-
},
|
|
30
|
-
];
|
|
31
|
-
|
|
32
|
-
const howTo: DiceRollerLocaleContent['howTo'] = [
|
|
33
|
-
{ name: 'Zar havuzunu oluşturun', text: 'Zar düğmelerine (d4, d6, d8...) tıklayarak havuzunuza ekleyin. Her bir tıklama, seçilen tiple bir zar ekler. Aynı atışta farklı tipleri karıştırabilirsiniz.' },
|
|
34
|
-
{ name: 'Değiştiriciyi ayarlayın', text: 'Bonuslar veya cezalar uygulamak için (D&D\'deki yetenek değiştiricisi gibi) değiştiricinin yanındaki "+" ve "−" düğmelerini kullanın. Değiştirici otomatik olarak toplama eklenir.' },
|
|
35
|
-
{ name: 'Zar atın', text: '"Zar At" düğmesine basın. Sağ panel, nihai toplamı ve her bir zarın dökümünü gösterir; kritik vuruşlar (maksimum) yeşil, başarısızlıklar (minimum) ise kırmızı ile belirtilir.' },
|
|
36
|
-
{ name: 'Geçmişi kontrol edin', text: 'Her atış, kullanılan zar ifadesi, toplam sonuç ve tam zamanıyla birlikte geçmişe kaydedilir. Geçmişi ilgili düğme ile temizleyebilirsiniz.' },
|
|
37
|
-
];
|
|
38
|
-
|
|
39
|
-
const faqSchema: WithContext<FAQPage> = {
|
|
40
|
-
'@context': 'https://schema.org',
|
|
41
|
-
'@type': 'FAQPage',
|
|
42
|
-
mainEntity: faq.map((item) => ({
|
|
43
|
-
'@type': 'Question',
|
|
44
|
-
name: item.question,
|
|
45
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
46
|
-
})),
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const howToSchema: WithContext<HowTo> = {
|
|
50
|
-
'@context': 'https://schema.org',
|
|
51
|
-
'@type': 'HowTo',
|
|
52
|
-
name: title,
|
|
53
|
-
description,
|
|
54
|
-
step: howTo.map((step) => ({
|
|
55
|
-
'@type': 'HowToStep',
|
|
56
|
-
name: step.name,
|
|
57
|
-
text: step.text,
|
|
58
|
-
})),
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
62
|
-
'@context': 'https://schema.org',
|
|
63
|
-
'@type': 'SoftwareApplication',
|
|
64
|
-
name: title,
|
|
65
|
-
description,
|
|
66
|
-
applicationCategory: 'UtilitiesApplication',
|
|
67
|
-
operatingSystem: 'Web',
|
|
68
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
69
|
-
inLanguage: 'tr',
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export const content: DiceRollerLocaleContent = {
|
|
73
|
-
slug,
|
|
74
|
-
title,
|
|
75
|
-
description,
|
|
76
|
-
faqTitle: 'Sıkça Sorulan Sorular',
|
|
77
|
-
ui: {
|
|
78
|
-
title: 'Zar Atma',
|
|
79
|
-
description: 'Şansınız bol olsun.',
|
|
80
|
-
rollBtn: 'Zar At',
|
|
81
|
-
totalLabel: 'Toplam',
|
|
82
|
-
historyLabel: 'Geçmiş',
|
|
83
|
-
clearHistoryBtn: 'Geçmişi Temizle',
|
|
84
|
-
faqTitle: 'SSS',
|
|
85
|
-
bibliographyTitle: 'Referanslar',
|
|
86
|
-
addDiceLabel: 'Torbaya zar ekleyin',
|
|
87
|
-
bagLabel: 'Zar torbası',
|
|
88
|
-
emptyBagBtn: 'Boşalt',
|
|
89
|
-
emptyBagText: 'Eklemek için zarlara tıklayın',
|
|
90
|
-
modifierLabel: 'Değiştirici',
|
|
91
|
-
rollManyLabel: '$COUNT zar at',
|
|
92
|
-
rollOneLabel: '$COUNT zar at',
|
|
93
|
-
preRollText: 'Zar ekle ve at',
|
|
94
|
-
emptyHistoryText: 'Zar geçmişi burada görünecektir'
|
|
95
|
-
},
|
|
96
|
-
seo: [
|
|
97
|
-
{ type: 'title', text: 'Rastgeleliğin Sanatı: Zarın Tarihi ve Matematiği', level: 2 },
|
|
98
|
-
{ type: 'paragraph', html: 'Zarlar insanlığın en eski rastgelelik oluşturucularından biridir. <strong>Astragali</strong> (koyun ve keçilerin aşık kemikleri), M.Ö. 5000 kadar eski bir tarihte Mezopotamya ve Mısır\'da ilkel dört yüzlü zarlar olarak kullanılıyordu. Oyulmuş kemikten modern epoksi reçine ikosahedronlara (yirmi yüzlü) geçiş sadece estetik bir evrim değil; olasılık teorisi ve oyun mekaniği tasarımı üzerinden geçen bir yolculuktur.' },
|
|
99
|
-
{ type: 'title', text: 'Standart Zar Ailesi', level: 3 },
|
|
100
|
-
{ type: 'paragraph', html: '1974\'te <strong>Dungeons & Dragons</strong> tarafından popüler hale getirilen, rol yapma oyunlarındaki en geniş zar seti, beş Platonik cisim ve iki ek şekilden oluşur: d4 (tetrahedron), d6 (küp), d8 (oktahedron), d10 (beşgen trapezohedron), d12 (dodekahedron), d20 (ikosahedron) ve d100 (yüzdelik zar). Her bir çokyüzlü tekdüze dağılımı garanti eder: tüm yüzlerin gelme olasılığı tam olarak aynıdır.' },
|
|
101
|
-
{ type: 'list', items: [
|
|
102
|
-
'<strong>d4 - Tetrahedron:</strong> Çıplak ayakla basıldığında en tehlikelisi. Dört üçgen yüzey, yüzey başına %25 olasılık. Genellikle hançer hasarı veya düşük seviyeli büyüler için kullanılır.',
|
|
103
|
-
'<strong>d6 - Küp:</strong> En evrensel zar. Mısır oyunu Senet\'ten beri tüm masa oyunlarında mevcuttur. Kübik geometrisi mükemmel eşit dağılımı garanti eder.',
|
|
104
|
-
'<strong>d8 - Oktahedron:</strong> Mızrak veya savaş baltası zarı. Sekiz eşkenar üçgen yüzey. Yüzey başına %12,5 olasılık.',
|
|
105
|
-
'<strong>d10 - Beşgen Trapezohedron:</strong> Standart set içindeki tek Platonik cisim olmayan şekil. "Tepe" başına iki zıt yüz. d100 (iki d10 birleşimi) için temeldir.',
|
|
106
|
-
'<strong>d12 - Dodekahedron:</strong> Barbarın zarı. On iki beşgen yüz. Birçok sistemde değeri hafife alınır, D&D 5e Barbar sınıfının yıldızıdır.',
|
|
107
|
-
'<strong>d20 - Ikosahedron:</strong> RPG\'nin kralı. Yirmi üçgen yüzey. d20 sisteminin ana kahramanıdır: neredeyse tüm eylemlerin başarısını veya başarısızlığını belirler.',
|
|
108
|
-
'<strong>d100 - Yüzdelik:</strong> İki d10 birleşimi (onluklar + birlikler). Call of Cthulhu veya Warhammer Fantasy gibi sistemlerde hassas olasılıkları tanımlar.',
|
|
109
|
-
]},
|
|
110
|
-
{ type: 'stats', items: [
|
|
111
|
-
{ value: 'M.Ö. 5000', label: 'İlk zarlar (astragali)', icon: 'mdi:history' },
|
|
112
|
-
{ value: '1974', label: 'D&D seti popülerleştirdi', icon: 'mdi:sword' },
|
|
113
|
-
{ value: '7 tip', label: 'Standart RPG zarları', icon: 'mdi:dice-multiple' },
|
|
114
|
-
{ value: '2¹²⁸', label: 'JS rastgelelik periyodu', icon: 'mdi:function-variant' },
|
|
115
|
-
], columns: 4 },
|
|
116
|
-
{ type: 'title', text: 'Olasılıklar ve Dağılım Eğrileri', level: 3 },
|
|
117
|
-
{ type: 'paragraph', html: 'Tek bir zar attığınızda, <strong>ayrık tekdüze dağılım</strong> elde edersiniz: her sonucun olasılığı tam olarak aynıdır (1/n). Ancak birden fazla zarı birleştirdiğiniz anda, matematiksel sihir bu düz eğriyi <strong>yaklaşık normal dağılıma</strong> dönüştürür. Bu yüzden 2d6, 1d12 ile aynı değildir: iki adet altı yüzlü zarla 7 atma olasılığı 6/36 ≈ %16,7 iken, uç değerler (2 ve 12) zamanın yalnızca %2,8\'inde gerçekleşir.' },
|
|
118
|
-
{ type: 'tip', title: 'Avantaj ve Dezavantaj (D&D 5e)', html: '<strong>Avantaj</strong> mekaniği, 2d20 atılıp yüksek olan sonucun tutulmasından oluşur. Matematiksel olarak bu, ortalamayı 10,5\'ten yaklaşık 13,8\'e yükseltir. <strong>Dezavantaj</strong> ise tam tersini yapar: düşük olanı alır, ortalamayı yaklaşık 7,2\'ye düşürür. Atıcımız, torbaya iki d20 ekleyip bireysel sonuçları karşılaştırarak bunu simüle etmenizi sağlar.' },
|
|
119
|
-
{ type: 'title', text: 'Değiştiriciler: Zar ve Karakter Arasındaki Köprü', level: 3 },
|
|
120
|
-
{ type: 'paragraph', html: 'Çoğu RPG sisteminde zar tek başına hareket etmez: karakterin yeteneklerini temsil eden bir <strong>değiştirici</strong> eklenir veya çıkarılır. D&D 5e\'de +5\'lik bir Güç değiştiricisi, 1d20 attığınızı, 5 eklediğinizi ve sonucu düşmanın Zırh Sınıfına (AC) karşı kontrol ettiğinizi ifade eder. Atıcımız, bu mekanikleri aslına uygun olarak yansıtmak için bir değiştirici kontrolü içerir.' },
|
|
121
|
-
{ type: 'tip', title: 'Zar Gösterim Standardı', html: '<strong>XdY+Z</strong> gösterimi rol yapma oyunlarında fiili standarttır: Z değiştiricili Y yüzlü X zar sayısı. "3d6+2", üç adet altı yüzlü zar atıp toplama 2 ekle anlamına gelir. Aracımız, atışlarınızı kolayca paylaşabilmeniz veya kaydedebilmeniz için geçmişte bu gösterimi kullanır.' },
|
|
122
|
-
{ type: 'glossary', items: [
|
|
123
|
-
{ term: 'Kritik Vuruş', definition: 'Bir zarda maksimum değerin atılması (örneğin d20\'de 20 atmak). Çoğu RPG sisteminde genellikle özel bonus etkileri tetikler.' },
|
|
124
|
-
{ term: 'Fumble / Doğal 1', definition: 'Bir zarda minimum değerin (1) atılması. Genellikle dramatik bir başarısızlık veya olumsuz sonuçla sonuçlanır.' },
|
|
125
|
-
{ term: 'Dice Pool (Zar Havuzu)', definition: 'Aynı anda atılan zarlar koleksiyonu. Aracımızdaki havuz, her zar tipini sayıya göre gruplandırılmış olarak gösterir (örneğin 3d6 + 2d8).' },
|
|
126
|
-
{ term: 'Modifier (Değiştirici)', definition: 'Bir karakterin becerisini, nitelik bonusunu veya durumsal cezasını temsil eden, bir zar sonucuna eklenen veya sonucundan çıkarılan sabit bir sayı.' },
|
|
127
|
-
{ term: 'Yüzdelik Atış', definition: 'Yeteneklerin yüzde olarak ölçüldüğü beceri tabanlı sistemlerde kullanılan, 1-100 arası bir sonuç üretmek için iki d10 kullanan bir atış.' },
|
|
128
|
-
]},
|
|
129
|
-
],
|
|
130
|
-
faq,
|
|
131
|
-
bibliography,
|
|
132
|
-
howTo,
|
|
133
|
-
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
134
|
-
};
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { DiceRollerLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'zar-atma';
|
|
6
|
+
const title = 'Zar Atma';
|
|
7
|
+
const description = 'RPG ve masaüstü oyunlarınız için eksiksiz bir zar simülatörü. Değiştiriciler ve geçmiş kaydı ile d4, d6, d8, d10, d12, d20 ve d100 atın.';
|
|
8
|
+
|
|
9
|
+
const faq: DiceRollerLocaleContent['faq'] = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Avantajlı zar atma (D&D) nasıl simüle edilir?',
|
|
12
|
+
answer: 'd20 düğmesine iki kez tıklayarak torbaya iki adet d20 zarı ekleyin. Zar atıldığında, her iki bireysel sonucu gözlemleyin ve yüksek olanı tutun. Görüntülenen toplam, iki zarın toplamı olacaktır ancak sonuç dökümünde her zarı ayrı ayrı görebilirsiniz.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Sonuçlardaki yeşil veya kırmızı rengin anlamı nedir?',
|
|
16
|
+
answer: 'Yeşil sonuçlar, o zarın mümkün olan en yüksek değerini attığını ("kritik başarı") gösterir. Kırmızı sonuçlar ise en düşük değeri ("1", yani en kötü olası sonuç) gösterir. Bu, kritik başarıları ve başarısızlıkları bir bakışta tespit etmeyi kolaylaştırır.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Aynı tipten birden fazla zar ekleyebilir miyim?',
|
|
20
|
+
answer: 'Evet. Bir zara her tıklandığında torbaya eklenir. d6\'ya üç kez tıklarsanız, torba "3d6" gösterecektir. Sayıyı azaltmak için, torbadaki her zar grubunun yanında görünen "−" düğmesine tıklayın.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Dijital zarlar fiziksel olanlar kadar rastgele mi?',
|
|
24
|
+
answer: 'İstatistiksel olarak, evet. Modern JavaScript motorları, çok yüksek kalitede tekdüze dağılıma sahip yalancı rastgele (pseudorandom) algoritmalar (xorshift128+) kullanır. Gerçek bir fiziksel zar, sonuçları saptıran küçük üretim kusurlarına sahip olabilir; dijital zarlarda bu sorun yoktur.',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: 'd100 nedir ve nasıl kullanılır?',
|
|
28
|
+
answer: 'd100 (veya d%), 1\'den 100\'e kadar bir sayı üretir ve Call of Cthulhu veya Warhammer Fantasy Roleplay gibi yüzde tabanlı oyun sistemlerinde kullanılır. "Doğrudan olasılığı" temsil eder: Gizlilik (Stealth) yeteneğiniz %65 ise, başarılı olmak için 65 veya daha düşük atmanız gerekir.',
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
const howTo: DiceRollerLocaleContent['howTo'] = [
|
|
33
|
+
{ name: 'Zar havuzunu oluşturun', text: 'Zar düğmelerine (d4, d6, d8...) tıklayarak havuzunuza ekleyin. Her bir tıklama, seçilen tiple bir zar ekler. Aynı atışta farklı tipleri karıştırabilirsiniz.' },
|
|
34
|
+
{ name: 'Değiştiriciyi ayarlayın', text: 'Bonuslar veya cezalar uygulamak için (D&D\'deki yetenek değiştiricisi gibi) değiştiricinin yanındaki "+" ve "−" düğmelerini kullanın. Değiştirici otomatik olarak toplama eklenir.' },
|
|
35
|
+
{ name: 'Zar atın', text: '"Zar At" düğmesine basın. Sağ panel, nihai toplamı ve her bir zarın dökümünü gösterir; kritik vuruşlar (maksimum) yeşil, başarısızlıklar (minimum) ise kırmızı ile belirtilir.' },
|
|
36
|
+
{ name: 'Geçmişi kontrol edin', text: 'Her atış, kullanılan zar ifadesi, toplam sonuç ve tam zamanıyla birlikte geçmişe kaydedilir. Geçmişi ilgili düğme ile temizleyebilirsiniz.' },
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
40
|
+
'@context': 'https://schema.org',
|
|
41
|
+
'@type': 'FAQPage',
|
|
42
|
+
mainEntity: faq.map((item) => ({
|
|
43
|
+
'@type': 'Question',
|
|
44
|
+
name: item.question,
|
|
45
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
46
|
+
})),
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const howToSchema: WithContext<HowTo> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'HowTo',
|
|
52
|
+
name: title,
|
|
53
|
+
description,
|
|
54
|
+
step: howTo.map((step) => ({
|
|
55
|
+
'@type': 'HowToStep',
|
|
56
|
+
name: step.name,
|
|
57
|
+
text: step.text,
|
|
58
|
+
})),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
62
|
+
'@context': 'https://schema.org',
|
|
63
|
+
'@type': 'SoftwareApplication',
|
|
64
|
+
name: title,
|
|
65
|
+
description,
|
|
66
|
+
applicationCategory: 'UtilitiesApplication',
|
|
67
|
+
operatingSystem: 'Web',
|
|
68
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
69
|
+
inLanguage: 'tr',
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const content: DiceRollerLocaleContent = {
|
|
73
|
+
slug,
|
|
74
|
+
title,
|
|
75
|
+
description,
|
|
76
|
+
faqTitle: 'Sıkça Sorulan Sorular',
|
|
77
|
+
ui: {
|
|
78
|
+
title: 'Zar Atma',
|
|
79
|
+
description: 'Şansınız bol olsun.',
|
|
80
|
+
rollBtn: 'Zar At',
|
|
81
|
+
totalLabel: 'Toplam',
|
|
82
|
+
historyLabel: 'Geçmiş',
|
|
83
|
+
clearHistoryBtn: 'Geçmişi Temizle',
|
|
84
|
+
faqTitle: 'SSS',
|
|
85
|
+
bibliographyTitle: 'Referanslar',
|
|
86
|
+
addDiceLabel: 'Torbaya zar ekleyin',
|
|
87
|
+
bagLabel: 'Zar torbası',
|
|
88
|
+
emptyBagBtn: 'Boşalt',
|
|
89
|
+
emptyBagText: 'Eklemek için zarlara tıklayın',
|
|
90
|
+
modifierLabel: 'Değiştirici',
|
|
91
|
+
rollManyLabel: '$COUNT zar at',
|
|
92
|
+
rollOneLabel: '$COUNT zar at',
|
|
93
|
+
preRollText: 'Zar ekle ve at',
|
|
94
|
+
emptyHistoryText: 'Zar geçmişi burada görünecektir'
|
|
95
|
+
},
|
|
96
|
+
seo: [
|
|
97
|
+
{ type: 'title', text: 'Rastgeleliğin Sanatı: Zarın Tarihi ve Matematiği', level: 2 },
|
|
98
|
+
{ type: 'paragraph', html: 'Zarlar insanlığın en eski rastgelelik oluşturucularından biridir. <strong>Astragali</strong> (koyun ve keçilerin aşık kemikleri), M.Ö. 5000 kadar eski bir tarihte Mezopotamya ve Mısır\'da ilkel dört yüzlü zarlar olarak kullanılıyordu. Oyulmuş kemikten modern epoksi reçine ikosahedronlara (yirmi yüzlü) geçiş sadece estetik bir evrim değil; olasılık teorisi ve oyun mekaniği tasarımı üzerinden geçen bir yolculuktur.' },
|
|
99
|
+
{ type: 'title', text: 'Standart Zar Ailesi', level: 3 },
|
|
100
|
+
{ type: 'paragraph', html: '1974\'te <strong>Dungeons & Dragons</strong> tarafından popüler hale getirilen, rol yapma oyunlarındaki en geniş zar seti, beş Platonik cisim ve iki ek şekilden oluşur: d4 (tetrahedron), d6 (küp), d8 (oktahedron), d10 (beşgen trapezohedron), d12 (dodekahedron), d20 (ikosahedron) ve d100 (yüzdelik zar). Her bir çokyüzlü tekdüze dağılımı garanti eder: tüm yüzlerin gelme olasılığı tam olarak aynıdır.' },
|
|
101
|
+
{ type: 'list', items: [
|
|
102
|
+
'<strong>d4 - Tetrahedron:</strong> Çıplak ayakla basıldığında en tehlikelisi. Dört üçgen yüzey, yüzey başına %25 olasılık. Genellikle hançer hasarı veya düşük seviyeli büyüler için kullanılır.',
|
|
103
|
+
'<strong>d6 - Küp:</strong> En evrensel zar. Mısır oyunu Senet\'ten beri tüm masa oyunlarında mevcuttur. Kübik geometrisi mükemmel eşit dağılımı garanti eder.',
|
|
104
|
+
'<strong>d8 - Oktahedron:</strong> Mızrak veya savaş baltası zarı. Sekiz eşkenar üçgen yüzey. Yüzey başına %12,5 olasılık.',
|
|
105
|
+
'<strong>d10 - Beşgen Trapezohedron:</strong> Standart set içindeki tek Platonik cisim olmayan şekil. "Tepe" başına iki zıt yüz. d100 (iki d10 birleşimi) için temeldir.',
|
|
106
|
+
'<strong>d12 - Dodekahedron:</strong> Barbarın zarı. On iki beşgen yüz. Birçok sistemde değeri hafife alınır, D&D 5e Barbar sınıfının yıldızıdır.',
|
|
107
|
+
'<strong>d20 - Ikosahedron:</strong> RPG\'nin kralı. Yirmi üçgen yüzey. d20 sisteminin ana kahramanıdır: neredeyse tüm eylemlerin başarısını veya başarısızlığını belirler.',
|
|
108
|
+
'<strong>d100 - Yüzdelik:</strong> İki d10 birleşimi (onluklar + birlikler). Call of Cthulhu veya Warhammer Fantasy gibi sistemlerde hassas olasılıkları tanımlar.',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'stats', items: [
|
|
111
|
+
{ value: 'M.Ö. 5000', label: 'İlk zarlar (astragali)', icon: 'mdi:history' },
|
|
112
|
+
{ value: '1974', label: 'D&D seti popülerleştirdi', icon: 'mdi:sword' },
|
|
113
|
+
{ value: '7 tip', label: 'Standart RPG zarları', icon: 'mdi:dice-multiple' },
|
|
114
|
+
{ value: '2¹²⁸', label: 'JS rastgelelik periyodu', icon: 'mdi:function-variant' },
|
|
115
|
+
], columns: 4 },
|
|
116
|
+
{ type: 'title', text: 'Olasılıklar ve Dağılım Eğrileri', level: 3 },
|
|
117
|
+
{ type: 'paragraph', html: 'Tek bir zar attığınızda, <strong>ayrık tekdüze dağılım</strong> elde edersiniz: her sonucun olasılığı tam olarak aynıdır (1/n). Ancak birden fazla zarı birleştirdiğiniz anda, matematiksel sihir bu düz eğriyi <strong>yaklaşık normal dağılıma</strong> dönüştürür. Bu yüzden 2d6, 1d12 ile aynı değildir: iki adet altı yüzlü zarla 7 atma olasılığı 6/36 ≈ %16,7 iken, uç değerler (2 ve 12) zamanın yalnızca %2,8\'inde gerçekleşir.' },
|
|
118
|
+
{ type: 'tip', title: 'Avantaj ve Dezavantaj (D&D 5e)', html: '<strong>Avantaj</strong> mekaniği, 2d20 atılıp yüksek olan sonucun tutulmasından oluşur. Matematiksel olarak bu, ortalamayı 10,5\'ten yaklaşık 13,8\'e yükseltir. <strong>Dezavantaj</strong> ise tam tersini yapar: düşük olanı alır, ortalamayı yaklaşık 7,2\'ye düşürür. Atıcımız, torbaya iki d20 ekleyip bireysel sonuçları karşılaştırarak bunu simüle etmenizi sağlar.' },
|
|
119
|
+
{ type: 'title', text: 'Değiştiriciler: Zar ve Karakter Arasındaki Köprü', level: 3 },
|
|
120
|
+
{ type: 'paragraph', html: 'Çoğu RPG sisteminde zar tek başına hareket etmez: karakterin yeteneklerini temsil eden bir <strong>değiştirici</strong> eklenir veya çıkarılır. D&D 5e\'de +5\'lik bir Güç değiştiricisi, 1d20 attığınızı, 5 eklediğinizi ve sonucu düşmanın Zırh Sınıfına (AC) karşı kontrol ettiğinizi ifade eder. Atıcımız, bu mekanikleri aslına uygun olarak yansıtmak için bir değiştirici kontrolü içerir.' },
|
|
121
|
+
{ type: 'tip', title: 'Zar Gösterim Standardı', html: '<strong>XdY+Z</strong> gösterimi rol yapma oyunlarında fiili standarttır: Z değiştiricili Y yüzlü X zar sayısı. "3d6+2", üç adet altı yüzlü zar atıp toplama 2 ekle anlamına gelir. Aracımız, atışlarınızı kolayca paylaşabilmeniz veya kaydedebilmeniz için geçmişte bu gösterimi kullanır.' },
|
|
122
|
+
{ type: 'glossary', items: [
|
|
123
|
+
{ term: 'Kritik Vuruş', definition: 'Bir zarda maksimum değerin atılması (örneğin d20\'de 20 atmak). Çoğu RPG sisteminde genellikle özel bonus etkileri tetikler.' },
|
|
124
|
+
{ term: 'Fumble / Doğal 1', definition: 'Bir zarda minimum değerin (1) atılması. Genellikle dramatik bir başarısızlık veya olumsuz sonuçla sonuçlanır.' },
|
|
125
|
+
{ term: 'Dice Pool (Zar Havuzu)', definition: 'Aynı anda atılan zarlar koleksiyonu. Aracımızdaki havuz, her zar tipini sayıya göre gruplandırılmış olarak gösterir (örneğin 3d6 + 2d8).' },
|
|
126
|
+
{ term: 'Modifier (Değiştirici)', definition: 'Bir karakterin becerisini, nitelik bonusunu veya durumsal cezasını temsil eden, bir zar sonucuna eklenen veya sonucundan çıkarılan sabit bir sayı.' },
|
|
127
|
+
{ term: 'Yüzdelik Atış', definition: 'Yeteneklerin yüzde olarak ölçüldüğü beceri tabanlı sistemlerde kullanılan, 1-100 arası bir sonuç üretmek için iki d10 kullanan bir atış.' },
|
|
128
|
+
]},
|
|
129
|
+
],
|
|
130
|
+
faq,
|
|
131
|
+
bibliography,
|
|
132
|
+
howTo,
|
|
133
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
134
|
+
};
|
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import { bibliography } from '../bibliography';
|
|
3
|
-
import type { DiceRollerLocaleContent } from '../index';
|
|
4
|
-
|
|
5
|
-
const slug = 'dice-roller';
|
|
6
|
-
const title = '在线掷骰子';
|
|
7
|
-
const description = '一个为您的 RPG 和桌面游戏而设计的全功能骰子模拟器。支持掷 d4、d6、d8、d10、d12、d20 和 d100,并带有修正值和历史记录功能。';
|
|
8
|
-
|
|
9
|
-
const faq: DiceRollerLocaleContent['faq'] = [
|
|
10
|
-
{
|
|
11
|
-
question: '我该如何模拟优势掷骰(Advantage, D&D)?',
|
|
12
|
-
answer: '点击两次 d20 按钮,将两个 d20 骰子放入袋中。掷骰后,观察两个独立的结果并取较高值。显示的\"总计\"将是两者的和,但您可以在结果明细中查看每个骰子的具体点数。',
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
question: '结果中的绿色或红色代表什么?',
|
|
16
|
-
answer: '绿色的结果表示该骰子掷出了可能的最大值(\"大成功\"或\"暴击\")。红色的结果代表最小值(\"1\",最糟糕的结果)。这让您能一眼发现关键成功或大失败。',
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
question: '我可以添加多个同类型的骰子吗?',
|
|
20
|
-
answer: '可以。每次点击一个骰子都会将其添加到投掷池中。如果您点击 d6 三次,投掷池将显示\"3d6\"。如需减少数量,点击投掷池中每个骰子组旁边的\"−\"按钮即可。',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
question: '数字骰子和物理骰子一样随机吗?',
|
|
24
|
-
answer: '从统计学上讲,是的。现代 JavaScript 引擎使用高质量的均匀分布伪随机算法(xorshift128+)。现实中的物理骰子可能会因制造工艺的小瑕疵产生偏差;数字骰子则完全不存在这个问题。',
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
question: '什么是 d100,它该如何使用?',
|
|
28
|
-
answer: 'd100(或 d%)会生成 1 到 100 之间的数字,常用于基于百分比的游戏系统,如《克苏鲁的呼唤》或《战锤奇幻角色扮演》。它代表\"直接概率\":如果您的潜行技能是 65%,那么您需要掷出 65 或更小的数字才能成功。',
|
|
29
|
-
},
|
|
30
|
-
];
|
|
31
|
-
|
|
32
|
-
const howTo: DiceRollerLocaleContent['howTo'] = [
|
|
33
|
-
{ name: '构建骰子池', text: '点击骰子按钮(d4、d6、d8...)将它们添加到池中。每次点击都会添加一个所选类型的骰子。您可以在同一次投掷中混合不同类型的骰子。' },
|
|
34
|
-
{ name: '调整修正值', text: '使用修正值旁边的\"+\"和\"−\"按钮来应用奖励或惩罚(如 D&D 中的属性修正值)。修正值会自动累加到总计中。' },
|
|
35
|
-
{ name: '掷骰子', text: '点击\"掷骰子\"按钮。右侧面板显示最终总计以及每个骰子的具体点数,大成功(最大值)以绿色标记,大失败(最小值)以红色标记。' },
|
|
36
|
-
{ name: '查看历史记录', text: '每次投掷都会连同使用的骰子表达式、总计结果和精确时间一起记录在历史中。您可以使用相应按钮清除历史记录。' },
|
|
37
|
-
];
|
|
38
|
-
|
|
39
|
-
const faqSchema: WithContext<FAQPage> = {
|
|
40
|
-
'@context': 'https://schema.org',
|
|
41
|
-
'@type': 'FAQPage',
|
|
42
|
-
mainEntity: faq.map((item) => ({
|
|
43
|
-
'@type': 'Question',
|
|
44
|
-
name: item.question,
|
|
45
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
46
|
-
})),
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const howToSchema: WithContext<HowTo> = {
|
|
50
|
-
'@context': 'https://schema.org',
|
|
51
|
-
'@type': 'HowTo',
|
|
52
|
-
name: title,
|
|
53
|
-
description,
|
|
54
|
-
step: howTo.map((step) => ({
|
|
55
|
-
'@type': 'HowToStep',
|
|
56
|
-
name: step.name,
|
|
57
|
-
text: step.text,
|
|
58
|
-
})),
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
62
|
-
'@context': 'https://schema.org',
|
|
63
|
-
'@type': 'SoftwareApplication',
|
|
64
|
-
name: title,
|
|
65
|
-
description,
|
|
66
|
-
applicationCategory: 'UtilitiesApplication',
|
|
67
|
-
operatingSystem: 'Web',
|
|
68
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
69
|
-
inLanguage: 'zh',
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export const content: DiceRollerLocaleContent = {
|
|
73
|
-
slug,
|
|
74
|
-
title,
|
|
75
|
-
description,
|
|
76
|
-
faqTitle: '常见问题解答',
|
|
77
|
-
ui: {
|
|
78
|
-
title: '在线掷骰子',
|
|
79
|
-
description: '愿运气与你同在。',
|
|
80
|
-
rollBtn: '掷骰子',
|
|
81
|
-
totalLabel: '总计',
|
|
82
|
-
historyLabel: '历史记录',
|
|
83
|
-
clearHistoryBtn: '清除历史',
|
|
84
|
-
faqTitle: '常见问题',
|
|
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: '骰子是人类最古老的随机数生成器之一。早在公元前 5000 年,美索不达米亚和埃及就曾将<strong>距骨</strong>(牛羊的足踝骨)用作原始的四面骰子。从雕刻骨头到现代环氧树脂二十面体的演变不仅仅是美学上的追求,更是一段穿越概率论和游戏机制设计的旅程。' },
|
|
99
|
-
{ type: 'title', text: '标准骰子系列', level: 3 },
|
|
100
|
-
{ type: 'paragraph', html: '自 1974 年由 <strong>《龙与地下城》</strong> 推而广之以来,角色扮演游戏中最广泛使用的骰子组合由五个柏拉图多面体加上两个额外形状组成:d4(正四面体)、d6(正六面体/立方体)、d8(正八面体)、d10(五角偏方三八面体)、d12(正十二面体)、d20(正二十面体)以及 d100(百分比骰)。每种多面体都保证了均匀分布:所有面出现的概率完全相同。' },
|
|
101
|
-
{ type: 'list', items: [
|
|
102
|
-
'<strong>d4 - 正四面体:</strong> 如果赤脚踩到它是最危险的。四个三角形面,每面概率 25%。通常用于匕首伤害或低级法术。',
|
|
103
|
-
'<strong>d6 - 立方体:</strong> 最通用的骰子。自埃及塞尼特棋以来就存在于所有棋盘游戏中。其立方几何形状保证了完美的等概率分布。',
|
|
104
|
-
'<strong>d8 - 正八面体:</strong> 长矛或战斧的骰子。八个等边三角形面,每面概率 12.5%。',
|
|
105
|
-
'<strong>d10 - 五角偏方三八面体:</strong> 标准组合中唯一的非柏拉图多面体。每个\"顶点\"有两个相对的面。是 d100(两个 d10 组合)的基础。',
|
|
106
|
-
'<strong>d12 - 正十二面体:</strong> 野蛮人之骰。十二个正五边形面。在很多系统中被低估,但在 D&D 5e 的野蛮人职业中是主角。',
|
|
107
|
-
'<strong>d20 - 正二十面体:</strong> RPG 之王。二十个三角形面。d20 系统的核心:决定了几乎所有动作的成败。',
|
|
108
|
-
'<strong>d100 - 百分比骰:</strong> 两个 d10 组合(十位+个位)。在《克苏鲁的呼唤》或《战锤》等系统中定义精细概率。',
|
|
109
|
-
]},
|
|
110
|
-
{ type: 'stats', items: [
|
|
111
|
-
{ value: '5000 BC', 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: 'JS 随机周期', 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:使用两个六面骰子掷出 7 的概率是 6/36 ≈ 16.7%,而极端结果(2 和 12)仅占 2.8%。' },
|
|
118
|
-
{ type: 'tip', title: '优势与劣势 (D&D 5e)', html: '<strong>优势</strong>机制是指掷 2d20 并取较高值。从数学上讲,这会将平均值从 10.5 提高到约 13.8。<strong>劣势</strong>反之:取较低值,平均值降至约 7.2。我们的模拟器允许您通过向袋中添加两个 d20 并比较结果来模拟这一点。' },
|
|
119
|
-
{ type: 'title', text: '修正值:骰子与角色之间的桥梁', level: 3 },
|
|
120
|
-
{ type: 'paragraph', html: '在大多数 RPG 系统中,骰子并非独立工作:会加减代表角色能力的<strong>修正值</strong>。在 D&D 5e 中,力量修正值为 +5 意味着您掷 1d20 后加 5,并根据敌人的护甲等级 (AC) 检查结果。我们的模拟器包含修正值控制功能,以如实反映这些机制。' },
|
|
121
|
-
{ type: 'tip', title: '骰子记法标准', html: '<strong>XdY+Z</strong> 记法是角色扮演游戏中的事实标准:X 个 Y 面的骰子,带有修正值 Z。\"3d6+2\"意味着掷三个六面骰子并将结果加 2。我们的工具在历史记录中使用此记法,方便您轻松共享或记录您的掷骰结果。' },
|
|
122
|
-
{ type: 'glossary', items: [
|
|
123
|
-
{ term: '暴击 (Critical Hit)', definition: '掷出骰子的最大值(例如 d20 掷出 20)。在大多数 RPG 系统中通常会触发特殊的奖励效果。' },
|
|
124
|
-
{ term: '大失败 / 自发 1 (Nat 1)', definition: '掷出骰子的最小值 (1)。通产导致戏剧性的失败或负面后果。' },
|
|
125
|
-
{ term: '骰子池 (Dice Pool)', definition: '同时掷出的一组骰子。我们工具中的投掷池会按数量分组显示每种骰子类型(例如 3d6 + 2d8)。' },
|
|
126
|
-
{ term: '修正值 (Modifier)', definition: '一个加在或减去掷骰结果的固定数值,代表角色的技能、属性奖励或环境惩罚。' },
|
|
127
|
-
{ term: '百分号掷骰 (Percentile Roll)', definition: '使用两个 d10 产生 1-100 结果的掷骰,用于基于技能且能力以百分比衡量的系统。' },
|
|
128
|
-
]},
|
|
129
|
-
],
|
|
130
|
-
faq,
|
|
131
|
-
bibliography,
|
|
132
|
-
howTo,
|
|
133
|
-
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
134
|
-
};
|
|
1
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import { bibliography } from '../bibliography';
|
|
3
|
+
import type { DiceRollerLocaleContent } from '../index';
|
|
4
|
+
|
|
5
|
+
const slug = 'dice-roller';
|
|
6
|
+
const title = '在线掷骰子';
|
|
7
|
+
const description = '一个为您的 RPG 和桌面游戏而设计的全功能骰子模拟器。支持掷 d4、d6、d8、d10、d12、d20 和 d100,并带有修正值和历史记录功能。';
|
|
8
|
+
|
|
9
|
+
const faq: DiceRollerLocaleContent['faq'] = [
|
|
10
|
+
{
|
|
11
|
+
question: '我该如何模拟优势掷骰(Advantage, D&D)?',
|
|
12
|
+
answer: '点击两次 d20 按钮,将两个 d20 骰子放入袋中。掷骰后,观察两个独立的结果并取较高值。显示的\"总计\"将是两者的和,但您可以在结果明细中查看每个骰子的具体点数。',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: '结果中的绿色或红色代表什么?',
|
|
16
|
+
answer: '绿色的结果表示该骰子掷出了可能的最大值(\"大成功\"或\"暴击\")。红色的结果代表最小值(\"1\",最糟糕的结果)。这让您能一眼发现关键成功或大失败。',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: '我可以添加多个同类型的骰子吗?',
|
|
20
|
+
answer: '可以。每次点击一个骰子都会将其添加到投掷池中。如果您点击 d6 三次,投掷池将显示\"3d6\"。如需减少数量,点击投掷池中每个骰子组旁边的\"−\"按钮即可。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: '数字骰子和物理骰子一样随机吗?',
|
|
24
|
+
answer: '从统计学上讲,是的。现代 JavaScript 引擎使用高质量的均匀分布伪随机算法(xorshift128+)。现实中的物理骰子可能会因制造工艺的小瑕疵产生偏差;数字骰子则完全不存在这个问题。',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
question: '什么是 d100,它该如何使用?',
|
|
28
|
+
answer: 'd100(或 d%)会生成 1 到 100 之间的数字,常用于基于百分比的游戏系统,如《克苏鲁的呼唤》或《战锤奇幻角色扮演》。它代表\"直接概率\":如果您的潜行技能是 65%,那么您需要掷出 65 或更小的数字才能成功。',
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
const howTo: DiceRollerLocaleContent['howTo'] = [
|
|
33
|
+
{ name: '构建骰子池', text: '点击骰子按钮(d4、d6、d8...)将它们添加到池中。每次点击都会添加一个所选类型的骰子。您可以在同一次投掷中混合不同类型的骰子。' },
|
|
34
|
+
{ name: '调整修正值', text: '使用修正值旁边的\"+\"和\"−\"按钮来应用奖励或惩罚(如 D&D 中的属性修正值)。修正值会自动累加到总计中。' },
|
|
35
|
+
{ name: '掷骰子', text: '点击\"掷骰子\"按钮。右侧面板显示最终总计以及每个骰子的具体点数,大成功(最大值)以绿色标记,大失败(最小值)以红色标记。' },
|
|
36
|
+
{ name: '查看历史记录', text: '每次投掷都会连同使用的骰子表达式、总计结果和精确时间一起记录在历史中。您可以使用相应按钮清除历史记录。' },
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
40
|
+
'@context': 'https://schema.org',
|
|
41
|
+
'@type': 'FAQPage',
|
|
42
|
+
mainEntity: faq.map((item) => ({
|
|
43
|
+
'@type': 'Question',
|
|
44
|
+
name: item.question,
|
|
45
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
46
|
+
})),
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const howToSchema: WithContext<HowTo> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'HowTo',
|
|
52
|
+
name: title,
|
|
53
|
+
description,
|
|
54
|
+
step: howTo.map((step) => ({
|
|
55
|
+
'@type': 'HowToStep',
|
|
56
|
+
name: step.name,
|
|
57
|
+
text: step.text,
|
|
58
|
+
})),
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
62
|
+
'@context': 'https://schema.org',
|
|
63
|
+
'@type': 'SoftwareApplication',
|
|
64
|
+
name: title,
|
|
65
|
+
description,
|
|
66
|
+
applicationCategory: 'UtilitiesApplication',
|
|
67
|
+
operatingSystem: 'Web',
|
|
68
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
69
|
+
inLanguage: 'zh',
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const content: DiceRollerLocaleContent = {
|
|
73
|
+
slug,
|
|
74
|
+
title,
|
|
75
|
+
description,
|
|
76
|
+
faqTitle: '常见问题解答',
|
|
77
|
+
ui: {
|
|
78
|
+
title: '在线掷骰子',
|
|
79
|
+
description: '愿运气与你同在。',
|
|
80
|
+
rollBtn: '掷骰子',
|
|
81
|
+
totalLabel: '总计',
|
|
82
|
+
historyLabel: '历史记录',
|
|
83
|
+
clearHistoryBtn: '清除历史',
|
|
84
|
+
faqTitle: '常见问题',
|
|
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: '骰子是人类最古老的随机数生成器之一。早在公元前 5000 年,美索不达米亚和埃及就曾将<strong>距骨</strong>(牛羊的足踝骨)用作原始的四面骰子。从雕刻骨头到现代环氧树脂二十面体的演变不仅仅是美学上的追求,更是一段穿越概率论和游戏机制设计的旅程。' },
|
|
99
|
+
{ type: 'title', text: '标准骰子系列', level: 3 },
|
|
100
|
+
{ type: 'paragraph', html: '自 1974 年由 <strong>《龙与地下城》</strong> 推而广之以来,角色扮演游戏中最广泛使用的骰子组合由五个柏拉图多面体加上两个额外形状组成:d4(正四面体)、d6(正六面体/立方体)、d8(正八面体)、d10(五角偏方三八面体)、d12(正十二面体)、d20(正二十面体)以及 d100(百分比骰)。每种多面体都保证了均匀分布:所有面出现的概率完全相同。' },
|
|
101
|
+
{ type: 'list', items: [
|
|
102
|
+
'<strong>d4 - 正四面体:</strong> 如果赤脚踩到它是最危险的。四个三角形面,每面概率 25%。通常用于匕首伤害或低级法术。',
|
|
103
|
+
'<strong>d6 - 立方体:</strong> 最通用的骰子。自埃及塞尼特棋以来就存在于所有棋盘游戏中。其立方几何形状保证了完美的等概率分布。',
|
|
104
|
+
'<strong>d8 - 正八面体:</strong> 长矛或战斧的骰子。八个等边三角形面,每面概率 12.5%。',
|
|
105
|
+
'<strong>d10 - 五角偏方三八面体:</strong> 标准组合中唯一的非柏拉图多面体。每个\"顶点\"有两个相对的面。是 d100(两个 d10 组合)的基础。',
|
|
106
|
+
'<strong>d12 - 正十二面体:</strong> 野蛮人之骰。十二个正五边形面。在很多系统中被低估,但在 D&D 5e 的野蛮人职业中是主角。',
|
|
107
|
+
'<strong>d20 - 正二十面体:</strong> RPG 之王。二十个三角形面。d20 系统的核心:决定了几乎所有动作的成败。',
|
|
108
|
+
'<strong>d100 - 百分比骰:</strong> 两个 d10 组合(十位+个位)。在《克苏鲁的呼唤》或《战锤》等系统中定义精细概率。',
|
|
109
|
+
]},
|
|
110
|
+
{ type: 'stats', items: [
|
|
111
|
+
{ value: '5000 BC', 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: 'JS 随机周期', 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:使用两个六面骰子掷出 7 的概率是 6/36 ≈ 16.7%,而极端结果(2 和 12)仅占 2.8%。' },
|
|
118
|
+
{ type: 'tip', title: '优势与劣势 (D&D 5e)', html: '<strong>优势</strong>机制是指掷 2d20 并取较高值。从数学上讲,这会将平均值从 10.5 提高到约 13.8。<strong>劣势</strong>反之:取较低值,平均值降至约 7.2。我们的模拟器允许您通过向袋中添加两个 d20 并比较结果来模拟这一点。' },
|
|
119
|
+
{ type: 'title', text: '修正值:骰子与角色之间的桥梁', level: 3 },
|
|
120
|
+
{ type: 'paragraph', html: '在大多数 RPG 系统中,骰子并非独立工作:会加减代表角色能力的<strong>修正值</strong>。在 D&D 5e 中,力量修正值为 +5 意味着您掷 1d20 后加 5,并根据敌人的护甲等级 (AC) 检查结果。我们的模拟器包含修正值控制功能,以如实反映这些机制。' },
|
|
121
|
+
{ type: 'tip', title: '骰子记法标准', html: '<strong>XdY+Z</strong> 记法是角色扮演游戏中的事实标准:X 个 Y 面的骰子,带有修正值 Z。\"3d6+2\"意味着掷三个六面骰子并将结果加 2。我们的工具在历史记录中使用此记法,方便您轻松共享或记录您的掷骰结果。' },
|
|
122
|
+
{ type: 'glossary', items: [
|
|
123
|
+
{ term: '暴击 (Critical Hit)', definition: '掷出骰子的最大值(例如 d20 掷出 20)。在大多数 RPG 系统中通常会触发特殊的奖励效果。' },
|
|
124
|
+
{ term: '大失败 / 自发 1 (Nat 1)', definition: '掷出骰子的最小值 (1)。通产导致戏剧性的失败或负面后果。' },
|
|
125
|
+
{ term: '骰子池 (Dice Pool)', definition: '同时掷出的一组骰子。我们工具中的投掷池会按数量分组显示每种骰子类型(例如 3d6 + 2d8)。' },
|
|
126
|
+
{ term: '修正值 (Modifier)', definition: '一个加在或减去掷骰结果的固定数值,代表角色的技能、属性奖励或环境惩罚。' },
|
|
127
|
+
{ term: '百分号掷骰 (Percentile Roll)', definition: '使用两个 d10 产生 1-100 结果的掷骰,用于基于技能且能力以百分比衡量的系统。' },
|
|
128
|
+
]},
|
|
129
|
+
],
|
|
130
|
+
faq,
|
|
131
|
+
bibliography,
|
|
132
|
+
howTo,
|
|
133
|
+
schemas: [faqSchema as any, howToSchema as any, appSchema],
|
|
134
|
+
};
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
-
import { diceRoller } from './index';
|
|
4
|
-
import type { KnownLocale } from '../../types';
|
|
5
|
-
|
|
6
|
-
interface Props {
|
|
7
|
-
locale?: KnownLocale;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const { locale = 'es' } = Astro.props;
|
|
11
|
-
const content = await diceRoller.i18n[locale]?.();
|
|
12
|
-
if (!content) return null;
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
1
|
+
---
|
|
2
|
+
import { SEORenderer } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { diceRoller } from './index';
|
|
4
|
+
import type { KnownLocale } from '../../types';
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
locale?: KnownLocale;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const { locale = 'es' } = Astro.props;
|
|
11
|
+
const content = await diceRoller.i18n[locale]?.();
|
|
12
|
+
if (!content) return null;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
{content.seo?.length > 0 && <SEORenderer content={{ locale, sections: content.seo }} />}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
-
import { bibliography } from './bibliography';
|
|
4
|
-
|
|
5
|
-
if (!bibliography || bibliography.length === 0) return null;
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<SharedBibliography links={bibliography} />
|
|
1
|
+
---
|
|
2
|
+
import { Bibliography as SharedBibliography } from '@jjlmoya/utils-shared';
|
|
3
|
+
import { bibliography } from './bibliography';
|
|
4
|
+
|
|
5
|
+
if (!bibliography || bibliography.length === 0) return null;
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
<SharedBibliography links={bibliography} />
|