GearSwap > レッスン4日目
白魔のmidcastでsend_commandを入れておきます
カーズナをもらうキャラのluaファイルにsets.Cursnaを定義してください。
白魔のmidcastでsend_commandを入れておきます
ケアルをもらうキャラのluaファイルにsets.Cureを定義してください。
ここで問題になるのはケアルガ系とケアルラ系です。対象<t>となっているキャラは反応しますが、ケアルガの範囲内にいるその他のキャラはイベントが発生しないため着替えることができません。
課題6ではスニークをもらった場合に自動的にスニークアイコンを切ってリジェネ/リゲイン/リフレ/移動速度アップ装備に着替える方法を説明しましたが、自分にスニークをかける場合のことは全く考慮されていませんでした。midcastでsend spell.target.name exec Sneak.txtを実行して、このスクリプトの中でCancel 71とgs equip sets.Sneakを実行させるというやり方でしたが、自身にスニークをした場合は最終的にaftercastが実行されるのでsets.Sneakの意味がなくなります。スニのあとはたいていインビジもするから、スニのことしか考えてないとか、どうせマウントするからそもそもスニ使わないよね、とかもっともなご批判も考えられますが、どうしてもスニが必要なサーバーの人だけここの説明を参考にしてください。
1. スニークアイコンを切るタイミング
precastでもmidcastでもどちらでも構いませんが、FC装備に着替えて詠唱したいのでmidcastでCancel 71を実行します。
send でスニーク対象にexec sneak.txtを送信しているので、スニークをもらう側のケースも対応可能です。
2. リジェネ/リゲイン/リフレ/移動速度アップ装備に着替える
aftercastでspell.nameの内容をチェックして切り替えればいいだけです。ここではスニーク >> インビジのケースもあるのでインビジもチェックしてください。あとは、サポ踊/白/赤で使いそうなジョブのluaファイルに記述すれば完了です。
- レッスン4日目
- 課題1:黒魔が2人以上いる場合
- 課題2:dataフォルダーを整理する
- 課題3:所持していない装備チェック
- 課題4:所持しているのに着替えがうまくいかない#1
- 課題5:所持しているのに着替えがうまくいかない#2
- 課題6:send_commandの使い方を覚える
- 課題7:spell.typeとspell.nameの内容を表示させる
- 課題8:通常装備を被ダメカットとTP装備とリフレ装備で自動切替したい
- 課題9:ワードローブ指定
- 課題10:スペクトラルジグに対してリジェネ装備に着替える
- 課題11: バフが消えたら報告
- 課題12: トレハン装備に着替えてファーストタッチ
- コメント文
- おまけ:抜刀せずにWSを打ってみる
今までのBLM.luaでは、キャラ1とキャラ2の黒魔2人がいる場合に所持している装備が微妙に違うでしょうから、困ってしまいます。そこでファイル名にキャラ名を入れることでこの2人を区別することができます。
このようにして2つのファイルで別々に異なる装備セットを記述します。実際にBLM.luaをコピーして、キャラ名を入れてみてください。1人しかいない場合でも名前を入れてみてください。それで、//gs reloadして認識されるかどうか確認しましょう。
キャラ1:Ayanami | Ayanami_BLM.lua |
キャラ2:Asuka | Asuka_BLM.lua |
このようにして2つのファイルで別々に異なる装備セットを記述します。実際にBLM.luaをコピーして、キャラ名を入れてみてください。1人しかいない場合でも名前を入れてみてください。それで、//gs reloadして認識されるかどうか確認しましょう。
キャラ数が多くなり、ジョブも増えていき、さらに別サーバーのキャラまでとなると、さすがにdataフォルダーがごちゃごちゃしてきます。そこでキャラクターごとのフォルダーを作って、その中にluaファイルを置くことで整理することが可能です。
Windower4\addons\GearSwap\data\
このキャラ毎のフォルダーの中には、BLM.luaというファイル名でもいいし、Ayanami_BLM.luaというファイル名でも認識します。もし、将来的に別サーバーでも遊ぶことがあったら、キャラ名は違うものにしてください。
Windower4\addons\GearSwap\data\
- Ayanami
- Asuka
- Ikari
- Ritsuko
- Misato
このキャラ毎のフォルダーの中には、BLM.luaというファイル名でもいいし、Ayanami_BLM.luaというファイル名でも認識します。もし、将来的に別サーバーでも遊ぶことがあったら、キャラ名は違うものにしてください。
他のキャラのluaファイルをコピーしてきて、装備セットを変える場合に所持していないものがあるかどうかをチェックする必要があります。
- //gs reloadしてから
- //gs validateコマンドを実行すると所持していない装備が表示されます。
問題:この1文がsets.aftercastに入っていますが、着替えてくれません。原因はなぜでしょう。
正解:waisteがミススペル。実際はwaist="まほろばの帯", でなければならない。
このように自分で書いてしまうと、こんなことをやらかしてしまいます。そして、//gs validateはエラー検出しないし、//gs reloadもエラーを教えてくれません。
waiste="まほろばの帯",
正解:waisteがミススペル。実際はwaist="まほろばの帯", でなければならない。
このように自分で書いてしまうと、こんなことをやらかしてしまいます。そして、//gs validateはエラー検出しないし、//gs reloadもエラーを教えてくれません。
問題:この1文がsets.aftercastに入っていますが、着替えてくれません。原因はなぜでしょう。
正解:feetはミススペルではありません。正解はlegsです。GTショウス+2は両脚装備なのでfeetでは着替えてくれません。
覚え方は、1フィート、2フィートといって何歩で距離を測る国があるから、feetは両足と覚えるとよいでしょう。
ちなみにフィートをいまだに使っている国は、リベリア、ミャンマー、アメリカの3国です。なぜメートルにしないのか信じられないですね。
面積をいまだに東京ドームでしか表せない国もどうかしてますがw 「ドーム200個分です」んな分かるかww
feet="GTショウス+2",
正解:feetはミススペルではありません。正解はlegsです。GTショウス+2は両脚装備なのでfeetでは着替えてくれません。
覚え方は、1フィート、2フィートといって何歩で距離を測る国があるから、feetは両足と覚えるとよいでしょう。
ちなみにフィートをいまだに使っている国は、リベリア、ミャンマー、アメリカの3国です。なぜメートルにしないのか信じられないですね。
面積をいまだに東京ドームでしか表せない国もどうかしてますがw 「ドーム200個分です」んな分かるかww
あるイベントに対してprecastやmidcastで装備を変えるのが基本的な使い方ですが、ここではあるイベントに対してコマンドを実行させてみます。
例としてスニーク詠唱する前にスニークアイコンを切ってみましょう。
すでにマクロで次のようにしている人もいると思いますが、手動でメニューからスニークを選んだ場合は対応できません。
GearSwapでは次のようにsend_commandを使ってCancel 71を実行することでアイコンを切ることが可能です。
このIf文は、現在詠唱中の魔法がスニークで、尚且つ詠唱対象が自分の場合にCancel 71しろという意味です。
では、詠唱対象が自分以外のプレーヤーの場合はどうしたらいいでしょうか。Reactのページを読んだ人ならReactを使えばいいんじゃないかと
思うかもしれませんが、以下の理由で却下です。
GearSwapで対応できますが、考えてみてください。
じゃあ、せっかくなのでスニークをもらったら、Cancel 71をやって、移動速度アップ装備orリジェネ装備orリフレ装備に着替えてみましょう。
ここで賢い人なら、あれ?ってことは最初のサンプルは・・・・と気づくことがあるはずです。
例としてスニーク詠唱する前にスニークアイコンを切ってみましょう。
すでにマクロで次のようにしている人もいると思いますが、手動でメニューからスニークを選んだ場合は対応できません。
/con cancel 71 /ma スニーク <me>
GearSwapでは次のようにsend_commandを使ってCancel 71を実行することでアイコンを切ることが可能です。
このIf文は、現在詠唱中の魔法がスニークで、尚且つ詠唱対象が自分の場合にCancel 71しろという意味です。
function midcast(spell) if spell.english == 'Sneak' and spell.target.name == player.name then send_command('cancel 71;') return end end
では、詠唱対象が自分以外のプレーヤーの場合はどうしたらいいでしょうか。Reactのページを読んだ人ならReactを使えばいいんじゃないかと
思うかもしれませんが、以下の理由で却下です。
- 誰がスニークしてくるのか分からないので、考えられるキャラ名をすべて登録しなければならないのは煩雑。
- 野良で他の外人とパーティを組んでいる場合に外人がスニークしてくれた場合に対応できない。(そんなケースはないでしょうけど)
GearSwapで対応できますが、考えてみてください。
じゃあ、せっかくなのでスニークをもらったら、Cancel 71をやって、移動速度アップ装備orリジェネ装備orリフレ装備に着替えてみましょう。
ここで賢い人なら、あれ?ってことは最初のサンプルは・・・・と気づくことがあるはずです。
白魔のmidcastでsend_commandを入れておきます
elseif string.find(spell.name, 'カーズナ') then send_command('send ' .. spell.target.name .. ' gs equip sets.Cursna;') equip(sets.midcastCursna)
カーズナをもらうキャラのluaファイルにsets.Cursnaを定義してください。
sets.Cursna={ legs="シャブテクウィス", left_ring="サイダリング", right_ring="ブレンモドリング", }
白魔のmidcastでsend_commandを入れておきます
elseif string.find(spell.name, 'ケアル') then send_command('send ' .. spell.target.name .. ' gs equip sets.Cure;') equip(sets.midcastCure)
ケアルをもらうキャラのluaファイルにsets.Cureを定義してください。
sets.Cure={ right_ear="オネイロスピアス", head="シャブテアーメット", hands="ブレムテグローブ", }
ここで問題になるのはケアルガ系とケアルラ系です。対象<t>となっているキャラは反応しますが、ケアルガの範囲内にいるその他のキャラはイベントが発生しないため着替えることができません。
printコマンドを使えばspell.typeやspell.nameの内容をコンソールウィンドウに表示できます。ところが、spell.nameは文字化けしてしまうので確認することができません。
2バイトコードに変換してechoでチャットウィンドウに表示すればこの問題を回避することができます。
spell.type: WhiteMagic
spell.name: ケアル
と表示されるはずです。
function precast(spell) print (spell.type) print (spell.name) end
2バイトコードに変換してechoでチャットウィンドウに表示すればこの問題を回避することができます。
function precast(spell) send_command(windower.to_shift_jis("@input /echo spell.type: " ..spell.type )) send_command(windower.to_shift_jis("@input /echo spell.name: " ..spell.name )) end自分のluaファイルに上記の2行をコピペしてケアルを詠唱して確認してみてください。
spell.type: WhiteMagic
spell.name: ケアル
と表示されるはずです。
ナイトなら物理カット、魔法カット、ブレスカットの3種。青魔なら被ダメカット、TP装備、リフレ装備に自動で切り替えられるようにしたいところです。これを手動でやるとしたら、普段はTP装備にしておいて、マクロボタンで被ダメカットに切り替える。もしくは、面倒な相手をやるときはluaファイルを編集して通常装備を被ダメカットにして・・・ そうでないときはTP装備に変更して。といった具合に考えたくない話になってしまいます。
自動切換えを実現するための基本的な考え方は、
では、変数の宣言ですがluaファイルの先頭に次のような行を追加してください。
そして、マクロから指示を受け取るためにはself_commandという関数を使用します。
aftercastでは、このamodeの値に応じて装備セットを切り替えます。最初のamodeの宣言で初期値を2にしてありましたが、普段はTPセットにしておくという意味です。
最後にマクロボタンの定義です。
被ダメカット
1行目: /con gs c defense
リフレ装備
1行目: /con gs c magic
TP装備
1行目: /con gs c physical
装備セットの名前やself_commandのパラメーターは自分が分かりやすいものにしてください。注意:パラメーター名には日本語は使えません。
function aftercast(spell) equip(sets.aftercastX) -- 被ダメカット --equip(sets.aftercastM) -- 魔攻 --equip(sets.aftercastP) -- TPセット end
自動切換えを実現するための基本的な考え方は、
- 現在の装備モードを示す変数を用意しておいて、その変数をマクロで変更する。
- aftercastではその変数の値に応じて装備を変更する。
では、変数の宣言ですがluaファイルの先頭に次のような行を追加してください。
local amode = 2
そして、マクロから指示を受け取るためにはself_commandという関数を使用します。
function self_command(command) if command == "defense" then send_command(windower.to_shift_jis('@input /echo 防御モード')) equip(sets.aftercastX) -- 被ダメカット amode = 0 elseif command == "magic" then send_command(windower.to_shift_jis('@input /echo 魔攻モード')) equip(sets.aftercastM) -- 魔攻 amode = 1 elseif command == "physical" then send_command(windower.to_shift_jis('@input /echo TPモード')) equip(sets.aftercastP) -- TPセット amode = 2 end end
aftercastでは、このamodeの値に応じて装備セットを切り替えます。最初のamodeの宣言で初期値を2にしてありましたが、普段はTPセットにしておくという意味です。
function aftercast(spell) if amode == 0 then equip(sets.aftercastX) -- 被ダメカット elseif amode == 1 then equip(sets.aftercastM) -- 魔攻 else equip(sets.aftercastP) -- TPセット end end
最後にマクロボタンの定義です。
被ダメカット
1行目: /con gs c defense
リフレ装備
1行目: /con gs c magic
TP装備
1行目: /con gs c physical
装備セットの名前やself_commandのパラメーターは自分が分かりやすいものにしてください。注意:パラメーター名には日本語は使えません。
レベル違いのアルマスや同じ名前のアクセサリを左右の耳に装備する場合にうまくいかない場合がありますが、別々のワードローブに保存しておいてワードローブ指定することで着替えることができます。bag="保存場所"で指定しますが、モグワードローブではなくワードローブ、その後の数字は半角です。
例:bag="ワードローブ2",
サンプル
例:bag="ワードローブ2",
サンプル
main={ name="アルマス", bag="ワードローブ4", augments={'STR+99 DEX+99 AGI+99 MND+99','DMG:+99','Weapon skill damage +99%',}}, sub={ name="アルマス", bag="ワードローブ3", augments={'STR+99 DEX+99 AGI+99 MND+99','DMG:+99','Weapon skill damage +99%',}},
課題6ではスニークをもらった場合に自動的にスニークアイコンを切ってリジェネ/リゲイン/リフレ/移動速度アップ装備に着替える方法を説明しましたが、自分にスニークをかける場合のことは全く考慮されていませんでした。midcastでsend spell.target.name exec Sneak.txtを実行して、このスクリプトの中でCancel 71とgs equip sets.Sneakを実行させるというやり方でしたが、自身にスニークをした場合は最終的にaftercastが実行されるのでsets.Sneakの意味がなくなります。スニのあとはたいていインビジもするから、スニのことしか考えてないとか、どうせマウントするからそもそもスニ使わないよね、とかもっともなご批判も考えられますが、どうしてもスニが必要なサーバーの人だけここの説明を参考にしてください。
1. スニークアイコンを切るタイミング
precastでもmidcastでもどちらでも構いませんが、FC装備に着替えて詠唱したいのでmidcastでCancel 71を実行します。
send でスニーク対象にexec sneak.txtを送信しているので、スニークをもらう側のケースも対応可能です。
function midcast(spell) if spell.name == "スペクトラルジグ" or spell.name == "スニーク" then send_command('send ' .. spell.target.name .. ' exec sneak.txt;') return end end
2. リジェネ/リゲイン/リフレ/移動速度アップ装備に着替える
aftercastでspell.nameの内容をチェックして切り替えればいいだけです。ここではスニーク >> インビジのケースもあるのでインビジもチェックしてください。あとは、サポ踊/白/赤で使いそうなジョブのluaファイルに記述すれば完了です。
function aftercast(spell) if spell.name == "スペクトラルジグ" or spell.name == "スニーク" or spell.name == "インビジ" then equip(sets.Sneak) else equip(sets.aftercast) end end
MetusやOdinをやっている時にバフを消去されることがあります。ヘイストくらいなら無視してもいいんですが、マジックバリアやランパートだと致命傷になります。しかも、このマジックバリアのアイコンは特徴のないアイコンなので分別が難しいです。そこでマジックバリアが消えたら報告してくれるような仕組みをGearSwapで記述してみましょう。
使うのはbuff_change関数です。
function buff_change(name, gain, buff_details)
nameはバフ名、gainは true/falseのブーリアン、buff_detailsはテーブルです。
まず、nameに何が来るのか分からないので、チャットウィンドウに書き出してみます。すると、日本語でプロテスとかヘイストとかアクアベールとか分かりやすい名称になっていることが分かります。そしてマジックバリアとランパートはどちらも"魔法バリア"だということが分かりました。
send_commandで "/ma マジックバリア <me>" でもいいんですが、どういうタイミングなのか分からないのでこのようにしてみました。<call10>で音を鳴らしてくれるのも便利だと思います。
Valhallaでは入手経路がないので検証できていませんが、寝てしまったときにHPスリップ装備に着替えて対応するといった使い方もできるようです。
↓たぶんこんな感じ
使うのはbuff_change関数です。
function buff_change(name, gain, buff_details)
nameはバフ名、gainは true/falseのブーリアン、buff_detailsはテーブルです。
まず、nameに何が来るのか分からないので、チャットウィンドウに書き出してみます。すると、日本語でプロテスとかヘイストとかアクアベールとか分かりやすい名称になっていることが分かります。そしてマジックバリアとランパートはどちらも"魔法バリア"だということが分かりました。
function buff_change(name, gain, buff_details) if name == '魔法バリア' then if not gain then send_command(windower.to_shift_jis("input /party マジックバリア消失! <call10>")) end end end
send_commandで "/ma マジックバリア <me>" でもいいんですが、どういうタイミングなのか分からないのでこのようにしてみました。<call10>で音を鳴らしてくれるのも便利だと思います。
Valhallaでは入手経路がないので検証できていませんが、寝てしまったときにHPスリップ装備に着替えて対応するといった使い方もできるようです。
↓たぶんこんな感じ
function buff_change(name, gain, buff_details) if name == '睡眠' then --if player.status == 'Engaged' then -- 抜刀時 if gain then -- 睡眠状態 equip({neck="サクリフィストルク",}) -- HPスリップ装備に変更 else -- 通常装備に戻す equip(sets.aftercast) end --end end end
これはジョブによっても違うでしょうし、個人の趣味の問題もあるので、一概にこれがFA的なことは言いませんが、目的はただひとつ。トレハンを乗せて倒したい。GearSwapと/equipsetコマンドの相性の悪さ問題があるので、まず考えられるのはself_commandに//gs c thを送ってトレハン装備に着替えてから1発殴るというのがひとつの方法です。
マクロ: TH
/con gs c th
ではウルガランの巨人はどうでしょうか。近くにOgopogoがいるので、できれば遠くから遠隔/魔法/挑発で釣りたいですよね。遠隔攻撃した際にトレハン装備に着替えるのはいいのですが、サッシェにトレハンのオーグメントを付けていたりすると使えない方法と言えます。では、挑発したときにトレハン装備に着替えるのはどうでしょうか。precastで挑発かどうかを判定してトレハン装備に着替えて、midcastは何もしない。aftercastは通常装備に着替えるようにすればいけそうです。特定の魔法で(例えばディアの時だけ)トレハン装備に着替えるというのもよさそうです。
このGearSwapのページはValhallaで遊んでいる人以外にも読まれているようなので簡単に説明すると、Valhallaの挑発はカスタム仕様となっていて10秒間のリゲインが付きます。しかも、クロスジョブという仕組みのおかげでどのジョブでも挑発を使えるようになっています。
最後に黒魔がデュナミスの石像をワンショットする時にINT装備ではなくトレハン装備に着替えてトレハンを乗せるという方法を考えてみましょう。Valhallaの石像なら2系で倒せる程度のHPなのでインフィニティコア回収なら黒魔でやるのが簡単です。仮にワンショットできないような相手なら、2つのマクロを用意しておいてTHモードかINTモードを切り替えてやればよさそうです。
マクロ:THモード
/con gs c th
マクロ:INTモード
/con gs c int
マクロ: TH
/con gs c th
function self_command(command) if command == "th" then equip(sets.th) end end
ではウルガランの巨人はどうでしょうか。近くにOgopogoがいるので、できれば遠くから遠隔/魔法/挑発で釣りたいですよね。遠隔攻撃した際にトレハン装備に着替えるのはいいのですが、サッシェにトレハンのオーグメントを付けていたりすると使えない方法と言えます。では、挑発したときにトレハン装備に着替えるのはどうでしょうか。precastで挑発かどうかを判定してトレハン装備に着替えて、midcastは何もしない。aftercastは通常装備に着替えるようにすればいけそうです。特定の魔法で(例えばディアの時だけ)トレハン装備に着替えるというのもよさそうです。
このGearSwapのページはValhallaで遊んでいる人以外にも読まれているようなので簡単に説明すると、Valhallaの挑発はカスタム仕様となっていて10秒間のリゲインが付きます。しかも、クロスジョブという仕組みのおかげでどのジョブでも挑発を使えるようになっています。
function precast(spell) if spell.name == '挑発' then equip(sets.th) return end end function midcast(spell) if spell.name == '挑発' then return end end
最後に黒魔がデュナミスの石像をワンショットする時にINT装備ではなくトレハン装備に着替えてトレハンを乗せるという方法を考えてみましょう。Valhallaの石像なら2系で倒せる程度のHPなのでインフィニティコア回収なら黒魔でやるのが簡単です。仮にワンショットできないような相手なら、2つのマクロを用意しておいてTHモードかINTモードを切り替えてやればよさそうです。
マクロ:THモード
/con gs c th
マクロ:INTモード
/con gs c int
function self_command(command) if command == "int" then send_command(windower.to_shift_jis('@input /echo モード[INT]')) tmode = 0 elseif command == "th" then send_command(windower.to_shift_jis('@input /echo モード[TH]')) tmode = 1 end end function midcast(spell) if spell.type == 'BlackMagic' then if tmode == 0 then equip(sets.midcastINT) else equip(sets.midcastTH) end end end
GithubやGearSwapのサンプルLUAを見た人ならもうお分かりでしょうが、--で始まる行はコメント扱いにすることができます。
ファイルのヘッダーとして次のように変更履歴を記録してもいいし、以前の装備はそのままコメントとして残しておいてもよいでしょう。
ファイルのヘッダーとして次のように変更履歴を記録してもいいし、以前の装備はそのままコメントとして残しておいてもよいでしょう。
-- -- Created: 2022/01/25 -- Version: 1.4 -- Level : 99 -- Revision: -- 2022/02/01 FC装備追加 -- 2022/02/07 被ダメカット装備追加 -- --left_ring="レベッチェリング", left_ring={ name="塊土の指輪", augments={'MND+8','"Cure" potency +3%','Lightning resistance+5','"Refresh"+2',}},
TPを貯めておいて、WSが打てるくらいの距離まで雑魚に近寄って、抜刀しない状態でWSマクロを実行してみてください。
どうですか? 打てましたか? 次に//gs disableやって同じことをやってみましょう。打てませんよね。
自分に打つタイプのWS(ミルキル、ダガン)なら雑魚がいなくても打てます。どうですか? GearSwap楽しくなりました?
以上でレッスンは終わりです。これはあくまで基本です。sets.precast.Cureのような記述方法もあるし、召喚士はちょっと違う書き方を
しないと動きません。\Windower4\addons\GearSwap\beta_examples_and_information\にあるサンプルも見てください。
どうですか? 打てましたか? 次に//gs disableやって同じことをやってみましょう。打てませんよね。
自分に打つタイプのWS(ミルキル、ダガン)なら雑魚がいなくても打てます。どうですか? GearSwap楽しくなりました?
以上でレッスンは終わりです。これはあくまで基本です。sets.precast.Cureのような記述方法もあるし、召喚士はちょっと違う書き方を
しないと動きません。\Windower4\addons\GearSwap\beta_examples_and_information\にあるサンプルも見てください。