トップページgamedev
51コメント19KB

自動アップデーター作ろうぜ

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2005/09/12(月) 23:12:38ID:2tYoBBto
今やMMOならどれも実装されている自動アップデータプログラム。
(オートパッチプログラムとか起動パッチメニューとか言われてる)

そんな起動前に自動で更新してくれるプログラムを作ろう!
MMOを作ってる人は居るけど更新は手動が多い。

作るとしたらパッチプログラムでパッチ終了後にゲーム起動型の方が楽かな?
(主にRagnarokとかに見られる形式)

告知はhttp形式表示までは出来た。
FTPでパッチファイルをDLするのでそこを今作っているところ。
言語はC言語。

流れで言うと、ローカルファイルのCRCチェックなどをする。⇒Verとか違えばパッチDL
DLしたパッチを解凍しながらパッチ作業?
全部解凍終わったりしたらゲーム開始ボタンに切り替えてゲームを開始できるようにする。
その際、ゲームにはコマンドライン起動でコマンドラインが正しくないと起動しなくしておく。

Ragnarokのようなアップデートプログラムって構造どうなってるんだろう?
0002名前は開発中のものです。2005/09/12(月) 23:33:16ID:gZtM/H0a
で、何を議論するの?
0003名前は開発中のものです。2005/09/12(月) 23:49:05ID:ZDp1Jnu4

delphiでMMO
http://pc8.2ch.net/test/read.cgi/gamedev/1072515100/l50
MMORPGをHSPで作りたいな
http://pc8.2ch.net/test/read.cgi/gamedev/1084241527/l50
【フリー】Vista(ぉ)【mmo】
http://pc8.2ch.net/test/read.cgi/gamedev/1125872241/l50
【】 舞台が現代のMMO 【】
http://pc8.2ch.net/test/read.cgi/gamedev/1121598587/l50
MMOのサーバ(ハード)の構成ってどうなってるの?
http://pc8.2ch.net/test/read.cgi/gamedev/1030001678/l50
純和風MMOを作ろう
http://pc8.2ch.net/test/read.cgi/gamedev/1123562197/l50

0004Z2005/09/12(月) 23:59:44ID:c9ru9cEq
そーユープログラムあったら便利化も確かに。
つくったらどっかにうpしてくり
でわ健闘を祈る。
ちなみにラグナロクやった事ないからわからんが何か特殊な事でもあるのか?
大抵のやつは二段階でゲーム起動して最初のほうでバージョン確認して自動更新、だと思うが。
0005名前は開発中のものです。2005/09/13(火) 00:18:00ID:rrrfvQau
ゲームじゃないけどバージョンUP通知だけで、ホームページのリンクを表示させてる。
広告のクリック率UPのために。
欠点は、Vectorの順位があがらんことだな。
0006名前は開発中のものです。2005/09/13(火) 01:42:10ID:z0QszSE5
とりあえず機能のON/OFFとロールバックは出来るようにしておかないと
環境依存のバグとかで困っちゃう人が続出するんだろうな。
0007名前は開発中のものです。2005/09/13(火) 01:55:47ID:uQvWlZ47
>>6 単なる思いつきなんだけど・・・
subversion(またはCVS)を利用してバージョン管理しつつアップデートするなんてのは無理なんだろうか?
サーバー側にあるファイルのバージョンとローカルにあるバージョンの整合性なんてのは
全てSubversionクライアントにお任せにしておいて、ゲーム用のフロントエンドさえ作れば
それでほぼ作業は終了するんじゃないかと思うけど。。。(自信なし)

こういう、自動アップデート用にバージョン管理ソフトを活用するのって前例ないのかな?
0008911 ◆RfGLxICaUo 2005/09/13(火) 02:59:58ID:ul4COW/u
【フリー】Vista(ぉ)【mmo】 のものですが…これは結構簡単だと思います。
要はMD5などの構造ハッシュで確認していけばよいと思います。
(リスト作ればなお確実だと思います。)
0009911 ◆RfGLxICaUo 2005/09/13(火) 03:11:11ID:ul4COW/u
あ、普通に上に書いてあった。ごめんなさい。
自分が試みている方法としては・・・
1.Ver管理鯖の接続・比較・判定。
2.合っていない物をキャッシュには残す。そして正常なものをダウンロード。
3.完了したらキャッシュ消す。そして1へ。(繰り返す)
4.ファイルの整合性を判断する。
5.Ver管理鯖の切断。ゲーム起動へ。

