站内搜索

搜索
热搜: 活动 交友 discuz

iFAction 世界需要你的想象力!

多面手MOD(通用角色)设置另一套攻击动作动画教学

10

主题

51

帖子

452

积分

iF村庄

Rank: 5Rank: 5

积分
452
发表于 2020-5-7 17:16:35 | 显示全部楼层 |阅读模式
本帖最后由 小雨微梁 于 2020-5-23 00:53 编辑

为了最大化兼容性,我并没有把动作动画设置整合到MOD中。如果想要整合版的,自定义阵营MOD中整合了。
上教程:
ARPG版:
打开LActor脚本
ctrl-f,搜索以下内容

动作效验与修正

把整个function actorMove覆盖

     function actorMove(){
        speedRecovery();
        //动作效验与修正
        if(!_sf.actionLock && !_sf.skillChant){
            if(isAtk){
                if(isMove){
                    character.setAction(4,false,true,true);
                }else{
                    if(RV.NowSet.findArmsId(RV.GameData.actor.equips.arms).type == 1){ //modify
                         character.setAction(generalist.action,false,true,true);
                        }else{
                          character.setAction(3,false,true,true);                  
                        }
                }
                isAtk = false;
            }else if(isRun && isMove){//跑动场合
                character.setAction(2,false);
            }else if(isMove){//行走场合
                character.setAction(1,false);
            }else{//站立场合
                waitJump();
                if(jumpWait == 0){
                    jumpTimes = 0;
                }
                isJump = false;
                character.setAction(0,false);
            }
        }
        character.resetPublicBlock();
        if(_sf.Speed[1] != 0 && _sf.Speed[0] != 0) {
            character.selfMove = 3;
        }else if(_sf.Speed[1] != 0){
            character.selfMove = 1;
        }else if(_sf.Speed[0] != 0){
            character.selfMove = 2;
        }else{
            character.selfMove = 0;
        }
        character.x += _sf.Speed[1];
        character.y += _sf.Speed[0];

        moveWait += (Math.abs(_sf.Speed[1]) || Math.abs(_sf.Speed[0]));
        if(moveWait > 10){
            moveWait = 0;
            if(_sf.camp == 0){
                RV.GameData.step += 1;
            }
            _sf.moveNum += 1;
        }

        if(character.CannotMoveY && !isJumpBlock()){
            _sf.Speed[0] = 0;
        }
    }

10

主题

51

帖子

452

积分

iF村庄

Rank: 5Rank: 5

积分
452
 楼主| 发表于 2020-5-7 17:16:54 | 显示全部楼层

ACT版

同样搜索

动作校验与验证

