查看: 7263|回复: 18

[已经过期] 怎麼用變量控制敵人強度?

[复制链接]
梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
回帖
729
发表于 2016-1-5 14:58:44 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
變量數值越高,敵人越強,比如變量每增加1 就加10魔法物理防禦之類的 怎麼實現?
梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
回帖
1464
发表于 2016-1-5 16:43:59 | 显示全部楼层
你可以给他一个状态
回复

使用道具 举报

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
回帖
729
 楼主| 发表于 2016-1-5 16:48:02 | 显示全部楼层
汪汪 发表于 2016-1-5 16:43
你可以给他一个状态

那狀態又如何用變量決定強度{:2_276:}
回复

使用道具 举报

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
回帖
729
 楼主| 发表于 2016-1-5 21:15:39 | 显示全部楼层
問問~求助!!!!!!!!
回复

使用道具 举报

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
回帖
729
 楼主| 发表于 2016-1-6 02:04:22 | 显示全部楼层
求助!!!!!!!!
回复

使用道具 举报

梦石
0
星屑
223
在线时间
85 小时
注册时间
2015-12-22
回帖
48
发表于 2016-1-6 10:26:35 | 显示全部楼层
做N个加强不同程度的状态,根据不同的变量赋予敌人这些状态!
回复

使用道具 举报

梦石
0
星屑
497
在线时间
266 小时
注册时间
2015-12-8
回帖
729
 楼主| 发表于 2016-1-6 10:56:58 | 显示全部楼层
梧桐晔语 发表于 2016-1-6 10:26
做N个加强不同程度的状态,根据不同的变量赋予敌人这些状态!

如果我要做100不同強度的敵人,不就要做100個狀態?{:2_276:}
回复

使用道具 举报

梦石
0
星屑
50
在线时间
28 小时
注册时间
2005-10-24
回帖
148
发表于 2016-1-6 11:24:51 来自手机 | 显示全部楼层
小叮鈴 发表于 2016-1-6 10:56
如果我要做100不同強度的敵人,不就要做100個狀態?

不然你就码代码写插件啊。
毕竟事件里没有能直接调整敌人参数的指令(只能调整hpmptp而且并非最大值)。
觉得100太烦,你也可以限定主角最高40级啊,像空轨FC一样。而且个人觉得40级即max的游戏数值平衡比100好调整多了,现在的玩家也没有以前那么热衷练级了

点评

就算40級 那也要做40種不同的狀態 太= ="坑  发表于 2016-1-6 13:49
回复

使用道具 举报

梦石
0
星屑
223
在线时间
85 小时
注册时间
2015-12-22
回帖
48
发表于 2016-1-6 12:04:33 | 显示全部楼层
小叮鈴 发表于 2016-1-6 10:56
如果我要做100不同強度的敵人,不就要做100個狀態?

不用啊,做几个你需要的就可以,比如攻击力+N%,血量+N%之类的,然后在敌群编辑那控制分歧条件赋予这群敌人就可以了,也可以用变量控制随机什么的,我是不会写代码,只能用各种游戏本身的功能实现。

点评

具體怎麼做?就是沒有辦法直接加敵人的能力阿  发表于 2016-1-6 13:49
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2016-1-6 12:21:14 | 显示全部楼层
動態資料庫[fold=動態資料庫]//=============================================================================
// DynamicDatabase.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.1 2016/01/03 iterateとisEmptyが重複定義されないよう対応
// 1.0.0 2015/12/28 初版
// ----------------------------------------------------------------------------
// [Blog]   : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================