ver判断できないものやユーザーが足したものは除外する。
そのためにリストは必須となるかもです。
0010名前は開発中のものです。2005/09/13(火) 10:49:58ID:Qr5OicnF
市販ゲームのほとんどは以下の構造になってるっぽ。

http鯖
告知情報のテキストファイル
ファイルリスト。番号/ファイル名みたいなリストが一行ずつ入ってる。
自分が当てた番号より上の番号のファイル名を落とす為に使ってるっぽ。

FTP鯖
番号のファイル名をぎっしりと置いてる。ここからDLするっぽ。

告知情報とファイルリストをhttpから取得したら
番号が正しいかチェック。大きい番号があればそこから1つずつDLしていく。
全部のDLが終わった時点で暗号化されてるファイルの解凍作業。
解凍して更新して〜終わったらゲーム開始ボタンに切り替え。

リストの番号を保存する設定ファイルを何処かに置いておけば良いかも。

漏れも自動アップデータには興味あるんで協力するぽ!
0011名前は開発中のものです。2005/09/13(火) 14:18:40ID:C7EEi57n
FTPだけじゃなくHTTPにおいてあるのも落とせるようにしてください。
FTPたてられないとこもあるんで。
0012名前は開発中のものです。2005/09/13(火) 14:59:31ID:Qr5OicnF
大抵のゲームのアップデータは
告知情報を全部txtで一旦ローカルに保存してそれを読み込み表示してる。

とりあえずhttp鯖のtxtをローカル保存して告知EDITに出させるまで出来たところ。
意外とここまでは簡単だった。CreateWindowでダイアログ置いてるから遅いのが難点。
MFCとかできちんと作ったほうが良いのだろうか?MFCで作ってる人のサンプルが欲しい。
リスト読み込みもローカル保存して読み込む形で作れば良いので問題は無いんだけど
圧縮したパッチをDLして解凍してパッチを当てる作業を作るのが困難な気がする。
>>9の言う通りキャッシュ方式でやったほうが良いのだろうかorz

案外難しく思えてきた。
0013名前は開発中のものです。2005/09/13(火) 22:07:08ID:Qr5OicnF
今作ったところまで。
ttp://www.uploda.net/cgi/uploader1/index.php?dlpas_id=0000028635
DLパス autopatch

Ragnarokっぽく告知情報表示。ダイアログベースでやってみた。
0014名前は開発中のものです。2005/09/13(火) 23:03:29ID:C7EEi57n
いいかんじですね、期待age
0015名前は開発中のものです。2005/09/14(水) 21:15:28ID:1Ek5TWZc
起動状態管理プログラム/アップデーター/ゲーム本体

これらは分離しておくんだよな?
1.管理プログラムはアップデーターを起動して終了
2.アプデーターがパッチを確認
3.更新があればDLして本体やデータを上書き
4.更新が無ければ管理プログラムに状態を通知しつつ(引数で渡す?)自分は終了
5.管理プログラムは本体を実行して終了

みたいな構造の方が色々都合よいような。
ただし、アプデタ自体のパッチは無理。
仮にアップデート鯖が移転したらその時はアプデタ自体を手動でDLしてもらうとか。
0016名前は開発中のものです。2005/09/17(土) 11:29:18ID:Thf71zGo
あげ
0017911 ◆RfGLxICaUo 2005/09/18(日) 05:07:03ID:TeKse9sl
>>15
アップデータもやろうと思えば出来ると思います。
本体が起動したらアップデータが起動できないようにして、本体からアップデートする選択肢をつけるとか?
そうすれば基本的には別々なので可能かなと。(もちろんロビーのみの選択肢です。)