覆盖
     function actorMove(){
        speedRecovery();
        //动作效验与修正
        if(!_sf.actionLock && !_sf.skillChant){
            if(isSquat && !isRSquat && !isJump){
                var size = character.getValidSize(0);
                var rect = character.getCharactersRect(character.x,character.y,size[0],size[1]);
                if(Math.abs(character.isCanMoveUpDown(rect.left,rect.right,rect.top,true,rect)) <= 2){
                    isSquat = false;
                    character.resetValidSize();
                }
            }
            if(isAtk){
                if(isSquat){
                    character.setAction(8,false,true,true);
                }else if(isJump && Math.abs( _sf.Speed[0]) >= _sf.GravityNum + 0.1){
                    character.setAction(7,false,true,true);
                }else if(isMove){
                    character.setAction(11,false,true,true);
                }else{
                    if(RV.NowSet.findArmsId(RV.GameData.actor.equips.arms).type == 1 && Coo.generalist_on){
                        character.setAction(generalist.action,false,true,true);            //modify
                    }                        
                    character.setAction(6,false,true,true);
                }
                isAtk = false;
            }else if(isSquat){//下蹲场合
                waitJump();
                if(jumpWait == 0){
                    jumpTimes = 0;
                }
                isJump = false;
                character.setAction(5,true);
            }else if(isJump && _sf.Speed[0] < 0){//起跳场合
                character.setAction(1,false);
            }else if(isJump && _sf.Speed[0] >= 0){//准备落地场合
                isJump = false;
                character.setAction(2,false);
            }else if(!character.IsInSand &&  _sf.Speed[0] >= _sf.GravityNum + 0.1){//落地场合
                character.setAction(2,false);
            }else if(isRun && isMove){//跑动场合
                waitJump();
                isJump = false;
                if(jumpWait == 0){
                    jumpTimes = 0;
                }
                character.setAction(4,false);
            }else if(isMove){//行走场合
                waitJump();
                isJump = false;
                if(jumpWait == 0){
                    jumpTimes = 0;
                }
                character.setAction(3,false);
            }else{//站立场合
                waitJump();
                if(jumpWait == 0){
                    jumpTimes = 0;
                }
                isJump = false;
                character.setAction(0,false);
            }
        }

        if(_sf.IsGravity){
            var tempSand = 0;
            if(character.BlockBelow >= 2000){
                tempSand = character.BlockBelow;
            }else if(character.BlockContact >= 2000){
                tempSand = character.BlockContact;
            }
            if(tempSand >= 3000) {
                character.IsInSand = true;
                character.SandNum = (tempSand - 3000) / 100;
            }else if(tempSand >= 2000){
                character.IsInSand = true;
                character.SandNum = (tempSand - 2000) / 100;
            }else{
                character.IsInSand = false;
            }
            if(character.IsInSand){//如果角色在沙地中,则给一个较大的缓冲阻力
                _sf.Speed[0] += character.SandNum;
                if(_sf.Speed[0] > character.SandNum){
                    _sf.Speed[0] = character.SandNum;
                }
            }else{
                _sf.Speed[0] += _sf.GravityNum;
            }

        }
        character.resetPublicBlock();
        character.y += _sf.Speed[0];
        character.x += _sf.Speed[1];

        moveWait += Math.abs(_sf.Speed[1]);
        if(moveWait > 10){
            moveWait = 0;
            if(_sf.camp == 0){
                RV.GameData.step += 1;
            }
            _sf.moveNum += 1;
        }
        if(RV.NowSet.setAll.ctrlUpDown == 1 && !_sf.IsGravity){
            moveWaitUD += Math.abs(_sf.Speed[0]);
            if(moveWaitUD > 10){
                moveWaitUD = 0;
                if(_sf.camp == 0){
                    RV.GameData.step += 1;
                }
                _sf.moveNum += 1;
            }
        }


        //if(character.CannotMoveX && !isJumpBlock()){
        //    _sf.Speed[1] = 0;
        //}
        if(character.CannotMoveY && !isJumpBlock()){
            _sf.Speed[0] = 0;
        }
    }

44

主题

507

帖子

4071

积分

管理员

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

积分
4071

iFAction官方导师

发表于 2020-5-7 19:55:21 | 显示全部楼层
谢谢大佬分享
欢迎来到iFAction的大家庭,世界需要你的想象力!
下面是为你准备的各种传送门,祝你在这里玩的开心~
|下载iFAction最新版 |iFAction教学区 |iFAction提问区| 素材交流| 游戏发布区| 喝茶聊天嗑瓜子的欢乐水区|

28

主题

316

帖子

4583

积分

iF世界

次元文明-Original Sin

Rank: 8Rank: 8

积分
4583

摩点支持者内测用户

QQ
发表于 2020-5-7 20:17:05 | 显示全部楼层
tql

0

主题

2

帖子

6

积分

iF尘埃

Rank: 1

积分
6
发表于 2021-4-5 07:31:25 | 显示全部楼层
谢谢大佬分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们
QQ群:977585123
iFAction下载
Windows客户端
反馈
意见建议
iFAction

iFAction

京ICP备15053274号-1

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.