Skip to content
봇관련다크 모드

d2jsp_xp2.3h - 스태틱 시전시, 거리 못맞추는 오류 수정 (수정)

조회 수
1,657
추천 수
0
등록일

소서 스태틱 공격 시, 보스 위치가 시전 범위 밖인데도 그대로 제자리에서 시전하는 문제를 해결한 것입니다.

'_dx' is not defined ... 등의 오류 메시지가 뜨는 증상을 위한 패치 이기도 합니다.


XP_include.d2l 에서

// Function by wurscht
function XP_CastStatic(target) {

....<중략>.....

 //이하 부터 함수 끝까지 수정

 // Set the range from target
 var _r = 3 + me.getSkill(42,0); // fix - TT (미확)

 //var _endstaticpos = new XP_Coord(me.x,me.y);

 for (n = 1; n <= XP_Static && target.hp >= _maxstatichp; n+=1) {

 var _tdist = XP_GetDist(me,target);
 var _itry = 1;
 while ((_tdist > _r) && (_itry <= 5)) {

 var _dx = me.x - target.x;
 var _dy = me.y - target.y;

 var _nx = me.x - Math.round((_dx * (_tdist - _r)) / _tdist); 
 var _ny = me.y - Math.round((_dy * (_tdist - _r)) / _tdist); 
 
 // Move to range
 commAttack.GotoDest(_nx,_ny);

 // Compute distance after move
 _tdist = XP_GetDist(me,target);
 _itry+=1;
 }
 DC_DPrint("Casting Static Field #" + n);
 DC_DoCast(42,0,target); // "Static Field"
 }

 while (me.getState(121)) { delay(10); }

 // Only return to start position if target isn't there
 //_tdist = XP_GetDist(me,target);
 //if (_tdist > 3) { commAttack.GotoDest(_endstaticpos.x,_endstaticpos.y); }

 if (XP_CheckUtil(target)) { return; }

} //end of function






#### 7/21
크리스탈소드님께 정보를 얻어 _r 구하는 공식 수정했습니다.

