微信扫一扫 分享朋友圈

已有 1571 人浏览分享

[服務器教學] 一次修復所有中文聊天、NPC顯示、ID顯示之問題 「搬運」

[複製鏈接]

區域版主

Rank: 10Rank: 10Rank: 10

245

威望

1142

金錢

582

A幣
主題
130
帖子
245
精華
0
綜合社群主題發文量
9
電玩社群主題發文量
10
娛樂社群主題發文量
0
技術社群主題發文量
89
閱讀權限
100
註冊時間
2016-5-17
  • TA的每日心情

    2022-4-29 14:36
  • 簽到天數: 5 天

    連續簽到: 1 天

    [LV.2]偶爾看看I

    t9540513 發表於  2022-11-7 16:16:56 | 顯示全部樓層 | 閱讀模式
    本帖最後由 t9540513 於 2022-11-8 09:35 編輯

    001.png

    【說明】
    關於中文顯示範圍太廣泛,但網路資源太過分散,導致許多問題明明有解答,卻無法被找出,

    以下為各位整理出完整的中文顯示修復教學,請注意,參考資料僅參考,

    本教學內容之方法會跟參考資料有出入,自行斟酌使用。


    如果是 TMS 版本可以不用看。

    這是GMS62 適用的,其他高版本非TMS就當觀念看一看。

    【準備】
    此教學會動到的JAVA如下,請先使用您的編譯軟件開好以下JAVA
    GenericLittleEndianWriter.JAVA
    LittleEndianAccessor.JAVA
    StringUtil.java
    MaplePacketCreator.java

    【解決問題】
    1.中文顯示NPC、中文名稱、端口支援中文
    2.中文聊天顯示 ( 非中文發話 )



    【教學開始】
    #中文顯示NPC、中文名稱、端口支援中文

    打開 GenericLittleEndianWriter.JAVA
    搜尋 private static Charset ASCII = Charset.forName("US-ASCII");

    改成

      public class GenericLittleEndianWriter implements LittleEndianWriter {
      private static Charset ASCII = Charset.forName("BIG5"); 
      private ByteOutputStream bos; 



    同個JAVA搜尋 writeShort((short) s.length());
    改成

    riteShort((short)getlength(s));




    打開 StringUtil.java
    搜尋 public static String getRightPaddedStr(String in, char padchar, int length) {
    改成

    public static int getlength(String str){ int i,t=0; byte[] bt = str.getBytes(); for(i=1;i<=bt.length;i++){ if (bt[i-1]<0) {t=t+2;i++;} else t=t+1; } return t; } public static String getRightPaddedStr(String in, char padchar, int length) { StringBuilder builder = new StringBuilder(in); for (int x = getlength(in); x < length; x++) {



    打開 MaplePacketCreator.java
    搜尋 private static void addCharStats(MaplePacketLittleEndianWriter mplew, MapleCharacter chr) {
    在他上面加上

    public static int getlength(String str){ int i,t=0; byte[] bt = str.getBytes(); for (i=1;i<=bt.length;i++){ if (bt[i-1]<0) {t=t+2;i++;} else t=t+1; } return t; }



    同個JAVA搜尋 for (int x = chr.getName().length(); x < 13; x++) {
    改成

    for (int x = getlength(chr.getName()); x < 13; x++) {



    接著將資料表 characters 設計資料表將編碼改成BIG5


    #中文聊天顯示 ( 非中文發話 )
    打開 GenericLittleEndianWriter.JAVA
    搜尋 writeAsciiString
    改成

        public final void writeAsciiString(final String s) {
            write(s.getBytes(ASCII));
        }

        public final void writeAsciiString(String s, final int max) {
            if (s.getBytes(ASCII).length > max) {
                s = s.substring(0, max);
            }
            write(s.getBytes(ASCII));
            for (int i = s.getBytes(ASCII).length; i < max; i++) {
                write((byte) 0);
            }
        }

        public final void writeMapleAsciiString(final String s) {
            writeShort((short) s.getBytes(ASCII).length);
            writeAsciiString(s);
        }



    打開 LittleEndianAccessor.JAVA
    搜尋 readAsciiString
    改成

        public final String readAsciiString(final int n) {
            try {
                final byte ret[] = new byte[n];
                for (int x = 0; x < n; x++) {
                    ret[x] = readByte();
                }
                return new String(ret, "big5");
            } catch (UnsupportedEncodingException ex) {
                System.err.println(ex);
            }
            return "";
        }





    【文章參考】 
    淺談中文顯示  作者 : 相信是一種賭注
    中文亂碼問題  作者 : 冷霜孤月
    中文名稱、中文顯示NPC  作者 : 薯餅


    共收到 0 A幣
    打賞榜
    暫無
    暫無
    暫無
    暫無
    ----
    暫無
    ----
    暫無
    ----
    暫無
    ----

    集團新軍

    Rank: 1

    33

    威望

    95

    金錢

    1

    A幣
    主題
    1
    帖子
    15
    精華
    0
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    1
    閱讀權限
    10
    註冊時間
    2022-10-22
  • TA的每日心情
    鬱悶
    2022-10-26 10:13
  • 簽到天數: 1 天

    連續簽到: 1 天

    [LV.1]初來乍到

    akari 發表於 2022-11-8 07:51:58 | 顯示全部樓層
    雖然看不太懂,也沒有幫助我解決到問題,但還是感謝大佬們做的教程.

    點評

    這是舊版教學適用GMS的,其他版本能理解的大概就是編碼觀念。尤其高版本源碼一定更複雜,要維護或修改建議需要有一定實力。  發表於 2022-11-8 09:34

    鋒芒初露

    Rank: 3Rank: 3

    437

    威望

    1157

    金錢

    47

    A幣
    主題
    10
    帖子
    107
    精華
    0
    綜合社群主題發文量
    0
    電玩社群主題發文量
    0
    娛樂社群主題發文量
    0
    技術社群主題發文量
    10
    閱讀權限
    30
    註冊時間
    2022-10-9
  • TA的每日心情
    難過
    2022-10-29 13:56
  • 簽到天數: 2 天

    連續簽到: 1 天

    [LV.1]初來乍到

    cia47 發表於 2022-11-9 18:43:57 | 顯示全部樓層
    回頭香點評
    高版本服務端感覺反而不成問題,直接改了文字就正常顯示,反而是客戶端編碼,因為卡脫殼問題(很多教學,甚至有的版本有人把結果都貼出了,可是教學都是從中間開始,所以知道程式,但連怎麼到那畫面都不知)改不了
    您需要登錄後才可以回帖 登錄 | 註冊會員

    本版積分規則

    245

    發文

    1142

    金錢

    582

    A幣

    ----------榮譽勳章----------

    熱門推薦
    圖文推薦
    • 聯繫我們

    小黑屋|AICL社群娛樂集團

    GMT+8, 2024-3-29 13:52 , 網路刷新 0.120069 秒 .

    歡迎來到 AICL網路社群

    版權AICL社群所有 2011-2021.

    Total:123 Today:213 Online:322