查看: 4255|回复: 4

[已经解决] 是否可以定义函数完成伤害计算式的计算?

[复制链接]
梦石
0
星屑
60
在线时间
350 小时
注册时间
2012-7-25
回帖
118
发表于 2016-6-26 23:21:39 | 显示全部楼层 |阅读模式

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

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

×
我想声明一个函数用于战斗中伤害的计算,它要在数据库中使用,像这种形式:
示例.png
问题在于我不知道如何在插件js中声明一个函数使之能在数据库中调用。
当时ruby可以在脚本最前边声明使之有效,而js不行。
梦石
0
星屑
55
在线时间
196 小时
注册时间
2014-8-7
回帖
41
发表于 2016-6-26 23:59:36 | 显示全部楼层
如果你只是想達到那樣的效果而不是為了自己寫插件的話可以考慮使用Yanfly的DamageCore,那個可以在注釋里用代碼來寫。
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2016-6-27 14:32:21 | 显示全部楼层
本帖最后由 tseyik 于 2016-6-27 14:34 编辑

參考
ダメージ計算プラグイン
http://tm.lucky-duet.com/viewtopic.php?f=23&t=1430
ダメージ計算プラグイン[pre lang="javascript"]/*:
* @plugindesc ダメージ計算プラグイン ver1.00
* @author めろん
*
* @param atk
* @desc ATK計算式
* @default 4 * a.atk
*
* @param def
* @desc DEF計算式
* @default b.def * 2
*
* @param matk
* @desc MATK計算式
* @default 4 * a.mat
*
* @param mdef
* @desc MDEF計算式
* @default 3 * b.mdf
*
* @param x
* @desc x計算式
* @default a.atk * (100 - b.def) / 100
*
* @param y
* @desc y計算式
* @default b.result().critical ? 4 : (100 - b.def) / 100
*
* @help
* actor        aのアクター判定        ex: actor ? Math.min(a.mat, 9999) : Math.min(a.mat, 99999)
* g        bの防御判定                ex: g ? a.atk * 4 : a.atk / 2
*/

(function() {
       
        var parameters = PluginManager.parameters('ExDamageFormula');
        var atkEx = String(parameters['atk'] || '4 * a.atk');
        var matkEx = String(parameters['matk'] || '4 * a.mat');
        var defEx = String(parameters['def'] || 'b.def * 2');
        var mdefEx = String(parameters['mdef'] || 'b.mdf * 2');
        var xEx = String(parameters['x'] || '999999');
        var yEx = String(parameters['y'] || '999999');
       
        Game_Action.prototype.evalDamageFormula = function(target) {
                try {
                        var item = this.item();
                        var a = this.subject();
                        var b = target;
                        var v = $gameVariables._data;
                        var sign = ([3, 4].contains(item.damage.type) ? -1 : 1);
                       
                        var actor = a.isActor();
                        var g = b.isGuard();
                       
                        var user = this.subject();
                        var t = target;
                        var i = this.item();
                       
                        var atk = eval(atkEx);
                        var def = eval(defEx);
                        var matk = eval(matkEx);
                        var mdef = eval(mdefEx);
                        var x = eval(xEx);
                        var y = eval(yEx);
               
                        var value = Math.max(eval(item.damage.formula), 0) * sign;
                        if (isNaN(value)) value = 0;
                        return value;
                } catch (e) {
                        return 0;
                }

        };
       
})();[/pre]
回复

使用道具 举报

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
回帖
1464
发表于 2016-6-27 21:00:38 | 显示全部楼层
var evaldam =   function( a,b,c) {return a + b + c} ; evaldam(112,55,3)



或者你随便建一个插件 创建里 直接写  

var evaldam =   function( a,b,c) {return a + b + c}

然后在 伤害计算里写

evaldam(112,55,3)


如果觉得太多会太乱
可以插件里这么写

es = {}
es.e1 =  function( a,b,c) {return a + b + c}
es.e2 =  function( a,b,c) {return a + b + c}

然后公式里 用  es.e1(1,1,1)

点评

解决了,谢谢  发表于 2016-7-10 11:57

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部