Skip to content

팁 게시판

디아 XP.bot_Avenger 좀더 안전한 사냥을 위한 소스 수정팁 몇개..

분류 디아관련 조회 수 2,563 추천 수 3

 .여기 게시판을 훓어 보긴 했지만 제가 모든 게시물을 다 읽진 못했습니다. 해서 혹 제가 보지 못한 중복된 내용이거나 이후 버전에 관련해서 수정된게 있다면 리플이나 쪽지 주시거나, 운영자분이 그걸 아신다면 살짜기 지워주세요. 저도 중복내용 리플 달리면 지우겟습니다

 몇가지 좀더 안전한 앵벌? 을 위한 봇소스 수정 팁입니다.
 제가 돌려본게 파볼오브 소스하고 달려 활마라서 저 두 Class에 관한것만 알 수 있었습니다.
 D2JSP_1.1.4+XP.bot_Avenger.Ver4.0 용인데.. 아마 Final도 확인이 필요할것입니다.

1. 파볼오브소서인 경우 보스전이 아닌 필드 잡몹전에서 필요없는 스킬 난사 수정.
 필드 사냥에서 파볼난사를 하는데 이것이 대상이 죽어도 일정한 회수까지 계속 파볼 쏩니다.
 소서인 경우 아마 다른 기술이라도 Delay 없는 기술이면 마찬가지 일겁니다.
 마나가 무한일때 난사좀 하면 어떠랴만 문제는 그거 다 쏠때까지 시간을 잡아먹는것이고 더큰 문제는 그 시간에는 마을로 치킨 상황이 발생해도 치킨을 안하죠. 이것은 기본 5회로 지정되어 있는데 쏘는 동안 얻어맞거나 용병이 죽어서 치킨상황이 발생하면 재빨이 치킨해줘야 하는데 그렇게 안하고 다 쏩니다. 그동안에 주변몹들에게 다구리 당해서 넉백상태에 빠져 결국 다 쏘고도 치킨 못하고 죽거나 방나가는 치킨을 하는 좀 위험한 상황에 빠지는 경우가 많더군요. 이부분 수정입니다.
 
2. 1번과 같은 상황인데 이번엔 활마입니다. 활마에 관한 사항입니다만 소스 보니 자벨마도 같은 문제일겁니다.
 아마인 경우 사용 기술을 지정할때 '몇번 써라'라고 회수를 줄 수 있습니다. 제파일을 예를 들면
 // Bowazon skills
 XP_BowAttack.push(12); XP_BowNumber.push(1); // "Multiple Shot"
 XP_BowAttack.push(26); XP_BowNumber.push(3); // "Strafe"
 XP_BowAttack.push(6); XP_BowNumber.push(1); // "Magic Arrow"
 몹이 죽을때까지 처음 멀티 1번, 다음 스트레이프 3번, 그때까지도 안 죽으면 최종으로 매직에로우 한번 쏘는걸 되풀이 합니다. 요걸 좀더 수정해서 물리 이뮨이 아닌 경우 매직은 안쏘게 하는 방법을 연구해 볼까 합니다만 그건 차후문제고 어쨋건 저기서 스트 3번을 쏘게 되어 있습니다. 여기서 역시 1번과 마찬가지 상황이 발생합니다. 몹이 죽건말건 일단 스트를 시작하면 3번까지 다 쏘고는 끝냅니다. 스트는 딜레이가 좀있죠? 싸울때 시간 낭비가 많더군요. 물론 여기서 스트를 1번으로 지정하면 이문제는 없어지지만 그렇게 하면 멀티한번, 스트한번, 매직한번 요렇게 반복합니다. 주력이 스트인데 몹잡는게 무지 느려지죠. 당연히 주력인 스트는 많이 써야 하고 해서 이부분 수정입니다.
 
3. 소서 보스전 문제입니다. 
 파볼오브 소서인 경우 파이어이뮨과 콜드이뮨이 같이 붙어있는 보스를 만났을때(Eldritch,Shenk,Thresh등등) 주변에 잡몹이 없으면(강조하거니와 주변에 잡몹이 없으면 입니다.) 용병이 그 보스를 다 잡을때까지 Delay없는 루프에 빠져 PC CPU 점유율 다 잡아먹으면서 무지하게 느려집니다. 물론 치킨도 안합니다. 치킨하는 상황 체크도 안하거니와 CPU를 다 점유하고 있어서 LW 쓰레드에서 치킨 메세지 자체도 아마 못 날릴겁니다.
 이상황은 소스로 보아 다른 이뮨도 마찬가지 일겁니다. 캐릭이 두가지 엘리 스킬만 쓸 경우 그 두가지에 해당하는 이뮨을 가진 보스를 만났을때 같은 문제가 일어날겁니다. 이부분 수정입니다.
 


