@jjlmoya/utils-tabletop 1.9.0 → 1.11.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 (46) hide show
  1. package/package.json +1 -1
  2. package/src/entries.ts +4 -0
  3. package/src/tests/locale_completeness.test.ts +1 -1
  4. package/src/tests/tool_validation.test.ts +1 -1
  5. package/src/tool/decision-wheel/client.ts +5 -1
  6. package/src/tool/decision-wheel/components/SegmentEditor.astro +1 -1
  7. package/src/tool/decision-wheel/decision-wheel.css +23 -7
  8. package/src/tool/hidden-role-dealer/bibliography.astro +16 -0
  9. package/src/tool/hidden-role-dealer/bibliography.ts +12 -0
  10. package/src/tool/hidden-role-dealer/client.ts +265 -0
  11. package/src/tool/hidden-role-dealer/component.astro +184 -0
  12. package/src/tool/hidden-role-dealer/entry.ts +145 -0
  13. package/src/tool/hidden-role-dealer/hidden-role-dealer.css +604 -0
  14. package/src/tool/hidden-role-dealer/i18n/de.ts +195 -0
  15. package/src/tool/hidden-role-dealer/i18n/en.ts +279 -0
  16. package/src/tool/hidden-role-dealer/i18n/es.ts +279 -0
  17. package/src/tool/hidden-role-dealer/i18n/fr.ts +215 -0
  18. package/src/tool/hidden-role-dealer/i18n/id.ts +191 -0
  19. package/src/tool/hidden-role-dealer/i18n/it.ts +191 -0
  20. package/src/tool/hidden-role-dealer/i18n/ja.ts +191 -0
  21. package/src/tool/hidden-role-dealer/i18n/ko.ts +191 -0
  22. package/src/tool/hidden-role-dealer/i18n/nl.ts +191 -0
  23. package/src/tool/hidden-role-dealer/i18n/pl.ts +191 -0
  24. package/src/tool/hidden-role-dealer/i18n/pt.ts +191 -0
  25. package/src/tool/hidden-role-dealer/i18n/ru.ts +191 -0
  26. package/src/tool/hidden-role-dealer/i18n/sv.ts +191 -0
  27. package/src/tool/hidden-role-dealer/i18n/tr.ts +191 -0
  28. package/src/tool/hidden-role-dealer/i18n/zh.ts +191 -0
  29. package/src/tool/hidden-role-dealer/index.ts +10 -0
  30. package/src/tool/hidden-role-dealer/logic.test.ts +99 -0
  31. package/src/tool/hidden-role-dealer/logic.ts +134 -0
  32. package/src/tool/hidden-role-dealer/modules/custom-role-manager.ts +35 -0
  33. package/src/tool/hidden-role-dealer/modules/dealer-logic.ts +73 -0
  34. package/src/tool/hidden-role-dealer/modules/hold-controller.ts +38 -0
  35. package/src/tool/hidden-role-dealer/modules/particle-effects.ts +40 -0
  36. package/src/tool/hidden-role-dealer/modules/player-manager.ts +44 -0
  37. package/src/tool/hidden-role-dealer/modules/presets.ts +46 -0
  38. package/src/tool/hidden-role-dealer/modules/setup-handlers.ts +34 -0
  39. package/src/tool/hidden-role-dealer/modules/storage.ts +23 -0
  40. package/src/tool/hidden-role-dealer/modules/utils.ts +18 -0
  41. package/src/tool/hidden-role-dealer/modules/wizard-html.ts +161 -0
  42. package/src/tool/hidden-role-dealer/modules/wizard-renderer.ts +161 -0
  43. package/src/tool/hidden-role-dealer/modules/writer-handler.ts +70 -0
  44. package/src/tool/hidden-role-dealer/seo.astro +16 -0
  45. package/src/tool/hidden-role-dealer/types.ts +31 -0
  46. package/src/tools.ts +2 -0
