Auto_butcher=Very Full #메세지가 너무 많이 떴을 때 강제로 more 띄우지 않게 함 #이렇게 설정하고 지나간 메세지를 보고싶다면 컨트롤 p로 확인하는게 무조건 훨씬 더 좋고 편함 #다른 rc는 다 안쓰더라도 이것만은 진짜 무조건 쓰는게 좋음 무조건임 show_more = false #게임 시작부터 스킬 경험치 투자를 메뉴얼로 설정 #이 게임은 스킬 경험치 투자를 오토로 할 이유가 전혀 없음. 까먹고 오토로 올려서 망캐가 되지 않도록 해줌 default_manual_training = true #유니크 몬스터가 출현했을 때 more를 강제로 띄워줌 #탭질 신나게하다가 유니크 몹이 등장했을 때 게임을 멈춰서 제대로 집중해서 전투할 수 있게 해줌 #패치로 유니크몹이 추가되면 맞춰서 수정해줘야함 force_more_message += .*(Agnes|Aizul|Amaemon|Antaeus|Arachne|Asmodeus|Azrael|Bai suzhen|Blork the orc|Boris|Cerebov|Crazy Yiuf|Dispater|Dissolution|Donald|Dowan|Duvessa|Edmund|the Enchantress|Ereshkigal|Erica|Erolcha|Eustachio|Fannar|Frances|Frederick|Gastronok|Geryon|Gloorx Vloq|Grinder|Grum|Grunn|Harold|Ignacio|Ijyb|Ilsuiw|Jessica|Jorgrun|Jory|Joseph|Josephina|Josephine|Khufu|Kirke|the Lernaean hydra|Lodul|Lom Lobon|Louise|Maggie|Mara|Margery|Maurice|Menkaure|Mlioglotl|Mennas|Mnoleg|Murray|Nergalle|Natasha|Nessos|Nikola|Pan|Parghit|Pikel|Polyphemus|Prince Ribbit|Psyche|Purgy|Robin|Roxanne|the royal jelly|Rupert|Saint Roka|the Serpent of Hell|Sigmund|Snorg|Sojobo|Sonja|Terence|Tiamat|Urug|Vashnia|Vv|Xtahua|Zenata).*comes? into view #위험한 몬스터 출현 시 more를 강제로 띄워줌 #패치로 위험한 몬스터가 추가되면 맞춰서 수정해줘야함 force_more_message += ((giant|floating|shining) eye|eye of draining).*into view force_more_message += (moth of wrath|ghost moth|torpor snail).*into view force_more_message += (guardian serpent|draconian shifter|convoker).*into view force_more_message += (flayed ghost|royal mummy|mummy priest|fiend|tzitzimitl).*into view force_more_message += (tormentor|curse toe|curse skull).*into view force_more_message += (hellion|hell sentinel|deep elf sorcerer).*into view force_more_message += (deep elf high priest|scorcher).*into view force_more_message += (ancient lich|orb of fire|executioner|juggernaut|shrike).*into view force_more_message += (wretched star|lurking horror).*into view force_more_message += (neqoxec|cacodemon|doom hound).*into view force_more_message += 27-headed.* comes? into view force_more_message += (radroach|entropy weaver|meliai).*into view force_more_message += (salamander tyrant|ironbound frostheart).*into view force_more_message += (walking crystal tome|walking divine tome|walking earthen tome|walking frostbound tome).*into view #몬스터가 위험한 몬스터로 변신 시 more를 강제로 띄워줌 #패치로 위험한 몬스터가 추가되면 맞춰서 수정해줘야함 force_more_message += changes into.*((giant|floating|shining) eye|eye of draining) force_more_message += changes into.*(moth of wrath|ghost moth|torpor snail) force_more_message += changes into.*(guardian serpent|draconian shifter|convoker) force_more_message += changes into.*(flayed ghost|royal mummy|mummy priest|fiend|tzitzimitl) force_more_message += changes into.*(tormentor|curse toe|curse skull) force_more_message += changes into.*(hellion|hell sentinel|deep elf sorcerer) force_more_message += changes into.*(deep elf high priest|scorcher) force_more_message += changes into.*(ancient lich|orb of fire|executioner|juggernaut|shrike) force_more_message += changes into.*(wretched star|lurking horror) force_more_message += changes into.*(neqoxec|cacodemon|doom hound) force_more_message += changes into.*(radroach|entropy weaver|meliai) force_more_message += changes into.*(salamander tyrant|ironbound frostheart) force_more_message += changes into.*(walking crystal tome|walking divine tome|walking earthen tome|walking frostbound tome) #왜곡무기 장비한 몬스터, 춤추는 왜곡무기 출현 시 more를 띄워주고 화면이 번쩍이는 효과를 줌 #왜곡무기는 피격 시 어비스로 추방될 수 있기 때문에 가장 주의해야되는 공격 중 하나임. force_more_message += It is wielding.*of distortion force_more_message += She is wielding.*of distortion force_more_message += He is wielding.*of distortion force_more_message += wielding.* distortion.* comes? into view flash_screen_message += It is wielding.*of distortion flash_screen_message += She is wielding.*of distortion flash_screen_message += He is wielding.*of distortion flash_screen_message += wielding.* distortion.* comes? into view flash_screen_message += distortion.* comes? into view #폰트를 Consolas로 바꿈 #Consolas가 아마 제일 많이 쓰는 폰트인 듯? 이거 쓰면 대문자 I(아이)랑 소문자 l(엘) 구분 안돼서 소모품 날리는 개좆같은 상황 안 생김 #나는 크롬으로 웹죽하는데 가끔 폰트 적용이 안되는 버그가 생김. 그럴 때는 브라우저 껐다가 키면 다시 적용 되더라 tile_font_crt_family = Consolas tile_font_stat_family = Consolas tile_font_msg_family = Consolas tile_font_lbl_family = Consolas #그물, 쿠라레, 다투라 던지기 전 확인 #독다트 막 던지다가 그물 쿠라레 다투라 실수로 낭비하는거 방지 가능 autoinscribe += throwing net:!f autoinscribe += curare:!f autoinscribe += datura:!f #위험도를 노란색, 빨간색만 표시 #기본 설정은 아마 빨간색만 표시되는 걸로 아는데 노란색까지 표시해주는게 오카와루 듀얼 권능 쓸 때도 좋고 훨씬 낫다고 봄 tile_show_threat_levels = tough nasty #애니메이션 속도 빠르게(기본값=600) #플레이어나 몬스터가 행동할 때 애니메이션의 속도를 조절하는 건데 기본값 600은 너무 느려서 답답한 경우가 종종 있음 view_delay = 200 #자동줍기 관련 설정들 #내가 쓰는 자동줍기 설정임. 호불호가 조금 갈릴만한 부분이 있는데 그래도 기본 설정보다는 내 설정이 더 좋다고 생각함. #골드, 스크롤, 포션, 책, 장신구, 완드, 스태프, 잡동사니를 자동으로 주움 autopickup = $?!:"/|} #그물, 쿠라레 자동으로 주움 autopickup_exceptions += (atropa|dispersal) #전혀 쓸모 없는 아이템은 줍지 않도록 함 autopickup_exceptions ^= >useless_item #캐릭터 타일 변화 구문 tile_player_tile = tile: Mons_Orb_of_fire # macros macros += M 1 za macros += M 2 zb macros += M 3 zc macros += M 4 zd # autofight hp autofight_stop = 50 # zot, gem timer always_show_zot = true always_show_gems = true more_gem_info = true # show more show_more = false # spell, ability confirmation confirm_action += Cacophony, Blink, Confusing Touch confirm_action += Forge Lightning Spire, Forge Blazeheart Golem confirm_action += Sublimation of Blood confirm_action += Ivoke Invisibility confirm_action += Malign Gateway confirm_action += Death's Door confirm_action += Irradiate, Silence, Polar Vortex, Shatter # for Wiglaf the Gunnerdwarf cctt challenge confirm_action += Channel Magic, Forget Spell, Divine Exegesis # death's door almost end force more force_more_message += Your time is quickly running out! # death channel expiring force more force_more_message += Your unholy channel is weakening. # Rebind move to safe moving. and shift-move to original move bindkey = [h] CMD_SAFE_MOVE_LEFT bindkey = [j] CMD_SAFE_MOVE_DOWN bindkey = [k] CMD_SAFE_MOVE_UP bindkey = [l] CMD_SAFE_MOVE_RIGHT bindkey = [y] CMD_SAFE_MOVE_UP_LEFT bindkey = [u] CMD_SAFE_MOVE_UP_RIGHT bindkey = [b] CMD_SAFE_MOVE_DOWN_LEFT bindkey = [n] CMD_SAFE_MOVE_DOWN_RIGHT bindkey = [H] CMD_MOVE_LEFT bindkey = [J] CMD_MOVE_DOWN bindkey = [K] CMD_MOVE_UP bindkey = [L] CMD_MOVE_RIGHT bindkey = [Y] CMD_MOVE_UP_LEFT bindkey = [U] CMD_MOVE_UP_RIGHT bindkey = [B] CMD_MOVE_DOWN_LEFT bindkey = [N] CMD_MOVE_DOWN_RIGHT # display stats with gdr { function with_gdr() local armour_class = you.ac() local gdr = math.floor(16 * math.sqrt(math.sqrt(math.max(0, armour_class)))) crawl.formatted_mpr(string.format("GDR: %d%%", gdr)) crawl.sendkeys('@') end crawl.setopt("macros += M \@ ===with_gdr") } ## DDoor { local door = true function DDoorWarning() if you.status("in death's door (expiring)") and door then crawl.yesno("DDoor is almost expired! (Y or N to confirm.)", false, false, true, false) crawl.mpr("It will be ended in 5-10 turns...... ") door = false end if not you.status("in death's door (expiring)") then door = true end end } { local counter = you.turns() function DDoorCounter() if you.status("in death's door (expiring)") then crawl.mpr("Count "..you.turns() - counter.."......") end if not you.status("in death's door (expiring)") then counter = you.turns()+1 end end } { local speed = true function Slowed_Check() if speed and string.find(crawl.messages(8), "yourself slow down") and you.status("in death's door (expiring)") then crawl.yesno("Warning: You are slowed while DDoor 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 } { local scro = true function Blurry_Check() if scro and you.mutation("blurry vision") > 0 and you.status("in death's door (expiring)") and you.mp() < 8 then crawl.yesno("Warning: Your reading rate is slowed while standing at death's door! (Y or N to confirm.)", false, false, true, true) scro = false end if not scro and not you.status("in death's door (expiring)") then scro = true end end } ## display damage, healing, exhausted (sepcially serpent's lash) { ------- hp, mp, exhaust local last_hp = you.hp() local last_mp = you.mp() local last_turn = you.turns() local exhausted_start_turn = nil local EXHAUSTED_BASE_DURATION = 14 -- serpent's lash의 기본 exhaust function get_damage_color(damage, max_hp) local damage_percent = (damage / max_hp) * 100 if damage_percent >= 25 then -- 1/4 이상 데미지 return "lightmagenta" -- 매우 심각 elseif damage_percent >= 15 then -- 1/6.67 데미지 return "lightred" -- 매우 위험 elseif damage_percent >= 10 then -- 1/10 데미지 return "red" -- 위험 elseif damage_percent >= 5 then -- 1/20 데미지 return "yellow" -- 주의 elseif damage > 1 or damage_percent > 2 then -- 2% 초과 또는 2 이상의 모든 데미지 return "white" else return "lightgray" -- 1 데미지나 2% 이하만 회색으로 end end ------- monster warning -- 키 바인딩 설정: Ctrl+M 키를 사용 crawl.setopt("macros += M \\{^T} ===toggle_monster_warning") -- 몬스터 경고 기능 활성화 상태 monster_warning_enabled = false -- 몬스터 경고 색상 monster_warning_color = "lightred" -- 시야 내 몬스터 확인 및 경고 function check_visible_monsters() -- 경고 기능이 꺼져 있으면 아무것도 하지 않음 if not monster_warning_enabled then return end -- 시야 내 적대적 몬스터 확인 local hostile_monsters = {} local has_dangerous = false -- 플레이어 시야 범위 내에서만 탐색 (LOS_RADIUS = 7) local LOS_RADIUS = 7 for x = -LOS_RADIUS, LOS_RADIUS do for y = -LOS_RADIUS, LOS_RADIUS do -- 유효한 좌표인지 확인: you.see_cell 함수 사용 if you.see_cell(x, y) then -- pcall을 사용하여 안전하게 함수 호출 local success, mon = pcall(function() return monster.get_monster_at(x, y) end) if success and mon and mon:attitude() == 0 then -- 0은 적대적 몬스터 -- 식물 관련 몬스터인지 확인 local plant_patterns = {"plant", "bush", "briar patch", "ballistomycete", "fungus", "toadstool", "oklob", "vine", "withered"} local is_plant = false for _, pattern in ipairs(plant_patterns) do if string.find(string.lower(mon:name()), pattern) then is_plant = true break end end -- 식물이 아닌 경우에만 목록에 추가 if not is_plant then table.insert(hostile_monsters, mon:name()) -- 특별히 위험한 몬스터 확인 local danger_patterns = {"dragon", "lich", "ancient", "titan", "fiend", "balrug", "executioner", "pandemonium", "orb of fire"} for _, pattern in ipairs(danger_patterns) do if string.find(string.lower(mon:name()), pattern) then has_dangerous = true break end end end end end end end -- 적대적 몬스터가 있으면 경고 if #hostile_monsters > 0 then local msg = "경고: " if #hostile_monsters == 1 then msg = msg .. hostile_monsters[1] .. "이(가) 시야 내에 있습니다!" else msg = msg .. #hostile_monsters .. "마리의 몬스터가 시야 내에 있습니다!" end -- 특별히 위험한 몬스터가 있으면 강조 if has_dangerous then crawl.mpr(msg, "red") else crawl.mpr(msg, monster_warning_color) end crawl.more() end end -- 경고 기능 토글 함수 function toggle_monster_warning() monster_warning_enabled = not monster_warning_enabled if monster_warning_enabled then crawl.mpr("몬스터 경고 시스템이 켜졌습니다.", "green") else crawl.mpr("몬스터 경고 시스템이 꺼졌습니다.", "lightgrey") end end ------- ready function ready() local current_hp, max_hp = you.hp() local current_mp, max_mp = you.mp() -- Exhausted 상태 체크 if you.exhausted() then -- exhausted 시작 시점 기록 if not exhausted_start_turn then exhausted_start_turn = you.turns() end else -- exhausted가 끝나면 시작 시점 초기화 exhausted_start_turn = nil end -- 메시지 표시는 턴이 변경되었을 때만 if you.turns() ~= last_turn then -- 몬스터 경고 check_visible_monsters() -- HP 변화 체크 local hp_change = current_hp - last_hp if hp_change ~= 0 then local msg if hp_change < 0 then local damage = -hp_change local color = get_damage_color(damage, max_hp) msg = string.format("You took <%s>%d damage!", color, damage, color) else msg = string.format("You recovered %d HP!", hp_change) end crawl.formatted_mpr(msg) end -- MP 변화 체크 local mp_change = current_mp - last_mp if mp_change > 0 then local msg = string.format("You recovered %d MP!", mp_change) crawl.formatted_mpr(msg) elseif mp_change < 0 then local mp_consumed = -mp_change local msg = string.format("You consumed %d MP.", mp_consumed) crawl.formatted_mpr(msg) end -- Exhausted 상태 메시지 if exhausted_start_turn then local current_turn = you.turns() local elapsed_turns = current_turn - exhausted_start_turn + 1 -- +1을 해서 1부터 시작하도록 수정 local max_duration = EXHAUSTED_BASE_DURATION + 4 -- 최대 지속시간 (14 + 0~4) local remaining_turns = max_duration - elapsed_turns + 1 -- 남은 턴도 1부터 시작하도록 조정 -- 최소/최대 남은 시간 계산 local min_remaining = math.max(1, remaining_turns - 4) local max_remaining = math.max(1, remaining_turns) local remaining_str if min_remaining == max_remaining then remaining_str = string.format("%d remaining", min_remaining) else remaining_str = string.format("%d-%d remaining", min_remaining, max_remaining) end local msg = string.format("Exhausted: %d turns (%s)", elapsed_turns, remaining_str) crawl.formatted_mpr(msg) end end -- 현재 상태 저장 last_hp = current_hp last_mp = current_mp last_turn = you.turns() DDoorWarning() DDoorCounter() Slowed_Check() end } # Magical Staff Percentage { function calc_staff_info(school_level, evo_level, multiplier) -- multiplier 파라미터 추가, 기본값은 1.575 multiplier = multiplier or 1.575 local max_damage = multiplier * (school_level + evo_level/2) local activation = (evo_level + school_level/2) * 6.66 if activation > 100 then activation = 100 end return max_damage, activation end function staff_info_display() local evo = you.skill("Evocations") local output = "" -- Fire staff local fire = you.skill("Fire Magic") local fire_dmg, fire_chance = calc_staff_info(fire, evo) output = output .. string.format("[Fire] D: 0-%.1f, P: %.1f%% \n", fire_dmg, fire_chance) -- Cold staff local ice = you.skill("Ice Magic") local cold_dmg, cold_chance = calc_staff_info(ice, evo) output = output .. string.format("[Cold] D: 0-%.1f, P: %.1f%% \n", cold_dmg, cold_chance) -- Earth staff (1.5x 공식) local earth = you.skill("Earth Magic") local earth_dmg, earth_chance = calc_staff_info(earth, evo, 1.5) output = output .. string.format("[Earth] D: 0-%.1f, P: %.1f%% (33%% to flying)\n", earth_dmg, earth_chance) -- Air staff (1.25x 공식) local air = you.skill("Air Magic") local air_dmg, air_chance = calc_staff_info(air, evo, 1.25) output = output .. string.format("[Air] D: 0-%.1f, P: %.1f%% (Half AC)\n", air_dmg, air_chance) -- Alchemy staff local alchemy = you.skill("Alchemy") local poison_dmg, poison_chance = calc_staff_info(alchemy, evo) output = output .. string.format("[Alchemy] D: 0-%.1f, P: %.1f%% \n", poison_dmg, poison_chance) -- Death staff local necro = you.skill("Necromancy") local death_dmg, death_chance = calc_staff_info(necro, evo) output = output .. string.format("[Death] D: 0-%.1f, P: %.1f%% \n", death_dmg, death_chance) -- Conjuration staff (1.25x 공식) local conj = you.skill("Conjurations") local conj_dmg, conj_chance = calc_staff_info(conj, evo, 1.25) output = output .. string.format("[Conj] D: 0-%.1f, P: %.1f%% (Irresistible)", conj_dmg, conj_chance) crawl.formatted_mpr(output) end crawl.setopt("macros += M \\{F2} ===staff_info_display") } # cosplay