/*:
* @plugindesc 動的データベース構築プラグイン
* @author トリアコンタン
*
* @help データベースの各項目を動的な値に変更するプラグインです。
* 変数やJavaScriptの関数を使ってより高度なデータベースを構築できます。
*
* 注意! データベースファイルを保存、更新するプラグインと併用しないでください。
*
* 文字列項目:各項目に直接入力した制御文字が利用できます。
* 数値項目:メモ欄に入力した制御文字+JavaScript計算式が利用できます。
* 選択項目:メモ欄に入力した制御文字+JavaScript計算式が利用できます。
*      ※一番上の選択肢が 0 になります。
*
* 数値、選択項目の場合、メモ欄に以下の通り指定してください。
*  <DD(項目名):(計算式)>
*
* 設定例1(アイテムの価格に10番の変数の2倍の値を設定したい場合)
*  <DD価格:\V[10] * 2>
*
* 設定例2(武器の攻撃力に、元の値と10番の変数の値との乗算値を設定したい場合)
*  <DD攻撃力:元の値 * \V[10]>
*
* 対象データベースは以下の全項目になります。
*  スキル
*  アイテム
*  武器
*  防具
*  敵キャラ
*  ステート 
*
* このプラグインにはプラグインコマンドはありません。
*
* 利用規約:
*  作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
*  についても制限はありません。
*  このプラグインはもうあなたのものです。
*/

(function () {
    'use strict';

    //=============================================================================
    // Object
    //  プロパティの定義
    //=============================================================================
    if (!Object.prototype.hasOwnProperty('iterate')) {
        Object.defineProperty(Object.prototype, 'iterate', {
            value : function (handler) {
                Object.keys(this).forEach(function (key, index) {
                    handler.call(this, key, this[key], index);
                }, this);
            }
        });
    }

    if (!Object.prototype.hasOwnProperty('isEmpty')) {
        Object.defineProperty(Object.prototype, 'isEmpty', {
            value : function () {
                return Object.keys(this).length <= 0;
            }
        });
    }

    Number.prototype.times = function(handler) {
        var i = 0; while(i < this) handler.call(this, i++);
    };

    //=============================================================================
    // Scene_Boot
    //  ダイナミックデータベースの構築開始
    //=============================================================================
    var _Scene_Boot_start = Scene_Boot.prototype.start;
    Scene_Boot.prototype.start = function() {
        _Scene_Boot_start.call(this);
        DynamicDatabaseManager.makeDynamicDatabase();
    };
})();

//=============================================================================
// DynamicDatabaseManager
//  ダイナミックデータベースの構築処理を定義します。
//=============================================================================
function DynamicDatabaseManager() {
    throw new Error('This is a static class');
}

DynamicDatabaseManager._columnMapper = null;
DynamicDatabaseManager._targetData = null;

DynamicDatabaseManager._columnMapperCoomon = {
    animationId : 'アニメーション',
    hitType : '命中タイプ',
    iconIndex : 'アイコン',
    occasion : '使用可能時',
    repeats : '連続回数',
    scope:'範囲',
    speed:'速度補正',
    successRate:'成功率',
    tpCost:'消費TP',
    tpGain:'得TP',
    mpCost:'消費MP',
    damage_elementId:'属性',
    damage_type:'タイプ',
    damage_variance:'分散度',
    price:'価格',
    params_0:'最大HP',
    params_1:'最大MP',
    params_2:'攻撃力',
    params_3:'防御力',
    params_4:'魔法力',
    params_5:'魔法防御',
    params_6:'敏捷性',
    params_7:'運'
};

DynamicDatabaseManager._columnMapperSkills = {
    stypeId:'スキルタイプ',
    requiredWtypeId1:'武器タイプ1',
    requiredWtypeId2:'武器タイプ2'
};

DynamicDatabaseManager._columnMapperItems = {
    itypeId:'アイテムタイプ',
    consumable:'消耗'
};

DynamicDatabaseManager._columnMapperWeapons = {
    wtypeId:'武器タイプ'
};

DynamicDatabaseManager._columnMapperArmors = {
    atypeId:'防具タイプ',
    etypeId:'装備タイプ'
};

DynamicDatabaseManager._columnMapperEnemies = {
    battlerHue : '色相',
    exp : '経験値',
    gold : '所持金'
};

