查看: 135|回复: 2
收起左侧

[讨论交流] 动画框架拆解分析讨论

[复制链接]

19

主题

1447

帖子

33万

积分

游戏VIP联动部

Rank: 16Rank: 16Rank: 16Rank: 16

点赞
26
贡献
45
猫币
0
精华
0
金元
334378
积分
336500
发表于 2025-1-14 09:44:52 | 显示全部楼层 |阅读模式

马上注册领取绝版勋章

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 zhuertie888 于 2025-1-17 20:20 编辑

这几天被动画框架搞得焦头烂额,下载DAR OAR MCO等动作框架一堆前置还不兼容,简单的问题被大神弄复杂了。
删除所有动画框架,直接在游戏本体文件替换实验,找到指定路径Skyrim Special Edition下Data 下meshes\actors\character\animations\就可以直接运行游戏会覆盖原游戏动画。但只能执行一套动画,怎样分开执行多套动画?
如此动画框架还有什么意义,
所谓的动画框架就是在游戏原有功能上实现部分脚本判定功能,加了子文件夹如25034等的条件判断 IsActorBase("Skyrim.esm"| 0x00000007) AND    玩家0x00000007   AND    OR    链接下一条指令,文件前缀名不统一  被弄得乱七八糟不兼容。
还弄了N多前置插件,基本没什么鸟用,我要弄减法动作框架
干脆自己弄个动画框架,执行最原始简单的命令,把动作组分开就可以。添加按键识别延时,方向键识别脚本,把子文件动作,设定变量,定义按钮在animations下执行一次。叫 二百五动画框架,简称RBW框架,看清起来名字很高端,鼓掌。。。。
需要解决类似手柄模拟器类似的宏定义指令代码
鼠标左键连击两次 执行animations下的子文件夹12000的动作组如1hm_attackrightpowerforward
鼠标右键连击两次 执行animations下的子文件夹22000的动作组如h2h_attackrightpowerforward
重击连续动作组 条件动作组 等分开的指令动作
添加按键识别延时,方向键识别脚本
网上找到了这个KeyLogicExpansion脚本插件,弄得我都不会玩了,,得重新编写


animations下的子文件夹如,32000或42000的,攻击动作组,闲置动作组 和条件动画
female女性动作文件
mt_idle.HKX闲置文件名
示例条件
IsActorValuePercentageLessThan(24, 0.5)   血液24百分50
IsActorValuePercentageLessThan(25, 0.3)  蓝25百分30
IsActorValuePercentageLessThan(26, 0.3)  体力26百分30
KeyLogicExpansion



简单说就是要复制或编写一套鼠标键手柄指令,返璞归真如动作游戏,上上下左右 打出连招,执行子文件夹组合动作和条件动作闲置动作,不需要乱七八糟的前置,就这么简单 RBW很牛X











评分

参与人数 1贡献 +3 金元 +5 点赞 +5 收起 理由
932325611 + 3 + 5 + 5 很给力

查看全部评分

回复

使用道具 举报

19

主题

1447

帖子

33万

积分

游戏VIP联动部

Rank: 16Rank: 16Rank: 16Rank: 16

点赞
26
贡献
45
猫币
0
精华
0
金元
334378
积分
336500
 楼主| 发表于 2025-1-15 09:05:12 | 显示全部楼层
本帖最后由 zhuertie888 于 2025-1-18 09:01 编辑

现在的软件都能AI编程了,想把鼠标键盘代码以及AI智能对话,引入上古卷轴的动画框架中



想弄个二百五RBM框架

开发中,直接定义按键指令,不需要MCM菜单,像模拟器一样动作包不需要解压,放近指定文件夹直接执行1hm 2hmw文件

这个是DAR框架下弄得实验,去前置二百五枪法
http://www.9dmgamemod.com/thread-324125-1-1.html
各位前辈大神,体验后给个建议或帮助,,弄好了按键定义判断,直接更换文件夹动作包,就可以对应连招,MOD是方便大家以后使用的。不知道上古卷轴库函数是否有,
按键判定,如果有就不用弄脚本了  。以下AI写的,还没弄好
import pygameimport randomdef IsWornHasKeyword(file, item_id):    # 这里需要根据具体的实现添加逻辑    return Falsedef IsActorBase(file, actor_id):    # 这里需要根据具体的实现添加逻辑    return Falsedef Random(threshold):    return random.random() < thresholddef main():    pygame.init()    screen = pygame.display.set_mode((800, 600))    pygame.display.set_caption("Game Example")    running = True    while running:        for event in pygame.event.get():            if event.type == pygame.QUIT:                running = False        # 获取鼠标按键状态        mouse_buttons = pygame.mouse.get_pressed()        # 检查鼠标左键是否被按下        mouse_left_pressed = mouse_buttons[0]        # 原有的逻辑        result1 = IsWornHasKeyword("Skyrim.esm", 0x0006C0EC)        result2 = IsActorBase("Skyrim.esm", 0x00000007)        result3 = Random(0.25)        # 最终结果结合鼠标左键状态        final_result = result1 and result2 and result3 and mouse_left_pressed        print("最终结果:", final_result)        pygame.display.flip()    pygame.quit()if __name__ == "__main__":    main()



方向判断


using UnityEngine;public class KeyCountHandler : MonoBehaviour{    private int wCount = 0;    private int aCount = 0;    private int dCount = 0;    private int sCount = 0;    void Update()    {        if (Input.GetKeyDown(KeyCode.W))        {            wCount++;        }        if (Input.GetKeyDown(KeyCode.A))        {            aCount++;        }        if (Input.GetKeyDown(KeyCode.D))        {            dCount++;        }        if (Input.GetKeyDown(KeyCode.S))        {            sCount++;        }        // 假设 IsEquippedRightType 和 IsActorBase 是已有的函数或方法,这里需要根据实际情况实现        if (IsEquippedRightType(6) && IsActorBase("Skyrim.esm", 0x00000007))        {            if (wCount > 10)            {                // 执行一些操作,例如移动速度加快等                Debug.Log("W key pressed more than 10 times");            }            if (aCount > 5)            {                // 执行一些操作,例如向左转向等                Debug.Log("A key pressed more than 5 times");            }            if (dCount > 5)            {                // 执行一些操作,例如向右转向等                Debug.Log("D key pressed more than 5 times");            }            if (sCount > 10)            {                // 执行一些操作,例如后退速度加快等                Debug.Log("S key pressed more than 10 times");            }        }    }    // 这里需要根据实际情况实现 IsEquippedRightType 函数    private bool IsEquippedRightType(int type)    {        // 示例实现,实际情况需根据具体需求修改        return false;     }    // 这里需要根据实际情况实现 IsActorBase 函数    private bool IsActorBase(string esm, int value)    {        // 示例实现,实际情况需根据具体需求修改        return false;     }}

回复

使用道具 举报

13

主题

1347

帖子

4万

积分

游戏终结者

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

点赞
7
贡献
36
猫币
0
精华
0
金元
18362
积分
46589
发表于 2025-1-14 17:44:02 | 显示全部楼层
我了个龟龟,大佬啊,不过确实,简化一下挺好的,一万个前置
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|玖大猫论坛

GMT+8, 2025-7-22 05:16

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