본문 바로가기

쓰기

이제는 ATCode 까지 손을 대버렸습니다 -_-



차이점이 느껴지십니까? ;;

/a:ATCode {
ENCODEKOR,FORCEFONT(5),
HOOK(0x004A5CDF,TRANS(ECX,SOW)), // 대사
HOOK(0x004D84F0,TRANS([ESP+0x4],SOW)), // 선택지
HOOK(0x004A5600,TRANS([ESP+0x8],PTRCHEAT)) // 이름
}

/t:MultiPlugin{preKoFilter{},CmdFilter{OVERWRITE(FALSE)},ezTransXP{},CmdFilter{}}

빨간 색 부분을 주의해 넣어주세요; SOW는 Script OverWrite 약자로.. 뭔가 대단한 이름이 생각나지 않아 그냥 붙였습니다. ㅡ.,ㅡ

* 원리

리얼라이브는 스크립트 전체를 메모리에 올려놓고 거기서 직접 데이타를 읽어 화면에 뿌려줍니다. 그래서 번역문이 원문보다 긴 경우 넣을 공간이 없기 때문에 원문 길이에 맞게 번역문을 넣어줘야 합니다.

예:
원문 - zz ABCD wxyy (여기서 zz, wxyy 등은 스크립트, ABCD는 대사임)
번역 : ABCD = 가나다라마바  (원문이 4자인데 번역문은 6자)
번역문 - zz 가나다라 wxyy (원문이 4자밖에 되지 않으므로 번역문 뒤를 잘라서 강제로 4자로 만든다)

SOW, 스크립트 덮어쓰기 후 복구 방식은 다음과 같이 작동합니다.

1. 번역문의 길이만큼 데이타를 백업받습니다. 위치는 번역문의 끝이 딱 원문의 끝에 맞도록.
원문 - zz ABCD wxyy
백업 - z ABCD (6자 백업)

2. 백업받고 난 원문 위치에 번역문을 복사합니다.
복사 후 원문 - z가나다라마바 wxyy (원본 대사의 앞부분 (z )이 깨졌음)

3. 대사 출력 포인터를 번역문의 처음으로 돌립니다. 곧, 원래 A 자리에서 출력해야 하는데 가 자리에서 출력하도록
대사 출력 포인터를 거꾸로 2칸 옮깁니다. 이건 포인터 바꿔치기와 동일합니다.

4. 대사가 출력됩니다.

5. 대사 출력 후 원문을 복구합니다.
복구 전 원문 - z가나다라마바 wxyy
백업된 원문 - z ABCD
복구 후 원문 - zz ABCD wxyy

Hide_D

2008.07.21
17:52:05
이젠 RealLive라고 플러그인 이름을 바꾸기만 하면 되는군요[..]

Hide_D

2008.07.21
18:08:25
으음...
그나저나 세이브는 어떨까요?

whoami

2008.07.21
18:10:56
세이브는 아마 안 될 겁니다;

... 그런데.. 한글번역중에도 세이브되는 포인트가 하나 있습니다; 선택지에서는 한글상태에서도 세이브가 됩니다.

나는누구인감?

2008.07.21
18:24:06

오오오. 굉장한걸 만드셨군요!

whoami

2008.07.21
18:24:52

아뇨. 지금까지 preKoFilter 나 CmdFilter 가 하던 일은 동일합니다. 단지 예전에 사용하던 덮어쓰기 방식은 글자수 제한이 있었지만 SOW는 글자수 제한이 없습니다.. 곧, 원문보다 번역문이 길어도 전부 표시해줍니다. 그것만 다르다고 생각하면 됩니다.

그래서 CmdFilter 에 OVERWRITE(FALSE) 로 덮어쓰기 모드 (글자 길이를 맞춰주는 모드)를 강제로 꺼 준 겁니다.

나는누구인감?

2008.07.21
18:50:29
ATCode에서 원문 받아서 CmdFilter로 넘기고 번역하고 CmdFilter에서 한번 더 거르고 번역된 문장이 ATCode로 와서 ATCode에서 번역된 문장을 스크립트와 합체해서 출력한뒤 ATCode에서 메모리에다가 원문을 다시 복구해서 문제발생의 소지를 없애버리는것 아닌가요?

저도 잘 모르겠습니다...
후앰아이님이 명쾌한 설명을 해주셔야할듯...

어이쿠 정착A님 코멘트를 삭제하시면 저만 바보되는디...

whoami

2008.07.21
20:45:36

지나가다정착한이A님// 맞습니다. 제대로 이해하신 것 같네요. 그래서 예전 코드인 ECX+0x3 인가? 를 안쓰고 코드가 완전 계산된 부분에서 ATCode를 설정해 준 것입니다. 아마 [레지스터+값] 이나 [레지스터], 레지스터 형식은 되겠지만 [레지스터]+값 혹은 레지스터+값, [레지스터+값]+[레지스터+값] 같은 형태는 제대로 작동하지 않을 것입니다. 이 점은 포인터 바꿔치기 방식도 동일할 겁니다.

아래의 대사 포인트 스크린샷을 참조하시면 기존의 ECX+0x3 하고 지금의 ECX 하고의 차이점을 찾으실 수 있을 겁니다.. 그리고 이 어셈블리 패턴은 *모든* 리얼라이브 게임에서 유효한 것 같습니다. 곧, 이 지점만 찾으면 모든 리얼라이브 게임에서 대사는 한글로 볼 수 있을 겁니다.

첨부 :
reallive.script.PNG [File Size:63.7KB/Download45]

Hide_D

2008.07.22
00:00:58
으음.... 제가 생각하는게 맞나요?

 문장들

번역문장 ■
  캐시 □
 포인터 ▽
라고 할때
        ▽             
■■■■■■■■■■■■■■■■■■■■■■■■
□□□□□□□□□□□□□□□□
이걸
     ▽             
■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■□□□□□□
요렇게 해서

              ▽ 
■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■□□□□□□


                            ▽
■■■■■■■■■■■■■■■■■■■■■■■■
□□□□□□□□□□□□□□□□
이렇게 간다는 건가요?

그 다음단계는
                    ▽
■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■□□□□□
이거구요?

whoami

2008.07.22
17:34:38
Hide_D군님// 네. 맞습니다.

미히

2008.07.26
17:35:59

감사감사 감사합니다 !!

List of Articles
공지 Talk [필독] 테스트필터 사용시 주의사항
라파에
155445   2008-08-03 2008-12-16 00:03