問題タブ [tabletop-simulator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
299 参照

for-loop - 関係のないテーブル インデックスの割り当てによる Lua 'attempt to call a number value near for..in' エラー -- なぜですか?

Tabletop Simulator でいくつかの Lua スクリプトを書いていますattempt to call a number value near for..inが、完全に当惑するエラーが表示されます。エラーの原因となっている for ループを含むコード スニペットを次に示します。

さて、まず最初に、 andに直接割り当てられている 2 行をコメントアウトすることでエラーが解消され、それらの行を同等のステートメントに置き換えたときに、p[1]p[3]

その後、すべてが完全に機能しました。ただし、これでエラーが修正される理由については、完全に唖然としています。私はこの正確な for ループ定義を半ダースほどの場所で使用して、プレーヤーとそのコンポーネント ( global に格納されていますGUIDs) を反復処理しましたが、他の場所では問題なく動作しました。

もう少し詳細を追加すると、古いコードを使用しても、ループの最初の反復は完全に機能します。最初のターン トークンが適切な位置に移動され、両方のメッセージが出力されますが、エラーによりそれ以上の反復が妨げられます。ループ反復子をインクリメントするときにエラーが明らかに発生していますが、に直接割り当てる方法が理解できず、これに干渉する可能性がありますが、割り当てp[1]は問題ありません。もう 1 つ詳細:事前に for ループの外側ではなく内側で宣言しても役に立ちませんでした。p[3]pp

(詳細を追加するために編集)

さらにテストした結果、 @ luther がおそらく正しいように見えますが、によって返される値のメタテーブルで何か奇妙なことが起こっていますpositionToLocal。この関数によって返される値は、Unity のタイプVectorの拡張であると思われる Tabletop Simulator によって定義されています。Vector3重要な詳細は、この型を使用すると、インデックスx,y,z1,2,3交換可能に参照できることです。

p[1]そのため、 andp[3]割り当てをp.xandに置き換え、エラーp.zを修正しました。これは、によって返された がインデックスを明示的に定義せず、代わりにメタメソッドを使用してそれらのインデックスを にリンクしていることを暗示しているようです。そして、どういうわけか、そのメタメソッドはループ反復子を台無しにしています...しかし、正直なところ、それはまだ私の心を揺さぶっています.VectorpositionToLocal1,2,3x,y,z

GUIDs.Nationspairs()は、反復子を生成するために使用される関数に渡されるテーブルであり、基本的には定数です。静的 GUID が含まれているため、どの関数でも追加または更新することはありません。とはもちろん関係ありませんp

詳細

これは間違いなく、Tabletop Simulator の Vector 実装に関連しているようです: https://forums.tabletopsimulator.com/showthread.php?8344-For-loop

上記の例では、単純な数値の for ループを使用し1,2,3て Vector 値のインデックスを更新し、Vector にインデックスを付けるために使用する割り当てステートメントは、割り当てられた値と同じ値にiの値を変更することになります。i

これが言語でどのように可能であるかはまだ理解できません...

0 投票する
1 に答える
483 参照

xml - テーブルトップ シミュレータ Lua エラー: 「文字列値に対して算術演算を実行しようとしました」

まず、少しのコンテキスト (私がコーディングにかなり慣れていないという事実に加えて)... 私はボード ゲームを開発しており、そのゲームのテーブルトップ シミュレーター バージョンのために、一連の UI を作成しました。プレーヤーがテーブルの中央にあるボタンを押すたびにポップアップするメニュー アクション (プレーヤーはまず、特定の仕事の入札を送信することを発表する必要があり、ボタンを押すと、その仕事の RFP 入札プロセスが開始されます)。プレーヤーがボタンを押すと、UI は、他のすべてのプレーヤーに、問題のジョブの入札に参加するかどうかを尋ねるプロンプトを配信します。

入札意向メニュー

参加しているすべての入札者は、市場での評判とともに有効な入札を入力します。これは、入札プロセスに勝った場合にジョブから収集する全体的な料金に影響します。次に、スクリプトが最低入札額を見つけて、ジョブの勝者を決定します。

入札単価調整・提出メニュー

この入札単価調整メニューの最初の 2 つのフィールドは編集可能ですが、3 番目 (料金) は読み取り専用です。手数料の数値は、他の 2 つに入力された値に応じてリアルタイムで調整されます。料金の計算式は ですeffective bid + (reputation * 5) = fee

私が経験している問題は、プレーヤーが最初の 2 つのフィールドのいずれかから値を削除すると (たとえば、ハイライトしてバックスペースを押すことによって)、次のエラーがゲームのチャット ボックスに表示されることです。

数値が削除されるとすぐにエラーが nil 値によって引き起こされるという仮定の下で作業していたので、演算が実行される前に最初の 2 つのフィールドの nil 値を 0 にリセットする条件付きロジックを追加しようとしました。しかし、それはうまくいかなかったので、少し困惑しています。

関連する Lua コードは次のとおりです (ボタンの ttslua ファイルにあります)。

関連する XML コードは次のとおりです (グローバル UI ファイルにあります)。

完全なコードを見たい場合は、GitHub にあります。そして、これがSteamワークショップにあります。

本当にありがとう!

0 投票する
1 に答える
129 参照

lua - If ステートメント内の Wait クラスに時間を追加する方法はありますか?

数日前に LUA の学習を開始し、Tabletop Simulator ゲーム内で自分のプロジェクトを開始しましたが、レンガの壁にぶつかりました。Wait クラスに時間を追加できません。

これは私が試したものの例です:

関数が最初の部分をチェックし、真の場合は 1 秒後に 2 番目の部分を実行する必要があります。そうでない場合は、2 番目の部分を通常どおり実行し、「i = i + 1」をスキップします。私の問題は、関数がすべてを同時に実行することです。何か間違ったことをしていることは知っていますが、何が悪いのかわかりません。すべてを順番に行うための for of gate を作成する方法などはありますか?

0 投票する
1 に答える
119 参照

sorting - プレイヤーが同じカードを取得できないようにするために使用されるアルゴリズム

すべてのプレイヤー (P) にカード (C) が与えられるテーブルトップ シミュレーターでコーディングしているゲームがあります。記憶したら、すべてのプレイヤーがそのカードをデックに戻し (D)、シャッフルしてから、すべてのプレイヤーに同じデックからカードの 1 枚が配られます (D)。プレイヤーが自分のカードを取得できないようにする最も単純なアルゴリズムをコーディングしようとしています。コーディングに関して言えば、成功するまで実行するシミュレーションを作成する代わりに、これは単純であると思います。

0 投票する
3 に答える
86 参照

lua - テーブルトップ シミュレーターで事前定義されたカウンターの範囲を設定する

LUA を使用してテーブルトップ シミュレーター カウンター オブジェクトでカウンターを設定できる量を制限しようとしています。マイナス ボタンを 1 で無効にしたい。API ソースを読んだ後、答えが見つからないようです。