新問題!CSO 自動更新編寫問題 (源馬來自n3大發的文章)

Home Home
引用 | 編輯 zsx123665
2012-05-24 14:09
樓主
推文 x0
Help,我在這看到n3大大所發的文章感到興趣,在加上LS版主也希望增 ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 ebolaman
2012-05-24 21:49
1樓
  
增加什麼功能?

我之前設計是 利用 FTP 自動檢查更新,但之前除錯功能設計的不是很好



錯誤應該是這行 :

            'Copy file
            My.Computer.FileSystem.CopyFile(dataDir & "CS_Update" & cData.listUpdate(l), curDir & cData.listUpdate(l), True)

動作就是把 已經下載解壓的檔案複製到 目前資料夾下的 目錄更新

cData.listUpdate(l) 應該是一串 Path

很有可能是找不到檔案或資料夾路徑 才會發生錯誤



可是為什麼 Win7 沒有錯誤 WinXP 就有錯誤

很有可能是因為先前解壓動作失敗,導致要複製時,來源檔案 (Source files) 不存在,到這步驟才錯

因為是利用 WinRAR 去幫忙解壓縮,總歸原因可能是 WinRAR 找不到下載回來的暫時 RAR 檔案

詳細情況就不知道



有時間的話有可能我會把整個 專案 重修一次

如果希望增加什麼額外的功能可以說一下

獻花 x1
引用 | 編輯 zsx123665
2012-05-25 08:41
2樓
  
現在問題又多一個,就是它更新時會跑出"2"?
我判斷可能是他偵測重複檔案時會跳出,而下載的新檔卻不能取代舊檔
請幫我看看,專案有更新

獻花 x0
引用 | 編輯 ebolaman
2012-05-25 23:53
3樓
  
下面是引用 zsx123665 於 2012-05-25 08:41 發表的 : 到引言文
現在問題又多一個,就是它更新時會跑出"2"?
我判斷可能是他偵測重複檔案時會跳出,而下載的新檔卻不能取代舊檔
請幫我看看,專案有更新



打開 專案的 frm_main.vb

找到 local_new_dl() 這個函數


裡面有一行 (應該是第 355 行,可以點 Edit -> Go to)

MsgBox(cData.listHash.Count)

▲ 把這一行刪掉就可以解決跑出 "2" 的訊息視窗



這應該是我之前 Debug 忘記刪除掉的指令

以前程式碼風格寫的很糟糕... >_<

獻花 x1
引用 | 編輯 zsx123665
2012-05-26 00:06
4樓
  
下面是引用 ebolaman 於 2012-05-25 23:53 發表的 : 到引言文




打開 專案的 frm_main.vb

找到 local_new_dl() 這個函數


裡面有一行 (應該是第 355 行,可以點 Edit -> Go to)

MsgBox(cData.listHash.Count)

▲ 把這一行刪掉就可以解決跑出 "2" 的訊息視窗



這應該是我之前 Debug 忘記刪除掉的指令

以前程式碼風格寫的很糟糕... >_<



可否教我如何寫vb 因為我還是初學者(有買書讀過,但是不懂 = =)
雖然我朋友認識n3,而且也留過言請他教我,但是他因為要考試,所以無法上
and 能否寫出一個比較完美的遊戲啟動器給我們 @@?
或者給我一些簡單的專案讓我研究
順帶一提,n3的自動更新你知道它是哪的FTP嗎??

獻花 x0
引用 | 編輯 n3ph223172
2012-05-26 03:14
5樓
  
其實,搞自動更新的功能,會卡太久。。

獻花 x0
引用 | 編輯 zsx123665
2012-05-26 10:17
6樓
  
下面是引用 n3ph223172 於 2012-05-26 03:14 發表的 : 到引言文
其實,搞自動更新的功能,會卡太久。。



是n3大 @@
Hi ^^
其實我記得你們CSO-NST UE 有成功過,只是我算初學,所以很多不懂的地方
期盼n3大您指導我。

獻花 x1
引用 | 編輯 ebolaman
2012-05-26 13:23
7樓
  
n3 講的沒錯

這個啟動器每次都要上網檢查更新版本,而且我做的不是很好,FTP 下載常會當掉

所以我看乾脆這樣好了,把這個啟動器改的簡單一點,就用 HTTP 直接檢查版本數據,版本不同直接提示是否更新,然後使用者自行連到官網下載,而不要透過啟動器


另外,這個啟動器只是在模擬 "CSO" 的啟動器

如果是 CS 其他版本 (現在到底有哪幾個開發版本? 我只知道 BTE),如果要有自己的遊戲風格的話

就該設計另外一套啟動器


如果真的要讓啟動器做得很好

還要考慮到遊戲本身的檔案配置,周遭的環境,遊戲的需求...等等

獻花 x2
引用 | 編輯 zsx123665
2012-05-26 15:43
8樓
  
那好吧 我自己設計完美的
我有一本vb2010的書,看過後比較懂了,謝謝您們的幫忙

獻花 x0
引用 | 編輯 n3ph223172
2012-05-26 16:06
9樓
  
