열흘 전쯤인가, 엘더스크롤4 오블리비언 GOTY (Game Of The Year) edtion이 재발매 된다는 소식을 들었다.
06년도쯤에 나온 게임인데, 엄청난 자유도를 자랑하는 게임으로써 널리 알려졌지만 당시에는 큰 주목을 받지 못했는지
일찍 절판이 되버리고, 나중에 와서야 품귀 현상에 시달리게 되었다.그러다가 재발매 된다는 소식을 듣고 잽싸게 구매해버린 오블리비언 GOTY
뾱뾱이에 담겨져 있다. 이걸 벗기는(?) 것 순간이 가장 즐겁다.
옆에 있는것은 동봉된 물건으로써 예판 특전으로 주어진 마우스 패드다. 오블리비언 세계의 지도가 나와있다. (왼쪽 옆에 박스로 또 나와있는곳은 쉬버링 아일즈)
적용법
1. 챗창에 //echo -a $mircdir 라고 치고 엔터를 치면, 현재 스크립트를 어디다 저장해야 하는지 경로가 나온다.
2. 아래의 내용을 복사해서 메모장에 넣고 sudden.mrc로 저장한 후 해당 경로로 이동하여 방금 만든 파일을 넣는다.
3. 다시 챗창에 와서 /load -rs sudden.mrc 라고 친 후 앤터.
4. Usage : !서든 아이디명 (ex : !서든 xeriars)
; ————————————————————
; | Made by Xeriars |
; | (변경해서 쓰는건 니맘대로지만 이 부분은 지우지 말아주세요.) |
; ————————————————————
on *:text:*:#: {
if ($1 == !서든) {
if (!$2) { msg $chan Usage : !서든 아이디명 | halt }
unset %sda.*
set %sda.chan $chan
set %sda.id $2
set %sda.count 1
sockclose sattack
sockopen sattack suddenattack.netmarble.net 80
halt
}
}
on *:sockopen:sattack: {
sockwrite -nt $sockname GET /Ranking/Total/ninc_Search.asp?id=&pagegu=index&Condition=2&p_userid= $+ $urlencode(%sda.id) HTTP/1.1
sockwrite -nt $sockname User-Agent: Mozilla/4.0
sockwrite -nt $sockname Host: suddenattack.netmarble.net
sockwrite -nt $sockname Accept-Language: ko
sockwrite -nt $sockname Accept: */*
sockwrite -nt $sockname Connection: Keep-Alive
sockwrite -nt $sockname $crlf
}
on *:sockread:sattack: {
sockread %tmp
set %sda.word <td colspan=”5″ style=”color:#82A3A3″><a href=”javascript:GetSaInfo_new
set %sda.word2 <td width=”122″ style=”color:#82A3A3″>
set %sda.word3 <td width=”89″>
set %sda.word4 <td width=”184″>
set %sda.remove $eval(%2Franking%2FPopUp%2FSaGameInfo%2Easp%3FUserID=,0)
set %sda.error private_nosearch01.gif
if (%sda.word isin %tmp) { set %sda.userid $remove($gettok($replace(%tmp,$eval(%3d,0),=),2,39),%sda.remove) }
if (%sda.word2 isin %tmp) {
set %sda.rank $replace($remove(%tmp,<img src=http://c3.img.netmarble.kr/web/2005_cp/img/suddenattack_v2/common/bl/,$chr(9),%sda.word2,02.gif,01.gif,align=’absmiddle’><span class=’blue p11′>,</td>,</span>),down_arrow ,▼,up_arrow ,▲)
}
if (%sda.word3 isin %tmp) { set %sda.grade $remove($gettok(%tmp,3,62),</td) }
if (%sda.word4 isin %tmp) {
set %sda.guild $remove($gettok(%tmp,4,62),</a)
if (!%sda.guild) { set %sda.guild 없음 }
sockclose sda
sockopen sda suddenattack.netmarble.net 80
sockclose $sockname
}
if (%sda.error isin %tmp) {
msg %sda.chan 해당 플레이어의 정보를 찾을 수 없습니다. 아이디를 다시 한번 확인해주시기 바랍니다.
sockclose $sockname
unset %sda.*
}
}
on *:sockopen:sda: {
sockwrite -nt $sockname GET /ranking/PopUp/SaGameInfo.asp?UserID= $+ %sda.userid HTTP/1.1
sockwrite -nt $sockname User-Agent: Mozilla/4.0
sockwrite -nt $sockname Host: suddenattack.netmarble.net
sockwrite -nt $sockname Accept-Language: ko
sockwrite -nt $sockname Accept: */*
sockwrite -nt $sockname Connection: Keep-Alive
sockwrite -nt $sockname $crlf
}
on *:sockread:sda: {
sockread %tmp
set %sda.pword suddenattack_v2/ranking/pop_txt04.gif”></td>
set %sda.pword2 suddenattack_v2/ranking/pop_txt05.gif”></td>
set %sda.pword3 suddenattack_v2/ranking/pop_txt07.gif” style=”margin-left:1px;”></td>
set %sda.pword4 suddenattack_v2/ranking/pop_txt08.gif” style=”margin-left:1px;”></td>
set %sda.pword5 suddenattack_v2/ranking/pop_txt09.gif” width=”98″ height=”12″ style=”margin-left:1px;”></td>
set %sda.pword6 suddenattack_v2/ranking/pop_txt10.gif” width=”98″ height=”12″ style=”margin-left:1px;”></td>
if (%sda.count == 2) { set %sda.exp $remove(%tmp,<td>,</td>,$chr(9)) | set %sda.count 1 }
if (%sda.count == 3) { set %sda.point $remove(%tmp,<td>,</td>,$chr(9)) | set %sda.count 1 }
if (%sda.count == 4) { set %sda.killed $remove(%tmp,<td>,</td>,$chr(9), ) | set %sda.count 1 }
if (%sda.count == 5) { set %sda.record $remove(%tmp,<td>,<strong>,</strong>, ,<span style=”color:#CC3300″>,</span>,<span style=”color:#0066CC”>,</td>,$chr(9)) | set %sda.count 1 }
if (%sda.count == 6) { set %sda.headshot $remove(%tmp,<td>,</td>,$chr(9)) | set %sda.count 1 }
if (%sda.count == 7) { set %sda.ratio $remove(%tmp,<td>,</td>,$chr(9)) | set %sda.count 100 }
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 留덈굹:
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>湲곕젰:
set %wow.word10 <div class=”runic-stat”>
set %wow.word11 <span>遺꾨끂:
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), ,$chr(32)),</span) }
else { set %wow.result2 $replace($remove(%tmp,%wow.word7,</span>), ,$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))
}
귀축왕 아돌(!?)의 여섯번째 이야기. 그리고 아돌의 3대모험(사라진 고대 왕국 이스, 알타고의 오대룡, 셀세타의 수해)중
하나인 알타고의 내용을 다룬 내용의 이스7이다.역대 이스 타이틀을 살펴보면 (기종 무시)
이스 오리진
이스1 – 사라진 고대 왕국 이스
이스2 – 사라진 고대 왕국 이스 파이널 챕터
이스3 – (신)페르가나의 맹세, (구) Wanderer from YS
이스4 – (PCE)The Dawn of YS, (SFC)태양의 가면 – 셀세타의 수해
이스5 – 잃어버린 모래 도시 케핀
이스6 – 나파쉬팀의 방주 로 구성되어 있다. (기종은 하도 많아서 패스..)
발매전에 공개된 이스7의 일러스트는 오덕들에 의해서 엄청나게 까였는데 (나의 아도루쨩은 이렇지 않다능!! 등등) 그 여파때문인지 대대적인 일러스트의 수정이 이루어졌다.
아무튼 말도 많고 탈도 많은 이 타이틀을 8월말에 주문하여 오늘에서야 손에 쥘 수 있게 되었다.
드라마시디 동봉판(=한정판)은 너무 비싼관계로 (일본어도 잘 모르고;;) 패스하고
팔콤판/일반으로 주문하였는데 괜춘한듯 하다.
총 구성품은
이스7 UMD
이스7 OST MINI
이스 뮤직 히스토리
영웅전설7 극비설정화집 으로 구성되어 있다.
아직 비닐도 안벗긴 그것. 다만 영전7 극비설정집은 그냥 열어볼수 있게 되어있다. 비닐처리도 안된듯;
작년부터 이미 이스7이 나온다고 기다렸으니 일년은 기다린듯 하다.
UMD 케이스의 앞면. 적절히 심플하다. 배경으로 보이는 용의 화석이 인상적인듯.
그리스 문자인 Zeta가 맘에 든다.
UMD 케이스 뒷면. 15세 이용가이며(이스 1&2는 12세 이용가) 엑스트라 스킬, 파티 플레이, 아이템의 합성 등등의 게임 특징에 대해서 문구가 나와있다.
이번 이스7의 예약특전1로 주어진 영웅전설7의 극비설정화집
어떤이는 이스는 별로인데 이 예약특전때문에 구매하는 사람도 있을정도다.
일본어가 거의 까막눈이긴 하나(한자.. 너무 어려워!!) 그림이라서(?) 보기는 편하다.
(vb6ko.dll 파일이 없다고 출력되는 경우 C:windowssystem32 에 위 파일을 넣을 것)
퍼갈때는 반드시 어디로 퍼가는지 댓글에 남겨주시고, 출처를 표시하시기 바랍니다.
2009. 8. 22. 업데이트 사항
– 글자색 확인기능 추가
– 패널티 계산기능 추가
– 누적 데미지 계산 기능 중, 단위시간과 데미지의 관계에 오류가 있던 사항을 수정
– 누적 데미지 계산 기능 중, 출력 데이터의 변경.
– 명예등급의 데이터 수정 (17등급 이후로는 데이터가 명확하지 않아 수열을 통해 추정치로 대체)
– 스텟 계산기능 중, 일부 직업에서 특정 스텟이 비정상적으로 상승,하강되던 문제를 수정2009. 8. 12. 업데이트 사항
– 누적 데미지 계산 기능 추가
– 누적데미지 계산 기능 중 데미지 계산을 “쿨타임”기준에서 “시전시간”기준으로 변경
– 명예 등급 계산 추가
– 스킬 비용 계산 기능의 스킬 가격이 제대로 표시되지 않던 문제 수정
– 스킬 비용 계산 기능에서 일부 스킬이 빠져있던 문제 수정
– 데미지 계산기능 중 “크확적용누적평균데미지” 추가
– 명예등급 풀다운 매뉴에 중복된 명예등급이 들어있던 문제를 수정
– 누적 데미지 계산 중 0,-,= 번 스킬의 사용횟수 결과가 10,11,12로 출력되던 문제를 수정
2009. 8. 6. 업데이트 사항
– 스텟 계산 기능 추가
2009. 8. 5 업데이트 사항
– 스킬을 배우는데 필요한 금액이 계산 가능하도록 기능 추가
– 폼이 제대로 언로드 되지않아 프로그램을 종료해도 프로세스상에 계속 상주하고 있는 문제 해결.
일단은 데미지 계산과 피흡량을 계산하는 목적으로 만들었다.
더 많은 옵션을 추가하고 싶으나 아직 아이디어도 별로 떠오르지 않고, 입수된 공식도 없다.
데미지 계산을 위해서는 “패널티”라는 개념이 사용되는데, 필요한 변수는 몬스터 레벨, 케릭터의 레벨, 몬스터의 방어 이 3가지가 필요하다. 몬스터 레벨 자료는 아래의 자료를 참고하면 되는데 몬스터의 방어를 알아내기가 까다롭다.
정확한 자료는 차후에 업데이트 하면서 다시 올릴 예정! – 업데이트됨
문의사항은 블로그 댓글이나 카발 머큐리서버에서 “대좌” 를 찾을 것.몬스터 레벨 참고 자료
5월달에 이미 나온다는 소식을 듣고 구매대행 사이트에서 통신예약으로 주문하였다.
7월 16일날 발매한다는걸 두달이나 기다린 셈..
아무튼 17일날 발송한것이 일본에서 우리집으로 오늘에서야 도착하게 되었다.
개인적인 인적사항은 현피가 두려워 삭제한다………;;;
겉표지를 벗긴 사진.
물건을 주문했을때 보통 이런 뾱뾱이로 감겨있는데, 이 뾱뾱이를 벗기는(!?) 순간에 묘한 기쁨을 느낀다.
드디어 내용물이 보인다.
내용물은 3가지
1. 이스 1&2 클로니클즈 (기본) – UMD
2. 이스 1&2 베스트 사운드 콜렉션 (예약한정특전) – 음악 CD
3. 이스 1&2 OST mini (팔콤통판특전) – 음악시디
이스 1&2 베스트 사운드 콜렉션에 수록된 곡의 목록이다. 좋아하는곡도 있고, 이스6 구매시 받은 메모리얼 사운드에 있던 곡과 중복되는 곡도 몇곡 보인다.
이스 1&2 OST mini에 수록된 곡은 시디에 프린팅 되어있어서 잘 보이지 않아서 직접 아래에 타이핑 해두었다.
1. Battle Ground
2. Protectors
3. Palace
4. Palace of destruction
5. Moat of burnedbless
6. Palace of Salmon
7. Feena
8. To make the end of battle
NDSL용으로 이스 DS가 나왔을 때, PSP유저로써 상당히 부러웠었는데 이렇게 PSP용으로 나와줘서 너무나 좋다.
이스 1&2 완전판을 기본 베이스로 깔고 있으며 음악이 리메이크 되었고 일러스트도 클로니클 모드에선 새로운 일러스트로 나온다. (오리지널/클로니클 모드 선택가능)
이스 완전판이 PC용으로 나왔음에도 이것을 구매한 첫번째 이유는 PSP의 기동성, 두번째 이유는 음반이다.. -_-;
9월 16일날 이스 7이 발매된다는데, 드디어 아돌의 3대 모험(사라진 고대 왕국 이스, 셀세타의 수해, 알타고의 오대룡)의 완결작, 알타고의 오대룡을 다룬 이야기가 나온다니
꽤 오래전에 만든 스크립트인데 이제서야 공개하게 되었다.
단, $mircdir 에 utf8.dll 파일이 필요하니 첨부파일을 다운로드 할것.
이 스크립트를 가져다 쓸 사람은 아래부터 복사해서 쓰면 된다. (mIRC 6.3 에서 정상작동 확인함)
; ————————————————————
; | Made by Xeriars |
; | (변경해서 쓰는건 니맘대로지만 이 부분은 지우지 말아주세요.) |
; ————————————————————
on *:text:*:#: {
if ($1 == @유튜브) {
if (!$2) { msg $chan Usage : @유튜브 검색어 | halt }
unset %youtube.*
set %youtube.chan $chan
set %youtube.word $2-
set %youtube.url $urlencode($dll(utf8.dll,convertutf8,%youtube.word))
set %youtube.count 1
set %youtube.nick $nick
sockclose youtube
sockopen youtube www.youtube.com 80
halt
}
}
on *:sockopen:youtube*: {
sockwrite -nt $sockname GET /results?search_type=&search_query= $+ %youtube.url $+ &aq=f HTTP/1.1
sockwrite -nt $sockname User-Agent: Mozilla/4.0
sockwrite -nt $sockname Host: www.youtube.com
sockwrite -nt $sockname Connection: Close
sockwrite -nt $sockname $crlf
}
on *:sockread:youtube: {
sockread %tmp
set %youtube.search0 약 <strong>
set %youtube.search0 $dll(utf8.dll,convertutf8,%youtube.search0)
set %youtube.search1 <div class=”v120WideEntry”><div class=”v120WrapperOuter”>
set %youtube.search2 class=”video-description”>
set %youtube.search3 <button class=”master-sprite ratingVS ratingVS-
set %youtube.search4 class=”video-date-added”>
set %youtube.search5 class=”video-view-count”>
set %youtube.search6 <span class=”video-username”>
set %youtube.error <div style=”margin-top: 10px”><span
set %youtube.error2 icn_cycds_warning-vfl33982.gif
if (%youtube.count == 2) {
set %youtube.describe $dll(utf8.dll,convertlocal,$replace($remove(%tmp,$chr(9)),<b>,,</b>,))
set %youtube.count 1
}
if (%youtube.error isin %tmp) {
msg %youtube.chan ” $+ %youtube.word $+ ” 의 검색결과가 존재하지 않습니다.
sockclose $sockname
unset %youtube.*
}
if (%youtube.error2 isin %tmp) {
msg %youtube.chan ” $+ %youtube.word $+ ” 의 검색결과가 존재하지 않습니다.
sockclose $sockname
unset %youtube.*
}
if (%youtube.search0 isin %tmp) {
set %youtube.amount $remove($gettok(%tmp,1,47),%youtube.search0,<,$chr(9))
}
if (%youtube.search1 isin %tmp) {
set %youtube.id $remove($gettok(%tmp,8,34),$chr(9),video-url-)
set %youtube.video http://www.youtube.com/watch?v= $+ %youtube.id
set %youtube.subject $dll(utf8.dll,convertlocal,$remove($gettok(%tmp,14,34),$chr(9)))
}
if (%youtube.search3 isin %tmp) { set %youtube.ratio $gettok(%tmp,4,34) $+ 점 }
if (%youtube.search4 isin %tmp) { set %youtube.added $dll(utf8.dll,convertlocal,$remove($gettok(%tmp,5,34),</span>,>)) }
if (%youtube.search5 isin %tmp) { set %youtube.vcount $remove($dll(utf8.dll,convertlocal,$remove($gettok(%tmp,5,34),</span>,>)),조회,수,$chr(32)) }
if (%youtube.search6 isin %tmp) { set %youtube.user $remove($gettok(%tmp,9,34),</a>,</span>,>) | set %youtube.count 77 }
if (%youtube.count == 77) {
if (!%youtube.ratio) { set %youtube.ratio 평점없음 }
msg %youtube.chan $chr(91) $+ %youtube.subject $+ $chr(93) – %youtube.video ( $+ 약 %youtube.amount $+ 개의 동영상 검색)
msg %youtube.chan 설명 : %youtube.describe
msg %youtube.chan 등록일 : %youtube.added / 평점 : %youtube.ratio / 조회 수 : %youtube.vcount / 등록자 : %youtube.user
notice %youtube.nick 더 많은 결과를 보시려면 http://www.youtube.com/results?search_type=&search_query= $+ %youtube.url $+ &aq=f 를 참조하십시요.
sockclose $sockname
unset %youtube.*
}
if (%youtube.search2 isin %tmp) { set %youtube.count 2 }
}
재밌는 점은 72번(台湾) 인데 이것을 한국식으로 발음하면 “대만”이다.
중국에서는 대만을 하나의 나라로 인정하지 않으며 “성급”으로 취급하는데, 여기에서도 그런 모습이 드러난다.
3,4 : 성급 행정구역보다 한단계 아래인 지구별행정구역(區, qi라고 발음)을 나타낸다.
5,6 : 지구별행정구역의 하위 개념인 현(縣)급 행정구역을 나타낸다.
3,4,5,6은 워낙 많기때문에 여기서 다루지 않고 넘어간다. -_-;
7,8,9,A : 출생년도를 표기한다. (예 : 1985, 2009) 신분증 번호 중 15자리 식은 예문을 85 또는 09로만 표현한다.
B,C : 출생월을 표기한다. (예 : 09, 12)
D,E : 출생일을 표기한다. (예 : 22, 31)
F,G,H : 이것은 위에서 나타낸 정보 (XX성 XX구 XX현 yyyy년 mm월 dd일)에서 몇번째로 태어난 사람인지 기록하는 카운터(counter)의 개념이다. 여기서 유의점은 남자는 홀수, 여자는 짝수로 표기된다. (예 : 남자의 경우 001, 003, 005 순서로 기록)
I : 이 값이 골치를 썩게 하는 체크섬 값이다. 이 부분은 아래에서 구하는법을 다루겠다.
대략 위와 같은 형태로 신분증 번호가 구성이 되는데, 주민등록번호처럼 맨 마지막 값이 체크섬 값이다. 이 값에 따라
형식이 올바른 번호인지 아닌지가 구별이 되므로 이제 이 체크섬 값을 구하는 것을 기술해보겠다.
먼저, 예문이 될 중국신분증 번호를 하나 만들어보자.
112524198509226478 로 만들었다.
북경시에서 태어났고 (xx구,xx현은 대충 만듬) 1985년 09월 22일생이며 324번째로 태어난 남자다.
우리가 구해야 하는 값은 i,Ai,Wi,S 라는 값이다.
이것은 간단하게 표로 정리해 보겠다.
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
i
1
1
2
5
2
4
1
9
8
5
0
9
2
2
6
4
7
Ai
7
9
10
5
8
4
2
1
6
3
7
9
10
5
8
4
2
Wi
7
9
20
25
16
16
2
9
48
15
0
81
20
10
48
16
14
S
오른쪽에 각각 i, Ai, Wi, S 라는 글짜가 보인다.
i는 2~18까지의 숫자를 오른쪽에서 왼쪽으로 1씩 더해가며 쓴 숫자이다.
Ai는 우리가 만든 신분증 번호를 순서대로 왼쪽에서 오른쪽으로 쓴것이다.
Wi는 모든 사람이 같은 값을 가지게 되는데 이것은 아래의 식을 따른다.
저 식을 적용하고 나면 7,9,10,5,8,4,2,1,6,3 이라는 숫자가 계속 반복해서 나옴을 알 수 있다.
S는 Ai와 Wi를 곱한 값으로써 i_2부터 i_18까지 행해준다. (식은 아래를 참조)
마지막으로 각 S의 값을 모두 더한 값이 최종적인 S의 값이 된다.
이렇게 구한 S를 11로 나눈 뒤 나머지만 취한다. (result = S % 11)
예문에서 모두 합산된 S의 값은 356이다. 이 값을 11로 나눠 나머지만 취하면 4라는 값을 구할 수 있다.
이 값을 가지고 아래 표에 대입하여 마지막 체크섬 값을 찾아낸다.
0
1
2
3
4
5
6
7
8
9
10
대입할 값
1
0
X
9
8
7
6
5
4
3
2
치환될 값
우리가 가지고 있는 값은 4 이므로 “대입할 값”에서 4를 찾으면 “치환될 값”란에는 8이라고 써있으므로
마지막 18번째 체크섬 값은 8이 된다.
우리가 맨처음 생성한 112524198509226478 라는 값에서 맨 마지막값이 8이므로 체크섬값이 일치함을 알 수 있고
따라서 이 신분증번호는 형식에 올바른 신분증 번호라는것이 판명된다. (진위여부 확인 OK)
보통 이것을 홈페이지 같은곳에서 진위여부 확인을 위해 체킹하는 함수를 만드는데,
아래에 “발로 대충 만든” 알고리즘이 있으니 참고하여 쓰면 된다.
* 비베가 익숙칠 않아서 IF문이 본의 아니게 많이 사용됬다.
* text1.text에 112524198509226478 와 같이 입력한다.
‘ai(i)와 wi(i)를 곱한 값을 모두 합친다.
For i = 0 To 16
tmp = ai(i) * wi(i)
result = tmp + result
Next i
‘마지막 연산을 위해 11로 나눈 나머지 값을 취한다.
result = result Mod 11
‘매직키 테이블로 마지막 18번째 자리값을 대조해서 찾는다.
Dim checksum As String
If result = 0 Then
checksum = 1
End If
If result = 1 Then
checksum = 0
End If
If result = 2 Then
checksum = “X”
End If
If result = 3 Then
checksum = 9
End If
If result = 4 Then
checksum = 8
End If
If result = 5 Then
checksum = 7
End If
If result = 6 Then
checksum = 6
End If
If result = 7 Then
checksum = 5
End If
If result = 8 Then
checksum = 4
End If
If result = 9 Then
checksum = 3
End If
If result = 10 Then
checksum = 2
End If
If checksum = checkkey Then
Text5.Text = ” [O] ” & Text1.Text & vbCrLf & ” (올바른 신분증번호)”
End If
If checksum <> checkkey Then
Text5.Text = ” [X] ” & Text1.Text & vbCrLf & ” (틀린 신분증번호)” & vbCrLf & vbCrLf & ” 올바른 신분증번호는” & vbCrLf & ” ” & Mid(Text1.Text, 1, 17) & checksum & ” 입니다.”
End If
최근 다크나이트에 푹 빠졌다. 역대 배트맨 시리즈 중에 가장 좋았던것 까진 좋았으나..
공식 한글 자막을 누가 만들었는지 개날림으로 만들었다.
지금부터 몇가지 장면을 따져보도록 하겠다.
원문 : You think you’re smart, huh?
공식 한글 자막 : 좋아할 거 없어
필자의 주관적인 번역 : 니가 생각하기에 똑똑한것 같지, 응?
의견 : 오역의 시작!
원문 : Oh, criminals in this town used to believe in things.
공식 한글 자막 : 범죄자들끼리도 지킬게 있는거야
필자의 주관적인 번역 : 이 동네의 범죄자들은 도의라는게 있었어. (이 다음문장도 의역이지만 분량이 워낙 많으니 넘어가겠심)
의견 : 가씀(Gotham) 씨티의 범죄자들에게 있던 도의 였는데.. “모든 범죄자”로 오해할수 있는 소지가 있다.
원문 : Buyer beware.
공식 한글 자막 : 누굴 탓해?
필자의 주관적인 번역 : 구매자여, 주의하시라~ (이 씬 다음에도 왕창 틀렸다. 역시 분량 관계상.. 따지고 들자면야.. 한도 없다)
의견 : 뭐래는거여..
원문 : Harvey, I know these briefs backwards.
공식 한글 자막 : 내가 해도 충분해
필자의 주관적인 번역 : 하비, 이 사건 개요서는 거꾸로도 외울지경이야.
의견 : 의역이 좀 심한것 같은데…
원문 : As you’re all aware, one of our deposits was stolen.
공식 한글 자막 : 우리 은행이 털렸어요.
필자의 주관적인 번역 : 모두들 아시다시피, 우리 공탁소 중 한곳이 털렸어요.
의견 : 이 장면만 보자면 운영하는 은행이 털렸는줄 오해할듯?
원문 : What about the flight crew? / South Korean smugglers
공식 한글 자막 : 조종사는? / 밀수꾼인데
필자의 주관적인 번역 : 조종사는 어떻습니까? / 남한에 있는 밀수꾼인데
의견 : 심의 때문인가??
원문 : They run flights into Pyongyang, below radar
공식 한글 자막 : 레이더를 피하는 기술이 제법이죠
필자의 주관적인 번역 : 그들은 레이더를 피해 평양으로 비행한답니다.
의견 : 아무리 심의 때문이라지만, 이건 뭐 눈가리고 아웅인 식. 들어보면 벌써 다르다는걸 아는데… 이건 오역으로 봐야할듯?
원문 : Mr. Wayne didn’t want you to think he was deliberately wasting your time.
공식 한글 자막 : 회장님이 찾아뵙고 말씀드리라 해서요.
필자의 주관적인 번역 : 웨인 회장님께서는 일부러 당신의 시간을 낭비시킨다고 생각하는것을 원치 않으시니까요.
의견 : 뭐여, 이건.. 시간낭비한다고 오해하지 않도록 한다는데 뭘 찾아뵙고 말씀드려? 의역도 아니고 오역이네..
원문 : That’s very good, Mr. Lau. “accidentally.” Very good.
공식 한글 자막 : 그래요. 라우 씨. 시간낭비 했죠.
필자의 주관적인 번역 : (Very good 뒤에 expression이 생략됬을것이라 가정하고) 매우 좋은 표현입니다. 라우씨. “하마트면”,아주 좋습니다.
의견 : 뭔가가 엉성하면서도 영어를 아주 모르고 이 영화를 처음 보는사람에게는 대충 앞뒤가 맞는 자막…
이밖에도 워낙에 많은 오역,의역들이 있겠지만 중간에 화딱지가 나서 한글자막으론 못보겠어서 영어자막으로 봤다.
이따위로 만들고선 공식자막이라니…
참고 이 자막은 영화관/DVD/Blu-ray 공통으로 들어가는 자막이다…