Project1

标题: 萌新又来提问题了,怎么设计一个类似梦幻西游善恶有报... [打印本页]

作者: fengge127    时间: 2018-12-23 20:47
标题: 萌新又来提问题了,怎么设计一个类似梦幻西游善恶有报...
本帖最后由 fengge127 于 2018-12-23 20:48 编辑

以下是善恶有报技能效果:

善恶有报,指的是攻击时一定概率给予对手造成双倍的伤害或恢复一定气血。恶报可以给对手造成双倍的伤害,善报可能为对方恢复造成伤害50%气血。

恶报可以给对手造成双倍的伤害,善报可能为对方恢复一定气血。。
几率:恶报几率为70%-75%,善报为25-30%。

我想设计一个剧情,让猪脚先做几件好事,获得一点金币,然后在野外遇到一个美女在洗澡,选择偷看,被美女逮住没收所有金币,然后大彻大悟,领悟了善恶有报这个新手村最牛技能,开始他的冒险旅程,大家觉得咋样?还有,要怎样才能实现这个技能?

另,如果我准备设计一把每进行一次战斗,攻击力+1的可成长新手剑,要怎样设计?问题有点多哈,希望大佬可以帮帮我
作者: 无名小生    时间: 2018-12-24 10:47
技能设定为公共事件,条件变量1为随机数70-75,条件变量2为随机数25-30,然后再用公共事件
作者: fengge127    时间: 2018-12-24 12:43
无名小生 发表于 2018-12-24 10:47
技能设定为公共事件,条件变量1为随机数70-75,条件变量2为随机数25-30,然后再用公共事件 ...

公共事件怎么设置?还有随机数要怎么设置?大神,能说明白点吗?

我以前学过java,但是现在忘的差不多啦

可以把善恶有报的技能伤害公式设置为一个额外参数吗?比如x,然后定义x

从1-100中产生一个随机数a

如果(1《a《70)
技能类型=hp恢复
动画=回复
x=50%猪脚造成的伤害(也是一个公式)
否则
技能类型=物理攻击
动画=物理攻击
x=2*猪脚造成伤害

我们把善恶有报的概率设为一个固定值好了,不用百度百科的资料

但问题是,我不知到咋写代码,也不知道这种方法可行吗?

或者按照你说的方法(只是我的猜测,我并不知道你的具体想法)

是不是可以把善恶有报设计为两个技能,善报和恶报分开设计,然后在使用技能时调取公共事件产生一个1-100的随机数,如果随机数是1-70,就放恶报技能,如果随机数是71-100,就放善报?
作者: 风之竹    时间: 2018-12-24 13:15
JS都是伪随机数
作者: soulsaga    时间: 2018-12-24 14:37
伤害公式里设定吧?
作者: fengge127    时间: 2018-12-24 15:02
本帖最后由 fengge127 于 2018-12-24 15:04 编辑
风之竹 发表于 2018-12-24 13:15
JS都是伪随机数


伪随机数是什么意思?
作者: fengge127    时间: 2018-12-24 15:03
soulsaga 发表于 2018-12-24 14:37
伤害公式里设定吧?

伤害公式计算貌似实现不了
作者: fengge127    时间: 2018-12-24 16:03
刚我看了下yep大神写的战斗损伤核心js,发现战斗伤害应该和以下代码有关,有学编程的大佬可以告诉我怎么修改吗?

BattleManager.actionFlatDamage = function(actionArgs) {
    if (actionArgs[0].match(/(?:VARIABLE|VAR)[ ](\d+)/i)) {
      var value = parseInt($gameVariables.value(parseInt(RegExp.$1)));
    } else if (actionArgs[0].match(/([\+\-]\d+)/i)) {
      var value = parseInt(RegExp.$1);
    } else if (actionArgs[0].match(/(\d+)/i)) {
      var value = parseInt(RegExp.$1);
    } else {
      return true;
    }
    $gameSystem._flatDamage = value;
    return true;
};
作者: fengge127    时间: 2018-12-24 16:05
还有代码备注里的这段代码,貌似也有点价值

