dnd5-scripts/generate_npc/psychoTypes.js
2026-06-17 22:32:48 +03:00

245 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// https://psychology.tips/types-of-temperament-and-their-meaning/
let temperaments = {
Sanguine: {
name: "Сангвиник",
chance: 20, // 20%
explanation:
"Жизнерадостный, энергичный и общительный, легко адаптируется к новым ситуациям и любит активную жизнь.",
},
Choleric: {
name: "Холерик",
chance: 15, // 15%
explanation:
"Целеустремленный и решительный, склонен к лидерству и быстрому принятию решений, хотя иногда проявляет вспыльчивость.",
},
Melancholic: {
name: "Меланхолик",
chance: 35, // 35%
explanation:
"Чувствительный и задумчивый, склонен к глубоким размышлениям и эмоциональной глубине, часто сосредоточен на деталях.",
},
Phlegmatic: {
name: "Флегматик",
chance: 30, // 30%
explanation:
"Спокойный и уравновешенный, редко подвержен стрессу и предпочитает стабильность, хороший слушатель.",
},
};
let psychosocialTypes = {
DonKihot: {
name: "Дон Кихот",
chance: 10, // 10%
explanation:
"Интуитивно-логический экстраверт, склонен к исследованию новых идей и подходов, сочетая интуицию возможностей и структурную логику.",
},
Duma: {
name: "Дюма",
chance: 8, // 8%
explanation:
"Сенсорно-этический интроверт, мягкий, ориентированный на гармонию и комфорт, использует сенсорику ощущений и этику эмоций.",
},
Gyugo: {
name: "Гюго",
chance: 9, // 9%
explanation:
"Этико-сенсорный экстраверт, энергичный, выражающий эмоции, склонен к мотивации и поддержке, управляет этикой эмоций и сенсорикой ощущений.",
},
Robespier: {
name: "Робеспьер",
chance: 7, // 7%
explanation:
"Логико-интуитивный интроверт, рационален, склонен к анализу и систематизации, использует структурную логику и интуицию возможностей.",
},
Zhukov: {
name: "Жуков",
chance: 10, // 10%
explanation:
"Сенсорно-логический экстраверт, решителен, настойчив, лидер по натуре, использует сенсорику силы и деловую логику.",
},
Yesenin: {
name: "Есенин",
chance: 8, // 8%
explanation:
"Интуитивно-этический интроверт, мечтателен, склонен к глубоким переживаниям, управляет интуицией времени и этикой эмоций.",
},
Napoleon: {
name: "Наполеон",
chance: 10, // 10%
explanation:
"Сенсорно-этический экстраверт, харизматичен, уверен в себе, лидер, использует сенсорику силы и этику отношений.",
},
Balzac: {
name: "Бальзак",
chance: 6, // 6%
explanation:
"Интуитивно-логический интроверт, пессимистичен, видит риски и угрозы, использует интуицию времени и структурную логику.",
},
JackLondon: {
name: "Джек Лондон",
chance: 10, // 10%
explanation:
"Логико-интуитивный экстраверт, ориентирован на достижение целей, новые идеи и эффективность.",
},
Draizer: {
name: "Драйзер",
chance: 7, // 7%
explanation:
"Этико-сенсорный интроверт, принципиален, привержен моральным стандартам, использует этику отношений и сенсорику силы.",
},
Shtirlic: {
name: "Штирлиц",
chance: 9, // 9%
explanation:
"Логико-сенсорный экстраверт, логичен, ориентирован на достижения, использует структурную логику и сенсорику силы.",
},
Geksli: {
name: "Гексли",
chance: 8, // 8%
explanation:
"Интуитивно-этический экстраверт, жизнерадостен, легко находит общий язык, использует интуицию возможностей и этику эмоций.",
},
Gaben: {
name: "Габен",
chance: 10, // 10%
explanation:
"Сенсорно-логический интроверт, спокойный, ценит комфорт, управляет сенсорикой ощущений и деловой логикой.",
},
MaximGorkiy: {
name: "Максим Горький",
chance: 8, // 8%
explanation:
"Логико-сенсорный интроверт, методичен, привержен порядку, использует структурную логику и сенсорику силы.",
},
Hamlet: {
name: "Гамлет",
chance: 9, // 9%
explanation:
"Этико-интуитивный экстраверт, склонен к драматичности, использует этику эмоций и интуицию времени.",
},
Dostoevskiy: {
name: "Достоевский",
chance: 8, // 8%
explanation:
"Этико-интуитивный интроверт, чувствителен, склонен к самопожертвованию, использует этику отношений и интуицию возможностей.",
},
};
let archetypesAccordingToCarlJung = {
SimpleMinded: {
name: "Простодушный",
chance: 7, // 7%
explanation:
"Символизирует невинность и открытость, избегает конфликтов, ищет безопасности.",
},
GoodFellow: {
name: "Славный малый",
chance: 8, // 8%
explanation:
"Добрый, отзывчивый, старается помогать и поддерживать других.",
},
Warrior: {
name: "Воин",
chance: 10, // 10%
explanation:
"Смелый и решительный, стремится преодолевать трудности и защищать слабых.",
},
Caregiver: {
name: "Опекун",
chance: 9, // 9%
explanation:
"Заботливый и ответственный, стремится защищать и заботиться о других.",
},
Seeker: {
name: "Искатель",
chance: 10, // 10%
explanation:
"Любознательный и независимый, стремится к новым знаниям и открытиям.",
},
Lover: {
name: "Любовник",
chance: 8, // 8%
explanation:
"Эмоциональный и страстный, стремится к гармонии и близости с другими.",
},
Rebel: {
name: "Бунтарь",
chance: 7, // 7%
explanation:
"Протестует против устоявшихся норм, стремится к переменам и свободе.",
},
Creator: {
name: "Творец",
chance: 9, // 9%
explanation:
"Ориентирован на создание и креативность, стремится создавать новое.",
},
Ruler: {
name: "Правитель",
chance: 10, // 10%
explanation:
"Стремится к порядку и контролю, управляет другими и поддерживает стабильность.",
},
Magician: {
name: "Маг",
chance: 6, // 6%
explanation:
"Ищет скрытые знания и трансформацию, стремится изменить реальность.",
},
Sage: {
name: "Мудрец",
chance: 9, // 9%
explanation: "Стремится к знаниям и мудрости, анализирует и ищет истину.",
},
Jester: {
name: "Шут",
chance: 7, // 7%
explanation:
"Игривый и остроумный, стремится разрушить шаблоны и принести радость.",
},
};
// Функция для генерации случайной комбинации типа и архетипа
function getPsychosocialTypeAndArchetype() {
// Функция для вычисления суммарного шанса в объекте
function getTotalChance(obj) {
return Object.values(obj).reduce((sum, item) => sum + item.chance, 0);
}
// Функция для случайного выбора элемента на основе нормализованных шансов
function getRandomElement(obj, totalChance) {
const rand = Math.random() * totalChance;
let cumulativeChance = 0;
for (const key in obj) {
cumulativeChance += obj[key].chance;
if (rand < cumulativeChance) {
return obj[key];
}
}
}
// Суммарные шансы для каждого набора
const totalTemperamentChance = getTotalChance(temperaments);
const totalPsychosocialChance = getTotalChance(psychosocialTypes);
const totalArchetypeChance = getTotalChance(archetypesAccordingToCarlJung);
// Выбор случайного типа, архетипа и темперамента
const temperament = getRandomElement(temperaments, totalTemperamentChance);
const psychosocialType = getRandomElement(psychosocialTypes, totalPsychosocialChance);
const archetype = getRandomElement(archetypesAccordingToCarlJung, totalArchetypeChance);
return {
temperament: temperament,
psychosocialType: psychosocialType,
archetype: archetype,
};
}
dv.psychoTypes = {
getPsychosocialTypeAndArchetype,
};