ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WOW 캐릭터 정보 검색 스크립트
    IRC-Script 2009. 9. 28. 15:42
    반응형

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


    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))
    }

    반응형

    댓글 1

Copyright 2006-2021. Xeriars.com All rights reserved .