자 이제 소스 수정들어가 봅시다. 먼저 1번 문제부터 고치죠.
 scripts\libs\XP\Libs\XP_AreaClearing.d2l 파일을 불러올립니다.
 function XP_AttackMonsterSorceress(monster,range,x,y,attackSkills) 를 찻습니다. 원본은 316라인이군요. 이 함수를 고쳐야 하는데 그 아래 좀더 내려가서 354라인에 가면 원소스는 아래와 같습니다.

 for (var r = 0; r < XP_UntimedRepeat; r+=1) {

 DC_DPrint("XP_AttackMonsterSorceress() Casting UntimedSkill # " + _skill + " on index " + _XP_CurrentUntimed);
 DC_DoCast(_skill,hand,monster.x,monster.y);
 }

 요기서 for 루프가 문제입니다. 캐릭터 환경설정 파일의 XP_UntimedRepeat에 지정된 숫자 만큼 무조건 루프를 돕니다. 기본 5로 지정되어 있습니다. for 루프를 좀 수정해야 하죠. 제 소스입니다. 이렇게 변경하시기 바랍니다.

 // 2006년 5월 수정 deer
 for (var r = 0; !isDead(monster) && r < XP_UntimedRepeat; r+=1)
 {
 DC_DPrint("XP_AttackMonsterSorceress() Casting UntimedSkill # " + _skill + " on index " + _XP_CurrentUntimed);
 DC_DoCast(_skill,hand,monster.x,monster.y);
 if (_XP_MercDead || _XP_OutOfPots || _XP_Town) break; // // 2006년 5월 추가 deer
 
 }

 대상이 죽었는지 확인하는 isDead(monster)라는 함수를 for 루프 조건문에 쓰고 있는데 이건 제가 만들어 넣어서 원본 소스에는 없습니다. 그리고 루프 안에 if (_XP_MercDead || _XP_OutOfPots || _XP_Town) break; 라는 코드가 추가 되어 있습니다.
 isDead라는 함수를 만들어야 하는데 XP_AreaClearing.d2l 소스 맨 아래쪽에 다음과 같은 코드를 추가합니다.
 
 // victim이 죽은 상황인지 확인한다. 2006년 5월 추가 deer
 function isDead(victim)
 {
 if((victim.hp <= 0) || (victim.mode == 12) || (victim.mode == 0)) return true;
 return false;
 }

 이로서 상대가 죽거나, 난사중에 치킨상황이 발생하면 더이상 스킬을 쓰지 않습니다.


2번 아마 문제 수정입니다.
 같은 scripts\libs\XP\Libs\XP_AreaClearing.d2l 파일입니다.
 function XP_AttackMonsterAmazon(monster,range,x,y,attackSkills) 함수를 찻습니다. 아마존 필드 공격함수지요. 원본 194라인에 있습니다. 찻았으면 주욱 아래로 내려가 보면 Jav attacks과 Bow attacks 으로 나눠져 있습니다. Bow attacks을 예로 수정합니다. 제것이 활마라...
 원본 259라인을 보면 for (x = 1; x <= XP_BowNumber[y]; x+=1) 라고 되어 있는 for 루프가 있습니다. 이 루프를 고쳐야 합니다. 1번과 같이 isDead 함수를 만들고 for문안에 넣습니다.
 for (x = 1; !isDead(monster) && x <= XP_BowNumber[y] ; x+=1)
 그리고 마을로 치킨하는 코드가 대상이 이번 공격에 조금이라도 기스가 나야 실행됩니다. 이걸 밖으로 빼는게 좋겟지요?
 완전한 수정된 코드입니다. 자벨쪽은 전 손을 안댔는데 아마 같이 수정하면 될것입니다.
 // monster hp check 추가 2006년 5월 deer
 for (x = 1; !isDead(monster) && x <= XP_BowNumber[y] ; x+=1)
 {
 attempted = true;
 DC_DoCast(XP_BowAttack[y],hand,monster);
 XP_CheckAttacks();
 if (monster.hp < hpprev)
 {
 hpprev = monster.hp;
 attprev = _XP_AttackCompleted + 1;
 }
 // if문안의 코드를 밖으로 빼냄. 2006년 5월 deer
 // Go to town if one of the messages is received from LW
 if (_XP_MercDead || _XP_OutOfPots || _XP_Town) { XP_TownManager(); }
 }
 
 
