이 모듈에 대한 설명문서는 모듈:8values/설명문서에서 만들 수 있습니다
local p = {}
-- 8values 원본 이념 데이터셋
-- econ: 평등(100) <-> 시장(0)
-- dipl: 국제(100) <-> 국가(0) <-- 원본 스크립트의 'peace' 변수값 기준
-- govt: 자유(100) <-> 권위(0)
-- scty: 진보(100) <-> 전통(0) <-- 원본 스크립트의 'progress' 변수값 기준
local ideologies = {
{ name = "아나코공산주의", econ = 100, dipl = 50, govt = 100, scty = 90 },
{ name = "자유지상주의적 공산주의", econ = 100, dipl = 70, govt = 80, scty = 80 },
{ name = "트로츠키주의", econ = 100, dipl = 100, govt = 60, scty = 80 },
{ name = "마르크스주의", econ = 100, dipl = 70, govt = 40, scty = 80 },
{ name = "드 레온주의", econ = 100, dipl = 30, govt = 30, scty = 80 },
{ name = "레닌주의", econ = 100, dipl = 40, govt = 20, scty = 70 },
{ name = "스탈린주의/마오주의", econ = 100, dipl = 20, govt = 0, scty = 60 },
{ name = "종교공산주의", econ = 100, dipl = 50, govt = 30, scty = 30 },
{ name = "국가사회주의", econ = 80, dipl = 30, govt = 30, scty = 70 },
{ name = "신정주의적 사회주의", econ = 80, dipl = 50, govt = 30, scty = 20 },
{ name = "종교사회주의", econ = 80, dipl = 50, govt = 70, scty = 20 },
{ name = "민주사회주의", econ = 80, dipl = 50, govt = 50, scty = 80 },
{ name = "혁명적 사회주의", econ = 80, dipl = 20, govt = 50, scty = 70 },
{ name = "자유지상주의적 사회주의", econ = 80, dipl = 80, govt = 80, scty = 80 },
{ name = "아나코 생디칼리즘", econ = 80, dipl = 50, govt = 100, scty = 80 },
{ name = "좌익 대중주의", econ = 60, dipl = 40, govt = 30, scty = 70 },
{ name = "신정주의적 분배주의", econ = 60, dipl = 40, govt = 30, scty = 20 },
{ name = "분배주의", econ = 60, dipl = 50, govt = 50, scty = 20 },
{ name = "사회자유주의", econ = 60, dipl = 60, govt = 60, scty = 80 },
{ name = "종교민주주의", econ = 60, dipl = 60, govt = 50, scty = 30 },
{ name = "사회민주주의", econ = 60, dipl = 70, govt = 60, scty = 80 },
{ name = "진보주의", econ = 60, dipl = 80, govt = 60, scty = 100 },
{ name = "아나코 상호주의", econ = 60, dipl = 50, govt = 100, scty = 70 },
{ name = "국가주의적 전체주의", econ = 50, dipl = 20, govt = 0, scty = 50 },
{ name = "국제주의적 전체주의", econ = 50, dipl = 80, govt = 0, scty = 50 },
{ name = "기술관료주의", econ = 60, dipl = 60, govt = 20, scty = 70 },
{ name = "중도주의", econ = 50, dipl = 50, govt = 50, scty = 50 },
{ name = "자유주의", econ = 50, dipl = 60, govt = 60, scty = 60 },
{ name = "종교적 아나키즘", econ = 50, dipl = 50, govt = 100, scty = 20 },
{ name = "우익 대중주의", econ = 40, dipl = 30, govt = 30, scty = 30 },
{ name = "온건보수주의", econ = 40, dipl = 40, govt = 50, scty = 30 },
{ name = "반동주의", econ = 40, dipl = 40, govt = 40, scty = 10 },
{ name = "사회적 자유지상주의", econ = 60, dipl = 70, govt = 80, scty = 70 },
{ name = "자유지상주의", econ = 40, dipl = 60, govt = 80, scty = 60 },
{ name = "아나코 이기주의", econ = 40, dipl = 50, govt = 100, scty = 50 },
{ name = "나치즘", econ = 40, dipl = 0, govt = 0, scty = 5 },
{ name = "독재주의", econ = 50, dipl = 20, govt = 20, scty = 50 },
{ name = "파시즘", econ = 40, dipl = 20, govt = 20, scty = 20 },
{ name = "자본주의적 파시즘", econ = 20, dipl = 20, govt = 20, scty = 20 },
{ name = "보수주의", econ = 30, dipl = 40, govt = 40, scty = 20 },
{ name = "신자유주의", econ = 30, dipl = 30, govt = 50, scty = 60 },
{ name = "고전적 자유주의", econ = 30, dipl = 60, govt = 60, scty = 80 },
{ name = "권위주의적 자본주의", econ = 20, dipl = 30, govt = 20, scty = 40 },
{ name = "국가자본주의", econ = 20, dipl = 50, govt = 30, scty = 50 },
{ name = "신보수주의", econ = 20, dipl = 20, govt = 40, scty = 20 },
{ name = "근본주의", econ = 20, dipl = 30, govt = 30, scty = 5 },
{ name = "자유지상주의적 자본주의", econ = 20, dipl = 50, govt = 80, scty = 60 },
{ name = "자유시장 아나키즘", econ = 20, dipl = 50, govt = 100, scty = 50 },
{ name = "객관주의", econ = 10, dipl = 50, govt = 90, scty = 40 },
{ name = "전체주의적 자본주의", econ = 0, dipl = 30, govt = 0, scty = 50 },
{ name = "초자본주의", econ = 0, dipl = 40, govt = 50, scty = 50 },
{ name = "아나코 자본주의", econ = 0, dipl = 50, govt = 100, scty = 50 }
}
function p.getIdeology(frame)
local args = frame:getParent().args
-- 1. 틀 인자값 로드 (틀에서 100은 오른쪽 끝 Max를 뜻함)
local in_econ = tonumber(args['평등수치']) or 50
local in_dipl = tonumber(args['국가수치']) or 50 -- 100% 국수주의 지향
local in_govt = tonumber(args['자유수치']) or 50 -- 100% 자유 지향
local in_scty = tonumber(args['전통수치']) or 50 -- 100% 전통 지향
-- 2. 원본 JS 내부 변수(equality, peace, liberty, progress) 방향으로 완벽 매핑
-- 틀에서 '국가수치 100%' 이면 -> '국제주의(peace)'는 0%가 되어야 함.
-- 틀에서 '전통수치 100%' 이면 -> '진보주의(progress)'는 0%가 되어야 함.
local equality = in_econ
local peace = 100 - in_dipl
local liberty = in_govt
local progress = 100 - in_scty
local ideodist = math.huge
local ideology = "중도주의"
-- 3. 가중치 반영 거리 계산
for _, ideo in ipairs(ideologies) do
local dist = 0
dist = dist + math.pow(math.abs(ideo.econ - equality), 2)
dist = dist + math.pow(math.abs(ideo.govt - liberty), 2)
dist = dist + math.pow(math.abs(ideo.dipl - peace), 1.73856063)
dist = dist + math.pow(math.abs(ideo.scty - progress), 1.73856063)
if dist < ideodist then
ideodist = dist
ideology = ideo.name
end
end
return ideology
end
-- 라벨 텍스트 자동화용 함수 (방향 완벽 보정 버전)
function p.getLabel(frame)
local args = frame.args
local val = tonumber(args[1]) or 50
local axis = args[2] or "econ"
local arrays = {
econ = {'공산주의적', '사회주의적', '사회적', '중도적', '시장적', '자본주의적', '자유방임주의적'},
dipl = {'세계시민주의', '국제주의', '평화적', '균형적', '애국적', '민족주의적', '국수주의적'},
govt = {'아나키즘적', '자유지상주의적', '자유주의적', '온건적', '국가통제주의적', '권위주의적', '전체주의적'},
scty = {'혁명적', '매우 진보적', '진보적', '중도적', '전통적', '매우 전통적', '반동적'}
}
local ary = arrays[axis]
if not ary or val > 100 or val < 0 then return "" end
-- dipl과 scty는 원본 배열이 왼쪽(국제/진보)부터 시작하므로
-- 틀의 수치(오른쪽 기준)를 역산(100 - val)해서 라벨을 매칭해야 함
local target_val = val
if axis == "dipl" or axis == "scty" then
target_val = 100 - val
end
if target_val > 90 then return ary[1]
elseif target_val > 75 then return ary[2]
elseif target_val > 60 then return ary[3]
elseif target_val >= 40 then map = ary[4] return ary[4]
elseif target_val >= 25 then return ary[5]
elseif target_val >= 10 then return ary[6]
else return ary[7] end
end
return p