タイトル通り。原因よく分からないんですよね。Script最適化系のmodが悪さをしているのかなんなのか。並列処理的なバグの出方をしている(CloseTextInput後に製作プロセスが呼ばれているような)。
大昔何か似たような問題に対処したような、対処の仕方を見たような気がするけど見つからなかったので力業。普通にプレイする場合は、ホットキーに登録して、インベントリメニューから抜けて(通常のゲームモードから)使用することで回避が可能。他のアイテムクリックでメニュー呼び出し系modでも大体同様。
従って以下の内容はショートカットとか使いたくねぇぜ! という人向け。
スクリプト修正ではもちろん責任もちません。
MOOCraftScript
29行目くらいに
short mytmp
を追加。
MOOCraftGameMenuFunctionScript
(デバッグメッセージとか一杯仕込んだんで行数は適当)
45行目くらいに
set MOOCraft.mytmp to -1
を追加(特になくてもいいと思う、半分デバッグ用)。
65行目くらいに
if inputnumber > 0
set MOOCraft.mytmp to inputnumber
endif
を追加(let mystring := ToString inputnumber行の後くらいがほどいいんじゃないかな)。
78行目くらいに
set inputnumber to MOOCraft.mytmp
を追加(
if button != -1
let inputtext := GetInputText
の後くらい)。
何をしているか
この手のMenuScriptって無限に呼ばれるQuest Scriptでbuttnとinput textの状態を監視して動作するんだけど、実製作を行うMOOCraftSelectedEntryFunctionScriptの呼び出し前にInputTextおよびinputnumber(文字列を数値に変換したもの)がリセットされてしまうっぽくて、仕方なくGlobalな変数を保持してくれているっぽいMOOCraftScriptの変数に直前の入力を一時退避させている、というようなもの。
なので、ひねくれて0と入力すると正しい動作である1個の生産じゃなくて直前までの入力値が生産される。別にえやろ。
同じゲームデータでも直前までちゃんと動いてた気がするんだけどなーなんでだろなー。
追加してる変数はshortなんで多分destroyしなくても平気。