eMule v0.50a X Mod v1.6.1.2

eMule X Mod的開發維護者為中國程序員Dolphin。X Mod基於Xtreme Mod修改。製作的目標是為改善細節、提高用戶體驗。相對於Xtreme Mod的主要增強有:提高啟動速度;共享文件控制;文件類型識別;下載歷史的文字和類型過濾;更好的網頁界面等。尤其值得一提的是eMule X Mod有32位普通版、32位SSE指令集編譯版、64位版。X Mod使用集成了的DLP反吸血。

最新版本號均為1.6.1.2。此版的國家旗幟數據IP2Country 和 Ini 文件支持UTF-8,做了不少修改和bug修復。具體見下文的更新日誌。

下載

以下版本中,SSE版本要在支持SSE指令集的CPU上才能使用,不過一般也都支持,推薦使用SSE版。所有可執行文件版本包均未加入ipfilter、server.met等組件,使用前必須手動下載組件並放入相應文件夾。你可以下載在我們的相關組件目錄找尋並使用最新版的相關組件。

推薦可執行文件版本下載:

eMule 0.50a X Mod 1.6.1.2 x86 nosse(32位版可執行文件壓縮包,No SSE)

eMule 0.50a X-Mod 1.6.1.2 x86(32位版可執行文件壓縮包,SSE指令集編譯)

eMule 0.50a X-Mod 1.6.1.2 x64(64位版可執行文件壓縮包)

eMule0.50a-X-Mod1.6.1.2-sources.7z(源代碼包)

相關鏈接

如果您的 X Mod 發生錯誤崩潰了,產生的dmp文件請發至email:emulexmod at 126.com,以幫助作者修正bug。
X Mod與Lite的主頁
X Mod與Lite的sourceforge項目頁
本博客上X Mod與Lite的目錄介紹

更新日誌

X-Mod 1.6.1.2:

0.50a X-Mod 1.6.1.2
—————-
修正:
修正超過4GB文件重複hash問題 (ahaha)
修正分配磁碟空間時UI失去響應並發生文件損壞的問題 (ahaha)
CPartFileConvert::run 初始化 sfmt

修改:
替換部分CFileFind為_taccess
隊列線程支持刪除任務避免導致潛在的崩潰
IP2Country 和 Ini 支持 UTF-8