DynamicDatabaseManager._columnMapperStates = {
    autoRemovalTiming:'自動解除のタイミング',
    chanceByDamage:'ダメージで解除_ダメージ',
    maxTurns:'継続ターン数_最大',
    minTurns:'継続ターン数_最小',
    motion:'[SV] モーション',
    overlay:'[SV] 重ね合わせ',
    priority: '優先度',
    removeAtBattleEnd:'戦闘終了時に解除',
    removeByDamage: 'ダメージで解除',
    removeByRestriction: '行動制約で解除',
    removeByWalking: '歩数で解除',
    restriction: '行動制約',
    stepsToRemove: '歩数で解除_歩数'
};

DynamicDatabaseManager._targetDynamicDatabase = {
    $dataSkills : DynamicDatabaseManager._columnMapperSkills,
    $dataItems : DynamicDatabaseManager._columnMapperItems,
    $dataWeapons : DynamicDatabaseManager._columnMapperWeapons,
    $dataArmors : DynamicDatabaseManager._columnMapperArmors,
    $dataEnemies : DynamicDatabaseManager._columnMapperEnemies,
    $dataStates : DynamicDatabaseManager._columnMapperStates
};

DynamicDatabaseManager.makeDynamicDatabase = function() {
    this._setColumnMapperDynamic();
    this._targetDynamicDatabase.iterate(function(dataKey, columnMap) {
        this._makeDynamicData(window[dataKey], columnMap);
    }.bind(this));
};

DynamicDatabaseManager._setColumnMapperDynamic = function() {
    this._getMaxLength('effects').times(function(i) {
        this._columnMapperCoomon['effects_%1_code'.format(i)]   = '使用効果%1_タイプ'.format(i + 1);
        this._columnMapperCoomon['effects_%1_value1'.format(i)] = '使用効果%1_内容1'.format(i + 1);
        this._columnMapperCoomon['effects_%1_value2'.format(i)] = '使用効果%1_内容2'.format(i + 1);
    }.bind(this));
    this._getMaxLength('traits').times(function(i) {
        this._columnMapperCoomon['traits_%1_code'.format(i)]  = '特徴%1_タイプ'.format(i + 1);
        this._columnMapperCoomon['traits_%1_value'.format(i)] = '特徴%1_内容'.format(i + 1);
    }.bind(this));
    this._getMaxLength('actions').times(function(i) {
        this._columnMapperEnemies['actions_%1_conditionParam1'.format(i)] = '行動%1_条件1'.format(i + 1);
        this._columnMapperEnemies['actions_%1_conditionParam2'.format(i)] = '行動%1_条件2'.format(i + 1);
        this._columnMapperEnemies['actions_%1_conditionType'.format(i)]   = '行動%1_条件タイプ'.format(i + 1);
        this._columnMapperEnemies['actions_%1_rating'.format(i)]          = '行動%1_R'.format(i + 1);
        this._columnMapperEnemies['actions_%1_skillId'.format(i)]         = '行動%1_スキル'.format(i + 1);
    }.bind(this));
    Number(3).times(function(i) {
        this._columnMapperEnemies['dropItems_%1_denominator'.format(i)] = 'ドロップアイテム%1_ドロップアイテム'.format(i + 1);
        this._columnMapperEnemies['dropItems_%1_kind'.format(i)]        = 'ドロップアイテム%1_出現率'.format(i + 1);
    }.bind(this));
};

DynamicDatabaseManager._getMaxLength = function(keyName) {
    var length = 0;
    this._targetDynamicDatabase.iterate(function(dataKey) {
        var dataArray = window[dataKey];
        dataArray.forEach(function(data) {
            if (data != null && data.hasOwnProperty(keyName)) length = Math.max(data[keyName].length, length);
        });
    });
    return length;
};

DynamicDatabaseManager._makeDynamicData = function(dataArray, columnMap) {
    this._columnMapper = columnMap;
    dataArray.forEach(function(data) {
        if (data != null) {
            this._targetData = data;
            data.iterate(function(key, value) {this._makeProperty(data, key, key, value)}.bind(this));
        }
    }.bind(this));
};