結局、同人で作ることにしたので・・・1から作り直すことにしました。orz
自動アップデート部分を設計してるのでこの話題をしたいなと。
0018名前は開発中のものです。2005/09/18(日) 06:18:16ID:G/vO4KGr
そもそも一番最初にゲームを起動したときに起動するプログラムを
ゲーム本体ではなくあっぷでーと確認プログラムにして、
アップデートファイルを取ってきたらプログラムディレクトリにコピーすればよいだけなんじゃないかなと。
0019名前は開発中のものです。2005/09/18(日) 11:42:50ID:2yuZpHPm
完成したら凄そうだし、ライセンス次第でうちのゲームにも使わせて欲しいけど、
本当に完成するのかな。
0020名前は開発中のものです。2005/09/22(木) 21:44:25ID:zqPjLJHl
FTPってファイアウォールどうすんの?
アクチブモードとかいうので通れるんだっけ?
0021名前は開発中のものです。2005/09/22(木) 21:50:31ID:wCHVkPoZ
パッシブモード?
0022名前は開発中のものです。2005/09/22(木) 22:35:35ID:zqPjLJHl
1.ファイル毎にリソースIDを振る
2.パッチIDのみ書いたファイルと、リソースIDと最新更新情報をリストしたファイルを用意
3.鯖側はダウンロードファイルを用意する
  また、パッチIDの差が1のみの時用に差分をZIPファイルで用意し
  ZIPファイルに入っているリソースIDを記した更新情報ファイルを用意する
4.クライアントはパッチ更新ファイルを起動プログラムをして起動する
5.パッチ鯖に接続し、パッチIDを送信する
6.パッチ鯖の返答が同値ならそのままゲーム起動
  差が1なら項番8へ
  差が2以上なら更新情報ファイルをダウンロード
7.更新情報ファイル内のIDを除外したリソースIDと最終更新時刻をパッチ鯖に渡す
8.最終更新時刻が同値でないリソースIDに対応するファイルをダウンロードする
9.ZIPファイルをダウンロードし、展開する
10.クライアントのパッチIDを更新し、リソースIDが追加されていれば追加する
11.ゲーム起動

面倒ならZIPの部分ははしょっちゃばいい
0023名前は開発中のものです。2005/09/23(金) 12:31:28ID:kEwJUHct
パッチの差が1の差分とかいらんくね?
細かい差分とか個人で用意するのも面倒。

1.ローカルの更新日付以降にアップされているファイルをダウンロード
2.展開して上書き
3.本体起動

これだけでいいと思うんだが。
あとFTPで話がすすんでるけど、ホームページにパッチ置いときたいんで
普通にサイトから落とすようにもしてもらったがいい。
0024名前は開発中のものです。2005/09/23(金) 12:49:43ID:jRirPaSl
ファイル改変されてたときにも落としたほうがいいと思う。
更新日じゃ信用ならん。
起動時にCRCとかMD5とか取って一致しなかったら落とすとか。
1.鯖からファイルリスト落とす。
2.ローカルファイルとファイルリストに記入されたCRC32が一致しなかったら落とす。
 ファイルリストに記入されているがローカルに無いファイルを落とす。
3.本体起動

