기본 콘텐츠로 건너뛰기

추천 가젯

리눅스 홈서버 알림용 텔레그램 봇(Telegram Bot) 연동 및 쉘 스크립트 구축 가이드

개인 홈서버를 운영하다 보면 백업 완료 여부나 시스템 에러 같은 단방향 알림을 스마트폰으로 빠르게 받아보고 싶어집니다. 외부 메일 서버나 복잡한 SMTP 설정을 거치지 않고, 가장 확실하고 가볍게 쓸 수 있는 텔레그램 봇을 이용한 홈서버 알림 구축 방법 을 정리합니다. 1단계: 텔레그램 봇 생성하기 (BotFather) 텔레그램 앱을 켜고 상단 검색창에 BotFather 를 검색하여 공식 봇(파란색 체크마크 확인)을 엽니다. 대화창에 아래 명령어를 입력하여 새로운 봇을 만듭니다. Plaintext /newbot 봇의 이름(Name)을 입력합니다. (예: My Home Server Bot ) 봇의 아이디(Username)를 입력합니다. (반드시 영문이며 끝에 bot 또는 _bot 으로 끝나야 합니다. 예: my_home_backup_bot ) 생성이 완료되면 HTTP API 토큰(Token)이 발급됩니다. 이 토큰을 안전하게 보관합니다. 2단계: 내 Chat ID(채팅방 고유 번호) 확인하기 텔레그램은 보안상 사용자가 먼저 봇에게 말을 걸어야 메시지를 받을 수 있으며, 봇이 나에게 메시지를 보내려면 고유 Chat ID 가 필요합니다. 텔레그램 검색창에 userinfobot 을 검색하여 들어갑니다. 하단의 [시작하기] 버튼을 누르면 내 계정의 정보와 함께 Id (숫자) 값을 알려줍니다. 이 숫자를 복사해 둡니다. [중요] 1단계에서 만든 내 봇의 아이디(예: @my_home_backup_bot )를 검색해서 대화창을 열고, [시작] 버튼을 누르거나 아무 메시지나 먼저 한 번 전송해 둡니다. 3단계: 리눅스 쉘 스크립트 작성 및 테스트 서버(터미널)에서 환경변수를 설정하고 curl 명령어를 통해 테스트 메시지를 보낼 수 있습니다. 특히 인자값이 없을 때를 대비해 기본값 처리를 해두면 유용합니다. 아래 내용을 포함하는 쉘 스크립트 파일(예: send_telegram.sh )을 작성합니다. Bash #!/bin/bash # 환경변수 설정 (실제 토큰과 C...

HOMM3 - Spell Fire Shield 데미지 계산식.

 

전투마법, 보조마법(버프)  - 
"불방패" (4)

16 스펠포인트를 사용하며, 1 Spell Power당 1라운드로 작동한다. 

Basic : 방어자가 받은 근접데미지의 20%의 데미지만큼, 공격자에게 불속성 마법데미지를 입힌다. 

Spell points 소모는 Basic 부터 12이다. 

Advanced : Basic과 같다. 다만 25%

Expert : Basic과 같다. 다만 30%


위에 적힌 부분이 원래 공개된 Fire Shield Spell의 효과이다. 

다만 적힌 부분만 가지고는 정확한 데미지를 산출할 수 없다. 그렇기에 풀어서 설명하고자 한다. 


이 글에서 이야기하고자 하는 부분은 바로방어자가 받은 근접데미지의 양을 어떻게 정하는지에 대한 이야기이다. 



HOMM3에서의 전투데미지는 다음과 같이 정해진다. 

유닛의 기본 데미지 능력치와 숫자로 정해지는 기본데미지에 공격력, 방어력, 공격술, 방어술과 같은 요인들에 의해서 조정이 되어 정해진다. 


먼저 기본데미지를 보자

한 스택의 유닛의 수가 10이하일 경우, 최저데미지에서-최고데미지까지 주사위를 유닛의 숫자만큼 돌려합해 기본데미지를 구한다. 

  10을 넘어설 때는 먼저 10번의 주사위를 굴린 후, 합한다. 그 후 (유닛수/10)을 곱하여 기본데미지를 구한다. 