@@ -0,0 +1,191 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { HiddenRoleDealerUI } from '../entry';
4
+
5
+ const ui: HiddenRoleDealerUI = {
6
+ title: 'Pembagi Peran Tersembunyi',
7
+ setupTitle: 'Pengaturan Pembagian Peran',
8
+ playerList: 'Daftar Pemain',
9
+ addPlayer: 'Tambah',
10
+ addPlayerPlaceholder: 'Nama pemain...',
11
+ rolePool: 'Kumpulan Peran Rahasia',
12
+ presetsTitle: 'Preset Game',
13
+ presetCustom: 'Pengaturan Kustom',
14
+ dealRoles: 'Bagikan Peran Rahasia',
15
+ clearPlayers: 'Hapus Semua',
16
+ instructions: 'Masukkan nama pemain, atur peran rahasia, lalu ketuk Bagikan Peran Rahasia.',
17
+ passTo: 'Berikan perangkat ke',
18
+ holdToReveal: 'Tahan untuk membuka',
19
+ releasingResets: 'Tetap tahan untuk membuka...',
20
+ hideRole: 'Dimengerti, sembunyikan peran',
21
+ nextPlayer: 'Pemain Selanjutnya',
22
+ finishedTitle: 'Semua Peran Selesai Dibagikan',
23
+ finishedDesc: 'Semua pemain telah melihat peran mereka secara rahasia. Anda dapat memulai permainan sekarang.',
24
+ restart: 'Mulai Ulang dan Bagikan Lagi',
25
+ rolesCount: 'Peran Terpilih',
26
+ playersCount: 'Pemain Ditambahkan',
27
+ mismatchWarning: 'Dibutuhkan minimal 3 pemain untuk membagikan peran.',
28
+ werewolfName: 'Werewolf / Mafia',
29
+ werewolfDesc: 'Warga mencoba menemukan dan memilih keluar Werewolf yang tersembunyi.',
30
+ avalonName: 'The Resistance: Avalon',
31
+ avalonDesc: 'Merlin dan pelayan setia menyelesaikan misi sambil menghindari agen jahat.',
32
+ hitlerName: 'Secret Hitler',
33
+ hitlerDesc: 'Liberal mencoba meloloskan undang-undang dan menemukan pemimpin rahasia.',
34
+ customName: 'Pengaturan Kustom',
35
+ customDesc: 'Bagikan kartu berlabel sederhana kepada para pemain.',
36
+ roleWerewolfName: 'Werewolf',
37
+ roleWerewolfDesc: 'Eliminasi warga secara rahasia di malam hari.',
38
+ roleWerewolfSecret: 'Bekerjasamalah dengan Werewolf lain untuk mengelabui desa.',
39
+ roleSeerName: 'Seer',
40
+ roleSeerDesc: 'Periksa aliansi satu pemain setiap malam.',
41
+ roleSeerSecret: 'Identifikasi Werewolf tetapi tetap tersembunyi agar bisa bertahan hidup.',
42
+ roleDoctorName: 'Dokter',
43
+ roleDoctorDesc: 'Lindungi satu pemain dari eliminasi setiap malam.',
44
+ roleDoctorSecret: 'Jaga agar anggota desa yang penting tetap hidup.',
45
+ roleVillagerName: 'Warga',
46
+ roleVillagerDesc: 'Temukan Werewolf yang tersembunyi.',
47
+ roleVillagerSecret: 'Diskusikan, analisis, dan pilih pemain yang mencurigakan.',
48
+ roleMerlinName: 'Merlin',
49
+ roleMerlinDesc: 'Mengetahui agen-agen jahat.',
50
+ roleMerlinSecret: 'Pandu tim menuju kemenangan tanpa mengungkap identitas Anda.',
51
+ roleAssassinName: 'Assassin',
52
+ roleAssassinDesc: 'Dapat membunuh Merlin di akhir permainan.',
53
+ roleAssassinSecret: 'Temukan Merlin untuk merebut kemenangan di akhir game.',
54
+ roleMinionName: 'Minion of Mordred',
55
+ roleMinionDesc: 'Agen jahat yang saling mengetahui identitas.',
56
+ roleMinionSecret: 'Sabotase misi tanpa terdeteksi.',
57
+ roleServantName: 'Pelayan Setia',
58
+ roleServantDesc: 'Selesaikan misi untuk Arthur.',
59
+ roleServantSecret: 'Diskusikan, usulkan tim, dan pilih secara logis.',
60
+ roleHitlerName: 'Hitler',
61
+ roleHitlerDesc: 'Pemimpin rahasia kaum Fasis.',
62
+ roleHitlerSecret: 'Terpilihlah sebagai Kanselir atau biarkan Fasis meloloskan UU.',
63
+ roleFascistName: 'Fascist',
64
+ roleFascistDesc: 'Berkoordinasi untuk meloloskan undang-undang fasis.',
65
+ roleFascistSecret: 'Lindungi Hitler dan manipulasi hasil pemilu.',
66
+ roleLiberalName: 'Liberal',
67
+ roleLiberalDesc: 'Temukan dan hentikan ancaman fasis.',
68
+ roleLiberalSecret: 'Loloskan UU liberal dan eliminasi Hitler jika memungkinkan.',
69
+ roleCustomName: 'Peran Kustom',
70
+ roleCustomDesc: 'Deskripsi umum peran kustom.',
71
+ roleCustomSecret: 'Penuhi tujuan tim Anda.',
72
+ teamWerewolves: 'Werewolf',
73
+ teamVillagers: 'Warga',
74
+ teamGood: 'Baik',
75
+ teamEvil: 'Jahat',
76
+ teamFascist: 'Fasis',
77
+ teamLiberal: 'Liberal',
78
+ teamCustom: 'Tim Kustom',
79
+ secretRoleIs: 'peran rahasia Anda adalah:',
80
+ customRolesTitle: 'Pengaturan Peran Kustom',
81
+ customRolePlaceholder: 'Masukkan nama peran...',
82
+ neutralLabel: 'Netral',
83
+ goodLabel: 'Baik',
84
+ evilLabel: 'Jahat',
85
+ customMismatchWarning: 'Atur jumlah peran kustom yang sama persis dengan jumlah pemain.',
86
+ impostorPresetName: 'Game Impostor',
87
+ impostorPresetDesc: 'Bagikan peran Impostor dan Crewmate dengan jumlah yang dapat disesuaikan.',
88
+ impostorTitle: 'Pengaturan Impostor',
89
+ impostorWarning: 'Anda membutuhkan lebih banyak pemain daripada impostor.',
90
+ roleImpostorName: 'Impostor',
91
+ roleImpostorDesc: 'Eliminasi Crewmate secara rahasia.',
92
+ roleImpostorSecret: 'Sabotase dan eliminasi tanpa ketahuan.',
93
+ roleCrewmateName: 'Crewmate',
94
+ roleCrewmateDesc: 'Selesaikan tugas dan temukan Impostor.',
95
+ roleCrewmateSecret: 'Kata rahasianya adalah:',
96
+ teamImpostor: 'Impostor',
97
+ teamCrewmate: 'Crewmate',
98
+ impostorSharedSecretLabel: 'Kata Rahasia Bersama',
99
+ impostorSharedSecretPlaceholder: 'misal Tempat: Restoran, atau Kata: Apel',
100
+ impostorModeLabel: 'Mode Perhitungan Impostor',
101
+ impostorModeFixed: 'Jumlah Tetap',
102
+ impostorModePercentage: 'Persentase (%)',
103
+ impostorModeRange: 'Rentang Acak',
104
+ impostorFixedLabel: 'Jumlah Impostor',
105
+ impostorPercentageLabel: 'Persentase Impostor (%)',
106
+ impostorRangeMinLabel: 'Impostor Minimum',
107
+ impostorRangeMaxLabel: 'Impostor Maksimum',
108
+ impostorWriterLabel: 'Pembuat Kata / Host',
109
+ impostorWriterRandom: 'Host bukan pemain',
110
+ roleWriterName: 'Pembuat Kata',
111
+ roleWriterDesc: 'Anda menentukan kata rahasia.',
112
+ writerInputPrompt: 'Anda adalah Pembuat Kata. Masukkan kata atau tempat rahasia untuk game ini:',
113
+ writerInputPlaceholder: 'misal Restoran, Rumah Sakit...',
114
+ btnSetWord: 'Simpan & Mulai',
115
+ impostorWriterPreround: 'Pra-putaran Rahasia (Semua pemain)',
116
+ impostorWriterDescHost: 'Host bukan pemain menggunakan kata acak.',
117
+ impostorWriterDescPreround: 'Pra-putaran memungkinkan semua pemain menulis kata secara rahasia dan memilih satu secara acak.',
118
+ impostorWriterDescPlayer: 'Pemain terpilih menulis kata rahasia dan tidak bisa menjadi impostor.',
119
+ preroundPassTitle: 'Pra-putaran: Berikan perangkat ke',
120
+ preroundInputPrompt: 'Tulis kata atau tempat secara rahasia (akan disembunyikan):',
121
+ preroundPassHint: 'Jaga kerahasiaan kata dari pemain lain!',
122
+ btnSubmitWord: 'Kirim Kata',
123
+ };
124
+
125
+ const faq = [
126
+ {
127
+ question: 'Bagaimana cara kerja Pembagi Peran Tersembunyi?',
128
+ answer: 'Alat ini memungkinkan Anda membagikan peran rahasia untuk game deduksi sosial secara lokal di satu perangkat. Anda memasukkan nama, memilih preset, lalu mengoper perangkat dari pemain ke pemain. Setiap pemain menahan tombol untuk melihat peran mereka.',
129
+ },
130
+ ];
131
+
132
+ const howTo = [
133
+ {
134
+ name: 'Tambah Pemain',
135
+ text: 'Masukkan nama peserta di panel pengaturan.',
136
+ },
137
+ {
138
+ name: 'Pilih Preset',
139
+ text: 'Pilih salah satu aturan game bawaan atau atur peran kustom sendiri.',
140
+ },
141
+ {
142
+ name: 'Oper and Ungkapkan',
143
+ text: 'Oper perangkat ke setiap pemain. Setiap pemain harus menahan tombol ungkapkan untuk melihat peran rahasia mereka, lalu ketuk berikutnya.',
144
+ },
145
+ ];
146
+
147
+ export const content: ToolLocaleContent<HiddenRoleDealerUI> = {
148
+ slug: 'pembagi-peran-tersembunyi-rahasia',
149
+ title: 'Pembagi Peran Tersembunyi: Kartu Identitas Game Deduksi Sosial',
150
+ description: 'Bagikan peran rahasia secara lokal untuk game seperti Werewolf, Avalon, Secret Hitler, dan Impostor tanpa kartu fisik.',
151
+ ui,
152
+ seo: [
153
+ { type: 'title', text: 'Keseimbangan Tim dalam Game Deduksi Sosial', level: 2 },
154
+ { type: 'paragraph', html: 'Menyeimbangkan rasio peran baik dan jahat sangat penting untuk memastikan permainan berjalan adil dan seru.' },
155
+ ],
156
+ faq,
157
+ bibliography,
158
+ howTo,
159
+ schemas: [
160
+ {
161
+ '@context': 'https://schema.org',
162
+ '@type': 'FAQPage',
163
+ 'mainEntity': faq.map((f) => ({
164
+ '@type': 'Question',
165
+ 'name': f.question,
166
+ 'acceptedAnswer': {
167
+ '@type': 'Answer',
168
+ 'text': f.answer,
169
+ },
170
+ })),
171
+ },
172
+ {
173
+ '@context': 'https://schema.org',
174
+ '@type': 'SoftwareApplication',
175
+ 'name': ui.title,
176
+ 'operatingSystem': 'All',
177
+ 'applicationCategory': 'UtilitiesApplication',
178
+ 'browserRequirements': 'Requires HTML5. Requires JavaScript.',
179
+ },
180
+ {
181
+ '@context': 'https://schema.org',
182
+ '@type': 'HowTo',
183
+ 'name': ui.setupTitle,
184
+ 'step': howTo.map((h) => ({
185
+ '@type': 'HowToStep',
186
+ 'name': h.name,
187
+ 'text': h.text,
188
+ })),
189
+ },
190
+ ],
191
+ };
@@ -0,0 +1,191 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { HiddenRoleDealerUI } from '../entry';
4
+
5
+ const ui: HiddenRoleDealerUI = {
6
+ title: 'Distributore Ruoli Segreti',
7
+ setupTitle: 'Configurazione Distribuzione Ruoli',
8
+ playerList: 'Lista Giocatori',
9
+ addPlayer: 'Aggiungi',
10
+ addPlayerPlaceholder: 'Nome giocatore...',
11
+ rolePool: 'Gruppo Ruoli Segreti',
12
+ presetsTitle: 'Modelli di Gioco',
13
+ presetCustom: 'Configurazione Personalizzata',
14
+ dealRoles: 'Distribuisci Ruoli Segreti',
15
+ clearPlayers: 'Cancella Tutto',
16
+ instructions: 'Inserisci i nomi dei giocatori, configura i ruoli segreti e premi su Distribuisci Ruoli Segreti.',
17
+ passTo: 'Passa il dispositivo a',
18
+ holdToReveal: 'Tieni premuto per rivelare',
19
+ releasingResets: 'Continua a premere per rivelare...',
20
+ hideRole: 'Ho capito, nascondi ruolo',
21
+ nextPlayer: 'Giocatore Successivo',
22
+ finishedTitle: 'Tutti i Ruoli Distribuiti',
23
+ finishedDesc: 'Tutti i giocatori hanno consultato segretamente il proprio ruolo. Potete iniziare la partita.',
24
+ restart: 'Riavvia e Ridistribuisci',
25
+ rolesCount: 'Ruoli Selezionati',
26
+ playersCount: 'Giocatori Aggiunti',
27
+ mismatchWarning: 'È richiesto un minimo di 3 giocatori per distribuire i ruoli.',
28
+ werewolfName: 'Lupo Mannaro / Mafia',
29
+ werewolfDesc: 'I Villici cercano di scoprire ed eliminare i Lupi Mannari nascosti.',
30
+ avalonName: 'The Resistance: Avalon',
31
+ avalonDesc: 'Merlino e i leali servitori completano missioni evitando i sabotatori.',
32
+ hitlerName: 'Secret Hitler',
33
+ hitlerDesc: 'I Liberali cercano di far approvare leggi e scoprire il leader segreto.',
34
+ customName: 'Configurazione Personalizzata',
35
+ customDesc: 'Distribuisci carte con etichette semplici ai giocatori.',
36
+ roleWerewolfName: 'Lupo Mannaro',
37
+ roleWerewolfDesc: 'Elimina segretamente i Villici durante la notte.',
38
+ roleWerewolfSecret: 'Collabora con gli altri Lupi Mannari per ingannare il villaggio.',
39
+ roleSeerName: 'Veggente',
40
+ roleSeerDesc: 'Verifica l\'allineamento di un giocatore ogni notte.',
41
+ roleSeerSecret: 'Identifica i Lupi Mannari ma resta nascosto per sopravvivere.',
42
+ roleDoctorName: 'Dottore',
43
+ roleDoctorDesc: 'Protegge un giocatore dall\'eliminazione ogni notte.',
44
+ roleDoctorSecret: 'Salva i membri chiave del villaggio.',
45
+ roleVillagerName: 'Villico',
46
+ roleVillagerDesc: 'Trova i Lupi Mannari nascosti.',
47
+ roleVillagerSecret: 'Discuti, analizza e vota contro i sospettati.',
48
+ roleMerlinName: 'Merlino',
49
+ roleMerlinDesc: 'Conosce gli agenti del male.',
50
+ roleMerlinSecret: 'Guida la squadra alla vittoria senza rivelarti.',
51
+ roleAssassinName: 'Assassino',
52
+ roleAssassinDesc: 'Può assassinare Merlino alla fine del gioco.',
53
+ roleAssassinSecret: 'Trova Merlino per rubare la vittoria alla fine.',
54
+ roleMinionName: 'Servitore di Mordred',
55
+ roleMinionDesc: 'Agente infiltrato di Mordred.',
56
+ roleMinionSecret: 'Sabota le missioni senza farti scoprire.',
57
+ roleServantName: 'Leale Servitore',
58
+ roleServantDesc: 'Completa missioni per Artù.',
59
+ roleServantSecret: 'Discuti, proponi squadre e vota con logica.',
60
+ roleHitlerName: 'Hitler',
61
+ roleHitlerDesc: 'Il leader segreto dei Fascisti.',
62
+ roleHitlerSecret: 'Fatti eleggere Cancelliere o lascia che i Fascisti approvino leggi.',
63
+ roleFascistName: 'Fascista',
64
+ roleFascistDesc: 'Coordinati per approvare leggi fasciste.',
65
+ roleFascistSecret: 'Proteggi Hitler e manipola le elezioni.',
66
+ roleLiberalName: 'Liberale',
67
+ roleLiberalDesc: 'Trova e ferma la minaccia fascista.',
68
+ roleLiberalSecret: 'Approva leggi liberali ed elimina Hitler se possibile.',
69
+ roleCustomName: 'Ruolo Personalizzato',
70
+ roleCustomDesc: 'Descrizione generale del ruolo personalizzato.',
71
+ roleCustomSecret: 'Raggiungi l\'obiettivo della tua squadra.',
72
+ teamWerewolves: 'Lupi Mannari',
73
+ teamVillagers: 'Villici',
74
+ teamGood: 'Bene',
75
+ teamEvil: 'Male',
76
+ teamFascist: 'Fascista',
77
+ teamLiberal: 'Liberale',
78
+ teamCustom: 'Squadra Personalizzata',
79
+ secretRoleIs: 'il tuo ruolo segreto è:',
80
+ customRolesTitle: 'Configurazione Ruoli Personalizzati',
81
+ customRolePlaceholder: 'Nome ruolo...',
82
+ neutralLabel: 'Neutrale',
83
+ goodLabel: 'Buono',
84
+ evilLabel: 'Malvagio',
85
+ customMismatchWarning: 'Configura esattamente lo stesso numero di ruoli personalizzati e di giocatori.',
86
+ impostorPresetName: 'Gioco dell\'Impostore',
87
+ impostorPresetDesc: 'Assegna ruoli di Impostore e Crewmate con quantità personalizzabili.',
88
+ impostorTitle: 'Impostazioni Impostore',
89
+ impostorWarning: 'Sono necessari più giocatori che impostori.',
90
+ roleImpostorName: 'Impostore',
91
+ roleImpostorDesc: 'Elimina segretamente i Crewmate.',
92
+ roleImpostorSecret: 'Sabota ed elimina senza farti scoprire.',
93
+ roleCrewmateName: 'Crewmate',
94
+ roleCrewmateDesc: 'Completa le attività e trova l\'Impostore.',
95
+ roleCrewmateSecret: 'La parola segreta è:',
96
+ teamImpostor: 'Impostore',
97
+ teamCrewmate: 'Crewmate',
98
+ impostorSharedSecretLabel: 'Informazione Segreta Condivisa',
99
+ impostorSharedSecretPlaceholder: 'es. Luogo: Ristorante, o Parola: Mela',
100
+ impostorModeLabel: 'Metodo di Calcolo degli Impostori',
101
+ impostorModeFixed: 'Numero Fisso',
102
+ impostorModePercentage: 'Percentuale',
103
+ impostorModeRange: 'Intervallo Casuale',
104
+ impostorFixedLabel: 'Numero di Impostori',
105
+ impostorPercentageLabel: 'Percentuale di Impostori (%)',
106
+ impostorRangeMinLabel: 'Impostori Minimi',
107
+ impostorRangeMaxLabel: 'Impostori Massimi',
108
+ impostorWriterLabel: 'Scrittore della Parola / Host',
109
+ impostorWriterRandom: 'Host non-giocatore',
110
+ roleWriterName: 'Scrittore',
111
+ roleWriterDesc: 'Tu decidi la parola segreta.',
112
+ writerInputPrompt: 'Sei lo Scrittore. Inserisci la parola o luogo segreto per questa partita:',
113
+ writerInputPlaceholder: 'es. Ristorante, Ospedale...',
114
+ btnSetWord: 'Salva e Inizia',
115
+ impostorWriterPreround: 'Pre-turno Segreto (Tutti i giocatori)',
116
+ impostorWriterDescHost: 'L\'host non-giocatore usa una parola casuale o preimpostata.',
117
+ impostorWriterDescPreround: 'Il pre-turno consente a tutti i giocatori di scrivere parole in segreto e ne sceglie una a caso.',
118
+ impostorWriterDescPlayer: 'Il giocatore selezionato scrive la parola e non può essere l\'impostore.',
119
+ preroundPassTitle: 'Pre-turno: Passa il dispositivo a',
120
+ preroundInputPrompt: 'Scrivi segretamente una parola o luogo:',
121
+ preroundPassHint: 'Mantieni la parola segreta dagli altri giocatori!',
122
+ btnSubmitWord: 'Invia Parola',
123
+ };
124
+
125
+ const faq = [
126
+ {
127
+ question: 'Come funziona il Distributore Ruoli Segreti?',
128
+ answer: 'Il Distributore consente di assegnare ruoli segreti per giochi di deduzione sociale localmente su un singolo dispositivo. Inserisci i nomi dei giocatori, selezioni un modello o personalizzi i ruoli, e poi passi il dispositivo a ciascun giocatore. Ognuno tiene premuto il pulsante di rivelazione per visualizzare il proprio ruolo in privato.',
129
+ },
130
+ ];
131
+
132
+ const howTo = [
133
+ {
134
+ name: 'Aggiungi Giocatori',
135
+ text: 'Inserisci i nomi dei partecipanti nel pannello di configurazione.',
136
+ },
137
+ {
138
+ name: 'Seleziona Modello',
139
+ text: 'Scegli una delle configurazioni predefinite o crea un gruppo di ruoli personalizzati.',
140
+ },
141
+ {
142
+ name: 'Passa e Rivela',
143
+ text: 'Passa il dispositivo a ciascun giocatore. Ogni giocatore deve tenere premuto il pulsante di rivelazione per vedere il proprio ruolo segreto, quindi toccare successivo.',
144
+ },
145
+ ];
146
+
147
+ export const content: ToolLocaleContent<HiddenRoleDealerUI> = {
148
+ slug: 'distributore-ruoli-segreti-occulti',
149
+ title: 'Distributore Ruoli Segreti: Gestione Identità e Carte di Gioco',
150
+ description: 'Distribuisci ruoli segreti localmente per giochi di deduzione sociale come Lupo Mannaro, Avalon, Secret Hitler e Impostore senza carte fisiche.',
151
+ ui,
152
+ seo: [
153
+ { type: 'title', text: 'Bilanciamento delle Squadre nei Giochi di Deduzione Sociale', level: 2 },
154
+ { type: 'paragraph', html: 'Una delle sfide principali di Lupo Mannaro, Avalon o Secret Hitler è bilanciare il numero di ruoli del bene e del male. Una proporzione non corretta può rendere il gioco troppo facile per una fazione e frustrante per l\'altra.' },
155
+ ],
156
+ faq,
157
+ bibliography,
158
+ howTo,
159
+ schemas: [
160
+ {
161
+ '@context': 'https://schema.org',
162
+ '@type': 'FAQPage',
163
+ 'mainEntity': faq.map((f) => ({
164
+ '@type': 'Question',
165
+ 'name': f.question,
166
+ 'acceptedAnswer': {
167
+ '@type': 'Answer',
168
+ 'text': f.answer,
169
+ },
170
+ })),
171
+ },
172
+ {
173
+ '@context': 'https://schema.org',
174
+ '@type': 'SoftwareApplication',
175
+ 'name': ui.title,
176
+ 'operatingSystem': 'All',
177
+ 'applicationCategory': 'UtilitiesApplication',
178
+ 'browserRequirements': 'Requires HTML5. Requires JavaScript.',
179
+ },
180
+ {
181
+ '@context': 'https://schema.org',
182
+ '@type': 'HowTo',
183
+ 'name': ui.setupTitle,
184
+ 'step': howTo.map((h) => ({
185
+ '@type': 'HowToStep',
186
+ 'name': h.name,
187
+ 'text': h.text,
188
+ })),
189
+ },
190
+ ],
191
+ };
@@ -0,0 +1,191 @@
1
+ import { bibliography } from '../bibliography';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { HiddenRoleDealerUI } from '../entry';
4
+
5
+ const ui: HiddenRoleDealerUI = {
6
+ title: '秘密の役割配信ツール',
7
+ setupTitle: '役割配布設定',
8
+ playerList: 'プレイヤーリスト',
9
+ addPlayer: '追加',
10
+ addPlayerPlaceholder: 'プレイヤー名を入力...',
11
+ rolePool: '秘密の役割プール',
12
+ presetsTitle: 'ゲームテンプレート',
13
+ presetCustom: 'カスタム設定',
14
+ dealRoles: '秘密の役割を配る',
15
+ clearPlayers: 'すべてクリア',
16
+ instructions: 'プレイヤー名を入力し、秘密の役割を設定して、「秘密の役割を配る」をタップしてください。',
17
+ passTo: 'デバイスを次の人へ渡してください:',
18
+ holdToReveal: '長押しして表示',
19
+ releasingResets: '長押しし続けてください...',
20
+ hideRole: '了解、役割を隠す',
21
+ nextPlayer: '次のプレイヤー',
22
+ finishedTitle: 'すべての役割配布完了',
23
+ finishedDesc: '全員が秘密裏に自分の役割を確認しました。ゲームを開始してください。',
24
+ restart: '最初からやり直す',
25
+ rolesCount: '選択された役割',
26
+ playersCount: '追加されたプレイヤー',
27
+ mismatchWarning: '役割を配るには最低3人のプレイヤーが必要です。',
28
+ werewolfName: '人狼 / マフィア',
29
+ werewolfDesc: '市民は隠れた人狼を見つけ出し、投票で追放することを目指します。',
30
+ avalonName: 'レジスタンス:アヴァロン',
31
+ avalonDesc: 'マーリンと忠臣たちは、サボタージュを避けながらクエストの達成を目指します。',
32
+ hitlerName: 'シークレット・ヒトラー',
33
+ hitlerDesc: 'リベラル派は法案を通し、秘密の指導者を見つけ出すことを目指します。',
34
+ customName: 'カスタム設定',
35
+ customDesc: 'プレイヤーにシンプルなラベル付きカードを配布します。',
36
+ roleWerewolfName: '人狼',
37
+ roleWerewolfDesc: '夜のフェーズに市民を秘密裏に襲撃します。',
38
+ roleWerewolfSecret: '他の人狼と協力して、村の人々を騙しましょう。',
39
+ roleSeerName: '占い師',
40
+ roleSeerDesc: '毎晩、プレイヤー1人の陣営を確認できます。',
41
+ roleSeerSecret: '人狼を特定しつつ、生き残るために正体を隠しましょう。',
42
+ roleDoctorName: '医師',
43
+ roleDoctorDesc: '毎晩、プレイヤー1人を襲撃から守ることができます。',
44
+ roleDoctorSecret: '村の重要なメンバーを生存させましょう。',
45
+ roleVillagerName: '市民',
46
+ roleVillagerDesc: '隠れている人狼を見つけ出します。',
47
+ roleVillagerSecret: '議論し、分析し、怪しいプレイヤーに投票しましょう。',
48
+ roleMerlinName: 'マーリン',
49
+ roleMerlinDesc: '邪悪な存在の正体を知っています。',
50
+ roleMerlinSecret: '正体がバレないように味方を勝利へ導きましょう。',
51
+ roleAssassinName: '暗殺者',
52
+ roleAssassinDesc: 'ゲームの最後にマーリンを暗殺できます。',
53
+ roleAssassinSecret: '最後にマーリンを特定して勝利を奪い取りましょう。',
54
+ roleMinionName: 'モードレッドの爪牙',
55
+ roleMinionDesc: '正体を知り合っている悪の陣営。',
56
+ roleMinionSecret: '正体がバレないようにクエストを失敗させましょう。',
57
+ roleServantName: 'アーサーの忠臣',
58
+ roleServantDesc: 'アーサー王のためにクエストを成功に導きます。',
59
+ roleServantSecret: '議論し、チームを提案し、論理的に投票しましょう。',
60
+ roleHitlerName: 'ヒトラー',
61
+ roleHitlerDesc: 'ファシストの秘密の指導者。',
62
+ roleHitlerSecret: '首相に選出されるか、ファシスト法案を可決させましょう。',
63
+ roleFascistName: 'ファシスト',
64
+ roleFascistDesc: '協力してファシスト法案の可決を目指します。',
65
+ roleFascistSecret: 'ヒトラーを守り、選挙結果を操作しましょう。',
66
+ roleLiberalName: 'リベラル',
67
+ roleLiberalDesc: 'ファシストの脅威を阻止します。',
68
+ roleLiberalSecret: 'リベラル法案を可決させるか、ヒトラーを処刑しましょう。',
69
+ roleCustomName: 'カスタム役割',
70
+ roleCustomDesc: 'カスタム役割の概要説明。',
71
+ roleCustomSecret: '所属チームの目標を達成しましょう。',
72
+ teamWerewolves: '人狼チーム',
73
+ teamVillagers: '市民チーム',
74
+ teamGood: '正義の陣営',
75
+ teamEvil: '邪悪な陣営',
76
+ teamFascist: 'ファシスト陣営',
77
+ teamLiberal: 'リベラル陣営',
78
+ teamCustom: 'カスタムチーム',
79
+ secretRoleIs: 'あなたの秘密の役割は:',
80
+ customRolesTitle: 'カスタム役割の設定',
81
+ customRolePlaceholder: '役割名を入力...',
82
+ neutralLabel: '第三勢力',
83
+ goodLabel: '善',
84
+ evilLabel: '悪',
85
+ customMismatchWarning: 'プレイヤー数と同じ数のカスタム役割を設定してください。',
86
+ impostorPresetName: 'インポスターゲーム',
87
+ impostorPresetDesc: 'インポスターとクルーメイトの数を設定して配ります。',
88
+ impostorTitle: 'インポスター設定',
89
+ impostorWarning: 'プレイヤー数はインポスターの数より多く設定する必要があります。',
90
+ roleImpostorName: 'インポスター',
91
+ roleImpostorDesc: 'クルーメイトを秘密裏に排除します。',
92
+ roleImpostorSecret: '見つからないように妨害行為を行い、排除を進めましょう。',
93
+ roleCrewmateName: 'クルーメイト',
94
+ roleCrewmateDesc: 'タスクをこなし、インポスターを見つけ出します。',
95
+ roleCrewmateSecret: '秘密の言葉は:',
96
+ teamImpostor: 'インポスター',
97
+ teamCrewmate: 'クルーメイト',
98
+ impostorSharedSecretLabel: '共有する秘密の言葉',
99
+ impostorSharedSecretPlaceholder: '例:場所:レストラン、単語:りんご',
100
+ impostorModeLabel: 'インポスター数決定方法',
101
+ impostorModeFixed: '固定数',
102
+ impostorModePercentage: '割合(%)',
103
+ impostorModeRange: 'ランダム範囲',
104
+ impostorFixedLabel: 'インポスターの数',
105
+ impostorPercentageLabel: 'インポスターの割合(%)',
106
+ impostorRangeMinLabel: '最小インポスター数',
107
+ impostorRangeMaxLabel: '最大インポスター数',
108
+ impostorWriterLabel: '秘密の言葉作成者 / ホスト',
109
+ impostorWriterRandom: 'ノンプレイヤーホスト',
110
+ roleWriterName: '作成者',
111
+ roleWriterDesc: 'あなたが秘密の言葉を決定します。',
112
+ writerInputPrompt: 'あなたは秘密の言葉の作成者です。このゲームの言葉または場所を入力してください:',
113
+ writerInputPlaceholder: '例:レストラン、病院...',
114
+ btnSetWord: '決定して開始',
115
+ impostorWriterPreround: '秘密のプリラウンド(すべてのプレイヤー)',
116
+ impostorWriterDescHost: 'ノンプレイヤーホストはランダムな言葉を使用します。',
117
+ impostorWriterDescPreround: 'プリラウンドでは、すべてのプレイヤーが個別に言葉を入力し、その中からランダムに1つが選ばれます。',
118
+ impostorWriterDescPlayer: '指定されたプレイヤーが秘密の単語を入力し、インポスターには選ばれません。',
119
+ preroundPassTitle: 'プリラウンド:デバイスを渡してください:',
120
+ preroundInputPrompt: '秘密の単語または場所を入力してください(非表示になります):',
121
+ preroundPassHint: '他のプレイヤーに単語を見られないように注意してください!',
122
+ btnSubmitWord: '送信',
123
+ };
124
+
125
+ const faq = [
126
+ {
127
+ question: '秘密の役割配信ツールはどのように動作しますか?',
128
+ answer: 'このツールは、正体隠匿系ゲームの秘密の役割を1台のデバイスでローカルに配布するためのものです。プレイヤー名を入力し、テンプレートを選択するか役割をカスタマイズして、順番にデバイスを回しながら表示ボタンを長押しして役割を確認します。',
129
+ },
130
+ ];
131
+
132
+ const howTo = [
133
+ {
134
+ name: 'プレイヤーの追加',
135
+ text: '設定パネルに参加者の名前を入力します。',
136
+ },
137
+ {
138
+ name: 'テンプレートの選択',
139
+ text: '内蔵されたゲームルールから選ぶか、カスタムの役割リストを作成します。',
140
+ },
141
+ {
142
+ name: '渡して確認',
143
+ text: 'デバイスを各プレイヤーに渡します。各プレイヤーは確認ボタンを長押ししてシークレットロールを確認し、次へをタップします。',
144
+ },
145
+ ];
146
+
147
+ export const content: ToolLocaleContent<HiddenRoleDealerUI> = {
148
+ slug: 'hidden-role-dealer',
149
+ title: '秘密の役割配信ツール:正体隠匿ゲームの役職配布・カードディーラー',
150
+ description: '人狼ゲーム、アヴァロン、シークレットヒトラー、インポスターなどの正体隠匿カードゲームの役職を1台のスマートフォンで配布できます。',
151
+ ui,
152
+ seo: [
153
+ { type: 'title', text: '正体隠匿ゲームにおける陣営バランスの調整方法', level: 2 },
154
+ { type: 'paragraph', html: '人狼やシークレットヒトラーのようなゲームでは、プレイヤー数に応じて市民側と人狼側のバランスを調整することが最も重要です。バランスが崩れると一方的な展開になり、楽しさが半減してしまいます。本ツールは最適な推奨比率を自動で調整します。' },
155
+ ],
156
+ faq,
157
+ bibliography,
158
+ howTo,
159
+ schemas: [
160
+ {
161
+ '@context': 'https://schema.org',
162
+ '@type': 'FAQPage',
163
+ 'mainEntity': faq.map((f) => ({
164
+ '@type': 'Question',
165
+ 'name': f.question,
166
+ 'acceptedAnswer': {
167
+ '@type': 'Answer',
168
+ 'text': f.answer,
169
+ },
170
+ })),
171
+ },
172
+ {
173
+ '@context': 'https://schema.org',
174
+ '@type': 'SoftwareApplication',
175
+ 'name': ui.title,
176
+ 'operatingSystem': 'All',
177
+ 'applicationCategory': 'UtilitiesApplication',
178
+ 'browserRequirements': 'Requires HTML5. Requires JavaScript.',
179
+ },
180
+ {
181
+ '@context': 'https://schema.org',
182
+ '@type': 'HowTo',
183
+ 'name': ui.setupTitle,
184
+ 'step': howTo.map((h) => ({
185
+ '@type': 'HowToStep',
186
+ 'name': h.name,
187
+ 'text': h.text,
188
+ })),
189
+ },
190
+ ],
191
+ };