角色数据编写

角色数据信息

  • RenderList键值说明

:::warning{title=概念区分注意} 旧时代Minecraft由于国内外翻译问题,通常将材质、纹理混为一谈,如材质包,实际名称为资源包或纹理包,其中纹理包仅对贴图进行修改调整。

而材质是指渲染层面的material! :::

key数据类型说明对应标点
Namestr角色名字-
Identifierstr角色id,用来绑定相关资产(模型、纹理、动画等)-
RenderMaterialstr角色材质(选填)-
DebugRenderbool角色是否为调试外观形角色(选填)-
DebugMaterialstr角色调试材质,当DebugRender为True时生效(选填)-
RenderControllerListstrlist指定角色渲染控制器(选填)-
MaterialsDictListByRenderControllerdictlist角色材质适配制定角色渲染控制器(选填)-
IsLockedbool角色是否锁定以禁止使用-
LockedInfostr角色锁定后的弹窗提示消息内容-
DamageTypestr角色属性-
Levelint角色品级(1~5)-
Infostr角色简介文字-
CVstr角色CV名字-
AttackTimesint角色普通攻击段数-
ResetAttackTimerfloat角色普通攻击后恢复重置攻击次数的时间(似乎已弃用,建议默认填写1.5)-
ModNamestr角色所在副包的mod名称-
ClientSystemstr角色所在副包的客户端系统实例名称-
ServerSystemstr角色所在副包的服务端系统实例名称-
IsMainPackPlayerAttackbool是否使用主包的攻击逻辑,若为False,则需要伪继承逻辑函数-
IsMainPackPlayerSkillbool是否使用主包的技能逻辑,若为False,则需要伪继承逻辑函数-
IsMainPackPlayerShanBibool是否使用主包的闪避逻辑,若为False,则需要伪继承逻辑函数-
IsMainPackPlayerBiShaJibool是否使用主包的终极技能逻辑,若为False,则需要伪继承逻辑函数-
IsMainPackPlayerAttackSoundbool是否使用主包的攻击音效逻辑-
IsMainPackAnimationControllerbool是否使用主包的states动画控制器,若为False,则默认使用名为controller.animation.{Identifier}.states的动画控制器-
RenderAnimationListstrlist额外补充的动画列表-
RenderAnimationControllerListstrlist额外补充的动画控制器列表-
RenderSoundNamestr角色待机音效名称-
RenderAttackSoundNamestr角色攻击音效名称(已弃用)-
RenderBeAttackedSoundNamestr角色受击音效名称,当角色所受到的伤害达到最大生命值的10%,将有概率播放-
AttackDictdictdict角色攻击配置-
AdvanceItemListdictlistlist角色突破所需材料配置-
RenderInfoListdictlist角色资料介绍信息-
  • 角色属性类型说明
说明
Dark
Fire
Ice
Grass
Light
Physics
Stone
Water
Wind
名称命名格式示例备注
角色大小动画animation.{RenderId}.scaleanimation.ailian.scale必要
角色待机动画animation.{RenderId}.idleanimation.ailian.idle必要
第一人称待机动画animation.{RenderId}.first_person_idleanimation.ailian.first_person_idle必要
角色走路动画animation.{RenderId}.walkanimation.ailian.walk必要
第三人称走路动画animation.{RenderId}.third_person_walkanimation.ailian.third_person_walk必要
角色跑步动画animation.{RenderId}.sprintanimation.ailian.sprint必要
第三人称跑步动画animation.{RenderId}.third_person_sprintanimation.ailian.third_person_sprint必要
角色潜行中动画animation.{RenderId}.sneak_idleanimation.ailian.sneak_idle必要
第三人称潜行中动画animation.{RenderId}.third_person_sneak_idleanimation.ailian.third_person_sneak_idle必要
角色潜行移动动画animation.{RenderId}.sneakanimation.ailian.sneak必要
第三人称潜行移动中动画animation.{RenderId}.third_person_sneakanimation.ailian.third_person_sneak必要
角色游泳动画animation.{RenderId}.swimanimation.ailian.swim必要
第三人称游泳动画animation.{RenderId}.third_person_swimanimation.ailian.third_person_swim必要
角色坠落动画animation.{RenderId}.fallanimation.ailian.fall必要
第三人称坠落动画animation.{RenderId}.third_person_fallanimation.ailian.third_person_fall必要
角色无武器状态动画animation.{RenderId}.no_weaponanimation.ailian.no_weapon必要,如果不想用可以设置为空动画
第三人称无武器状态动画animation.{RenderId}.third_person_no_weaponanimation.ailian.third_person_no_weapon必要,如果不想用可以设置为空动画
角色攻击动画animation.{RenderId}.attack{attacktime}animation.ailian.attack1必要,假设配置文件AttackTimes为3,则需要有attack1,attack2,attack3动画
第三人称攻击动画animation.{RenderId}.third_person_attack{attacktime}animation.ailian.third_person_attack1必要,假设配置文件AttackTimes为3,则需要有attack1,attack2,attack3动画
  • 角色攻击配置说明
    • key为int数字时,表示普通攻击第几次所使用的配置。
    • key为skill时,表示技能所使用的配置
    • key为bishaji时,表示终极技能所使用的配置