3번 소서 보스전 수정입니다. 
 이번엔 scripts\libs\XP\Libs\XP_Include.d2l 파일을 에디터로 불러올립니다.
 원본 2155라인에 보면 function XP_SorcBossAttack(target) 이 있는데 이 함수 안을 수정해야 합니다.
 원본 2245라인에 DC_DoDel(100); 이라는 코드가 있는데 요것이 잠시 쉬는 코드인데 2225라인의 조건문 안에 있습니다.
 이 조건문은 if (!_XP_haveUntimed && !_XP_haveTimed && (_XP_UseTeleOnImmune && XP_ClearPosition(30,target))) 인데 이 조건문을 얼핏 보면 이뮨때문에 쓸 기술이 전혀 없고 XP_ClearPosition(30,target)으로 인해 대상 보스 주변에 잡몹이 있으면 대상에게 텔키를 쓰게 되어 있습니다.
 이부분은 외 이렇게 했는지 제가 잘 이해를 못하고 있습니다. 하여튼 반대가 되어야 하지 않을까요. 주변에 잡몹이 없어야 대상에게 텔키를 쓰게... 이거보고 알았는데 텔키도 애교 데미지가 있더군요. XP_ClearPosition 앞에 !을 붙여줍니다. 이것은 !를 붙여야 하는건지 빼야 하는건지 잘 모르겟습니다. 하여튼 전 붙여서 씁니다.
 (_XP_UseTeleOnImmune && !XP_ClearPosition(30,target))

 그리고 원본 소스 2245라인의 DC_DoDel(100); 를 주석처리 하고 이것을 조건문 밖으로 빼냅니다. 위에처럼 고쳤다 하더라도 이 소스의 위쪽에 있는 var _XP_UseTeleOnImmune=true를 false로 고치면(대상에게 텔키를 안쓰게 하면) 여전히 Delay없는 루프에 빠져들고 XP_CheckUtil(target)의 여러가지 피하기등의 조건을 실행 안합니다. 원본 2245라인을 다음과 같이 고치고 추가합니다.
 원본 소스.
 }

 // Increase the counter
 XP_CheckAttacks();

 수정된 소스.
 } else { // 2006년 5월 수정 deer (else 구문 추가함.)
 if (XP_CheckUtil(target)) { return; }
 }

DC_DoDel(100); // 2006년 5월 위에서 이동함 deer

 // Increase the counter
 XP_CheckAttacks();
 
 DC_DoDel(100)이 밖으로 빠져 나왔고.. else 구문이 추가 되었습니다만 이부분은 상황에 따라서 else을 안써야 할지도 모릅니다. 각자 돌아가는데 문제가 있으면 else 구문은 빼버려야 합니다. 그리고 XP_CheckUtil 함수도 조금 문제가 있던데 함수안의 여러 조건문 안에서만 return 문이 있습니다. 그 조건중 하나라도 충족시키지 못하면 값을 돌려주지 않습니다. 상황에 따라서 봇이 정지하는 일이 생길지도 모르지요. 아직 저부분 문제는 보지를 못해서 그냥 놔두고 있습니다. 어쨋건 잠재중인 버그입니다.
 하긴.. d2jsp 가 조건문 안에선 아예 에러 체크를 안하는듯 하던데.. 구버전 봇소스 버그잡다가 봤는데 LW이던가? 조건문안에 예를 들면 if (XP_CheckUtil()) 처럼 함수 호출 비교문을 if (XP_CheckUtil) 이렇게 함수명 뒤에 괄호()를 안해줬는데도 예외를 일으키지 않고 돌아가더만요. 물론 찻아보니 같은 이름의 변수도 없었구요. 물론 이 스크립터 코어에서는 함수와 같은이름의 변수가 동시에 존재해도 되는지는 모르겟지만 여하튼 ()가 없어서 조건은 무조건 false로 처리되는 버그였습니다.
 이거 고쳐서 쓰다가 봇 버전 바꿔서 보니 그 버전에선 제대로 되어 있었습니다. 그래서 어딘지 잘 기억이 안남.

 하여튼 이 3번 상황은 각자 상황에 따라 수정방법이 바뀌어야 할지 모릅니다. 제 오브 파볼 소서는 이렇게 해 놓으니 잘 돌아가더군요.

 여기까지 수정 끝입니다. 수정후 봇의 상황이 어떻게 바뀔지 모르므로 만약 이상이 있으면 원래대로 돌려주시구요. 그때 저에게 책임을 지우진 말아주세요. 저도 일단 문제가 있어서 고쳐 쓰는 것이고 제 상황이 아닌 다른상황에선 저도 테스트 해보진 못했습니다. 그리고 고친 파일 두개 자료실에 올려 드렸으면 좋겟는데...
 제 소스는 이 문제 이외 싸우다 화살이나 자벨 던질 회수 떨어지면 타운으로 가서 자동충전, 통 걷어차는거 기타 등등 고친게 많아 제소스론 몇가지 파일을 추가 하지 않은 이상 딴분들은 쓰지 못합니다. 그래서 자료실에 못올리네요.
 관련 파일까지 자료실에 같이 올리면 되지 않느냐 하실분도 계시지만.. 전에 자료실에 제가 사용하는 파일을 한번 올렸는데.... Reject 되었습니다. 등록은 했는데 나타나지는 않더군요.
 예를 들면 isDead 함수의 실제 제 소스입니다.
 function isDead(victim)
 {
 if((victim.hp <= 0) || (victim.mode == c_UnitMode_NPC_Death) || (victim.mode == c_UnitMode_NPC_Dead)) return true;
 return false;
 }
 보시다시피 상수 0,12를 어떤 내용인지 좀더 알아보기 쉽게 const 상수 변수 c_UnitMode_NPC_Dead등으로 바꿔 넣어 놨습니다.
 c_UnitMode_NPC_Dead 이 상수를 정의해 놓은 파일을 자료실에 올렸드랬는데.. 그게 안올라오더군요.
 제가 소스속에 숫자 상수가 박혀 있는것을 싫어해서 보이는 족족 수정해 놔서.. 저뿐만 아니라 경력 프로그래머 입사지원자는 직접 작성한 소스 제출을 요구할 경우 그 소스안에 필요 없는 숫자 상수가 박혀있으면 감점 대상인걸로 알고 있습니다. 저역시 그런 경우 감점합니다. 뭐 여기 봇소스야 꼭 전문가만 만든게 아니고 또 다른 이유가 있을지 모르니 제가 딴지걸 일이 아니지요.

 여하튼 이런저런 이유로 제 소스는 직접 쓰지 못합니다. 따라서 직접 고쳐 쓸 자신 있는분만 고쳐 쓰세요.

 내용에 문법도 틀리고 띄어쓰기도 많이 틀렸을것인데 그부분은 용서를 바라구요. 내용중에 틀린 부분있으면 말씀해주세요. 같이 더불어 살아가는게...
 
 