其實我碰CSO,不單單只有台服,總共6大服都有碰(韓、日、台、陸、新馬、印尼)
而我BTE負責的是破解素材還有其他東西
每當我破解韓服的時候
其實,因為VPN關係我等了很久
但我也發現到了CSO更新的原理
開啟啟動器後,會先從伺服器接受更新資訊
進而更新ClientRegistry.blob
然後我發現到的是,CSO不是一次就把更新下載完
如果太久沒更新,更新的時候常常會說:cstrike_tw.nar下載中(3個)之類的
所以我認為更新那個檔案,其實就是告知啟動器要下載哪些檔案
所以我認為如果要在弄一個
不要弄索引檔(index.txt)在FTP之上
先設定啟動器要在FTP上接受哪個資訊檔案,資訊檔案內容最好是加密,進而告知啟動器要下載哪些
這個資訊檔案可能這樣:
[update1]
mp.dll
client.dll
hw.dll

[update2]
mp.dll
client.dll
hw.dll
GameUI.dll
cstrike\models\v_ak47.mdl

先下載第一個更新的檔案,在繼續第二個
又或者採用打包的方式:
[update1]
CS:BTE_Update1.bte

[update2]
CS:BTE_Update2.bte

之類的
最好可以搞個獨立解壓程序之類的
不然也可改成rar,然而下載出來的檔案單檔請直接放對應目錄,如果是打包的就放遊戲主目錄等候解壓
之類的其實都可以

獻花 x0
引用 | 編輯 ebolaman
2012-05-26 17:15
10樓
  
下面是引用 n3ph223172 於 2012-05-26 16:06 發表的 : 到引言文
其實我碰CSO,不單單只有台服,總共6大服都有碰(韓、日、台、陸、新馬、印尼)
而我BTE負責的是破解素材還有其他東西
每當我破解韓服的時候
其實,因為VPN關係我等了很久
但我也發現到了CSO更新的原理
.......


OK

也就是說,把之前的 index.txt 改成

直接告知啟動器 "必須" 更新哪些檔案



這樣做的話,必須在客戶端(使用者) 的 CS 資料夾內存放 "目前版本" 的資訊

程式上 FTP 檢查,發現與最新版本不同的話

才來尋找對應的版本  ,的更新檔案


例如 :

使用者 v1.0
伺服器的 index.txt 如下 :

複製程式
[Update]
Version = 1.1

\mp.dll
\cstrike\addons\plugins\test.amxx


[Update]
Version = 1.0

\hw.dll


[Update]
Version = 0.9

\maps\de_test.bsp
\maps\de_test.nav




如果使用者已經 v1.1 就無須更新

v1.0 就要下載更新

假如是 v0.8 那麼就 v0.9, v1.0, v1.1 一個一個順序地更新



有版本資訊的話,就不用像以前設計的,每次開程式都要檢查檔案的 MD5



解壓的過程是呼叫 WinRAR 來幫忙解壓,這部分我到時候看看可不可以找到 解壓程式碼,設置一個 自己的執行檔來幫忙解壓

應該可以避免掉有些 作業系統 找不到 WinRAR 的問題


最近學業也非常忙碌,我看可能要等到暑假才能好好做這個啟動器了

獻花 x1
引用 | 編輯 zsx123665
2012-05-26 17:28
11樓
  
我想要讓它偵測 Dtat/ver.txt 的md5 與Ftp是否符合
若不符合下載 http://sites.google.com/site/whwnsuntea/Files/LS_Upgrade.exe  到啟動器路徑

新啟動器載點 

獻花 x0
引用 | 編輯 n3ph223172
2012-05-26 17:42
12樓
  
下面是引用 ebolaman 於 2012-05-26 17:15 發表的 : 到引言文


OK
也就是說,把之前的 index.txt 改成
直接告知啟動器 "必須" 更新哪些檔案
.......
說的沒有錯
但,如果要採這樣單檔制的話
其實所謂的壓縮也就沒必要了
如果今天要像CSO那樣,cstrike.nar.187719655(之類的自訂封裝格式)
其實壓縮才有這必要
複製程式
[Update]
Version = 1.1

\cstrike.bte1001

[Update]
Version = 1.0

\cstrike.bte1002
其實就類似這樣
同時要比對一下壓縮檔內的檔案是否與客戶端上的相同,如果不相同,則這更新將在執行一次
不過我想沒必要這樣
畢竟CSO單機版又不是CSO,有商業性,有版權等,沒必要什麼東西禁止修改
然後如果缺少檔案,在一次執行更新,但還要先檢查你的版本是幾版的,這其實弄起來比較麻煩,我自己現在打文章,其實我也打的頭花花的,不曉得怎麼說明
大致上就是這樣子吧

獻花 x0
引用 | 編輯 zsx123665
2012-05-27 05:18
13樓
  
下面是引用 n3ph223172 於 2012-05-26 17:42 發表的 : 到引言文

說的沒有錯
但,如果要採這樣單檔制的話
其實所謂的壓縮也就沒必要了
如果今天要像CSO那樣,cstrike.nar.187719655(之類的自訂封裝格式)
其實壓縮才有這必要
複製程式
[Update]
Version = 1.1

\cstrike.bte1001

[Update]
Version = 1.0

\cstrike.bte1002
其實就類似這樣
同時要比對一下壓縮檔內的檔案是否與客戶端上的相同,如果不相同,則這更新將在執行一次
不過我想沒必要這樣...



您們說的都已經超乎我的邏輯了 表情,我只有想到簡單的ver.txt的md6與index的md5比較
您們卻想到了更好的辦法(其實我也有想到過表情 只是我不確定能否做出來,所以我沒提出這建議)

獻花 x1
引用 | 編輯 A2737612
2013-01-02 10:32
14樓
  
拿去看看

獻花 x0
引用 | 編輯 iamboss123
2014-01-12 13:46
15樓
  
直接下更新包 自己替換呗

獻花 x0