WOW 캐릭터 정보 검색 스크립트

정상작동을 위해서는 utf8.dll 파일이 필요하다.

utf8.zip

mIRC 6.34에서 정상작동함을 확인하였다.
전투정보실(kr.wowarmory.com)에서 검색하여 IRC상으로 데이터를 뿌려주는것을 기본으로 한다.
스크립트 중간에 변수지정부분에서 글자가 깨진것처럼 보이는것이 있는데,
이것은 UTF-8형식을 CP949 형태로 깨져서 표시되어 그런것이나, 사용상에는 전혀 문제가 없으니 그냥 복사해서 붙일 것.

필자는 WOW에 대해서는 일체 모르므로(플레이 해본적도 없다) 질문은 받지 않음.

; ————————————————————
; | Made by Xeriars                                                               |
; | (변경해서 쓰는건 니맘대로지만 이 부분은 지우지 말아주세요.)  |
; ————————————————————

on *:text:*:#: {
if ($1 == !와우) {
if (!$2) { msg $chan 사용법 : !와우 캐릭명 서버명 | halt }
if (!$3) { msg $chan 사용법 : !와우 캐릭명 서버명 | halt }
unset %wow.*
set %wow.chan $chan
set %wow.id $2
set %wow.serv $3
set %wow.count 1
sockclose wow
sockopen wow kr.wowarmory.com 80
halt
}
}
on *:input:*: {
if ($1 == !와우) {
if (!$2) { say 사용법 : !와우 캐릭명 서버명 | halt }
if (!$3) { say 사용법 : !와우 캐릭명 서버명 | halt }
unset %wow.*
set %wow.chan $chan
set %wow.id $2
set %wow.serv $3
set %wow.count 1
sockclose wow
sockopen wow kr.wowarmory.com 80
halt
}
}
on *:sockopen:wow*: {
sockwrite -nt $sockname GET /character-sheet.xml?r= $+ $urlencode($dll(utf8.dll,convertutf8,%wow.serv)) $+ &n= $+ $urlencode($dll(utf8.dll,convertutf8,%wow.id)) HTTP/1.1
sockwrite -nt $sockname User-Agent: Mozilla/4.0
sockwrite -nt $sockname Host: kr.wowarmory.com
sockwrite -nt $sockname Connection: Keep-Alive
sockwrite -nt $sockname Accept-Language: ko
sockwrite -nt $sockname $crlf
}
on *:sockread:wow: {
sockread %tmp
set %wow.word1 <a class=”charGuildName”
set %wow.word2 <a href=”character-talents.xml?r=
set %wow.word3 <div class=”bar-container staticTip” onmouseover=”setTipText(
set %wow.word4 <div class=”health-stat”>
set %wow.word5 留덈굹:&nbsp;&nbsp;
set %wow.word6 float: right; margin: 0 0px 0 0;”>
set %wow.word7 <span class=”charLvl”>
set %wow.word8 <a class=”achPointsLink” href=”/character-
set %wow.word9 <span>湲곕젰:&nbsp;&nbsp;
set %wow.word10 <div class=”runic-stat”>
set %wow.word11 <span>遺꾨끂:&nbsp;&nbsp;
set %wow.prefix <span class=”prefix”>
set %wow.error <str id=”armory.labels.nocharacter”>

if (%wow.error isin %tmp) {
msg %wow.chan 존재하지 않는 캐릭터이거나 캐릭터 이전, 유료 캐릭터명 변경 서비스 이용으로 인해 일시적으로 검색이 되지 않는 캐릭터입니다.
msg %wow.chan 캐릭터 이름을 바르게 입력하셨는지 확인하시기 바랍니다. 삭제된 캐릭터는 전투정보실에서 검색할 수 없습니다.
sockclose $sockname
unset %wow.*
halt
}
if (%wow.count == 8) { set %wow.result9 $remove($gettok(%tmp,3,59),</span>) | set %wow.count 1 }
if (%wow.count == 7) { inc %wow.count }
if (%wow.count == 6) { set %wow.result5 $remove($gettok(%tmp,3,59),</span>) | set %wow.count 1 }
if (%wow.count == 5) { inc %wow.count }
if (%wow.count == 4) { set %wow.result4 %wow.result4 $remove($gettok(%tmp,2,62),</b) | set %wow.count 1 }
if (%wow.count == 3) { set %wow.result3 %wow.result3 $remove(%tmp,<span>,</span>,<) | set %wow.count 1 }
if (%wow.count == 2) { inc %wow.count }
if (%wow.word1 isin %tmp) { set %wow.result1 $dll(utf8.dll,convertlocal,$remove($gettok(%tmp,2,62),</a)) }
if (%wow.word2 isin %tmp) { set %wow.result3 %wow.result3 $+ $chr(44) $remove($gettok(%tmp,2,62),</a) | set %wow.count 2 }
if (%wow.word3 isin %tmp) { set %wow.result4 %wow.result4 $+ $chr(44) $remove($gettok(%tmp,4,34),settiptext,’,$chr(40),$chr(41)) | set %wow.count 4 }
if (%wow.word4 isin %tmp) { set %wow.count 5 }
if (%wow.word5 isin %tmp) { set %wow.result6 $remove($gettok(%tmp,3,59),</span>) }
if (%wow.word6 isin %tmp) {
if (%wow.word8 isin %tmp) { set %wow.result7 $remove($gettok(%tmp,3,62),</span) }
else { set %wow.result7 $remove($gettok(%tmp,2,62),</span) }
set %wow.count 100
}
if (%wow.word7 isin %tmp) {
if (%wow.word1 isin %tmp) { set %wow.result2 $remove($replace($gettok(%tmp,4,62),&nbsp;,$chr(32)),</span) }
else { set %wow.result2 $replace($remove(%tmp,%wow.word7,</span>),&nbsp;,$chr(32)) }
}
if (%wow.word9 isin %tmp) { set %wow.result8 $remove($gettok(%tmp,3,59),</span>) }
if (%wow.word10 isin %tmp) { set %wow.count 7 }
if (%wow.word11 isin %tmp) { set %wow.result10 $remove($gettok(%tmp,3,59),</span>) }
if (%wow.prefix isin %tmp) { set %wow.pre $dll(utf8.dll,convertlocal,$remove(%tmp,%wow.prefix,</span>)) }

if (%wow.count == 100) {
set %wow.result2 $dll(utf8.dll,convertlocal,%wow.result2)
set %wow.result3 $dll(utf8.dll,convertlocal,%wow.result3)
set %wow.result4 $dll(utf8.dll,convertlocal,%wow.result4)
if (!%wow.result1) { set %wow.result1 없음 }
if (!%wow.result2) { set %wow.result2 정보없음 }
if (!%wow.result3) { set %wow.result3 없음 }
if (!%wow.result4) { set %wow.result4 없음 }
if (!%wow.result7) { set %wow.result7 없음 }
if (%wow.result8) { set %wow.sp %wow.result8 | set %wow.mana 기력 }
if (%wow.result6) { set %wow.sp %wow.result6 | set %wow.mana 마나 }
if (%wow.result9) { set %wow.sp %wow.result9 | set %wow.mana 룬 마력 }
if (%wow.result10) { set %wow.sp %wow.result10 | set %wow.mana 분노 }

msg %wow.chan 아이디 : %wow.pre %wow.id / 서버 : %wow.serv / 캐릭터 : %wow.result2 / 업적 : $comgen(%wow.result7) $+ 점 / 길드명 : %wow.result1
msg %wow.chan 생명력 : $comgen(%wow.result5) / %wow.mana : $comgen(%wow.sp) / 특성 전문화 : $mid(%wow.result3,3) / 전문 기술 : $mid(%wow.result4,3)
msg %wow.chan 원문주소 : http://kr.wowarmory.com/character-sheet.xml?r= $+ $urlencode($dll(utf8.dll,convertutf8,%wow.serv)) $+ &n= $+ $urlencode($dll(utf8.dll,convertutf8,%wow.id))
sockclose $sockname
unset %wow.*
halt
}
}
alias urlencode {
var %i = 0, %r
while (%i < $len($1-)) {
inc %i
%r = %r $+ $chr(37) $+ $base($asc($mid($1-,%i,1)),10,16,2)
}
return %r
}
alias comgen {
if ($1 == $chr(48)) { return $chr(48) | halt }
if (!$1) { return Error | halt }
if ($1 > 0) { var %sign 1 | var %subsnum $len($int($1)) }
if ($1 <= 0) { var %sign 2 | var %subsnum $calc($len($int($1)) – 1) }
var %rev.left = %subsnum
var %tmp = $reverse($int($1),$int($1))
var %point = $mid($calc($1 – $int($1)),3)
var %i 1
while (%i <= %subsnum) {
if ($len($mid(%tmp,%i,3)) == 3) {
var %rev.var = %rev.var $+ $mid(%tmp,%i,3) $+ $chr(44) | var %rev.left $calc(%rev.left – 3)
}
else { var %rev.var = %rev.var $+ $mid(%tmp,%i,%rev.left) }
var %i $calc(%i + 3)
}
if ($mid(%point,1,1) != $chr(46)) { var %point $chr(46) $+ %point }
if (!$mid(%point,2,1)) { var %point $chr(32) }
if ($mid($reverse(%rev.var,%rev.var),1,1) == $chr(44)) {
if (%sign == 1) { return $mid($reverse(%rev.var,%rev.var),2) $+ %point | halt }
if (%sign == 2) { return $chr(45) $+ $remove($mid($reverse(%rev.var,%rev.var),2),$chr(45)) $+ %point | halt }
}
if ($mid($reverse(%rev.var,%rev.var),1,1) == $chr(45)) {
if (%sign == 1) { return $mid($reverse(%rev.var,%rev.var),1) $+ %point | halt }
if (%sign == 2) { return $chr(45) $+ $remove($mid($reverse(%rev.var,%rev.var),1),$chr(45)) $+ %point }
}
else {
if (%sign == 1) { return $reverse(%rev.var,%rev.var) $+ %point | halt }
if (%sign == 2) { return $chr(45) $+ $reverse(%rev.var,%rev.var) $+ %point | halt }
}
}
alias reverse {
var %i = 1, %tmp
while (%i <= $len($1)) {
var %n = $iif($asc($mid($1,%i,1)) > 127,2,1), %tmp = $iif($mid($1,%i,%n) == $chr(32),$!chr(32),$v1) $+ %tmp
inc %i %n
}
return $replace(%tmp,$!chr(32),$chr(32))
}

댓글 남기기