댓글26
  • aa[A1L] 2006.05.23 18:01
    프로그래밍에 관한 견문이 넓으신가 보군요 저도 프로그래밍을 배우고는 있지만.. 으음. 대단하시네요.
  • 깨끗한손[A1L] 2006.05.23 20:14
    오홋 ㅛ.ㅛ 멋지십니다.. ㅋㅋ 우리 프로그램머 길드 만들어요. ^^ 보스전 텔키 문제는 아마 , 넉백이 안되는 보스들 때문에 용병이 보스를 잡는동안 잔몹을 멀리 보내려고 할 의도인듯 한데요. 용병이 보스만 잡고 소서는 Position만 clear 하고 ^^ ps. 버그문제는 자바스크립트 엔진 자체가 그렇게 동작해서 입니다. 변수나 함수나 동일하게 이름으로만 처리가 됩니다 예를 들어 이벤트 처리할때 함수명을 변수처럼 넘깁니다. function gameMsg( m, c ) {} registerEvent( EVENT_GAMEMSG, gameMsg );
  • 슬픈사슴 2006.05.23 21:12
    ^^ 길드라.. 더 빠지고 싶지 않은데요. 하하.. 아 깨끗한 손님이 말씀하신 것은 함수포인터 개념이구요. 그거야 당연히 그렇게 넘겨야죠. 실제 봇에서도 플러그인에 함수포인터 개념을 쓰더라구요. 저도 그렇게 많이 씁니다. 봇에 만약 적용한다면 BeforeAttack, AfterAttack 이라는 함수포인터 변수 만들어 그걸 연결한 다음에 공격전, 공격후, 아니면 이동전, 이동후등에 개별 체크함수호출 등등에.. 뭔짓인들 못하겟습니까... 봇에도 마우스이벤트나 키보드이벤트에 많이 쓰고 있더군요. 버튼다운, 버튼업, 키업, 키다운, 키프레스.. 기타등등.. 제가 말씀드린건 if안에서 함수호출 하면서 괄호를 빼먹는것을 말하는것입니다. 함수포인터 변수의 함수도 그 함수를 호출할때는 반드시 괄호를 써 줘야 하는거 어닌가요? 그리고 실제로 버그로 동작하던데요? 그리고 보스전 텔키 문제는 주변에 잔몹이 없으면 텔키 자체를 안쓰고.. 딜레이없는 루프에 들어간다는... ----- 쿨럭 ----
  • 깨끗한손[A1L] 2006.05.23 21:16
    넵. c같은 고급(?) 언어에서는 규칙을 지켜야 되는데요. 이놈의 자바스크립트엔진은 사용자 편의를 위한다고 그런건지.. 간단한 에러를 보정(?)해주네요. 일반 html에서도 같이 동작 합니다.^^ (제가 스크립트 노가다만 2년을 넘게 했었어요 ㅠ.ㅠ) 아래는 html 자바스크립트입니다. ------------------------------------------------- var testVar =""; function testFunc() { return true; } if (testVar == "" && testFunc ) { alert("test Function"); } ------------------------------------------------------------------- 그리고 메시지 처리에서는 자세히 찾아 보질 않아서 확실하지는 않는데요. fireEvent 처럼 강제 이벤트 발생시키는 것은 없는듯 하고요. 스크립트이벤트라는게 있네요. Syntax: script.send( String messageText ); registerEvent( EVENT_SCRIPTMSG, scriptMsg );
  • 슬픈사슴 2006.05.23 21:24
    예 그건 봤습니다. 헨들러 만들기 귀찮고.. 적당히 돌아가게만 하면 된다 싶어서.. 더이상 안팟습니다.
  • 슬픈사슴 2006.05.23 21:28
    디버깅 환경이 너무 안좋아서.. 더구나 베넷에서 직접 디버깅하면 렐따라는 무서운분이 계시구요. 천상 싱글에서 디버깅 해야 하는데 그럴려면 또 베넷과 비슷한 캐릭 에딧으로 만들어야 하고.. 덜죽고, 캐릭이 삽질 안하게만 돌아가면 만족합니다.
  • 깨끗한손[A1L] 2006.05.23 21:39
    엡 디버깅 환경이 너무 안좋죠. ^^ 그러고 보니 싱글에서만 놀다 보니. 창고 만료가 가까운듯. 하네요. ^^ 오랬만에 베넷에 가서 놀아 봐야 겟네요 ^^ 제봇 스크립트에도 위에꺼 반영도 해보고요. ^^
  • 앵벌소서♪ 2006.05.23 21:44
    슬픈사슴님 수정한 파일을 자료실에 올려주시면안될까요 ? ㅠ 너무 어렵다는 ㅠ
  • 깨끗한손[A1L] 2006.05.23 21:44
    혹시 자바스크립트 프로그램을 하시거나 공부하시는 분을 위해서~~ㅋㅋ 일반적인 객체지향프로그램들은 함수(메소드)는 오버로딩(Overloading:다중정의 메소드)할 수있어서 같은 이름의 함수가 매개변수나 리턴타입에 따라 여러번 정의가 될수있습니다. 하지만 자바스크립트에서는 함수(메소드)는 이름만 유일하며 매개변수,리턴타입은 있으면 좋고, 없어도 그만으로 처리합니다. 따라서 매개변수,리턴타입을 지정해주지 않으면 null 또는 false 또는 0 으로 처리를 자동으로해서 에러를 발생하지 않습니다 . 만약 같은 이름의 함수를 재정의 하게 된다면 제일 마지막에 정의된 함수가 사용됩니다.
  • 슬픈사슴 2006.05.23 21:54
    앵벌소서님 제파일은 올려봐야 못씁니다. 고친게 너무 많아서요. 깨끗한 손님 그럼 제가 언급한 XP_CheckUtil 리턴문 없는 문제는 버그가 아닌 false 로 처리 되겟군요. 파스칼이 그렇던가? 기억이 가물가물.. 전 자바스크립터는 전혀 모릅니다. 물론 OOP야.. C++, 자바에서 거의 십년 넘게 써왔지만요. 아 하나 물어볼께요. 봇이 자바스크립터 쓴다면 혹.. 상속이 가능합니까? 예를 들면 봇에 Unit 이라는 Object 형을 쓰던데.. 그걸 상속받아 속성추가, 함수 오버라이딩이이나 오버로딩 가능한가요?
  • 깨끗한손[A1L] 2006.05.23 22:00
    힛.. 저도 테스트 해보고 싶었던 내용인데요. me.overhead같은 함수가 한글이 지원이 안되서요.새로만들어 붙일수 있을까 하다 귀찮아서 ^^ 음 테스트 해보고 쪽지 보내드릴께요.
  • 양돌석 2006.05.23 23:17
    ㅇㅇ. 저도 공부 중인데.. 어떻게 분석해야 하는지 조언 좀 해주세요 ~ 함수 약자들이 무슨 역할을 하는지 어떻게 아셧는지요?
  • 양돌석 2006.05.24 09:21
    4.0얌봇에서는 /YAMB/classes/Yam-sorcAttack.d2l 250 ~ 260 라인대에 있습니다. 그리고 바로 텔레키네스 수정은 바로 아래 // Target is immune and user set using telekinesis on boss. 요 주석안에 있습니다. 얌봇버젼 쓰는 사람은 참고 하세욤 ^^
  • STN[A1L] 2006.05.24 14:54
    저도 3번 문제로 여러가지로 해보았는데 슬픈사슴님이 제안한 방법으로 하면 렉은 확실히 줄어 듭니다. 하지만 카운테스 잡을시에 소서가 아무것도 하지 않고 있어서 용병에 의존해서 잡습니다만. 보통의 경우에는 소서가 카운테스를 만나자 마자 가만히 있으면 용병이 알아서 잡지만(시간이 좀 길립니다) 운이 없을 경우 날파리(물리이뮨)가 있어서 카운테스를 죽이는게 거의 불가능합니다. 렉이 없이 카운테스 주변애들 먼저 잡고 카운테스를 잡는 방법은 없을지요? 유용한 정보 올려주셔서 감사합니다.
  • STN[A1L] 2006.05.24 14:54
    봇 캐릭은 파볼오브 소서 입니다.
  • STN[A1L] 2006.05.24 20:30
    성의 있는 답변 감사합니다. 저는 머서리엄/피트.카운테스만 잡기 때문에. !XP_ClearPosition(30,target) 를 조건문에 좌측으로 옮겨 놓으면 될거 같습니다 ^^ 엄청난 고수시군요. 감사합니다.
  • 슬픈사슴 2006.05.24 20:36
    if (!_XP_haveUntimed && !_XP_haveTimed && (_XP_UseTeleOnImmune && XP_ClearPosition(30,target))) 원본 소스입니다. 이대로라면 쌍이뮨 몹일때 주변잡몹이 있으면 청소합니다. 그리고 보스에게 텔키를 XP_UntimedRepeat만큼 씁니다. 이후, 주변 청소는 했지만 보스는 남아있는 상황일때 주변잡몹이 없으면 이조건문은 XP_ClearPosition(30,target) 로 인해 주변에 잡몹이 없으므로 false가 됩니다. 따라서 텔키도 안쓰고 그냥 서있지요. 만약 DC_DoDel(100); 이것을 조건문 밖으로 빼 내지 않았다면 이때부터 딜레이 없는 루프를 시작합니다. 그래서 제가 DC_DoDel(100); 이것을 밖으로 빼라고 한것이구요. 그런데 만약 !XP_ClearPosition(30,target) 조건문 안의 함수앞에 !을 붙여주면 캐릭의 행동이 어떻게 바뀌냐 하면. 우선 양이뮨몹을 만났을경우 캐릭이 주변청소를 합니다. 그리고 주변청소를 끝낸후는 !XP_ClearPosition(30,target)의 !에 의해 조건이 false이므로 보스에게 텔키를 안씁니다. 다시 루프로 돌아가지요. 이후 다시 이 조건문을 만나면 주변에 잡몹이 없으므로 !XP_ClearPosition(30,target)에 의해 결과가 true가 됩니다. 즉 그때부터 보스가 죽을때까지 계속 텔키를 씁니다. 그러나 조건문 안에 !XP_ClearPosition(30,target)의 함수 호출이 있으므로 보스에게 텔키를 쓰는중에 만약 주변에 잡몹이 꼬여들면 다시 주변 청소를 해주죠. 이렇게 행동하는 이유가 조건문안에서 조건 확인 때문에 XP_ClearPosition 함수 호출을 되풀이 하기 때문에 이렇게 돌아가는것입니다. 즉 주변에 잡몹이 있던 없던 루프상에선 매번 주변 잡몹을 확인하고 있으면 잡아주죠. 그럼 보스가 이뮨이 아닐때도 주변 잡몹체크 하는거 아니냐? 하겟지만 그것은 그렇지 않습니다. 조건문에 동일 레벨인 and 연산자만 썻기 때문에 연산자 우선순위 규칙에 따라 좌 우선순으로 조건을 체크하는 관계로 좌측의 조건이 하나라도 false가 되면 더이상 체크하지 않습니다. 즉 가장 오른쪽에 있는 함수 호출이 일어나지 않으므로 보스를 공격할 수 있을때는 주변청소를 안하죠. 이 연산자 우선순위규칙에 따라 만약 만약 보스를 잡는중에 주변에 잡몹이 꼬이면 그거 부터 정리하고 싶다? 그러면 !XP_ClearPosition(30,target) 이것을 조건문 가장 좌측에 옮겨놓으면 아마 그렇게 행동 할것입니다. 메피잡을때 주변에 꼬이는거 귀찮죠? 그거 꼬이면 그거부터 정리하려면 함수 호출을 조건문 맨 좌측으로 옮기시면 아마 주변 청소는 할것입니다만. 주변 청소중에도 보스를 공격할 수 있는 상황이므로 잡몹을 잡을지 안잡을지는 확률입니다. 몹 연결링크가 어떤 방법으로 되어 있냐에 따라 잡몹 공격 할 수도 있고 계속 보스를 공격할 수도 있습니다. 연결링크가 새로 나온 유닛은 앞에다 두면 잡몹부터 잡을거고, 뒤에다 두면 보스를 계속잡을거고.. 코어에서 어떻게 처리하냐에 따를겁니다. 그러나 이 방법은 비추입니다. 메피나 그렇지만 안다나 기타보스중에 주변잡몹 무시하고 보스만 얼른 잡아야 하는곳도 많고 또한 봇 옵션중에 주변잡몹 처리할건지 말건지 확인하는게 있는데 이게 무시됩니다. 그런 이유로 해서 함수호출이 조건문의 가장 오른쪽에 있는것으로 압니다. 차라리 스위치변수 하나를 줘서 매상황마다 체크하는게 좋지요. STIN 님의 카운테스 문제는 저도 그 문제를 겪었는데 저의 상황은 소서의 무기인 The oculus(신옵이라고 부르던가요?) 여기에 붙어있는 '공격받을시 25확률의 텔레포트' 때문이였습니다. 카운테스가 콜,파 쌍이뮨이 아닐때 즉 카운테스를 공격할 수 있는 상황이라 공격중에 이 텔레포트 떼문에 이동했을 경우 멍청하게 서 있는 경우가 있더군요. 그래서 조사해 보니 CheckUtil 에서 이런 상황을 체크하기는 하는데 교묘하게 이 체크를 벗어나는 경우가 있는것 같았습니다. 봇은 카운테스 공격할 수 있는 상황이라고 판단하고 계속 카운테스를 공격중이지만 실제론 공격이 일어나지 않은 상황... 디아 버그인듯 하던데 교묘한 위치에서 케릭은 몹에게선 타격을 받고 캐릭의 타격은 몹이 안받는 상황.. 양쪽 다 원거리 공격일때 그런 경우가 가끔 있더군요. 이 무기의 옵인 텔포 피하기가 약해 빠진 소서 생존성을 엄청나게 올려주므로 안 쓸수도 없고 해서.. 아예 복잡하게 CheckUtil을 고치느니 target.mode 를 체크해서 서있는 경우(target.mode == 1) 주변 청소하게 해놨습니다. 끝에서 확인하기 때문에 어쨋던 공격받았는데 서 있을 수는 없지 않을까 하는 생각인데... 이것 때문인지 아닌지는 몰라도 아직은 카운테스에게서 멍청히 그냥 서 있는 경우는 안보이네요. 그리고 STIN님 말씀하신걸로 보아 고수이신듯 하니 옵션 관계는 이야기 할 필요는 없을듯 하고.. 카운테스에서 고스트 우선 처리 하고 싶다면 하드코딩 방법밖에 없겟네요.
  • 언제나이룰까 2006.05.26 04:44
    도대체 어느 나라 말인지 모르겠네요 ㅎㅎ;; 머가 말씀 하는건 같은데 그쪽 방면은 잼병이라... 머라고 하는지 이해가 하나도 안간다는 크크... 하여튼 좋은 정보 같으니 고쳐 봐야 겠네요~
  • GAL[A2L] 2006.05.27 15:10
    컥...깨끗님과 함께..이런 댓글토론이 진행중이어꾼요..키키.. 저도 소서어택관련..이런저런..개조를 많이해서..바알런에서 써묵었죠..^^ 솔직히 말해서..Areaclearing 과..보스어택 include부분.. 문제있거나 틀린거또 마나유 ㅡ,.ㅡ;; 현재까지 많이 만진건 햄딘과 소서 드루부분인데..역시 바알런 원할해소를 위해..^^ 기본 공격말고도..결국엔 몬스터별 처리까지 손대게됬네요..^^ 흠..한가지 제 소수닌 무공 라소서였는데..몬스터별 어택도 좋았지만.. 수정하다 갠찮다 싶은거..한가지 말씀드리면..몬스터 어택시 스킬의 설정입니다..^^ 일단 라팅으로 걍 디지는 잡몹을 제외하고는..버닝이나..라내성이높고..피가많는 데쓰로드같은몹. 이런 몹에 한하여..일정체력이상..(64%) 경우에 스태틱 1~2회를 딱쓰고 그다음공격으로 가면.. 걍..잡몹수준으로 금방처리..소서의 경우 스태틱범의가 넓어 동시에 몹피야 죽죽 깍이고.. 그다음부터는 라내성이 있으면 라이트닝...아닌경우엔 체라.. 일반적인경우엔 라팅1회+체라2회 공격..이런식의 구현이.. 일단해놓으면 몹을 녹이는데 탁월한 효과를 내더 군요..^^ 현재 바알런 안돌고 소수닌 앵벌 가끔 투입하지만..역시 적용한 소스덕에..시간이 좀 걸리던 카운실 이나 라내성안다..등등 처리에 시간단축효과가..^^ CheckUtil 문제는 현재..제가..드루 대갈찍은후 어택을 일정 거리유지 어택으로 변화후..고민하는 문제군요..^^ (target.mode == 1) 주변청소라 하시면..안죽으면..일단 주변정리 상태로 넘기신다는 얘기신지? 몹을 골라죽이거나..어택상황에서 이동이 잦은 몹일수록..봇이 해당 몹을 놓치는 경우가 빈번해지더군요..^^ 쩝..이거이 몹1마리 따라가다..기둥에 걸리거나 놓지면..가끔 멍해져서리 ㅡ,.ㅡㅋ 고민중이에융.. 2006-05-27 15:08:19
  • 슬픈사슴 2006.05.27 20:50
    아.. target.mode == 1 은 카운테스 잡다가 텔포로 강제 이동했을때 카운테스가 쫏아 오거나 뭔가 다른 행동하지 거의 서있을 경우는 없다고 보거든요. 그래서 주변청소 하다보면 카운테스도 오겟지 하는 생각였습니다. 하하. 저역시 Areaclearing 에선 타겟을 싸우는넘 우선으로 잡습니다. 그리고 그것도 모자라 거 파이어 이뮨만나면 오브한번쓰고 딜레이 시간 있지요. 그시간 동안 멍하니 서있는거 못봐줘서.. 그시간에 다른몹 파볼로 쏘게 해 놨는데... 그게 쏘다가 자폭몹이나 그중에 죽어버리면 봇이 어디론가 무한루프로 들어가더군요. 일단은 제외해 놨습니다만.. 언젠간 찻아봐야지요.
  • 슬픈사슴 2006.05.27 21:04
    어디 봇 튜닝 게시판 없나요? 아니면 튜닝게시판 만드실 분이라도.. 아마 상당히 활발해질것 같다는 예감이....
  • 아하아아니아니 2006.05.28 04:51
    저기죄송한데 ㅠㅠ 봇이먼지좀 설명, 방법좀 알려주실분 ㅠㅠ
  • DiaJisoo 2006.05.29 19:02
    ^^ 대단하신 분들이네요. 흠...암튼 첫번째는 고쳤습니다...아직 확인은 못했고요. 두번째는 아마존이어서 그냥 패스 하렵니다. 제가 파볼 소서인 관계로... 세번째가 문제 입니다만, 위의 것대로 고치면 될지 계산좀 해봐야 겠네요. 배운거라고는 예전에 터보C 하고 베이직, 코볼 이런거라서... 윈도우로 넘어오면서 프로그래밍을 손을 뗀 후라서.. 너무 오랜만에 보니 영 생각보다 머릿속이 팍팍 돌지 않네요.. 좋은 내용 적어 주셔서 감사합니다.
  • 슬픈사슴 2006.05.29 21:35
    COBOL 배우신분이 여기에 계셨단 말입니까? 대단하신분입니다. 닉이 봇게시판에서 본 닉이시네요. 하하. 혹.. MOVE 로 먹고 사신적은 없으신지.. 코볼로 먹고 살면 MOVE로 먹고 산다고들 했지요. 반가워서 적어봤습니다.
  • 지우개 2006.06.09 15:15
    감사합니다..+_+ 잘쓸께요
  • 리움 2006.06.12 14:33
    좋은 글 잘 보고 갑니다. 나중에 많은 조언 부탁드리겠습니다.

