2006年2月アーカイブ
1.75 になってから対象へのターゲット行為が辛いなあという声が各所で聞かれている状態。お互いに止まっている状態ならそうでもないのだけれども、動きながら、動いている対象をターゲットするのがきつい。
どうやら今まではマウスを押したタイミングでターゲットできていたのが、離したタイミングでターゲットするようになっているようですね。しかしこれだけが直接的な原因ではないように思う。なにやらマウスによるカメラパンが1キーでできるようになった弊害とかなんとかいう声も。
ということで、ちょっとばかり色々と実験。
まずはマウスによるカメラパン等が行える状態において、ターゲットテスト。
続いてカメラ回りの機能をすべてキーコンフィグレーションから消して、再度ターゲットテスト。
しかしキーコンフィグレーションの有効/無効で起きている話ではないことが判明。どう転んでもターゲットが辛い。
そもそも日本サーバだけで急にこうなったわけではなかろうと思い、本家の方でも話題に上がらなかったのかと探してみる。
http://vnboards.ign.com/daoc_general_board/b5176/82678491/p1
http://vnboards.ign.com/frontiers_discussion_board/b22501/82830174/p1
http://vnboards.ign.com/Hibernia_Naturalist_Professions/b20910/90417256/p1
…どうやらもっと酷いバグがあったようで、そっちのほうに注力しておる。(最後のはちょっと違うけど、1.74/1.75 で変わった旨が書かれていたので。) しかしアチラの方だともっと HOT にこの話題で盛り上がると思うけれども、そうでもない。単にその HOT なスレッドが見つけれなかっただけかもしれないけれども。
少なくとも「早くクリックするようにするんだ!」らしい。
改めて動きながらのターゲッティング練習をしていると、ちょっとしたことがわかった。実際の画像を元に図解にしてみた。
簡単にいうと、動いている画面において、画面上のターゲット対象物と実際のターゲットポイントがずれている。「こいつをターゲットする!」とその対象にカーソルを持っていきクリックすると失敗するけれども、対象にたどり着く手前でクリックすると大抵成功する。
これって、1.75 導入後もすこぶる猛威を揮うラグも原因の1つなのかも?
ちょうどCSR に色々聞いてくれている人が。 ターゲットの話はちょいと眉唾なので置いておくとして、とりあえず疑問に思ったり不具合を感じた場合はフィードバックしておくれ、と言っている。確かに個人のブログやコミュニティボードであれこれいうより本体に意見を送らないと改善はされないというのは非常に最もなお話。
ちょうど本家 Herald で頻繁に行われている Grab Bag (フィードバックに送られた内容を公式に回答) が日本サーバにもやってこようとしている (Chao! Sanya !!) わけだし、ターゲット云々のお話に加えて12月から激しく Laggy な現状を改善してくれ!とみんなで送ったらどうでしょ?
コメントに書いてましたがちょこっと長く、また面白みもあるのでエントリへ。
Maple: SD 3月号から 3.1.0 要素を足してみる
2.3. Action 名の命名規則P.56 (2) の Action 命名ルールにおいて、以下のように読み替えてください。
旧:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Foo_Bar.class.php 」
新:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Bar.class.php 」;; 個人的には modules/Foo/Bar.class.php になるものとばっかり
kunit / 2006-02-20 22:27 「modules/Foo/Bar.class.php」にしたいんですが、そうすると Foo_Bar と Foo_Baz が同じディレクトリにクラスを置くことになり、maple.ini が重なるんですよね・・・ これはもう3系の限界だと思って、ここまでにしてます。
言われてみれば確かにそのとおりだ!全然気づかなかった。
思いついてはいるでしょうが、action 名と共通の bar.ini、baz.ini という風にはどうなんでしょう?
foo_bar_baz というアクションなら
modules/
modules/Foo/
modules/Foo.ini
modules/Foo/Bar/
modules/Foo/Bar.ini
modules/Foo/Bar/Baz.class.php (action class Foo_Bar_Baz)
modules/Foo/Bar/Baz.ini
とでもすることで、コードは煩雑化するものの、各階層ごとに ini 設定も記述できるし、整理ができるような気がせんでもないです。
Action は最初のタイミングで既に決まっているので、foo, bar, baz の分割および異なったファイルを読むのは容易でしょうし。別途 module 全体にかかるような設定ファイルを modules/root.ini とか modules/maple.ini とでもしておけばいいでしょうが、
まあ、言われるとおり、3 系でやるとなると変化がでかすぎますわな。
この辺は generator で勝手にやってくれるようになった部分なので、このままでいこうが、いきなり変えようが、(下位互換とかはとりあえず考えないのであれば)、いろんな意味でどうとでもなる部分。ぱっと見 (ホントにぱっと見。さぼって grep すらしてない ;)) 関わる箇所は ConfigUtil, ActionChain の2つで、ここは base.ini で切り返れる箇所。うちでも patch とかなしでやろうと思えば、できますな。やろうと思えば。
記事こそは 3.0.2 で書いています。基本的には知識の使いまわしはできますが、3.1.0 でちょっと楽できたり+α要素がある部分がありますので、その分を書き出してみました。記事を手元に照らし合わせながら確認してみてください。
1. 「Maple 設定ファイル」の記述
1.1. 設定ファイルの中身について
3.1.0 での追加要素はありますが、記事の説明で基本は問題ないと思います。
1.2. 「文字について」について
3.1.0 において、SCRIPT_CODE, SKELETON_CODE 定数が追加されています。これは共に generator が使用する定数です。generator が EUC-JP で記述されているため、EUC-JP のままでいいでしょう。
2. 「Action クラス」の作成
2.1. PHP コードについて
generator が登場しましたので、Maple の root より、
# php script/generate.php action submit smarty submit myapp
として出来上がるものを リスト3, リスト4, リスト7, リスト8 として扱ってください。
2.2. Setter, Getter の排除
コードの半分を占めていた ;) set**, get** というメソッドは必要なくなりました。
2.3. Action 名の命名規則
P.56 (2) の Action 命名ルールにおいて、以下のように読み替えてください。
旧:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Foo_Bar.class.php 」
新:「foo_bar アクションは modules/foo/bar/ ディレクトリ内の Bar.class.php 」
;; 個人的には modules/Foo/Bar.class.php になるものとばっかり
3. 「テンプレートファイル」の記述
generator によりテンプレートも仮のものが出来上がりますので、それぞれをリスト5, リスト6 に書き換えてください。
テンプレートファイル内で Action クラス内の変数にアクセスする場合、{$action.name} というような配列参照でできるようになっています。この参照できる範囲は Action の public property です。
また、Smarty 自体は必須ではなくなっています。(別のテンプレートの場合は、などというマジ文章はさすがに割愛。)
しまった、先書かれちゃった!
ということで、現在発売中 (のはず。本屋行ってない) の Software Design 2006年3月号に Maple の記事を書きました。是非買ってね!
執筆は年末から年始にかけてのタイミングなので (ちょうど DAoC Movie 1 のエンコード中に書いてたんですな、これが :)) Maple 3.0.2 向けの記事になってますが、Maple の基本をステップバイステップに紹介していて、内部的な動作ではない、外から見えるレベルの基本構造を知るにはよいのではないでしょうか。今だと generate してぱっと雛形ができて、コード量も少なくてよいので、そういう意味ではあちゃーなタイミングであり 3.1.0 コノヤロウ!という思いは秘密にする必要はないと思うのでとりあえず書いておきます (笑) こればっかりはしゃーないわけです。
昔々、内容は全部理解できないけれども読んでいた SD。それに関われるとは思っても見なかったです。機会を下さったまいパパさん、種を下さった kunit さんおよび Maple User & Dev コミュニティの皆さん、そして書く上で裏方的に関わってくれた ITEMAN に感謝します。
movie2-Trailer.avi (DivX, 17MB)
こんなことしてますが私は元気です。
1.75 が入ってターゲッティングのルールが変わったおかげで走りながらのターゲットが辛かったり、サーバが相変わらずラグくて酷い場合なんかは止まってしまうケースも。もうちょっとなんとかならんかのう。
ふといきなり知ろうと思ってやってみた。
とりあえず何も考えず、SC に登場するポイントおよび必要な Imbue をリスト化してみる。
これらポイントは先人の情報により、公式に公開されているややこしいロジックを追いかけずとも即座に書き出すことができる。
imbue 1 2 3 4 5 7 8 9 10 11 12 13 15 16 17 19 20 24 25 28 32 Hit 4 - 12 - 20 28 - 36 - 44 - 52 60 - 68 76 - - - - - Stat 1 - 4 - 7 10 - 13 - 16 - 19 22 - 25 28 - - - - - Resi 1 2 - 3 - - 5 - - - 7 - - 9 - - 11 13 - 15 17 Pow 1 2 - 3 - - 5 - - - 7 - - 9 - - 11 13 - 15 17 Skill 1 - - - 2 - - - 3 - - - 4 - - - 5 - 6
こうしてみると、Hit と Status、また Resist と Pow が同様の遷移をしていることが見て分かる。Resist, Pow テーブルについては、 13 を超えたあたりからかなりの Imbue を必要としていることも。
続いてこれらテーブルを導き出すロジックを考える。テーブルがあるので非常に簡単。
・Hit count = 1..10 Hit = count * 8 - 4 Imbue = Hit / 4 = count * 2 - 1 ・Stat count = 1..10 Stat = count * 3 - 2 Imbue = (Stat + count) / 2 = count * 2 -1 ・Resi, Pow count = 1..2 Resi = count Imbue = Resi * 2 - 2 = count * 2 - 2 count = 3..10 Resi = 2 * count - 3 Imbue = Resi * 2 - 2 = count * 4 - 8 ・Skill count = 1 Stat = count Imbue = count count = 2..7 Stat = count Imbue = (count - 1) * 5
Resist, Pow のだけちょこっと歪。まあ 1, 2 ポイントの SC とかはほとんど稀なので、後者のロジックがメインと考えていいかも。Resist 系中心の SC だと Imbue が溢れて悩むことが多いけれども、それもこのロジックをみれば一目。やっぱ辛い。
最後に完成品の総合 Imbue を導くロジック。これは
Total Imbue = ((Highest Imbue x 2) + (2nd Imbue) + (3rd Imbue) + (4th Imbue)) / 2
である模様。ということで
need resiA = 11
need resiB = 11
need statA = 22
need statB = 22
need hit = 120
で SC を行う場合、2 Parts SC では
Pattern 1
resiA 11, statA 10, statB 13, Hit 60
resiB 11, statB 10, StatA 13, Hit 60
(20 * 2 + 7 + 9 + 15) / 2 = 35.5
(20 * 2 + 7 + 9 + 15) / 2 = 35.5
より
Pattern 2
resiA 7, resiB 5, statA 22, Hit 60
resiB 7, resiA 5, statA 22, Hit 60
(15 * 2 + 15 + 12 + 8) / 2 = 32.5
(15 * 2 + 15 + 12 + 8) / 2 = 32.5
のがごっつぁんということ。複数 Parts に分けれるなら、その欲しいポイントの Imbue が高いものを分けるとお得。count ではなく Imbue であるところに注意。ただし Parts が少ない場合はやむなし。
imoDI
- This package provides a very simple Dependency Injection Container.
o Download
- imoDI-0.3.0.tgz
o Install
Install from pear program:
UNIX:
$ pear install imoDI-0.3.0.tgz
Windows:
$ pear.bat install imoDI-0.3.0.tgz
o Usage
basic and Injection
$container = &new imoDI();
$container->register('Foo', 'stdClass');
$foo = &$container->get('Foo');
$foo->a = 'ABCDEFG'; // $foo is stdClass Object
$container->register('Bar', 'stdClass', 'Foo');
$bar = &$container->get('Bar');
print $bar->Foo->a; // print ABCDEFG.
$container->register('Baz', 'stdClass', array('foo' => 'Foo'));
$baz = &$container->get('Baz');
print $baz->foo->a; // print ABCDEFG.
namespace and Injection
$container = &new imoDI();
$container->register('Foo/Bar/Baz', 'stdClass');
$namespace1 = &$container->get('Foo');
$namespace2 = &$namespace1->get('Bar');
$baz = &$namespace2->get('Baz'); // or $baz = &$container->get('Foo/Bar/Baz');
$baz->a = 'ABCDEFG';
$container->register('Qux', 'stdClass', 'Foo/Bar/Baz');
$qux = &$container->get('Qux');
print $qux->Baz->a; // print ABCDEFG.
prototype
$container = &new imoDI();
$container->register('Foo', 'stdClass');
$container->setPrototypeTo('Foo');
$foo1 = &$container->get('Foo');
$foo2 = &$container->get('Foo');
$foo1->a = 'ABCDEFG'; // $foo1->a != $foo2->a.
auto class loader
$container = &new imoDI();
// example, include_path have /path/to/lib
// and MyApp_Logic Class is /path/to/lib/MyApp/Logic.php
$container->register('Foo', 'stdClass', array('logic' => 'myappLogic'));
$container->register('myappLogic', 'MyApp_Logic');
$foo = &$container->get('Foo');
$foo->logic->execute();
// or if include_path have not path, you'll use addPath().
$container->addPath('/path/to/lib');
$container->register('Foo', 'stdClass', array('logic' => 'myappLogic'));
$container->register('myappLogic', 'MyApp_Logic');
$foo = &$container->get('Foo');
$foo->logic->execute();
何もしないことが売りでその分数時間で実装が終わった imoDI が、なんとバージョンアップ。
任意のプロパティに Injection できるようになったのと、あとやっぱり Class の Auto Loader がつきました。
ということで 0.3.0 リリースです。
○ 第6回 ゲームイベント - Darkness Falls's RvR
とりあえず、まずはサーバを再起動するんだ、トム!
我々は Reboot による Server Down を歓迎する!
正直、12月からどんどん蓄積されて凄い状態になってる。
2006/01/28 に発表した Maple Day のスライドを公開します。
特別 Maple みっちりな内容でもなく、その他の話や Bad ケースの話など色々させていただきました。