で作ってたけどマンドクセ('A`)
0025名前は開発中のものです。2005/09/24(土) 09:53:59ID:TvJSD4bz
 
0026232005/09/24(土) 13:45:29ID:i80XHvVQ
http://venus.aez.jp/uploda/index.php?dlpas_id=19029
pass 23

頼んでばかりじゃあれなので、突貫工事で作ってみた。
http専用。

1.鯖からファイルリストと告知事項落とす
2.ローカルファイルとファイルリストのZIPナンバーを比較して落とし何も考えずに展開
3.本体起動

スレッド処理してないんで、表示やばい。
どうせ使わないならと手抜きで、ZIPファイルの日付が展開した時になる(ぉ
動作するだけってことで。
0027名前は開発中のものです。2005/09/24(土) 15:28:14ID:dLO983Mz
0028名前は開発中のものです。2005/09/28(水) 22:29:37ID:EXqoT11E
興味湧いたので自分も作ってみた。
ttp://zeroichi.syuriken.jp/aupd005.zip
昔作ったSHA1求めるやつがあったのでそいつを使いまわした。
書庫はCAB形式。ただ cab32.dll が必要。
いまのところ使えるのは http のみ。

告知事項はテキストだけっつーのも味気ないから
ブラウザコントロールはっつけて告知ページにアクセスする
ようにしてみたんだが…
0029名前は開発中のものです。2005/09/28(水) 23:59:54ID:E1/et2ez
0030名前は開発中のものです。2005/09/29(木) 09:49:15ID:SjnGysTe
GEのCβについてきたiniのサイトに汎用のアップデータのソース転がってるよ。
0031名前は開発中のものです。2005/09/29(木) 19:56:40ID:StMbKT2E
Orz
0032名前は開発中のものです。2005/09/29(木) 21:59:15ID:CW4jBWvN
>>30
どこどこ?
0033名前は開発中のものです。2005/10/01(土) 08:50:43ID:Su1Az0K9
>>32
ttp://www.granadoespada.jp/
ココなんじゃねぇヵ?
0034名前は開発中のものです。2005/10/06(木) 10:33:06ID:/780ejYi
物が出たら一気にさびれたな。
0035名前は開発中のものです。2005/10/06(木) 20:51:50ID:O5CpwYsb
ソースがないといやん
0036名前は開発中のものです。2005/10/08(土) 20:50:53ID:I9q+sPaT
ソース出せよソース。ソース出さないやつは池沼。
誰でも作れるぐらいのプログラムなんだから、出し惜しみするほどのものでもないだろうが。
0037名前は開発中のものです。2005/10/08(土) 21:21:21ID:RUPqj3Wa
誰でも作れるなら自分で作ればよい。
0038名前は開発中のものです。2005/10/10(月) 23:19:23ID:7N4wCogo
>>36
煽りはともかくスルーして、マジでソースだしてください
もしくはどうやったら作れるか教えてください。
まず、HTTPにアクセスするところからわかりません。
0039名前は開発中のものです。2005/10/11(火) 08:43:45ID:K0fdjEru
>38
まずは
猫でもわかるプログラミングを隅から隅まで読んでみよう!
それで、とっかかりが掴めたらぐぐれ
そして試せ
0040名前は開発中のものです。2005/10/12(水) 12:00:51ID:XiMKQK4t
ソース出せとかいうやつ居るけど、漏れはソースなんか見たってわからんので
使えるものをアップしてくれた方が簡単でうれしい。
完璧に使いやすいのを作って、さっさとうぷ汁。
0041名前は開発中のものです。2005/10/13(木) 00:35:27ID:e/av792N
なぜ製作板にいるのか謎な人物出現
0042282005/10/14(金) 08:38:37ID:d7TYFQto
ソースうp
ttp://zeroichi.syuriken.jp/upd05src.zip
VS .NET 2003 形式。
0043名前は開発中のものです。2005/10/15(土) 14:30:36ID:0MdKwTnO
>>42
神乙!
0044名前は開発中のものです。2005/10/16(日) 18:52:51ID:H6H6ejRW
>>38
つ[ヒント]:wininet
0045名前は開発中のものです。2005/10/18(火) 14:39:04ID:OumtTeWk
http://www.vector.co.jp/soft/win95/prog/se211829.html
0046名前は開発中のものです。2005/12/29(木) 12:39:42ID:6k4nWYPU
ほっしゅほっしゅ
0047名前は開発中のものです。2006/02/16(木) 17:44:20ID:Kz1PweCq
>>42
神!
マジ助かったよ。

tora3とかautoUpdaterとかは試してみたんだけど、圧縮無かったり
createrなかったりで躊躇してたとこだった。

ソース改造して、Basic認証対応バージョン作ってみたけど欲しい香具師いる?
作者に引き取ってもらうのが一番いいんだけどね。

0048名前は開発中のものです。2006/08/18(金) 19:41:57ID:4aiLuwl0
age
0049名前は開発中のものです。2006/09/19(火) 01:18:51ID:YIF8z6EM
1ヶ月間書き込みなしか
0050名前は開発中のものです。2006/09/23(土) 00:09:58ID:wIBfzwYV
俺もそのうちDelphiで参戦してよい?
オプーンソースで(NYSLで)
0051名前は開発中のものです。2006/09/26(火) 18:52:18ID:iafxPtyB
すきにしろ
■ このスレッドは過去ログ倉庫に格納されています