スクリプト作成
スクリプト作成とはコンフィグファイル(.cfg)を使用し、新たなキーの割り当て、複雑な動作を自動で行うショートカット、コンソールコマンドシーケンスを作成することです。ハッキングとは異なり、スクリプト作成はTeam Fortress 2に盛り込まれた機能であり、VAC(Valve Anti-Cheat)のBAN対象とはなりません。スクリプトの使用はキーを割り当てる簡単なものから、自己参照的な動作の繰り返し、他のものを再定義する入れ子状となったショートカットまで様々です。スクリプトによって作成された機能はスクリプトを用いずとも動作可能ですが、スクリプトを用いることでそれらの機能を戦闘のまっただ中で動作させることができます。
目次
専用スクリプトファイル
"Team Fortress 2"は自動的にいくつかのゲームファイルを参照し、それらの中に書かれているスクリプトの実行命令を出します。以下がその一覧です:
- config.cfg - これはデフォルトのコンフィグファイルであり、ゲーム内で行われたキー割り当てや画質設定などを反映させるために編集されます。このファイルを編集すること自体は安全ですが、変更されたキー割り当ては全て起動時に反映されます。このコンフィグは他のこのコンフィグより先に、起動時に毎回読み込まれます。
- config_default.cfg - この中にはデフォルトのキー割り当てが含まれており、config.cfgが存在しない場合にバックアップとして実行されます。
- autoexec.cfg - これはデフォルトのコンフィグファイルであり、変更したキー割り当てやショートカットを実行するためのものです。このコンフィグはconfig.cfgを読み込んだ後、起動時に毎回読み込まれます。
- scout.cfg, soldier.cfg, pyro.cfgなど - それぞれのクラスには、プレイヤーがクラスを変更した時に毎回読み込まれるコンフィグファイルがあります。一つのコンフィグファイルに記述した設定は、明確に再割当てしない限り、全てクラス変更時に保持されることに注意してください。
スクリプトファイルの編集
Windowsの場合、通常スクリプトファイルは以下の場所に存在します:
<Steam Folder>/SteamApps/common/team fortress 2/tf/cfg
Macの場合、通常スクリプトファイルは以下の場所に存在します:
~/Library/Application Support/Steam/SteamApps/common/team fortress 2/tf/cfg
Linuxの場合、通常スクリプトファイルは以下の場所に存在します:
~/.steam/steam/SteamApps/common/Team\ Fortress\ 2/tf/cfg
SteamPipeアップデート以降、コードは以下の場所にも存在します:
.../team fortress 2/tf/custom/yourfoldernamehere/cfg
コマンドスクリプトの作成
以下はスクリプト作成以外には用をなさないコマンドの一覧です。つまりゲームプレイそのものには何ら影響を及ぼしません。
bind
最も単純なコマンドはバインド(割り当て)です。これによって特定のキーと特定の動作(設定やコマンドやスクリプトであろうと何でも)を結び付けられます。
bind [キー] [コマンド]
キーとコマンドを引用符("")で囲むかは任意です。
bind [キー] "[コマンド 1]; [コマンド 2]; [コマンド 3]"
キーを引用符("")で囲むかは任意ですが、コマンドは必ず囲む必要がります。
コマンド例二種類:
bind "e" "Voicemenu 0 0"
このバインドによりプレイヤーはEを押すことでメディックコールを行います。
bind "w" "+forward"
このバインドによりプレイヤーはWを押している間前進します。
toggle
このコマンドはある設定の値を0か1(場合によってはそれ以上)の間で切り替えられます。
toggle sv_cheats 0 1
Bindtoggle
これは切り替えと同じ働きをしますが、それを特定のキーによって行うためのものです。
bindtoggle o "sv_cheats 0 1"
備考:値の設定が記述されていない場合、toggleおよびbindtoggleは0と1の間で切り替えを行います。
Incrementvar
これはある変数の値を設定した分だけ何度も増加または減少出来ます。
bind MWHEELUP "incrementvar fov_desired 75 90 1"
bind MWHEELDOWN "incrementvar fov_desired 75 90 -1"
これによりFOV(視野角)をマウスホイールを上に回すことで広くし、下に回すことで狭くできます。
備考:Incrementvarは値が最大(および最低)値を超えると最初に戻ってしまいます(ラップアラウンド)。この例ではFOVが90を超えると75になり、その逆も同様です。
Alias
ショートカットにより複数のコマンドを一つのコマンドに割り当てられます。これは記述の簡略化に有効であり、一連のコマンドを何度も呼び出すときに最も便利です。
備考:ショートカット名はスペースを含められません。アンダースコア、数字、役物は可能です。またショートカット名は大文字と小文字を違うものとして認識します。
alias Call_For_Medic "Voicemenu 0 0"
bind "e" "Call_For_Medic"
このスクリプトはバインドの例で挙げたものと同じ働きをし、プレイヤーはEを押すことでメディックコールを行います。
alias "+Diagonal" "+moveleft; +back"
alias "-Diagonal" "-moveleft; -back"
bind "z" "+Diagonal"
このスクリプトによりプレイヤーは斜め移動が可能となります。この例ではZを押すことで左後ろへと移動します。
注意: 以下のコードでは動作しません!
bind "z" "+moveleft; +back"
Zを押すことでプレイヤーは左後ろへと移動しますが、ゲームエンジンが+backのコマンドを反転できないため、Zを離してもプレイヤーは後ろに下がり続けるのを停止できません。
Exec
このコマンドは他のファイルの実行命令を出します。つまり複合的なスクリプトを他のファイルに記述が可能で、記述が一般的なファイルにまで散らばらないようにできます。
exec autoexec.cfg
このスクリプトによりプレイヤーのautoexecスクリプトを実行します。
Echo
このコマンドによりテキストをコンソールに記述させます。デバッグ時に大変有用です。
echo Scripting is; echo very useful
これはScripting is
とvery useful
を「二行に分けて」表示させます。何故ならばecho
を読み込むたびに新たな行に移るためです。スペースは単語の間のものか、引用符の間のechoされたもののみパースされます。以下がその例です:
echo " Scripting is very useful. "
引用符で囲ってあるため、余分なスペースまで記述させられます。
備考:誤解釈を防ぐためにダブルクォーテーション(")を記述させることはできません。しかしシングルクォーテーション(')であれば可能です。
備考: Echoはときどき引用符で区切られていないものまで誤って記述することがあります。一般的な経験則として、記述させたいものは引用符で囲んだ中に含むべきです。また人の目でも読みやすくなります。
Wait
このコマンドはゲーム内で次のコマンドを実行する前に、指定のフレーム数だけ待機時間を設けます。
備考:実際の待ち時間はサーバー側のフレーム数(tickrate)と対応します。
注意:Waitコマンドは特定のサーバーでは無効化されます。これにより特定のスクリプトが動作に失敗し、まれにゲームがクラッシュしてしまう恐れがあります。これを防ぐためにはWaitのテストの項を参照してください。
echo Why did the chicken cross the road?; wait 66; echo To get to the other side!
このスクリプトは後に続く二文目を記述するまで66フレーム(ほとんどのサーバーにおける1秒に相当)待機します。
キーの名称の一覧
各キーをスクリプトで記述する際の名称の一覧です
ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 ` 1 2 3 4 5 6 7 8 9 0 - = Delete Tab ⇆ Q W E R T Y U I O P [ ] \ ⇪ Caps A S D F G H J K L ; ' ↵ ⇧ Shift Z X C V B N M , . / ⇧ Shift Ctrl ⊞ Alt Spacebar ⊞ ≣ Menu Ctrl |
PrtScn ScrLk Pause Insert Home PgUp Delete End PgDn
← ↓ → |
|
マウスボタン | キーバインドでの名前 |
---|---|
マウスホイール上 | MWHEELUP |
マウスホイール下 | MWHEELDOWN |
左クリック | MOUSE1 |
右クリック | MOUSE2 |
ホイールクリック | MOUSE3 |
マウス左ボタンクリック(奥) | MOUSE4 |
マウス右ボタンクリック(手前) | MOUSE5 |
便利なコマンドの一覧
変装
disguise
コマンドは二つの引数を用います。一つ目でクラスを、二つ目でチームを選択します。
- クラス
- 1. スカウト
- 2. スナイパー
- 3. ソルジャー
- 4. デモマン
- 5. メディック
- 6. ヘビー
- 7. パイロ
- 8. スパイ
- 9. エンジニア
- チーム
- 1. BLUチーム
- 2. REDチーム
- -1. 敵チーム
- -2. 味方チーム
そのためdisguise 5 1
は「BLUのメディック」に変装し、disguise 7 -2
は「味方のパイロ」に変装します。
備考: disguise 8 -2
(味方のスパイ)は変装を解きます。
装置
build
およびdestroy
コマンドはそれぞれ二つの引数を用います。一つ目で装置を、二つ目で装置の種類を選択します。二つ目の引数は0
以外を指定する場合のみ必要となります。また現在はテレポーターの入り口か出口かを選択する場合にのみ使用されます。
build
コマンドは設置する装置の設計図を取り出します(ただし手に構えるSapperは除く)。
build 0 0
→ ディスペンサーを作成 (エンジニアのみ)
build 1 0
→ テレポーター入り口を作成 (エンジニアのみ)
build 1 1
→ テレポーター出口を作成 (エンジニアのみ)
build 2 0
→ セントリーガンを作成 (エンジニアのみ)
build 3 0
→ Sapperを作成 (スパイのみ)
同様にdestroy
コマンドは装置を破壊します。
destroy 0 0
→ ディスペンサーを破壊 (エンジニアのみ)
destroy 1 0
→ テレポーター入り口を破壊 (エンジニアのみ)
destroy 1 1
→ テレポーター出口を破壊 (エンジニアのみ)
destroy 2 0
→ セントリーガンを破壊 (エンジニアのみ)
備考:Sapperは破壊不可
一つの引数のみを用いる旧来のbuild
コマンドも使用可能です。
build 0
→ ディスペンサーを作成 (エンジニアのみ)
build 1
→ テレポーター入り口を作成 (エンジニアのみ)
build 2
→ セントリーガンを作成 (エンジニアのみ)
build 3
→ テレポーター出口を作成 (エンジニアのみ)
build 3
→ Sapperを作成 (スパイのみ) [同一コマンド]
ボイスコマンド
voicemenu
は二つの引数を用います。一つ目でメニュー番号を、二つ目でコマンド番号を選択します。
voicemenu 0
- 0: メディック!
- 1: ありがとよ!
- 2: ゴー!ゴー!ゴー!
- 3: 前進!
- 4: 左へ行け
- 5: 右へ行け
- 6: はい
- 7: いいえ
voicemenu 1
- 0: 来るぞ
- 1: スパイだ!
- 2: 前方にセントリーガン!
- 3: テレポーターをここに
- 4: ディスペンサーをここに
- 5: セントリーガンをここに
- 6: チャージを頼む!
- 7: (メディック) ユーバーチャージの準備完了
voicemenu 2
- 0: 助けてくれ!
- 1: ときの声
- 2: 歓声
- 3: 嘲笑
- 4: ポジティブ
- 5: ネガティブ
- 6: ナイスショット
- 7: よくやった
備考:voicemenu <num> <num>
によるメッセージの再生ではなく「ボイスメニューの表示」を行いたい場合のコマンドは、voice_menu_<num>
の<num>に1~3の値を入れ、引数は必要ありません。たとえば一番目のボイスメニューを表示させたい場合はvoice_menu_1
となります。
その他
clear
コンソール内の情報を全て消去します。alias
現在定義されている全てのaliasを一覧で表示します。fov_desired (75-90)
FOVを変更します。viewmodel_fov
武器モデルのFOVを変更します(デフォルトでは54~70)。.r_drawviewmodel (0/1)
武器モデルの表示(1)および非表示(0)を切り替えます。lastdisguise
プレイヤーが最後に変装したクラスに変装します。 (スパイのみ)load_itempreset [0, 1, 2, 3]
特定のプリセット装備(A,B,C,D)に変更します。say "message"
全体チャットにメッセージを送信します。say_team "message"
チームチャットにメッセージを送信します。+taunt
プレイヤーのタウント装備を開きます。+use_action_slot_item
プレイヤーのアクションスロットに設定されたアイテムを使用します。volume (0-1)
ゲーム内音量を変更します。taunt_by_name (name)
特定のタウントを実行します。プレイヤーのタウント装備に含まれているタウントを正確に入力することで、タウントメニューを開くことなく実行できます。
高度なスクリプト作成技術
Toggle
特定のキーにトグルコマンドをバインドし、キーの押しっぱなし状態を切り替えられます。
bind w toggle
alias toggle "enable"
alias enable "alias toggle disable; +forward"
alias disable "alias toggle enable; -forward"
このスクリプトはプレイヤーがWを押すと、再度Wを押すまで前進を続けます。
キーの組み合わせ
ある特定のキーを押すことで、別の特定のキーひとつで出来る行動の内容を変化させられます。
bind e call
alias call Call_For_Medic
alias Call_For_Medic "Voicemenu 0 0"
alias Call_For_Ubercharge "Voicemenu 1 6"
この時点ではEを押すたびにプレイヤーはメディックコールを行います。そしてまだ未使用のユーバーチャージの発動を請うaliasも記述しています。
bind shift +toggleState
alias +toggleState "alias call Call_For_Ubercharge"
alias -toggleState "alias call Call_For_Medic
これにより、⇧ Shiftを押している間はcall
はユーバーチャージの発動を請うものにリダイレクトされます。⇧ Shiftを離すとcall
はメディックコールへと戻ります。
⇧ Shift+Eを同時に押すと、プレイヤーはメディックコールではなくユーバーチャージの発動を請います。
Waitのテスト
スクリプトによってはwait
コマンドは必要不可欠なため、サーバーがコマンドを無効化していないかのテストが必要となる場合があります。
alias waitTester "alias waitTest waitPositive; wait; waitTest"
alias wait "alias waitTest waitNegative"
alias waitPositive "echo Wait is enabled on this server.; exec waitPositive.cfg"
alias waitNegative "echo Wait is DISABLED on this server!; exec waitNegative.cfg"
waitTester
このスクリプトはサーバーがwaitコマンドを無効化しているかどうかに依存します。wait
と名付けられたaliasはユーザーが定義可能です。そのため、このスクリプトはwaitTest
というaliasを作成し、これはデフォルトではwaitPositive
を指しますが、wait
が許可されていない場合(そのためユーザーが定義可能)、waitNegative
にリダイレクトされます。
Loop
注意:waitコマンドを用いないLoopはTF2のクライアントのハングアップを招きます。loopスクリプトを使用する際はwaitテストのスクリプトの後に行うことを強く勧めます。
一般に、loopは引き離されない限りリセット不可能になるため、一つのaliasが自身を指すというのは良くない記述です。そのため、loopスクリプトがloopを行う場合は、waitの部分とloopの部分の二つに別れた部分を有する傾向にあります。
bind g "loopKey"
alias loopKey startLoop
alias startLoop "alias loopKey stopLoop; +attack; alias redirect loop; loop"
alias stopLoop "-attack; alias redirect; alias loopKey startLoop"
alias loop "+left; wait 33; -left; +right; wait 33; -right; redirect"
Gを押すとループを開始します。攻撃によって開始され、プレイヤー33フレーム(ほとんどのサーバーにおける0.5秒に相当)毎に視界の前後を振り返ります。Gを押すと次の反復動作を終え次第ループを停止し、攻撃も停止します。
コメントの挿入
スクリプトが長大になってくると、aliasの名前を練る手間も増えてきます。しかしそのaliasの動作を表すような適切な名前を常につける必要はありません。スラッシュ二つ(//)を追記することで、その後に続く記述はコメントと判断され読み込まれることがなくなります。
voicemenu 1 6 //チャージを頼む!
"voice command"がどのような内容か不鮮明ですが、コメントでその内容を説明しています。
便利なスクリプトの例
ゲームプレイに影響を及ぼすような注目のスクリプトをいくつか記します。中にはパッチで修正されたものもありますが、それら以外は現在も機能します。
パッチで修正されたスクリプト
ピストルのスクリプト
元々、ピストルは人間が連打してできる以上の速度で連続発射が可能でした。そのためキーを押し続けることで連打を再現するためにスクリプトが作られました。
2009年8月13日 パッチによってピストルは攻撃キーの連打速度がそのまま発射速度とならないように修正されました。
Chargin' Targeの旋回スクリプト
元々、キーボード入力によって左右に旋回するのは、マウス入力によるものとは同様には扱われていませんでした。Chargin' Targeはプレイヤーの旋回速度に制限を設けた初の武器で、そのためValveはマウスによる旋回速度に制限を設けましたが、キーボード入力によるものには制限をかけ忘れていました。そのためプレイヤーの突進中の旋回入力操作をバインドし直し、この制限を巧みに回避するためにスクリプトが作られました。
2011年6月23日 パッチによってChargin' Targeが仕様以上の旋回速度を得られてしまう不具合は修正されました。
空中しゃがみスクリプト
元々、プレイヤーは一度のジャンプ中に好きなだけ何度もしゃがむことができました。スクリプトでバインドすることによってしゃがみとしゃがみを止めることを高速で繰り返すことが可能で、ゲームエンジンがジャンプ中のプレイヤーに対して発射された攻撃を正しく処理することが難しくなってしまうのでした。
2009年3月6日 パッチによってプレイヤーが空中でしゃがめるのは二回までとなりました。
Gloves of Running Urgentlyのスクリプト
かつてGloves of Running Urgentlyの性能は「構えている間はヘルスを毎秒6ずつ失っていく」というものでした。しかし武器を構え続けずとも、ジャンプすることで、この武器によって得られる移動速度のボーナスだけを維持できるのでした。そのためこの武器を構え、ジャンプし、別の武器に持ち替えるという一連の動作を簡単なスクリプトで再現が可能でした。
2012年6月27日 パッチによってGloves of Running Urgentlyは従来のダメージを受け続けるものから、構え終えた後までミニクリティカル攻撃を受け続けるデバフ効果へと性能が変更されました。
アイドリングスクリプト
多くのサーバーはアイテムドロップを得ようとアイドリングを行うプレイヤーを探しだそうとします。プレイヤーは基本動作を行うスクリプトを組んでそれらのシステムの裏をかくことができました。
アイドリングの脅威に対する積極的な解決法によって、プレイヤーがアイテムを得続けるにはポップアップ通知を了承する必要が生まれました。
現在も機能するスクリプト
一人称視点の武器のモデルを非表示にするスクリプト
クラスのどのスロットの武器が選ばれているかによって、武器の一人称視点モデルの表示・非表示を切り替えるスクリプトは多数あります。プレイヤーの中には、画面を見やすくするため一人称視点の武器のモデルを非表示にしたいが、近接武器やPDAや透明ウォッチといったものだけはモデル上に重要な情報が表示されるため表示させたい、と度々考える人もいます。例えばスパイが透明化中、いつ透明化が終わるのか、いつDead Ringerが発動可能かといった情報は、武器(腕時計)が見えないとさっぱり分からなくなってしまいます。他のクラスでも、近接武器を振るうアニメーションが無いと、攻撃がヒットするタイミングを計るのが難しくなってしまいます。
セントリージャンプのスクリプト
Engineer アップデートにより、エンジニアはセントリーガンの運搬が可能になりました。またアップデートで同時に実装されたWranglerにより、セントリーガンのロケットを用いたセントリージャンプも可能になりました。最高速度で入力を行うことにより、プレイヤーは打ち上げられる前に、セントリージャンプとセントリーガンを担ぐのを同時に行えることが分かりました。人力でこの動作を再現するのは可能とはいえ難しいものがあります。プレイヤーの中にはスクリプトを組み、正確かつ正しい順序で入力を命令することで、いつでもこの技術を再現可能にした人たちがいます。
備考: Rescue Rangerを用いればこれを用いずとも、130メタルを消費することで遠距離から担ぐことができます。
Gunslingerのスクリプト
激戦区のまっただ中で、ミニセントリーガンを一旦壊してもう一度立て直すために、いちいちPDAを取り出すのは面倒になりがちなため、プレイヤーの中にはミニセントリーガンの破壊と再作成をマウスのボタン一つ(あるいは二つ)でできるように、スクリプトを組む人もいます。このようなスクリプトはFrontier Justiceととりわけ相性がよく、必要なときにほぼ即座にリベンジクリティカルを得られるようになります。
マウス感度と操作に関するスクリプト
プレイヤーの中にはクラスによってマウス感度を変えたいという人もいるでしょう。例えば狙いを定めて銃を撃つ必要のないメディックから、ヘッドショットの必要があるスナイパーにクラスを変更した場合、マウス感度を変えたいと考えるかもしれません。スクリプトによってクラス別、そして武器別でさえもマウス感度と操作の変更が行えます。
突進ダッシュスクリプト
突進中にジャンプするタイミングを推し量るのは難しくなりがちなので、プレイヤーの中にはスクリプトによってそれら二つの動作をボタン一つで再現し、突進で最大距離まで移動できるようにしています。ただし通常通り、突進を止めるために近接武器を振るう必要はあります。
クイックスコープのスクリプト
多くのプレイヤーにとって、スコープを即座に覗き、素早くヘッドショットを行うのは難しい技術です。スコープを覗く前に狙いを定めておく必要はありますが、マウスのボタンを一度クリックするだけでズームインと発射を行うスクリプトが存在します。
ロケットジャンプのスクリプト
ロケットジャンプで最高高度や最長距離に達するには、プレイヤーはジャンプし、しゃがみ、ロケットを撃つ、という一連の動作をほぼ同時に行う必要があります。これはスクリプトを組むことによってボタン一つで再現が可能です。
自死バインドのスクリプト
場合によっては自死することは有益な結果となりえます。大抵の場合は対抗戦においてのみ用いられますが、通常のサーバーでのプレイに用いられることもあります。