그 이후 다음과 같은 공식을 적용한다. 

기본데미지 x (1 + I_1+I_2+I_3+I_4+...) x (1- R_1) x (1- R_2 -  R_3) x (1 - R_4) x (1- R_5)...

I_1과 R_1은 공격력 방어력에 의해 정해지며, 둘중에 하나만 적용이 된다. 

공격자와 방어자의 공방차가 0보다 클 때는, I_1값이 정해진다. 

I_1은 공방차x 0.05  (5%) 이다. 다른 조정수치가 없이, 공방차가 20이 나면 두배의 데미지를 입힐 수 있다.  최대 값은 3이다. (공방차 60 이상은 60과 동일)

그 반대인 방공차가 0보다 클 때는, R_1값이 정해진다. 

R_1은 방공차x0.025 (2.5%) 이다. 이 값도 다른 조정수치가 없을 때, 방공차 20이면 절반의 기본데미지를 입게 된다. 


그외 I_2 등등에 해당하는 값들은, 공격술, 궁술, 포술, 증오(50%), 행운, 반대속성정령(100%) ,데스블로우 등이 있다. 

그리고 R_2등등에 해당하는 값들은 방어술(R_3는 방어술특화{타자르 등}로 같이 묶임), 정신마법면역(정신의정령 공격에 50%), 모든마법면역(마법의정령 공격에 50%), 불행 등이다. 


여기서 불방패 마법에서 받는 근접데미지의 영역은 기본데미지에 공격자의 조정치까지이다. 

불방패 마법의 철학은 다음과 같다고 생각하면 된다. 니가 쎄게 때리려고하면 할 수록, 더 많은 반사데미지가 돌아가겠지만, 내가 잘나서 덜 입는 데미지에 의해서 손해는 보지 않겠다. 

상대방의 강점은 모두 돌려준다. 

나의 이점은 모두 살린다. 

라고 할 수 있다. 앞의 이 데미지만 가지고 결정되는 것은 또 아니다. 유닛 1기만 가지고 강한 유닛을 때려서 자폭하는 것을 막기 위해,  한가지 요건이 더 들어간다. 

만약, 맞아서 불방패 걸린 스택이 죽는 경우에는 [기본데미지x상대방이점] 을 대신해, 총 체력으로 바꾸어 이후 계산을 이어 간다. 


이제 방어자가 받은 데미지의 x%까지 해석이 끝났다. 이제 남은 것은 불속성 마법데미지이다. 

불속성이기 때문에 불오브의 효과를 받아 150%의 곱효과를 받을 수 있으며, 물과 얼음의 정령은

두배의 데미지를 입는다.(맞나?) 그리고 불면역 유닛은 면역이다. 

여기에 마법데미지이기 때문에, 마술효과를 받을 수 있으며, 골램은 데미지가 반감된다. 

모든마법면역은 작용하지 않느다. 


자 정리하면 다음과 같다. 

1. 불방패 걸린 유닛이 근접공격에 맞았을 때, 죽지 않는다면 기본데미지에 공격자 이점을 모두 곱한 데미지의 x%의 불속성마법 반격데미지를 입힌다. 

2. 만약 죽게되면, 총체력에 x%의 불속성마법 반격데미지를 입힌다. 

3. (버그) 만약, 불행에 의해서 죽어야하는데 죽지 않는 경우에는 2번을 적용한다. 이건, Hota팀에 버그리포팅을 해서 고치도록 해야한다. 



길게 썼지만 실제 게임에서 중요한건 다음과 같다. 

방어자가 잘 막는건, 불방패 데미지를 줄이지 않으므로 타자르를 사용하자. 

뒤에 1-R_1 어쩌고 저쩌고를 다 곱한 값이 불방패 데미지보다 작아지면, 내가 맞은 데미지보다 불방패 데미지가 더 크다. 이거 기분이 많이 나쁘다. 


오늘은 불방패에 대해 알아보았다. 

heroes3.thelazy.net에  불방패 데미지 부분을 내가 수정했는데, 위키가 통으로 날라가는 경우가 많아서 백업용으로 살려놔야겠다. 

댓글