* Skill and Item Notetags:
*   <damage formula>
*    value = 500;
*    value += 2500;
*   </damage formula>
*   This will overwrite the damage formula found at the top and use the
*   strings in the middle as the formula instead. Keep in mind that using
*   comments here will cancel out anything following after. New variables can
*   be used, too, to make damage calculations a bit easier.
*
*   value   - Refers to the amount that will become the base damage value.
*   user    - Refers to the actor/enemy using the skill/item.
*   subject - Refers to the actor/enemy using the skill/item.
*   target  - Refers to the target actor/enemy on the receiving end of
*             the skill/item.
*
作者: 无名小生    时间: 2018-12-24 17:34
我只会点事件,代码的不会,我觉得你是大神才对
作者: soulsaga    时间: 2018-12-24 19:03
https://rpg.blue/forum.php?mod=v ... =%E5%85%AC%E5%BC%8F
善用搜索
作者: fengge127    时间: 2018-12-24 19:09
无名小生 发表于 2018-12-24 17:34
我只会点事件,代码的不会,我觉得你是大神才对

我也不是虽然我是学编程的,但是后来转型做其他工作了,好久没接触代码了。。。

我现在又有了新想法,把善恶有报设计成一个给对面加血技能,成功率30%,然后添加一个公共事件

执行代码,完成以下判断

如果当前技能命中
不执行任何操作
否则(当前技能miss)
消除miss提示
对方当前目标血量减少巴拉巴拉(双倍伤害公式)

问题是我得重新研究代码,不然还写不出来。。。
作者: fengge127    时间: 2018-12-24 20:38
soulsaga 发表于 2018-12-24 19:03
https://rpg.blue/forum.php?mod=viewthread&tid=405085&highlight=%E5%85%AC%E5%BC%8F
善用搜索

大佬,膜拜

我刚把伤害公式写为Math.random()<0.7 ? (a.atk * 8 - b.def * 4):(b.def - a.atk * 2)

意思是70%几率造成双倍伤害,30%几率造成负0.5倍伤害,但是这游戏的源代码中,对怪物造成的伤害如果是负值,不会治疗对面,而是伤害变为0,回头我只用修改下这块就行了

再次感谢!
作者: soulsaga    时间: 2018-12-24 20:40
本帖最后由 soulsaga 于 2018-12-24 20:47 编辑
fengge127 发表于 2018-12-24 20:38
大佬,膜拜

我刚把伤害公式写为Math.random()


你看看回复技能的公式..看看能不能抄过 来?

话说这公式..不应该是ATK-DEF吗..怎么反过来了?
作者: fengge127    时间: 2018-12-24 21:17
soulsaga 发表于 2018-12-24 20:40
你看看回复技能的公式..看看能不能抄过 来?

话说这公式..不应该是ATK-DEF吗..怎么反过来了? ...

回复的时候伤害类型是hp恢复,伤害时类型是hp伤害

-0.5*(a.atk * 4 - b.def * 2)= b.def-2a.atk

我刚找了半天源代码也没找到~ Damage 类。。。。

以下是我从帮助文档获取的情报

~ Damage 类
JS 库 > ~ Damage 类
伤害数据的JSON。

属性
critical elementId formula type variance
属性

critical Boolean
是否允许必杀。

elementId Number
属性编号。

formula String
伤害公式。

type Number
伤害类型。

variance Number
伤害离散度


还有一种实现方法是直接写一个js脚本,先在~ Damage 类中新建一个function(工具),让工具实现以下功能

创建一个0-1的随机数var s=Math.random()
if(s<0.7)
type Number=hp伤害(其实是另一种全英文表达方式)
formula String=双倍
else
type Number=hp恢复(其实是另一种全英文表达方式)
formula String=0.5倍

然后把伤害类型设为恢复,数值取0,添加一个公共事件,公共事件执行上述工具,不知道能成功不,不过我现在还没找到~ Damage 类


作者: soulsaga    时间: 2018-12-24 21:28
你可以做个空技能..然后技能调用公共事件,一定几率强制行动回复技能..否则调用强制行动正常攻击
作者: fengge127    时间: 2018-12-25 12:45
soulsaga 发表于 2018-12-24 21:28
你可以做个空技能..然后技能调用公共事件,一定几率强制行动回复技能..否则调用强制行动正常攻击 ...

嗯嗯,这个想法不错,回头我再研究研究,最近两天表妹结婚,没时间看代码,过两天再





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1