# ============================================================ # DCSS 0.34.x WebTiles/Nemelex용 RC # 목적: 생존성, 실수 방지, 위험 알림, 한국어 주석 가독성 강화 # 기반: 사용자의 기존 rc + 0.34 공식 옵션 + HDA 데미지 알림 Lua # ============================================================ # ============================================================ # 0. 시작 / 스킬 훈련 # ============================================================ # 새 캐릭터 시작 시 스킬을 자동 훈련이 아니라 수동 훈련으로 시작합니다. default_manual_training = true # ============================================================ # 1. 기본 UI / 메시지 표시 # ============================================================ # 일반 --More--는 끄고, 정말 중요한 상황만 force_more_message로 멈춥니다. show_more = false small_more = true # 체력/마나 경고 기준입니다. hp_warning = 50 mp_warning = 25 # 턴/시간, 이동 궤적, 메시지창 관련 표시입니다. show_game_time = true show_travel_trail = true msg_webtiles_height = 11 clear_messages = false msg_condense_repeats = true msg_condense_short = true # HP/MP 색상 구간입니다. hp_colour = 100:green, 75:yellow, 50:lightred, 25:red mp_colour = 100:cyan, 50:lightcyan, 25:yellow, 0:red # 0.34의 Zot/Gem/Doom/오염/미니던전 관련 정보를 항상 보기 쉽게 표시합니다. cloud_status = true always_show_doom_contam = true warn_contam_cost = true always_show_zot = true always_show_gems = true more_gem_info = true show_resist_percent = true show_timed_portals = true # WebTiles 액션 패널: 완드, 스크롤, 포션, 발동 아이템을 표시합니다. action_panel = /?!} action_panel_show_unidentified = true # 폰트 설정입니다. tile_font_crt_family = Consolas tile_font_stat_family = Consolas tile_font_msg_family = Consolas tile_font_lbl_family = Consolas # 타일에서 위험 몬스터를 강조합니다. # unusual은 왜곡/카오스/완드/쿠라레/그물 등 위험 아이템을 든 몹을 보이게 하므로 중요합니다. tile_show_threat_levels = tough nasty unusual tile_player_status_icons = slow, fragile, petr, mark, will/2, haste, weak, corr, might, brill, -move tile_show_demon_tier = true # 0.34 공식 언어 옵션입니다. 한국어 번역이 있는 항목은 한국어로 표시됩니다. # language = ko # 한국 서버에서 쓰는 옵션입니다. translation_language = ko # 메시지 색상입니다. channel.sound = lightgreen message_colour ^= lightcyan:You feel monstrous as your demonic heritage exerts itself. message_colour ^= yellow:You feel more experienced message_colour ^= yellow:You feel a bit stronger message_colour ^= yellow:You feel a bit smarter message_colour ^= yellow:You feel a bit more agile # ============================================================ # 2. 자동탐색 / 이동 / 자동전투 안전장치 # ============================================================ # 자동 이동이 깊은 물을 피하게 합니다. travel_avoid_terrain = deep water # 자동탐색 동작을 빠르고 건조하게 만듭니다. explore_wall_bias = 0 explore_stop -= greedy_visited_item_stack rest_delay = -1 travel_delay = -1 explore_delay = -1 # 해치/샤프트 사용 실수를 줄입니다. warn_hatches = true # 자동탐색이 닫힌 문을 자동으로 열지 않게 합니다. # 답답하면 avoid 대신 approach 또는 open으로 바꾸면 됩니다. travel_open_doors = avoid # Tab 자동전투 안전장치입니다. autofight_stop = 65 autofight_warning = 100 autofight_caught = true autofight_wait = false # 위험한 주문/능력은 사용 전 확인합니다. confirm_action += ^Blink$, Evoke Blink, Silence, Swiftness, Death's Door, Animate Dead, Borgnjor's Revivification, Rending Blade # 오캐스트 위험도가 큰 주문은 사용 전 확인합니다. fail_severity_to_confirm = 3 # 암기 중 몬스터가 감지/출현하면 중단합니다. interrupt_memorise = interrupt_memorise += sense_monster interrupt_memorise += monster # ============================================================ # 3. 자동 줍기 / 인스크립션 / 0.34 소모품 단축키 # ============================================================ # 자동 줍기 대상입니다. # $ 금화, ? 스크롤, ! 포션, : 책, " 장신구, / 완드, | 지팡이, } 발동템, % 탈리스만, 0 오브 autopickup = $?!:"/|}%0 autopickup_exceptions ^= >useless_item # 중요한 투척 아이템은 자동으로 줍습니다. autopickup_exceptions += Death's Door가 곧 끝납니다.") door = false end if not you.status("in death's door (expiring)") then door = true end end } { local counter = nil function DDoorCounter() if counter == nil then counter = you.turns() end if you.status("in death's door (expiring)") then crawl.mpr("Death's Door 만료 카운터: " .. (you.turns() - counter) .. "") else counter = you.turns() + 1 end end } { local speed = true function Slowed_Check() local recent_messages = crawl.messages(8) or "" if speed and string.find(recent_messages, "yourself slow down") and you.status("in death's door (expiring)") then crawl.yesno("Warning: You are slowed while Death's Door is running out! (Y or N to confirm.)", false, false, true, true) speed = false end if not speed and not you.status("in death's door (expiring)") then speed = true end end } # 10-c. HilariousDeathArtist식 데미지/MP 알림 보강판 { local previous_hp = 0 local previous_mp = 0 local previous_form = "" local was_berserk_last_turn = false local function is_hp_form(form) form = string.lower(form or "") return form:find("dragon") or form:find("statue") or form:find("tree") or form:find("ice") end function AnnounceDamage() local current_hp, max_hp = you.hp() local current_mp, max_mp = you.mp() local current_form = you.transform() or "" local you_are_berserk = you.berserk() local max_hp_increased = false local max_hp_decreased = false if current_form ~= previous_form then if is_hp_form(previous_form) and not is_hp_form(current_form) then max_hp_decreased = true elseif not is_hp_form(previous_form) and is_hp_form(current_form) then max_hp_increased = true end end if was_berserk_last_turn and not you_are_berserk then max_hp_decreased = true elseif you_are_berserk and not was_berserk_last_turn then max_hp_increased = true end if previous_hp > 0 then local hp_difference = previous_hp - current_hp local mp_difference = previous_mp - current_mp if max_hp_increased or max_hp_decreased then if max_hp_increased then crawl.mpr("현재 HP: " .. current_hp .. "/" .. max_hp .. "") else crawl.mpr("현재 HP: " .. current_hp .. "/" .. max_hp .. "") end else if current_hp < previous_hp then if current_hp <= (max_hp * 0.30) then crawl.mpr("" .. hp_difference .. " 피해를 받았습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") elseif current_hp <= (max_hp * 0.50) then crawl.mpr("" .. hp_difference .. " 피해를 받았습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") elseif current_hp <= (max_hp * 0.70) then crawl.mpr("" .. hp_difference .. " 피해를 받았습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") elseif current_hp <= (max_hp * 0.90) then crawl.mpr("" .. hp_difference .. " 피해를 받았습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") else crawl.mpr("" .. hp_difference .. " 피해를 받았습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") end if hp_difference > (max_hp * 0.20) then crawl.mpr("MASSIVE DAMAGE!!") end end if current_hp > previous_hp then local health_inturn = -hp_difference if health_inturn > 1 and current_hp ~= max_hp then if current_hp <= (max_hp * 0.30) then crawl.mpr("HP를 " .. health_inturn .. " 회복했습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") elseif current_hp <= (max_hp * 0.50) then crawl.mpr("HP를 " .. health_inturn .. " 회복했습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") elseif current_hp <= (max_hp * 0.70) then crawl.mpr("HP를 " .. health_inturn .. " 회복했습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") elseif current_hp <= (max_hp * 0.90) then crawl.mpr("HP를 " .. health_inturn .. " 회복했습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") else crawl.mpr("HP를 " .. health_inturn .. " 회복했습니다. 현재 HP: " .. current_hp .. "/" .. max_hp .. "") end end if current_hp == max_hp and previous_hp ~= max_hp then crawl.mpr("HP 완전 회복: " .. current_hp .. "") end end if current_mp > previous_mp then local mp_inturn = -mp_difference if mp_inturn > 1 and current_mp ~= max_mp then if current_mp < (max_mp * 0.25) then crawl.mpr("MP를 " .. mp_inturn .. " 회복했습니다. 현재 MP: " .. current_mp .. "/" .. max_mp .. "") elseif current_mp < (max_mp * 0.50) then crawl.mpr("MP를 " .. mp_inturn .. " 회복했습니다. 현재 MP: " .. current_mp .. "/" .. max_mp .. "") else crawl.mpr("MP를 " .. mp_inturn .. " 회복했습니다. 현재 MP: " .. current_mp .. "/" .. max_mp .. "") end end if current_mp == max_mp and previous_mp ~= max_mp then crawl.mpr("MP 완전 회복: " .. current_mp .. "") end end if current_mp < previous_mp then if current_mp <= (max_mp / 5) then crawl.mpr("현재 MP: " .. current_mp .. "/" .. max_mp .. "") elseif current_mp <= (max_mp / 2) then crawl.mpr("현재 MP: " .. current_mp .. "/" .. max_mp .. "") else crawl.mpr("현재 MP: " .. current_mp .. "/" .. max_mp .. "") end end end end previous_hp = current_hp previous_mp = current_mp previous_form = current_form was_berserk_last_turn = you_are_berserk end } # 10-d. 낮은 최대 HP별 동적 경고 Lua는 제거했습니다. # 이전 버전에서 Lua 테이블 닫는 괄호가 RC 블록 종료로 해석되어 # ThreatMore34가 정의되지 않고 매 턴 오류가 나는 문제가 있었습니다. # 현재는 monster_alert += -unusual / -uniques / -nasty가 안정적으로 핵심 위험몹을 잡습니다. # 10-e. AC / 구식 GDR 참고값 표시 # 현재 DCSS의 공식 방어 계산 자체를 대체하는 값은 아니고, 기존 rc에서 쓰던 참고용 표시입니다. { function with_gdr() local armour_class = you.ac() local gdr = math.floor(16 * math.sqrt(math.sqrt(math.max(0, armour_class)))) crawl.mpr(string.format("AC: %d | 구식 GDR 참고값: %d%%", armour_class, gdr)) crawl.sendkeys("@") end } # F1 키로 AC/GDR 참고값을 출력하고 @ 상태창을 엽니다. macros += M \{F1} ===with_gdr # ready()는 하나만 두어야 합니다. 새 Lua 기능을 추가할 때는 여기에 함수 호출만 추가하세요. { function ready() AnnounceDamage() DDoorWarning() DDoorCounter() Slowed_Check() crawlstart() end } # ============================================================ # 11. 노트 / 덤프 보조 # ============================================================ # HP가 20% 아래로 떨어지면 노트에 기록합니다. note_hp_percent = 20 # 중요한 아이템과 몬스터를 노트에 남깁니다. note_items += experience, acquirement, running, haste, resistance note_monsters += orb of fire, ancient lich, dread lich, royal mummy, curse toe, hellion, tormentor, juggernaut, caustic shrike, boundless tesseract # 지원 서버에서 방 이동 시 채팅 로그가 지워지는 것을 막습니다. disable_clear_chat = true