50條評論隱藏

  1. #1 Solitudes
    2012年2月7日 周二 09:46 | 回復

    哇,更新了,趕緊試試 😀

  2. #2 BBA
    2012年2月7日 周二 10:07 | 回復

    感謝更新,一直用這個

  3. #3 Solitudes
    2012年2月7日 周二 10:11 | 回復

    32位 nosse版的主程序文件版本顯示還是1.6.1.1,是文件搞錯了還是版本號忘記修改了?
    32位的sse版版本號正常

  4. #4 con16
    2012年2月7日 周二 10:30 | 回復

    dlp現在也沒人在更新….

  5. #5 lioe
    2012年2月7日 周二 10:31 | 回復

    @Solitudes 作者搞錯了吧

  6. #6 相忘於江湖
    2012年2月7日 周二 12:38 | 回復

    1.修復了1.6.1.1的假死問題。
    2.終於解決了一直以來超過4GB文件重複hash問題。^_^

  7. #7 相忘於江湖
    2012年2月7日 周二 19:54 | 回復

    發現一個大bug:統計數據每次啟動都會被清零。
    1.6.1.2 64位版。

  8. #8 相忘於江湖
    2012年2月7日 周二 21:34 | 回復

    這個版本下載好像有問題,同一個用戶我用1.6.0可以達到100kb的速度,但是用1.6.1.2連那個用戶只能達到幾kb的速度。(下載同一個文件,反覆對比了1個多小時)

    先回滾到1.6.0.0版,等1.6.1.3出來再說。

  9. #9 Charles
    2012年2月8日 周三 02:11 | 回復

    @相忘於江湖 我的32位版的1.6.1.2也有這個BUG。

  10. #10 Solitudes
    2012年2月8日 周三 09:33 | 回復

    昨天用下來已經崩潰了2次了,後來一次是半夜崩潰的,算是白掛了一晚上 😥
    還是先用舊版吧

  11. #11 相忘於江湖
    2012年2月8日 周三 13:04 | 回復

    @Charles

    作者已經修復統計數據清零的問題,請重新下載。

  12. #12 相忘於江湖
    2012年2月8日 周三 13:05 | 回復

    @Solitudes

    崩潰的問題我也碰到了,作者據說修復了這個問題,請重新下載確認。

  13. #13 cc
    2012年2月9日 周四 11:16 | 回復

    這個版本的更新真是不容易等啊,趕緊下來試用

  14. #14 Solitudes
    2012年2月9日 周四 12:03 | 回復

    @相忘於江湖
    已經重新下載,目前沒發現問題 😀

  15. #15 相忘於江湖
    2012年2月9日 周四 12:43 | 回復

    最新版,好像還有一個問題:有時候上傳速度會突然降下來很多,過幾十分鐘後自行恢復。
    (網路環境電信2M adsl 一台電腦獨享帶寬,騾子上行速度限制設置為42kb/s,上傳速度去除網路開銷一般穩定在32kb/s左右,但是有時候會突然降低到只有12kb/s,過幾十分鐘後又恢復到正常速度。電信網路問題的可能性很小,因為以前用1.6.0版本從未出現過這種情況。)

  16. #16 相忘於江湖
    2012年2月9日 周四 16:44 | 回復

    發現問題原因了:是我的ISP在限制ed2k連接速度。因為GFW的原因現在必須禁用迷惑協議才能連上ed2k伺服器,所以我這幾天把協議禁用了,但是我的ISP對ed2k做了限速,導致上傳速度不能達到全速。

    解決方案是:啟動電騾連接伺服器的時候先禁用迷惑協議,連上伺服器後馬上啟用迷惑協議就不會被ISP限速了。

    PS:對GFW的封鎖以及ISP的限速表示鄙視 😯

  17. #17 xbeam
    2012年2月10日 周五 20:11 | 回復

    剛下了v1.6.1.2發現開啟NAFC後下載速度幾乎為0, 32位SSE

  18. #18 gqpx
    2012年2月12日 周日 09:46 | 回復

    @相忘於江湖 迷惑協議只是用來防止被ISP限速的嗎?這個協議有什麼必要性?

  19. #19 犟騾子
    2012年2月12日 周日 10:11 | 回復

    @gqpx 保證你的通信無法被包括方校長在內的無恥之徒上下其手。當然光腚愛好者和私有軟體上癮者們可以無視這一點。

  20. #20 ahaha
    2012年2月13日 周一 19:25 | 回復

    關於分配磁碟空間時UI假死的處理,我那個”return”僅僅是當時隨手改改的權宜之計。
    在隊列里有多個文件同時需要分配時現在的處理依然會造成假死的,
    下面給出一個比較全面徹底的解決方案,順便重寫一個我自己用的寫盤過程,
    代碼比較簡單粗暴,但是UI操作絲般柔滑, 😳 希望作者看了有所啟發。 😆
    PartFile.cpp

    int CPartFile::FlushBuffer2(bool forcewait)
    {
    //if (m_FlushSetting)
    //{
    // if (forcewait)
    // {
    // m_FlushSetting->evTerminated.wait();
    // FlushDone();
    // }
    // else return 1;
    //}

    //Xman Flush Thread improvement
    bool forcedbecauseincreasing=false;
    //Xman end

    // SLUGFILLER: SafeHash
    if (forcewait) { // Last chance to grab any ICH results
    Poco::FastMutex::SingleLock sLock(ICH_mut, true); // ICH locks the file – otherwise it may be written to while being checked
    ParseICHResult(); // Check result from ICH
    }
    // SLUGFILLER: SafeHash

    try
    {
    bool bCheckDiskspace = thePrefs.IsCheckDiskspaceEnabled() && thePrefs.GetMinFreeDiskSpace() > 0;
    ULONGLONG uFreeDiskSpace = bCheckDiskspace ? CVolumeInfo::_GetFreeDiskSpace(GetTempPath()) : 0;

    // Check free diskspace for compressed/sparse files before possibly increasing the file size
    if (bCheckDiskspace && !IsNormalFile())
    {
    // Compressed/sparse files; regardless whether the file is increased in size,
    // check the amount of data which will be written
    // would need to use disk cluster sizes for more accuracy
    if (m_nTotalBufferData + thePrefs.GetMinFreeDiskSpace() >= uFreeDiskSpace)
    AfxThrowFileException(CFileException::diskFull, 0, m_hpartfile.GetFileName());
    }
    uint64 crrentEnd = m_BufferedData_list.GetTail()->end;
    if (m_hpartfile.GetLength() = uFreeDiskSpace)
    AfxThrowFileException(CFileException::diskFull, 0, m_hpartfile.GetFileName());
    }

    if (!IsNormalFile() || uIncrease<2097152)
    {
    //Xman Flush Thread improvement
    if(!forcewait) forcedbecauseincreasing=true;
    //Xman end
    forcewait=true; // alloc it at once
    } //Xman

    // Allocate filesize
    if (!forcewait)
    {
    m_AllocateThread = new AllocateSpaceThread(this, newsize);
    if(m_AllocateThread->start())
    {
    return -1;
    }
    else
    {
    m_AllocateThread = NULL;
    TRACE(_T(“Failed to create alloc thread! -> allocate blocking\n”));
    forcewait=true;
    }
    }
    if (forcewait)
    {
    bIncreasedFile = true;
    // If this is a NTFS compressed file and the current block is the 1st one to be written and there is not
    // enough free disk space to hold the entire *uncompressed* file, windows throws a ‘diskFull’!?
    if (IsNormalFile())
    m_hpartfile.SetLength(newsize); // allocate disk space (may throw ‘diskFull’)
    }
    }
    }
    catch (CFileException* error)
    {
    FlushBuffersExceptionHandler(error);
    }
    #ifndef _DEBUG
    catch(…)
    {
    FlushBuffersExceptionHandler();
    }
    #endif

    m_nNextFlushBufferTime = 0;// X: [GB] – [Global Buffer]
    size_t partCount = GetPartCount();
    bool *changedPart = new bool[partCount];
    // Remember which parts need to be checked at the end of the flush
    for (size_t partNumber = 0; partNumber 0)
    {
    PartFileBufferedData *item = m_BufferedData_list.RemoveHead();
    uint32 lenData = (uint32)(item->end – item->start + 1);

    // SLUGFILLER: SafeHash – could be more than one part
    for (uint_ptr curpart = (uint_ptr)(item->start/PARTSIZE); curpart end/PARTSIZE; curpart++)
    changedPart[curpart] = true;
    // SLUGFILLER: SafeHash

    m_hpartfile.Seek(item->start, CFile::begin);
    m_hpartfile.Write(item->data, lenData);

    // Decrease buffer size
    m_nTotalBufferData -= lenData;

    // Release memory used by this item
    delete [] item->data;
    delete item;
    }

    //Creating the Thread to flush to disk
    m_FlushSetting = new FlushDone_Struct;
    m_FlushSetting->bForceICH = false;
    m_FlushSetting->changedPart = changedPart;
    if (forcewait == false || forcedbecauseincreasing==true) //Xman Flush Thread improvement
    {
    CPartFileFlushThread *flushThread = new CPartFileFlushThread(this);
    // X: queued disc-access for read/flushing-threads
    theApp.AddNewDiscAccessThread(flushThread);
    return 2;
    }

    // Or flush normally
    try
    {
    m_hpartfile.Flush();
    }
    catch (CFileException* error)
    {
    FlushBuffersExceptionHandler(error);
    delete[] changedPart;
    delete m_FlushSetting;
    m_FlushSetting = NULL;
    return -2;
    }

    FlushDone();
    changedPart = NULL;
    return 0;
    }

    void CPartFile::AllocateSpaceThread::run()
    {
    DbgSetThreadName(“Partfile-Allocate Space”);
    theApp.QueueDebugLogLine(false,_T(“ALLOC:Start (%s) (%s)”),myfile->GetFileName(), CastItoXBytes(m_iAllocinfo, false, false) );

    auto iHi = (LONG)(m_iAllocinfo >> 32);
    DWORD dwPtrLow = SetFilePointer(myfile->m_hpartfile.m_hFile, (LONG)m_iAllocinfo – 1, &iHi, CFile::begin);
    if(dwPtrLow == INVALID_SET_FILE_POINTER)
    {
    theApp.downloadqueue->m_bAlloctThreadRunning = false;
    PostMessage(theApp.emuledlg->m_hWnd,TM_FILEALLOCEXC,(WPARAM)myfile,(LPARAM)GetLastError());
    }else
    {
    WriteFile(myfile->m_hpartfile.m_hFile, “A”, 1, &dwPtrLow, NULL);
    //SetEndOfFile(myfile->m_hpartfile.m_hFile);
    }

    theApp.downloadqueue->m_bAlloctThreadRunning = false;
    myfile->m_AllocateThread=NULL;
    }

    void CDownloadQueue::Process(){
    .

    if(TotalBuffer > thePrefs.m_uGlobalBufferSize && m_bAlloctThreadRunning == false)
    {
    const DWORD curTick = ::GetTickCount();
    POSITION pos = filelist.GetHeadPosition();
    while(pos)
    {
    CPartFile* cur_file = filelist.GetNext(pos);
    if(cur_file
    && cur_file->m_bPreviewing == false
    && cur_file->m_nNextFlushBufferTime == 0
    && cur_file->m_nTotalBufferData
    && cur_file->GetStatus() != PS_INSUFFICIENT
    && cur_file->GetStatus() != PS_ERROR)
    {
    cur_file->m_nNextFlushBufferTime = curTick;
    TotalBuffer -= cur_file->m_nTotalBufferData;
    if(cur_file->FlushBuffer2(false) == -1)
    {
    m_bAlloctThreadRunning = true;
    TotalBuffer += cur_file->m_nTotalBufferData;
    break;
    }
    TotalBuffer += cur_file->m_nTotalBufferData;
    }
    }
    }
    theApp.emuledlg->transferwnd->ShowBufferUsage(TotalBuffer);

    // [TPT] – Patch
    if (theApp.serverconnect->IsUDPSocketAvailable())
    {
    if ((!lastudpsearchtime) || (::GetTickCount() – lastudpsearchtime) > UDPSERVERREASKTIME)
    SendNextUDPPacket();
    }
    }
    //end – Maella -New bandwidth control-
    CheckDiskspaceTimed();
    }

    由於不再每15秒檢測完成塊,退出程序時主動做一下保存:

    void CemuleDlg::OnClose()
    {
    .

    theApp.m_app_state = APP_STATE_SHUTTINGDOWN;

    for (POSITION pos = theApp.downloadqueue->filelist.GetHeadPosition();pos != 0;) // X: [ISS] – [Improved Source Save]
    {
    CPartFile* file = theApp.downloadqueue->filelist.GetNext(pos);
    if(!file->IsStopped())
    {
    file->m_sourcesaver.SaveSources();
    file->FlushBuffer2(true);
    }
    }

    // X: queued disc-access for read/flushing-threads
    theApp.m_DiscAccessQueue.stop();

    .

    基本上就這樣,聲明/構造/析構之類酌情補上就行了。

  21. #21 ahaha
    2012年2月13日 周一 19:34 | 回復

    關於分配磁碟空間時UI假死的處理,我那個”return”僅僅是當時隨手改改的權宜之計。
    在隊列里有多個文件同時需要分配時現在的處理依然會造成假死的,
    下面給出一個比較全面徹底的解決方案,順便重寫一個我自己用的寫盤過程,
    代碼比較簡單粗暴,但是UI操作絲般柔滑, 😳 希望作者看了有所啟發。 😆

    int CPartFile::FlushBuffer2(bool forcewait)
    {
    //if (m_FlushSetting)
    //{
    // if (forcewait)
    // {
    // m_FlushSetting->evTerminated.wait();
    // FlushDone();
    // }
    // else return 1;
    //}

    //Xman Flush Thread improvement
    bool forcedbecauseincreasing=false;
    //Xman end

    // SLUGFILLER: SafeHash
    if (forcewait) { // Last chance to grab any ICH results
    Poco::FastMutex::SingleLock sLock(ICH_mut, true); // ICH locks the file – otherwise it may be written to while being checked
    ParseICHResult(); // Check result from ICH
    }
    // SLUGFILLER: SafeHash

    try
    {
    bool bCheckDiskspace = thePrefs.IsCheckDiskspaceEnabled() && thePrefs.GetMinFreeDiskSpace() > 0;
    ULONGLONG uFreeDiskSpace = bCheckDiskspace ? CVolumeInfo::_GetFreeDiskSpace(GetTempPath()) : 0;

    // Check free diskspace for compressed/sparse files before possibly increasing the file size
    if (bCheckDiskspace && !IsNormalFile())
    {
    // Compressed/sparse files; regardless whether the file is increased in size,
    // check the amount of data which will be written
    // would need to use disk cluster sizes for more accuracy
    if (m_nTotalBufferData + thePrefs.GetMinFreeDiskSpace() >= uFreeDiskSpace)
    AfxThrowFileException(CFileException::diskFull, 0, m_hpartfile.GetFileName());
    }
    uint64 crrentEnd = m_BufferedData_list.GetTail()->end;
    if (m_hpartfile.GetLength() = uFreeDiskSpace)
    AfxThrowFileException(CFileException::diskFull, 0, m_hpartfile.GetFileName());
    }

    if (!IsNormalFile() || uIncrease<2097152)
    {
    //Xman Flush Thread improvement
    if(!forcewait) forcedbecauseincreasing=true;
    //Xman end
    forcewait=true; // alloc it at once
    } //Xman

    // Allocate filesize
    if (!forcewait)
    {
    m_AllocateThread = new AllocateSpaceThread(this, newsize);
    if(m_AllocateThread->start())
    {
    return -1;
    }
    else
    {
    m_AllocateThread = NULL;
    TRACE(_T(“Failed to create alloc thread! -> allocate blocking\n”));
    forcewait=true;
    }
    }
    if (forcewait)
    {
    bIncreasedFile = true;
    // If this is a NTFS compressed file and the current block is the 1st one to be written and there is not
    // enough free disk space to hold the entire *uncompressed* file, windows throws a ‘diskFull’!?
    if (IsNormalFile())
    m_hpartfile.SetLength(newsize); // allocate disk space (may throw ‘diskFull’)
    }
    }
    }
    catch (CFileException* error)
    {
    FlushBuffersExceptionHandler(error);
    }
    #ifndef _DEBUG
    catch(…)
    {
    FlushBuffersExceptionHandler();
    }
    #endif

    m_nNextFlushBufferTime = 0;// X: [GB] – [Global Buffer]
    size_t partCount = GetPartCount();
    bool *changedPart = new bool[partCount];
    // Remember which parts need to be checked at the end of the flush
    for (size_t partNumber = 0; partNumber 0)
    {
    PartFileBufferedData *item = m_BufferedData_list.RemoveHead();
    uint32 lenData = (uint32)(item->end – item->start + 1);

    // SLUGFILLER: SafeHash – could be more than one part
    for (uint_ptr curpart = (uint_ptr)(item->start/PARTSIZE); curpart end/PARTSIZE; curpart++)
    changedPart[curpart] = true;
    // SLUGFILLER: SafeHash

    m_hpartfile.Seek(item->start, CFile::begin);
    m_hpartfile.Write(item->data, lenData);

    // Decrease buffer size
    m_nTotalBufferData -= lenData;

    // Release memory used by this item
    delete [] item->data;
    delete item;
    }

    //Creating the Thread to flush to disk
    m_FlushSetting = new FlushDone_Struct;
    m_FlushSetting->bForceICH = false;
    m_FlushSetting->changedPart = changedPart;
    if (forcewait == false || forcedbecauseincreasing==true) //Xman Flush Thread improvement
    {
    CPartFileFlushThread *flushThread = new CPartFileFlushThread(this);
    // X: queued disc-access for read/flushing-threads
    theApp.AddNewDiscAccessThread(flushThread);
    return 2;
    }

    // Or flush normally
    try
    {
    m_hpartfile.Flush();
    }
    catch (CFileException* error)
    {
    FlushBuffersExceptionHandler(error);
    delete[] changedPart;
    delete m_FlushSetting;
    m_FlushSetting = NULL;
    return -2;
    }

    FlushDone();
    changedPart = NULL;
    return 0;
    }

  22. #22 allix
    2012年2月14日 周二 16:17 | 回復

    這個mod不顯示旗幟嗎

  23. #23 ahaha
    2012年2月14日 周二 18:50 | 回復

    @allix
    檢查config目錄下countryflag32.dll文件

  24. #24 ahaha
    2012年2月14日 周二 18:59 | 回復

    關於分配磁碟空間時UI假死的處理,我那個”return”僅僅是當時隨手改改的權宜之計。8O
    在隊列里有多個文件同時需要分配時現在的處理依然會造成假死的。
    現在提供一個徹底解決的思路給作者。
    這裡不讓貼圖,貼代碼超出長度,傳到115了。

    這個包里附帶一個編譯好的64位執行文件,是我自己在用的,
    包含所有更改,請有興趣的網友也測試下

    X.rar

  25. #25 ahaha
    2012年2月14日 周二 19:16 | 回復

    忘了條:eMule完全可以自己清除「KAD通過防火牆」
    上傳隊列調度加一行代碼:

    else if (sec==5) {
    sec=0;
    theApp.downloadqueue->ProcessQuickStart(); // NEO: QS – [QuickStart] UpdateMaxClientScore();
    if (thePrefs.IsSchedulerEnabled())
    theApp.scheduler->Check();
    if (Kademlia::CKademlia::IsFirewalled())
    Kademlia::CKademlia::RecheckFirewalled();

    }

  26. #26 Ejack
    2012年2月15日 周三 06:52 | 回復

    @ahaha
    ……你這樣會把真LowID用戶搞死的……死循環。

  27. #27 allix
    2012年2月15日 周三 09:58 | 回復

    X Mod 的反吸血應該安裝在什麼文件下,好像config下不起作用 。另外誰有風之痕的反吸血最新版本?

  28. #28 Solitudes
    2012年2月15日 周三 10:15 | 回復

    @allix
    X Mod 的反吸血放在程序的根目錄下。
    風之痕的DLP+已經N年不更新了。

  29. #29 allix
    2012年2月15日 周三 10:40 | 回復

    @Solitudes 根目錄上也放了,還是沒有!

  30. #30 allix
    2012年2月15日 周三 11:01 | 回復

    @Solitudes
    @allix 現在好了 ,能用了,謝謝! 👿

  31. #31 allix
    2012年2月20日 周一 15:31 | 回復

    為什麼我的版本號下了eMule v0.50a X Mod v1.6.1.2,顯示還是eMule v0.50a X Mod v1.6.1.1.
    而且「不要上傳給吸血客戶端」不能勾選,是灰色的?

  32. #32 allix
    2012年2月20日 周一 15:36 | 回復

    [IMG]http://p.tzqq.org/dm-QXYD.jpg[/IMG]就是這個樣子的!不知道大家是什麼樣子的?

  33. #33 allix
    2012年2月20日 周一 15:37 | 回復

    2 Logo

  34. #34 相忘於江湖
    2012年2月20日 周一 16:34 | 回復

    @allix
    版本號的問題:程序裡面只顯示3位數。要查看詳細版本號的話,打開emule安裝目錄,右擊eMulex64.exe文件查看屬性就能看到完整的版本號了。

    「不要上傳給吸血客戶端」不能勾選的問題:如果你自行更新了DLP的話就不能啟用。必須使用程序集成的DLP才能啟用這個選項。(這個是為了防止載入某些不正規的DLP變成吸血騾)

  35. #35 allix
    2012年2月21日 周二 17:18 | 回復


    為什麼我在家裡的這兩欄不見了

  36. #36 allix
    2012年2月21日 周二 17:21 | 回復


    為什麼我在家裡裝上emule,反吸血日至這兩欄怎麼不見了?是不是哪裡需要設置?

  37. #37 allix
    2012年2月21日 周二 17:22 | 回復
  38. #38 ddku
    2012年2月21日 周二 17:39 | 回復

    @allix 擴展設置,開啟verbosehttps://www.emulefans.com/extended/

  39. 2012年2月22日 周三 08:54 | 回復

    現在用XPE 😀

  40. #40 fun
    2012年2月25日 周六 14:49 | 回復

    裝上卸了重新用 xtreme 了。容易崩潰,伺服器掉線後,所有伺服器如果連不上,kad 為什麼也會掉啊?
    發現導入文件塊的功能也沒有了,如果崩潰後損壞文件就比較麻煩,還是用穩定的吧。

  41. #41 xrdsht
    2012年3月11日 周日 21:39 | 回復

    以前用32位都有國旗,現在改用64位卻不能載入國旗了,有人知道原因嗎

  42. #42 yangworm
    2012年3月12日 周一 16:40 | 回復

    確實 我的也沒有國旗啊,請高手指點啊

  43. #43 yangworm
    2012年3月13日 周二 09:28 | 回復

    64位的主程序文件版本顯示還是1.6.1.1,而且無法載入國旗

  44. 2012年4月8日 周日 14:19 | 回復

    以前用過,發現上傳優先順序的設置是擺設
    現在這個版本解決這個問題沒有?

  45. #45 jin
    2012年4月10日 周二 00:50 | 回復

    試用結果是在完成文件的時候死機……幾個g的文件白下了

  46. #46 cc
    2012年4月18日 周三 23:06 | 回復

    這個mod挺小巧的

  47. #47 沙漠上的妖精
    2012年5月19日 周六 12:03 | 回復

    我在學校內網完全無法連接EDONKEYNO2,在家裡ADSL一連就連上了T_T

  48. #48 沙漠上的妖精
    2012年5月19日 周六 12:27 | 回復

    我丟!解壓運行下個XTREME而已,仲么將我個XMOD洗佐,頂你個肺啊!!!!!我D設置同埋積分文件啊啊啊啊啊你老味啊!!!!!!!!!!!
    佢老母啊!!!!!!!!!!!!!!!!

  49. #49 阿德
    2012年5月19日 周六 22:37 | 回復

    @沙漠上的妖精 應該不會丟失的,找到config目錄就有救

  50. #50 netr66
    2012年7月7日 周六 14:54 | 回復

    今天剛試用X86版,發現一個小BUG,在搜索窗輸入關鍵字按搜索後,在結果顯示窗出現兩排表頭欄,有顯示殘留。

共2頁12下一頁

發表評論

您的Email將不會顯示出來。頭像請至Gravatar.com註冊上傳。*號標註項為必填。

*
*
*
標籤用法
字數:0