デバッガを利用するとEPが無限入手可能

Issue #83 resolved
takuto_cw created an issue

こんばんは。今日も懲りずに、バグを投下させていただきます。

CardWirthPy_20130830 + WinXP で確認。

内容は「デバッガのレベル調整でレベル原点を下げて宿へ帰還、を繰り返すといくらでもEP獲得できてしまう」です。デバッグモードでレベルアップしない設定でも、宿帰還前にデバッグ解除すれば、やっぱりズルできてしまいます。

お手数をおかけしますが、ご確認いただけますでしょうか…?

Comments (23)

  1. k4nagatsuki repo owner

    うーん、これはどうしたものでしょう。どっちにしろデバッガを使えばお金もカードもいくらでも手に入るわけで、それに対応してもなぁ……という気もします。

    後は予期せずEPが入ってしまう場合なのですが、これはデータ的に解決できるでしょうか? 新しくフラグ的な何かを用意しないと難しい気がします。いっそ対応しない方がすっきりするかもしれません。

    他の方のご意見もお聞きしたいところです。

  2. tachi gigas

    意見……ということで私見ですがEP増加が金・カードの無限入手に比べ些細なのは確かですが、対処しても問題ないと思います。

    通常宿とデバグ宿が分かれていない弊害でしょうか、デバグ中の出来事と考えればズルな行為があっても気にはならないので、気持ちの問題上ではk4nagatsukiさんに同意ですね…orz

  3. takuto_cw reporter

    あらら? 気になっていたのは自分だけのようですね。自分、デバッグへ簡単に行って戻れることにも、便利さと同時に、ズルし放題だよいいのかなあ、と感じていたもので。神経質なのかもしれない。

    では、マイルストーン外して、proposal・trivial あたりにして、良い方法を自分が考えて実装できればそれでよし、それができなかった場合は諦めようと思いますが、どうでしょう。方法を思いついた時点で、ここに一度出してみて、問題なさそうなら作業に入る…という形で。

  4. k4nagatsuki repo owner

    それで問題無いと思います。

    何かよい方法があれば、ぜひおねがいします。

  5. takuto_cw reporter

    方法をひとつ考えついたので投下します。

    システム上、EPがもらえるチャンスは  Lv1 → 2, Lv 2 → 3, Lv 3 → 4, … Lv 98 → 99 と、98回ある。(@レベル上限はこの際無視。今後レベル上限をなくしたスキン作る人が出るかもしれないし、自前でリミッター解除してる人もいると思うので)

    その 98 区間全部について、EP 獲得済みかどうかを逐一記録する。キャラ一人一人。

    具体的な方法は、全キャラに以下のようなシステムクーポンを配布。
    @CWPy_EPlog_(25 ケタの 16 進数)-(2 ケタの 10 進数)

    16 進数を 2 進数に変換すれば、0 / 1 切り替えのできる 100 個の数字が手に入るのでそれを使う。後半の 2 ケタについては後述。

  6. takuto_cw reporter

    レベルアップのときに、そのキャラが所持している EP ログクーポンから、該当区間の履歴をチェック、未入手の場合のみ EP ゲット。ログクーポン更新。

    ログクーポン持っていない=既に CWPy で遊んでいる人のキャラの場合、「どの区間でも EP を一度も獲得していない」として扱う。

    キャラ新規作成時と NPC お持ち帰り時、現在のレベルまでの EP は獲得したものとしてログクーポン配布。

    宿逆変換時は、まずログクーポンを「削除しない」。次にレベル原点を、クーポン算出点から割り出したレベル(ただしMAX越えない)に合わせる。調整後のレベル原点を、ログクーポン末尾の2ケタに記録しておく。

    宿変換時、ログクーポンもっていない場合は、新規作成時と同様に配布。持っていたら、@レベル原点が上がっているかチェック。上がっていたらその区間の EP が獲得済みになるようにログクーポン更新。


    デバッガでレベル調節かけた後大量にクーポン点獲得すれば、2 → 3 は獲得済みだが 1 → 2 は未入手、なんてこともありうるわけで。「貰いそこね」が発生しても、必ず入手しなおせる仕組みを目指しました。Python の練習がてら、試しに少し書いてみたらこんな感じです。この方式は使えるでしょうか……?

  7. k4nagatsuki repo owner

    システムクーポンが膨大になってしまうので、いっそクーポンを使わないでもいいかと思います。その場合はPropertyなどに専用データとして持たせればよいでしょう。

    問題は、@のつくシステムクーポンを編集するという事を、すでに一部のプレイヤーが行っていることです。例えば_@という形で一旦隠蔽クーポンをシナリオ側で付与し、ユーティリティで_を削除するとシステムクーポンを上書きできます。プレイヤーがそういう操作をするよう指示をするシナリオは数点実在します。

    苦労して考えていただいたと思うのですが、この仕組みは複雑です。複雑な仕組みを導入する事で、システムクーポンの編集が整合性などの面でややこしくなります。そして、この件を修正する事に多大なメリットがあるようには思えず、複雑化との釣り合いが取れないのではないかと感じています。

    しかしここまで考えていただくともったいないなぁ……他の方のご意見を待ちます。

  8. Former user Account Deleted

    デバッグモードっていうのは結局デバッグ用に『なんでも出来るモード』なので、 それでEPが無限獲得できちゃう!って言っても仕方ないんじゃないかな、と思うのです。 『なんでも出来るモード』で制限作るのって逆にヘンじゃないかな、と。

  9. k4nagatsuki repo owner

    もう一つ。これは考え方の相違だと思いますが、私はプレイヤーの「ズル」を防ごうと考えていません。CWではバイナリエディタ、CWPyの場合はテキストエディタを使えば、あるいはシナリオを作って色々とやれば、いくらでもズルはできます。それを防ぐことには意味が無いと考えます。

    問題はプレイヤーが意図せずに「ズル」をしてしまう場合で、それはできるだけ防がなければならないとも考えています。有利でも不利でも普通に操作しててなんか変な事が起きたら困るでしょうし。

  10. k4nagatsuki repo owner

    おっと、ご意見感謝します。

    開発側だけでなくプレイヤーの立場の方の意見もどんどんいただけるとありがたいです。

  11. tachi gigas

    意見募集ということで…考え中…

    賢くない身としては、シナリオ中に一度でもデバッグした時は変更したレベルを元に戻すとか、いっそレベルを変更した時点でEPも操作するとか(マイナスになる場合はゼロ表示)…で解決しそうな気も…するのですが…

    あまりまとまった意見になってなくてすみません。

  12. takuto_cw reporter

    はじめまして、emelium さん。書き込みありがとうございます。ここ見てるの3人だけかと思ってたけど、他の人も見てくれてたんですね……嬉しいです。

    さて。自分の書き込みを最初から見直してみたら、誤解を招くような書き方をしていることに気がつきました。

    「不正を防ぎたいから」対策をとろう、と言っているようにしか見えない。すみません、ちゃんと事前に書きたいことを整理してから書くべきでした。

    ええと、まず、不正を100%防げるとは自分も思わないです。セーブデータは本家よりいじりやすいですし。また、稼いだ EP がどれだけ有利に働くか?についても、SP弄るのに比べれば大した事ない、と思っています。

    じゃあなんで自分がこんなに必死なのかというと、

    今まで EP は、へんな知識さえなければ不可侵の領域だったのに。誰でも思いつく方法、しかもシステム上普通に許されている行為だけで稼げてしまうのが、ショックだったからです。

    使い切ったらそれまでという重みも、一子をもうけたからこの数字だという意味も、何もなくなってしまった。「不毛な作業をどれだけ繰り返したか」を表す数字に成り下がってしまうだなんて……。ズルし放題の何が嫌かって、そこなんです。

  13. takuto_cw reporter

    せめて本家みたいにデバグ宿がしっかり分かれていれば。自分も「デバグは何でもありだし」で割り切れたのですが……今の状態は個人的に、どうにも納得いかないのです。

    今のところ、納得いかないと騒いでいるのは自分だけのようですが、他の方も「EP を稼げたほうがいい」とまでは思っていない様子。だったら、EP を稼げなくする方法を自分が見つけて実装できれば、誰も不利益をこうむらず、自分も満足できて万々歳。よしがんばるぞ。

    自分ががんばってるのは、こういう理由でありました。さあて、次の手は何にしようか…。


    マイルストーン etc の変更の仕方がようやくわかったので、遅ればせながら変えました。

  14. k4nagatsuki repo owner

    tachi_gigasさんの提案された方法ではどうでしょうか。問題に対して充分にシンプルだと思います。この方向で修正されたら私は文句ないです。

    宿の逆変換辺りの整合性が問題ですが、そこはまあよほど変な状態にでもならない限り保証外にしてもいいんではないかな……。

    私がこの件についてそれほど熱心ではないのは、@クーポンをいじって大量のEPを手にするテクニックはすでに知られていて使っている人もいることと、そもそも1.20以前にはEPなど存在しなかったからです。感じ方の違いですが、私はEPを特別視してはいません。遺伝子クーポン等も同じく、エディタでキャラクターを作って望む特殊型を作るなどという事は10年も前から普通に(いや普通ではないか)行われていました。

  15. takuto_cw reporter

    レベルを変更した時点でEPも操作する

    ああなるほど、レベル下げたら EP も下げちゃえば稼げなくなりますね。

    自分も1個投下します。@レベル原点を下げられなくしてみました。

    一度作成したキャラのレベルを変える場合は、デバッガからの操作であっても、@レベル原点の変更でなく、レベル調節扱いにする。デバッグモード中はレベル調節は常に 1~15 で自由に変えられる。デバッグモード解除時に、現在のレベル>@レベル原点 だったら、@レベル原点に合わせる。

  16. takuto_cw reporter

    あらら、2分差でリロードしそこねた…

    この方向で修正されたら私は文句ないです。

    おおっ、本当ですか! ちょっと組んできます!

  17. k4nagatsuki repo owner

    CWでマイナスEPの挙動が未知数なので、そこだけ気をつけていただければ。

    よろしくお願いします。

  18. takuto_cw reporter

    CWでマイナスEPの挙動

    本家ではマイナスの EP は、キャラ情報画面でマイナスのまま表示され、増減も自分が見た範囲では 0 以上の数字と変わりませんでした。 1.28, 1.30, 1.50で確認しました。Lv 1 まで落としてプラスのクーポン配布し、Lv10 まで上げれば EP も +90 点。シナリオ付与でも、ユーティリティ付与でも同様です。

    (マイナスの EP、本家で昔見たはずなのに出し方忘れてて、再現に手間取りました。こういうことやっていると、どうもデバグ宿に頼りすぎていけない)

    本家での EP マイナスキャラの作り方。「ゲーム宿で」「ユーティリティを使って」 得点クーポンを削除し、レベルを下げます。 作成時・連れ込み時のレベルが 2 以上であれば、EP もマイナスになります。
     大人キャラ作る(EP:0) → 「熟練」クーポン削る(EP:-10)
     ロータスちゃん連れ込む(EP:0) → 「_ロータス」クーポン削る(EP:-140)
    デバグ宿やシナリオ中でのクーポン削除ではレベルが下がってくれないのでダメです。

    なお 1.50 のみ、EP マイナスキャラを宿帳へ戻すと EP の値がおかしくなります。開発中の最新版でも同様。-10→65526 -50→65486 となりました。1.28, 1.30 まではちゃんと -50 のまま。明らかにバグなので、自分が愛護さんに報告しておきます。

    なので、Py でもマイナス値をわざわざ 0 表記にする必要もないかな? だったらこの修正だけでよさそう。

  19. k4nagatsuki repo owner

    値をそのまま出せば見た目にもどうなってるのか分かりやすいですからね。そのままのほうがいいと思います。

    そこのコードの由来は 9874872 のようです。レベルアップの時だけEPを動かすという所に問題があったようなので、レベルダウンの方でも動くようにすれば整合性は取れそうです。

    0.12.1までに直してしまえそうな規模になってきましたね。そちらの方でその通りの内容をcommitしていただければマージします。もちろん私の方で作業をしても構いません(数文字消すだけだしねぇ……)。

  20. takuto_cw reporter

    9874872

    見覚えがあります……レベルがらみの別件で、自分がいろいろと注文をつけた記憶が。

    そちらの方でその通りの内容をcommitしていただければ

    了解です! では今から commit してきます。

    EP が今までどおりの EP に戻ってくれて、ほっとしました。みなさん、長くお付き合いいただいて、また意見やアイディアもお寄せいただき、どうもありがとうございました。違う考え方にも触れられて、ちょっと視野が広がった気がします。

  21. k4nagatsuki repo owner

    これくらいシンプルな解決方法なら文句無しです。マージさせていただきました。

    これにて無事解決ですね。

  22. Log in to comment