key数据类型说明备注
AttackTimerfloat攻击所需的时长-
DamagePercentfloat造成多少百分比攻击力的伤害-
DamageTimerListfloatlist造成伤害的时间列表需要去BlockBench根据动作填写
ResetTiemrfloat角色普通攻击后恢复重置攻击次数的时间推荐为1.5
SoundNamestr角色攻击音效名根据SoundTimerList播放
RenderSoundNamestr角色攻击说话音效名,50%概率播放根据SoundTimerList播放
SoundTimerListfloatlist延迟多少秒音效播放
Radiusfloat攻击距离最小为3
BetweenAnglefloat攻击角度0.0~360.0
MotionPercentfloattuple攻击位移在造成伤害时玩家会位移,x,y为正时向前
SfxDictdictlist攻击特效列表
ColdDownTimerfloat冷却时间仅限于key为skill使用
Energyint所需能量仅限于key为bishaji的使用
Perspectiveint释放终极技能时摄像机切换的人称仅限于key为bishaji的使用
  • 攻击特效配置说明 目前仅支持序列帧特效!
key数据类型说明备注
FaceCamarabool是否面向摄像机-
SfxIdstr特效Id-
Offsettuple特效坐标偏移三元数组
Rottuple特效角度偏移三元数组
Scaletuple特效大小乘积三元数组
  • 角色突破所需材料配置说明 AdvanceItemList内必须有6个dictlist,表示角色养成中6个突破分别需要的材料
key数据类型说明备注
Idstr物品id-
Typestr类型直接填写为Item
Numint所需数量
  • 角色资料介绍信息 dictlist,游戏内会根据RenderInfoList自上而下排序,每个dict的介绍:
key数据类型说明备注
Titlestr标题-
Typestr类型没有用直接填写为Sound
SoundNamestr播放的音效没有用直接填写为'SoundName'
Contentstr内容
RenderList = [
    {
        'Name': '鲨鱼妹妹',  # 角色名字
        'Identifier': 'ailian',  # 命名空间固定为GlobalConfig.NameSpace
        'RenderMaterial': 'entity_alphatest_netease',     # 材质,不填则默认描边模式
        'DebugMaterial': 'entity_alphatest_netease',    # 调试材质
        'RenderControllerList': ['controller.render.al'],   # 渲染控制器,为空表示使用默认渲染控制器
        # 当RenderControllerList存在,则materials也修改
        'MaterialsDictListByRenderController': [
            {
                'Key': 'al_hs',
                'Value': 'dfm_al_hs_leg'
            },
            {
                'Key': 'al_hs_up',
                'Value': 'dfm_al_hs_legup'
            }
        ],
        'IsLocked': False,
        'DebugRender': True,
        'LockedInfo': '加班一周,通宵了,实在赶不赢,希望理解,下次开放!',
        'DamageType': 'Ice',
        'Level': 5,
        'Info': '维多家政公司\ncv:魏婴',
        'CV': '魏婴',
        'AttackTimes': 4,
        'ResetAttackTimer': 1.5,
        # 这个角色所在的副包实例信息
        'ModName': 'ailian',
        'ClientSystem': 'ailianClientSystem',
        'ServerSystem': 'ailianServerSystem',
        # 是否使用主包的逻辑执行,反之直接给到副包Client中执行。因为继承这边很难操作,这样做一个伪继承
        'IsMainPackPlayerAttack': False,
        'IsMainPackPlayerSkill': False,
        'IsMainPackPlayerShanBi': True,
        'IsMainPackPlayerBiShaJi': False,
        # 是否使用主包攻击音效逻辑,不包含角色音效
        'IsMainPackPlayerAttackSound': True,
        # 是否使用主包的states动画控制器,为False则默认使用controller.animation.{Identifier}.states,scale和weapon照常
        'IsMainPackAnimationController': False,
        # 额外补充动画
        'RenderAnimationList': [
            'newidle',
            'skill',
            'third_person_skill',
            'bishaji',
            'third_person_bishaji',
            'pose2',
            'third_person_pose2',
            'super_sprint_start',
            'super_sprint_idle',
            'super_sprint_stop',
            'third_person_super_sprint_start',
            'third_person_super_sprint_idle',
            'third_person_super_sprint_stop'
        ],
        # 额外补充动画控制器
        'RenderAnimationControllerList': [],
        # 攻击等数据信息
        'RenderSoundName': 'ailian_pose',  # 角色待机说话的声音
        'RenderAttackSoundName': 'None',  # 命中目标的音效,没用
        'RenderBeAttackedSoundName': 'None',   # 受击音效
        'AttackDict': {
            # 如果IsMainPackPlayerAttack为False,那么可以自定义一些AttackDict参数来实现攻击的效果
            # AttackTimer攻击动画的时间
            # DamagePercent 伤害百分比
            # DamageTimer伤害处罚的时间
            # ResetTimer恢复攻击状态为0的间隔时间
            # SoundName攻击音效
            # MotionPercent (x, z)位移比例
            1: {
                'AttackTimer': 0.63,
                'DamagePercent': 0.35,
                'DamageTimerList': [0.33],
                'ResetTimer': 2.00,
                'SoundName': 'ailian_dao',
                'RenderSoundName': 'ailian_attack2',
                'SoundTimerList': [0],
                'Radius': 5,
                'BetweenAngle': 120.0,
                'MotionPercent': (0.35, 0.35),
                'SfxDict': []
            },
            2: {
                'AttackTimer': 1,
                'DamagePercent': 0.30,
                'DamageTimerList': [0.61, 0.71, 0.88, 0.96, 1.04],
                'ResetTimer': 2.33,
                'SoundName': 'ailian_dao',
                'RenderSoundName': 'ailian_attack2',
                'SoundTimerList': [0.50],
                'Radius': 5,
                'BetweenAngle': 120.0,
                'MotionPercent': (0.45, 0.45),
                'SfxDict': []
            },
            3: {
                'AttackTimer': 1.54,
                'DamagePercent': 0.40,
                'DamageTimerList': [0.42, 0.46, 0.54, 0.63, 0.71, 0.75, 0.80, 0.92, 1.00, 1.05, 1.10, 1.15, 1.20, 1.25, 1.30],
                'ResetTimer': 1.46,
                'SoundName': 'ailian_dao3',
                'RenderSoundName': 'ailian_attack2',
                'SoundTimerList': [0.53],
                'Radius': 12.5,
                'BetweenAngle': 120.0,
                'MotionPercent': (0.2, 0.2),
                'SfxDict': []
            },
            4: {
                'AttackTimer': 0.05,
                'DamagePercent': 0.00,
                'DamageTimerList': [],
                'ResetTimer': 0.05,
                'SoundName': 'None',
                'RenderSoundName': 'None',
                'SoundTimerList': [0.33],
                'Radius': 8.5,
                'BetweenAngle': 60.0,
                'MotionPercent': (0, 0),
                'SfxDict': []
            },
            # 本来是这样,但是这个已经是在副包继承了,所以这里参数无意义!
            'skill': {
                'AttackTimer': 1.5,
                'DamagePercent': 0.65,
                'DamageTimerList': [1.08],
                'ResetTimer': 0.10,
                'SoundName': 'ailian_skill',
                'RenderSoundName': 'None',
                'SoundTimerList': [0.0],
                'Radius': 7.0,
                'BetweenAngle': 120.0,
                'MotionPercent': (2, 2),
                'ColdDownTimer': 4,
                'SfxDict': [
                    {
                        'FaceCamara': False,
                        'SfxId': 'ailian_attack',
                        'Offset': (-1, -0.5, 0),
                        'Rot': (-30, -10, 45),
                        'Scale': (3.5, 2.5, 2.5)
                    },
                    {
                        'FaceCamara': False,
                        'SfxId': 'ailian_attack',
                        'Offset': (0, -0.5, 0),
                        'Rot': (-100, -10, 45),
                        'Scale': (3, 3, 3)
                    },
                    {
                        'FaceCamara': False,
                        'SfxId': 'ailian_attack',
                        'Offset': (0, -0.5, 0),
                        'Rot': (-30, 0, 45),
                        'Scale': (3, 3, 3)
                    },
                    {
                        'FaceCamara': False,
                        'SfxId': 'ailian_attack',
                        'Offset': (0, -0.5, 0),
                        'Rot': (-30, 10, 45),
                        'Scale': (3, 3, 3)
                    },
                    {
                        'FaceCamara': True,
                        'SfxId': 'ailian_skill',
                        'Offset': (-3, 5, 0),
                        'Rot': (-30, 10, 45),
                        'Scale': (15, 15, 15)
                    },
                    {
                        'FaceCamara': True,
                        'SfxId': 'ailian_boom',
                        'Offset': (-2.9, -0.5, 0),
                        'Rot': (-30, 10, 45),
                        'Scale': (3, 3, 3)
                    },
                    {
                        'FaceCamara': True,
                        'SfxId': 'ailian_boom2',
                        'Offset': (-2.6, -0.5, 0),
                        'Rot': (-30, 10, 45),
                        'Scale': (4, 4, 4)
                    }
                ]
            },
            'bishaji': {
                'AttackTimer': 3.0,
                'DamagePercent': 3.0,
                'Perspective': 1,
                'DamageTimerList': [1.00, 1.05, 1.10, 1.15, 1.20, 1.25, 1.30, 1.35, 1.40, 1.45, 1.50, 1.55, 1.60, 1.63],
                'ResetTimer': 0.15,
                'SoundName': 'ailian_bishaji2',
                'RenderSoundName': 'None',
                'SoundTimerList': [0.5],
                'Radius': 10.0,
                'BetweenAngle': 120.0,
                'MotionPercent': (0, 0),
                'Energy': 20,
                'SfxDict': []
            }
        },
        # 角色突破所需材料信息
        'AdvanceItemList': [
            [
                {
                    'Id': 'bingya',
                    'Type': 'Item',
                    'Num': 5
                },
                {
                    'Id': 'bingguan',
                    'Type': 'Item',
                    'Num': 1
                }
            ],
            [
                {
                    'Id': 'bingya',
                    'Type': 'Item',
                    'Num': 7
                },
                {
                    'Id': 'bingguan',
                    'Type': 'Item',
                    'Num': 3
                }
            ],
            [
                {
                    'Id': 'bingya',
                    'Type': 'Item',
                    'Num': 10
                },
                {
                    'Id': 'bingguan',
                    'Type': 'Item',
                    'Num': 5
                },
                {
                    'Id': 'bingjing',
                    'Type': 'Item',
                    'Num': 3
                }
            ],
            [
                {
                    'Id': 'bingya',
                    'Type': 'Item',
                    'Num': 15
                },
                {
                    'Id': 'bingguan',
                    'Type': 'Item',
                    'Num': 8
                },
                {
                    'Id': 'bingjing',
                    'Type': 'Item',
                    'Num': 6
                },
                {
                    'Id': 'binghexin',
                    'Type': 'Item',
                    'Num': 3
                }
            ],
            [
                {
                    'Id': 'bingya',
                    'Type': 'Item',
                    'Num': 17
                },
                {
                    'Id': 'bingguan',
                    'Type': 'Item',
                    'Num': 11
                },
                {
                    'Id': 'bingjing',
                    'Type': 'Item',
                    'Num': 9
                },
                {
                    'Id': 'binghexin',
                    'Type': 'Item',
                    'Num': 5
                }
            ],
            [
                {
                    'Id': 'bingya',
                    'Type': 'Item',
                    'Num': 21
                },
                {
                    'Id': 'bingguan',
                    'Type': 'Item',
                    'Num': 14
                },
                {
                    'Id': 'bingjing',
                    'Type': 'Item',
                    'Num': 12
                },
                {
                    'Id': 'binghexin',
                    'Type': 'Item',
                    'Num': 9
                }
            ]
        ],
        # 资料信息
        'RenderInfoList': [
            {
                'Title': '尚未制作',
                'Type': 'Sound',
                'SoundName': 'diaolingkulou_attack',
                'Content': '受极端天气影响,开发组周五提前下班了'
            }
        ]
    }
]
评论交流

文档目录

免神二创文档