DynamicDatabaseManager._makeProperty = function(parent, keyPath, key, child) {
    if (key === 'meta') return;
    switch (typeof child) {
        case 'string':
            if (child.match(/\\/g))
                this._makePropertyString(parent, key, child);
            break;
        case 'boolean':
        case 'number':
            if (parent.meta.isEmpty()) return;
            var propName = this._columnMapper[keyPath] || this._columnMapperCoomon[keyPath];
            var metaTag = 'DD' + propName;
            if (propName != null && parent.meta[metaTag] != null)
                this._makePropertyFormula(parent, key, child, metaTag);
            parent[propName] = child;
            break;
        case 'object':
            if (parent.meta.isEmpty()) return;
            child.meta = parent.meta;
            child.iterate(function(valuesKey, valuesItem) {
                this._makeProperty(child, keyPath + '_' + valuesKey, valuesKey, valuesItem);
            }.bind(this));
            break;
    }
};

DynamicDatabaseManager._makePropertyFormula = function(parent, key, child, metaTag) {
    var data = this._targetData, データ = this._targetData;
    Object.defineProperty(parent, key, {
        get: function() {
            try {
                var prev = child, 元の値 = child;
                var result = eval(DynamicDatabaseManager._convertEscapeCharacters(this.meta[metaTag]));
                return typeof child === 'number' ? DynamicDatabaseManager._parseIntStrict(result) : result == true;
            } catch (e) {
                return DynamicDatabaseManager._processEvalException(e, this.meta[metaTag]);
            }
        },
        configurable: false
    });
};

DynamicDatabaseManager._makePropertyString = function(parent, key, child) {
    Object.defineProperty(parent, key, {
        get: function() {
            return DynamicDatabaseManager._convertEscapeCharacters(child);
        },
        configurable: false
    });
};

DynamicDatabaseManager._convertEscapeCharacters = function(text) {
    if (text == null) text = '';
    text = text.replace(/\\/g, '\x1b');
    text = text.replace(/\x1b\x1b/g, '\\');
    text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
        return $gameVariables.value(parseInt(arguments[1], 10));
    });
    text = text.replace(/\x1bV\[(\d+)\]/gi, function() {
        return $gameVariables.value(parseInt(arguments[1], 10));
    });
    text = text.replace(/\x1bS\[(\d+)\]/gi, function() {
        return $gameSwitches.value(parseInt(arguments[1], 10)) ? '1' : '0';
    });
    text = text.replace(/\x1bN\[(\d+)\]/gi, function() {
        var n = parseInt(arguments[1]);
        var actor = n >= 1 ? $gameActors.actor(n) : null;
        return actor ? actor.name() : '';
    });
    text = text.replace(/\x1bP\[(\d+)\]/gi, function() {
        var n = parseInt(arguments[1]);
        var actor = n >= 1 ? $gameParty.members()[n - 1] : null;
        return actor ? actor.name() : '';
    });
    text = text.replace(/\x1bG/gi, TextManager.currencyUnit);
    return text;
};

DynamicDatabaseManager._parseIntStrict = function(value, errorMessage) {
    var result = parseInt(value, 10);
    if (isNaN(result)) throw Error('指定した値[' + value + ']が数値ではありません。' + errorMessage);
    return result;
};

DynamicDatabaseManager._processEvalException = function(e, formula) {
    if ($gameTemp.isPlaytest() && Utils.isNwjs()) {
        var window = require('nw.gui').Window.get();
        if (!window.isDevToolsOpen()) {
            var devTool = window.showDevTools();
            devTool.moveTo(0, 0);
            devTool.resizeTo(Graphics.width, Graphics.height);
            window.focus();
        }
    }
    console.log('計算式の評価中にエラーが発生しました。強制的に 0 が返却されます。');
    console.log('- 計算式     : ' + formula);
    console.log('- エラー原因 : ' + e.toString());
    return 0;
};
[/fold]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部