条件(防具を装備していないとき)の式

godhand
記事: 19
登録日時: 2016年5月17日(火) 19:34

条件(防具を装備していないとき)の式

投稿記事by godhand » 2016年6月12日(日) 20:35

防具タイプID(5)の防具を装備していないときだけスキルを使えるようにしたかったのですが、もう少し簡略化したいと思い質問しました。
アクターが防具を装備していない場合のスクリプトは、
if(!$gameActors.actor(アクターID).hasArmor($dataArmors[防具ID])){
というのは分かりましたが、これをアクターの判別だけはずしてそのまま「[防具ID]を装備していない場合」と書き換える式はあるでしょうか?
または「防具タイプID(5)に防具を装備していない場合」というのでもかまいません。
(↑むしろこっちのほうが書く行が少なくてすむ。)
なぜならアクター40人以上と防具タイプID(5)の防具が数十個もあるためアクター毎に、しかも防具を分けて判別を書くと条件が100を超えるため、それどころかコードの量の多さに容量もその分大きくなるのでは?と思いました。

ご存知のかたいらっしゃいましたら教えてください。
(ちなみにプラグインなしで希望します)

名無し蛙
記事: 305
登録日時: 2015年11月23日(月) 02:46

Re: 条件(防具を装備していないとき)の式

投稿記事by 名無し蛙 » 2016年6月12日(日) 21:28

どうもお疲れ様です。

いまいち状況がよく分からないのですが話を簡略化すると
「パーティの中で誰も防具タイプID5の防具を身に着けていない場合」
という条件式でよろしいのでしょうか?
それでしたら

コード: 全て選択

!$gameParty.allMembers().some(function(member) {
    return member.armors().some(function(armor) {
        return armor.atypeId === 5;
    });
});

で行けると思います。
改行をスペースにでも変えてもらえればイベント「条件分岐」のスクリプト式に入れても動きます。
文脈だけ見ると防具タイプではなく装備タイプっぽいんですけどその場合はatypeIdをetypeIdに変えるだけです。
godhand
記事: 19
登録日時: 2016年5月17日(火) 19:34

Re: 条件(防具を装備していないとき)の式

投稿記事by godhand » 2016年6月12日(日) 23:29

返信ありがとうございます。
すみません記述が間違っていたようで、正しくは防具タイプID(5)ではなく装備タイプID(5)でした。
説明下手なので申し訳ありませんが、もうちょっと詳しく言いいます。、
「パーティの中で誰も防具タイプID5の防具を身に着けていない場合」ではなく、スキル使用者が装備タイプ(5)に防具を装備していないときという条件です。
パーティ3人で戦闘に突入した場合、名無し蛙さんのおっしゃる条件だと、全員が装備タイプ(5)に装備していないときだけしかスキルが使えないということになってしまうのでアクター1と2は装備していてスキルは使えないが、アクター3は装備していないのでスキルを使えるという風にしたいです。
コードありがとうございます。
参考にさせていただきます。
名無し蛙
記事: 305
登録日時: 2015年11月23日(月) 02:46

Re: 条件(防具を装備していないとき)の式

投稿記事by 名無し蛙 » 2016年6月13日(月) 21:14

うーん。まだ状況がよく分からないですね。
身も蓋もない事を書けば多分

コード: 全て選択

(function () {

var _Game_Actor_skills = Game_Actor.prototype.skills;
Game_Actor.prototype.skills = function() {
    var list = _Game_Actor_skills.call(this);
    var result = !this.armors().some(function(armor) {
        return armor.etypeId === 5;
    });
    if (result) list.push($dataSkills[任意のスキルID]);
    return list;
};

}());


これをプラグインとして保存して「任意のスキルID」の部分を適当に書き換えて貰えれば動くとは思います。
ただgodhandさんが今どのように実装しようとして
何に行き詰まりを感じているのか上手く想像出来ないのであまり突っ込んだ事は言えないです。申し訳ない。
godhand
記事: 19
登録日時: 2016年5月17日(火) 19:34

Re: 条件(防具を装備していないとき)の式

投稿記事by godhand » 2016年6月14日(火) 01:21

>>名無し蛙さん
ありがとうございます。
プラグインとして導入するとおかげで思ったとおりの動作をしました。
やはりイベントだけで全て組むならプラグインのほうがいいですかね・・
あとゲームスタートでみんなが最初からこのスキルを覚えている状態になってたのでこの辺はどこをいじればいいでしょうか?
名無し蛙
記事: 305
登録日時: 2015年11月23日(月) 02:46

Re: 条件(防具を装備していないとき)の式

投稿記事by 名無し蛙 » 2016年6月14日(火) 16:43

コード: 全て選択

(function () {

var _Game_Actor_skills = Game_Actor.prototype.skills;
Game_Actor.prototype.skills = function() {
    var list = _Game_Actor_skills.call(this);
    var result = !this.armors().some(function(armor) {
        return armor.etypeId === 5;
    });
    result &&= $gameSwitches.value(任意のスイッチID);
    if (result) list.push($dataSkills[任意のスキルID]);
    return list;
};

}());


これで「アクセサリを装備していない事」に加えて任意のスイッチIDがONの時に任意のスキルが使える状態になると思います。
スクリプト改造(プラグイン)はイベント操作の上位互換という訳ではないですが
見ての通り10行前後で済む処理なので文法を覚えておくと色々楽だと思いますよ。
godhand
記事: 19
登録日時: 2016年5月17日(火) 19:34

Re: 条件(防具を装備していないとき)の式

投稿記事by godhand » 2016年6月14日(火) 23:53

ありがとうございます。
とりあえず指輪を装備してないのを条件にスキルが使えるようにはなりました。
だんだん思ったとうりのスキルに近づいています。
装備タイプIDの条件文がわかったのでまた時間があるときにちょっとづつ改変を加えて試していこうと思います。

文法はまだ基本的なif文とか呼び出し程度のものしかわかりませんが最初よりはだいぶ成長したと思います。
このようにコードを提供してくださるおかげでサイトには載ってないようなことも解るのでだいぶ助かります。

お付き合いいただきありがとうございました。
またわからなくなったら質問させていただきますね。

“MV:質問” へ戻る