팁 게시판

번호 분류 제목 글쓴이 날짜 조회
공지   게시판 푸시 알림 / 통합 앱 서비스 31 file 트디개발자 2023.09.20 830.2k
공지 디아관련 에테리얼 벅큐빙 표 219 eunnanoDiablo™ 2008.03.05 140.1k
공지 디아관련 케릭별 갑옷 착용 모습 325 수린[아빠] 2009.06.09 111.3k
공지 디아관련 디아블로 각종 팁과 정보 간추림 입니다 (_ _) 1547 조은아저씨 2010.05.24 211.6k
공지 봇관련 유니크 업글 표 366 file 카인 2013.11.02 412.8k
> 디아관련 디아 XP.bot_Avenger 좀더 안전한 사냥을 위한 소스 수정팁 몇개.. 26 슬픈사슴 2006.05.23 2.6k
800 봇관련 여러분들 이니에 빠진것 같아 올립니다... 15 goodgame 2006.05.23 3.3k
799 디아관련 [Asia1 래더] 시세표 수정본 이라네요. 24 몽키:D루피 2006.05.22 3.7k
798 디아관련 단군 맵 3.12 버젼 나왔습니다..^^ 22 WinnerS 2006.05.21 8.6k
797 아이템/앵벌 몬스터 레벨에 따른 레어 아이템의 옵션 제한 -오리지널 14 흰여울 2006.05.21 4.5k
796 디아관련 단군맵핵모드에 대해서 13 [다꾸샤]보스 2006.05.20 4.9k
795 봇관련 조폭넥 봇돌릴때 자꾸 클레이 골렘을 만든다는 분들. 6 소소초보 2006.05.20 2.0k
794 봇관련 씨디키 크랙할때. 9 ]묵이a[A1L 2006.05.20 3.8k
793 디아관련 슴딘으로 여친선물(불타는 하트)만들기...사랑해~ 20 네오베르테르 2006.05.19 4.2k
792 일반 두루네에서 채팅을.. 15 소프 2006.05.19 1.5k
791 봇관련 이럴 경우 렐따에 걸린다... ^^; 23 DiaJisoo 2006.05.17 3.5k
790 캐릭 육성 오리지날 케릭 키우실 때 참고하세요 22 박독대 2006.05.17 7.6k
789 디아관련 오토마우스 사용시 드림용병 아이템 바닥에 떨구기 방지해봅시다 25 [SM]채진[A1L] 2006.05.16 2.6k
788 디아관련 PC방에서 멀티 로더 해보자.. 50 a.k.a_Mephisto 2006.05.16 8.5k
787 아이템/앵벌 [Asia I 스탠 카오스큐브 시세] 5월15일 현재 시세 [펌] 6 구경꾼 2006.05.16 2.4k
786 일반 렐따시 렌카드 및 공유기 아이피 바꾸는 방법입니다. 7 루피짱 2006.05.15 4.7k
785 디아관련 디아블로가 깔려있지않은 피시방에서 디아를 하자(usb이용) 13 ddingury 2006.05.15 9.1k
784 디아관련 ping을 높히는 방법. 그냥 참조하세요 39 a.k.a_Mephisto 2006.05.15 3.4k
783 일반 아직도 모르는 분들이 많으신것 같아서...스샷 올리는 방법입니다. 24 [파랑새]탁이 2006.05.15 3.0k
782 봇관련 맥뎀주얼 이니 올립니다 11 [다꾸샤]보스 2006.05.15 2.3k