댓글 16
  • 댓글 #154586

    죄송한데요..초보라서 저렇게써주시면 이해가 잘안되요 ㅜㅜ XP_include.d2l <<--요화일을 수정해서 화일 자체를올려주세요... 위에 처럼 적어주시면....당췌 어케하는지 더 모르겟어요....용량두얼마안되자나요^^ 부탁합니다
  • 댓글 #154589

    초보라도 자세히정독하시면 쉽게 이해하실듯합니다만..최소한의 노력도 안하시는건가요..? 초보도 꾸준이 노력하시면 고수가 되실수있습니다. 초보라는 이름하에 노력도안하시고 자료만 얻으시려는거같아 안타깝네요.
  • 댓글 #154592

    이야..이런게 정말 필요한거죠 ㅎ 스태틱 안맞아서 그냥 스태틱 스킬 많이 올린 참담함^^
  • 댓글 #154595

    얌봇 오리지널 스태틱함수입니다.. function XP_CastStatic(target) { switch(me.diff){ case 0: _MaxStaticHP = 0; break; case 1: _MaxStaticHP = 43; break; case 2: _MaxStaticHP = 65; break; } if (!target || !DC_CheckSkill(42) || target.getStat(41) > 99 || target.hp < _MaxStaticHP) return; if ((XP_TimedFirst) && (_XP_TimedSpells.length > 0)) { DC_DPrint("XP_CastStatic() : XP_TimedFirst : Casting Timed #" + _XP_TimedSpells[_XP_CurrentTimed] + " on index " + _XP_CurrentTimed); if (_XP_TimedSpells[_XP_CurrentTimed]==56) { DC_DoCast(_XP_TimedSpells[_XP_CurrentTimed],0,target.x,target.y); // was XP_DropMeteor function. } else { DC_DoCast(_XP_TimedSpells[_XP_CurrentTimed],0,target.x,target.y); } _XP_CurrentTimed+=1; if (_XP_CurrentTimed == _XP_TimedSpells.length) { _XP_CurrentTimed = 0; } if (XP_CheckUtil(target)) { return; } } // Set the range from target var _r = 1.0 + 0.668 * me.getSkill(42,0); _XP_EndStaticPosition = commPather.FindClosestWalkable(new XP_Coord(me.x,me.y).x, new XP_Coord(me.x,me.y).y); // Compute delta-x and delta-y var _dx = me.x - target.x; var _dy = me.y - target.y; // Compute Distance to Target var _tDist = Math.floor(Math.sqrt(Math.abs((_dx * _dx) + (_dy * _dy)))); // Compare distance from target to the range var _iTry = 1; while ((_tDist > _r) && (_iTry <= 5)) { // Compute the x and y coordinates var _nx = me.x - Math.round((_dx * (_tDist - _r)) / _tDist); var _ny = me.y - Math.round((_dy * (_tDist - _r)) / _tDist); // Move to range DM_MoveTo(_nx,_ny); // Compute distance after move //if (target.classid == 242) { delay(450); } _dx = me.x - target.x; _dy = me.y - target.y; _tDist = Math.floor(Math.sqrt(Math.abs((_dx * _dx) + (_dy * _dy)))); _iTry++; } for (n = 1; n <= XP_Static && target.hp >= _MaxStaticHP; n+=1) { DC_DPrint("Casting Static Field # " + n); DC_DoCast(42,0,target); // "Static Field" } while (me.getState(121)!== 0) { delay(10); } //Only return to start position if target isn't there _dx = _XP_EndStaticPosition.x - target.x; _dy = _XP_EndStaticPosition.y - target.y; _tDist = Math.floor(Math.sqrt(Math.abs((_dx * _dx) + (_dy * _dy)))); if (_tDist > 3.0 && !(target && (target.classid==211 || target.classid==243 || target.classid==544 || target.classid==45))) { DM_MoveTo(_XP_EndStaticPosition.x,_XP_EndStaticPosition.y); } if (XP_CheckUtil(target)) { return; } }
  • 댓글 #154598

    xp것이 얌봇에서 훔쳐온 함수 같은데(xp가 거의 그렇지만), 얌봇쪽 함수도 약간 문제가 있습니다. // Set the range from target var _r = 1.0 + 0.668 * me.getSkill(42,0); 이부분도 잘못되어 있고, 거리측정해서 이동 후에는 보스 위치 검사없이 스태틱을 연사하기 때문에 미스가 발생 할 소지가 있습니다.
  • 댓글 #154601

    제가 쓰고 있는 것이랑은 조금 다르네요. 제 경우에는 약간 여유를 두어서 var _r = 1.0 + 1.0*me.getSkill(42,0)로 사용하고 있습니다.
  • 댓글 #154604

    아무튼 위함수에서 xp 원본의 황당한 점은 _dx, _dy가 누락되었다는 것입니다. 이런 소소한 실수가 아주 많아요 xp 스크립트는. 점점 얌봇을 쓰고 싶어지네요. :D
  • 댓글 #154607

    var _r = 1.0 + 0.668 * me.getSkill(42,0); 이부분은 보스랑의 거리를 추산하는 게 아니라, 자신의 스태틱 거리를 계산 하는 부분입니다.. 조금 잘못 이해하는 부분이 있어서 적어봅니다... 즉, 몹의 검사가 필요가 없죠... 몹의 검사는 아래부분에서 본격적으로 하자나요....
  • 댓글 #154610

    바다 / 네, _r은 스태틱 시전 범위죠. 엄밀히 하면 2.6 + 0.668*스태틱스킬레벨 입니다. 스태틱1렙이 3.3 , 스태틱11레벨이 10 이죠. 뭐, 원래 함수 저작자는 넉넉하게 마진을 설정하느라 +1.0 해준 것일 수도 있습니다. 제말은 얌봇의 for (n = 1; n <= XP_Static && target.hp >= _MaxStaticHP; n+=1) { DC_DPrint("Casting Static Field # " + n); DC_DoCast(42,0,target); // "Static Field" } 부분에서 보스위치 검사없이 무조건 스태틱을 연사 하므로, 그 사이 보스가 이동하게 되면 miss가 발생할수 있다는 겁니다. 실제로 메피 같은 경우는 친절하게 달려나와 반겨주는 경우가 빈번하기 때문에 애초에 계산한 거리는 무용이 될수 있습니다. 그래서 스태틱 매회마다 보스위치를 검사해서 시전범위내로 이동하는 걸로 수정한 겁니다.
  • 댓글 #154613

    그런데, 디아블로의 yard개념이 d2jsp 좌표체계에 그대로 대응되지 않는다면 제가 말한 _r구하는 공식은 잘못된 것이죠. 체감상은 그럭저럭 맞는 듯 하지만..
  • 댓글 #154616

    디아상의 1 yard = 1.5 (tile unit) 이라는 첩보를 크리스탈소드님께 받아왔습니다. 그럼 마진 잡아서 _r = 3 + me.getSkill(42,0); 로 해봐야겠네요.
  • 댓글 #154619

    일리는 있지만, 바알이나 메피 빼곤 별로 움직이는 몹을 못보았습니다... 대부분 접근전을 하는 관계로, 스태틱의 정확한 위치의 검사가 필요한지도 약간의 의문부호는 남습니다.. 하지만 좋은 정보입니다...
  • 댓글 #154622

    님 봇돌리는것좀 도와주십시오 제발 부탁드립니다.. ㅜㅜ.. 제가 전화 드리거나 .. 원격으로라도 좀해주십시오 ㅜㅜ 제폰번호 010 9764 0630 입니다 제발 좀 도와주십시오.. 연락좀 주십시오.. ㅜㅜ.. 보답은 꼭 해드립니다
권한이 없습니다.
다크 모드